Tryag File Manager
Home
-
Turbo Force
Current Path :
/
proc
/
self
/
root
/
usr
/
share
/
doc
/
gawk-3.1.5
/
Upload File :
New :
File
Dir
//proc/self/root/usr/share/doc/gawk-3.1.5/gawk.ps
%!PS-Adobe-2.0 %%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software %%Title: gawk.dvi %%Pages: 352 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: CMBX12 CMR10 CMTT10 CMSY10 CMSL10 CMTI10 CMR12 CMBXTI10 %%+ CMTT12 CMB10 CMMI10 CMR7 CMR9 CMTT9 CMSS10 CMSLTT10 CMCSC10 CMSL9 %%+ CMSY9 CMR8 CMTI9 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o gawk.ps gawk.dvi %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2005.07.26:2314 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: f7b6d320.enc % Thomas Esser, Dec 2002. public domain % % Encoding for: % cmb10 cmbx10 cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 cmbxsl10 % cmdunh10 cmr10 cmr12 cmr17cmr6 cmr7 cmr8 cmr9 cmsl10 cmsl12 cmsl8 % cmsl9 cmss10cmss12 cmss17 cmss8 cmss9 cmssbx10 cmssdc10 cmssi10 % cmssi12 cmssi17 cmssi8cmssi9 cmssq8 cmssqi8 cmvtt10 % /TeXf7b6d320Encoding [ /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /exclam /quotedblright /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /exclamdown /equal /questiondown /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def %%EndProcSet %%BeginProcSet: 09fbbfac.enc % Thomas Esser, Dec 2002. public domain % % Encoding for: % cmsltt10 cmtt10 cmtt12 cmtt8 cmtt9 /TeX09fbbfacEncoding [ /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /dieresis /visiblespace /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /dieresis /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def %%EndProcSet %%BeginProcSet: bbad153f.enc % Thomas Esser, Dec 2002. public domain % % Encoding for: % cmsy10 cmsy5 cmsy6 cmsy7 cmsy8 cmsy9 % /TeXbbad153fEncoding [ /minus /periodcentered /multiply /asteriskmath /divide /diamondmath /plusminus /minusplus /circleplus /circleminus /circlemultiply /circledivide /circledot /circlecopyrt /openbullet /bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal /greaterequal /precedesequal /followsequal /similar /approxequal /propersubset /propersuperset /lessmuch /greatermuch /precedes /follows /arrowleft /arrowright /arrowup /arrowdown /arrowboth /arrownortheast /arrowsoutheast /similarequal /arrowdblleft /arrowdblright /arrowdblup /arrowdbldown /arrowdblboth /arrownorthwest /arrowsouthwest /proportional /prime /infinity /element /owner /triangle /triangleinv /negationslash /mapsto /universal /existential /logicalnot /emptyset /Rfractur /Ifractur /latticetop /perpendicular /aleph /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /union /intersection /unionmulti /logicaland /logicalor /turnstileleft /turnstileright /floorleft /floorright /ceilingleft /ceilingright /braceleft /braceright /angbracketleft /angbracketright /bar /bardbl /arrowbothv /arrowdblbothv /backslash /wreathproduct /radical /coproduct /nabla /integral /unionsq /intersectionsq /subsetsqequal /supersetsqequal /section /dagger /daggerdbl /paragraph /club /diamond /heart /spade /arrowleft /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /minus /periodcentered /multiply /asteriskmath /divide /diamondmath /plusminus /minusplus /circleplus /circleminus /.notdef /.notdef /circlemultiply /circledivide /circledot /circlecopyrt /openbullet /bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal /greaterequal /precedesequal /followsequal /similar /approxequal /propersubset /propersuperset /lessmuch /greatermuch /precedes /follows /arrowleft /spade /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def %%EndProcSet %%BeginProcSet: 74afc74c.enc % Thomas Esser, Dec 2002. public domain % % Encoding for: % cmbxti10 cmff10 cmfi10 cmfib8 cmti10 cmti12 cmti7 cmti8cmti9 cmu10 % /TeX74afc74cEncoding [ /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /exclam /quotedblright /numbersign /sterling /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /exclamdown /equal /questiondown /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def %%EndProcSet %%BeginProcSet: aae443f0.enc % Thomas Esser, Dec 2002. public domain % % Encoding for: % cmmi10 cmmi12 cmmi5 cmmi6 cmmi7 cmmi8 cmmi9 cmmib10 % /TeXaae443f0Encoding [ /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /alpha /beta /gamma /delta /epsilon1 /zeta /eta /theta /iota /kappa /lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon /phi /chi /psi /omega /epsilon /theta1 /pi1 /rho1 /sigma1 /phi1 /arrowlefttophalf /arrowleftbothalf /arrowrighttophalf /arrowrightbothalf /arrowhookleft /arrowhookright /triangleright /triangleleft /zerooldstyle /oneoldstyle /twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle /sevenoldstyle /eightoldstyle /nineoldstyle /period /comma /less /slash /greater /star /partialdiff /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /flat /natural /sharp /slurbelow /slurabove /lscript /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /dotlessi /dotlessj /weierstrass /vector /tie /psi /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /alpha /beta /gamma /delta /epsilon1 /zeta /eta /theta /iota /kappa /lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon /phi /chi /psi /tie /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def %%EndProcSet %%BeginProcSet: 0ef0afca.enc % Thomas Esser, Dec 2002. public domain % % Encoding for: % cmr5 % /TeX0ef0afcaEncoding [ /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /exclam /quotedblright /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def %%EndProcSet %%BeginProcSet: texps.pro %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def @MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N} N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N /setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{ pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B /rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginFont: CMTI9 %!PS-AdobeFont-1.1: CMTI9 1.0 %%CreationDate: 1991 Aug 18 21:08:07 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTI9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /CMTI9 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-35 -250 1148 750}readonly def /UniqueID 5000827 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 9E3948FFB3DF7BFF10C9BDA4EFE5F68A8CB1526990D1357AE6D2F7C2D2EF8496 4E47B39E6712EB8908A3265E5FAB40567E866C244814449F1E993AAB422C3F1D DFA8C7118584F2E5197FD4BFA3A8AE9E953C6CD4672C0FF51E41C3A919749C1A F06650DF4C5E17492164BDBCDF22609A74BFA7F69960A64B9F949FFC2A807458 8579366C4F41BDE1FDFBCC4845FA19BBB6963D65EE8532549274BAEBDFF24FA6 03235D1BE37C06B1938AF369DA75BF38DDBC87A1FF445EAA16E1895ABE9506B9 211955753E447865D33CEF007391D2666A046277A30A49804FFCED3FEA5EB2C3 E52EE14A9F75241EA10C91974CDA6236EB840FD44D6DDE4D9B3266C3B99BD38B D835BCA8CB819C073480FB972CC028D218F6A1D344CE1B63F4FBF2C826F412E1 6E0B05A26125865A14FD7B7030B478BB8BC6BC395335C3BA940E1C348267F4F9 0AF97BBEE253511940F1048E175D3569F7D05A28851B6F50765FEB6C9654FEDC 1BF52F535DB5BB90C1BD5D2EBF75E0AEBE82B20507F3C28A03746781018D4EB2 298E4F2C27ACF73FA73EBE43F014BB575AAD516C0407B29E1653375135ECB74D C91372F06FA8EF37C31AF3FA48AE65318EAA6C34830A5377ABB2DFA5DA53A574 433484BA1466709A4B186761655C8E482833B697673E847C691079E7F1DCB8D6 1AD91101D757B83E2090337D525AEECB028FB3C9F6A6E6AD2F322CFDC5A833E6 1CE4EDBF41FD34FD61630581D222F854A76C2EA9FD72796A7C9CC1F6C2FCCD16 E95CA05826A4ECFADA6A5FB83C41A7131E52BA6585DD6DD78515D8F7327DFC6F 9404F89293D6ACB433CD0802C43F0E74C6C4766A23A6AE3788FE6CAE82E1A104 BAEC8BEFDEFE4F292F625E60362F3886F602CE4121BF0AAD93526314BCBB5971 40091A7BBF7EFB3BA355B88C897D9C70C841DE41309348751EDFFA8675215988 49CB1599834A01EC6CD4FD813AFF97A614F56975775D5F48E9C1A9CE532FAEB1 4EBE20C3FA87CFE03664C428BFC5C894668E507950005BD8C2BCA8998C1FB92C 4E6B791BA05B79F332EB8AF5B0F851B8B7EE372EC0861B09C007CDF43F82D0B7 35446F682A0DA7F4112CDABE4F922EACFCB7B8C88BF550B60957E7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.1: CMR10 1.00B %%CreationDate: 1992 Feb 19 19:54:52 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMR10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-251 -250 1009 969}readonly def /UniqueID 5000793 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C 295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C 4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF 2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E 0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B 43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC 96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65 0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830 B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007 97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8 FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5 20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4 0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20 3E6BB526D2D5B5321EE18DD2A0B15E53BCB8E3E01067B30ED2DD2CB9B06D3122 A737435305D42DE9C6B614926BFD44DF10D14402EBEDFF0B144B1C9BD22D7379 5262FEEAFE31C8A721C2D46AA00C10681BA9970D09F1EA4FA1566B96E221864A 45A24ADAEC63F61C9FD18376D39E0FDDE3FB4FBCDD6A7B66068A99D31CF54CD7 DF2262DA91CCC72889CAA62B1D6F2155CC8E940A2C35D8CD3EC75326188E2D30 1090F31AB50F30AC77D2C445BAF7323389406C44641B3A72C26BCDA442504D03 6C22A3BA1A69E5F87EA400501A3B3231E46F96AC3A6C0E4A4F6F21E0B2BEEF53 E016F34D7003351FD12436520926C632218410359AF9FF167750D3CE0DAC3B91 B310C457402E05C316F400246C8C38B98CC8030F71104BC4FA0505B5EFA4F5C5 9E4FA27C3E790D698690336254D7E34451E692AE23BF5FFBACBDF33E25359BD2 B0E7A0686602568BC87422F32486CB50776C7EAAE7F1BF78B228CA3254510653 3D6368A4985C5FF5A48AEF16E1AB71D7CE2C6649F2CF4B2879D4FA042239B504 F988D2FBE87C3BC784E55B8EE36F1BB5EF14FD5836CA448E139EF8FE221E827D 0608A6B90E08CBF44A30669AF4E20CD5C0C8051E5F86062204AF362DA690B74C B952C9F4799FB2535E47AC019175950A1F3A0D0937016148222B545B1E00A91B 39D2121462F51F736802C523BCFBA894EC11C3353F9BCDF0892C00EB583A4D62 247118996064991B816F9F490FA73861FA614FEC7FC23A5D45310527B6559781 F1C805F0EC931D0C60E70FD5AC55F22E6379D369303F63A0E7069237118DA0A6 5BB55FC6EA1797BC51C1D053401ACD4E9B5E724F4AEB149C38DB0E2BFEE811A9 A94A7405422CDC911CDD97EC4976E27F766A9E3F84387C04C6367509157E4D91 09A1F6DDB59AB9096FC43A6F9773ED9CE3DA6B56D10AEF99FD277F8666E72028 807AEC6C26E5A142496CD41A80EC051E875DF9F547BEF060B969B197AF97608B F7A3740B3153621A680DAEAB0454706C65581255CA9B40078FA6D352737F0165 D834359ABCFDF5C212F8AE9FD50BEE9683E7D5969D183C058E8BDA78F61B61AC 98746B3A1750093A40C17EBD4AEF36BB2DFA1C9AC2A12834DE4623CCC76BF5A7 92B2B2E368D1DF3471D83495B19154836569D2A30F9CB05C0EC499EA5D3184CD BAE8D2A2CF80C6359275B3894B4DAD7F92501BA9A6BD215256CF9F35C2BDD40A D1D949000633FF0B5FC7674BBED71294AD28FF25710E968E85C3FE71046BF0C1 71EF48F8024C28959FBE6E896BD1AFE579764616672C724959FD66C8398ABB5D 6C02C5619866453708E3FDCAC2754E9C333C1123A5F746DC5B2CA9D430263645 A88C743EBEF8C82DA0236FB73D3DCDFF874A1A5928406838A81E40F34816EBEA 0D7A89406A6F492E5E5E6C8C4D85A2B9A83B6A4304B05AB541041AE014C845B4 283CE3F75DA22CB7CD78C67A1F067C79B209BDBA6705D80FBF08CD0FEB9D3293 D9955BF6730BD59495A1F81B708292B509537089D8AC34A06DAE5E8BBB9B0A0D F09BA6723DEA964F06C0E1A6541656470E251F5AFC6677043DE7C6D85B60D3EB B8A4415DBFDE3F29D5FAA0B5CE4BE9559595265FA8BC24A172FBAF9B1AD0A4E1 1CADABC2B71A43098146DBFDF7E126069259EB490CAAB07D5C9D921F6C129F6A C5F5026952316114F144ACF439AB674E2BE407E243BC56D256E415069B4E1392 E082001A8B5F811CF4B03A1268C5ABBE9AB1861330AFCB21EFC1184A7FB9A423 A7BD4D8CC294C686321F70BE33F642B1D796517ADF186C3137A43E3D7BAF1A00 1424CEC933D1A6501B2D369D0E0F2C6562E092F180C1C4B23E979CE502E4FC6F 186CC990AEA3FE79D5B51E3B05FD48A19CEEC0A6027C99AF2D5942459B8A7EF7 CC2F884F1E470D97675AD08A53D26ADA54FE4DD62D9226393F4B79547338C33D 920F26B57D0837671CF60E15F39993C7FAC8DF8CA9FBB543650CE052461F96DF A4B992A2BD30E18373767BF316500DCAF27787EF24DA28C046CCFC11D980FB32 3E96DF05DDF07A92EF3D27DD1E78071792281ECC4BD22B3F993AC0176BC92692 1A3DEBEE39197075C3682960069BA5083D34E510C4BFEA25365F5110F652E7D8 E02B493F2697E516BD56F11A408FDFC4849DF99864D5F395741DFDB4D9E11FD9 75B1155090423A7F7B312E0801BA84483D5230928F0D29005C4E34076A3BA231 9E49F0B12FC1E574227D26EE5B320D3CD91CFB642B1A88A9D301E2F76ADA75AE 2CE1217BEEE8CA32B53B349B5EA2202CB03290B68F716EB4EC660F9EA9957276 D40630E31BC666C40F2A249B09FF4353F76EAE4038B86597266915E828DBBE89 F8E2151D8B857D2853A991AD047D66A6EE7825EBBAE91119DA78156F1DEAFA3C D7B28454827208B325073898743EC14491BA90318E9B197E518DB681D7A7B882 B7A521D7C0A0C1E27ABB071E26FBAAA8D0691D5BD842E20CD885D6498C631FA8 85AD6B8C47050D2AA37194660FA85972033451C6FD600BC736DBDC3E5ECAA9AD 5C5E4F0C3A32BD791F15D655F46C6722AB4BBCEA083584D2D3C3DC34D5EC94D0 D27BA2A8CFBE9A83EFDD275F9827845DA3D8A4B48ABBD35379368598C154CA69 361EB583F13F659AD839F077FD173673E3CDB640BF11B995B277E6C79A90B3C6 1076EEE848A3F2E013F175CC896D3A732F007209264C8C418CFE46FCF84B27E9 1E3357B0A69337BF0EDED4E64856E5323D55E88A14B2470F3EC354EC37E6DE4C 1A5B0CC5EE7B0C325589D9B2DBAD8A0DB434AFE8A4194F6D3F213CDB527B3EA3 C93BD2E7F9379B25F328B1CFD03C11D5CEBC6FA1DEBCAD193480C25135EF0EB8 666EE157D30145444B48AB477E65F43CC748A057EB4C347250EB798A7ABE07B8 8F6E2476DFFAE3FD9159274E92512B84546EAD82FD7EB8035E7A46E5442B0525 E5F9012F1FCB6F52B9C45180B1DD36E3028135BB17653268C4B89DF962E16630 4DCA3F5B9032E6B50621CE9C7E3FA491670C3760E5BEA380958D61A72BD7646F 2FA556CCCD0593662D1379DA362B4A5D314273611F92B0251496B59F9499FECA A9116412536F6E33EAAF29F0C8DACF93FE4B227B770A68CAF0F23BAE6AE1DA73 BB55DA988458EDE1BC8B87A0344077AFCCA3757B8F58405051FDD07D95D84BD8 BE2679266408649F1D83AB867666B283117DDC72C7CA58964CD1DE80607FFB57 D31E8C2578F9A54DDA4792A674A9278E996C138F7ACDB0C3250EE4CC32ED0973 FD2260BCBA065BED4776404E15F1F322AC17AED45B1288D0AAE5D01471CF49AC D4EB001CB7BB29E821738D8C542C1647E54AD31EB8E922C603E20201D6A3BA0D CDDD962C3F8D046CB48D319C25090657E768658C60FD90FDF456B3F9B83DEB50 A7BD85427F44F9BF57835634949182491B9E854C4FA88E23931162D94F7300C0 16EF1DEDEC5B011C7FA341F961ECA0F3673C3484C3DE0D9ECE04A69C93822637 38A99248E91DA02E57AC72A8094F9768D305742078DC3C0EE79B9AC4E245D37B 9531D9BB513669E5FC0F69478435BFAD2AAD6C1D3458D7ABDDFC728F3C9F2E7A C32D6C65A2654ABB4310BE6F802883B43FD2C9314A8221B66EE597BB0D71C68F 99457671B568633E79EAA4EF7D3D1ECD9D93B8357DA2D7D2067E8A5D53EF2E46 94CE07A7AC2D405A18ECE6374F226F58CF21DEB1E7CCA81DD790E25E52F2C849 D1C903766D47516AEC80F80C48DFAD3245F0517250C0803FD349A6CD5DAA8EA3 1873ECF9E58A23869278FBE779759073163DECAE824587012532A639AD9E427E 8CA63521EA6049F94673862C55CBD4EDD9F12F2081CF2796F32F1531F0BA0F64 C95D95E13C87C03A18B87BAE9242F7BE0C42E1861E015856298DDE57C6971DE0 6EC07FD7E34C22A8FA82430C34689E43FDBFD7E03C86F27DE726A230212AA7CF D5110F870078AD65812590BF6969A47DD72F56D32E7D29E1D63F6DE007AFC9B7 524437F79B70A6B1C92A269A90B94A4A13CC1C1001FA3DB377FE8C552BBF822B 09ABFAC2FF478A5E741746E1BF07D50A14E1DE23F76E5209A95EEC46B3C169DA B45EAE6E518BD5E530F388661306B298A67EB479DB37119F805530C2FDBFBC38 AFF8E391059EA6C022DDC566D9A697F682BED9C9EB92E824646D7DE85DE8155B B708D7598AAFD9B9F8E6B61332566E7DCB72B414D9192512E6B5792A6B01D446 21E47424824EF50289FAD1C06F8BF0A09F42ED70D3CB9CFFF773EEDA8F7C37AC 33A9825DDAFD055473E76D1F4A766BDD9961AAA2B57A2F33140E828A866C3F04 272075B538315B4FDC062F7F9233E1120A35C3E0AC904B2D99ED582D1D30662C FCA423BCA9A5FD769D2896956EE7C783D328135C578372FBFFC2A635A16EF26F BD75BCEB411795820445887E414C22C2CD959995078376134AA68C423AB2E6F4 227C216CDE49920A7D513E907E74BDD4AE8E2732552DD29807950268925AA080 01327DFD2D15F09E1953FF90FB5BC7EEA178B2458F8A489F4509DA48977073ED 36A2E36AB25A15B6A0EC509B8892B2DE2708CF67205C0D737FDFDE25C92797E0 2CFA9E79CB2CDD7C95702612DC9148FCEBCE9E1717D70FC90FF40D0C6E099925 E68FE4589164EA121194790DC29A96C058A9AB9384F01705787867E8B74320CF B44C80D2C3AE2120AFEA0C4E3FC5DD326C8F71A36A670ADE3472F48690D333D7 C542DE754358C1A55D8CBA9FF2A50DA6BEB915FD33A1A17FA23F05D7A8064916 C753644D8B684539F088662A65FCCF1E800AD89DE8D55A6C4F4B05543BAF393E 4236B80984098517DAE6D99D9F800B9FAE1AB405EF9F80282196D041247A8248 31853B31CFB16CF3B09CA23FEB51A7227FA15123F0554DA8D804DF82C8C85FD6 D297C4B755DC1266C148F182E1DA799B4A644688CE419C22BB07B73BEEEC9868 6A4341E26CB8204AA80ADBF7E1E1A34E8BBF6FEEFE38733B271360C268E011EA C2F2D9F152C4B05403E62CC6CF5A69B3082AB627F5512A6D7FE3E8F47AC9BC7D A07E9233A65830A68755C02DBC5138FF1680955E0B94F8EF5157E943BFACD7C8 DFB5C2C7C842CF7347A7C6B4063063401E09A79C2601AD818F25C2BA715D524A 543606E2AB5517911763FC9800FA4F4AC40CC0EC5F43A82CA0659DE5E9DC5EFE 0BBBCA14908E0652BB6B700BB7738BEE24A805E1691B7AB7BC078F3C17BD1C15 6A011C72EB0E0C94F596ADDC12A83337BC1E2812F6C4AFF9A8E6AFF566E6A680 56B18308C151DE6AE4FC1FAAC1A58CA24E36B1F92573BEECC5D0A4CA8D069B56 C92DB1A1EE8181F8DE6D50358ADED0FA8F99A248FD0DEBC4F8E82A56D662A5C3 8250C54F2442A3CAA97EED11E046DF7318D018D59153F0D86E6FF73FEB8EDE45 C735F30843B371AF0E690BA90ED6474C1724FFA020EECA92F94C9B323D1F0160 04669EF259AE541DB406D1DF1797EC1A3FAB5BB2A0B84B6721CED17FB58EA86C 49877E9350D96A6C326E98EFCD873EDEAD7977D1E2ECC633F0C24B5A615008CE F3B085647A45169A74D6794A3DC4EB1E31F2F0E188ADE9A1AE46D19DAF7FED3F 61783C48904717E7B21687F956BD4728E4801AD3CFCB49FD9F99F72B51EDD5D1 4EA7E11533B95EBF61B8C76EA7BE71161C88BC527A3B85BA45FFB8ACAF1F8CD5 86F7A53A3421049B89C79B32A444AB0CA614A1CCF8A1A6CC1CF852C222D45F16 3E3CD36E1A153ECEAA9BB844D2CB61D9BAF7A8098BC3A87E34649308674321E8 D4FB9806C93D2DD6E0053C833AB892B1E4CB689A787C701343046D9AFD15DCF5 7EB715129F0FDCB69A2AEBEC6F15E79C02FBDC3EF1B6B9006FD65C445B47ACC8 1D31C2766339F972FD3137E4ADCDE43EB106C663FCDE9F91FD9015C661234611 B4C99BE2624E40EF37801061568C580EF14826AA2C4998367A98DCCACA962E5F 872941585C088EAFA73B659D7CA4E2C0C14B3CDD11BC24BB3B242C6BF3255104 9FA1CA2FF56A137E76C095F40FBE27C3530474CD77BC991431965FA88F99CD2C 6A65BB5D32754DA6F7443BB2671CBE47BEC1C0528825D4E0BE1B4D2FF512E87D 321A62A77E6613A566273AFF22B044C6CB6F1C0884AF89B9B8782433FFFDF82B 89D7EA411605BD12287312119E0960FA6E18817FCD3A9FAC9E9891D710A998D2 C84B4D385790C3F0619546E0B515B6214D999DDDE04C6112C49F9A9A8ADD6488 3691723409029DCAA3EC7DA03B4272A0BB5340FDE14044A46D161E6BCF52948F 4F99E0E0F8CC794D8C2A07ED140D0F7E15BE0158EDA8E497C360786B6E3BAC38 6DDC273FBE93627BEB7EAF8C1A6FA866F05C2E270FD3DBAEACACA805EEFF5D62 257C8E4A86E840B20001C3748BAC3B035F62188D22EAF6D62A40BF8251BC77A0 7F3F37C72889BEF5A9E837B7F031A92DBA0BBDB0FB071B01E702E085D83EAF81 83D71E8890CAAF0D62B49E1271D8F9A77FF6F057DF1008CDD107FB4BE768C0BC D1AE2ACC8104AF17546066BA50E6ECC3448EFDF860B39A7A53BA47C6E8831290 750949E9EFF9AAB2F4A65C01049A7E1523A7CD54F495CA4946703894DE6B435D 73FC6802D2D5895A20AE033E078FCE77C316C59E92E7C973365BBF1E69DCB4AD B7983BF319F4C0E3EEAFF028603AAEC9F05430D9950483D0448AF130A72C615E C3E253D0057670CC77D98D5D8763E8306DAA44A454EC0B4B833937FE22649050 1DD4DBE5C14AEE8FEADBB001FEC5A009A58F878F57E6DB33B3F2C271031E52BE 368DF69C1F8F4B46FC007771BEE521C12D85ED2B82A6B300C385C5337E981CE7 1382CABDBE5C0FD8E75EDE75DCE0FCD519425D91DFE7286B241F75266940BD71 13ECA6BF65D3FFCDA622CBCC37A25843D9B76038366C6184FA3A52D7FCC55C1C A44EE50DBE5DCC65FB116880ACC702149A8226F3AA95BDA76ED9B9CBFF9CE656 7231ED75964AB9FB3808C4489E7B9E40A2342722FE1C4B33F373CA0563DC2001 90966E5EFBF741213F89C3E693E33C322B4E7ACEA24D888E05E39ED20F6443A1 827EB04D134CD2E7CD3C3CADB2A6B319643D83B7E37A5264CE97AED0D174FD40 47386A22CC989B577936DF6F68E60F593C2AD04B5D15D4B9230B8C68A8F33396 7B22D8E6EE3F8DD2B17A6AB77DFDECAD9FFAE496A2A171B4FA7B3B6048813E0C C076023D4DA54FF6D1593FF405C4F618BCF89A4EEB12715AF577E5B24CF75253 7B3AD8C263FFDC205FDD26776DA2A4A8493C06EAE38BB11728E56EAFC864AB00 C55ED61C8CD72A795D771196877099DAA5689AF7803EE6575208B26CC8411553 A1D448BCFC4804426E73ADDFBCDE802B6485758B745508488A458095305875B8 97904079C6738C2ED4E0C0315C64B9519FAE62C1140A3DC43E4C2E445A7887F0 61E1B1C22918A36F4497189E2FE7A5FB6AB80240067978832B9B8ECE4D4D826C 47B13A2E057F04A858CF4B8F037B42467CDE02F365AD0F855CE7FF1B5666DC6B 241D9C1C531841004C7C23C64A25C771CA18FAEEE39DE881CA24FF08B55B8B84 DCBCAF7C6FDF1ADF7EE85085B2D3E0E7C8D0540F1080C40E31E60DA6D9C4F1E6 443BA8D3B7DDC70B674F2E71121ADAF3B735950390F4E1735317111B9D616FDE 4060F55E28C2AA51C8B453308E659C7D9712BC33558148B152A4978E441BC8C1 B25F15472022DD5A4C9A86927AF3D5EEF8CD395E9CF446E00C792F8A88FD8C9A 9497B0BCA5957B1CC4C38713DCFC222EB0D4E9DB11B0B1C553A909CF2C09B100 0FF49D78EF53DED872BE00829EC9DB8CC64DC1A26924EFEDE810DE6D9A04B19B 7657FDF0EF2B9A6501CC5DDCF076F52A8CDA587F936F0D6F7482D3DEC8EB359B 8014F5574E4C2BFCEB388E858BFE2B9FFC08A1077B54BDD6D04195D062267945 2138F3D8EDB1D13336782E7E6097DB4FA8AA6E08B4C749B3E73106164211651F D29615538F63027173E11FFBAC0C1E8314FD3B10509FFBB073EE0F11C9742EFF 05E959BD94C9B5BD492E37A6A252728A9C1B5CEE6CA2845B46648D6068BE2340 0623C4374202B071F360619DBEFE1EC00EDF2F578F69E29DCCB61BF2676F0971 380369FA4D5E4A4A28F77395983D40E5928B12D21827A5F7E5080CA72E977572 526FDD77775F37E8D61A492C5F7E73021F3E034321FDB09AA308270294D892B9 6E7E2B9F278677834EC7AD40608EF2C62F73F51042341CD098D0D31E86475B02 B140068DDD04DEA180870926AB9CC7659FDE03CF86CFE2E70BB96D369E04C9AA 7B1330454CDE8471F96348FDE30A516764085BD83D4966BA7EFB0C4B48727496 54084D487C418018DAD39E8C08350F0A8A4D840DD95EF4F9DA14EB328AED57EF 2E02760A219E417A18992428351A6A6F981609D26700CA70A40B9D91E5CD3F4C EBF8107A73B0C6D3BC0B959E61B0BE324778A1868EDEE34F23CE8178EA1CC3DB 70304AF78F3FB0847B30F4C55E6194D56A2A0D134ADC82076106E1CBFC4B2068 C3DE0ED10507F0310EB07A0B66EB95F880F8FD4632BBAEAB7583E7630AAA9027 93F29D4DEBCBAC1E7FF1E2E009F54B3581814D087875CF987D17C8186866AEAA 9A83F9F5BD1C9212229949D75365C68D40DC791A46A08A5BA56E724F47BF6E3D F266CD2A859C81A0B88EA2DFCC735668EE6FF4E755F775A2533D4B10EEBC73AF 554B0660AC1A81D4C8DF3E173CAD12C0D214FAE674CDB4E4A59D1F21C2A2C34B 536AE8C2952E4CC13625C218DC32BE7AE0E202ED6FF4BBC0FBD7B24BACA39FE6 5FEA8673A6D61A42526ADEF5398E80C1C798116384F3E21038270EFBF84F90CB 1AAB4295CBB109D0AF6FA2CA571AB4ECD4597DCA2C364D018F3529159AFF3C0D EDF7E50E9000B18F6C10A15C86ABB706260600050655A57B038DB1B0B7EB0967 A67237263D06F4172F13352E9E8538CBBB8BACB36819B04F28DD5589A8BA0AC0 AD5ABA7C075537CD26D3474AE9AAFBF907552ABFB233818F144C815D2B0DABDC D6A028782710A1C3F83FB06D90AB0A7EA885645868542825F49FA333DC087C0A 3B56AFD6E3B313FF8534C5F9994BF6D157954B36300D5004B6056EC03270A05E E9FA319F95C95C605149A252D88D27B1B6EA29C8E420A0D109527E432FF552E7 0D3C8D5785EFDD179813BED46AA9D52FCA00906FC7C819B4457712E837EEBF7F 8995BB414A638B4D5349DFF614B821DBA4956C75E1B8670690A379B5B538CC0F 020E006B23468D613B2FDF34B11A4CBD127528DBA1A3986EEF6118A81323A006 711E9D3D2DD0666E23BA10A37629A840C7A8BCBF61ABBA00AE48680104D29126 4DFC37B24F8B6BADE961EAA3E5BAF1BDE3736F67BC948D96C77F67972D3B7D72 A6BE45B8CB1498BC8F201E3CC938D3EE287F7254009C5A1E9A97FD82894532FD BE5283C0B4E2D6E0258BCEB4153B3D1C239CE65671CF097E0127A9DF8E31FF0B CC3DD419956EFB801652213FEE2EC7068B9E870A895E1300FC410D47A2B58299 3EB45ABE8ECB3AA143C20119284CF2662343A32D39D88BF33AD4E9836CCD9A02 E1160221589F9F3E87341C37117BDD5F9148C54024B6D8F171AF22BCF96B7C45 22C2EFF2743143A56AE15F808D39D3249DCB0FCF3F6B87287DC21C61E61F487A C0814AEE0EF23DDAE90B67D165110D7C36EDAB0AD7017B3BDDF2D83DE69E7065 EF5D87E2159C3E395498790849198DDB6F24639D2F4EA71FE3A3406D48166C64 DCB023401327DA1607533B517CDFA265810B6D76890409FA1F646FF770D6CA37 5D901C07790F5741D9FA5C7C65D6A85B87CCA43394CE580BE90835244E0CBC6D 45115143B780FE236795A0C5FDF086DFA17E2804D6A2761C7FCFCFC09E2BD12F 99376D60418C9B4B0312A0353D0932C7D7F295917D31939246C0CCEA96668BF6 83F9B70D29C75E62CDC165C2ED98EE5AACC1AF95C3EDDB6AA899ABF771DA9EB0 904E3B7F1053600BE0059A8DD69C7432CEC2D3039684B04768B742105DC0BB10 7A7521DC67AFF430456719B71479787900466AA3BD5629F6C60EB9DB12A1FF27 49D8B4FE871A6E4C56BDBF57DB23A8BB778A7B585909C9E42D0ECA4504A12550 3347BDA474CCF1C19A1981274320DCA55173E44F87F796EE86E19749E0CF4F93 03BADED87E78B9E482FF5AFDCC988E204DAD2BB1CC7DEBBD0766FB6AECF6C9E3 28C361C0BD8307BD875CCD0D6299891C8057C7813C8F566C4455C7CC775978D4 866B72951A6AFA9D5789C5CDA9A9F1F87B571BE4D847E2E577774E06FC97EE6E 5349355AE309F05F9F929CA1F243CFA972872E2A4C7250F4184C33529BA99D75 DB11DC5739BF3753EABC550119A8AD17E604417A5B8FEA516AB97DC16486CEAA 86C48AF841192605447D0E48DA4F9705023A0654CA9A593F43E9429E5E8194B5 C607890006AA3B8E0F2706AF4207148C5C1DB91D132D37ACE4E39619C59BA599 B7DA8D193A4A2612A73A712D6573CB098F12E23400FFF4D49C227E70D6BBE67B DDE052D0703D00218297374DBB6AD821A1336A8402A5E9261051FA8483D11B8B 1EBC8193E4981B2980243BE54974C8B07DEF1F12CCA77EE2A95EBC764FE0AB2B 40F12D9EA956B4886A93EFD0D4D89C07AB3847FDAA8BAA83F516C71FAA5F2EC8 04A29ECEEA7061948C4978930A7BA760634942CF4347B7E71221A5CA6085CF15 994A7E1297F0D52ABD404809001EBADD1DEFAF35FFF8A07068BEEEF74A0D9C5E 275E01AFA2BF14504473AA53DD41E8559A8D8DEFAC48AD2C5F247FAE4FCDA045 29E722B0903D0DF86838E9631B5D90EDEEA1796F3427E1F16837FF8086F93780 2B07974DB3C224A40FCC7C394624B993A0B800E76A3D21768E4A557D93E7672D BD5143139598AE5838BD37D346D648A9F2F958725BB1A9B7CCB5DB8F2081FECD 89A5A7BC25C28AF15CF7D80ACA37DA0E278FBD1C54081086A739080C0B26356A 16758080B3C587825124C8A0EB90C0D8B2B28131C71D922D0A8DEA9036344272 5F7346E977F3927AAAB7E61D7FAC3F9A63157A2363BE18D819EC411CB3B99F33 2E6B3B2F880D17507ED6F134CB7A128DF4AA1AB700C966E9259DEBB8F965C1C4 81E278EE68970389377165AA38451718F3D70C07118B7F6A32F3DB402064AC80 E4520FAE03FAF2645C69F3003906C47FEAC3F126E2C736AE60D9A84DA1AF07C3 61D17410CEBAB2B736B7C6D6510C38CF71315D25A76770D0B1A2C1BFE3A0D066 C73F698F2CF1DDC6A5310BD5E7A526AB1421933945D32844431F5E8874FA0782 F33F0C8183158B439C71A3D85E159401BD827471E801C414D92FF81845EEC8D9 6D827E809995A6FAB3FA599F640F0D9D7DB6F5DD32C6B6D24D8DE5E852A985CA CF26CEBC95D2AE26F2B35D00FD2D1772F17B9A88347D0E5D79F0032209660FA9 308AB538F669005707C013F12AA8115756EE8DAF618BD51CD28433CFC0E7CA70 66B3F8C0AAC0D3343AC089E04D9D8BAAA71F6569A6B94C43FECA636D3C8B0594 9DE4216D557E42C8E15EB13F0F2F02FC23DBAE147D60F664724526B40904D132 B3D1BD1A91A26705BD7424D4B3EA2B04341D88A7F175A325A2C256DEE0370280 8B20502E6BF96281852B9B5946CD5C5C11446F3BF522D2E575D6B1D84798C29F 14EA57AE2FA34D0F2FBF63B509894C9FFC332A5D3038A40203315A3C7E231CB2 E7FDE34715367F6D40E2D6E998ED0CC1175E7326D018143C50041A2487F90BD5 CE173868EA93AB5D49CE49BB64176C3D96D86A35DE23401E1CB63820FB91A4C2 3173726E7F4891FD657DF6FB79DF0DCC3BFFE47D92F0FC2ACF0F3D6BE035BDC7 BCBA3E0A78A60EDCB24BEC542DFB0F34622F9B506661F59484C652E73DA77D45 AC7F99F3B1F50CCF94776A42AEB61D53EB72F92AD3FBE084CF57BDE770532443 39CC470FB895F9D1384EF99D31ECF9CDF74A52D68589A4423CC542C172DBE25F 693ECFCCF0F751547CFFAF2BC44286E7B9113F50CCA0012D803A174E0624B3D6 00B73AD2163C85DA771739DEE42B8AB8BF729B253265771D1293729EFEA11EBF 83334AC87C8446ECFF3AD0363F9EAC4EBF5C187E8BBA554ACE85E65B563262F5 DCFDC21D5398B8F46DDA5D11DD06E9170B50E180A717A2B6A655C4E7C6D13DF7 0741F3CA0375DD0918410E63DDDB1844BC3AAB6170AB554736AC39A575ECE885 CE95FB1B772719DC7D97767BB53905C539A86860860BDB5B180D034335F133E5 4F213F8C2A6A5BA39BC26184F16FF054335DAA4CAE0248CFC3D28E26664A6199 9A7F3BCD413C0275FA74E1939E06DDF91AF52CAFA8723EBEEF63DC824F5EC49A 1EFEC5610FE59FD1F60895A09D84099885A31ED18850CAC926BA152643C324CA C4E5FF96DDF80BF8C66123E1338F3C8B4805F8158F82A312187763FED47DDA98 AAE9011A61725653A69CB410102F73521E743576D0C218FE3B805BB75D0CFEE9 905B5AEE710780ABDE901F33D56F28C67289C95DEDCB0A4822FD0B33842776FA 400FBB91771A4CE20F710C8FA34781B458989A1ECEF1FD0813BD23DC9C04B7C0 61A91AED85C2C317E1CA4791FA1A31CA757699360B334688EA629C3097F93AF3 348C2B22450696DDAE7D6DB39BF83A4BAC0F195DD281E69E2DBEFDBCE00810CA 29D3E40BC6964ECA387CA1117B20C03C6C1EB4F85E3502F7ACB6BFD0E8F1AF57 945A06424B025185C4DDA0E8D2B8B41D8C888BF814B346261278E49B0BD30D9E DFCB2F3C3ADF1D0B3338615FD622C405E0EEEC3F1D4692E47D0FD8A0C0715E29 09154E41EFA4F53088675D3EC6C1C73A6ED40BB802FD41B4480B646066344DB4 37FCAB15F8234BAC6A9FA4954F63BA4B6E430B8B504C5874ADD044D692636A20 7DC5CC3C326C1A0BA6E6D65C69968C9EF7583F5947FA9D4F5659092D05924AF9 A85B143C6EBF55CC8D2C59863BD18473AF2C1E172C7757B7297F810670B3D870 A611CB1776AD5E88DA0B8989B18A2B59BFCF36BD3B25BB254A543111CC544289 41B37595B5C0459C299CED3F755F99897FB5CB8895D14B499FDEB201716BF1A5 8228CB654C8134EC4A843FE645E94DAE1AC6D84D8BF4AA6069FAB3CAF79C274E 3E97979BBED1B9E1746F9D035E74566DB74D53BB598620DEFAB1992D79B98C1D 079641AFFDE1CD95F0CB05C915A150BC2FA8A5CF6A67B2DFC0D27045A042A555 8320006C0A5741F77238A531010B03280EC8DC4F2EDAFDDF6FB7C4FCA2D2939E 4F5097777C7D4E5B6D3812413229E0A5DD42F0BA96C9BA23A03C0924B30829E1 F1512C961F710C1D57FFECF4DBBC14DA5E79160FA8DC0FAAADA0A95C3A37BC18 79C1E1BB17074E906C4BA3EBA40F9753C41CD5ABA5BC475FF61E411C30147833 227B0DAE6EF8F709CFD7DF03280A51D4853FD07AEDBF63E440F59B715C9AFB28 07624DDEF52ED9D860B2093B9BBFD0ABB7037EDB11DDD56122DEACA14802D0CB 5575D6B5A0F647487AC3180F49E90E96B94A70861D3ACA3B371A0ED16FEA7B7E 92A6AD8A8CECAE3FB6F32FDE4B74020D19048A0E69F29D355F4D8899D1A91962 10D4DF30D8F6DF3494353492BC97A194BFD3B5BDFCF89D682A4B643EF2B0E7F1 BFE3594F7EE03F4A0210D97CB962D8D87D71921C24122AF3CCDB2141CC507741 81E70FF3336426A22810F3F00A9884637026B60EC60A2FAD4DB81D13B66A7B56 43B37DD3AA54E34073F2FB07C38BC7FF0439C12E3E2306D27502B9D3A6B16E8D 147BDD1B22C3EFDC78E3FAB6B256CACEEDB23E157EFD88788F09DB34124F6C17 2F528CDF0792CE5F6F7FDFEFF4BE28817E1966748F803BA05A2DB30925A74335 7EACE7FB0BC350DA0C3C628BF5DC2FE5CF2A241817F15213FD0C97C6BAC0767B F575A4A906A8BB75EFDC44113F77B813D99AF052BB8E6661BB0921DF9A714397 A62BF58F2F6B29F75006D87D8DA710EA4D1C6C1466D0B994D0C926CCDFCB10E8 4C92E75261767F4628047D9EBD6D0337FE5D13D85078BD6A3BFA9FDF1E086DE7 813AF10FED764EA2C41C9D60E0AFCD77B30B83F0CD9BF320F06F9ECF232B0395 1531CAA1E94C410163CBFDB841931DEA97A866104C8CF220B7526BBC3E0AFB0A F7FCCDF1637EFCFCA401974E031E161AEF8756776BA669CA14DC407183115DD1 169994071858052EB7F004E6781C40844204A8E96B416A80B7A642DA4AF4D35B 13873CD0DD4A5852436A655BB871662F955934D350308864044EC2964AD6F4DA 3EA122AE7D1B6C3BD6DD1D64A16ADF0FBD07102B62B70C8608DBA5D106D47DF0 4631DFEC52B7AC0382B63D33A306AD03E6494117667005D46FB0A284BB262CFE 949D3C362FA67DE06CB1FCA35EB0F73BDE141BD0E6887181F707F3F6C655B84B E2ECD90B90187E4B947EE8683A5EBAEED87C6E79AA144F0B0D2763993496CEE9 9ADA295585312E5B69845DCA4AA3945964715F2807E051890815610F97906CFC CFE2AB6429EC6B29B208D587348D226C805BCB06EB7DD6DE502688C46EC34BD0 E1E7DB688F2FEE3D4FFF7DA1C9EA6169F59362F1D771341454D516DC3E93BF9A A0902E1F8A9A5AD94278765BDCEFB0798ED71879C93FF7EC725005056C5C8BDC F0A063EA6CF3F3ABB61639663E9F239D10DE4C1C064582FA2192F3FC2E20D571 E8100DB0C87AF020AB3FC1F3F48FFD539A9F54444925B9BECF287E19E6CEB8C5 CD9D4F1A48CC1AB440482FC3F0C00A1BB930267A081B88B3C61221D7E63287E1 A842EF8ABCB5ED15D89A6A0C7ECE505CBA6CA219CF65A405435B9CEC99BD091F D62918945FDA2D333C7C2B425EDE4AA34F5B5CF0F289B238BC0755EB494B314E EEC9B5D384ADFA63479BF70126646D5DFEC68C5607D777C0EF63510160F3D690 FD6DBF9BA2F49873ABA1049EC55236EAF77C57872FA2B93E2982EAC7E7FC9637 96760C86F0B8D30650221742A2D71D94B8FA403F22BFEEAE61616A93DE56D23E C8395009038C4A65EA8E44F1A55725D1D1F3D1CC658B8C1FFDDB125716A1FBF3 8250DBF3F425A790A0DCEF5D4BE386D36E3D37B693D81AE9EC5E41898B057A30 EE8F15607293CB505E24BB4DA26CA619221232E3F59EA804A0218CD55F3FEA17 23384762832E0953645552AF6DE302D1902FC0E947FA10CD7853AD98F3CE8E1F C556979E1E579CCCFDD2E34E24F15E53E4F97D877B2C9C1082C2FB3A72052DFC CF7310D1062CD88C187B939A89DF7F788607CDC84B30F3BE0877F1E8C2651182 2E35B11DE0FD22F679462C130006052A5BBC70BFE3A3D512E374A96C0F00BF8D BCCE337C4665B19AA0F2FE1A129F935C3D9D818A0D14707BB0288254704E8EF7 68F35DFE5B58E974C36B5811A9A594EDADE5CF270F0C741E1BED511140CB8E0F BBCD8719B6A71FBAFB36D2EB519F17351E4D808A823D6376DB168E78811E92C3 FB38ABB9A2B1B9C00C3889C5CC40D932620D103A81D8A9A7C71C461A1A3CD72D 841A98E5D02CBA914EC4BF4E37F79CE53E7EFD237396AB084A97D33B94A2CF89 1A954C6D635A1375996A882344CE4162F484DD37E1F1DA7E1581EC62A5674CA3 93349AFB2C2FEC9FC1933239372A9EB58E5ED9F71385283644919526FBCFBCE5 1E9F1EC567EDE568D771008DC20CA353B9521D1D6A3BEB8195DD2E96DCE41890 0E29F2466E3FC64C766FF8B88D39FC2E82B81B6D9EC9D73761E39B0A8FF7DFDB D1547D1CC2C233DBAB3199840768FC3CFBEB49DD69D9386674AC3979F568A9A6 FA177DF5BE28BD9DDFA7834B3D8979D388014BCF83795AB68986FA0D6C26E65C D19220E5E1D9C383AE564884412CC6640C077408ED2432ADA474123A1F271A15 0A8351727D838AD6C767493869E9D6A0F7627E6BC1DB672E8C91FD0511B47A14 95DCEBDD8689B1EF4F4B4BAB14823FAEBB10868A2409306F61DD577C9C457242 099CFD32EB0BA0241B1C38CE717E51FD759EC19FD0520083D2B4F25DF212B4C0 1FE43A3EF30487DB79335C417D35CB1BF263C1206F5B217BE3A8171F9B028FEA D9E68B85D41808A0C233A618EBED6BC1EC2250E218AF3EB579D70FF3A1AF0A87 8FE9685C40F0294CA0276D5329B07E125F9E018E315A60516709D2F830D0F7FD 52AD02E040A9F81E58DFDBBF102E46D4287037F9FAFBD2401201D5462911F085 B59D7AC5840D00686D7C2AECA79D394204F3D6295562B0061808D88699752DBD 28813E62E7720AE17112495DE035EDA3EC27DEDE3073BEAAC66411DE6C98EBC5 A355C0A49C2D5942C351DE6B357851B728E9A1A9467D3398CB4239B646986864 6CB34520FE1302580898250246DEA0B7F8620EAC59C2E0865F81ECB755E6529F E39FCB935E256721DB1842D75B54DA8DCCB763AA37FC9064240C5E9ADB5F7E12 8FC86C0C793A9F82EC55F52FA66637FEC151A94AF308226B24A75498DA2330E1 7A94772653EC0B88A07834BF37F614EC3E087019856511E7B2CCF69B0CA446F2 97A43963D1168B779C386454B95802737118CB2685AEF632539F61EB8DE09B22 1B135947118271E967274EB2D52A7DF62563EB9228DBB964834C6BD2F0065FDA 58CBD4AB523C2C2CC96D6DA44FF55F683E362FB4BCCA5FAF367A2F3FD51832FB 85B66EDEF01181E037CA62F780A78E768B82A840DBEEE3D98D7AFDA0E42E5068 A10E77A4EEFFDB3664653A9107E1FE37F75D65309C586071B8A4A3CE7BD8A735 614A68684A0983DA12D4B301E3CA46BD099A21BF3C814F70C8D805B66488B6D2 B006CF1567B554831725A2F0E4EE1CC7638DC880C026CE4F284E38D0CE69C79E 6A9FBFE24BB1AA78F0A9B053BF372E2289A688604DAC20394DB9EB4E874CC77A D4F720977B3BA4C92AF6770CC5D9CBBF0B0C064789D7172A0B070CBB94851B21 412AEBC0F8257A9D14ECB9396FA6A29CCA2525B6D8A6501D0FC37B0BF800DF93 C2BD00D3CFA8EF97267A2B8F943FC180D7139646FC0D446CB97B9D23B9E9ECDC A36B9C9948EF971D8462532FE8B4C88185F68CAB2C91079E3E9FA719D5E2F1D6 A163A02065157BB3335A9133B5AAEECC1767D79A607ED0782469CC5E81BD4E00 593B9C06D3348607D6A26FF07C144A67F6E4BF95E1FE60431F39190895D6BD5B A34D17BD73BACD52058CC7B584FA6821BA11991F53097A79ED0B2B2A0E748F6C 1BBD31AF3E9B66E5AC5FA836DA3B87EE9AC5F4863FB1C4F7940D02316FC39171 6A192E47C9720E6C8DAB6C0556CF05348FFDE55076B1E6B8F8B0F33B79AAFF76 A56B38FEA715AD57BDAFE46A20316997E72E04BA79CF5DF07DE0552AB4DA5C65 B8A8F7F1E969ACD20EA8A2C7134B6A02A605D3241FD28322DD26748A9FB80B42 BF5567F6E9852A57EC12B662181A070B3664725E6728FCF2301F6114A589E731 2190F7DAC8740041A7CE5BB6B003B4D40EA3CA7E8C7BC651AFBDD5E654188669 521093BE93A01CDD291CCCA46F9293D338B372A2F2F9C68B624FA0A9C535427B 56D627EE31F4EE9BA85E5D16FF731AA1A9AECEB98B9302C5F6862192BF2670C0 EF56D6108D2ED0BCAA942A8A5FBA3FB7DC71821A943CE2E1213AE2142D4C1E5B 9008316A27E2D3352F223FB4BD1CB31801FBA8BE9E7650F111FB996C33DDC7FB 12D175E98644B3C821BE365F6DC6ACB39BF6409A474DB548277426599F61CCA3 2279172954DC7C389DA835ED91BB729ECB847E1A0CE08DE3AD664F51C0509D53 9E2B0E12AE4AC33B087048E84158B557038E63518019FEF449BC99F08B3001E5 F90F708BE0BB1861BE14396083A38FBE9908C9489A33DF5957386B018A5A066B D5BE8C603EB3716376DA04FE25EEFCAB392D1F1B8857A703E343E9E4CD98F86C 858F62D2A4675C956583E7E6360C9A55309DEA5C737614766C0582118310F875 580D4239D0C3A3E640590024A20A0722227C96BD3BDE3372F81052BD35203C49 6A35B80E43B4FF7C0C9187A1F5A9E4E79E0C4A3C352EE3B532B433D3CBF5C9C9 494579DAC160A6591945224D87881C74BCE0DC3360B1E1E7AEB553E68169CBBA 83E6C6A83D7A411EB54FCF95DD7A8C9B3CAE0FC0EEAC83F514FB3FCC2F727EEA DF8CA8792F3C6D72809527FE267037A4574E2DB1D6F5E08FCF8C298C4BB5259E 2FC73A77D34C31CD21976C7A3059E718DA499455353059900A3B2D5E9AF06B31 FC80EA3268152071DF4698C3B71293CBB1B2E2C4A3F5B77D9A688B626A9991FC 06D2EC15112A269C123140CE11631381165E85364634F960C0424A5B6D568F36 2A6BB23F47FEEA69FB704E83260C03CF0B6AAEB095D29361D4A03FEEF814B3FE 219232F956A8D6C916226DE6B1FBC15479EBD852CFD3CB2B4889CBAAC2FF84C4 FF0B74DF0C5D1698237CFAAB100B414EAE778EBAC53CDA603239EC1A7E03BAD2 5A43ED27FD7633019F0BA3A8BE2FE78F554A122905EA56FA1787133D4B9CFC55 19A49304946A693EE8E5B4901FC3339B38DFA81939359A43AF868709998B184B BA8B5F3C87BB3B1AEC99924188055B70374267D44F09CC6A9420F9896A452715 0B2F2EC893086460C3E25323342C018C2B9BBCF18D5A05FD0E30028A2B355A45 7420F71D17F5FD629D2D55A38D0ED93D2A7286754034F3F8CFA7A80F6F830886 3A2488A81F5EAFB613E6283DFB93426D241B2A2D612BBF7FF4B29B8B324F7A06 B491E3A0DDC4559A67ECCCE7AB54DA1A06E613B934B4FC325E78CE3ACE3CC7AA 59C09EAABC04E60F236B89AC255E89DF713154576EFE668285E49024678C2CC5 313D12F5785F6DC3068C73760567F7633F50BA7FE913B6CF40DC86761894DFD6 8D631D2DBD8605AF977B17A348FD4936CCE75CEC121C34C82D9DC15146F18C8F 1ED25F4CD39AF49C3F30FE7D74AA6E62EFB40D4B6D40CCE673A0F22CCCA16453 45B83093EAD889D419AEBD6D155FA30789250DA5C6E4D2B9FE9C1290BCC9B46B 37813E05726CDDF15C48D962BBE64230E045CB789D063C500D7770F65E0C07F3 4CA4D9977EBFBEBA4BD07F08C12810FF6AF76C05A18088AF9C144BF454750D8D 2121F6B64C5E48E8FD34454965770DF09B2A28782CC20FE32615D34867F89C7F 872DF45912C48128EBF1966D2EC1F067BC448182CEB4191F56A295D8FD079FA2 34043D972C306FBBCBE1717E0EAC7213A9E2EB6BA9F57B05BC498B35771BE4D1 D2415CAE5FB520578B4D49275BC4FADE5B2C511D002E23613B3004B56EA16250 7D43BEC021D6FE9C2A4AADF1890026EF9CD805ACC1EA8D643F053F57F71C8F3A 6C259067665321C68470A878C236A11EF16CF2C41D80C50BD5CCEFD3ADCA75DE 07BFF2AAD318AD816759419F6A2B137C937BD032106FFC27A444707F1D8E4147 9ACC1DAC36826EF4B50E501DA662DC00DF2BA1BCF70770361EF0DC1A55B41A22 9FA07065A92F9ECF78CDF9C8A58901894D38FB3BC53A766BAC125501333C5DA8 3E75C4C94A5A6F9C9EEA5752648FBF0ACF076E984B8F3026386A3A709874384C 2E32AFC3485E69BDFC68E6529831C84E036F8EF8EF02C69BE6D256C153080DAA 3794643B072BFCB75F958B524E5922B005BA99A43841471AB280213795124292 FD476E0AFEE7BE80992177F62CAAE483A94FD4EEAB21B4D92708CD037991885C 0812EE76A335EAEBDE1CB55C6C91BE63CF4038975A2A43764E8ED31DE223558C 8461FC7FF3910DA666634AB7E4208EC3865C1D4ADCC757B3BB92009C4FF40085 C3246CDFDCEE3F2B8C57D5B15436A4249DE15489A90302F8DD2412C05D60A156 7D4BFCA73D24934920977E7E519C13F061CEF80B96A290DF2540E3B2B88D54E5 688236DFE1352BB4979677CB1E1AC48D2704D510683F4B5FBEB3E7C34F70DBAD 64017CD4602946E8CE87678A1DFB67C30FA3430D40B4C6112B20F3B3F1967C4C 2ABC9F127F5020B3D974BFA30773417C6F2EE7941E79C9BF34A4E166BA1B5D99 C50DEF5B8AEF1CACFE469E6896616C4415ABC00DB6133D26436B722C1E01255E DE47F6354702BE4922EE7DCA36D2F43490A947C671976D470AC48D6D9326E6EC 880AD1C11B07D5A1415ACFF5266F2B4A53089174AAD7219F7986B1FAB627282C FFDA46613517A25CDC2E8635EDED67C9EB6F7526F39B7CDDB13A68A45A210EF3 5131CA79E041B92634FFB4A2713F139FA46695E6239E69A4AE1D24E649ED5087 B9A59C9548F6F269B88018D46509AA5CE31CBB05233DB645E9E305F000903EFB C26AC92F359BFC8DDE275215D44272E3E7F08EF188647D069887017C80258EF4 B696E1E1AAB398B8D0D2F231D8E6FB16739DEE63AA282614FD2C96D95C09BC09 AA66E6EC6343A50E862B6CFA2C3118B758E5FCBB1DB0AE1AC566B1477E4822D8 048922272E9A056CE8E331A5ED066882ED6D85F710D21477540A5DD5B6CE5B3B E3EF5F64E188F7E5C40F9C407DB4B43FB1B974FB9C759EB80437C90F822AC2A0 FD648DAF8F37BA6185C86BE823561ED38AF95F834B5077EB5ABBC16EEEC4BA1E 9B6A0202BCE13293377076D2EC2449A9DCA00C0E51C149F104517A36B752FE43 F38BFA0B9921230ED9228747246151764D90FF43CAD3CE167A49082E7241C733 E94FB0D2A304D2B667128075C9B458461F3CD801F6AF88D2DD92D2CA45F0A930 D83605697C7A11C44FCCDDF1EE9139EF89CB46A07855CEECDE2C062CAB10906A 894BC66FFB996E65EAF33EBFAA06FF2E87D6D3EAA630FA9BC277F406A5A030E9 1C5A89CED3AEEA6684349066FC8C3D17C2A8A274EB88DAD0DC419BAD5189DD5F EFCBF0820247D400DBD7B2908836F353AE0C728DEBAC2B87AE24A8248B8E7C01 DD9B26D1B6F6AE01ECD7726DC74D37E6EC092EAFAFCB5E7D4F564407F8F5E6EE 2425EF22F400F4DF2F43D97A46D6C9F5063A2E5E4C9B7617ED5825F9403B9250 464653420E0689559B01E1738FB992007FADA665642EFFD1A56D414537FDD7DE B413DC0B826FFD9EED998ECBC0020AF976D90D29DAE93D0313E453F3890E1C55 F69D93ED597EAED05FA1363028FCE973BE81AA041BA09FD401734255238E6F9F 7F703FBC6C90358A0031DB5389BD18356371114EB9B7AB7EAE4487E205754E33 84D82C5099D1F0C519A2053FDB26CE17A7007D3DA3EAE9B7ACA7C8A3C04E616F 7D8064C659620342A6E97C9C1A8BFECAD0AE46B508778AE91E63CE978B087F49 045771A25D31B52ED18F79855D05989A57E2684E4FBF541CE91AB0377BCE5806 FC67A58C403601D7EBA77B1F2831D9309D65C59D596A83B8CA7DB0F6D05FB432 3957062F3EE2B9B0D61B72A47DB9636A770E092DDE795C24427AE2168B79DB0B F53F6A07EC89440D754B864C3A03B1059B29779A41C2664CE5798C24DBE1BFC5 D17226E7A748490CFAE4E5D434D686C0BFEC16FCD34EC9E03729193483329143 10926F9F6BA0C8E4D92A41E0FEE4F7725022F0D0E46479A729F8597A205E5F7C AF3EC748504348A4DFBB84D38F88B2E890C2B77B2A2B847432BD1BF2F7D48BD7 04F48321805DE61274C22F03A781BAB47C1598BE55762DC02253739D6AAF3D48 ED3E571E62C2993B6F94F34EDD8D137FDACD2D3FE2EA986946CFA6DDD7C64D87 23B304774BA80D31CB9A03FC34BE9A7D9B9844F2D89B1DB2FFFAA2DCE52103F4 75C8E1E2D6C841D2546AB5160F01E5214464C05B5D777BD1F290CEC2D627ED22 E424D5CAADE223F14E32199558A25F251983E3B2DFD06E627961FBCD3D7965EA B929C04490329FD782495702BF2E719E45AF16AF4A4B03F7553BE02D07C38B39 E8CB37EE0D0C5D994CE038896A9AB748CA976907329E468E9B2C5186520D98A9 5FBAD16F916F02D18085235207AB53AF34353C7C03F8B1BE44AF23626E47DF06 1F13AC90A9FAC984EFCB6B5196D44D89986E45DD489603BBD11D45652970EB52 637CB8BBEAADBFE91EE33AF5339D0669A1B38F35A765C69068D6D9C441EFA61B 778E7853AB542FEDAEFCFAF246C22A3C3774FCB816F8A9336427508262FF97F1 29CDA247B609BE0D4FF61A8762A3EAF8CD826492E5F3CC90079EE317B5875F9C 769CB878C6842C030D7131F51207F42656D020A8B117B9FDE4921967A2A483EC E508DD4E2083F584E27B95FFB0341B3C8D1E35C7D99C80C7B3AFBAE12777AAFB 35783411927BBED11F0E0CAF94E16F53D89EA69EA8C970B382CCA1760E46B801 34799EB0B97DBEC2055FD91B42F666764EAF1318D973664E41AB2CD3B787FCDA 30A93D411406BAF764572D6F5D7CFBB90FEE41DEE05C4CECE065C049D49BB4E9 C74931192A63F2C7232503F1AB5B7F6E02330F93CB1586D9DDBA758868DAD6D1 B623A49CC58661E4AAC16AD90EC2452598C1DE35BFD72C283799A8C3A481149D 378C04997D5943962AD7B2976BF35625C5F9045738A73313CA162F76AE76D326 8D46F18E49C5FE6FAE0F470FCB393C8A4B739DCEF1F7A2C8D980A7306421A41A 94E0A45CB971541FA85F81945B98 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMSLTT10 %!PS-AdobeFont-1.1: CMSLTT10 1.0 %%CreationDate: 1991 Aug 20 16:41:43 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSLTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch true def end readonly def /FontName /CMSLTT10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-20 -233 617 696}readonly def /UniqueID 5000800 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0528A405DF15F03DB1C3DA8B850431F8 0E5F73DAC973450D1ED0530313057E971FC7E7CA88E61DA6DB9A5CD61F0F76CB 4DE9105D0627B8DDF51A655098229920CF429CDAFC3F7788C95E7AB30E84F840 8CED52E98DB4CFF161D2E62B0D28CB8B0AC82E7A8D2C007953BAFB3056D66079 8064956E257D31C13509FB81A250D9E875C77A4E91CC49E9FB3C0718B2F691D4 B4A64F351F4DD68133DED7629B0D96E5124584A16FD2AC7A3EB244A934FF059F ED7297B0505F3C2994AD66A3CA5D2728B034DE94B64A8AFAF341601BD4DB5858 C9950A8BB9C598B8960609F48116ABA8C007190AF0ED335EB5BF61BA6871FA5F EAB5A26AEB5C7C352EB80799CEB983F19EEFA801093F62086AADD0B80BB6580F 2CF61B1390FA56DFA1A0B61C58DEF96BA767A8A37EA44730783C600706606C60 4EE74EA99B7C0F8E2525C8847F3D31907C3C483EFA98F6C416B6B2C343DE6370 52FAE423008D086A76A1FFB327CC7FD84B1C66B203A4F41582F4599A82F8362D 38108452EACCC937FFC4F3ABBFE3628DF51367DA6BA3F6826FC6522D6AC5E8EA 00BAD300FFB6DEDAB93237704202BACD030AA824B1E97C0AFE17FCE8C75F4FA0 B8A74329A6CF1788C7EB34DA7307411E9AD7ED8D6582884456E06E033B4FFE7D CD4DD8B06AD01340CCCFBC382C18CA451E4C886B01D082FF8CC5793F4727C3DF B52B4F1A242F31D1EB79D1E39A1D4FD13D6C5E2A42AD4B4D1CC4EE7BA0E5F80F 802E5AB57EA15F4DE44D82AC408AA86D4BF58EF967FBC6497BBC7F017C0598AE 32CF865DFFF0FC7FF9E6DCE9B5F2F4C7491AC674F46E8E7660452CE0A77C1EE8 00DE382ABED85350033EC00053134DBABB69DD3098576DACC5D1E325C4B372B3 943F8E90BE7B97B996D39337ED6D90F8041298B7A27B223358A5161FE98FA4E0 6879524934E026863F790FE3B5A8A41AD2E91866F81B195E0A02D9BDF971633F 0FE9A9BEA04CBEA9E46AA44C31D694A0AF3D7CBC1FC4988F6A81130613047150 12203A85849EF4D9238604ED8040DC85FB0CDE867F50EE685C8B2BB0574FE22E B02F2595A161E810E2C9FB46B3E15BF0B3E7591FE9CB28E360E13BCD7EAF484C 75BC7CE95B1FF7C121B7F648CFEA74F9B7469E04711BE194BE28AD6C4323CC66 0282DD418907C8B27E72556FA204F337A630C2ABB8EBA157163901806B09A2BF 7F8AFD44248268328791A146C7C3CE83193BF31AFA8659CC0A0BCF4B115AB199 80EEDE198CFFF4853525697E511B1F01E7804EDFEA413FE0F047D54DC962D193 954CD49ABE13FFA7DE611A90F1B228908D3C9168312471A5C59CDBACAEA8DE8F E4973CEE2FFE1554D2B2622AED9A61053B57B11F72A40AA5D58B3D0F76336F6F E1B2D6C3F6614EF9ED18B81697996A4B1F1E7DFCDFD05173477B88432407AE27 EA0E521360B2B8F3CAFA63A087C1A80530C2673A9021C523BDA7D465F1E19116 20F129C23DAAF6D97B8CA9B48B680109C66A79768D4F7147D9CAF1B259D86F2D 28CF0674F1F26309E067F873CC7D3F41C991983ED66A5B85CACF4CD19395FFC2 56D1103B7D007B2658B53DBAD5E965CBCA7BEC6603F4B87015FB0212DFC7B008 F7C52A8FDEE8E68CF6AF71570227105B0012E00FA33C34E9EC217BC0A6CFA66A 4FEA3A03B6DBC51D7F2CBEDB8C9931C4AED3DB8F5043B47EF39D7CF07C243599 0681A6736F9776DEFD9CC5985E0C73C6485624D3E1D78A195EBB254E5379D9B0 F7E55934E50D760F804D925E8AFA59959E4370E56C154A31DD04BB2471259DCA EF063A9067921E2B926A15F611E229A77DBF1D54CB1FC07FD44158C0075465FB 7E123D8DEBB454B3A0D2D308810D7DA5EC9595CC0DD276B79E1F03A61AAA366C 535FB4977E1F4ADF2698D0724781FE5C0FAFEECE51A11DE1DE6B3CF3B87FD083 BDDAED0A6A0E2E829237F9BCCF83D6E50AE8DA3B331DB40681FCB40B0B175B2D CB8484594782D482DDFC77CFAE27F747D03C920DFDE213852B441683E00FDB28 43B37820776239DAED444340A7025554040C4C6FFB486A853A63BEA4E4D81FB2 443E89FB0397BFC799B0BC6C50F17176AA6B22F48BC1D486E5F757B08E5D9830 F5E73FD21352CDBEE7FDAE0E5D9D05C7175DD2D6C46ECEE1208D232ED53AD2EB F010A47AD3F21CC6174B2EA729FB350824934A352D371BB49F6E4830B3F66D3C 66BB83B29308E83F0FCB8514C92909ECB78D404E4CBFD4227691E1F76264ED35 80DF3E0F44ECFD91984ACCD5C69D09FBCE666A97FAE5A0D230080966BCD9846E BFB6908B70248768987488F07B3F602449276A31C886D85215A706040BA0ACA3 5FCC4517FD6E7E8B77B1213E6A1EC30AD165F2B6956D759C253AF391F290DF36 D4755F581B85CF988BD6611E660616F7FE7B10F3DB33DC2FEC42C02246EAC4F8 36476925A485C4B8348A9EEE06DAFEA9EBA0918C9F5703A878ACFBE961A74F43 15C6122A3E5B743BC0DDF52FBC649A8AFFA9384BD27490571C9B23950BF3D7EE 07767A71E3A5D7D8E1B036045A9F223AC2E459C541420E2ED2E2442F285AE2B1 6683EBECF0720E7DE09D6E296C9BDD8EAD30C6E25901B1C2A19FB7ABCA4E4DDF 792693B73AFAA768BC21770521B6D697204E2766E1C55502DB9F046E90E52BEA 16D2FE2165CEB13E996574E10E4694679D835E3101E4D7855A30759290F9E5BE A8D6098BC7636DE2B8DD3EA17F6736C5AF97DB4A34A9009B1959E458E410C50E 2329A1C41BE7AD626732AF06ACBE0C52093E832AB862B348CBF48B34771C0AC1 DF04597C6DCDACE70E37981669D089FAB4A9D276A3D4993281B0B5121F57D31A BAA3FD92099D7787ECE4815BAED5B0E67748C69E470D38F1AB45AE598FFE8AFF 13A244052A36E7D6E63A9FC9032B853C1FF6E1F78593CC47C1DCE47D2CAB12EC B38AEC007EC50A03D2D75CE9E6AAD9AB66FEA1C0AE8C5B917A256646A389058F 3E2669FDF2172C699F4E63DC6202709D5D30944EF710ED1493E400F313C133DA 5636B746B8E26AE3CFB607E6CD37C52970172B6A4150E40E8B801071FC234066 4C50B54A150FBF1E81C569E466BDBEF8FD679DD403B448C5D458B6E3E7FC5DB9 A6304DD6CF5D8DE91CAA8FBBA98EA82647D5F177415EF1D411A37782C15AB1CC 3D4EB93D7E799A2929B783C03019A271F6123DC1F60877C50E790683FA3729DA F16B5EB3ED84A4397473887684AC4A3540AD137A779AEC5B595DA2E852066D9D 7D328DDF635345F45B5A7DB7FB8BD35CE13D4317C354A21BCCC4AB8043685CE0 911A255A454319D19466302B27A2D836649FF989146AFC10665AE6B87D5EBB27 DC7C67797CE92BFB781BF5AF486294E4808E2C19911800E1CBAA521AE02FF71E 2AC9D4C72C161E6FB7A0839E9CB9AFC249AA4FC1851C3AE0C137B5717F7A217C 08BCF661BE14FC7A50238C0B5963C3D76176C9B9A9F7550C24E8462FFB5CEAFE 485B70FF1923ED8059C698410C038DEF786A088EEDCF40730FF97546C3078BA8 3568DFCC625ADCA735A32E522BF18C56E1AE4ABB1E4701E382A3075DF0F42D08 085112D7C3331DB3280C941BEFA24C008F3369D2CA68E8A0D54A8618AD486835 7A9B7CDFF5E4D0F69A2934936EEBFC847447F8A72313223A5493CAEC5C1702D3 A087E66ED85FC096009DE17264C83D0CC91CE3B5EEBC73514AC4C9FE5733BB0D 95CB98631FADBC8159762A2DF5F54A86817492D3D0C749D344DFEE1942E407D5 26CF5619431B5FD8E57A4B8DA89441A94E0CCFE41FEC4287C9E52332934D44CF F3131D365502B02EB7B7E8B82A799124C03DFBB78AE8186F1E7A5979B311F629 DB876AF4033653CDDDBB84B8F2E99BF885F9AE851514141C7D9C4FC8984F17B1 63F6824DD76B38E8C549FBB46D60FDF46D4814C38C79B1095E38ACA9771212C2 3C4C034BB2454A0AB9B89ADB8DA2E921E7FA5A77B3E4FD73A77E48FADBDDDEC0 56764F7C49F167DA6B57D508093158C4B339C9C344D807878550CC467F2CF54F A1EFF41942365AE74CAC3A1F53F03CB3E40982BDBC76D715BF7BE3FD244B5A31 FE8AE48FC69F04DFD44C41F4DD9AD9FEB61E7263EB61DE5CD49706A069CF25B4 2AEEA50582073D39AF0BD8E65EE3F160B5A959F15F03F71A35D81327798582A6 21700EBCCADEDE6898B6E45EF4971B1605BE1E0605F40E30ED9536ABB86501F0 9D8BC13AA7538BBBFBD1F35073B2CAC8937D7A2312B5EB5A5FEB64BAAE77B724 29DAF3673033AEDB7AB437A3E97720DF7CA9998B837F57049AEF4948978D6C4B B9F462EC59D4B97122BF68071909898C96ADE9D2C60D7445051EE88DD9CE27F5 C08FCBA0044D735F9EB71EF4CDE8AB8B08521E8E835713DEA359AD39A16880E8 D89AC81D14C6E7C2F019B8086F7ABF7E87100D42367F25BB5EF357F26C3F14A0 329B6E268FBBFBFF704EBE48228A5E5912AD5F3CA3F7524C9E54F60DC7B5EB34 1E5E3CEB02B71E2486D5CAAAF051EA918F71AC1F1257F89497E6857F12AB32B2 3958A6AAC1F6E61D4E44E52055D9CBABCE91D071B843510A8C664C6F1C5B40B8 B302FA440B30588192F8801564CD4EE6859172596F892B05A6409866FA2D6DE5 5138C8D3DAD892B810C6A43DAB46273DBFFFC739C85B5B0F924EF5A34283D9B6 F3D91DFDD278BF1A6AFBA2F14D015EEF198BBB580F1F7DBE55A31702085C67B6 7065EE39233D1943AC7D0F19111F7C26B75E4B7EAEAE8602E17AF635155EFE04 7401F3052CE452AEB7858C9B7102FAE9BCD24301BC7D61DF1656588586892A06 B67DB937BCF66993CC63A69D6390502AFAC64CA2373952C53E381019A5C34BBD 100DF109CFE9B53919824A65867971A6E4B569A006A2E57C35CA774F7BACE519 442A0416AE9BCAACE0433111851416BCEC3DF7801460BF7F24FCC0249A6EC7B3 A8D50B36B4DBF07C194515950CCF6E0769B6EE652CEBA426C8748222FF4DD520 61C87F8EA39A5356FF6D88326285102D8A7F0B579AC8400DFAF683EA53BA263D 6B0F97CAE459B2D327A4C57DE930E62F8E1DD4293A0F9AEC4BBBB6F6FB111C37 6C73058367FAEB9063D5DD1BC632FB49793E282C52CFD3EAC4F8B3F7B3B66D10 866EFA146E18E9D27D262FF4D57E6C19DBC6C83A85E69C4947F73E741F25CDFF 83F5A6307396D0EB7313158445FB2399057A4C5549987E397A400E60047150B6 3D9CC4A80D20748437F1E410DBA8C4F9219C199393486AA41AE93C359B33BD44 4276A98D28E6BF99E5B44551D4D1B7018EBBCB2ACB2B964EE7246A97D94C2080 E6EAC5C7AA2D3B2805A524B959F8B7F35B56612F417279DDC4647C944DD71CB9 F20D40B9FB25E9E1BA5B8E402D66BFB78CDE76ED77C6AACAAC3160EB7E4FE0AE 52A532765CA9FDBFD30ACC5E0B7E459C8A298EDB0C6EFDE3CB1E94ABB19A11A7 E47D1322DA3FE4237AEC22EFCF0BD29131A4EC8912D61A17713A8E8F01ACFF4C 72BBBA717025CC3E6AC3A2FFC9C38A9D1C5617257513A5EF92FE0A96BC9F07AB 105CEA98BB951BB2F7E95AA49860890C4051517E4B9F96A287C37408AF4B6119 B77A2A61ED77E79A9F067B3E53F48AD39FE756FA04C61D255448D859880EE9CC 93662878D8FACB3EF369373F438A49D501BBB46FB90ECD28290FDF112A1737A9 285C9F3417A064CFFFF200A6D2159B3DF7440DBFBE906C92C16B25D8C001CC91 B3373CB22FEDF4F409BA11E40FC7ACEC820E04ED9966E3075CF87B2E8565FF27 A1A8993B9FE4572C97C4F4751E25EFECC0D92FAA270DE4C302B5C4BDA6E6D255 4EA9B65DFEAD40C37858A91AF5FFE456A9791A1E4C7508C0F571F9538FD0AE28 66643764C82B0609B5A2180C55C10C447784CD8BE92D0715E0F86930BB0E4F5C 8789517CBD9B1040ABD384449699708DD26DE56412AA7B4982965BDE81BA70B3 6F2975886E2E72FEAAC28C0965EC9E84363CA261DC00D4147B9FA08ADEB2DA52 19F04836BC136BEFB48955330333CB40E5677DD0E9259AB0B6147D62F16B21E9 D747B7EE034B353D172AD176A731304E2E78725E2031D620AD39603516EAC321 BC666885619FE1DED3C5C92F21484E0A89655800BEDB76CEF72EC072F9C6BFEB 9E1A87C176F4CF72F9E88658D983204768D4D918434627750E86D1E1EB0EAFA1 9DB6D6DEEF8848718AC5E10D0CA4B0D9AEF4A584E2C7986C38AAE2F74BB3F1D1 920F474FFD1BAB50D458E777464472BE0A890555C04A509FD1E84260862DCA3F 1F553B518A85BD64522C2C31778625B0BAABFAF68BCA8E10CE6F9E66C124D14D 989FF5F515C8DBA92851C8C16871FD6105B349E36628CDB5F20817E2EA3C4338 6303E273C33409195506C4F55B93F661B72C1ADC8E8727FC2160F88A9F10F4E2 5BAF6F1B8EFC9F805C028E770D69B281080D438DD210DB1A733B4DABA57B11FF 7715EE5A27A49599A9BB04B93E2B1340FC7BEE5DE73D571A78311F333F8559AD B05050CA751510E9DD0D9E58D810E2A1DBB8B8000A6418D537B2F73DC0C43A72 2A75460B1E08FEFFE2FAC759F6A54F4676C672667FF5A30E5C2D567F9218BDD8 DB244BEEDE93D25EB91143B6ACE6C5F7B96B69D73A7565FC077F69C0248F8941 8BCDE1100AAC9C0A4EC990824466058841AA79C8F487D72C1059C35F1591CBA4 C5FD7449732E6EFB041E2796B96599AF76D60DD01DE6E12CDDFC0C416F88CFEA 701745881CF746D046FDA83951B85C9434E25933EA449FE62A1EBA08C27BAD80 A6FE60026100E810BC99FB9C338728B8F1EED8C5ED2035122182F5520FE4BE78 CD86A4224001DFA91C7A51389324A33DF82259DF45DDDCD6E2758C7F20A964CB 194A277F8D7C27115EC7880CB9E52D2F40FDE794040AAB6E8A4AD04027E980F5 AA9182EA976F52171E65D5D4C1E32362FAF7E15AD8683B641AD34EA9ABF9D1BA BDACE5D25753987291EAF22F7CC870C442A83C2DEBA92AD1D1C34150F69EB187 89B6AF951B871F736C58D3C5CDEEB43F4D8584E21F53E24C76AF933B99DC6CCE 7142F2116C94BC3773A9D824C47B3303A159B423BB4161125D953327E235E364 6CBB5497CC167BB97F7F80E6BA91211C6B3974194FE8BD70D0889F7CFA5D83BF 6E6D0CEF2CA4834CCB2FBCB1E71DBB7F1B891DB5159B1986A7321760E0F290D8 87614681501E9F356D2E8CEBFC22E084586673806F30326402BECF12B2DAE691 7386E8BF77D0DFAF9334CD770B9A513E9A81CD18BA402CAD84CD6446E376694B C0BEA94CB4061D51718A2C19F6BE68B48A2B4F25F8313E049DC3569E79652F37 8D21CEA559A35E3FDF77EC03074673C853DAB3FB0D89F7239EC9F5B4C26F2229 E50AA5FED67DD7A8090B4B9DEF3F1E6904FCD280A03073086FB142DCFEA91D40 A47331AEA0692E7EBB323EBC37C23CE976DEFC496607328C82DA0C84CE8AB024 8216306ADD0B09BFF661C67E624142E5E632A8FC0653CD8662D34070B820929C 4046E42686390160847FEC29D135E550C06B6A7CFEF6FB84601A4A9260A80CB7 43BE930F96EB7AF60FFC4EA737580D403C2AD9FB7193B91F52051863966B063C F0AC661FEE3E1D56636F19BADE32258205A8F125FA3CEB771D04A712A538218F 4D7849943E42F64B1EBED3ED9FBB6155E906ABA492BF491C1CD292948FD02352 EC00BD9E6A988CF1656FEB666F4DBED5B02DBC76714471059DB6606EA1E5F3E4 65A2A5D9D8953F7E0861D901A34B4521756206DFAECCE4E1FDB2C9E5D0623205 5900AFE53618C5FA15D0C72A80660473FB74B60F601BF9E7C653364C6C43E8F4 5AA00A466BDCD14313F34BC1C67B4DD12223292DA847AAD10AD7EE66609148CC 87683645A9BB6FDB83F94FB0F1C80D702E88CA3622DB2F6650157D6649F47C07 107FD8834089EBFECA2E2FB1CA35AA548A152EEBA45E2CCD50B5C81390E528D7 EA05B62AD8BBBA8C43DD1FBAF50D116CBD582831A2AB2E81F034C582868BF2DA B2EB1D736AC5D595AD2C4DEBB0E0C018A3B7EDAE9EDD95388488D9EDA11581A2 F984A832EA9E926C0DCCA9B9F3E0583539306D13D4E6FA3DE8ABE1E1ABC9FFE1 94B2BDEFF644E04AC0296750F837075F9A516F551F227E332AE0C45CEB16B08F B7C32D79091AD49D634DF939D5245AE5D3491C9EDB6362517555E4B55E899A32 0C6A4B4DB82DBB62357E102F1657FDF73E7753A2ED4B2F54CCC525E61D568733 5CB1439E638744D0B9235FE44E4E530F227C90B5ACCBE342F7CFA6A030BE20F0 E380287F17B5A01431D1337184C24FFCFE3E9F1F4BB9B6F960F37B7ED3B1FE86 69A7929488D39FAB5EAC70491F51D59B02DAA86B88D0D32C851915522B574574 DF0CA063F9C01546A34791AC4BE0B9B41DE95DAEDFE580289426981D2BED0FE5 67893971E7F155AD0BC783FCE27D58BFAF762F283BA593E8F8774DA17421CB8B 5DCD98F30B631326D0D77332BB82BA2AEEB5DC2A24C7453AA1DA4DAC8C62B07D E4455445069278EC44BC7349F2E2B6BAEC3C073AE10348A0DC89E7005CC5CC07 01E4C06244C26539A3B4DFB257E6FF1E6CE1D87AE03B221B00B0C042E706E3AE 1FAD1FC35DD4F4AB5BAB4A7C40D3218F27446028D5E1AA9329E5A7004159A6B6 41773E433A1D7393EC064AA77677BCFB7DFD1564FBC0499A3CC03AE7978FAACF F0CD5F74F34398F02E5DA6CA71FDF81AD0D9272E0A8232532C5FD2834CBFA56A 6A663923A72BA8EB96374161A6014FA8D728022C575A0A9829BDBC5E0BCE71E3 3FDB605490269EBBC669CEA1B2682AB55AD6559A2E6D216A51785A8190995D57 42CA749EE1D06CCD1C4FE73510B7B51BCC024EE2590754AF454927602CB953AB 77BE62814957DB87CB961FC4A76BED7A443F2F97F30AC76DC1956C2B59B950D1 EA9035C68C48754B310B1284246BAE76CA152057F99E64217315E8552BA2E3CE 159FFB184F4A70423B57019F7102A7AD981674742ADE5CF948C01948DD185915 6C53592491C707F98527C6C39D76EE4B785F35B3572F79F26E3DF7741C989DD5 2B1C067749728983916143B6894ECDE92104D4EA70A0C42EAED98B58DE4F6B9D C5651DEF038403CCC6FCC22AF8311F6DABC9E10D6E3994D4B875C07D760B83A5 2392B6AB9994D4956DA3BFB75C01735CEEDCA8D39AC206982D69072EA16874EE 12AD9E7A5E73FC9C8D0A51BAF628CCA1F462E387FA61C0F17DA7F891BDE65E61 F0F03E726B0CF4332C930DB5AE2692CD06E05AC80A5D1051A2E5F8CA7CDA5CC1 4900FE5AC4BF8D907474D2B316675C88A1695761AA7AD2F2878EAE098061913D 9F0CB471A1DC98A227DB63246401A18C5FC7F2EEEB317F4B265E24BC5C9CED93 9D473FD4EB92473973078E830099C975DFCD6C9DF4149FEDA0F7196B280B3B93 70180D9BA390943766E099AFFC6D380DAC4E9309BDE69951DF3E18B6DE57CCED 8E31045EC3ED9812563DCB813795730AF391C2B9F370FA2A72C9D5CF72351B2C 387043352CFC2407A089AA0A6E5A0E36FC5832AFE7B9F360D8E60F04D02018A5 7C42C5268F72390B92F24F4A32EA807E3C5300EFA1243DE6997A1A391EEF1BB7 78AA108FDDD9E55754B6FB2F037DF362CD51D25FB8D8ABCFB167E623DFD01D61 769EC7FA560CA39EA874600DFC3E1C858463C1D723D5A8C449E3D96535A28926 AF554806FB94A39BAD68E1720FC48229BD6DE0D7CA15E88AD69AF57BE15E383C E7E3E1E32283ECCFC8C24129658CA7186FB2A80EDFDE2E0E7ECEB1D14E0D6B5C 95A4A3DD2C95F4DB66B8C7F38F943DFABA6F1BC3EA96437312189CCA01C05521 C6931C61EE0014299722DE53AE9DB25336CFC7BBF6A169B31AA565F3837D7F2D 52479739FA0CB7D7A6548DE527B151B90FD5B9B94EBC8250D7C2D7FCE44BFE3D 92AA70DADA86C01CEDA2F89C06CB1FF2A48EC4F4E7A7A4B853BFD67EDE3E9D14 598B7CF8899E58182D9FD4CF2AF9C0E4FB2E4137DD4A5E19456AAB88DED889A5 06AF09BEC6231B4DDAF4DFDB628E1C2F3FDBE783D9F09410B65403771BBCDEB6 33A7FECC773F0DEFE307E99075E78C9492EA7CE6B4E73FAFD268B9B615ACE4E9 B59F914AEDC59D1CCF133EF2D3EC8CD2636C7595E2DF289142BCECA3669FB98D 019AA67D6823547ED2A6ED03273458A782AB7D5AE1C9EEA6120ABAC8A3CE95BD F28C68941D80DD51AE9B5D65A88F3F11439C850556F67738400CD1B2721014FF F5ABF462B501CDE0F45A417653F58B43BA46170A4734FF8C7EF5ECA31EDCCE51 6BBC5C10F8487CFFBEFCFE0C55C96BC101262A717916C2FA86E4C6C813BA72EF C58C4187A24EDFCBD27D73EA8751BEC6AF2BE5D364B36360FE5107EB9C8B530B 180FA5FE35173C4A3223B3F30B028F35354DBCFDE98B07E0072BDF6E223AEB08 4E1BEE84D1D74D328CCEA15220556EDA69B4FCC7524EE53A1CC08B76D1D032E3 EBDEFD92C280E5285EA5BFA33546E868B478BB8DC299C5AB76BBBCB2BF887666 1924EF9364C138A84F69CDB2E4D39C9ABDC56931DE20936D02EA667FE2E7DC42 D403E3D9843EB9CE3EDF2131144BCCAACF36F60305B5F3FC99801D96DE6D1844 200F82A091AB963ECC6277904A4EAB15187CB68B42352377840EAC0ED32C7AA4 F47FF9F9F72BE1C04FC8EA8CBDBED0A6C497C79E393181589953915DD25000DC C4F770BFADDB64D43A95D22A36F4078ADE7F6EB2D330F2EC65A00EBF61C3CC0A EEC2CF99541BD365EB11620EE5D9892E1EA367C94458E249EEF2E27FEB74E7C6 AD543C6782896FB89BEB9676BA0D3546873D65AD04F8F370C7D901E0FB2EDC66 3425AD103494690FD83DF266378AFD863719A906B61AD14FD0883D2E5DA3957F BA3F4D3D6A936B9EEA13F4282B691E5D6A24259AC49BAA649FD0A0CAF4E86549 A90CF695652187AC31D6CBE33A7A627DDADFE91E5B66A7444E03B8778DB7AC51 9D3214376AF4DF0F028CB8B51DCB49C0D16BC0CF2E9D34A3C49E1C23ECD61D66 F8823139C2F57B340E62A12847E6E04C0D222C66EB87C13F1DFBA6F45351EE6C 2936E76FB2FA64685045E432A9220ACCFD2743BA9AC578C920266268DD470D57 CB7EE265AC22BC0C3FA98515EC0A887020ACD245E41F77B7B67DFB56912A87EF 90E91F590E3D0AFFE6BFB8A71EFF25CA82E83A08F54069C0E409B84ADB1F062F C173ED6DDC66FDD1BF54D4790B2E1C3298963541402EA5327E2D2CB82188E5CE BF0040B2AFB85ADB9D32825EA1DEDD1B5D3CE4403A9921574A62DC6BDEB9BDC4 59583D12B4C4E34238133B0FD07A185F9ABEB70A1C9D8FFC5ABB906E4E5BFDBB ED3E22FEEBB158ACA873E46DD972D68B6A7F9E8655F8645E486E90AA787AFF23 68CF868121B4F49DB72D62A774636D87774A89036B191A18A8AB65E7B6693F8A C1E46A0FAE49F99208FAADE3FEB7EA538CF17FA4DAA13F81FAE422D9808ECAF7 4057D97E7791B0674913DE6E1C311CBFD6A4F1D9407C746B5CCF85746435129C 0E9306B7CAA37DF8BB5FA19D5B2BD3F7D3C7EFA818203062A413F47E196A0AE0 40C657E7FD18F8315ADC809921E3F8E260984DBB59B80F4A4733D5DB7AC94497 87BE8F0F4285EFC43D935BDEA4C65C22DE0D45FC244DA877AF96B37612508C78 AFFEE0E71A9981094541BE66DF77963E19B0D6F596FB6B49025B9C1452AF9680 4BEF8BCCF854B587C635DB77A2C667ADB1245DD4925250A36EB615D215DA76CC 3838EC3EEB494BD9216D4122687D43FD97BD3601C8D558CE6821F95698101485 CBE2B12BE945D792CB4CA189FCFDD22CC48499900F69ADA3AC5EA5CE2CA47AC0 5949496A46EE7EBFCAF67BD4EBADBFF1BB9A1335527DAE3516E04AF85C78CE0B 16D2AC1928BD854230D15D53EC039141C99CB8BC743A2B0555D46A5EA9FAF6AD DE76975C215F4F9754DC3C931F32057F9E60C8A239B8C10720DDBB2158FFAA39 12C6D369BFAE7CBF7CC4BF7182DF28B6B1783E9549C3FA67101A0B0F4634156C 490E52BF4A86CB77FA0D9C0398ACEAC1F5BB9EB6EC72C895DB521BB63F023111 90A218429F773DADB9E63D635405984FC3CF8757689B30F85AA5E769E9729ECC 2F48DF114D420E0AEFB7B00CEE2B410C3194D55264F189A0A54ED74484498007 3C0636AECF37922BC33744D46F77233D5C8ADE003743F6653CE0F126365AE3D2 AD040215D8933A2CBCFD3B0952DC4E24E9E72AD69234DEC43C71239E836B3DFB F26952D631FE7E8EFF6271B224A27F7FA1E96F3AC05FBABA20CACD3A12B72A35 D21A1DC37DE337462E55CFF391622B717A93E9792FF8A9BB5972A82B9B4C5F04 58022E1E9A78CCA8D2346220AC3C5B0CB831CFFE4BB1A71F61DF9AA60BEFBB21 3515A274994B012308F3138C71E026A495072C08E86747767FB2CE7E2569BBDD 9B8298119C20EAB9C060E261B4A4353F5B378C3E28E8D5DD0DD68233AE20B3ED B8B28502BECD6481C839C32DFAD887ABED85A6D8F4D7E23CF24B89F98528CE11 D17A2153F9B880A44DA127FB1E1CD35CFAD02F321ABBDB39C8A86E3312D312A3 0934D776262053D37DE64071DF4C154533F31E9B603B5ACDCC42D33DAC11F552 8C398E5B9D82914C4BAE356BDB0C203B6498AE4EE7B66F3F947293CADF5B5BE2 02359FD4068BDF0F5A23A7975BB8BCFE62D91A86BBD04F89A4B36A579F160D6B 389D3E0FB9987ADFA5656D20DCD2736493178CBC11B31EE85C916AADBF01A00B 5801A0713F7B08CDDF3AD099DCB9733333CC4DD330F1043794F112079EBF0722 FAFABF4AA1E9CAEE9BDAD14A0A08C933CC76BFCE1EF4C032EF788A5426776A5B C2F4D0E8C01C75DD97271F6B692A0F78D8C1B89F244320077F915E805DD2DDC8 651544FC5ECED4AA348CEFEC8592C0D2D94B42903FA3098C2CFA1CDB632878C5 E7409D5D3D823F21161DD291EB608A6ED15BCF40945836BF09E4EE720362B350 27FB263C93F0F9C40AF3BD21A46E89017EC5F5647D01E2490B7DDD265BC0168F 31609F5F30F11E6ED9BDF02D479F4F2E999EA6E26DE7032503CC2A0ECDD45507 2D62A94C7C9A5F438E0D4B850D8AC83BEA709A50386802AD6F128E5596A0582F 9675 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMR8 %!PS-AdobeFont-1.1: CMR8 1.0 %%CreationDate: 1991 Aug 20 16:39:40 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMR8 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-36 -250 1070 750}readonly def /UniqueID 5000791 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C 68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361 3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65 48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3 9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB 0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB 8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466 FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3 9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62 D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8 9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5 ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6 10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582 83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493 2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA912A2BCC6CA6105B29 044005DDBEAF88E0F05541BBD233977A447B469F013D8535A9D7023CC0FB7B49 A95CD2B6F18935C37F49E9A73E97A8602C5C26EE13D7A04A188336FCAB4CDEE0 23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413 19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42 1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39 8BFC7EA8E6DF857A15FA19A60300AE89F242CDC115926ECFA274C554DB9367A2 DE1C22DFE6DD0E57501818A9852A11C218134BFC623CA03CE899E39A6F3F1C34 3D96AB965DB762F371E6968139ECE5F9B54DD591978E56A7932A65FF5D68691F 149E5877169EA9445529A32E839B43BA0955AA3D59FD735140D955F33718729E 0F3ACFB15AD3AB15A4A99DE85FF976E6D754F5E1924822D0ED479CAC3A6F4A6C C5600BBD2E7CAF4220D01BAD0E80B5D62D9E28469F3A7F2C54D3696B986CAAC8 B5356A9CBD7ED768F5ABB80A1221D3A400E8F2F425D05F01B3865B9006098C3E 51F88BF0ACFE65298FFEDBDAF7A940C036342D1205ECE3C2D62B3184CCD7985B 134685A3B43AAF28F06F2790D8E1B02BE5D8840B4C8BCC5D73C1EE52D38E5E6B 55BB35C726D5DCEC05E381FD68AB37A2C98B4169C611757AECA9ACB7BF71C5F1 2736F4CFBA514D00657E1527945F2766E8084F4EEA6B48310AE33B664B0D156B 223C7FE9DBD9680AFB7FB2AB4DD39F077DA506D15FAF859FE2EE99F17AB2E5D8 E59410CBB2515DDB3546543EC66CA96CADB0520A671EA1CE0E731BF4A2F11581 48ABACC920DA3D5E4B06C1C53837EFC76D31F9CAE2083B3A4A3C9D86B674C201 B24E72AF9523A74FA8EB38D42927BD8F3F8A350913BDCE2FD3D722EB7EACF701 1CFAB67BDC605DF24456CDA4A8F4DA85ADF9F0FA9387A0400F570DB0BD23FD54 19DF2D526ACBB8D15088F8218F81A018719C477231F4EC8D4C82E6649864455D C195C0E147EA70A815BCB670E37002F82CC55151AA22B7988DF0B1F3D97C2297 570DD912A9A53685CD2B459DD0251DD3B60F8AF6FEA3F5D1D2997EC0EB7369CC 89E255BF02E1AF3CDC33EB1EF9BB06EC661A80258EA3C58DB28E83E751AD4485 BE95E251DD783034AB3A9AA614A9B7270AE408B096E1D13CC3EB1EFE7F3A5DDB C84C093D9D6559473A0947FDE63D5379B33B3FF63A89BC7C3FBD7E065DDBF47B A9423C1690106308F848BF219DCA5E2E45683B7BC832F1DFA15263D9B58BC4C1 B119546AE6A13112DF2F5B55F1C2A462992CABB1176CA2E31C118E87CC5B073D B69945CAC489E59C4DC9347EE68F7850B6B71F928BD3729464AB606D6288C5A2 E4F5B9B8C95347A9B1176C3F31D67C3692618B96FEA9DEEF7586D5B9499A15C1 3BD1D24F34EBE90D782871CFD61031BC76518BC3CA4FF3B2DAE03E67CFA1825F BBBD76295F4A4A0B714A9D8226F873FD9464C08D9C89C1601AFFBC5D9FE87B03 9DE82F9FB1006020255A4D2F7C34844E2FF4BA126EA23738828E639028FFB3C5 5006BC1FAAE83A3C16CC096DEEB7E159D05DA60400EDF285768406113C467273 C6CF09B532CB867B15D4A77A17B128BF6B3276BB729E3808279E652CE7167E99 A2E5E85FCCB7C4061431478C56FE58D17D32D6040E0621B423685557A635E283 41655F5B644B77BFBCF226136AC71C34B99D73EADC2D86A93EEC6FEAEF953FB7 2F7F0321D1E74147A4C834D05DA17226659A80EBDBB58B571FD02186CA04B96F 77048FB679410436CD63132B5B7442B56A084F67F70161769005B24B722CB0A1 318CCB80362AA7813941FDB03CDACB3332C1D422E198429811B1BF1F26F19536 DF1B45FBDB21B3800D5A9FA5E522F7BC34215C650FCAD17B165013F8656216B1 57AA4FD5D16D496264D27FA76D132E1BCC11CB0596867D87CB107A5D70380CF9 C7B3B92A82DB0D60D8518F9A084D3B6F28434698DBD54E0D5F997760544FC863 565C4AB7D3B000DD14CB702D6105FB7FA2B34CA81A8E137BD76A218AD535CE62 D9FAED77DFE805108D9040A3B9DAEA0490E480C9E0DA4585CCB52AADDD8663E4 A0255D6C2FA8842CF8EA082C4169832173443D93B5CB030EEACFD1DC6B758ADB D8106933A7451991DE1CC3E7D84EBB7BA87862AFCE5BEB8952F0AF10812250BE C97725960EA7C09749E9A6163C3DC1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMSY9 %!PS-AdobeFont-1.1: CMSY9 1.0 %%CreationDate: 1991 Aug 15 07:22:27 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.035 def /isFixedPitch false def end readonly def /FontName /CMSY9 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-30 -958 1146 777}readonly def /UniqueID 5000819 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A 221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A 27D1663E0B62F461F6E40A5D6676D0037D33F24E2FAC2B0009AD3C8350CDF8CC 65BCA87979C36D14CB552E9A985E48BE4E88ECA16DF418749AF04FDD2B0E1380 D281BB2476BB45FF30946B247DFD7F57305FA87E50CA338121C71CDFDF927A9C 77FF14CB4A1D6D80356FB1171ED38C37702350497B44E42CE31DB2F493807DAA 15B887C671199A54C4C1294BC520F5538C15556BC43C9F62342B121C6DCD6C5F 491DA47FF360201EE21C08A781ED0589A6DF91B99FE118B9B29E4F068672E52F 1A06C514D91C4C937D4E642503392B1CD1B8F5332A2C13884EB17C99A3A4EC0D 3790FC05A18955A1EB12B22D2DC9858E6236CC95865C8B6D12F40FB410CCF694 531CB96A4A7B03C56094B12A7BFA7D9EF17FB3FCACA8B198C1E881F9049C0128 A3007CD841559AE4100BE56AB1382E7B944EFC95B37B290B37716B3B1D6EE620 CC7F6639295CBAF981D03F7706DB316E9BBAAE431D9CB6A53AD08A0CE7669207 14B1A5F9AF50B298A62AB0706FE06421BB2977FED2FC0328289DE237F52267EC D3D54AB1FD59A5E55697EC0E96661AB93C9371AF2878E1ECB759C210CB66DE07 6C21F4320CADA2AB8A9894D2B2647EBDEA81AE0572B765DC1C6FD7357A457059 35BF747626C88B168F61C425A80B53BA50ACF6A4A3E683C42EA26F62E222CDF9 40B9E015D2B5738D83A0D2521874A0FCA75E71D8167A353E22469BEE893D29B4 AC8A3F0CFFA19180948D7DF731625E15B9642BAAE88D7ABE70A4FAA5C620C89E 1A287DC5E728C0B39765F35E071CEF4BE7AEFE020C2C464C223FF7D009490379 FF5A55E18794010C56506564007F445829AAF3780956765D51356B5F5A04A14B 86FCFA596B010BFA2B5656B4C99C8AD10BBCA512192547DF7D212530896C0809 3331F61B31EC675BF3FC21A605CA79FDF0EB383A1587E7DB264BCE67AE10EEDC 00BA380D7F543A652B70A4D13EA33D297BAECAEA8BFB08DAB702BA8B965B44F7 CFDA9941809D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMSL9 %!PS-AdobeFont-1.1: CMSL9 1.0 %%CreationDate: 1991 Aug 20 16:41:23 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSL9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def end readonly def /FontName /CMSL9 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-61 -250 1150 750}readonly def /UniqueID 5000797 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142 08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C 30783C5D479C203738F62EFD2B5B2E4411A9E9B1B2D1062E3E115E0B0A27F7D4 B189B800FD287297D86CAC19A7E78541E5DB5B518DD757D0412CFA5CCA38AD55 111D0E1D779819A83100AD907EE41C6039B64502BD92D4E720EE46DA8C5FFB58 DD34C4123DBF588726E01FB3EB389F02B041F752811ECBB8A808008A4E48EA11 C1D6C0351461EE08AADEBC932102C6DC259F56B14D408A4A565061B547A1D97E 41E364802889380AE998A80611C1906D5187732BE0BF0FB1E460B6F569C6E1DD 7C627D6577387FAD7A819AA83868916F251DCC25C015EC27CD8943A81511F9FB 34B8BE2AB72AD659A61EFB9BCF0502DE0A99C24BE1119B6D1C8E6E305187D1FD 353F808B8425E04C04C5C64A87289DECF8BD576E9A57627938BCF7681BA7D1DB 953556F92472A07851F01AAA08139761939C4D79BF3910BF10434729D6461061 C3C76F898F8322B982CEA71F5E4F385CD457F84F58EA00F5F560C815D62C2B78 96A5F48BF55B2FA5437B7ECB49CD6D72355A2B401945E1CBFB0F203E19CD384E C1555EB30C93FD7EE042F4BC7A85B5A9D8A9F9244093919954F5874C627A6E3C 819DF33C5A46E851536CDDC8F125D8700496D3FB5AC1DF7E809C01EA71DA655F 2B2974626D7EC1D4B56E0E8FAC5B739A2DE69A90A733DF8E98FBB11D9AA75DC4 B7C084AB034878D9A72C83F80BF014B243B2FD2432035FA2828A2B260F63FCDC F00F334B3C229267A0C14628D804A714C6D27E5AD6628D13DFD556B2B115735B 903F6F6D0590BECF0C8B6422FC145470D284198E90562A01614AB37C4C3C1712 EE17316C9C8DFE489CA3E364A73A507A60C93D78DCC50EA1D7FDD82E6EC744BD 7D6F4983ACFB05CCA54BB51C5720FC599DE8A9DC1D329C6B22A68530B9C62A64 4A7FD9A52328537E025C43AC9E157B07E6992BC6E1B102B9A797997A09401384 877205E010E5B34285147F4B560422C271FF3D1E8685719E296B5DB74F59D315 F4472134785B3E0221FB83A2C9176CB56A7E2F8E46454EBDE37E9CC37C7FFE26 CD93EFB947D47A26623D2698C092B86D2FB8F2E403EF86EA0C68B7FA211E29DE 3381F4CFBD42722914EEF6985B9764309BA601724F0F709FBD95E22D995F19B1 CB2C4A61CA852D1F0F836D9AE360FA238859E5A1B96BCCCB83973B9170DF59E9 8148EF1F7F4E4827232D967747EDA352838E2A572EE102BDF8E7D43347E6ED3E 989542C13B877302AF42EC616E9400FBC08B4BF13BFD6FC4C1FF771FF018F205 01B379BDC543E48B65AD694F3DB0805943958A1F76B5C3F6828FC9C8B4885DAE 87D98E91E905D709D6439A927D70C0430EC400EAC76B51DD414448939EB76B9F A865DE6BA8991EFB6943A4EB146E119D641910475DA325BAB974E232B5FE8B14 31713A56792640DFAB86CDA546EC2EA3BACEA9E52FA1A265DEFD55905E8D61D4 788D927D9E6B6BBB5602A96598A37A9A4B65788A5ADEFB4795A69EA7DFED75B1 55FF672FC5408EE159919FBECFEF23D83126161AC9DAB00D126C6878E02ABC22 5384931AE95CFBAFBB5A26D6FF21952DD0FF63B97F52CA442B50C7D29F1F652F FD551A55F9FBEB26911F44DE9D01EFF47EEE9EBDEEF8A2CCBBA0EB0B8A98B4FD 8C1846167BA62610B08AC6E3E758CEED584A1A7F0E8189FE29E4B752ACA22854 0F0DCB3EECF30805D0C98C991E8355B332910D20EFF9FB29D92314AD76C241F4 E7D245D2BC7555509CD554B69A0C7A50891C72766C46CB7B7059820932C78592 174B34756A4B962CD1CE693E09CB466F7E5979B19ACD68DB97579BA43E39BE7C 6F51B244D76B32C52078789E83C6E2E803CE45469BCE70B9E74C1AFEF4C207CF 28BDA4A20078E1B01A91E67D7B84B885BA7EDFBCF6BA0EA5000C75270C3796CA B0652E247279322E58194382DF5A6EB41FF7E51A2646DB93CB8FA9308FBD7DA5 04139E7CFDA700D005C009A7C853AD9DCB6BE66671BCB2B2AC2690AAB849665F 6F0B38206B855723F4999F2A28E0B46FF59F8388107567BD2E0239FDB2FAD9E5 EE6E344126AC9FFAED8DBACA5991A3859E87332B7F58A28CF6CFC198AFE0BB34 E781BC56EB6E3668B43E5A389E8BFB19608F9D45788DB5A266B2318A94F2FE60 ACFD7AB251754EDF67090AB1F816DB9EFF0512D012A8187760EE7DF8F83AD3F1 AADE182B742C824B79E3D054F85CCBD09CD0335A6FC7F86BD2E8B6193BDED084 4BF3C44CA48C97807EDE6DDE3D9F1B83C53770E41DA3BF979DE08770F7DB7B1F AB376D496040CECD78F6E21EDB27D86AC65E0A4F75754C27800C5A5F92E8DF9A 56A55034C76F54590397B9E9F596BA2A6517692582D31FCB82CC3E55A173051D 167A7346732DD696BADAB272CD4F77517FCA900F9FDC0B8E892F8395EBE60D37 20F3C0883EEF4FB502FEA586D75C755E62F6BB8B1C3893599039799CEC6B0681 83AE48D8B5BFAFF11D01CE9EF796DF0FA6C916E57689553C151FC8543303386A 8C76E02AB62D364BEC4DF0F0C52C6C3C8BC173664DD057FDEF8A326AB81E2394 0A9A28E73AC4DE1EBE62F360EA5A27F1118EC97BB7B5C3A1D77A7802C9693557 4E11EB91EA5C5D83D0E8BB310B07C65C378B7D031687EE1993F2964A2E5BC1A0 CB40A5EAEAEE894888A1B6DB413F05F884411DD4ED64198300FC918EE048BA65 FE8A5CD461316AEF3CF6A1F73ECFEA2E11A5BB91AB8013719E58FE8435BA1D84 1FC7F1C9168107B6C97393AE9AE15E928D36D516DA6D5ABEBE76E7FA93DDE5C6 577995BFC87F10E77CEC40433640D7D6C26764F7365494D2415F40312D6AE7B3 84D7292D57D5D1E25B0B9933A3BB5CC01BA0A6DE71B8878EC43BEDBB0B8C11BB 89A0126251FA8B38A485DE1A23F2E5369A5A99DADFDAC3F360E7568602910BA7 17D81AAA2EC6227FB05D3D568BFF4BA6A0BE034AF4E33258FD3A3B77C555B234 79744BFF1684719E970F52933AF63DCC5D87BC989D4FE8A2BEDB1DB8C597FD7D 00269892E5DA78DBFFD0C4A6D8935386A803485C54497814AD137947D6F95A8B B35B43D0011CCC89B34DA5661F133AD2DA8F9F6A4B8A6942E762DDE5BDBFFD4B 13E82C7DF29484D5590F68D9DB24B472DDD29811311D5A822634664C99B6E0C4 0CC0AB9ABD3800FED44B590F983090D75FC46172632AE651B538E701320393D1 4AA5103DFA548E75D5939F0560A61968B32272DE18C8D9D0394CBDDD806E75A7 C6CACA3BA227E1795FE6E272A1D56437D517CCAB476998AD038C0A2FC8B4B1A6 31BB333A0D8346DC641CBAB20F809FCD696CD0547931701AC111E066608B1AB4 F9B5B78A9DC489188956C0EF11DD48745354F1A08DA67171E4F771676EB27B79 2999657B86CDADFF15F5E7D840F2C44B5A2576ED61D4986BD92A9D2E4CAB681F 05044D450E385BB37E2B4B57003099CB4F25B71EFF35EB4D9A4454570A9E2CB1 914444A11E61EDE1A2B8EC31E0D859DF7C1480DB411CD2FF3A7E54D37476FD60 CAE7C6ED0FD7EDB5B50E28DD0D5662637F6C3D38BAC802A2FC24730FA22EB0A8 E411F40E0195910337F2A60459F9CB0B80B5C4326DDFADA1116DB757FF763EB5 C7752BAFFD09947EEE1D4C2A939C2151B7A9F4B4F75C69A5C3FA2334800F5FA4 9483D1F89CD18927E760352E139FA97BA6F2A046972C7C5EB5BAAD71C916625D 99EA4AB699EF324B6EF33A34B20FDC8C5D2A985918B63143FBE266EB3E22FAEB CFCB8FFDA90971A99BA87DC18D36BCE4D980EAD346720C6988EF546CC9F80B96 EB7F7DE9D86ECBFB5E5409572BBCE96A3B0FE50B1A1FC1E4C74CC84460079EA0 6732ECC384852B51C37BAFBEFD94DA8CEFEA3A0EC72C5A07CE2FA52C47B123C5 85FCD690F6FF335CA461C79E1B7DFDBCEC423C39FA78622A74305EF6B1B062AF 07DF4537F3342D62E3B2958A5C43552A1C3A8E0947EE0E5F265F18C37DA1A708 8CB661014A45F60F77A8EB50CE5C11D2433A4DED9E2D8E60FAA3ACEF7967FD67 9933124801036101D79D9201A462FC20E99F5DAEEF8556CD26D920D6DC7E8A53 30EF4515C98015F69CFA9CE164A3312FC6D70A8581BA2D7455A3588D45EA7DB8 CCA09D3281CBB2B8D03AB099C1D7DF22B997FA68041DEF7C4D06330CFAA6E0F3 447FC009737D6835FE9D5CE5E43D8D65FC21CDD6B95B72C525E098218CBFCC56 F204170F41A48B9DB5213790A55FEC5540F0502B17043E5536AB3AF11940B64E AE5A09D294B2AF50DB7BC41E6443A2E64D090A2E430D9DB8DB02AAEB5BC72E8F 1A1117A82A94DD8B6A68A2687E67D0AA062AD1D13F995D47D4D5A0BDA2BDBDC8 B4AF889342B72034886FF9E4B2E340242B6BBE33924BFE61BE3249A1B5471CD1 912CAD6FCB1FD522294BD00FB44FEEE6068947E0C7231D0DD717068CA23F14F4 9A7559CCD940902E5BA21FFE2A6DC46BBAE709C3ACD81D3D2551DE27E9AD9E38 A9B2E7B10BBA1C62B001E98D5398949C1BF5653AB6B8BCD95EB14EB35A3D56F9 A0E532E8A7D90F283D94228DB2B80898476BA53A668A5D27ED96CC6DD7235FBC BC12943627C47D896CAF129A151ECE4976A22A6DA1BE07945385AD72F526E12A AD43AD0AE9BDF4C6434A151A21661038C906DD35C438BE6A2F29C4A40E325397 6236DD716DA1970DD7BE9A1591DD953CC534AD908F7BA561173EA727A715112F 8BC73B0BF589AD83FE5C3AA44F94AF3E487949A1E7A241D940027E4C8DC135CB A3DE6D6A5D9644459A0473DB32C17E2248A55EF2EC147347833444D78449F222 B7737E45D51C70DD2D5C6F196D5955B839122BA3C37375F5BB55B8660A908ABC 920CCE09DD33EEC59A488A00C56462F177425770BDE5D744BE4F1EF054B1DCAD 5EE6D96ABEB9B711189B57C504BB8A32AE8FDDB87C79E5B8153313AF3A1908AF 678BF4188748AB4CADC77CCA4839CBCE5D7952D937669763225337394D79040D E8B53C0AC92D72B47930354BDC2914F7C5F6C28732EFA092DA0A71C4913A679A C96F5F85FF0802638B8B1FDFFE0FD2CCFE7C434530485C3B2218FF18F8FFE5A0 4AEAB4C62161F74605BDC4F88742D3AC0EE306B550560266B7664F12BB20702B 8A822F5B479431964B81D78D28BCAB4EE818BFCD276F04B30F80D2BE6588C112 E145A506987AD07804EBF1094BCE821E044CE159FA01CD90FD3088F13FE81E2C 1FD69E9D731C67DF1EF40774E75053BDD08ADDBBE6A3A25D27B34A4D26D81446 BAD33E07817B9731B5B79C5FF9773C74976382FB60785D12D166ECA86ED93EEE A1E1B8600066AF31CDDFD8FCF53A9733494F9C7E193D51F2D466E20421833EA3 9FCBB401089362DCDBC9B82E9C86A113E69AD3B3FA5760C3AB1B369C4C3C2C4D CB8F6331E1F7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMCSC10 %!PS-AdobeFont-1.1: CMCSC10 1.0 %%CreationDate: 1991 Aug 18 17:46:49 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMCSC10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{14 -250 1077 750}readonly def /UniqueID 5000772 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337 900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA 87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98 076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518 9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9 CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30 40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B 7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5 FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC 81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D 5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90 CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6877C1B3D2 24030F377820DA58F4B95CFE645109F3F1B80DB5FACFD7D05AE2909EEFCF95AD 9CB286C8B6C075CA2267C101B736139863186C193E31085E7C9FD88EF8BBECE3 933542C85309013325B4BBFE9A5B606780C8580ABDA2F5D0064EBFC23939B307 08568C3B7F5F053BF367DEBA349FABB9F760C44D100BDEEFBB01F27BFC61F51B C968C721E78497A7A3B90094FE11EEEC89D0D9E7AEB35D9A3FAC51F826300BB5 84A4038A08FE7DEBA3FFED05C494AE0962114E9A90CBB87B40B7B669DEEF7D48 6F0F21217F9911A842CF3882BC64670E58182A5D59B72EF73F62651CA3428BE8 9389C4D4A3C77C7EE2DFFA8DE35FF4FE4609914E42CBED28EA59AB9A5A049F52 8C30FC6673FA3B3F19FBC6A6CEB3D8ACF6B1427E9561C0EF108BB29CAC53BA6F 6102D4A599510D1DDE1D104812EE52010BED1DEFF3419DD223A26CB1A2B7260D 04989B2E8D900A82493EB68B883F32886BCCA8BFA961ADE4DE46F1CDAF2DEDF2 4DF21403151EB890326BF9771B5491E45091877E550E3DEDBD5C97ECC6AC49A5 522221DDE68940109257A1E6932F5514EBD5CDA3847B8EBCDB50D2987188FAB9 F2F96B107B8307826A541B49B178189A17F7D8607F39FDE8A03D350A324DC684 58DF63F286D79CA7612902D716D923B9ADF7A819734023F1DCD2EE6D658CB272 ED28DC9B0B9B8E2F1047C1DB4360F0F869C1016E1E06722CCC5FEBDCEF6AA77C A20DED7D7A6D2ECC5C86207CC70F11AC8F73C434D9E70A50CBF1F07F2F0F2B5E 496A921C5478A261C5DEA9F7AF3D1A8F99B54AB0E74C524EEA86974E77C93AD7 38D4F466F9A676A7BAA9BF6D65D1FED34BA6E5973BCAE527218471689CFE300B 34B3DFF8E97E41215423B5C9AB0818D56CA49D0C992C56CCD118B6888B5D5335 BD31E25C78EB3EE23DF829F2212F2A0739E0F2C32B172C6320073E848B00BBD9 69E393A8800192328C1CAD2616D3292FB854ED49E55A3441731BB12AB9077A82 8991BF0015DC243A9F74CEFB373EE008472682CD8892AE19F4B62C10AFE30014 582D71803FE68145F3D6E7E6324516C34407BE01AD3136A85EAF4D9B73E63438 73F59F3E762F172979DA5D15CAE355C1E655B02180670ED24FFF18E7A083423D A467CED627437A0117D0393033A49DC152366B43C60DF5F210CC8AE82D7A526F 3C71E482657D0053760CB77852FD9E573FCE80BB7B6E50755C24ECEAA4B722FF 7761BBDFED54D877EAC57DBE748F15F065B09FE7651D16C770E58872EF3D3FDD 0E5670A12DFE4E8CF5BAB6FEDEA290DEB7F4782F9C267BAA459BE20CDC523FC5 E7C9EC7884125527B2B359A1B46DC273047B1F2A8C8002E889773BC62EC8DBE8 E370B2C59D4ADC4036C19C8297759B152564B07D34F3DE3C3B4A727394440345 85E0016F299FBD33E0B78707E6583F378FAB8AC21F04C770C4067A0EF972ABCA EB84DE1953A17AB83F425AB5D806D80E2794148394A3A736DD12080D36BE6827 982B6DF9FD2D2832A444285D6F8FAB4776F030A06D29D537B727D8C5A398E8AC BA9ED6897909B78702488E76B20DC4129CEF52CEB5571203A297F60E7C2A622E 90F2E7970B32549C47D5F98531C860861372998779B7AAD623EEC547EF17E1F2 83C339B6A5FD9AD97B0A109D00ED4249CBCDA2CBC0BD554A073170C43EC2D915 6EC6B2AA585A0CC29B5B876819A7E54B11317706C6576B96F81C8C3DF0BBA72D FBC697F04B257932B96D86F5DB6474595F077F9993B25CB16079C0B3B51734DD EE4FF1CEAEAD920B9E69F98427C59089D42E99EB4FCFEEA78F7E5530172FD379 65A5DCA3F397118179DF2FFCA955475E953CEE18676F6FD06EA2A2DD5117DEE4 403E3B8D66AAC380080D38FF5D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMTT12 %!PS-AdobeFont-1.1: CMTT12 1.0 %%CreationDate: 1991 Aug 20 16:45:46 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTT12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def end readonly def /FontName /CMTT12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-1 -234 524 695}readonly def /UniqueID 5000833 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5F0364CD5660FE13FF01BC20148F9C480BCD0E C81D5BFC66F04993DD73F0BE0AB13F53B1BA79FE5F618A4F672B16C06BE3251E 3BCB599BFA0E6041FBD558475370D693A959259A2699BA6E97CF40435B8E8A4B 426343E145DF14E59028D4E0941AB537E34024E6CDE0EA9AF8038A3260A0358D D5B1DB53582F0DAB7ADE29CF8DBA0992D5A94672DFF91573F38D9BFD1A57E161 E52DA1B41433C82261E47F79997DF603935D2A187A95F7A25D148FB3C2B6AA32 6B982C32C6B25867871ED7B38E150031A3DE568C8D3731A779EAAF09AC5CE6C5 A129C4147E56882B8068DF37C97C761694F1316AF93E33FF7E0B2F1F252735CE 0D9F7BCE136B06EE967ABE0C8DF24DCBBF99874702ED252B677F407CB39678CC 85DDFC2F45C552BA967E4158165ED16FECC4E32AC4D3B3EB8046DCDD37C92FDF F1F3710BB8EF5CA358ABACA33C7E5ACAD6BF5DC58BDFC3CF09BA2A38291D45A4 C15FF1916FE2EC47FDC80911EB9C61F5D355BEDFC9DB17588547763AC5F0B1CC 12D2FFB32E0803D37E3281DA9CE36C5433655526ACFB3A301C56FAB09DF07B5D 048B47687348DEB96F3F9C53CE56DDD312B93D3918CD92AF53FB9461864D11B8 0138918D0B1270C54873C4012CDE6F886DB11BCEA04B023EBB43E0D0A06BE725 741D08B9DB688731A6C8F9F0B1FDFA20C46ABF1BE836FCA0757242BE4780A41B C19304DEC802CBAFBD0D116B1F98C01BF41ACD72DA8C56F8A03756E1850CF32D F657FFF4377B43F208A3F33191F9F6F36FBB0CDA3514D68ACD8DCB2FE67AB377 C6BD16D11FFFD61E05B8B311EBE8D05013ECF1D03F574982E3581A188E337498 3B68080D69F7D88F2863362577B6566B9526D1E05DCAEE47F7E336489F4CF445 E5F4E1DD5EF2B795F184EC5B427C77D49CF637A137EC97BA98D59B4D7743D925 3D7919D12F626383A146C73E61230B042321505CD47CBB60DA850BF28D824DA6 F16C4AE2F96EF2721086D08B1EF4E663B250329D83ED9132C7B8481DBD0F31A7 C02312D24A48CF1E77F7DED9F0BDB67355CA410DB808CE2D9EA21C99EEAD3CBD A9D14591A4870193B8492BC7EAB3639C9071F1DCB6C19B89259AFB0214DB8A7D 66210F00E6A9A2758030253D69402B01750AF4717F0F1F7200E6F650C579141F F756F562459E2EA4399AC07E91755D4DAD611B495501D9FB84ADFEE185E00232 EC0D1C0820007275B6563A4B9B2BE9FBCE88F364EEE58001063187C64829CCA1 8B4ECC7DA0E88DA099844F033650982268AF18193F3D6966FD5BE7FB80D68129 A416AD481F72BA5AB22AABCAC63C06610F6394B92E793120A121A97E53EFDBD5 97398B2A85F895B695802116AA7EDB1CCFDABE72784C225F04EBC786155EADB8 B1E07BAD4DA14D7295B8FDB158919E70F207F94867383AA0490FA0DF62CFCF18 D654A3F7D4DB1CE067CB013687FD898E56891FF1E88C091E85EC0C5445484A9F 9E436F2DF42BBAC5326DAC97000389A638A81BFE3D5498AAB89665F555DBCD2A 7B020C7710F1C8414F1209812A2F1B2C55FD660C2D1F957E9D8A79D133F04B3A 2ED6F4C9107A38256DD9C6DF111177B28C4D7EE9DDA69165E8CBDA8A2972F796 356EF6CB94601D2E4D7179B9F6C65DB84487964FD43199E423443079B4F4D6B0 AB562C65F91F5636A2754E043A4374705CC1FBA83321AAA11AA21EF4F27366A9 5C48444BCDCCF516C8CD5BCCADBE5F9BE6B5DAECB06C08B7640FF687CA44487A 387E934CAA5D1B8FAD8E5E57B6CB03907E92487C2A6FCE209FF2B86C30BDA24E B06ACD66689466847346F982A81D464936E5F60A9C8BCDFC8E95340BF0EB17C8 74BB3B6BCE662913D78826CB1CCAECD9B79E6FAA2B6A4005B43AD91D2A72ECC5 01D08A66E2E7AFF7D5F6237DA2C7DAD7CA0998C6509360AE543D7B27573ABF86 CB8EA1F57D57BD31340E3F0D887C7EB575DF0C92AA86F7FBA30B5AA82958D8AD 446494C7608E01C372D8CBF0EA2FB84A5A1164C85F4C83439264F16AF6C4A329 71FE93864D1C0D9DB1BD266BED6B32104897AF7591E5F753DDF6EDCCA19464E7 A7B52CBEF63ED6C086737084B46AB877E8A60DE4F8230739C83ADF8683690DAF E03B2D6991D62FC11B24D2E65E895FC88F76E18B2098E83D3EFF389D7B50624A 2B7508DE18078C321992C1FB18CC3E820AEDE33DECBC7B6902762396548892BF 3242D8B54BB0D4FF0BE555ED39E2E94449D06C6BE3AE04EAEC77D5C4F8FA7CD6 1216BD80C3E238ECA35F3A07ADAE8EBC875BAE0C9A4A3C00D57D7B6AA6FF35BA D570649B92FEF377E4F030BBD0453C4518F914A9B99C28E37B3F012C6515BAE6 694D1D9DE3DFA0F6D848079BD59FDC7817DD54ACCBFCDF38107C08367D2C6D8A B545907A76C1C9346E6B1936CE9C83830AF0813FC34391293F0B5B91142A16F2 53B0A4F4399CB9CD210225A41EA2820F327197E9B6FE98B990C85AC54FA0DEB2 9FAC1E0E8C706D09C51565E371B78E77C20A8E77C94865FE46D2C1389779473E 248F1FA5CB70FE0B7564B9A3F53E1B0B6F3944BB4F7C62D53FE1509D5C0491DE 58B0B632F3A0D759AA69C42DE2F32644BD7162957727CC70932580F509B132B9 7061F376D14A97BA9BF745568CF48C5C60523BC056C5DE5256F10CA6D4DA3CC1 37934BAEABF209B678BEDBDABD7362A617F40D1C6931FC97D57B6FB12DBEFFBD E5C642195675732CB19665203672569B722B478DBC2D0A5D131D17C18F0873A9 BFAE68CD0100DF2A1617946F01728ACFAC64D1D5C029BA1EE81ABD87F650D0BE F052DFFAFD8A560B15AC122280F695B28611C828AA84124F426716F3C043E819 3C2A4E99B2E60B303EABDAC27C340AF8BF393FDEBE6C100BB80C1C3A1648BCC9 891DDDBDEFBFD5D55DA4D899E005E9252EE820921700A07AF3DF5BD4246AD658 0BB10D74E6D89BE42778592677E7DAECA1379CF2CF6BCFB95F0FFF94E27FD6FC 491E28A05CCD9EA2DA75258CC55B122FCE3810A9216860943F5C475E1E6C3353 42727B0897BD855224721088984A843ECEDC79BE7EC9123E30F0579EBF8E4825 15ED4CD9E9FC89418472AEFD2DCE7BF467AF3A18E9B93D7DBD18CEBB003D3FDC 5AC67745D7CE854440F5D900351323CFE6AA3814A3B096463FBABA1B000497CB 1404E442254274D07764E60941DA1D9F29246B50CB3957D59C329CA15AB7881D 556ED9BD790490B4CA7C917F5DBAD45BC01C697F512C981F4504BA3819B5E2C7 EF22B26520D19E044524C05F48936FB745DA8A64C9F19E89F0CD59EB08AD55D5 E5EBB17A56393B96BD406986D845D70E50ECA300789180B91960E8777D5F8FFC 4182E474F39DF61D4EBD5CAAE3A6E67E3805CDA8FC9F10D111731E430EB8C957 DA1C287A837EE5A3443E56B2EAB66B79A2C4354066E646F3AE08535DC28EE26B 3F7638B403DE9AC029969419CF7F8DCB2E195A87C49C77F8F9FD87CBB6D4E2C0 176558D58097DE1824B4DA5E0BFE71DEE58C8B46A45195D82215A19CB65D766E 9453C1222E18D3F7FB47C61FA891EEA56C5D3E575D52F54834FF4D0D7233D4A7 4977F243FEFD7294E97CDB6AC5E71C7AA1D987176B20C5852104921F3BE6F96B 7B8A3EC61023E21BD5F9E3017DADDFF8FFDD96B782C309C0D95EE7298471FCE2 55F4560339C4E6FE32C0BB7175517305F3AA6A7EFF0E2793362C0CE1722CC80A F3515AFF287D461B73114D806C07A99C9A0AED6793CE8FA591356064B9B010A4 C96FD1889C33E335609F5B754EAB7E687FA5460113CD967368DB20649D6E220E 7574DB4E4CE0D5812048D5229D6A45175F5C452B24313A5E5F41D1959FA6361C 4474B541F7D3E480CFC126E7013BC5C43387A5052DDC793EEBA12568AB9EB1EA AEB4BA5E22B41E923A516348FAEC1D6203A9D6891740385E5D6C87B37D7ABA7B 4011A0BDDCDA9DC9E85CA84A52E4826E735027444AA3401C27E231AB6AC4EE2C 0E163F5723141E01D075857838BEE3CD469FD1D9DA1D0CE6E35714C39212DF89 5D03BBD7E4B0B73DB42BBC130F80F72C1DCF48757C4108E9049DF2BA8A98DB67 7D2E572126A1399A662E52A16AB6FC09EA7BD968C99884FD847660EB83902B88 A2F24207F4A7ABF0C0F6F9D2715AAB5C3172FAC9830493F8B85E2F9FA768D2D2 48F75ACCBFCFB88CDEF8A4DB608AAC1C3D238413D9CFAE3D63831AABAB12DE3A F2DE9242DF0090DAA565AE5D1D90A53CAAF39C57BDD498150C8D2DB8D06631C2 2E9A5DC93964DF761FA3B2D39619A1BB02FE50041F4853F98BD152B58008364D F53D86852A759E85F1D6A63A94CC0854926411D3BCD9576C081F763F63F62D54 904963807B2F929122322049B220AB7CC1F8FD5D817C8C15A8A01A33DE9E51FE 486848B965BD4840AF10A661D457A7FEAA0E28615E6D12BD272B25C71E4DB428 1B49A99A48287413BC2FD1629BCC857E8349CDA80FE03F24C7FF886FBCF6233E E9FCA0FC14B42B4D65B0CAE2060EBE9CE95C964CE425304A5F13F33ED055BE33 911D25BCC4D4CA70CA25763B59C68C2EA56E3818AFE3225D05B3DD04AF8B5E55 DBACA592FAF5182B7AA5F67E5F4C38CD29A2EBE675CF8F31BE0E6BF99EEC9032 C25500CE424CC9733BD5CB519152E3951CC5EFFA37CE26FB62F4BF37DD25CA9D 61BD83F411BA9B82E384FCB0EF631E302F464EA926EF8EE8A3A4A1E73397A4FB 1D3AB41B2CAEAF162B577D424680054EBD5BC0BB1ED148150D5749FA6D6B1FA8 C952C736A0C772189EAAE3AA84AB745E95581C3369320A4244E7A7CB66367F13 990DC01CD04A05148BFB276D11394E8341E2682519CB42C31D0E859BFF0A68D3 ACF49F24176711B5175DAC95B980DE7018D0F2FA73823BAE37C738CF77F5A075 B210C3A55A95E851C30BDCC1E272705AFC2570EFFBBB72991E31FEF7398D44AE 8A7894E7C85DECF106DC18EFA6D73CFCBDA7C019C25F04FA4542719BEFE8ADD7 63C63DF3D992D186EE39026DFEF73478307454F62581A717328C7A77D43AC95E FF900C4455D409720751404C32943C723AD2B37479DCEC1103B4123FC51CC9EA 3E31FFBE94537A689C66BEEA537EEB16A1C80EADF1F33B8D4A5BF6A5E364B1AF 141013641E8DE8D783D0012BD52942D9AF8E76F5BE4B77680D5A5F9214DE4810 D975FD80D49ACD40C66AA3F19CCBCBF6B958F4EEDF86BCD8A12F8607A23DD5F1 6A46139B7B85CADC53D0E321971138AA86CFEDE496D2497DE9BEF2B5558897CB 28A44BB06F0B3D32DF2DB976820E3FC26D2A197A132C0F8651F00BAE7475722C 2F872D148CB978C90AB4E7045BA3BBBD46977D8BBE0793027D29D290A9CF41ED 3FD8D8348DE15C2DB56440DF998943E791582497B82737CC03418024530B00C2 2ED245B6241E87F97FC245A0E2042728F1678E4D39BADEEB991CB88FD28A8450 290201A8AA2F47FC52FDAD1117E90742F89C7EC92AAB06FC0C7B41CB252208CD AF57268DA6B16E4A5CA4A3BE2FA81FE4865F370A9DB3B9121B8827DEEC3B5C26 52D95B130F6EFE8051BAA441ABD7D0FAC00F702844CA18B12AA9265DC96EA6E0 5EC1B55ABB7F78A973DA15D269CAC9C9365B1DD3156FAE2E9965F65C03382FCF FA72B6167CF112A5DBA3DB70121C122AB1626CF580C340FD7CE5D83231480A3A A2802A8674DB8CF6FE6F7A95AB88FB7572F3FEA6FC6FF43D7EFF4278820774E1 FBAACE6956AD98E43BA7EE6362551A87FCE3007AA643CC81AFF32F0FE26EC491 C97D96CA37B9350A562BB7D1A995B91D8B75689B148FA89A2A6DD93F727099A7 98726895458E674A627025EB5ACE2A2A256CB9B5A236D756941BC61210B6A7CE 8BBA321C01FF75EE24F0BA100CA41B980E4A6E82A0D0B665DFB5D70AC40B6ACB F6651FEB183D367FD308B72273DDB76BCD5D385068FB080BDED1F81F77132C5F CB053D1CF1690FF09E1BD7E10BD242A550EFFEA14ED5C375AC2894966ED9F21A 122F9BB44C4D415D900EF185B58EA722FB6A459859155659851F7C8122BD5794 05D3A0370B2A394A6E0FA4935B40CB30B98100C8843D9294249F18B12726CEE6 972AD277BCCF752BC51B2BF300EACEA10C2DAB53F4C766C7DE2DF74FDB10185D 0549D63F0FC75A4A295F8004BCC7FCD9CC28C177D57977C30B158300C0A2EB19 2739F70CB161F69E7B149081BFFD4027FABB984FA3A9D7C209F6D903AA775219 1A3F64B3A803D44FE32820DF3D2A06ADC9D6FD0E821C31A7B386C86623DF58DE 2DD47A24735E8900D3B54EDEC309FF45531297249D672B9932FD9C346A1BEBB0 A128993439CCAEA04FA733402B6FB25C57DFCD450C6A033F22547ABFE33F72E3 F5216A642F0731B8BC78B811433A7ECDB05C845E359A2757EE10B76F576111E4 09971BB0660EB5E91B4727304675A5777BCAE9D9E3C30E20A4A76EB2F03A488B 9E81D5C1530479F7EC82D31EE431645E371683C0563BB926B640A715EAF950F5 FACD2A70BCB7772EAFA36D396E1376CBAB96C2D5254FB572098D5817EA739834 3E6E65F0A2809A23A9708C388438A0E2B149974463473CE3C7322E2A032FC699 42A62E7738D9615F1846E1FA379BD4458619975DE9E52BF772C134AF208D8AB0 067ACA1A01055C2D5F85021A83252AF1FA9EA866478C667F13A744AE00B6402E 742C1A743E03E52CAA5130B6321BC7AE3971D6A5B828252EBF48B22BC34DD57E 57C20BBC4ADC066E3BBEFD6FF07C329034926B71B473A1B15C538887F190595E 38153202B158706AE3BA53923A81F421DAFE1AAE0478DC0EECA8AE17875874A4 C963636C7E3983FBDED4883AD5EB3737A5D944C0FFF48609027A48AE21A50F0C C351B2C182E830A8594C81EE8974C3D717F729B0CA1B36C38271FD7C879D0B49 0F35CEFC56A060826FFCC0B4A47D5A74B807B5D1CACBB48954FC85082EA3BDE5 122C5838AD66EF6B6352C7C517F15A44B2253F310A797F5850626B21831C5EF8 90AB8764E6E1915040763D4E19D2448E38304D756B209E14DC08635D50ADB2EF 32F63484AA867FC411F3D5A47968EC94C1CB423F76902D0D27FCA66C3098A110 0B2DCF431EA4E43E324901C322F69A44959538EC83EE3A58B22A54B992820965 AE4651C1A415C413EA9551F2136DE6F981C400811790B570F1EA2841A78F04CD BC6852ECC0CE4B0FFDFA101D4350C8F2496E24AD61217C0CCF95ED3BA331A84F D069FB504F94B7AF2A27B1204E9A39120FCEC77137281A941B093CBD82536EF5 02AE75DA7709371EFFA98070495D344DECE4C6AB997E7988B56D1FE6F5B92BE0 0F2121ED86164C1A182DB74A7109EEAB57AA6A66014734BF25314CF9F7CCB90D ACAE05A6782511298E751007676DB3A3BC7C1809CB8D58F3106CE8510CE30A45 7B066EB3412101515C40E08C05F947EF5D4B9EC87CAAE4488F90B356DAA01FB8 B658DC5B4B8039710C1DBD1C273E927870F2C4FBF1D081F279FAE53CC8608427 1BCD486B36689E49AB3E65E27A1E0F114706EF9DCB2B9E4A1B64FABDCCF2ACF8 1022F7374C567DE8F887E781256354208CB0022042797CD2073E9576D14FE9B5 AB8AEB47E9D395A0DC72F4F548F59C95B59E4A72AE0722859E971B34D3199C32 AF98FB8B33D0BB79E3F802E5E1F91BCF603D658FAC50DBEDBC7E0FA55A8F0F55 3640BCBEC9013F8A5492E000D1F691BE4879E0D58C0A48068D3C4D392946AC16 526C95233F73B47008859F89747CE4BD569F726BA5371BA1C91610AAD371E88A FA3D585084C220BA137033545C8E0D0897127A029369D28294E30BB69BA739BE 233F3E9A357EA05BB45629ED9F0CF3A210CD95A5428FAB5014104010DEFCEAC3 E6EB1E09635FE18E87080FD9F6B8AADCE1BD9F6BC78E7965A6914F5BE607BF92 350052756C1435656B2601DF2E8075E00F29DAD463DE0D3C69BAEABBEB410177 DEDD7EEAA6DE8C295A06BCDE866E5717A80D9C6C8D121AB5D18EDC100B29921C 33333D2038F811D613F53F9549015C268075389843FE1A0D9FC00BC55BB0CE49 CAFA6A9DDA15F47FB510B651C6A1E061DEC53455275D803E1FC355F6507FC5A0 7E8A00F2C6F99CC67E214EB0BB91FFA2D2577221F8E3591F11CF8DD691C52AE1 E31C18B9EBD04598B155342282025D28FE4D8F7FD417D0A6120A8DCFE8E5022E BA814E87D62CD73180F2D0200F706B49143E50E2E9A7F2F455679F47EC918834 12B212A0A8F6FBDFF692650A39857433698CCDA6E92076128243E173AC8EA8D9 47836088177B461897382D0207CD8525777519E244C7FBDA5F1BE2581A431713 3BD3E6084D00234FFEF0AF51E9317F989ADBC5AC36AA816B722BBB3FC6D3FC1B E70F6D2CCE0D85E584A6F9BC6DB9C799169593D6A4B7220BF0DF5D62E87B3F89 E8D54D5216CB3B85D385C74D4FF7090C863724EB9F136D893D3CC44AA6250225 B4BC3FA7518C6BE7715B1EF3DC53DA7F6D9F22B0E39B102E461F9BD13D07C08B 99BF64CA7A983B155A0A37371528B549AD1203D301DFC0FC394F5C7598340344 8D0DB62622CEF727E8786F7A8A877736B7E168E0F9EC2C12E6AA7D72C4CB9252 99BA26BC7DBEA549DF946C9A5362EE6CA301BEC71D499D70CC9219F8B1101BC2 7856C0E1C14B319B074997BB7AAE3D1256F5686E03769715FE1077F11B8D0D52 794283EB2A7529C31639E35ABE5703E31CDA08BF16748DC7536537DF87272666 C68FE8CEE080E5D28130CBC5AB8FBEB4D0CA20652BE4905402AC843B743F91D4 7AB3BAD35B25CA6A632375D59BEB408160B067EFC43638536BC832E047A54DE8 A1F1F823673112D6E8A5DADE23621B2AA50015E6118EA8F7AE72C72D04A1AC91 FF0B7913EA03D3A3EC2CEE43350D49B3E5F97C2B24312328765B2F8B0F12C156 F4C765154A3662EAF016A1467723EB536BCE581B5027366DF9FB33F3F5E1FE08 3BEED611156F6154867BCC8074A64AC1210BE8D5B9048B75FC6E4178CF21733B B994B1A81653B92B02DE4766FB07D6AD3A1F6D2F7D1A4B49591C8EE8E754C2C7 2CFDF2BF68A39AD1699E63410D3DBB4B6A7946BEB6B3906290AD8F759EA8AA79 848670D72C71C984F5283F0684F8FCF25BA03D0AE4EDA910A7752BB9A034A96F 620539085C099F1959F1876BB2E5CF4AD0155088651DAD3DCC21C1E7746414CC 9A10E8FEBE6FF1E7079CEC8E109596FE7C6BCD8C930361FCEDFA2770CD7B32C6 48F4A3A5F5B86ED395A100C00D0604ACC626A6A12093935686884B413E55D752 73496C71419DBF276F84A22F9371FB591D372AD5E1728C69F9E0F6C9966ED675 B881FCF792AA41D81E0516988536D7F396BE5146BAF3A685F7770980BD0768DC E7982E7453E1F409071BE740E63C8448FD699C33209AC5E35D093BDDBDC2A7FE D6637673B46AC32775F8977B5B9EEF6D2B2BDEB6A6C9843B1B9941F0C46179E9 3BF62972F374772E2DDA16E21A6A37D5960BF0FE7B6DB34220D1918711DF34FE 4A84B6B73E2D86C7E7C12461C86E4FC2B495F3F75E203F53ABC3DC277079D256 42388A34DB7681CD0529E97C62B2D89595EBD3AA0F95EF0ADC637A4905980660 9C083419A79C6DDA7B92A95D382AA61AB106BDF674F4C92B9AF182A592DC695E B4584363F6148A22B95AD4E5449EFD8F4A0F1ADA00C0A96D3B60960E40E3DCA1 E23E47DAEF7789DE2956504606888BB1EA814630B2B207112A6897FF48B31F89 B6B27DBEC9BD50CAF1F819CD1C11A6B828C296F42082E81E4BEDA520ABF8DDBA CFEF0E73EA13BD56D81C1AF818758ECD4FFA40ECEFAADB7B305C76C915FAD82C 72B68D8392FD2E72FAB16DB1A95C0C4DB611F44277F0DAF7F48BF062C3678FFF 088BE0F0F9E61170E44B3B19E72DBDCE47C596380B1D92B6260B29B17EBCD9EF EDB30AFA96767803F08DB9692140EAE50B1A97E5FB094C5337B4420A55C833FB 3810D0FD7E1C1127A16EADFC7638FE1F99226EBFE0E027FEEAD39DB02FC4D9B2 8DA2FD9B6D36B80874B16F2A77FCEEF60D9EDC8D528A7FC5D69C0B17EAD7A737 661E76EF5D173E1C940C4C17EF0A0E79BB6EC827C2E655B2CF0CC54B2205587F 0E068EAEF0C6F1CAEF7E81F4E4B559DE528DCDB28C8E34B6464A014A3102D3E1 70B3EEA163487403951BC9BBB05F7DF23D17E6834D69A506279AACCE89E60316 FF7A1A62390B25AD06800713DDAC96265A52F517FD59592880516E538F1D0691 B806CD2D8B5A9453C7BC1C17360869BF0720C09832921351490AABE62619ABA2 A5D19F5F7CB829A05ADEE243CEA03E706B6B32D27C9B7C9754DA3A6DBFB4EAF0 ED84E1A068246F5FCF22FE1C9EEA8F3E9DF37F6C650647E36B22C214F28A414E 29CFF70273E6DEE9FA13BF68E23C46E23F5CBF5219E556D25631C017C66C8FA7 0BD1C54EF212BDB19ABF94DFCA89DAE5D821DF3B59B040B300C4C05826C00E72 9228D258FDC3B0063027A9C8C546691E1B8A40DA6EC1FDFEF31DCCFBBCED7D15 E7DA21E99FA5D78FAF3DFC7A102F6816324DE52E75DE9162B6EA735D6585CC4C 3774CF083CFDA459E137CEFB3E253D6D0B73781A524079708302F14338B73A83 ED2992C9E601F7A4A7506AD946B50057F4993707BAE46293EE1752CDE7F014C0 5794D3687641CD224CBBBB9E2F53203854BFBD4D881E6427AEF272C41D00CE57 364001C744851838FEB2F5EF35378B04F5519E1C08C1E5625AAA6AC011E8AFCE 9CDBC1993EFDCF97E0E1F56EAD8537FBE5D903AD863B1C355FC34E295972B6FC 6D2AF69C9BA504CFE3D5867101D715B6961B71366EC5B5880F849457AA69488D A17726BDAA3E6CC227BCF27471E73DEE7E0CF68DCC3EF6F354E2A3123DF86DD6 F72DC179D11B85915B0101D0F9E361B1209ED123176050B245CF93657E3EA849 29CEDFBFEBEBCCE4F8C6B860077EFF7551F4A6BF2B3F5CEF690EF8144F334D85 DF1FC79182294D06A88876CA95CADDF814F0CEF6E63A5FF71197B64A6BE6EDF7 D117464D2C0DD1474577C991E1F5ABE1A29683950B5A7F973F2DECCE11C25B4B BC8487B968D62DD15B9F1D0A8E9DD45E9F22DEE8A2BB181C5BF88644C4443821 B35953B3CFC99668E5C941B1827151F7C96FA14682DD7E4E3C050FF8140376E8 5B4335D67EF46A9C0A5F4FAC9536700533B0B0AB6889C9A45F5474EB5E274530 F367C24CAFED39221F0748D2F998D7C27377ECA59D12136A3FA4A027EBCD61CD 20F77208F24B60EC3051DA5781E0A8FDA8631F9832C30CF82D60E058970C4498 A8679112F9E8A53C58DFDD8CAA0B9486496F3FB72F99DEE415EB6EE1C8E04B5B A481BF189FD39833ED5677FD14DDE8F50C642322D8EEBB73717E30EAB3491673 365B785AC1680C708EC83F264A79DA8017BB135CA3C56E79337A795D755170D2 F116AFD0CA7D500B0F79F8E598004B8A4EDBC10AEFB9DBFA3BB87E341990BC2A 93C15988D61D3CD9485E20F56AB3BDC176E452D9226D0E4B178D4AD2888056ED 769374C3BFABD2AEE915B7E67841BDD019F88260E36F58BD5B53C940C761A857 9D877A2026D98204F101A8C378D1A5FC92270E37E8CEE5C26D6C473B98F02FFD 102569E023AD1BB6158637471840FE651D1239EF08D982018B44172D51360764 A9DB0F5C9003FB6CD67AF67E887108171B9AE0802E73811F87ACEF0548EDEAA6 082DE759DC155A75F7DD4F5C188C7A5C371F9BF2BD7F7B03A5B89B54CF47E825 D9C52998DED3BEBC1788A0810EB34B0FBB55AA5823C23C618BD23FA146730719 5D000AEB5FBAB7181D66FD3CD9EFFDAC91D032F0A973100CC8CDD756E469C995 F66BFC3CF810094BD90EB1DA057FE62858FBC0F66DCDFB7944CA418CE8313FC4 5D1086A901670A30394A18BE2B1225F2DC8433CE5886618E1C342D387916C84B 51F56B9296BF12179B8015833134A03F6A266CFCC84DFB5C41F8F9C472F8FB4E 9981AC4A401B8E2D5F5EFB64D7E1FE3F425147B771E365189B0B99CAEB9D9EA9 45B48AB9C07FF399533CFFBC918F747D800044C2C599AD20F8BDC3B214E5FDCF BDB7174023FB65FAFD842CC2306FCE9544E2240E598187AE432B5A07D8AAFC2B 62FA12A9C7C3D7C041100EAAB8B17420BB280AEBF2829E460166FEDDCB700675 EAADD8CC64FA3730EF0F779EC188F05535AACFC225B3D724FACEDAF610162105 49E3750256F2790A4BE27D09FB066494259D79B949DB841B14A13C0ED98C1291 7E927D48F2BA42AAC80D7677C5EC8EAC00AEA05BC8E9F679AEA2CC1549D6B84D 8C97752DCB661898FB0CB16843B356298630EAC09B3A28F01C4909369C733564 BC14C2F8F7161AD127D3E8D8B39C3140888DF5C008FD859EA9047CAC28829EF2 6BFE8DB5D91853498EDADDB43739BF0185E35DB82562CF4AB38BD470E65BCF69 E5998AD686E5CBFB61C8ECCC71909E0B4C61714912FEC9189BF3B05A8A95F4D5 2ABC1DE66C35165B6B3995564587FA9EE076E8FAD1602FC17787C45FD5FB0951 A16A93BBACAD5F2D1600FEF4BF912F59086C7003068EA78D8B581C93BFB74326 69D1DD12198D8AD1E81A5B6F694ACC78FFCE5C7E9B3C8D7E7096E9FEA9E2EB1F 187C9505DAB654A6D88C2C067B45A8D677B7400EC5C6C7ECA56EF6A1EE66E7BF 9C9522E7E474FCA9892D1A0EE8E6FBCF08FFE4A2CFFD16A6C45EE6C8FA566832 8738A3F16B975BE804C5390E24748E704F97E1691AF3CF0E800B5834805E272C 554A2E5A21352A1AEF07D6A60636BB58CAC32D57342FC8C34C3E73F82B566300 5CD57F85C6F52D047582AFEE0E07925629AE9BE0B07067932BC141BD4146F85E 729F6FD77D738B92689AA7CF62F365BA81B5F5AB7225EC6C6B9DB97C7EEDCC 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.1: CMBX12 1.0 %%CreationDate: 1991 Aug 20 16:34:54 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMBX12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-53 -251 1139 750}readonly def /UniqueID 5000769 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712 B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99 AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26 7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF 20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390 B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D 68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809 D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E 26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26 77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299 BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8 30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5 148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23 337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598 0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6 472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26 3E3F88D3140F25E0B05DD41535664C5FB6A55C49ADCB3E11251FD0ECA5771D33 83901425C7194E406293230655B3BADB5542B58C932350227B6D3EF4E5B24DA7 97ABDE7F732235CA6D73CA3A5042D68C3F90CB7E238F30855A889A4417F0CDA3 FDE4E9A119D0DB7608026BB70CDE5F7DE7380B6CECAB38F3ED317B67ED4A8A5F 9AA1E9D32626A6898058162CD013836AB3D8DC302B629052ED933ACFD4A18E78 A16D3CA472C13E5DFCF07C0DDB437DDFD4C9E649B5AA0EC74F1BB091BB910F38 881EE176986C6C38F030DF946C849F9E3C61E9F5D433363C777F29D4E9A7EC0B FC80E42334901794E22B2E3F4242BF6823D8F7707FF7B4B962649AE47866B1F0 6036D1476FA6AB6189075882C4B0BF498143181018F5BB6A65C4BA4DDBA1162D 2DFF7D40D543679EF3B62959DFF17FC1FB030E729D02EB2533B5E78C8D359C56 4BF4C085F5FBA681212847D2A7729A0DB3510D4018D89F3B6D8C30190F213B3F BDE720C6A4ACCD8194CBEAA5CDCBF2213070BD8EB233DFB1A7CECFE3EE9745CB 2AE4B74D76919E37860EBCEFD466B28761A2D0ABFB287E84B9F1B92FA77FDFC5 72883F73A4E64461591AD10B2ABED9CA115DF97C93919ED18F692AFAAE326790 329E4F2B85D5301A1428FBF67A407D8A61667F629AFB01BEC1FA6E6FFE4554DD AA4D24100A07278EAFE50C4D9702788357DDD8BE8411059A43726B4C9F362D51 CA72C701385B5E76E36C9D46448FA486D7BB46D093B3F1C9350F3D9BE3C3AAE3 1D91D7CE5EFB96F7284C9F3D910263B9CBC118E948DF2F5CC32DB743C3807D9E 71A1D6F4CCECC092ADD79F4DF7082053DF47FE97E440CF337A2F83EECB4B3B30 7E0E03C10FE526E48B44564A57CC84A518908256BE4572318F7C550BDBB772D1 CD62A7D290D59A3FCA6AA60499B252D8C7E62B3E75C1052EF66E2FB5C4E1BD4B 20BE1507DF3999ACBCC5FC0EFBDBA141F664F1AF55EBA07AC3288347320AB670 EF8597A678C635B41D98F030B35A14AD4C516E73212B5D0B0D43F7F236B4B51E 17A9A542D261487094D86C6636C589E9B114C2E1DA70638D3FF2E7AA8912FA5C ED1FE3D98A451DF3EF3FFACA72B4177D8467E2EB77DD280A81951113A1E46953 B26142FFE45A32E45BA43E35C55CC103F031F871E16F26410EB1EC9A6ABAF84D EECAA934677335D7A06DE903D62A85580DABB56BA49E38501D171E2BE560117C 4C8D946620F2D7392E311F87FB390BF6FD22E670587F99E10B24532F4879E78B 6465124E17ABCA9EBC55C3E4D0D97523881282907E1C95877319EFA7FC1A52E1 46F2EC22079DE0D85DB0ECF15DD1694528B113BFC7536F9C16331E579A4C78EB FCD1AB6FDB82B77219D089AFFCCF7DF01B7691D3EB1DFFF419ECD36A5CD8E903 2A20F7995D5D9906EBDBE1DBDFF730B921F0191808F2ED72CE966C036E083649 91B15B6B00F617EE0E99290FC983EFD41A2615848056FC11BEA34F7698561B3C 335B1A518D39509ADA8CEF08BB2F12B9E2A85B8FA0E4D6FF146AAE95FE4ECB48 2E56EC895520AC461A2E5D92B83733218FDFE0CDDD7746130D1DB79B1DAE2287 0739A7803FD1DC285FBA6C44A14D7AC0C05B8272D04ACB4F4864EC76C573C4E4 8414C9E684983B7A6F438B683DA13B4BF72486F1A6A20C737B2483B4979C1B96 F9CB86CFBBB42D44BD45B7D723DC853FD31007D342589425E80011AE113ABBB5 7B5864162BF0667613C71D66AEB158ABF32C871983DA37A7D93F86CED04DCFBB A305EBBCAEBA6D6DE0C08BB28662D76F3544EBE8642F5E21100960A40AACA840 401E979435F45ABF749AD9045684851CFE5E45819854EEBB91A8E7ABEA5FA61C BDB2255F119427A24665AF08AD001860673C265EA8FFEAA4A007DECF59C3C651 75C08571E7073E1D4C39207D0977C73DC5E1D1704E833EDAC193AFA9CC500116 E1403B45069BECC62B969F5D3CD849CB57EBAE3250BE22043BF2C76E32974A2A D588297628219B72829443CFA8FB4DA6B1C148C0F1F07AC03EBF0FAFDC4727EB D9C892CECABB14CEA298AAD8FB7667DA9FA77BB73B436AD080E2A38930D49A8B 242538984578C176CF873EE39F31AB6FC62FDA99367E0AD26352950F83BF97A3 DDDF80631221554D7C8350A1486D06FDAF6FA2D50292AA33C5840F94B12600EF 2F2019275BF891048267CC4B7CE4F0A1E447B6E8A57622F1F72AE1028B681287 EF4BE6D0D6DFB0A0F6D552F829C65F196AB08A3D9B0D5B26BD642478690EB849 94A5B8DBB83F5F358049209704A30E76C0A341554E165ADD77FA949C3983BFA3 ABFDDC0BD6B76B4B41B9D611B495CF4A075EFF91B47D0938452332EEC73D0660 7598D5BB62701CC21F9AEF8989151CE486394B6A57B74D8209E5F242EB09A168 676EB7AD7CA2F678A33AC053A1369005D15D01B78694F6ABBFB1D8D18F4EAE30 50E49FCE28BF92E9F101CE46A864E82E071F053AA8FFAF6C7F638CB7635161FA 8F1B5F924DC7836FA418A2FB26150764E55386ABF772D298CD30CE7F60C9E148 1D8E8D4F9FE7C904CCB0AF8D84FEA7C4AAB8AD698FEC66D9EF63BA40ABD4B965 1FE180624DD02946F64E5104C3E29CFFE181B10B05051320EECEAB26F3463F03 38E19C72D4C99FD1BD23E5DDEC333A39D9EB2806474E28EAC261E07B237F471A C0641A0A8C0628985091B73B35A985DA72E55D72017526A7FDF1D9715B711BFF 2D9A6F5FAAAAA99578C777EEC043EEC96CEFBC7A8447B3593823C42AF8A3712B 68FF726EFCA5DB0455B471B25438325079FD677E02875CF8239FEE9EF3014927 0DE5E4BA8ACD4DA4421E82A1376CB853B5222114465E4C8BCDD9ECE52FC3CE10 5C3234793D55E4581DBDD20B4C9CB26EF2CE3958EBBBB4FE62A8B559C3B96339 ABBA2F4345735C160FD7A4039BB33B6DC639E823256CD5AE965B66CEF6C3570B 66BD730AF9D358154DD8A3B75E2C16BB0A28068CF22FFE0A96D8D400032D9A2D 2787B1A0B7E57474C0805072AB8314AC3874E3DF440F8D2A10BA6C865ADD75E2 BA3C6F0C2B5500AB84842E3869BC20930871A1D9FD690635F4D668B567218048 AAA3C8E1E420C27564C00C83B82E205946EEF0BC6E5D303740FA1A0620C19CCC 0AC89CB8B6A5FCBE768429A4D1F64CEE09637C1BDD7B4ECD1F49F6309A3778CC 1FF7C10E5B8F2055FB348156087E11903F1D3AF5589CC0FE907D6D2C72F24B7D 2577CB837816831CF038B33F222083F60CE528965E2369ECEFD656F8A6768936 91480A388ABF0767931CE310079D8DCBA65972CE71A232E1B89028F77FBA71E4 D6E24389CAD37D5A28D7B4FE23D16DD3E4A1EA89CF0566EA9B0A64D7643AE433 E33D0F66D6FB9C8D60174F1F4F9278E453B4F9210FA05C72DEB4BF9D167A14DF 531AB956E6F2538F821D43A80481EFD0F4B4646029B793760C549B6278F78764 F6793D729F078066F3244876BDA9B84F2B96DD9C7BC08F88B3E97279A0359319 58E0646C1D1FDFCC0EFA6619900D9955CF8E17590EB9ED08D34B7F0D406D6AA7 924421938834C770944A712FF71BEC1DC1CE86465A4118FDDAB9275844A31021 735B6113E4181A114177F57FADE82B20D2E1CB5C871F7B7C927A755D5ACA9B47 5EF980FA3838201FB7AC3C76F435845C4AB6B5778C24CE68268EE58A3C3F8475 98F648F0090591FABE458258385BCD5EEE61F0159A51D18058A9F11130544AAA DFE09D3F91CC03DE377EC62814FB1A2CA4A65ADB89D5C67FE9C137A143AF0577 4BD94CE26DE82CC3271671A319C3FC6158E746A622690115F7F1B3916D3D2B8C BF07DDDCA0E6BA9BC2D2B46AED3AD5DAC0AA090EE7B32292DEB113ED7C6A7B41 2B0A843BD69DCEF559F701777F62940CB4E812DA046BD0A11B3D55B74319694C D4817D67FA5B97154D5F981EE66F60C073328147C5ECF8152C0A330EE02B0CD2 5EF2D9907D44897E1C0AE3EFC8A1B3E32EB545D72B9AFBE588425A96870114D8 1BD377907E93E3C5988249C8BC2A3888EAE48C5B6200C6CA911E0535EA8AEEA6 FA6F5BC74125D78AAF1ECEA6B5775468462B90B8FD3A83BD600CDAB22C70CEA7 6EBA347DFD66806E40B669ED068AC6D4C48D79D7BC67017C4538992665A1E227 EF073B2F502E96D92193F5D05B98223FFE3DBCA3CB0ED1614A8C2D5280B4D684 B58F239A1BA08885317A348E91E8DFF126E170B7245577992025A0E211066671 00BA123A441D000B81A3F3BC9CC5DA41946BFA145F518877CF8B3E3EAC785F73 AF2C75DE20FD6ADF3DF37CC9449A329F08618A78C6D3940E4497D05A4EEAAFC2 3B8463EF1584A33399C0002AE579C8CFFF0828F74EB1FB8F085EFACC0CB5C727 DB2800C285573B1D7787E510F91777A32472FFC8053819DAF35BCF6185247909 9D3C687C9EE0F495203A8AFC220710879DCED02DDAAD767C765089049BF35717 D2FC6D4F1075CD953D66A6AD894FAECECD22DAC9E9C2D842A3975983C5DFCD92 4971B9E123B852082E636DC6C1E9CD7FA79049DCEB4FF5C1D463FBB51F9F1F5B C26B4AEC7BB286E4EF6AFE2296ABBBBB07DAC06CC1284A5E9B09A59AAA02B971 D92E6815C6127095353EF27DDBD4DFEEAF0604885537432976D1AA9766E55FF7 124A7CFB78BC0772F4435962B11C1C14195D7E427F8D0FC2349115A2E95F0B9F 03875D53526CF1A88CE77C6D743836DE93488876145761F92BCE397801C06958 2AA679C7393A9268779063AEF5D7B1985C478EAF21BF01160F1F833CC3363115 8B9714E8DB6E92781A3A912A8271D2BC6D57FD5F801485DD699EE6B65C982427 54428D035099231F329E4A37FDA61493F8D50883A1C37DABFE43EC09003EC713 C65CE3723BD7E81EA1B862174CF5649E7CB46C7FFD7F4E512330F6A333AD1311 8D3819CF97B6A55925A99A74824281028576D396C1B99307787A3B0DD2CFB468 47B28E22C58B3F1A27BB9D88B7C6F5DA70CB42A1DEAE66921FAE2FAC34F32CDD DC48891299698F8F3D5E255DC2402F57A7C353B79D501F5CDB9EF00E1D3DD339 DAAA5ADB1169DACDACAD9FE922F134559617A4E4E4D04BD508D12E8B0FF618E6 E2EBAD1A2CE23006B1895141C5AA1A0BE7EAE28A4BB821F4510FA42314B374E5 B87516D145D9952F9CEC41887D5A3B1A59A34BD7782F19FF36B093907D8B0EAF D02F03D00A0E3D2C08F3548B05A3083E656ECB1215D1F13DF9FD92DFEADD5BD8 963A5523DD903430BEEBAEDCAABEC000A88C4734895F0DDAECFC2057C041B105 443223AE9FE0A95B7D424EDDB08BF0F86E798FE8432C01A8B0DAFF7EA94CA8C0 4F7751C522672B4536F16AB4C606048503961F244494DE051A6A665DD76D1C15 DEEE00011B93D3D7F20F7E200E32A2C28D348C3539104A51CD03C81F720EB468 59777A46173C6A4C9297C41453C81E7803523CC8D5826F72FDF6BAC6D84FE037 264281FD9D0017FF79A1008DDFCC15A1EF0984211EF25A378425910BE86A12E8 ECE566CD3396D3EF69D54D86747950932C365F1BF22440966FB3F09F2ED07081 BC4E7BF30AA166A3E750F69E7F757B7A3925B33FBC040B16ECD82AD96E25EF2B 5C9B05169C65C8657A879A7B4748FF3698BB20B1FA775A6D1EFE923F79E3AA4C 8F050965D37ED5A6ABB4A24553DFABE654302BDEC6ECDAF2E0D7EC8EBB1A8F22 C12A954B1F59945ED55DCF760CBB0673444283D799B480741871669EEC48F7B5 4EA8D5A2ACDE7D2F547009786EA3E0321604CEBE7F3751B217FAD5D565CDB4BC 11DC0DFA9F263F306A0D00F12BE6E038F463EEFE6BCFD0BEC6B8750F2CC98FB6 8204F3850EFAE8BBE96725C3EF47174F0B0D821BB71E3F257ECEF31D02EB2417 E44B4B334BE9A009E56E599603DD33AB3D45079B063D767B9D409309798CF005 55DAF727D315D78467851278FE42D018010E32A542EB838E0CE73B63FAF2C4B3 0527C0032E35AF9C5F010C80E9A6F579FAB5964A4C684EB0C629A75322989283 260C5EAD4E65B59ABC1D16D369DF1A4BA6789E6C4B52B92CBD9B52B67DD9EFF0 F62B41D1ED30DE37C2B93BF3E745A8446C868878D24A930D8CE888BBE6C49B96 79DCD2B56E153CC53F370BD526774AF7EF189F888EC649A1EECFF53E2F7E3A55 D6938C351C2967AE5E28794F4CCC9648CC0FF0103F7A11426CBDBA574136B565 18DC91077E3FA7779213261B21543F046EEC29CAF63D7843F0C51F976CD0BA95 AE1822EC58859623F56F7A7E5A0DE20EC4E1CF1F54FFB9EBA70813889CD86E82 7B2B84AC065C6F867094BD3FB9159F798C083146481856B1A33D995E53A4B722 22B209572118F55D92859459E119532E42506C70A6887189C4C6B142AA090E4C 999AD4AD00952DD3C84BF59170F6248FA788862C179FA3CFE30EFB8C6A550D8A 998172C16F07D9D16B163F190BCF395D037B8E454D0DFC7E9245DAA3A78C455C 35F1952125B0D0FC17C589C686CF1325A5857429DB7C8C85B8B15E94B56E9726 12DFBE8370E202280BDDD2CC9A5C41259DEBB1E71566F5C509507FF7547C992C D3091D0C458AD907832612FFF989CDCEBEA3E55E5F86A996333C19DD880B4A11 B5BFC9EE9F11BB36CDA45240AD50A7827BD70600AB6F2E9F5FCF58030240ED86 EF16D4E5BB291A0DD1A0A00CF65162EDD2FA23D30FA03656FFBC6232669DD417 43FF189DAE545F9BA69088D25C4A6C47DDD9D31CEC7F264F6B7A8B149542A5E2 BED9562B38AD37A6F549BF874FD02C53E0E46A329182866851A529E79039666C 6EFBAC1DBD72794C477EA7AD249A3687BA955AF2300757C4B01128097E0A56F9 EBAC65BE8C98422894D17CA5E388485BE66F993390DD62F3F003132954B02308 9286879D593997E456E9995612818EF2B75B793398F2197728F10E27A8C63BE4 0B867BAC4982CA22B21E4F24BE25BFE6B9783F49519AAD8D3DD74A6B383FA1C2 26321F184868B9736038BCA11196F362DFCEC9CFD0D274EC4DCA568A8E59224F 5FFBBD6EE98F39779DE9F5AE2E97BCD32244AF111AE9A21234A870921EF7CE48 ECE0B04226EF8BC3BAA5BC4845F028E39D20D01135AA1C9E7AEE28EC7CB5BB63 83B788E18A323246C1E849262C8DF6E43C7C3933337EE8CDDA3C0BD72947CB88 26F0532E4410197CCB55AE43C435E4480FE264B6398F8E747DE95B2AA9D31478 A93362E8C4F74DCB29EFFD86843C36FD5880EA2DDFA3EF409BC6D25BB25DB72C B6D0292D6BF32F7439A8EE70BA4310BC4EA3C6163A85567F11E0EE56D95B369A E4BCDC01B620B202DB35C71A87D25C016D91402D5E869CD4D0E8BB93F8D345AE 16BD24F8ABED6061D6B446FCE63190FB80192F0296D9A8361E3319C3FBBE2F5F 4484A3F869EBBF97449CC6CA98C84B056331941A85709614BEB2487087AB9F8D 49E6F37BDE3987B9CD8DC96996F345F6CBF00E9B3EB1EC51C3C31765437BFE62 ADDBF8CE22F4AD7FA0AAFF9358D31A6F1849E2677AC6AE8238B1EECFB19BBFCF B8283A8F15069CFBD48688029BAF1AE9730C3B405D0483D5287444F705E04817 F212DC3CCE91E2618A47796FBCAFD1AFE26F25629F721AFEEC95FDFD66F9DF89 3F0AC96B8749FA894C151892885BE12771BAD8F3841C30535E04429039BEF244 A0AE1259773648DC18E4BAAAECAD316D1EF108F0F59A7944E81E6593D946EBD1 5027A0636F22965D56671E62F91F552962A475E3EC50F468D13B9774F739A237 C61F348922EB502ECB7F6D17C828EDD436C65D415C30236114B6261BC147D8EF D65BA2391DC2047E4DE0A162D9F6F1D39F5509D9F3AD2C94ACA6C9D555D80768 A109720B327FB51BF95FDB47BBA4247DB99F36E350B2D78DB5E6D8DB7704308C 4BAAAB244C06C38C998C437294887828AC38A10F0F5821FCE216AF55EAB80191 0C48C59A562DCAC62E29682BBA314C11634D9AE18C097FB07CFE710342AC6137 323F1C0A44FADC0EA8A1AC5E4F695670B2C22DBD50486AFC721D148A4757990B 36E421D5E575FF37A8FF5224A80BB2950B4CC5E3A0FBD187D08A1C2605B2DC94 45CAD829D092094FB752218AD57537DED621DDCCBB4FE5F7E77B9A2CC7117094 AB7E4F9840E76B80689103F4DCFE166C74D4E3BD588A20C8273A5E5340509DCA B40D5133AEC95D6A09E60BE83CE3F8A572D7E07ABFB95EB23247C722F1F1A4CF ADC0C97D2D18190B89F2A76A952E6A9941BFBBAB728CF4ADA1E330E05A77F42C 702168886FDDFAF2B6C4EC44DDD099BA9EEF79D185A55FA64AC2893FC3EC02A8 54013B3575AB03D4260174BE0C23F7EAB2609BB5AD6676227A5085B147B5D1E3 95F42A4169F20E9F2AB9EC54DC1A1788B71A5DC6CC17D76CD01C8821050009B8 D9F2DA1706EC7744D889F556EB14F41F7D81ADEE9AD71C035EE47D2D962A7CBE CF98930AD4D84C2A9547B5597DA552B6293AAD06D8BDDF68BD7BB82A06337FD2 D857478EDD3A9B6C837CE4372F49FE8A3BCF9C16F4916CCF3AEC9D3EE785C8E0 4EA91D63F9D9FD271B720D2084F2BC2A8E760B7D0B73077447FAD26D00C51E4D EDE305E4FF875C19545CBAD12F206F0D9B4F907A9014D01F041E9C339086C77A 6CE138DBF72230829D35B37F1DAE1AA8C46C9C378AFB92D1E21584A5D11D0306 F0F76DF83FC964122D96728D64CE87D32E41E3019E43A713DAB17F4F78C8A70A 326CF56079C5E018923B106CD863D76FBBC21A83B374A1DA5322C5A544BEA479 30AD555354172CE9F2AB0DB6BDAB1084CA85E5A5A0ADF817A1444B6F79847158 7C30DD583F531A300BE38A680AF8AE0F80D486D62DE041004471987078209992 16ECC542D373BEB20ECFCFE6A67728CBCF25E841B076AE08B608B79147E599CE 5D2DCF17ACB8B506DA9C53C886DDA0E02E051384F0F6015D27B947F7CCA35DF3 5E03DCE6A7572EBED023CF738CB85AEFC66D8C60FFF80741C8033655B7CEDD4A 6162A3D8668801C19DAFA7453AC1F7E403F4DC0E730F87E3E1494BFAFB1EAFFF A55449CA6FE9BAB3D1499050546C41055F583A0B9273296C79320B589C949BD0 86F451A55263310EF97CFE3047D1C0734D3C708A3197F182565DDD9D3A057BFC BA1B93775F35A9317FC8D095E86591B482B29E04131F095210A4A80473F45D7E 30C03E4FF51812BD5AB643121685F5729A11927AA099E098E5CCF9B6862FA6CC 3B03491D5D7A5CF72830DC62EDE7F62912878EF21837A7D370FC8A728A1FA686 689BE354306CCD152FA580126C814ABB9A110CDEA25EA1F383CAA1B746C453F9 F54B1982959663970C00F52A0341AB59AAC2717BDBEBBFE7B6B028CB66D173C7 21E8D2228D311328FAD62691985870BDBB49BB46975E3A733443BDA79C1A03C1 ECCC66FC4ADE62661F8FF4AEC0B4AEF09C5DA4158AB16C3AB315B2D087FC50F4 A6DE64090BB15E5498134BEA07E29850E662C045D4634193C331BDDE4595268A 79E8DB1CA5B5335B3FD839530EE0FBCA2E2AB4696B3587418E14F021FDAE05F6 DF7D18B6A1FB9CE0366334C70D74B4DFA1911A4296A9D23168509F5046C2A3EF 6D670AD5C6FDEDD15CDE85969AFA95C0D2EB6251CFFA94D6D501F1D4DFEA708A 94671320CDDE8141525A43CDD74F11DF81E627B96068F1F23FE6B95A4E6BAAA8 408E87A3C367D965F8AD0723E665225950CC3C5C6492643A2F4E5B06EF7DB048 8CB077079347EC6FDEA6F0166E08A81C0D066845AF7C5BE73B620ECB96EB8FED F8390C0C95769A4A7F63C8AF485ED54B64D85625974D54D62AC57185EE36795F 95C06B970C2A2F7F7DB35A489641D786ED0A20D5683A3D01FE63EFF52B602288 44A547ACECF991C3B5776307AD3530FC48E2F33776FA654581B434AE6EBBAC64 26995EC2BC72BACD8031973CE6AF6D75AEEE8FCA09C936AC5672C3DD76731FE5 3DEC70F53062B05F9240CA4A3EAF0EDF09E82C5186887E58329F7F21B170D963 0B05DC44BE30FA2EF9BE6ADC2A036314E4748D16017096AEC87B4FB4E22C844F 3C976BE0A3BA50DFD1F803816D70E2946FC5CA628E7D29CE2056A4556A654096 CD31930BDD1BBA64374B56E72094C698DC71321B61F04330B6AEEF45B0FA0933 30936270542754A0309357011F6560C14A7BC6C1AC848935CDF510F136B7F49C 04D825904D21F33DCABFFC941B2D4342C28E532B1B49E609D2604DE8ADE1D594 F7A4C1A660A0E760657EC0E49BB3C6123F3CA87FE238A8AE1A0DE6D50CE4B012 995CFB38CBE03CDDBCA1CE76CCB45F8D00B69C67E6568DB038292154CA753A1A 235FE1D12156FC8CAE1C4E0B055774DB6CCC0851580283844C306737CA827174 5B7C0E249844033090E3327EA96AE375B78C3542AD8484AFE06A3ABA2A72C9CB B9915F711989DDCCD52BF89508DD608C7E4F4348006115878DA581150CA19B9D 0507BA9A0B6E9B8CA009036DEE0C370E5AA747343022B7A0EC3DA266C679EAF2 5FE575F2F33F17FC34BB9B906C870F8A328C279F322B34583592F4616EC86D86 BCEACDF4AFD6049DEDD1271836D5A6314601929B87BF231F67A3DE37BE021B6D 32A77F074B1007E993482E3246AEA499D86F8FD6054FDB6A830BD9E9F362452A 8E7405F24182509148B6C2B5B3EECC2E1E86D1E5C8344D78158C832684BF5F91 0C7435FDB9549D33E9B0E797E047AB78498809E59910F42E6F80D9D4EE13E78D 0DB87409D67B86A181F1AAD917C62C409760CE8E473A2F83B6777A25AE959C5D D0BDBC4796EA34EC857E53F69F4FC07F461B216855AD2C62A9A120E3A3EE96CD 7C83F9B39AFEBA4A90415A6A6295B3A80A48DB75568C6C1CDB07D6586B5DD7AC 6AA41A46B1D66AB3887E98CF5F884E843784D62166534ED7D9E75B66CDE915F3 14DF010B3C03B52A8DBA6C01438AD345896A2D57F4542F033B056FA55ED3EC9D E562B549B174431F70142556140D55D1867A8A81CA25B94930FE51921877F14F BAE5316EFC0CFD9FDE8D83BCDD59446804A92BF02D0F9CAB85EDD72935A79677 84B52F6A1E2FAC82B6A449D59EDA1A61DEC137ED650D29960C4E9BB1D77CEA28 00048154A04E94E35E9B4FD20C50171CB1D20235B47C79187A62D22A6BD3B0B5 F71B299D7A4CE0920DA7E8E4104EE5DFCFE93F5A07253AFE69C98B6EA8CEEE28 EE9810DABA40990E772E03E17A3793874D679CA2C63B7B1640434C76DA56B61C 37BCDB600550B70527141026B89FD2D3B6534EA5F6CCE829B3D311E893643CEE 74A00426733C90E254F9068FB46EE3F0F52897E173BCF1BD96337B219F683A33 8CE7FF7183433E54A7AC6D4802659D3C21E161AA05EEF9357C035A1B69D70E0B 549D70836CD86E0790EBC7F133BF2F2DA7E6A19A1B37D9DBB835795C2C358EAF F7CF126A0100890AAADF1A428244BDF6D0581DE0828B19958E20648F5D2E0C74 429CABD67407CAEE242133FFDE75841B2333EDFE9BBB45BF73ED7C0225558CB6 C95FA6BF81F916630E0A34804E93633C08946B04DF1638FA0E5FE6DDF5E930F8 F225B1D32F5EC02DB33EBEAEA7CD6B8ED28D46037EAF4188FE49089D1F904FA7 90DA38AA3F0FAC4CD96A883ACE10EB3FE6F9DB94A646C0C1233FC99B7F8F0794 67C5556D21977FF1190C9FFFF86FDF69E6586C8895CE843DF1E4565BD20FC2AE CD46B0934E62FB834B568B0274E19854110B242C3460419E762A3CC862F16D57 27CE20D74CC74665A824F0D751B1B6E410452C37DCB0049D8977B014678DBFE9 503F77232CAEBDD2BE72D29184E562869488489AE60227403A323396DB5B8928 1AF69506E73BFFF71D4180A1BBFAC91F520FFE6163FF2DB62C8ABB8D0887D6E5 F139B6D6218A4F7A53953D16B7C784C0FB23D8AC89A6F3B78701CCDEC7F296AE A6E4AA94059804F3F88C944F30CAE2D22E0182A138EF84A75D9EEC232E23EB6C AA5B9E6318AE704478670480CE8FD8E02B7F57B3CA2B22911DDAFDB3A9FCB166 F89D9DA445DBB05D2C5584228C7DDACDDE6C3402C27083B8A8C99B11855BE593 EA4CCC59DC3FC21858F5C2B6A3DCDD3A8ADF13AB137130B8287E8DE6031F7634 21C63E917693436BE56CD2B1A3B9082FCCD29B686D0A4DF822920C23B7C86D93 72BA52CA8CFE34B2409CF3A0A31912D9D439A678C6AFB230C20E585A505ED5BE 076C62C453453D0F3860A51B681519169C74CF97F91C06AD34A24A77CCF47B1A 07FDC2ACC7D7A68E6AF552C74F70F0D737187462E206092D1147C710701FDE78 013A71591355360453FA28700481843EF00134313DF6F561AA54B017A5F55161 FA8427DF4631A22E618E26317596B3FF187C4C2B801042BC9FB6A139F610FAEF 1BAEBA0456C443C970D23CEFA385C3EA639164FC89CAA13AA2AB0BC5C9EB9CED 09ED556A8458F364D026413B82DE65A7506458B50565A92FFDCA3E143D73D9E2 FD3C6B4962DD3880BCEFC5A9FDD1BF798DD9E89A44C9289E0B4D49CB6705808F 0DDF96E12101416B10179D5009F936F70647EFF5BAE5B603018AEEEA947D8DAE A94D1E26AA3C1FAD183FDB771179D60EC3EF7C34E12A0CB3474A458C1FBC0075 A1A0A811BDCE365B5D00D0E9726DD4F054E590C34819C60A7AD048E2C2617FA2 C9B2AD1FF4AD10075DC4704F00D879C46B0AC1A9673E825949301B749AC724B8 40DE07AD7E0C86EF928EAFC78EA1AC88B689E78AFA572F375577DDAD439580C1 B192537A6CF58A63AB1EA16BF269F100F9E107147D3D9A76B1EDA1551A4EC435 B2E7250BF172B5569AF385849214446D3F33075CB13E124AA958AC73AF8DBF8D B10B03290BA444C6A4CECA4E5E090A3C614AAC4A5BFBACD2229F88F711029555 E39845D13EDE9246370EB3ED3004D1ADD6FF4F952B5C5A9D9AC274E9585BF244 44001EF8410AD030850A450A903DD47984CE95B25A3FCD32A4270CACDFDD56DF A59FE1A2177C84900A2A92DA9BE8504BB251EFB8E60406EBA014FF77E8F285A9 47F3FA7682821C16E0B947AC3300F7DD7C84FD96186B8EB135491F6CEAB7E7AB 89563D50D958BD39AE2FF1B508517E63158A069F5D54755B0D6B03CDFA111229 DC4B3AA5FC28B50D5038CD850D5904941FD23D2CC21C1F8BC80497D960FC6D46 4B0383946E50C18A66053CF954DF26D0CB0F634FD1B5F61E6B4AA0609F218546 9FE187B7D0594BA71B384DCD48363F623F83C1AEF36B076A024DCCF0F00119BF 0EDE45FA55AD834028DC9D17AC0F0A84538A0DFFE85CBE78A877F3D73302B49C 0D86DDF8EC54642765A1F7666CC5372272BCF41171AF84D208392CC6BF47CE56 7E77300BFFEA9BFEB49A3E57F9AF9CB681DFC798A1EFCDB6661FE1F8F41B5B94 B8B92FF3D81D00FBC631849350A361118E56760A9CFF0CFD88F4A9CE42B21CAA 3FC14E6091CE04FA64D6A2CDC0D2AE06BAA8CDCD5F38779C7FB4356410DF70F8 C5F5CA8CEFCAE128725B10089408D9AA76442C915332917BF7ABDF9075C05457 D8CA20FB6C256DE1025A4DF6808175BE4AF2C21F86AA76ADE894C7CF0070EB02 8FE00D1D245E7D71E786E45FAA91532D4E08F330C2DF0C515CB28A2DBF273425 9C9820A754E413E571CF424CF129EF8AAE7B74EC5DC0A18BF71F37D77CDAA2B6 E66539E22817289914AF2A6B2C2EE3A365C6A014A6EC5DBD4C23F70FABBDB37B 65D6F58BF33E54C322E4C5F5AD5E89A302ADB844B5BA379B9BBFE60E94D2FA68 FC855A878CEB40C2391EA6B6420BC5195C1E5228E2D291798776C33E620E642A 22FD81850ED9D717FD221473DE77777AD291A5D98B0FCD331D9C09B4C0D3DC4E 00B99C891C4C96F43AA970E5B501B877E8C5792A10AFD44F130F17D694BAB5B6 CF24F82F5252CBB8B2BCD06E3BC800BD744096EB47C9E7D64A45D2B72AA62A56 F9EF5728F23E03AB71648850FCD8812661C29566D406B062A01C18C78C5A312A 046339771945DF6E6424E3FFCF6ACD85FEBBCCB261D65D04EE0DB465E3165B58 798F24D24E342ABAD0C6E46BABE05BE97BDD7A4F650B53E320107245DABA13C8 649690AEC58AA37A931B2F366071C61EBAA0AD432C251782681FD7FFCDB58B83 0FE841B8B321916BD81A1B995E71CC4DDA45F99213683FEE48A27A6703805062 2AFB026DA1C3767DEE97067DABC0DF9505C948897297AF06AB64F87940055981 EE1036B119D5D351A82DD74BB353F36991EAD0373EC1EFC4738A6CF11F8C8816 6F0B5D6E52264DBD676EAFDA7FAC76C4DD122225A093504FFD3847307E0DCE03 0AAD8E1566CD51A492003D1CF98857BFFE17E7B0D2A8542874EB0CC653FD03B7 021BDEAB817F5811D6EA9C8989FFD75F727A9D0D9E3736E30DB861E4E1BC1BDA 2EAB6CBBC68B292B8AE65C2A3CF3874E4B786DD35BC9B954ECDB59C103C7691F ADEEAACB74ED509D91F06280C2D0C927B2C0119CBD21E8EF8F277EC2D93816CC D76FA7335D304AB98D3603F25611B59FD3894596CAC467DCE9783BF3314E1385 D275F680D08E445EE3544BDCD2AD0763A384D879174A66FB3C371FE15D1F1137 32CD0ABA4BCF15BC152EAA6056DD9643C356FDDC92E30200DD0B2D5FA4844D8E 456D86073E874BD0FDD613791BD71186D9A7FF792798106DC1F5A3EA953AB103 8D74395D83843B1C57BA1D717451FA6FB7EB44E754AB5266B84392477B983778 1C3540123DFEEC44ABB3A352C5754AE86BD2C5D0A2333CC7DA49C40CD1873A00 E62B43515A8451B6B0659F27EC20E2BDBEE7A41A4D1F16DCC3CAF21B7C8CC37E 0BF5CEEE50254210659ECCD900DA2F1716F11A426B5FC42331CB812431A83E8B 2F54B4E6FCF5C3D27798BC94CFDA5E333DCD372D15D0706F1ACB74E1C19C2E57 FD758C93C27A9E60BF6B8B22FA85EF05523027866D4AAF77B700A870D6DEA46A 1795231A56CB88846EEB1A9C3F77D2353CA629821A43E596B5E9C14EE59781E2 1DB51BC67E920F2DB7EA049AD78B2CEF36594EF886710A350F5617402453C93C 21B0E26BE446C8FB2C3F69AB579B455FEBC8CCD1F6A323E5A5E6FC95F5F7F0D7 A0211C23AD60CCDA698B023DB24B6315B01E944B6137AC7B04050C2FDC72D39C 2893B59EE759BB263D2FD59CDB40F4673425A2D65DAA8F7289868562E2C24E51 1F22E00900926183AFF5A2F7050CE45640AA537E5D3286F8BA2390025840ECF9 F1DC40035307BF1224BF8BD20778F82FAC71838DE3E8C747CA7233BE53F5D715 091387C1D5B8F288BEAE09AF1634507C8896666B8BDD7AD59460631F7DCE6269 CD5A182E0CE55CE61953D618DB21EB91851A9EFF4B6F79704B32298F0345B368 37F04F89995FB93DDDED2B04351315ED77B6F7D4FC0480ECA2995BE120C9ABA2 3AF5B79D15836FCC7E2088FA971BA33DC9BBCEB6742BC30E21C9C96B81C2FF26 75C28FFCDDAB74D857E9AB07E750FF7BEDBF99F6386A60F5DD2D7D4989B1AD2B E8A10F18094F645EE59E8172C8950F0AF27A65AA8B845FCF48B080F78BBDB089 BB04435CF253BEEAFA759C371995B941EB3BCE8530FC75C5DFD9F9F80D2E18CF 2A301A18BC2B2AB48ED4AC5AFD73793D38431D9684ADBE9059E1EA3F9053126C 128A685B1E33B452C61CD9B7FEDBA09D82C8B5CE29EC60FE517D74DF7CDBB19D 68ED901E2C17F9C25EE5BDD27D885DE7ABBC1D5CF678378060FE04D9C2C510E6 4D0FFC8C42ADEAAD8E62936C63189A27E800E9064CF467D2009A827230A6E34C 507AF6D197165FB5D9D473C6C2E7A20FECA14703A56F00A03DD6977AF0D0425C D7EC502AA165FFDFBD3F7F135C74835C6E57DC929BDB30BB6DF8AEB0D004C4AF 951B5884CED05500E57AA2717FD152CACEAE66E2E4472751083D0C1A9AFAAC84 9E79728D1D377846B8CEBD5F3C9DDB040366D2C20C7679C3E690D1065239B7E3 EDA9D368CF7D535F2F2D61024864C8F2BCA5EEA1E2DD40952730514E16497F55 35BF23BA6AB4185CF35D220D73920DD44678BDB11A6D926BF10D22C6D9B88012 1D07F730CB31BCFCA39DD5AFDF98D64AEAA4D229CDE7077D2F1A5AB260ADF557 6D29E28CF94EB542BA9B442EB1D511C3E57E409755C68611E663DE48CB235A6E 7FB7AF2627132024775F08E01D882E06508B2E21582963A51D3849142A5D14C5 49FAF2CF13CCCAC71CE7916A2E05C2ADB8C4E80757E310B82AB3FC3040AB4441 E876B9B7763577B3BFB9E1F9D6782D88DC7E3D695970538689164A7A743E72F2 7BD7AC7644E0EE3983751386685A6554A889ADBC865A443631004CE81D2467AC BD730AD15FC988B494E5D14341452F1A9F8BF32321EAE2F94DCF6D0211624B9C 76BF2D151E22A5633D2506C408F38E7E4DB66CF9ACC1A37924A0D43FB930B49A 3C629E71C2120E602025A8548CD17C2918131D4798ED4299F54D12040F5B181A EFD02109C2D8FF12E00BEDC881184C39C56937572623F613E7D5CDD578BCA3B7 1665E4695BBE5920DDC3E7E25061C693F29B2B9050C4C2072DCD65480A6927E3 9CF4ABF5AFDE180B056745901A8FD165D19A425BF4FD8383FC84D55ACAF59817 D477F21A215AFAE39E05A8BBF7FD8BDC1887DFC94AC4C604FCF5DEA07ED7CE96 640376BE3B0C0E7CC15309B827C8F1891EFF6F91722DEBE38E68C1C74BC2D66E B8001D6CF225C06C352BF471E1E3AD6B8194D7F47B5DF58C4B2676B21C70FB2E 4C835EBB0BC718AEA9AFC97CD3C01C7C4C6AC0994443FB6A5CB661CF5948E9DD 64C3A86B04A0CC68C6AA168B1551E0933E2D2595BCF025CA98FD87AC43F30608 1C3BE69E6A94AC2F3B82033408B67B3DFD39E88D96EDB58F50585AC9FA24949F 794483AD43060A20F5220E6924699E2DD07EDFEA3DD14DCE9ED3CF9C8144828A E6337CEDF0A470B92A256D4C53E4B6B2F1E4F76417D3E263F973E7A24881C1D8 C7E3BE0E8C05DB31D05CF3172E4CCD9FDD4F6C8B4D4D32CB035A891CFBA29270 7C530A3E1A40BE713F618C2D6372B5AF3D48AECA4B3FA35B9EB23BFA10AAF88C B62E897A3D036AC25F4978D95624FA3BAD6566FD745907C983B521D6DB9BC5DB 2DB51C72258430F22F5AB38F020411767B964593444D7DA2CDE99D30A7DBE7B4 4B6E5DFC568ADC89A6CD75242AA37D24DA859428F080817B679C41AB1298436A F86A2860455A6822F3A81FECB123246AB77F6D178686882880737777FB9D043F DF2702B78345C254B2D07EBF281043F1B6BF55F18233FA47321552D7985746D9 3528A3EFE97214B08BE0DD52D494B10BC2A503C75459E023191E4F59DBE7039B DFA078A65D3D337846FF483CABE40ECBD98FFCD778F107233CE6D53733E4E1D0 0E4B8E9EFAA120092C70412CB239E671D73821823242CA5CD4E7587DB8E56817 4C17884AD4D90635C5124AC54F15D50E324F9F3484109E1BBC463E272AD0D464 8127F480EB32F91E0A02FEEFD81A050E604EF43B0CFEA89EC9F690B2CB9B6735 29445B2C8A0FB965CCC3B4D4AAC7D4379ADCF6A80261E523F5107E0E4EBE3E59 432064E7A1DE7C671596092E4488EA2722959CB68976F213CC544B5A49862E30 0202E7E2EC1EFA333777A78F742ADAF5AD2B46E2C1923689F15E3F719D895959 CBDE9DA08E231C0786F0BA00ECE1796950D60FB15673853A6F918102AE6F55F0 3A4D1EE39C14B9DB5F672954711A749AB27DB73D57B012491D5DF87E53B68543 FC64B251CB207DA014C43EF7A97C416C649A359ADCB015DFE028221B7622F568 5E0490C27DF50C2DCCE3C711E8B6D395F14FB631733AA30B67BAA79EA7D9BD14 5A9F50A4798BBC990AE804C817291388D1C9CE36748A6E8124229FDD9D6C6984 F1F91CE9A9E6BF2FA8498435BDFBC39CE48F6FBFA5F767BEF47DEC27CBF3321D BD6AB5053BC4DF71A432CA0A3E293E5FC48C2D8F216771C060D4537327C9F1D0 2D3A729B83C30E6AA3AA9DBDFFF69E707C1641F5C92BE49F890C301BFDD46A18 F11F263B9DF2D3BFCDA12748087DEB1D3CABF6B2C628C9616E6CF682CB1D97B0 624DE0DB94C30C138138584BB172F55FED3C622E0B512D846CDB6E41ACA61885 F4534A1FED4BC69FE5322BBFAC37CC7DA741F5EDBA032EA074EE09521CFE573D 2D929BD629E4A414924C1102609B4A56B9F87E35A363E14DE497CD19B936AE44 39BD111C32AD148AAA3D9883C9873CA3A77D48E2BD225DF6C94BACD0E85C5BBF 8203EDEC3034B5BBDC25CAA043BC750DB83355D5D9A8577623602EAF8C2574C4 9EAA0B306396DB4CDC1BA5 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMSS10 %!PS-AdobeFont-1.1: CMSS10 1.0 %%CreationDate: 1991 Aug 20 17:33:34 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSS10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMSS10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-61 -250 999 759}readonly def /UniqueID 5000803 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF7158F1163BDCEEA888D07B439DBD4E8B4C9 D198C03874B5E6F8FBF4922065A92BC3E66D05DE53971CB1424510E892442858 D69CE1F76E4DA76C87C763A4B2FE36321E54B1328C9155B8ED6361855A151723 3386AEA3D042B8D89C8C0E9A33E5DF3B466F7BB8C2C8A4ED4CDAFF55FC6D3EE6 0AF2CEBFC1AC3A6E6692F8BB81F82D86BAE85016AD62FCB05467082C2E5AD348 44D1439C2B59F65590E57CA0DE481A7A34E79931B1513C4C30156170409A4BB8 46D412D1DAF88AD30722F12DBCA1CCC6B4BCC28D06B0D29149DDEC520C8FBA13 6B82E2E1790F00B216282FF122EF0D47B70A1B29514DDF7C0435ED238C14BDF5 6DA243117FBEF7398F97EB95597707ED63C6797EBA1B46EA19ABB1DABDA171B3 16CD500F5D64CBFBE4F9CBC3E66A34427D3C4D0C432710289381F9BFD91B4FF4 1E3A896C3EEA2F3105C218877D6C0C6B763760FA364D00065E1CAE9DCB5676ED 286A9ED0D1C946DCA6A2A670EE0936FB4706CC62E234CFEED34AA615C48D2872 A087F30990C85E64BA68F3D5C117123467DB411C9F2D6F6858CC70C1E352C477 713097321B4C4FD4C5CDE305415F998E7245908EEDE6E056A736EA77BD8C639C 3A79FFD0B74B3D28F0494A115F2841CF8A8827AB5608F96FD8998A5F40FB3DFE 3AA0C7696DE4E1D18DC0D6E84B943175FC38FFC42A9C0CBB13A908978C98BFE5 034F88480F32B9DEB2FD228FF6CB0B89B045AB02020C82E3F5716DC640613185 9F597CE262729BC52132F43922B9E28BB71A30AC8709634561B22D13C4FAFE0A 12C4451969226B220038AD8DDA990A4E2CAD53DBEAB698898BBD3046234EB4EA 901287E71CB41296C431383AB85F18882F65BE36923F6C0FD6FADD7071D88A74 53D06964062D55381F7108297B6772338AB2FF0BBA5667F1183D7D9CBE34E4DD B907C35B3E03BDDFE792D3CE50CA5443781DD2808CFC4ECD0B7E9788BDE1C0CC A96E5AD11EA61579E71BA45B11CDD3D9B89B46AF8CA38910BD33A14AF483DC09 D0E91FE0682AE0E3414C1BACE3A25F6F624103161EE0F6DC86D6C77B59816872 F71418BBD50E6F2A0EB219DF7F0434E7CBAE36239F060F65DDF28A19552B1C8C 798D615E51E8D499AA6AAA0C95EFC9F9483F5C43AEE80C90D408C14DD9AC3722 7E1E9F625B5598841A27C372B7278B830F0023C4DB8727B3D3CD1DF6C95602B8 EBC959DA419BADF45E22B303FF00B2BD6357112362ECBE57E104421CF6D6470D BA4CC04E2763F88D17F8EE7298C0A4430B731531BD8D09F4208BDEA9D405A411 8CFFF8D303ECD9A2D153249DE7B7193CE61D1D17C40D884B86C231C3F2CE57BB 55A4461572C1BDF22A92676DC4D1F29F3174FC91C1A65A6F5EE7A5600C4764A4 0A3AE558A76D1E48F457F5F9047A53B5BAE94510880A3DCFC769F9C1291FFBED 09801AFD0326E241059422C65538AECFE25C204D185A9B3DC3438BD5164A625E 9E9F90B0ECEA4CF28F69F87B76 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMTT9 %!PS-AdobeFont-1.1: CMTT9 1.0 %%CreationDate: 1991 Aug 20 16:46:24 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTT9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def end readonly def /FontName /CMTT9 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-6 -233 542 698}readonly def /UniqueID 5000831 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E 2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279 650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35 F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1 4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A 438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641 AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74 D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A 082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980 9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0 4BA1EBFAFDBEC531EA1210365091671CE3C86A6D4BC591C37DCC02570042575A 9D24252D6E01A8603753934D7EA5CAC1BE4E5AD2BA047DE8F3983B23A8A1511F B08D373B69E5076CE4300137B8805EBCC0AAB89BBB312A77835795E3C069322D 42C893A30AD739E2BDD299679B158F7493764F2321E3965141B5ED1C6F4765ED F46D391A646B30C90002B1C461AEE79E5F094CACCA656CEA3DB921CC5205F328 A2C69F817061D6C60B121EEE844CA5008F23DF0665DBE77FC6AA17283BE2AFC6 6C52308D860781647D82BDD659BB4A98A69836D709FE1BD9F75BCD02F4DB7B50 8D54CAC298DDF38B4273B5A33DC2674A95A35CD2CB24839C5F97475503DA9E65 CDE8B65A65018E8D7D3AD4521FD8AF0A960C16297CA51024467879C20B03DDE3 E63C4D363F93AD83303788D553AD35C422992B80292097BFCB4969FAD0E03C2D 4A24A72B9BAEDB907597492409C890D6D2CBCDB562E6EFAF62081FD5055DAE53 A2BB50F51BF3EB4D3A1FBD64261177EE2FCF92C8FC82E8204A6BF5F7ACC9BA41 06451AC30E49620A232DCAB9201D1BE3819F86F3488D1984B8F9A794F760C42F 07EA0662BC18D36CCD663773EEF8118B9D85F691289167D75B074F3FE9900AAE 40DFE5B7064A61BE3CFD2B29C2FAF2914CC6F6D5D93F1EC11F8B2F8F9997EB3F 2A553C2D1082D648D7FECACE1190537940C2734E2E8C159CFE7CFA84FF4FFDC0 1078C1BFAA1821A97C8DE3C50724B8ECA436FBEFF171C76BDF78A7AD8C89EF98 322C643704E5B852C4E67A4BBF948DB6F38AA3E7009D354F64DD3BBADCA102C6 9F17BB5187DF0F17338E2BC681B68520C1CED29BD7132455294D95848C20FA14 C80571E1CD039F97CBEBB0FEB8E9FB2E3246E61DCB6E05E202EF54358107C014 3AEAB6D536DD899775A3FA9CA3D481D6F2E767825CE2E7E24C2C024A64D9108A DCE568E59105AB2B5167F3426CFF3EBA7367C9759A329C52470AD2024B87235F 4CDC8D76E603D720BAA894E329CA8B96620A4685C1954C8D9B0EC5976F9D5F5E B4AB4D4A54541FFB42803E45651CF19590B52D4169BED1F3C61412E0D29A5C25 6B20A6FC11610D15EA4694F032411F82A13CA5CC919C0A6FBD99E67C840B0340 FC17756CD9DDAD26F275C419F37C654DDCF17F08C593C05851BEFB31E0CB10F4 6A6C66AAD744DC72F442564C8FBAC55A3BE27CD59C61FF1B9933E951670ED187 FCA6ABF522440DB90CA10D9D438C6A5376CC0EA69EC872F5ACD597F50EEBA7E3 5CB9F870D6A5BCD18ADAE77D9FDA404A7A448D58DCDB07B545101AE5F5FE5887 751FBB512D6FB9A54DAC9105E37B64224071C8D32914FED32E242414F0AB4925 D9BB7B95C75E2277A34890C1A423173AC5093C4968EA08EE294FB01C51B242D5 F918A225C49B4EFAA3E779B68BDB62445F6737C80CB5F9CBDD8E0BDC1319D854 1AF179FE9F9378A433FBD169CA367E7F74BE33EEC0183F1919D3C484908B01A9 B99D9A94F3E446584E5059C5A00B4EA0ABE803EC5B21728B43FB04B50261637A 79F3382E216F971F7C55E98E1336B37A29F21FB9507F862BA519E5C6E34D5DD9 08B81FBA65180BD56777C9401FC2D1724A2D6B8385C9662BF95F46A0BC9093D9 DB84952B4A14992D5B965FF078D3DF55C39252F8965FA9BBCDA6BDA03828001D 5BDBC2245BD3EE9A712171EFD55592DFC8BE07032AD8B9916AA34A575F5A5382 F7290B17EA4E9B7C612E3BA7B573A477E462C907E6A7EB48C8B3B57DE7E95A2D 66368D376409DAD409CBA2DEA2FC3326D2BD15A331CB23D5CA9E5E7FEF879FCE 4DF5B422ADDB78697D77A534C2AED9578C1D60F45B101DC89A5313AD28904066 3C2455D80D44D060C13934AE29F7735C2317083710871E4B780EC529330F8047 466634A54155A59BC811F1FB66315F5E32C7202A0D30CB9924F06A8E2E44E618 BCF9DEABAD457C367EEEBDF8755C7B4959E313E82AA1BEB816073314BD33C3DA F8E3949594CA64BA168A225C96D86DFB45A9562FDF9006D7D14B982B95902E2F FF4CD3CF4B6AC6F7198123C869400249B6253B9306EBDA5F1376E945EA0144DA 4E2EB4BA04C9A62F89CE99F1B14AAD27434D88B33574378E22B65B55B2AFCABD C6E60E32114FE3006805CE8E5D6D203C18E8BA0B03C4840CF86B49C11C290AA5 3C5CFBB7EB4F55A3FD3F48BD862D23BA76B54E5866EAD1757EAAADEE7460A67A 4D86AC35DB8FE155D8224B819F6F4954BCCB6E9218FAEF2749291AF844710A6C 146FBC4424B1D08E19ACDFDDCC450114A57E13A880C4EABD95FDEF72A3EF69C3 C3561A337322FEF30FFE8119DEC30B68D609B7F7D34EC2D5B97F5782D7508E29 FAD4199B416E4FEA4B03DA0419D23BC761F51ECD5EED35120B69630946DDB1A4 FF534D04BD7FBFDAD9CBC6EB50CA5A1ED575CD42262C6D41A54FDD8B4D8E8971 6287DA5C9E92A5AF19490C94EC497DF2855F7C2A8D5511C6A79AA29B85F637FC AE7E4955B3AD5A7E09911ED284C46F008F7C92ED809F097918BE8F71CFB9D4DE 035DD4DDCCD61BB5A4745088A2B836B8F36E9B82C7CD18EAFC56CEB037F6DCFA 45316D6B308FBF502BAFC58DEA911CA8A963C3E4B8BB9D0526927E3B51A89897 CCBEBADA9823A824A440E67B7DBFA644C9BBE3042280FB2AD6DB14861CE514CD 625AC00808E8A06F03A49D47EE87CD730BE0C49BA4E3C5ED39DD00EB71B5DCBA 5F1EF54CB3711C600EC58B395C9BABADD6C8ABF48BD023E64BB59033F183267B C96277B5E70FD0135019DA3041E8D13B845109ECBEE3B91A807FBDF468FA87FF 4949CB0C025EF836CE47B5AAE41702B5D989E80786E9527C01321C09D90C3D4D 83506B28BB0DDC10A1D8B24DCE5339ED5AF2AA63DB96F8420D52C0574DA4AFA2 87754EF724624436CF0FD6DA279D405DE2EC1ED7C42F24D64BBAA7F2ECCD3290 685FA1168E76929CCCB2ABDDC15EA0AA8750A3B6313134821BE3C89448DADC08 71FF849917FB7CCCC73AB92B36B6E7D7AF950CF60C70EAA86DC0762744DDF181 0B767910F1684138C3B5BB0AC3774E528874F6CF5F92C74DC5331CAB1AA4AD57 53EC8D0983C07FA0F44F61AE472E9FEAD1F527B0BA38CB5C3A8A59D0D0ED102B 6786F717F9F25C48788939CFF4CE267C163D435742A2253AD2D905D2B777C148 02EC29897CA0B77BD07B5FE870D7F8DBB766CB7F1C98BC584DC74121708CE9F2 B898D5C0A068CF4B96ADF99FF92CB1A8CD2A13D3A9EDFC708F1A665C12D78A21 36D3976192AE2C5852313BE98EFE5B2E286CB4EB07D17BD23D3E2834A1FC301A 7599F776F37475D3D5144AD9017113C896981E93FC103EFCF04693340EA09364 58E557EF1795126B3E858222665A7E540733323E1605CC4788E1094AFCE864FE AA08B33FF219E1E596E9B7421D42F7658D413802F0E9D36AE099D5378F913D84 BD54EA099BFDA16116D410C1F9BB85D02A9B8CF6354CC9EB3670577E62E508E4 1EB85B1BA3593632AF48B63CE2909FF90F4FC726A63F6AAD26E8D89C6D0D99FB BD20134D1EE54A87D7D86760866F916FF28FAF78ED1AEC8350484C3CFB3F1599 CDD56528DA5788446949958EBA1B03EAC4ABED1AEFACDA5F70DFBC3E0FC77F59 393D1220A83E08482F21C130C959D9F55E045AEE34BC56B364F2539B87DD04A6 05A47347029A443142DC89C07AA24BC2C172424CE4FF8FDF6F9B5E0B84FC9BF6 9D43AE5246A462D86501E78C9B36BC9CDEF8A37C0246F7FCD10B08D26271138F 5FC7B2BAD85C9C5CB1696F3D807E5A8ACC26624EBCF824AA3DFA3C4232E9F988 4F5B903AA76BF8525F8F87F471C4136CE4F9BF8E8157AE99BE101943596CEEC7 B520AD28F848D6A8EDF2A1B2917120A0CA4D224A4879CC1372B995714B55AD43 0FD031A1BB40C0EC894655F6317E9CD3A9B8E9551D04AE8B51F570143D153521 232B0BCC7255BC858550B227BCEC0F89DB82ADC3E09B68CB30EE6E958DE2071C 31B3A52B3D092A4B512E27ACA49D7DD3D67E1BD6022DB894764FC3C03288E775 771B1B4FE7B1775DA7324E81B3F62C8799FA2713EF4817F7AB14CC7F345B8E1D EF7618993EF7F80C7D0C0DD217D3F6018C801B1018FD4D0E28CCA3C622D3126F 1C58E7A3D58A5A90AB264D34A22DA49F044A52AC384B4F9565B73EB8381ECC76 26CDF1ADF941F2130E94FC13A17D64A06DA775FE56E30FF4E42ADDE306F58C5C 75BF400AF43F50F0C61D9F09BF8D02546757FE2FFABD58453FB0CF176275F0D0 E9B35818EF4B0C41EB822944399D7EC08697D510C6FA14CA4B069E1B025F4BE8 EBF5280BF490CC5413E76B6093A640AF53718A8DF65C97DADE96D3ECEAEAC9D6 B51192D7787E4B63964957DD97260340005F8F348FADBD8B8A6C626C2AF9DC02 AA4C95285B681BBA2E030B99CF5C6A429292057F8C8A16383C5F31F0170F3AEE 2909288A4E64B7BB2062A79863040E2183466F6ADE86A354751D91999B8EC08B FC1AD7794654073FCCB7730A0159B1F18DBC262B096582727B6DCF318E9F8124 DA565CA4010109615DD41B7C26ABD38058B2E0026F837DB5C93B4258B9BF4605 AF724F67A35A5D75AE261E5733A8364B248F20D7D5704CC4D9692AE5B2F045E9 CAFAEB42A6CE8B2F660D09A6430148292DA50869EBB8D64B2BF42EDBEFFB703B 4E97BBC4230870F6B140E7EDE03D3706B8B6D42863D174BBCCA56B9AF74A85DB AE22E8BBDF5213A75B57E51E0E147B4C4A0ADDBB9090C00D066A7EFF0F75BF86 1E71544EB9E0345A983045070BC708C82F452D529E924308BFC69D3AC2331E13 A175E59F34B94D4DF8B1188B27509376E0F619523CE0DCB82B5D7551ADC01036 EB66301225C78A3EDCB035E2D617BD5B21110C5B89D1D21A3002FD9D6669E8C8 949C19AAE4B4ABD86CB1E737E9714DA2C30F24AB25A25D97825DF81C9B1E3F06 EA96C02255837784126C12CEA39F56B8460FD07346DD5795AD7601BF623E4F27 98490E88F76790BB92D834F2EDD1108E631158428C87C1291FD1A6750C866D3C 72490B82A75B87E1DE769CC723D078946012E2D247812A66F073B1286A798824 04C43955BE3CEAB2D44C3CFC2E979703723FBC89D51E55B42B0EBAE8097A46A9 84E1E9DDDAB4941A0A9618C8605EBD5AA71EA8B7B0E76C6CF58166F461F91559 D561E353128AF639194F72088F3BC34FAD742BA19A0CA9A8FC4205F22F42AB69 820AF657FFB14F5E17133EC8A6EAE3C01F00F4F7D7EB18FBBCC88273B0DF4193 B82881D2B295DEE98EC72C29757775E22DBA9606DC4D8D5AA77A6936971DB657 4C1A062665FDE458742D0664854814C57BF9CF287CE98621A6DF47A03542363C 27DE1990F242BDF604DA46AD82A6D287553B88A2E857C06655E47CBA82191E1B 3AC56F7B6682A7629ACBB565E6E95B6015AA54EB2E93717AFBFCBE12FECA1F1E 2C0C83C8083A95351B88B8DD1C088DE1F020560437178B472E621093E08386D7 A6B6848096F48FC3C06DD560596C5579A96DDB645672E6D55483228A3EA20B61 B94322233B1F644E5C560E9B50ED02B5F52D6029C7FDAE1C7537FA5AD111D60D 85ADF88C2887485635D32D4522117C6A000FC12D2AC9F1F98E5B8376528B1FEA 472146ACD9FC9E6DD01F34B6E77B7711060E2CC989DB85288D193C556C2E2D6C EFFD2301F0BC6E181C0AB49B555B008E5465F3056885E510E9706D5AD9FE944D A7BB44C4C495C5E8ECA8870AA34ACCBA7BEEDE5968DD3D18A729E5B572622BAA 3F73E9A45FF44643A892DBA32F6AF370D68C21AB50735CE1BDFDAA225CE999DB DC7A9411B687CEE1CAF9E44D362DFF500C70E75E2DB2F70169D713CB3FD3937A 4FCC203E22B737414B0C7DB353A1F77CE4BCDD129457F712C70424DB6607B8F7 06A9DDE5D6612F78539D9A519A39465336A35DAD5915915D0DF74457EFF75552 145CA2ED6C7776428EC5CD9CDCF56CD63881B93CD8C1BC5E29B8BE0F29042EC0 82D49ACADC9338E17A56B332C04BE862E58EFB86F0F2991168E2A600FEFBA07D 1C6C9128A48E57E3F8E3E52B1C734BE37E3F14BF44FEA10224A242619CD4FF5F F6438D4EF139E252A1D3B9F6E435CC134F9D702F7D40F4331624DB535C27658C 1508AC614B99D8C6901E78CDE6699B94C90F7A75BDF7DF4E74ECC86A38EE794F F3D7FACCA5551018CC732F8A81F7934370EB761BD429CED61F66E425F3B6F465 ED4B9C848DCDD078A774B9132DC539948A74FE224C7F92C8B19AC348A61CD4CF E44E8E075D02901FF55CFE2E3C5A2024942C71A9BF4CEBCAE74CA3B47BB16E9B 3CE383B26BA2BA93856C96DCCD66F9BA8E849060AEF2449EA5720FCE18EC2570 ED6CC349D537EC2AB62AAC939E792A6DAA151B4045DE5F804E5A9EF0317DC8A5 2A312F75250562669258F4FD7210CEB6ADA9A4E6E68327935DFDD9639CC6F515 88316FB7CBAC54C6C4E7F41FCE9A3D528DB609FFEF8A0A571F22A1EFA63C4D2D 9E0E3EB4CA6DABFB427383BAE827AA7303FD881AAA5FEFF3D867875FAE2D4766 AD1BEA49DA8F04E0C5034227A904516952D4D341DFDB8403BC64F6FD558779D4 C3823F4235F7B573204073F15EC7E7B3DE4BAFD368FF2CECA990497D7CFB452B 3BBEA203967349771561891D12EABCB4FA3E3845C5F3AB679EA7195F8E209A94 A792C912EF23E7BE72C8F115535AE0C02D997222E85832BF8C174978A6B990ED C9E600C942479BC7A7AAC8129F59A58C6013114E4F1301157E2C018B38F1F4A4 7902E83853C8023EF38BD129E47D66044C5394286D7F54F7A7BD9EF39FB38DFA 14C9CA0FD2382A1ABB019F82765C15E2A108C3E3F67F9E1ECCB9E9EB7861DE1B 2C1C24D906DE7E096C77A1D3B8E2DEF75F0A3AA5529DC131FAE1FF825BF7D3FB 925CD893EA6D118D3B03B241A5DD094E11C9445D610A5876DD24882E21385F9F B22C9BA1B5B909196E39D1C38BD3360C2CA00F5ABA937FECEF55BBC513DBDE00 989EC1BB9CFFFDC0A296F42A3361FFC276A92725548185241667ED33A6E3BEDF 09E4327E35504C5337BD01624C348DA0405638B90CCFD25A909321FBF06AB0A8 1B6E30DA62B2356C01567762ACBE54427891D401F0F4159B06A236F55C6A7AB1 793BEDC8F1265E3C8FF4F45D971A354FDFED1AD911B444D88A8FF96FE40C2333 33FB9ED7AB48C727A87DB0F2F9E0944EFA8CF0A9962D95553AEF6576A6DC1E3A A6AB30A05F2A34B9CA4271E4875841E23838B59461008980DF727BE01A5AD854 98231BF9A50123960DB97EB9A755AA856E6382FBD7665CFE89B06A4246AC8EA6 97F65D89F7069C7A238E73958DC205D2C1BF6976901625AD3CEA54AFA6D5ADE8 307799B0711E28698C3DA90F263A4F7517E0D39806FC53EA9FA3C0031DB0A7C7 9E89BB2727E73205A9206A510302970F317FA44475E5D130A5928F3123851C58 70F13E2764F7680AE8C45201A176BE9EB87F094A281644BFEFF7FBE36AA8982E 3A66D9524C96465B1A547FE2A2D005403588258512A494BD1A02516BC390EF96 99DD06AA21F66A2988095F2EEA179FAB8FB565CC39DE5FCB332AD073B53FD1A9 C54E1844363C27DE1FDA5CB9E57242C38862F566814F8991763F8994B987071C F1503830766D8CF46BCECD1207B4907C2E4049D41D5063548C2669308D22346E 39C829E70015A8980A6501420610DA9022F99D5560578A2F61739EE780B6841D DE2A7526EB86B22CB65F84CE6493730D93589085B8BA13ECCE8EBF49B71E15EF 33AB3F84F6064F6167D707CA3CE53A5CBBBF766D28D1E805535100A33E67EBF4 043C12FD78949BD865DF2110706FC94AEC922638A5976F8FAA839A7B4D8A5523 4834894C44BD8504D2081F8FAA07C2B783A011B02268D3214072B80E1ACD4EB2 FAD9686182E0D0D5138245A32B1058EE3C29FB04977CEDFFFF5CBA8E116CEC6A 5931762ECF8DED72AEBAA0BDA3694F4D3EF3A4EC620800F1F90BAB90ADCED4B8 6EA4B7EEC64DEC90ACE3D28B1E17EB7FB37B0E4B83978ED1F426C8767B03AE48 68014127B771DE835F6C0F5B5948A333A5C3CF7DF7483AF93BA422094FCDB3B6 6950F06735DC79B1FB28A62B16CC435004ADB1FD35EF569EA27B2CCD58D8FBE5 078D0379DE42EDAAB49121F914B9E22A32D194F80CD1F93B0E2840168EA0EBD6 2EF286C12DBFF843D46DCCB7FCBF4AC94060EFAC1B7DE06797A495964B1318F9 270A0A6A4B0FCA2E98B98C24FBC5375C72971A9AA79E9AE8AC730A28A5396AD3 D32D24E85BE4BBA69062A9AB77CE8BC65853C1A9BB3E128E7836E20A4DCD304C BCF0436915307BA3B00A3465CAC89A855CEEFD4A618E3973E267D72ED0076228 CCAC555884A6E63ACC2AADC22DF4BD48A2AA05E4C31834E130E4EFAFBE736ABF 40912D9E6155D61E407E8C6C65BF042D16CDE001BBA5B43B0BD6D80BD14EE62F 7E52BCDF8C0D02BBFB1E180B6273C57131041D853B5DE40D8EC3C44EF3311FA1 9C1DA9B2E3411FF5F4B73E4CA56B1388F3C59CE8493EB0A5F04B82F5602DA1AC BFB54CFE959CAC7DAF2406F5DBEA72F78206D6425E9CAD979440A641D725F498 8F782F842753B5D32353EA129398F07E69C78CB6B4BB61EC943AC1B0FFAF0E47 A38D7DC081CF38335EA682E4611B5260EED85D8B43DEF6311F5830D7ED9FAECD 180F5044863B7FF43AF993FF8320BA3B21732C6665E8C86D7B88CD7C1896B6D8 26150B940E1E7F4D71FD38B3107E4A06BE9201EA6F3E64A04DDECECDCD35382C 12CA307E37333997A5361306E571CF878BCF473530BB8A44AC08B22F79998AEA 9638AB2ACEE79651FB718CFF848A5BBA9B123A1E3E9B2DBDD3FE7C741C05291D 02F79A7ED7630849571AF40AE4A65560857074ED127ABB8A0935F3498082BA48 73EAB03DAE204103FF55850B5B46D699012EE96B72755FCAFDF688E5EB2D4A96 CAFD2CA3CDA14355A91FB8FDB6F36049E3DEAE4A2F8520293672F5E023710CFB 86DAC56CACEB32DD450146201544583F1DE38E0B02590FCB0ACD9380F8ABAE69 12E4D68935DD5EB9AD8B0052F0C019E3DBCE90D6C3990696E65F64FE3EAF5E60 0B6CA23A173A5A13E696D41297AFB67FADB7E83569E0192B60FA10A3F6E0D5B3 4D700EFA259E906A54F4296A5FA12EB46A374A90771E11147F4633C755E5C48D A2ADAEEEC1B0DC8FFCB047EB5361D7AEB2D50A87C6B03C73DF481A939B40FFAB 674B5BBA724012869E2C52C1436DB527C29DBC518F47F39B1DE3AB2C9FD94E5D DB2D3F0C06806998DC4B54F875AEE96E64DA13EADE3C2A8871B90C1A49001DAC 2884C2169BED18AF00936B85EB861A0B823DE64E27AC5F74CD187C44E7DC9EFE 75EDFE9C60466071A41085DA33D967B958941622D5E1BA219679C390696466B2 965E4F9236C08B4ADA07137450C81B72AF9B29295B03839892420D4AFE4B9461 C1C90A9C11EBA00AC40687D84613740526AE6A716A3EF850CB378382FDECC600 6374D69559573A4855C6400A4B385219C1D8A3CDE9BB0F00A332F56629914657 E5861BB5A2B89C7201A167E357A8769447A7E7B2B5A71FD11F58F7792782ADCF 3A3BA369A1BA956E953D031266141FBF7D035632EA2565B234891D0A1E912BCD 3A1AA06498678A739BF55A675982327DB0B347B27CD342F545C2BDB42A86B980 9DE95191C0641554356386D2B35ED1AC702856D43ECC6E6F397C78541250DE10 8F60BB1A02B1F9307B36901A59BCCD9D7E4C43F5EFC946A1A3111005821D1621 9C8329C75E4C3904ADB21E5EBA3AFF6DF2864EE9B22105E5420542ABEF53B38B A26BCC9149DD14375E372D52ABCCF16A1133CAF9E6364B776507136D00A7EB4D 608C005DDBFEBAC6AFA8C772443776A4F45DAB29785949645CF1748D10AFB3FB 3D07529EC067BC51180FCAFD0066C1033D07B97E38A688616254057352EBECED BBA0191DE63B6D47AF2BD8CA13137639ED67A4B87865AC37E619059D2F147F68 1DD850B7342A2865AC52C4E2182CE52B8FED1E8438C9C3324DC785624A622145 24FD26BC47DFADA9B555C8D979FB9D1CACBB0EA3B2A69E7A8A80ADEB40ACE057 C9E6525479ACF9AE1F2C7DDBD76D84B7455B446FD1B0BF9B3BC83D8B7A042FFB 50ACA64CCB6C3CC9175CB878A90DF6727CBF20B295A8BEE55FC87B268A4BF533 36C7BBAC687CBF671416B409D7E1B5BBD3EE117C7DB77058ADD0DC95A56B3056 6DA251AA8E600D4011A2B196C340EC7DEC43A393C6C4F221F862418FF17AA4CE 8D11FD018928D8CDF7125AC91BBB5EA1E89B1705432F6672D4759624863AA9C1 49AE2AA65F793F44BDD18DBE266E783F64A34925DC5D6649313828EBEE074826 FC151AA2A9FCF927BDA8B88D3F1F95CF5790C38C73B2EE94A6C750D06E6B6BDA F8B55BFAD9B7673CE2C071DA8AA117D529E12B75BFEEC3BEC098B02709A279E8 93CD24DA39B16FFB7B5A38E316E20395ACA3005B4E2A06E91FFC567C59143E11 A175773EF23EA7982C5E16FDCD15A42D9D3EA4D3ECA58925C4CD6BE40FAA90D3 08001F800B6BDF57A2459002C8535596A2D8ACE51CD3B8CE09FD26472A7D842D EC4E653D2F17C5F34EBEFFB4F37195F163F1F576FA188B2C71E3AA30AAB7E2CC 32C6A1F20C5FB4D44B252FFEA34B89C4248F7FE4AB87AD7A751FE4298ACFAB38 2AA68ACD6DED2A24B480D148796A113F25EC31A98C8947EFA95A6256C4C49A32 2FF3610E39C3F84D20F88918B011A11D0BAC37CF07ECDE325210450F0178A8D8 5A5EBB9FE09409E8688EAAB559FC1C07B8EDFACA948178EAC1C6086CB414447E D2519BAE516AE68B26BA6473BE949939ECBFE17E175D82A5F03A853E5662EE83 1EA7DD3814030F6557EC442419E82F9AB6831D22168B5D84F3B91C4F4C78E4D3 B3C00063A4FC6CF9562D02744F624136C5A2F7A5B39BB3B94FF28E3859DF80AA BF4D76230B95790D6FA9F40FA646F8F07C1289C2786BE87D6B4CDD8EAFE34E34 7821FF3967391958B19DA543F6D983F235D327B942392B776E6600469C714B0B 1BD54BE06B04A3507D8D75B207B58D4D070595BDE60D0271A269C243955A4E47 6382775FAC30E7CE0ACD8EA5E5812319CD1B029F4B9EB2706A2403091B57EAA4 683B2CB55FE9E4320D2773BC404412DBF03B82648D0A95CD13DBFE2CC6BB8A6F CA1DF7B4CBC459235CBE71CF0E11D2DF5BD2B8ED835E79D735B6C2C1DBA8407F A26D26EFFB6A658846524AC2FCBF854D2D08A5D611B5FD4BF4B0D6F4C9473F4F 5C377F2474A817D1522EE00E05B4BEB43A8F0141DAE8CB7D7B6255B5132A3A66 C9F85D79F583D1C24A695B6D408D8314BA2A485DA3B898BA083B13FA224686D6 4BAEE88554BC0A7012DA7339FE3A041CA46ABFB8E2E1DEC0685CC271D389E926 DD806F4AC57ACA0A06F7DE6691BB70F501E54AD10E82C978B1C252278C4E3EC8 132E4FEA77DD0F50D428B4887F9E7AEB344C6B4C3A90B9900E537735132268FB A69F08AACB74DF8C1E504D660425612AF5F57AFFFB7E27DEE881660012CB6E21 C10BA8ED6487097E7E782136370490FB0A0C0DE717119A34C6B57097CFC53EEF 0701A4D4A36B844173FFE772C42BB64AAB79A9E1270102263574A0A95BF3460F C3577592BE6F860C5C54EDF4E965F349A61617C639735B95B19DDACE08738B02 9635749BEA711D3FBC9DD3D53509D60F3AE89DFBFF81ACBC3642B533ABD197CC D58CC1AD18196D99D25E13B14B644FFDB6E2C11F8535BBFE8FA055FEF35F5863 056129816E42587362FCFB1BAC9CF5159196FA04B78314A9D34CFD21A7A3D4F8 C4CD83BD80608A210524A02FCD669B2CCA17A2E9CB9AEDE7ADFD2FAD9587F894 B39E0974865E1C53105DBA6669994BEFB5441435C7D411F0425AC1EF29ECAB5C 4106AE63AC793225239F6D5B0E41EE4308192935B31BEF41B0404ADFA5ABB0D8 F68613ACCEF7019DB390DFFE93CA1460B62FF167BE8CE89C2F4AF33979EDD39D 385D4986C30DA6B2D2868D28A22201845B28E1A809619EA37478435635476267 66E30D0CF0016B29B1E0DBD29BAFAFBE2C87F735801CA22347E3435749B9685F 3D6A6229FFE509F1BD1214F3CC720B7FC396FFCD6C942A93C5C9CC62774CE99C DDEAA351DA814BDA045FFBB0029613E321977F9CC5D849C2CEBCCF6286E50F6F 80F4C091E07C6738A656917CBC5C20A97C0CE44C514D82E88D001FAA804BE16E 8C3C335CAAA2B1C481CD48F3C033A33DCA0552C8C19E3CA08E215DECBF9CE118 0C18B2C14EF128796C5880CE466167FEE95526542EB0D11602155B3F76B6A7CE 175C02214CEA613E4DDF70B640756624D1BC133572120A5F00C6387D8C31B43A C982C18B3EDA4C30CD8F8CB7456EAA7B1B3A6EE182D0AFB225EDAFECD8B27B79 9EB9BBA4B742920EC05B9539655705C342299725B6A565FD0AF5639973E78B39 60EF61825F1F686E15666BC75E11C421ABB20135E14031A2DB2D3C039DD62BDE 963D41FC744147EF2B8A1E556E765316BBBAA79538B92961EDE13232A0BE7FC6 2DD06BB660C762B852C15A364A0DE631F2331B9E0CAE3744F37E0343E7E8FF79 747316CFC4E70CA9073475C696EE1E10593C9E47C47F8A736CEFFF129278F56E C3AC99C245E6CE207CF2910245FA0691A9D84061C416ED104C9B711005C90E80 31D0C31AF0C58077408EED541AFF2B9E809CD705744EE5C7E35FFB4D544B9F45 F676FFC866D273855648A363CB3AD22E22CDA416B2601216336777EEB3461E95 F3448B8E6DC7E20C67682352DFB59E536378354365C5C6B62A8AF1B94FACDBE2 1D45D252BA3C2D65CFA89C0AF5032A4E6E45B2732951D9F79620880379244AC0 638A5C6D0A3D30D90B0925E21CEAC4EA726A92667C7BDA6A2E0FBEC5850AB9A1 650ABED17C947374E71FF6B7A9436795AB7BBD8699FD6F115998709E894B92FE 334D68882DE03C94FC6CA9A73DE0890B886081CC7B656E33A1AE83E58C7352A9 EE20840B62B54A37572232EB2F8B4B450AABCE2F3CC172849D50B9C27498C556 1980C2CE057AE59A0EF778FF7EBE74B43305894108C079032729A56B89C397E0 8D867CC53F69F3A870977988A36A98D9C3156C2E1E8CAB89F713393467B00242 6E4AD894AA9CCB5F100FE6587A98A08906208367B93EF2EDBE3F30CEEECA075A 2495885F1B3A89BF387B716BE164AFEBF694392796CB7FD591585D504A325270 EB4671735C13602F56AA2F62ADB25A67CA7B584D9C75F397B8088B0F46462AE0 BA45F4F6DA1F938B623D366CD591E436C5C7C49CA960FE903BF318DE28B063E3 15ED7B7791080E7BC4A1D0228C73083586BA6A5FD4517CCC26CBF99E75CD6510 90F95F0F76846D19FFCAF6200CBAF0C764D61365AFCF27775C142071706243E7 3DF86D8C91A83B81E9D449549994E1FE99B5CE57CE907C11BB2F031EABE62CFC 1620C58D8A5BEDACFFD482E645394CA8298A08DBCBB73BEEF26C1C01B8CED947 75A5C99526E06622024A9A82B0D421BE950855BF0AC56F2D78B1E3D451DFF8E7 7643434C45A0BDEF7F56612A129A68EB8103919E2A1A2AD0413175526CF206FB 73C8581213EB1536D3C274AA0840DC93D21C3239F9F831DBCD5D133B857B9848 42D9143AF53BFFD05946B488C565D525B79256F42811E28B6C81ECA429DD7695 D824CAF409CD648A8A2F969A4CE76368E743E9F030440A2851E8AC19FD47BA0B 0F5BBEF5835A4298E028872757FBC4734157440A053CE65BDB324D4FA7B3FB97 DBBC60D78EFD7136C4466AC12B2ED4C1A3D27551DBE6E256CA3710FE02DACDD7 FF824ADAE7C942683F865D1684F14D55FB7A025EDBAC1A2E0E089BBE8791D1F6 D9646C44CCD036255E3E311FDB94EF451D6428121AE9BF30AF4605D606695C9D 5ACB0CD8D5947B43909B61624EF5E88647356480932D88966525EE25D1433614 2788C5AFB1BBA48F1418C0DE65ACAEDF2CAF528A71103731270769A27814E887 E57AF1B05D39D64D2EC9A5A7D0EFCF7960013616FC2450D78485145C31D45303 9C4CFF836A67367031329BA529D9AF9DE2232C57378A4A88A3EDFE53181B5A9A 4A43C9DC03A7DFE1DE4F19A12977807B95EEBC818E23023F65E100EFC56BB255 A7D4BEA50314301A1013A01B116026AA5EDFD61CD602D57BE3501A93064E9E82 1CAC4EA235EF80DBFD2DA7DD1B0909E7263EA1583EA3647C5FED785D2968EEB4 3F431F729354C3A605306E3F326A85DAF5008C76736F49AA461A1E8F0357818F 9292E48894A5C3A3C7275A489707875D49A75892303CC3AF4FFF5804C75160E0 3890F6CBF67B5E3E4ED12466F596056702EC23102EC2EBECCDFA0C8092783417 5C9737A0541A9DEDBA10685D4B790D2A732A3373DBEC6FE3A78E3DE9C1C278B0 A51D236F150EC97E8DB3C45514CABFFFDAAAD51BE5629E166D9E5FFABF7B07B2 89FBE5C204998C004D095C32FEE5DFF810EBA7AECA567115A25B860CDEA52AB0 42C68AA53970B2B26773CF5551E9D52FD4347D4515C83A59C55ADFE1013FB91E 35C0D63B85B8414863918B61BA4E3A4F428D3169AA779BE90085F0817A71150A 5DF10EBA2F0856ADEAFCADDA4CCA1747334DA47232479A35F3ED49AF7083A064 1641B8B7B5192B1C4DCB7350B4341997AFF9F05B362A0537775DC96404422C22 EC0C0A95F54B15B1729865263566D3F815DECDA0BE8F29BBD96093F94D03A66A 79855671EA89A3B49966D7B10D8841CEF4B73856E23F4E4F7F3E6801F983DC5C F3855D7925DB079E7563284CB20621BA95FA691C0C0B5CCA8DF60AB1C30A7CA1 B9AE12F28CE0B2F3F78A193CE57DBB5A873AC7554EC376A9C41DF027C275B918 E76D1768CAC383C2C6A4BDBAD03B31DB9447115B8356EDE72C030D69FDFC05E1 8A757B08613700A0AA958BFA74D980B7358E434B65C76AD435DE91AA009AD615 7CB4DCB63FF5505AC39CC366D89E07D9084394B5A7EBCDCC176433F7906B8881 EA00CFBD5E778557ECCE017441F832EB05F63774FF20109F712D198B8A29CAF6 15C1032B3A111418D332BF1EDBA4485607D74DA2EBC582C5C5639FB8959B98BE C2836EC09D29C27EFC12DCE53CB7569C2354F2CEE0DB971B39FE7129E5E95BD5 75348B274F66DCC8593908922F9243FDC27871B3CCA4A6A24E501EAECBC07C9E 894BCB14B854891DA54C07803AED94DCC03CAB577BA7061D40AD2B6E63738030 3A89088A5059CDC0D56853CB0BAF878B3BA1F317EEBB0D606D8F35B10A32A290 137FEBDBA2524E8691E6E181345AE69190542793A59936514C3AE19CE82A1918 B30EA803C5626F9DA6C0C534A792038FCD85A09A29D9218664870237CD50283F FD011682F1D3467720C3FC7139DCD6BE93C12B9B533BC21FEDC63706060C1501 7D32F7DDADE5C9B62AC519B97324958D7535441A0E3D9562CCC3F6DC68D3F719 1DDB125BC6216D4ACD38E87FE55CF4C3D90FCAD896A2A3126BA303283372CC7F 4CA62BA586C49EC6B514BE67F2CF56430CDF1FC7170F363A26FCE96B0AB6E6F3 53732980B60320C3953A5D93B433671ED607B3DABDA6451556DE8CFF6002A89D 3F221EEA3541C032DAC4C80FBD483476B944F0544A7E15037A81482FEA373486 817954A5CE4A1D6CCB13E4D489C485199DD1B4DDC7EFBAAE92707DC55A8193FE 82B7EB27A507D4A45002B3D374ABF0BD552F4998D9C235BD9E567B905C04173C 099BA0AF26F90143AA41363FC5AF83F6921AAAC0CC96747D47BDDDB304E286EB 6F0D59A84BCAC831E5268BFA2298176380EF2472B42CFC65CA0B5048F86C5DB4 77610A4D275A3BFE5574EFF95FA5D6D153B66D5327988FC655E9F537FF4D4CDB 16F4245F940F8AF48AB066C6EFADB60E693470B232B733928E735F6BB39C02BA F7013E615980091EBE4E6DE10484ED8A9E4F21445222AA4F45E562B2869FA879 5C068C0560CD23921F41E2C220258E7C03CD7349EA9DA8101829071640DB65F4 3C61F840FEBA8DB640DAB05F8E1887C3EA50FE50E842E137E491C1347C99E1DC 30A042EA4C2A04B87908178B06EE755D4E587E89B3925DDA4C30CD8F9C8B634B 121563ABB22E0839E61767E5A517905ECBBB17EC210692B8D8F94940E1565391 487C47396CAC9AC5B3C37AFE6FD9D44A2571430A34396B109BF55BE10B02D9CB 708162E3CBC166912657DBA0AB2097E25E4734EF050CFEAF4624564B3B4EC5F8 146F22F88C55C3A2A985F9B20FBDE71E07E3B6C12EC05AEAE6971ACAE1EE6EC7 9A1DAAF301AB9D65742041CC850C9FCF40EDE86E1ABA17875CDDD90A1FCFF66B C81E6765CED9BC2E2C73CC993FD246EFFDE5FCE327C6DC6691224A508FEF907F 68856B84D20A29A6305BE08CB76DE17D443FBEB62459A2872F781254C60468B9 34CE23EDFDA9A010AB753A56B9C16B0B88E2DE9B421B661B2DAA7C011C10B41A 3EFE9946145E173FC56480C6C66CB137DCC903A6599483BDB42AFBE7A1490860 A147E4CA471A7EF1593440D68983D8F7292CDCDBC8C33C226B7EF84EB5956394 0F35FF9022BC6A3E43F83990722670063615DEBFDF84A37E941E377B3A5BE121 FF18E347D4BD09C3A7095F5BDC0D88CED702282AB3E68BAC4A44937FA4FB4EE3 68A416978F75A83AEBA759BA6997EB8232DCE6D850B3552AC91F4EC7788B7F36 F83A578147F0193A4D65FD5117ECCE6D8F0A6F4E7E56815B5D1C79E10C134372 50B3520145130ED97DA031BC94EE5F3F341B6CC296F2D219A3978742F3CD2B77 907253DFF72296F03A2A5B52AF2732D04BB61AC95AD61D90DEFBBB560664DE35 C814302A4D6BC2F91044FE769A87C3B6C6E01EA261A7C390A2114CA918ABB22A 1C6CD602D7238A4BA703389EDAE41A21350EAC32542095322923D53A2BF47762 4EC197B1415422EC27E3B81F67E5AA20B6C0CBEECA962F97349C45A1CFB58E7C 520BAA9132E18A185617FF802D2CA682CEDFEE6C820F1561AA12269812B6F54B 154418E9FE192F211F9D3AE1F2CAA17106EB30DA1BA00E25A6C89C68F43BA148 947C23CB50DF1BD8462EBE92DA80EC4973C05E9DBF17FAAF98A667408398D8C7 234AC3B1A1984406218CF20FF0FDAEBE741D8D612A56CD3699BF221FCDA6A26C 49F1A80138C450B46D1F8F778FBFF5BF8BA46520F522D5C2D8B030CF984D0B5A 65C9429095CF58F0506C4DD9BA787D8932BCA72308D07284F905C3FBBEF0E0FF F7A53A761F72FD3702D145790D0D20DD2E0B0588CB86DECC4503808B9F69274A 987097F43206FE63C14382A1C3E2243D41C60ECC5C661DB764397E92721B5C92 6CB2BEA599DABA33C9C1595963DEB61B144C687DAA11DBE6EA8E8EC1A3E6B74B 4F2751FE59F01A1FC4C794BA21883497D309611F36EDFC1FD1CBAA36E9205B2B D9378DDFC24A14610F7B128ACF2E301A47C26DA055B3AA993243985EF5FF4915 41B4375D68A0702815DD57C707FB9DDA86E91AC5B5157458F0E483A1E3B1DCBF 8A48BE8C3D76A8D989DA6E8D3756A5E76A620D4A48B127D7FB79437791ECF831 12E862AC2D630ABBAFB0AC4F9AD1F139DE184F1A45B42EA25B8EED3378B693D5 E0A357E65934C33FF49D022AA1BF43CA30F5EA9BB6B06E2FB869FA6EE78D1BBF FD57F77372B31BD6C650E975D79228917C8C7EA7F0CFAC2A1061C17DF3A31C99 4E0192594E0B88086AA34F4E7C59812A0169799208229E0489599A34451BA51A 5C3018DF422104597675142A91B5D85850D9BAD16193A88783E757D4FAA8A4FC 598E6BC22FE6FDA7CA174DD9B7C2DFB878DB18D9E1682D2AA261CECFE9D3F48B 47019C38E6F809EB5530F9867ADA2E6EB4054E1E0F5F8C48AE9C0BA8C9E7CABB 66A2E0690D69E9189DD3DAB29425924D6B5D219805EF3CAF2AE589BAD148F85F A1C41B7CF5F364F692E269D6FCE9F01CFA4C371108DC3ADFC701C8DE58416B6B 6AECFB3673D24F43B3F06CA3EE62A6E07F39FF8D39F020142832A1A94C163E7B 764BADCB1F08388C7CFABA55EBBA9209555ED42401C64B2F508C2B1D80E65FA9 4FA68326D7E55318565A71FC92D0181C605E541BF9DBFFAF7D5C299E2A18B778 14B3C95844A24D3757AC667FBF35FD64166A36A01EB5642E7674D5B7BBEE82ED 82545547719566A9AD9F67C1B2185A67F4C2AEB852E324D1D8AAEDED0C3159A8 7E4ABAD918A3D9D9618E6B33534046B8B960919049A8D0DCF35FB47C6D9BDE66 F9FD5D07C2B720CA7FAFD12BDF129AE1E6540801A8EDC4D08F6D302C70C46012 3D4492C0F40D0767770ADD82923C4F6A8FDB3521307A2B31323D3C7ABC322DC7 1C900127864EA930208DE660CFD90220251F087201B8C65CBFBDCCD4D0DE2E6F 370647E073B4CC22B6AC821BC35E3944B1C7E13DBCD94607AA5AA5A34311014A 2E3F3EC262D811E70DED8BC27029EC08B5AC1872032EF108A5D5BD9FE7BA71E1 66B6EDFDAC4637595CBE6855B1DD37761E9B44D09AAFA060E6139EB13DD9328F 366843C73814D170A48ADE0DCEBA800BFDFB30650A3F90BE3AD6B435F4ECD330 3CD63F39E8584252684D8F458DF1F352F9891753DD2783E37AAC94FD79D9080A C4AD14CCD09C46AD9D94E2AA31D0D2713110EAF88F9FF2B25F8EA786F22ED0C3 768E0062938044BCE44F6CE9479C6263651649FB40C0A3F28C2F76BD7DB3AC86 FCFFA1663D00F5C5FE8AD5E1083C1860346BB4C6B7E05E4F1F3318D42054C93F 90E171E54108EEFE7AD182F068D4D1DA4F4B7BAD4FAD4525683FC4002C9BB38F 789035E5B8EDAEC137FB6155240C929F7585767C532EE15A9D2645A80D38BC08 4AAB5D329DEB802CBF897ABD31E391C41FAC6A734D48F6D0FFFDDCAFE5E6FAAE D050EE487D8A88AAF7608BABFDAFA7C06F94877F4A8C4706C2125CF72756A180 4D0CB724CA21207C5035D499557D50BB6FCD880C909C623D1FDE8EDA2C41621B 41051FF1DBF57B1E679546708AF90E2571D4D6FF5443C10F6B6DCEEBD3B9AA99 E233F5868B3BBEC9108C73C74B7F5B86B7788DED893626BAC38A8C86787E3979 88C6F01DBBAA9D6FB5FCCFBE2D2F127D74F54E35D25923A3982C01A821D33A6F E349D91A4C7DAA65DDEB628A7180057A13B6CF8BDB3512861A8039D2C6EF4395 0A7B23ACB0C8DA7C 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMR9 %!PS-AdobeFont-1.1: CMR9 1.0 %%CreationDate: 1991 Aug 20 16:39:59 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMR9 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-39 -250 1036 750}readonly def /UniqueID 5000792 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835 3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203 046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2 A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D 731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B 09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1 49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B 5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B 54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F 11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AC46268691C741B2D4 48A840F1128D9B2F9CF07D0709FE796B23A836417BF7B5B12D67F74453C82F5F 25F7B30701D6F6D4F4DC623C0C27D6A6FBECC7312A3CD10932FC7C10851C3C52 24B75DEA8A648B7F34F5711DB0E843C914E25663C510185BC37BDB7593C1C259 21D8DDAD33982C336BF272BAB2F48E68217403FE9F54877B243614A87E64784D 2796EE4179FBF96123D1BEE3EF89D682B427BA4F12A1318A57F18BE5DD903815 26191A95DA5F3440BF469839223D0E19C30F73EEA9D56AF54CBBFDD1E556944A AECCF66AE1ACD40DFD1A2E66FC8FC3A8D3B0972D27F18034D1359392A30D173E 75C2E32A7018292BFE6419A454E1BB0D781E5F98C9650B7C35C016C395E2C75C 784B4F4A7196B23FB44E1544111D290B0EED4DCCF4E828D0BB60D9C65ED3C4C9 0BB6ABF266444FD5C112F9EDE515BF814DDD00C501D43856F2658AD12E3D93C1 D363C831EAC00E9555D4433B9D3626B3D22FE96A86B05A91DF94F494F2C9B3F2 D4EC15C7297CB386057B4272577E00B08E7E983CB784AAB061C1E519AD9172C0 B442C157180349970780FEFBF23346953ABC1BBAA37226D42F276BEBEC04CE6D 36853272FD202DCA18338C5252F8D26EDDD71412F8DADD01FD1C6D90BDA4F806 83C7D88932A33C56EB7B2D601DFC407794324D3E50F55A8C38A7F7D1F70EBCB9 75A2E6539254EA0D158CF60861013FC491A694AA02818E84057810C20B26785C E635C04D8F0F30695E3F94C9B5E09E8BF01F5278C84D01DE9E982BFFCB1FF2A7 CF42A5B6FAD51B99832AE803E2367431F7612BAAC4A4CC33A16A7BE416993795 40F025EC8B162D0B648E5BE9B84BEC1597D8A654BBAB18553ECEB0180DF238CD 720DC1C308190EECACE24C9CD0FE6ADA6ABC2332C4E8BCCC57CE0B1CA9B7270A 80BF126D857CD4561BEF6DC9532704B687FCAE47FBA136A13AE1835DC14016AE B9B8A06889A3CCC3E5B65D9AAD712ECC3DE9355278FB7D28362470FD1EFEF784 2D67AF2CC67639C21C09A49DF25D6C4BFE7BE8BCA82D744D579EE056D4125733 8B4AC4F83E4D6EB8765AD0609902420AE915BD9F873001F6882CC8A262FA894B 9E387C6DC4D9FA780F0E6C992658C32469E29531A853089D61DA41403A6FD5CC 936567C604AD1676AA4A7664EBE25082C5F4A959B82CC53D86D8085705B87665 EED218BB5091A705D71D312E854A43A470BA9100210C70FADDADAA83A98BE0B2 D23A62E59781DF02DA43A95B4D7FFA42BB555F91491E1EDD7AA45E183537E160 C9A7498EDC1C626EA1A13483EEE0BF91AB902E415D90D73BA65C4BB19CB6B2A5 0D8212BA7CE7B710BD37036FAA74BFCCBE3E4AB27EFC1132D2C82C5B11B7D54C A951B88130BC053D65C314EAD8B4FEFDE28AC2BF724C8F3D8B5E1A637574139E 177F082B3C88C4A2F90788E82B51169FA750E2E2523E5F9631FAF902918101FA EE2C315F38D921C663A53952D794A04552A8241A8DB229E457DCEA8471EB60F1 4F78C4295C6A07EE9084759772CA6B53BBADC956EB1C1A166C0D6F717D124E30 013EBE1BBE9241508F75BA082B6E0F4667FD8CC38F9D2EC6FAE99852DE2B68D8 503E16A05154D3760B318769015C0C0C7FE390FF1B32DEAD621FE254BDB6D9D2 C0A723FD4A971DA6297C21F5FDD2B1EA17863DAE647567FAA61D3F3978AC409E 8F61C27193E298BE1EF75AC6A05DD205B256B9E606A998299B06380AC206A018 A4EFDE1DFF7FC7C2A1116C260FC2765AA9614F99615128747C69F098BE95AF22 37D4C4A2552EE3FA5546A583B0FD6CE1DC43630F449FF84F5DCB39534B41562B B22B78106245CFFF0216FD6E4084DCC3DCF2E19A9E78C55951F2FB7E33FEB1F6 F6F63D97D1D92C7255A9AA648345CE117B2DA863152EE6B6FA546195159D326F CFBB80B82C7CD286FB48E93F4DFB423AD5579AA40CEC39064DAC307630EE3364 7776A319E20ED74106861688F86495AF6C3C662BC6721D45F8A268D567F6E8AA 4C3304964B3EFDD00114651DB6644496DC36A30ADF2359C6188EDB437E5FF14A E77CD4A5FC2B48B0D62BD0B7146B363DBC9BA2B6F36AEBF131AC464AB02B2FD8 3D8D1B93B93864806BD01D0E0E973D610E1BD9894946A0FE7073073633641E2D 4DD492F48AB5E1AE1DD26834FF8F46BA15565E6592CF336F7239E96B57A972DE 560EB5803CB7641F99765C93DEF8A31407F810B5CE96238CE7978A4B369E94D1 B61394E28569835040F46669EBE0CD3E2057B115B8AB1A6D8E3F3D3195396E59 87B00E050E67B46DB55B14CEC85C04FA918A5548F1313F099ECEBBE991207FBC 4EFEE3DBF7C6A9CBF0294EB24E06C18FB3C3452BA4D0160F8DD761C4E80974D1 F8872337B3D3F7DDD0AAAB3E0B273513A49AB0BA4A25FEDF4F34BA3BE4AAAC31 DDD549F97BB1C9E0A8DE02233AF7263968014B6FF13C28935D1C4EA8A8766530 25ED1761536F82365E27E53A6152381D126E5BD651A83BC762B0075B09A88C5B CAAC6E4754B5A00C59A894E72C041628A29C7443E9D43590AC061FB2F07AF542 B918356A3B11E962523A57EC1B9536273E6DC7B5BA0D0ACBAAEA9CDDDE0345EF E24BF61EC1F881503E2BC5F695577C69285C94A43B0931903CA09EB70593787C 365226D5F49487A212E78C4273EE33FD46C608E90A2322D6A3330885DECD790A DEC77A463D99349FAB0F11F1CE6A422CBF5D8F1A7FFEC581C94DB9A03A3D70FF D51EE89D518CD701830B8295BCD45616B61E6F92FE4ACA33082A114967201268 D49E82634E0B4424BA87AF5E6AFC2E05CCD2C3B09CC6C85F367DEC9F9624C890 D1F8FC2BC7ACF8809E80CBF5D606CF7A02859FA3BCCEA663BE94F1990562BC43 2A6ED8DAF2B756A6C645A8D375187CCE3F69DFD2EEF7FC718AA75A38E5F79015 9503C86A84E728CA1B586C6D6241023F6660002662F8969845FAC09D26A5B2D5 D8CF1CF393815096EA15ED1A7F3BFBEA395009A1AB69361CBAF225AA0B899946 0AAB8B5F48F6043B0E5EE17CB5AA20CAA0E77A82F2FC89D98FF9B62D0DD10D45 CDBEDF1328DCF5D71840FBE14F6EC7BC16F27DDA912E660BBBDF29A7A6711FBE 860CA88FEC1DBF80E7486F9921F4152F1BA7C7156562908B9E99F4BDC2CA7C6C A85BC7D65D4D4FD2271BAD2F3C3F73E3EF6EC82ED1C4233D85C43B6B8E1C7ADF BDC669A7D197B4945E5545B19F40F5AF19E2D6766B4D42FEE0F1C81BF7FDDEA6 11771C1041B8C0ABBA4033E67176B054D080248DCBB82A60DFD036E8A36C090C 0859BA9899034CE3FBAF0511673F15D484A76D5B072DBA34CF0F61A57EFA3F97 46C8ABC253B7530A083A099204D9D57A3432A55E261DF9864714647886207C27 8F85D0D8CBE2DC08597E623FADFC1DB1CAB77DD968C7C59F68AE538348F10C80 92D2E63DFD92C22359DF908A873A3BA187262444C1CDB2B996AC15E05E53ADC7 290218BF0E9BDC5EFA83A8C9C9B3C40C13242722D420445D98773B1DD0D6CE84 19F7C3629585349553B160D3BDD0AD13A376E706FAB3032C1947C5625EEFF3E4 F9A3E845B6137ABD44384592283938E6669AAA25BE3E18A48100A64CB16E6C6B A11FBD05B51DE972175F727D46D7824E2174E4C0936914B5BCAD7A3F6C0636E8 B8532156671D8C7A5E7B2C06F9A17DCAE5AEF445FA8F9B2E944CCA9266461B97 A04C9B365F61312F6C3F2E2A9E65C8598DE8F87A88C0C1D79F81997E54F372FB 5A0E928C682CC10376260DA80BEDAA86A9A1001CD0E22AB798291BC082DC2462 DA19396F72626097FF1048B47288AAEF59FBB84F41731F47C68A9CBD4CCEE498 F50A4A46F693C7F174B2BBFF07895F976C9FDA7700303B6875939AF14EB828C4 BC24598C967CE7859D5B3746111E698E34DB52F322DF0BD08C950FE856A1E105 420A3473439093F54A51109F6A93A2E9BF64A871D699D63DA88020E4AD9AEA3B EB2A72BC7E99115052C7AA64403702F447430C8624207591BA43C9137973BE80 9CE00B1E5E790C2ED1BF801E9E5A57AF796A9AD8D51321DC81599F22C600E02F A6B82C6839F91B98A4016B5A2864C078138A7CDE276678336B1D156CDFCEA6B8 0A65D43801D2CDC939580696BAB372F68566CC6A7C2ECF3E7DA99B02D3408470 95C8768F44CC65097CA9F2E7F840DD1451CC8D4F940EDCEDDA55DF229BD68740 F315DBBE70C1B8526F2A556F4157E3BBD2C52B4AD14FC308C261CF8BF195B138 C2CE7A31984097BB5124538E89918456A7C6E37406991AEE78A794E81E54E78F BC3BF12092E56D0FCE958C633E3E0EFC4A560FD6CA7A413F4C850D40C94EB19B 5D5B062BF07C1985FED4E50D46659327834E3120D0420789456B2BC74A996AFC CDD6C77BBCB0AC09C515D0FEBE9A87CD8B4933D44E2566862E12927A6E7FA53F F38E22E70B7D17DCF0A2DC49BEAF93EA27B0DEE6A90C7C920D0F4822EE155EC9 A1EE0DA6B4D8794318F5EBB39A4D4CCADB5514BABA796BC7A0A519BF448502D5 02C1CFAD6EB82BC147E7BF2D114E0B00B35BDCD36370B51AE0E55D83DE9D2A69 BF34923D23FD251487BA90AD9CEDC58518004E7BD607CFDEA037E90318F954C1 4DDED5EE17823DB4F696AD4CF2FA332E7FCC9318AC93F02F7D69CE0CA07BCD2A 159A47E79969F72E8859945B1204DB210C2870B45A731425B6B7B7F90E9ABF6B FBE6D28CB04AA305EB9830D1A47DBF54948C4E9CC84C7B9B63E6475B5BDB9124 5DCC2D9002D023A813AE83909E5482F99EB5EEB2435800C35FA72FA2EBE32C28 F538F8BA692F2A5F3B53BBBC9AADC12D989FFFA79A825ECCE2030A3219F09B50 E0AC1560C7EDA2DCFB827C13084BAB7F9124D6E974B9B928B3963A2AB3F0F785 3C8B57BDCC2E497DE1FC3914EA8F7BD3F952DD26EFCBB2E812421649A2CF1E12 B23DE2D88D0E07F0FF21E7390BB825251BA3F375F47175F757B9A64F5F49BB57 A81259FD5418A86826261DA0FD302133740649C98E2C8D6A9E82F11AEEDC8CC9 3E3E574492A4951D304FF274C09C2D28A6ECCD47C8EAE151692EADC0ECAD8D93 ACCE8A3E22F921444E7D71803B75D95889EB3A0F0F3E4DB3FDD84F31D064E5A7 9D2BEB635BFB0EA88E16B42063470533E9999A5A67B73F358DCF1EF42A1572A2 21D9614AA459DCB405A12B8E154E4EDFFEC74EE2CCB9E319C40867A5A020FFFB 5F14269F0B84D25BA850B1A9F54600307B1D53C193200EFDABE4B9DD45CC4529 16707217C57986347517B605BBEACB1DBFA4F2CFCBBE20CE10065AA21A97264C 2001FFAD8409D1BF6865E5DEE4E892353CAD29712ABC126F0D36EE291A24F53C F6F48FF557471456042A5AE501828F193F2F2DA902F844D0533388EE2F63CD69 F2E4922E32FF90DB45F27E4C2E5D2E832A44E58DD0C2C2A1900FF9517C21F11D 3F0723DCFB8F041374FC17D62D32DCB449D7CC769E36CB5CF88EF9557F957E08 179810AFF04C4C259413B996B9F58B89CFB8CCBD8AB8955658408AC622E1A526 1F623BD146EBE99365D58C65BC6954264373F0E6032481B48CF3FF19525A1331 60D4FDFF1F6EB9233C96F62520D48294AD34D38BAD0F6DB82BDAD0110166F760 BD8EA2FBE401BA00D5A860E4698B0EABD1C685F17AE7DE1D2F5E44AC6D450CE0 CC7CA94092BC592C28AB17A43700D26D5ABCE00EE2A57DB5105CF4DEF3AED95E 40505CBB15BF87610A8C840CCC7FE7E241D4B802C8DC625640F4471A4880F99E B9CA0BE996297E4C70E7BAC8CDC8C5E8B7961A7CEDB404972B55ED33099C3578 3605BF51AF862E8261A53E56BBAA860CDD680CA595F0811856921D8FB1E9BBBE 1B5ABE4CEAD0CE31FBA8172495A5E62EB7191220F017A62C65C90EA2B04BD55D 0F10B4D538EBBCB9135D610625F4ACA9DA06DA9A7568667A0EFC5B81462DAD3D 953E59C69698A21A0465DD0DA5FB56B6953B736816763E8D2C60013C7B335AF0 CC2E0474356CDDC3503F71030972BDF42BD5E75036C98B9E7A362F53154E9791 7880BE9FEB743A5DC074EE6ABC20762F9ACC1C7E7CC21684F21B7917599D830E 6910595CAA5E1E654F7B35E20E4E93EEFBAB758F3AF2FAE451664EC24A7BA724 6C1D42C7B26ED6630529067A91B066710526762B0540E2A72BE2DFF0E5FD0BAA 31ADC5E261EB155618C56C1FC2F97A654A23E03E722C428067ECA346B09C9581 42B6AF513F3AF45AAA2B5AA7C6CB48BFF0DD484E3DCB371636D1DD281E2F0905 9ABCB00669208D554A66F4BB6C4F47A22A3984886BC5CA8E88298309D64CEB15 8BBD6E9D88F9500D1DD88F9D339CF1377DC515EE8E6A1047EC146C70282CFE33 FF179F3BA47A76F69270F0020D94D60CEB08150FF636E06A28F8B4B907335166 F73638DB2FD3E2BD007AF7E8637D769B3A35B52DF90116FABD3EE7AD5370CBAC 8993DCDEACE94480C0AEB27E0A2FFBD215FA5282DE131D640503EBBDAC8C7C60 0A6A44C49DB45777884A4A98ACEB0722A27AE03CF4C0508F9B17DAC24B51B926 67B9D073B27A3F39364B7F003124105F69A4BC8A10D643BB86914A001306AFBE 8C0C71AB70C252BE87E4688D4E38A5E9C1691AA24F9734366A0FCE589BB3574D CC58D112D5C9E6103D54A759FD7BE790C73B8EDA02595FD4660ECC5EDF4B1931 C765F78667CF601B01852B886472AF29F2E25FE354784584F697E046450715E1 203B146D089EDB100A2A7F6A40608D77EEACFD2FAAC6A23695D34CEF3E6D1376 E73A59C97F729CE066ED1BA21310D4014F9B466EAA5FB9A16D73BEDA7CFC24F1 523E3AE77CEBE58B0EBEBB29C429D4C8F762DC43324584C75C9A914FC9C1CAB8 AA331CCD28C201E10CF9E721BBD3E1C9A96944261C20EB8481414E414862BB0E 97B4903234534CBBFDB4ADCFAB934600D1BC29EB083F6B595F6EBA0DE23658AD 2269A05170BDB1ECF591DD62EC6EAE1C311459B4814B78641285E51420DC09AB E93EB036FB781A9E4C3BA60B9505C382E0BD790DFE37219E4E06B6D2F346A490 98D2DF85F74E851B8B571D75A5A6E72E937A867B4A1C819C0A16498E195E43C0 A4A4EE44BC2BF605127C7C7AD6C04C857CAE0FF7DB617F87956E33DA26F619E4 89E290AEEADE0D617E7A2DB47F57371B3FE85281D7D9F289BE0A2A1E60CBAF0D 058C223EBA094499D13E3092BFC4411E228BAAF5DEAB922AEC22C44BB596A6C3 5437180946DB583CC711D64D4ECAEDF2B81BABE234E075FBD84EF61CB1587214 D98712C2C2B6830C392BE2636C2A5102F9EF8684986BDF884E4CDC8E72A70CE3 FCE6F26DAA9CFA63B5A18A6BC45DEB2012629E7472E86E8E2A4504612B0E9096 DA4D7E382AA4244B4EB4751963C75396F7E5EB7905190C4A6FD93A64CA17A99A FD23DAF2C70E9AF60859931B85A663A9EDB276E369CC73D38446DC6E57B67A66 D6951BE627CE6B65DA8B682003E004F5164A0D13538E9DC29FBAF400D44DA50A 3D00CA8A016353ED484350CB176480E8039D1F90098826BDB27655D848CE8DD9 2027F59FDAC135C77AE6FA03B4C18E1D598820B7D2D2D2BE9D75E65444BC527F 2122837F496426AF27517F307772B19650F2122F61964D999B9F4F037CFB4104 596D497BF8946D9E574E121DE61EBBB6B66A4BAD978D5EEB8F17D46C23928879 7C0C08C331E8F7B940758ADB2A23851E533A2597A0ABF8D431A3D6EBD7C6B0B2 A8585754B9DD3EA76AC2AF817EE343CCC666DE6A77CD796F8A8C9DF8D50B0FB1 6A52B7A2B835CDCDBF885C505996697D56CA6D70C91D0DD2FEE809F0DEF01C03 DB08FA2CB17E175CF9FEBB1238975A3593C1EE3432196A38E154B2F57F6B13C9 72AEA1B6B4BEE40D70EEEE21FD7EEFBCCC8056C8F83E3E82E859D26E44390292 EACF5715D2F3C5C03EC130BDF8658CC5E6C6B153AEAF42866CD6E8345013609F 557419D2473CF3E24F24F97E88ECD67CCE7E871F8977B619AF8516C34A607C96 8D4835FF888F01786A721F920E88F0886410AD5048882BD90D0107118E80A37F 68311FEBAEA01A2FF10982010DAFA043EF7A81CCC4C8590B705FB6B7EDBEE479 0663D7E0FD0B8D49593A3E66AD67F10F38D16E533A64FE004E51A8B9095236D0 BA265FCFFDA9DB658CE7D6395D327AA7EBE09C50D7FF3DA0FBB2EAFBBC56A973 CD94DBDB411A35CA828DD9C736A102917A1147A7B17D87DBC35D7ABC1951F0D2 603D25307EF293E326AC128A4430AF86BB93C873BAD1FDDB70E750558DB6F410 5D56DA2C57EB3449AFEEEE2CF8B15706E737B196F46E819F23C0FBA72AE58489 CFAE796CE3BA4D9B30617C42646883FA5D956FFA224BEF6328CF66E5B32EBE69 65C793388626F67B4E9E388B0B7E99A7EBD9E46F445CCBED150706BDA78AEFA2 327B9DC79EA9D5F19274879E0EB8DF7AC345F7BD944A02858F7D304A5325B8CA 302FC7323EF43131CF89C4E8FDB6B449AEFD1C119F820BA6AD22E17A8283390B 19730ABD4C45E591F007CC5C4FDEE3AA30B8F17E062B77AC55504EC9337F0E3B 45AF529F197709EB6A14C1AD51B2A232D669E633915F86053252F4CE1F1DBE14 DC5FC82A748EE4DD2FE9A63C1E6D90F88FDA0EA143B84CFB6C371F90B4D1F463 667B7E6A94C0317E3D9E58861B71CF6300172C7A10336398A70271509A6E3813 391E74F47B28F8950AEF54B56029B06629B089E34487E4E75AEF6DAA09DB009A 67AA0D520A8ABCE0D121858125175E34052E4B5793E62E4D985F149C0C6D394D 64612016FF917E1D42C551EA45079C6D42F735E40E977DE6FC1CD944B6C7C2D9 0A0C215BA050767E03FCDA75E3715B08F7E75ECA01A0137DEDA3C2FFB87A93BC 1084DFC3219F831D73718B8525F61F43E8D075228D8D2087503D310870DAB9E9 D12424809B86B208DCBE6041A28590DE99AC0DB3B68EA1A6F74F902BCCA06F57 2EF795F4563ACBE7BD594440AA8495FA9843017C2AB4213E08543312D16FA6E1 2446F69E333B45CD631EC3B151A9D2C8383E83AF7A2F5DCEA783EFE549868B6D 307965F57722A61C4D10E904924BA7959D3E5D131E93D03C8AD5A87830AC8F27 4E6DC2AD06ABE487DE1F1766094E4B08BBDF0FBC7EA882F836CB414FBD8255FF BC25A2621F944BA3888F6FFBD2D44D75867B2291C66C304E130AD5919CDEA3EB 5801B41EDE3824052F8756897C120A4090BC246D57358F5F02CE6220E284944C 52D7CDFFF62F27B3C21C9A41FDCC24A59C6AAD75DFF8BB4FFE14F2A3384070E5 5F7D7EB22C5DE0355F9C476AFE513E6B1C8C9F792771B26260615EDFD37CD2CA B628614A001268408B4811C41F5DC7DD1E2F7D9E1A2866B6DFEC4C7EFA4A8F98 A80CEB951F854F2CC20FBD21A4B9CD7AE12924B29C1DE6CC6A5EF9FA452B1DBC 9250B97B96BE4085868054944CC02CDD110BEC47A0740E7B6A79882921C7A2C8 05B5F0EC0908DCE8D6B824A35B1D16388FAC017F7EBA7F5D0FD2606227ABF4FF C8E359BA483C8683B29BACB1521DF748C1D893CE3B88798FE52D7B98F49FD93B 611D32FDF7B7A8368FC2ADD0D0958DADE45B1701AB19A68DF4E7F8F8C6CB07D0 5B1E1318824C0E7CB6E14D9F08CCB9E05C1F679EC175F2A8E71BBD18E8292B3F 90755214C84CEA04943695D5F0AFB5ADB4B0517C242FFFCE94402F4FAAEA2BF5 03DFE6DAE9D0D04C52692C04C58727B3776EEBE0B803D98C29841926F5B84EA9 BD1BAD1F26CF620F4B01B831C2A5DD8B43F493C76D023D6E0608D61E5071A5A4 1CD086224CA0B1AB925CDC385AD3A677364A2E535AD0C95C2DD499A77ED96EE3 8541570DDB768A4DFF199FF4C07CFAD163B8768476E8A8A7ACC1333C264CE5DC 099B0F2441FD4CADFEEEA4F1AF2AFAF5C291B69AC858AEEF40A68B5FD5A9F4C1 5CC8E2F8592E9B8729867EB799FCA546F78B4A4977F92A5FDEA21A710B2A566C 2320AB09480CF0C7E0BF006D1F38D2F1AC33C696BF3D2B96A2CCD689B9F0D355 3E3FF7DA613FEC6429A77AB46BB25BE1A4B373DB1EB31EF9F6FA42531E007CEA E58438F1DCC63A31126037C1C8FD4B23A6027147E9DE6B7F54A79DAB9E840545 E3CC956A76BD0F67FE4663ED074D05519BB0A72E06557317FA3C65D6BE75C65B 7A9ACAEA4F8B33BE71D2BB724707E4CDEE3B84833130260EF92D0FE73A5462E4 7209C4C6D645BA575B01FED3E66D94F2E75463EAA2EE206FFC3441F04FCBE74E CC3CFEC5D8F030201A1056070E24793267A7DF1A61B82EED54E3FBC6C9B4F97B 8325ECAAB95493BBAD807364A20C8EF380EE8FB3F5B24FC36DB7036B1B489C3D 5D9247DCA205D798D0C0FABB9FEA9F1F5FACC9375BECA0D4CCF1D1AC9630B461 61668E09DBFCF7E7C434B3EE047C17939405B0C284E7C20BA55BD73BB8F834BE 734C2515335C1315B3C6977D22129DFAFE0B7563F43727605D6043051ED60A52 62A472EF2C87A14CFA5DBDDB7BAC791DD4678EE997A9B9EA4372B99C7D874B29 08A8393F25CCD25A6EE7746C85846BE8C667A3E15A5805F7731158CB89DD78C6 0DBE8565C9C914069D184FE9EF5E6329A73A1FED09BB7BD6B439D37AE162D15F 632193683D373804422246E25049BC7DBD2DF4B53D04A743EA08CE8A306696DF 4476545C991C4118C64965F972A5F26D07D288FDF0FB4F34D01D43EDB8013468 EECBDC9BAE2BC386500C705BB3C0C556919577D2D5E0DC0AC523FF7ACB19EE40 CCB92DA95C8DBCD5EE26F5106F3F65E53DE9F439FAAB1E673C23A032A5916BD1 E59223123F5970209BFA70FC98B0884D91317324A8A8F6C56934D1970E533620 93C2CC1A56755694E5EBFDB2339D156A2EAEB08370ED153BA354D0D0BE076867 5FD4268D17DB6333A71A12C127FDD0CAFE1CBB0FE91D1AF71BA33E491E70EDE6 ABDEE139262342973BF46A09BAF7FA3E76A70D409C41B4C259AE26771840F9D2 92ADA01DE5A9791FC2C88B47BB8D7B1407292CC3AE55ACB95DCD01894F106D44 2A9DD261CF5C03E09A63B6703C20520CE47B300AEB9D35421763B4CC37966408 3692584488239EF4DDC19A2EE997E094934F43EEC20A8A61F0B1C363778ADEE5 9734FD5F09CF4C0AAAECCC9E1BC8E3BB32E18B3D89EAA312BFC092DA31A582BD 34AFD9D87405BA2F6F6951EC162662DCDBD3955E18A490B1F6FC361E68DDDF44 F010460C3C6A0CFA8D7302166B40F149FA6E97E0E534A08B11F66D408C957810 7EC144257C5817FBA44BF99806AD273D8F2195BC2FEDD889187459D654FCE495 C257F11068BF4C562A8BC95BB3ED5F18DDA8FAEFD554971D575119867CA79180 E0680FC8A3DC71B64F13C8B98497BA464E85E62F2A956105E985273ED10EE1DD 8D9EA8BB03076A8C18483BE94ACFFFB5B43CCBE7E7343A9ECF451061734BC50B 7896664667A87B8D1145B2D3F85E3200788860BE8CCF0734039BD4A01AAD91D4 A47F37DDB4B13036597DA7EF3ED087D622FA79FE9D8C7817D7FC575ABF06AE86 0C8BCC655AFD5D57AA8D8B14DAA636B503EFCA53DB6948C9457FE3ED331A414B 47379DA593605C574076EB9C786ABCE93BE6058A2CD4646EAE0AF993DDC4C5E2 829F4000801CB703DF55467A3D6E3475CDE99CFB6973370BE3361DC7C3744CAE 2686B9823491F99107BC8244B198D18FF156FD86E2716675E370C8C81CAADFD3 A79FC9CF2FF86B71F4982A50F6FB144CA46DB5A57CECF99BE14C55D6E4EB10E0 C1BCC891AC0DE620A3261CED41F17A6AA434837DE5B4BB35B138AB125DF57FD8 22E9A4A70238EA28478CB10801D503B93E1906ADCC39CE8EA226AF32C2BCC7A0 4C7E4BA96712954F4E810B221A67BBB703206AEB34AD4EDC9E43AE2CBAB0EF94 A5BDCB4FD5C9B32EDA4D36BC488F80BF0139CF30CD243AD257968C2779524B7A C2277C9CD7DB56D0EF7A995D717B1E1FF391984B142368E8B66FAFB90D5FEA85 800DFED2468DA0E9D5EB6FAE23C30F9108EAB577ED10C37AE023E8ED21218AD9 D8BF2FD48DB7FB066A5FA96CEFC5CAB33BE6DF19A353759CB339C8AD8C3DC326 D417AAE427468464967451403ED3E7757B2F7DAFB9011E9C0BFCE1E0FE02279C A26190A98A9255597BEDF1F14CF2B1C4137281B2D5898467817D090D4E08F179 87E3DCFA63F659F65312F331F5772AD8C5C09E20C75B6028E1D9FAFC164C11A0 E2EA1576151EF2D5BD11832EA4A9D9CD02821F6621BAB59EC0206271FA2F13F0 0EFF3889DC56AE750CFD7A0C21BD8794BA1AF7F924FE1CDC163A1F83D36E4C62 262C942D34AFC9B1EC6FDF61FC5CC0700C4CC899FF2C56F80D663371357DE11C D45BF7DAF72829865C770AF3209A2BF81E9565CA321B4EF00D8AB7E77F8E729C E8090B5ED2268372E010244DD6CA8F262B7363745129564BB7A4CC8CE12FF3B0 5B1EA39B4040921407A883D38364DD4E665E5FE36F574C1E2FB8345FD2EA88F9 DC3B2CF8454F825B842DDFA87D93F7A5547FE723F76EDC288E440C53B07A5A26 D34C38A80F482890CC4DDF1DDBDAC6598C9C68A199A96C4325CBD012A7973D57 56363A3037A55C8A84ECB0CDC132E4CFD515A2A5FB7DB362AEA9CA8BC63A25BA 0D1918D9A272819B9A4B07C5AA1388C3F91741D120F6681CF50850262960001E F848127C9976D26AEC4DBA8218E38ED62B4CE2CF8D3D6C6949C8748A82CFAC6D A4678822B6D20E7A6D4873A341695DC3B3FB3082CCD0C4F24CDFEBDDDDE59233 F75B06C575D7E707C09848D4AC3B8E91D7954BCCEEE5515CC48904F051702FA0 91F89D58A44982F7293A31A1C944E634DD3AC58424A2D723480291F2C4FE8639 0976F06EA5F9E8D58E4933A3FBD00A317B477B86784814A96145F552E778B5BB F262FF28F9B885F6E742BA66D4591F8F4808A481C5147550B857FF5147A03064 39BF4F74D9F990210A54B5927BDA9E3610872231AEBD74C8C3E87484A7123F8E 0D1DEDEAC56E1E34A61F764CECE1EEB430D93F0CCF48185827CCEEB01907AE8A 5765D9907AD9CFF8E1F1F46103FCE68AF1354C4C5340842659C41FB33FAF20F1 9BE777FC0DAF40EE47B27B3B8A8AC0186B5A28D8AD38E0CCB90C94B118ECB52A D885ABEB6010C8BCA6741C799B6BAC9B8EADE434BC727A3944DF73EE5AFC5E22 1C8B4D157584044AF0B312F67683513A94BEA9147CCD137CBA06C44FC27CAAF6 C7D70A57978F944F5AFC54BA3C2C19C98E94BE132B1ED01BDA4A0A44FF6EB10A 2A270CB3F189501D5E0DE25EF0D296257C86C8B023E4ACCC632605D41E1B0BA2 FEDE50068CCFDAEDCDFA30AFE14A58829A5DBE77DBA55178F41F33F0EDDA3F3F 780F41CCD4E4E4F56C91DD05029B9764FE6E0F7FF3594F16934083016B96C600 C415926DD03602B65D025D66642122BC832DD268C636B56381F330F07EF3E29F 2A201F328B522574BB39F43167BB45DC9B0495D96856D71B40CB2944E694E6C8 A2B7C8A6CCE01011451D61641D94BCA486884C011E08642A1BCC18994D564D67 FD23A1443E5F3970D2C27A920DA25C0B58336009687A3BA66208C89C868B175B A8330B4454B66DEC0287CC9B54F2738A7528F237D6F5E2CD87D34BEEE3EDC65F 951DE42C755BE3DA6271532B86336872CA4EFC57D56139B7E4109325736785F9 1A8398161FAAD5FBA76D8F58B98F9126F43FEC377BABCB5DB3AC410D39A4E82B FF9E35E07C417C20D1CC268D5D1386DCC1294071AD9BFCB7A9F5F5188BB1DEF5 E875D9AAF1265349D7DA9EF6A846159F4B5AB13E32CD1F81919491A92849A365 308D14672E1B4525C016BCDD90C2AAAA088480BDA3123807BCE16F06B0A4981C 8C1A4DB3812288FC5FAC6F01B7283BC5080F44E5AFE56165D4DECD6D02B4AC42 3EEE486B9DF76E77C911E7C3413FC3D4F848E1BBA9870B85BBAB1F43F9CD8F4F A46A93CC1F87F28B2EF5DE0B82D4C5CCDF339B1ADCC47404DEF396F44E1D8AB2 B590EC3F2EEE14F78587DBE051130624D854057D73416A2D87C12E4981D76769 0141E7CCE17E79A7DC61C90EC5983083B4A85EF9D8D4B7943BE96002EB9A808F 22656E3D67494E1838B1999F057E9B8DD7828AED6A2A542CC9041EF90A341BC0 5E9764A6AFE103C0C30B97F954ADB41E2232D1407FC28B173CD131551FCEB285 5C7BC6070FCFD0B964CDA1A4A1C2F67EBA747DFD869188C123BB3F8D52856409 74D4C4429E40F0DBC97341ECA1E198D8AAD9FD4FD62947904056DCECB3BED5F3 5CD93DE7FC37C88E2E54EB76831B6B6CFAD696B74FBB6D3BF53F5D068D744B16 C9A224B823F9C13D62051A83563DD378EF22E23DA14C18E39F89CF1DC456A188 E0E352005E4C5656811F0D615CD36D7C3BB69D00AC314C9FA745C6B0F4C31E93 7257C15C079E34874F25F6F9DA58850135141DAF3CEC5C736552C885308A95CF E792B7275394E9E2BFA052AAC614696B234BE865B94E66C1451FED369EFD8FCC 3153D1A06AF74FE73427DB7D20CE74283C3B0DB4A8B922452B8983B143A9416A F12B159B45F068A714393DF75A4C35FD61D63E442C8867C70C0AA35F9F6D9DC4 EDBBD0DB778398EE5E84494A968D4CC0B32D4EB9FB54F02B366EB54D85C1A254 265A043919BB3843B1B8EF063270A2B83C1AB0E3DD97632BFBD6EBCDB778E1BF 056DAF764A1E287F6803F1619B95F2AA389750D5522BF691F5A0F10103B29E9C 97800272215AB91CDFF59E26F7CD7244B1F71253D07EB30F7673A2B9E64B3A7A 43CF03B0760752ABD8D328C9B59CBB035D8D010F96F48EF87E69280F7569C0AC 77CDFD58FD3DB7D15886A78D5F66FBF660724A1064C55ED7A1C6F4385DF9BA9C 1F6E46C4BA506CA010FB9C7AF3D88519EB0530D52322DB8C0BB347C62356F92D 52FCACF5E435884CD19BA3C2732E7EA12700A0202A61C4F4A17C517B94751CA8 78A8B12636B57FBE5348FE6068501A641446F290172EA97533D9D204A0703E74 9398914EB4F6D66FE5C7EB443B9BEBCB12C0F5F2D325E562578ED38714DFDC07 991F04C08DA795D56F5CA91527C22CFE3DBF90026648CBFDF95D2A6A6A6CD2AD F100626F722471227AB35B23F5790A662DDB286D4C4CCE806F77C764425C3A64 AD382D6406AED1766F469352608F35BE86CF2CF230C6CC094B8E453ED2DDB71D 67CA8D8C0C815C7D73F3983551629987759924C3AF2359B0B178E1379839145A 213993C54F4266C709BF17CA4EB60556C3A720C9C3FEBDEBCDCF82288CD34372 EC5E73AE2800A6E21AE4DEEDA7EDF4A3A8A029B2385D4F2DD79637A418AA1B92 29D63FD761D8B119880CA2ECBC1C4E9C59414CEA9388DE63EDC72D26575CA4B6 137E9C808C41AC1BB04BF070AB0239CA8117AB31AAFE41D4D81B343AA6CE40B3 3ED98E064A07E556B9CE048BEA0608F984C65DB2173E492AA25CC84E3A4A69E9 4D39E513DB6ECF5ECF34E9D7387702C23FFC979975FD103E0C908C5993824D59 2DE5F40AC5A44CD053FE9C7AFE25D481B5F0B7A4C4C27C402F62B2737E44AADF 8413408A3689DED00797701B8FE0091141045D570F6E197A49747FB29587BEA9 A4DD53B72C10CBD83A11AC7678EBD9FFB575733577267E9DDF86B47CD8723D52 089D1B7994CDBE17BEBB18A80BFCB38CFC36595306EAD3F4E4C0E7AC8B90D09A 34ED82754468CFA7FA76A69ED1D3DC32A315C9938C4D349377CBBF264334099D 608D4A3118361E80FA3F26F1C5D1774FD756B5D9C93FE747147AF241E2CA1D95 C0BB03926C663F245D6B816DBD3993C30805A78A77CD4DFAE02CB8D8F5E32A2B A24EE376EFB4F570B8ECF24A16C1D832FEAF313800877DAED479194833DB92CD F9BA52D90E75A218215968241087FB2DF89C2894F60B60F626A61DC91A893C0D CE5710E1F1CC7A4C893148BA91DB07AD8B2514EB00C0297E60DB16475A70430C 1C4D04B79C199360D9D0CDFB51BC063BFCD7594F12F31C7CD8C71B83023FA5AC 825DF104E7E960EDE54ED371227BB3BD58FC82C49A2713E13EE483A7DA5199D8 F3E33790E5F7630B53C3DFEA6129E8BDD4105B3245295CD6A87B8AD6B5D6EA42 7C5ACE0A34316A5D9E800D4FFD9C20B536E243C094DFE8A63E76C23327EC6BA4 8E642211B597A099DE3502BBB42CE83E4FCF13505E7395CF4FBD9D26FA1D5949 B802ED36C80F4D8B4027D71AF0B5B52DAE7ED544C88AE2B9E08316A21BC9EDFA B25C71EF9ED68FA8FF4D0CEBA02DDD8E20AAD66E5F49EB334509B772934AD7B8 B17CEFD0CCFA97233E86BBEDB40BCED181E4933C0D512E78E9C8C935A67A8AF2 F09E5BB7788A9FB8E8F1984A557B5B5DD86415EFCB13A45E2467F86E00F35173 D20E8F73D5CF865F30D53EC2901D8D88DAD59F0650B8825E06230EB1F6192FF1 8A3AD90DBDB4DE6A45CB532FF945B39BA6B5BE8C172A251DCFEAE1538500EDA8 BB89EAF95D0A3AD0F11C01C4117CE4E770CF07A83CA8E7A78CDA0E51324CE64C 432AE78F2D1253BBE9E3E5C2F39D509F2DDB3723D9412EF96DEDE81BBDE950B6 00CBFE0E179B31287AC9378BF72CE1B659B172CCEA8CC6CAB18BA4C41BAE8259 7C575049A81E63AFD578A3BC38BA6CADF7219A5C84C02BE5BF7D47B3AFC6C2C7 C1B4E859752FD0E66B03815D6B9B629F39D1FDAA6AA329D98048349CC2694BFF 1B1818D351A2905024881293CF9803696EB3378D9A26655102BE1E70B4C96029 A5946F66F26AE07CD2D561AE21DEAD1E735C6E55620EC1E67E30217C58D22202 03D7A7545E07F616684AE898EBEFB2E3487A34FCE657B621BD0016F04A50268C 74BF541D5D2B37B9443E5276FF1E6A7384B7E4CCDCA18C2DD4747E06396C83A6 3DCA739E4AC9C0B7E07BC5607AFEB28B17DA4EE97937C39E54BE2F0F1F1484CB 3181E7FDF0DBE8FA52A329AF49BC0EB7DCED461B9148D9C43856BBA88EA86C0F 18AF1DC6EC9648D7FBFC214B8245A529CB12E2B70A467F378976C55F67DCBF36 12721319ADEB9638915F5ACE15E18DCD4C9FCD7AB33E623444C4AF7012E43DE8 D2430BD48E0367B1B0DD324B02467FB2ACF2CD966FA783769AE76536E283C010 14D007F39D39B27B50FAB8D03E214120ABB1FEBBBF4A31263CF9292FEBFD5EA5 531B32492A316D80091D35D2B84B855FEC8057980BF4CD6E689DFA1AD007AC7D 00E58A39FA064F1A625E914A1E2A892FFB4941ED1007FF6CA78A9B4FDB2B2B09 642FD3FAE5FF6468A24DC03FBB860C0633E308DE64880A6B388D2A8107445B68 093565C19A3C89E218F0C4AE2CA100CD86F02CEB8B59E14F2EC6BC200833B90B C37AE5ADC382A64F2F9EC387B446D3936CD54C1BEBFFBC5AE01699A9B1C4D3FF 6798DF96DAA20FBFCD624D52ABB3CF653758F068A26DD9AD150FCABEC4D7D256 B6A330E247E974A9B7DFECE84E98E54618CC50EAA9E2486DC8E694A2379C2BCD 150AA02B526BD08B7C6B8334ADE27782AED2D541D9E89A08B59DE726515D8DE1 064D0D55281FFD7BB95672E9AA72D46960215521558975BA204C1742C44B68D1 DDBF0598B88DAA9F9A6BB02203D8A5B4FA93ADA2EA943EF947552E1A1FB51228 C0FE7B906BEB472B3FC93711051C6882E3A7B27ACB642C6483BF6DA70956C337 6A2B69EE49CA354C9FB91F6F936E59830D7765D8732246D5274F7B8280E6603A 1BC78E0F7D6601FF87AD646E2618AB968B63E6640A8DD0F7738409FB72D08817 39A99CF0C615A86E4E164EC7D3C1217F2FFEC8893D760A8F44EB2CC62A5A326E 438B8C643407A89D6FDEA99D1EF97BB361A5154AFD16163C422ABE59042FD48A 8B065949FE428ABF06784189FB98BE95AF38C5D937FA70022D20E29A37099DC7 1029427903A15C02689232D8F1A61680DFC7DA7800EBE78465E7759CDF948D2C 5A4F373B6BBBDC6847001EEFCC61B162CB496703003B116000893992A1F7CE11 EFF19061617BAC904A087493DDBA141870E3DB1715592615C48A3F8D5AF86A0A 78896392DB8323E7892C531F222E258BC2709C48B71EFE8DF217A6783B6FB202 B885062E337D6FFE16320EFFFA086D05F9A4D93C2D0CCB6506174FFE21E6766F 3AC908C64BD406CCE3DD583DC5F46D34E0E578F3581645FCD89506B2F2E5B7BE E2CC44BF89695F07A57E2CC3AADF877E72C761FDC3CA8DE3B0AF0C0455D48B8D 6CE77B7F581DD22744960D6B58983E3C77E2C4F17F0EE71547FC985053C6A18E 4A78B3FC20BC466B9316B044044027D126E71AF0067E390B1A615E26859634E3 49EDB0CFD734E70DF7F5036C7F51DAAC7A05BB3DF77AA7FA7DC01215728853AB 518005F3DB96B3A89C7F07535DC78139C3B426162CADFEBE8D0B7D8B248E0CF6 36EAED54416CEFA821D9F064D934BAF07A95606E92731281497A2D744336E097 1B04126C1C448AB83F9A29CCF8B32E65EF0879A0F71F1075C37BD6B76E40D74A C87D284C6F7EDA434A9EEB7B6D76CE6C4B2BAEFA93C3FFE98795356F5F10DFDE 941DEF9F8D0383950E1476B3CEA0B56D9001604601A2106BE2D5AF6BF4092386 4D809FC03B74A7DF3461070977EFC6B1AE97D0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMR7 %!PS-AdobeFont-1.1: CMR7 1.0 %%CreationDate: 1991 Aug 20 16:39:21 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMR7 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-27 -250 1122 750}readonly def /UniqueID 5000790 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C 8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E 01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B 52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F 0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB 7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4EA03B9F08F8 DE0B33CFC11789C704BD5C7E91973E12EE6140D5EA01E9AC5C458605FD9DC8ED 1038FA9147FA415D64EFEC2C1232A5055C11F53D7FB2953A387B7990C40D7388 D792D5E503928B6C1ED09EBA119448FD99C6EEA561F0CBBE92FE7013A0678BCA F013111BCECA962ECA0A8A6A0F8A24F1E64105173B259E3DC42D81F36B623CDC D249833E49287ABF137F97C85B2D40F70C585ACE1FC0FA1F262237C3E0BA0E5A 34D26254A46282FE003D92A42237F9729E39A863E33EAF676CEA4D6FDF53F3B5 C86035C91E28C179BC5FCF7C961708BA4B0055267B3EE256C88AE0638FA7C93A AA9A3C2ED4380B053B2FE5629443189C1509A44C13B936FDC9FAE14A4645C5E2 2AF38538F0859E49BB997A0F6927F153DA31CDD588DE18DBB80FD9B52174043C B08045D6A908398DB1EA5EC05AFC57076F20CB337ADFC9ACE0B2C930AC741D2F A18BDBBCB47E75C59412477F5DA65DE0F8BA928E1269309889C5532053991565 31425FCB8B60EF0224206E316DCD30ABD589353060301BD003518F03ADAF89EB 52D52B4EDAEF9E1DDA987DAEC448C8D797FD55AF8F8C772B68EBB010381CC65D 02177A85487004D5A5AE889F94736A7F36E86579725504F992172A56B144F5D8 B42BF4495024006B5C12E81A58156309C705394A9D42D57E761DCB64106BBC44 56F0CCDED2083650B30A68A566384C216D749230F82A33C558CC353A8222391B 193DD9E4167CABF448B0E08AA8D9D3232827B77BA51172A48953A3623515B3E6 1B4E895910E8E9D561D70046FB27E401F9F57DEDE227FD5FA581164C0C1D39A6 C17AE3CA4DD696CA746444BA6941B422B5AEB3DAFDBFC8F3038B32A3BF1DD1C3 0DE109B7F2AEF21BB303905EF40F7BDB42E4784884E33B3B31220D5753BA8720 9B87562034F3277F89F5444CE8CB5B2726C85CE3B49D6E60DF6E4B4BB0AFA1EF A31E0947DF8C78159E27296BD9C109857F9A29331145BBB2E5C46EF3E491BB6C A6CD85DE9C6D3BAE3370733B9D2AF609D9947B59EE1ECD873257074782D908D6 F8BEF1954D5955779FF85F37FE7B9978489F9D6DF1F4A49C78819CB664ABA334 A885D9E5F8ABE1EFF1A5ECFB1835B4334E0D0F5A62A2B90C03905AE42F4E20AA 25366D9618212C9F055BE6CA6F9FE542DBE1FEBBD762824F548A5AFB4FB3FD76 7F0648C1112953C4C5916A4FFD265B5C39D695B804726A425925837C2C80F84B E67FFC6D714345D842A5EB35A1F110BECBDC95A720C9AE46E0E11B0973B7AFD7 C9C10CC3C21B60043C3014542A93C8A5D11BFE05293D9165C066487FE141F70C B02A286FBBD12DD1CB52F3A59AC46003DB33BFC85E016636E54283BA5CE52544 7A850208FD0628FDF47F43EF5C7609D49822A6AAA476AA75DD5B97F2CC39E2D5 A3AC1912E5097C6F6E0BAC76580BDD8071FCE229ED580BF4852ACB8C2A59BFED A19BF91873B4BDF7C63C8AC8AA0831D5792A38AE1329DB42EBF9C9E43B809D91 6F43F910245F754D855072252D2BC8741B5F689D3391E2190115DD0FD4F06627 00920AFF02BA7A6FA0D0823650ABC335FFD1D600BCDC8CF2524FDA2871817163 0735AA873B43D050637B1FD10D8B87A35D77DCBDC166FB4E5CB0A449C21F8AFB 146C4F819F43B837DC59ECF2E9F54D2F408589BBAF02ECC49FA7BDE8B9FEF882 76A2386458C92DF9E6C6EC22A372280B3CE26B47B5E5E35F938E5D7CA8DA3914 94FACD392C085A7A93867E085F0EAD18E11EDB4A955192648A1A40A26A37F88E 598066C8707F356EA640182927C35656966F83A25B291FBA1DA894AEEE3B40C1 DA53143F8B61EB59846A1D1527187537563C682724BFEAD9D723089B73761E8E 4635BEF5E4A0D64318A5DB70211C02F6A2ED822ED92D35B0CE94B33F8BB57929 E038E26750FB542B7FFBFD315D46604B0C533C4D5CADF95518CE258B0E08A7D6 63B5AD9C63FF553FBD681D1DBDE81F70604F99D94048EA5CE2D113A32B66B9FA 6A1FFD0DCC4DD0E92EC0835C39E2C945BA493035DB90AC6434F932E68216DB42 7506A92D1D80FAC2ADF599591F1D9E9A16E07BAB221144DD28F9EF3709FDADCA 4AF10A11B5E5402A38EB6EEC6E6616047E06D022C531A3BF9A4A1F3F075C503E B7234B27A5DC75B493F5FE82FC662C762D4438F54A11B36163A6D5D3FABD46FC D06217D76FA2D9F0AFD71F572A7AE4CB768C0B2F5FB33BCFB68B68BB268A3BB2 3231A3443D745B70547ECE43E8760656F64CC5475D2DC24293F1F8E1FACD040E C6E63F86CACAEEEFB64E409966A8FD185EE5BF989CA4D7AFC2CCFEEC63EC72B9 A2ED2A07A05B22485C3D8D2A9C328DA1CD2A9503C257D07453C01AB95A074421 5C7E7E6669EE79E41372F2DE00C067E575111A7388D16AF5A2D086186E72E40F 2BB35F3882EF912F1BACF03EA0C7CDB41B62CC343D1FC545C63D8A426F4640F0 F3A4A11C07E400ABD8DF36A4903F0EC61FA078F55FCAB253E9D615E4DB8AECFF 538372CC8CB87DC3C9E98816DEEA89F6C64CB5544A436A7E8C33B11A8C355B51 FA3520F4AB711ADC9C1FA8B89C206AD1DBB8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.1: CMMI10 1.100 %%CreationDate: 1996 Jul 23 07:53:57 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.100) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /CMMI10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-32 -250 1048 750}readonly def /UniqueID 5087385 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E 6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF 8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE 03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 95601766777978D01677B8D19E1B10A078432D2884BB60F3322D7E004C2C2D52 009E048D1D7E40189AB45F187EF9AE397B215665AF42FA5C0C081B5DA8EF7E75 D4934E2F70C6507F0D17AEAFF246A5F1E1B41106AA8A294D197678A0A705EA5A 77F15231AB9F455FA16EA51E36859EB803C7FF1FC2B62087047188E19DF2487D 038C22E0F1A09E0D36DA204F988D16756E0DDD5E01A3947CDD55450A85932ED8 D3BCC5FA1CC5A8A1A7C456B7D7E52F551E28D8920290F485F512DB486BD8B9EB 9D949A2EE65F08AC125ADED1912FF8D8166573F47305304ABDC17552399DBAAA 11B8D53A2F902CB18FE0DD7E1032577AD66AEF248EB576BFDB1D4809D27B2BC0 D63E17A7D6EF925FB554BAE475E5E374D346790DBD25471FC2C9BBC87DD778E3 2F6815B98FAB49DDA5017AE3FBF77007669488E551B5D4018127F14D6FC9E22A A07BECDBB77B15B8B9392FCF23C98CF0B97A45517CCEA8BFC808E65E9DB36FEF 14A7F7DAC4D63B819E896C6192D725693FA8C1A3E6959D7384A42F79769359E9 B40EB602C5DA5EB99577E0C069335C98B2BE15D7F20FFF71C413A29297A85DEE B404627CB1EB908AEA45CC27065F8B9768BED3BC35BC545B60819159F7B6F02D 1F0083BAFA3010B411470F0F8ED0AAFA97ADBEFAF049404A2A48FD9C4CE835E6 1DB7F6F7D2B25006D6AEF64A869FFF2A12FDA156B8F71A9E3CC881648258BAD8 6E4AD3F26EAC8944017FAA2CA0979AF0D254327A33EC5EE75948028889889069 1D8FAAF2513C053BC746F4D87D2E78 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMB10 %!PS-AdobeFont-1.1: CMB10 1.0 %%CreationDate: 1991 Aug 20 16:34:36 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMB10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMB10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-62 -250 1011 750}readonly def /UniqueID 5000761 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82 7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378 77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18 2DB0E39996C010F3024A5A3C69C8485664A4E3AA81348AE21A30280D0E3B6542 A770F048F31907891EAB8B57DC70FF775574D6CD26B8AC9C3E64C3631325BF0A 99AB413BDADAA3B51A3E168B03A856EC7D346A38BBB0A2700A23B2CA91120B9D 2AA5BE5A359C60CD78F055253785CC9701F5D670ABE4967D74838C3B267C6563 C9651AC41D8684AD5E913A5C9C547CA225A74782D1AC62020FC38E29C356950A 00E8F2B0752CDBF81EE4ACD59BDEBBB9523AE4764B995855F3A401EB4B04EE56 B10758196CB661448A3617B83CA88C41756EF131CFCE0C968B94B6C69AEC1E9F BF8B21837BC422D766B5089D81CF35A807394A026FE3160580695B1213968D90 8ECD1611E719A871E15C6085A17906F77B5B2DFA6AE670976758E67F8A4FC362 FC7299D85ECC3C0BBAD4649B9DAB4A2FB248D6481CF0CCF274634D37A5AA4DDC 31F3138AAF10998FD66F3817B77060E71C6D8F17205F9C098D81D952E0FE3831 2264C55D73215176470D8D75E7BE6E44514984B9D20208DB3ADD4767CAC09D41 9C8DAB6EDF4FA1AA2CB285CA28E30972B3BFA4F8600DB9216487655F91CD091A DEAA34823397C3D1CAF14A0F016A4EB2A2238881A285C0A4D2850F1D942637B2 A6BD6CF81D1A3A8B0E9ECE37710AE059A3DD5D5236726BF6EFF89C97B4E1C735 DBCA03EAE44BFB56C90EC7472FA83DD86D63E9FF50ABBFE1FC07FAE9ED061B73 6B15923CAB0A8F3DCB7C607594FAA48BC5D060259663B000B14B012FBB1407D2 626F8CAF1E097ED3B0D6C7D927ACF3383909B4E85803546AD4388E63D83DF79C 0A19BA969C4BA2B75D48DC25B1A381FDBFF22F4A8E3784CD97AC42FCD8761A76 566E98AFA587D47F561B9C3B86E74E32AED503FD5F5438A371C1DF5080D0C987 817D847B284EC50CD6F9A9BCD986D7C26BCAA1B32769C167F4B3E05B69D59375 48CC42E264BF90B8FAE3036EF9A48C07273C0FA9004D3250B4590BC07CFC9307 1F3B40774FE406816912A194B0C148F413BD3DB7093C5868C8EC7E6D905DB797 D869E561E61999996D577D151CB3E099EA6D2E37E2264BB5C6B3B6B055FDC730 4D0AF8B23A0799E88DAAAAE64BFE9C4899C67DD808D8D2A56E8701CD6B06F554 AD64BBCC5F7CA095F41C912A4BED75052479401777E3757532F77B2EE182E6AF 4EF06BA9792D499E06F7D78803B5723EA7760689F974669F42FC76C6E4425CA8 36743A03C75E98A3C2124D285F5289A75E1117CD4D994A88BFFF760DD88024C6 C808E3C53D81A4D63E84A22BFEE9DFE169E1DBEA5F0C4252E83A02AA4E5AB985 81394B2634EF787E31EF6B8BEF02F0FF75273F8B45076105155D7AEC6C92920F 6D8DC3893C2CC97EDE808A844D88E264FFF4EF5A699DC4E098BC2B445AB65DE8 02AC5D1B2ED4F2D906B55F8E28A978E02029A08023ADF32A5BC0B2994F27761C EBCCA0F15DD3A16AE4F848E9256C399080C2C4858AF4553B26B81DD529052C28 9F3FBA089CB4B08DE4D1B28369E43E6EF6E744E95757A730AC5B597829B17749 58C3EB68DAE032C87F68CF1ADF0EA5ECE263D293A8EB8321F792427DE35424BE 92EA1FD5D090506FB3E01EE7008B7E07A3E57C4DA032B974B8242C217B2D5E29 58B6BAE601745B15D36B4874C980D84427C0572A80D702311D7535F1CB329C83 0AB9EC7EC8F6C7BFF1E3D230BC3C365DF3B9B724F3BE03B47600C91A5594CA7C 248F21A922D1B61EB1254B613D0510436484B879C3CC46AA14F7CB1926A6505B 161B94EF07D99582F6AD90FB954D7B1B8B597D6E4A0E89C68C03C50D2D4629A8 6E66B7B1713A1C0AB6CEE87EB91C91C9A897EC29B8AA97C07BAF4A0211FB40AA C0FF4C0865A8125945B0256B351AA8AAF5A64DF611B4975AFEDB20F0285034AB E2A62F34B8EEE2B1CD37EA4FA18C4939D295C74A7070DACC7910409ECB5EF97F 6B3D0C01E2F19D7C9EC9136E2841F821A27E326C95D9A8B67F5643A086FF36FD 0E1A14E4F65959ED1E3B6C2E54730D2CCC522EBD0A27E422CE98B01884178EF4 3A2BAD0A6974FDE15C31C5550F500FE85A17C10E0457A737C84FA1887A2FE452 26BDE0625DFC8B53A3201DD936D6CA0C0808F6F44EB97FE6C6F27602D7029D69 3621D4ECA305BF20A3123F600DB7D08F1D9BCAA395402EE6E3E8DC5FC09B153D B12F7F5B169854C64A807612DDA9A9CBB541B98DFD897293DD9A0B00D79154CE 6EED62170195C668720D0D35500B3B55F11F437FD70BF897F4A3800C3DBAC84A E019BB3DF57B4753F026647DE54B2A9B0E93C3C1B68D5B9BAC63737BD89E1D78 9312038EFE3BF61519C9D6950DFBCF83B05DAD0C690562EEBADCB98EA5DFF264 C9515A70EC050377EC9192DD69E026C5E2279FF6620CC3E428D3DD24F2D5B086 F97797892D8F4CA7516789D5D4B5CDEC77AE17B19F4A96ED6892CB446C2C9CCB 9A383ABE1D0C6C07A78E3E2ED22ADAC67017688AC2CFED46C18FC886A61DDBA8 E97A1163833E1877FC6F106A6F30EC09BD23F8BF44268959A53B98A66AB8BF03 4E5176F258693FF04563086F04801D722372ADA728F8BD374CA21F5F880C0CDD FD5842C336037017402817DDA87D11C3762903C9E8911002543DAE3018FD0AC6 990A9689707D1E4F01F4A6E45E0CF1FD4578C20E6549A1101AA4E90A0426F8F7 8FFADF8D144AB9943553F88E9AE88299C877B0730795D6EF77F5F6FBD92E70C7 1BE913B38ADEA02E6EBD4FD176B6CF8D2DD1CC7021A3354349B3CCCD1026AED9 E0EA30774902CD7461F5A4F4FA29C4099EA9042774CED66C54C56E59B4882DE5 A8EFB010CB6957004743B91AEE5A878FD134D1EFF17D4C27CEB65A1F5025D9BD 1C8932D1DF97F4C35B5493F93A39F7F4839941EF4F13A5DD779DB0C3151AC546 747B9C8F2542E4BEBF4B5E080D0D088F17E1414DF30708F917C01B284689B690 B5A99C152179AE671BD4C89A85FC1331322FBE6718DA767D8FE8A7DF6E997597 F0FD0245030486627CBDC2C19D79B535CE086167D615E73F0AD94B86CB5787E3 E9D3602126ABA587E1417C187096909182F1C23D5B4E5066E1797E36BCFFB734 7939B808D8275933E12D4CF94E7FE6AD23E2B5E46DAFE2267BEE756DA12CCDD9 3BB5DFFE09D0C3084A76E58923BAA056D25E15DD691B797F960B6034850FDFA8 B7872CA6C95DB86CDFFBA583FE17266499BA618973F05850C56C1856BE579D5B C62209703074246F7F7BF856A114195EE47BD98DB40028B89A6ED0002D0E6E35 7C631E3D5D33ED09A882CCCCDFA662C4D89300A31DFAF4F2BC85F329474616E2 8FA3D6C1C2F196804DDB0F3AF685A9EF33E72D3A0CABF4010D2D0F992570D390 CE0687D15DF4AA86448F7B3E483B1B4A9B5D0747AB6F818B78A686733113B829 4FF48EB99D4AF9D72777F56D65B47265348AFAEF172DD30965167BD63A6021F1 D520E931FA90FBD8D1906676156E7B7D17248B9113F96D28B4474A696C1BFD12 38B1A318BC19F2FD97FC1AEA44DB545944F9D2B4A85408E8F287A8952B76A8F8 455A50DBA584A39CB4AE945479D2202086C75048EB7AC1B88AF229D28F56B22E 618DE261C893210F0A37609EC4526CEAB92C6055AE7321F437D59FEC26D187E0 D8F64F4D3D6EFB38A4E429D20182C66AE8B85CFA28673E4C70909A3A516DA3A6 A30B389B39EF3DF1029C4A8FB78CAAE74D76C104AEF5DD98DB20365FD34B2781 A88C3DFAEC3818FE845F4A48A596C78F1680BCF4C7A7D2A174A485F16892DDF7 0E183B556B0412CBCEFEDDA661A08A3528B7954D3FA2AD116E6E8AB4F70E295B A8E91CD603B4186044B61FA3008DA6EBD04E4CD3B658F5C35D4C40313E363D03 2CA01CDE3855DE4140E98043CD86DDCB67214877D69CD10BEB5E47E9B52F2FB1 18D71576961EC2DB4DA137AF5CF162DDACDD0A4ACB506F82A3D085F71F80A5DD 31BC3624B5FA330416EF195F197F4CF1053743F8ADECCEC67FC9A442A2276A4B 2E0B5F09750444446F1EBD019FB3E6D4AECB29A5702373E668CCC029F15D449F BB61EE613BCDFD3049EC013515EAE4E402F7DB200E55A241EAECB8F590A88331 A734DDE67FBFCDE140D24DA413F20CE820640A87CF51BE2FAC02A4FCABCDA5C9 80B0D634E38628AB581285A3E50323042E2D92CFBAA3716A89AC710E1D872B9A 08065D397D41C9190C550287D05D404CC0585F5049E5EBD727878155E34BD2CB C268EA9C2A0E87C87F2E6F5CC215AF4153EA17F77FD6873B8EBA45BB30C19E70 19C5555AEB89C07148E68B671A83C3437997A6DE98638A7C8F0813291823AD82 DE4802358092BCD9E454D5A30C3CC77DC5DDC6961C14EF2D6B3C54F80F47ABC5 F4491BBF61E37C0C0F75361A071A33BE25A68A3E73674A23FE1C1F6B5859970B 59F0AA7D1F66F5890E9AF5746792BB33A62975DC00FFE41124AB762945ADBC76 B2EF48B7942EF81D8835528A1A067127457DF7CFD620103C8F88D66B9EC7193E 941A071D65D7B0BA998A5C8EFADB2A76914146A3321895FC3F2A845586E3E8A5 770DFC754789515A58DE6E40351CE0048C05426DC5B9C096DF9509E87A6D2E34 C9E0E3B78AC72F404074CE1840CB2C7D7271E1D55E55BAA057DEF64463FF3414 5E75C35DEE2A34C5F87D852861182C91B0F7B812BA4A07299F712CEAB519D0CD 3DA164147CDF47D068B697C273552BA98875C8295070806563308360D91346B8 7842BF6D63C00253FA37C4526A024D550E2EB0AB79FC2ABEBE34D722D3E7F019 BC1A5C6197642FFEA11331AF7C4C93D2307B46E1CE91D829398003BFE7E82969 FE77507D010C7FB263F3DCDF1A80BE5B22E61C770F2DD3DDCCC4B568963E2047 6480D1E52F8F15616E75C9824E00F6B62F7F88B34E77EB3077F33879D375AC70 D5783068B1E5BD2BD0B28922320F76D59C2E8668101B683824D6E80E6CC4CB7B E63AB3410DE786C519784C664F8BD75EA001FDD6122DB21FE4BF312DF60D8476 6784A2FA3D446F8B62CA45B2E55E1259B2EA6EF1FF40352BC3BBF8EF00CCA390 334E666A88A22C2DB35C87AAB1E8DFC27F726B832526EAC9C19F2D3EEFDB9301 44025CF06DF003A384B0A7B22752ABC6AF72921DD185BB2D9637A99ACDC54599 D118966A9D11CB47E014AEEA1A472A5AA77E7F3D5E3AA49D4352CA9A0ABD2C8E 6920940559C55259001375586D09170A7E4F024F2736AF57CAD8CD90E2FF3A42 C8D2FECCD95C256CF1F60C3E0CC5892D46161CDDB559E08E7977ED6A01F106FC C3C8A18342CD65AC5279044F0ABFB21AB69AE21E2A863C3E8CAD14E957324369 A9FEBE4F65AF87CE040BB3F26038047846182E6D79A510E50D6D346EAAE7ED75 AE591F57E454D855B970DE773B2A0631B9E207A6E84E13D9526D00D98FAC41C0 7C2F9B5966AC12F3E046FC6C9190534A2812E89991528FEB19802AB01396CB2C F19271AEDC078458C256EE6D4D1EE4F4683084EBC68B9C1F2312D77C5CA212C1 D613AE8EEC5E9F39255845E367B50ACAB57531C7F98D6461D2BA1CAEE52753EE B17E0822C05188BB23A98DDA30304A0B408D56D221A98038F61E350812A39DCC 4EE1C1770AED3153A1F1FEC94E38BC81411D653BAA7E52D8C6A202D42B58610F 9D7AC849CC472766C53FA8C5B0FB78933BB47EB6D34E667B7CFF8C7333431958 38945B1882A245A8A0FFEA01DC353181381152CE2DBB15FBA0192B358E796182 D424CCB7187A5BCD798A3D13153104905483E3AFB79122A8BB3BC2738DBC4A9F FDAC8DF77823E5166E86532A40A97C1FFA30E8FEDBD1D9EE1F29341388B58721 AAC2B228B92061FB74CFFB0427147BDDBC1E71DB59BAE6A8AD04BD40F1C0D134 D5376B54189183C0F2016F6BADA04D992904F69D3D87EE55FAA0ECAFBA525291 D1D774E9BA3F3DC3CDE8CC17F2662CB6E6F979111931B5C78155D3C0A8DC30E6 0E81BA6943CF0588E02486608C4E571A73FF8FBE737DA6043715DB9297A1434D 4FF07AE611E760C493560AEB69BAF521AF02DFD812CB47B4466C4629B6ED0A36 8395DF6A868ADAC614A4612098FB0A7CE872FA77A994BDAC1E1C3CD1169FB0DE 7BC50AF55820FD6EBC11292C305F1BA38FC3C434D0811722BCBFE0DEDFAB5750 6B424F09F07C9ED963A6B3A96177D34D39989D2FDC466FD05818097445037C31 3FEEAF299F57FBC1DE6C3F05A3FD15E4A74067BCA528533985386E045D622140 FD08CB20E21B34FD692A3230121B9F6C0B4A86162F0E7C3B45E0256A23A0E443 FE15CD6AABD927DA1F5DD2CFE79E11E0F061105F5FC5C6862E836149EDD66996 FE139D77F99875CB68039D65E71F137F38FB5DC5647D1A629A9A937550FAF42E 2038E5D9ABA4BB02D58FBD3E8773FEF826FF2527FBD36E0A689F610787A01B4B 60292A2E9D07988B2ABE881F767C0DAE20AA88E6524A27C261F9CA87F399BA4E 2EEDAC15494F0FC5C809BD42C501D00EF218F87CAD9E31DDB7B1450C96F1CC89 5D1AA52D5834C5673295A7DCC5F12091B8A5F37386E4E7D342A557A2CA38AB48 741A19B976A895B9EFAD1051C0D8F463607998B932C8DC1B88185B813D8047B4 0895ACC0D2300225C1C6F68DEE32158846DB17008B0CDE977C208974CB66CB8A 32D7AB7B1A62FA06A1FAFCD62C030BDCB24F83D898EC5856FC9C32F3CE7BD586 FFC499E6C2E089A2E9134E65CE6CA7A7215D9E980114474678EEA92226FD5FFC C711BF21A0E3277BED8EE7D9B0BCDABD3930A81FB80BB758E613D8E3E05A520B F7D199CFDBA3CB148225F2F209801DDEC5537C729CBCD7EA3A19F9F3FE06AF7B 3278048279E243FDF69F0C364E6EAF0C448B1FD33CCEFD0B3F33ADC5A7991F6F 52368B26F61818E9B3C38832C8F13DDAD6C695FF3441D0313F9BA96FDB599730 BCE6F5F8A58C8C26D13B19421AC20EBF52CC8EA13085CF07D0B0BC6B2A41486F 27CAE859C9D84A7FBFA3CCE17C381D79C28CF920EB3095BFF8C516C9631CB2D0 4B1491EED04ADFFBDC288374C12CA2659DA42C7CB4235CF7AB9EA968F823BCD0 D94074A00BF665EF462520CDF395DDB99481624AC3EF804B78631A597752FEB8 C34C6E204244877F5E4CDF28981BBCDAD5F4E10A4A29CA89B7D190AC78B5D02C 56857F299D31B21080E882CD67652C129B4C68D5B41F720FA073A6FE4CE20471 2D2A25F2E1707A5505637927F38144B2184F34D25E1CDB5B4886BD3D0826508F F0D0E95432E335A69BA132CD14A0C8591D458A73D57BC9529030C91E50C2AC4B 70443A17E8E0F7F15F8C8F69F82F5DA8C8713479F03B537B65035C3988CDB129 30D096503698FECAAC00B67894B96909EC01CA1505B3BF76EA3AFFC87BF3BAC7 9A4CD6BB110FF2201ED5F5083856C6BC4C2FCB68FCEF0801F306B9BB8DF35A52 385C3BE9D1D6BE169BCA8F557BC20958ECCF07FAEE3E6E91CA25E6282FCECDF6 C8279E0955E9F2392F56542A4625C33DAA92BA5D625FA2121B6EA129B356E906 776A02FABA17C3ACBDE16056CA1B6FF3F0883334A0EE847E8B9F481E26CE0D27 A885E23F7BBB322AFA0DB02CEACABF6CF400EEB2BA75ADBCDE0FC4589D93A784 958DF8AC174379F3EB95F88B751A61AE61C95AA97E36429B2D4610B13911F1CF 533078E1A1C18CE34926565949D392597CF1F98BB52CF76CA7A90CCD9D9B3BF7 7176D6DA05564D55A52B78ADABDE74E37CDB11214F35114C9276A22F1F6221A1 3B240612067DA1589E4DC8D8F20385EB35BDE4C3C93953325A850099D79FA573 AFA1CA79B044CA053BBBAC8CFF82A9196FA5B6A570FC860AE5991EF9458A43C7 366C268763E7D38E8C442A5DC1E3533040AE2F237621003869652D439F551D2B 99E893C0136B3463EB0D21C92086EBAB03C420FE4B8E481B81D6F1D4A9A9C0E4 C6FA0115B5DAD59145EF24C433CBC2F4B48B832DF65BE9635CC60A872106BC10 B9279128AC30055739C62C5A848B3E3A6A398E70963BC4D1267EFEE4BA340648 A5EB35B7CB744448B2A070F1DB5B5FDE09CC14D229654A28131BEF9A5231C3F0 81F092EB39F56BD7298C7C0DCE648DCCDB042D719DE06B3802D5E362636C13B2 5173FAF1556ABB77826B9A6B3E4BE13EBF9786B5C63E83F47ABC1E135B81E3DD 1A017EA5C9B4708F602BCAC1B4025A7A8E82DDD1C440EABC468CC34A9C4E5645 0E483032DE8477634D76666269BE88323DC910C977DE924288B01105AAEBFD7A ADA86E2670FC20B1D650E36070ACEB66E7336E5753E6A3B3FE1B3595CBDFC468 E8A7C50414C1A6E7A13BF9345A3608E66AD7699893B9AB684FBE341FB2C83924 12EE60DE85CE03153CEEF1A7F65C601C245784E67D58A70BA89FD39905D95250 4BA73131A4FA10F44F91AE4536692897612E2AAB7B1272BC2A8F8085DF5FE253 E4170A173A3A73E336088BC1666215228925C0640518864A66D763AFC5D84886 E463E7F9B6E512F10E843473D6C7BB9480505962CC8DD911F1345305868A145A 09D3CEF18D76079022FC8232B134F60AEC147FD87B8448BD95A83B1B03FC27EB DC1BA5E469A5EC60733C437831D7D947655C868983D51F5C3D8E1F2A10604BC9 3A91863553823E8D03ED8F0C508E01A712046D277D0682387BFD3A31D6FB138E CFC8E4B838E65E2689CDCE6B0E52D2A167F8BD45EE0C8EF0217B5A2EC3752407 6644F2D52D46658EA3A0B002BA2B3FFFFB99C6D224BDCD1D2B5C98F033C199A7 029F2A9996FE0A70074186D58CC330EB7B693A20B265B7CE1751A5B0B8DF4456 45E396F49E1DEDF803176E4DD03414D42091A68B46CD0967E2EE58A9B1F3767C D433C691BE053EED09929F8EF8BD5EE6F7D603C77C8A460D06E48B82011C6EEC 736558438EF568DA4D91EB5FACD937CA593B7D7849511FF618792714F8EBA756 F1A5A12285AAD7571FF9237249329B868124E99911CD662F4B7BC4F399E0C913 4E769DEF9EB82E29ACDDB4B659745B3CFE8E95D76C167D3C65B5081667072003 AAD2FD1693AB8BEE1A55FCCA970AFE2F2E33C227C8992EA738022B5E99A4299C A21B10226FA11ECEA53FBA9DCAA083D4F0A79E5046A0882396CA0EC7DC982395 E71D259B5120D34986F5BC690C00C53BD058AA18D0EE585CDC1A930721CC46AD AF7621B7979121A2B3553F72EF76AE41FDFB6CD1CF4E8D580C8869D665C1C48D 4F8CBC00392DED479A567F5997A25D70D5A3A7E7D8398E7D7FBEA4ADEAD6A75E 299ADD7F6EB4311B36C2118827B2B4A5FA1E5717324183591ED55BC5F15791B1 172E9D7EDBF16037B4E61A7486F7CC6243F863873635F52748A6E4884CB0D1AA FC57648CA7A579727FDDC06FB6176E33ADE6B3AB635D9C31CF683565F713F7F6 BD4436F30E64D855E2FF433E96EC772049F7E58FE311129C64F3D3E5193093E8 0E9FEAACDED6D5CB7C6DD228C229FD4713CB88B4B7C53508778A555BB9FFF72D 5FF43FB05F7E8979AA92E173495D0FA33099434223AB0B28A42732FF9F2B6291 36E90C41D853048F3333163800BA44B0BE1529BE0D8AD638DD19CB1F9503B9B6 81460224678BC6D8C2BD05E33497282DCCD34355C7F53E87B443101256EBB0E3 4A186FF427F72B75AB9A10ACFF0876F9267CD80DA0C9AB56D7451395C849693D 7978AAE81C0716AF754884944E5CADDC39893F9D5C015B0770F7294F0942F4F5 29BEA38985A11A43BF7121EA4560F7121A821F8AD93F75C017CFD4BE3B41597D 15FD581C24CC74A5C36BAB6C902ED60052E90902AAFA6061C916DE16D553A822 B2F0C6305DAA27AFF96B61C8477494C91A7C3CBD756350F92C74F7449CFE4F20 FD87CDDA41BD47BC60BC5EF33D51DCB5F18E63CD3F33E8A66D0500637AAD5E18 8C5AF4538996F7210453348C37479AA0B9D255B1DE1D5A5742B228AF2B967E10 F29520104B653392F93820971308C03DA5CCBB111CE94FA5BF8C1E7626E869A1 C611B7D16FC1AA057AB1228AC5607D0362DA207C411DB38E2A6BCD997413D5EE 466550E9A32D106DB95F5D7006C5DCD29877F2F41D476C485613CF0689A86A0E 7F076FFD8559DBE2C4EF816580E846937194D16DBADA64C1B5850CD2F358BE1C D2053A14C75E2D35E354DD22481AE8739BE5D83717001C5617C7E2AF9659835A 27AF397AC4D09A61263A8651C256C6E63C3CE715C53EA440AC1E0CBE81D36BAC 82A5DE8960695189F969745287251A3D01BDB3DC5D16277257B9FAB3AED7AAF4 087B2B0B7F99CEB5EE3C5126F4847E6E290A2F524CEDD6DF15DE4D843D4EF655 C794E6B82D57718FF547FAA44C6716759D2A58427D85EAD074D3A73B34C1BEE1 B3896EC06BC82BB83AF75FF7B695FEEAF7CFF7C486B48613DC52D298D02DE5F7 D576881A8785CCA01CFAB3F9913F90297320590FD687670FA7E75B7C31179441 977BD20855FD768CBC15711FC9EEC554A32D170B611243996729C2B2A150B785 BF66042BB895F315DF9199C5D380C4158EBE0A2ED5B404B19F7E9886C6BA37F3 62F8BDB9C0C60722BF6673281B967808031B629AF3E87138575DE78C93C75A66 F480250C2A67EBB2A7138778D70622267C8B1BA75F34149F788F96342D131C4F FE1FDED741B9CDAD0099E3964E2ECDB783B2A7EB976D4083DCC3FCEADED834E5 B125D4B93BAFCBEF6948C2E6CA17AD4C88BB05BF55EA124A2EA4DF3E18888F14 1D3A0307540F82EE120BCAD98DB400DA74BBEBB6B2495F22228B8C0217286A59 9D5E403FE49523D17F6A050F82779A8E75A90D08E1F0BCDD9E24E524D9F62929 E36E527A4A92E7835CD25ED0EB9E435410FF3FE453BE708F53963BFF7B6D33FD 575EFF52E1F2D736197F363DFD2B6FBA674259A1C184EDB2876BEB998364D6C4 98D66972F3AD05BAE42112EFCD71FF3DDAA9F68337C9F9FD0FB39DB1FF626E66 9EDC6B8DA3D4F9C0C775C274EB1236B513568F5A294DCCB07AEA7B8A775F3913 B8837AF8AE1BF524DF3B3FD75A38201C23B5C25FE971D6E58135B53500B96E2B 00F8B3774B610FF5080AAAB0E814FBB7D6DD0E1B1165525E43D3D42F088C4ACD E3BA0DC1CF178A54749E231642013CD1E9D349515124D5D0787D7029DA3A7D9A C3FAE8D60A89C287B1E2F09373A578A5CEBD5209FDAD6AECAF3A2AFC2D031BCB 51929F9826978A14D8DBBDEF1BA06A2A824EBA4FCB5280BA8375EA6B55B84217 17752577441F73EA229B8C9ACB1DFD43ED6AA1977CB51333A450A608C2BA1C2D 3BF52C71C6B407B6E0DA1E25C96414D997451B86B4D64576A050F2FA86CD1EE9 E9F33705FCA99F01E0C805906D234C0306B71539B564A30D2665FA6DCEC61B92 467B3676CF8D1D5173DB9A513591FDBF9A15A406D7538E1FA277248442A4F0C3 198FC8C38F84D6F66712DA9B8421DC6ED60D974501C390295546EA74DA77E776 4A354EB266FA35F72F7BDFAB8D0F5A155B91DC555A81A2854D53FAFAC32F128B 48D3FDF099DF809D64D0B6ECE678377E4F874DB3BE6F5D2CE6ADBECB171D1591 9B68644278344B3709D648CF12E49A5D721B7FCF3C3186C853BD6A8CE1E031B9 83024EE3D1043F48C65AA54F1F0F889432B1D21EF94156C1C1BB684989371DB0 B797E9DA96F4998FF2595CF5C2C48AC18520143566DEBE541385E4C6D06BEEA4 8E29B4FBDFE018D7AA0A36785D94268345813054D0A3FDCA9B64C0177BF482CF E89C90C77BD26AE4298EDA5498E9F99789A808154A39BBC3F493546ECFAEF68C F01D2F1E11977D8E142FA4A22113A40FB2AC8E4A942637D647384290D0F41E7F 85A8C623DC4E6457085F85BA2F80202425B07A1EE2ACBB6E186000E6B6AB795A 0A32C174381C167257F89BAA2675471F58D1EC70D39D0BDB72F15007131FA466 56430F50D9DD8C862313E71379F0FE1860717A88DA65D87889128B5BB77D65D6 FCB8143720E8D4E59F33CCA015E3D4E501121E9E6FEC3AA9DB541E2AA03152BD 466D20D68502359354A0B8B68936D7A9A1B9DC55577A936BD29D086A34321B1F E5288356FC4906E80A9C12156109BC058DA8BD81DC2A1BD2B9222990EA96CC52 FCDB8689074603BF10C0175FBE41C3EF5E97981366823481DC44E8DC756D1BD9 27802BEFC27327806F547611C532A2975B9ACD7B7EEB278758453EA6B0DE5DC2 536865968F2DAB398579D7FE92324478CC3EC0FD52504331995EDE447FD6550A A50D6FDBB7BC1B9570EC77F8CAFF6186AE8F627DBE7E51FC4C0770C070E1CB0D D95D5EAD3DCFAF07377A6406574724ABDE26243A353478C5BF1BBE2030DFE2EE 269BF59BDA467CA6C64B1CB4C438AE5657A77AA7F1430206E1EF85F273C42266 BD5E41504F6FC1C9E498A441A3CE507B0C5FA9BAE5ACB285F671469E44BF8855 9DCA7481B170E9A96E12EB982029AE4642E9262EF3AD00BDBD293F788F6BB936 0E1ACDC7EDBB58FEC48FE5877CAA5F658BEB03D17BFDACDBB8FC958962905B42 02F2382885F75AD69837265969AB7496F6C6680AB6D5DFCE2370B8880589C429 0EC49C70C360481BF8896C4BC4AB7037A5B6FCD933D57A06D5CA0AA5F0C0C0AE 28CDCF551A400161F479356BCC5786DDA9E7F3A8A7D32D876698E09C2436CBF8 2E854E5E48083904AED415053F86182B9592B96866C65391FA0D0559A7C8B761 5F72CD3DF33E9F7A8F49202669DCA1AC48B677596FFAAE00C036987FE110086F BE46C706C423C7AB1F536E4FDCA8F28E4E235259558C38E5F917E20E0DEF19CD 9D746B8AB27F4D776BD9CA1615BB90E71F308519C19537A05A35EB66B6143175 EEA8D750FC748F1505C3D73BDA2160C21F8028F21EE47DB9E47D35772B5487B6 A1290E2993D14A0F57B26383FDBB50C05C075D6CAF9080F0EC4D7BE3ADFAC8D1 E0E34B605AA90EA3C24CDE1FF3F891AD30DE8073FE2DD39333D06D26D97EA12B 5AA259CB73FF848A3CCCF926E8C8E3BA6A517BE99134310A0242CD37BCE93EAE 58C61FF61A13AB1A9D00B33A2A3DC4F9FEE114F588468C408AECB8DE39351C08 ABE302F8E229BA39E2A1E70E0AE2DE6A6233B48C10902D36A62A61F78045A7B3 2DDC35C21B07089CBE24EB3B047CD5B18C917E5B4D0ED03AAE6B86F14C684BC4 5850847205864CE713903EBCCBE53F3BAADE572120572188DEB8BF7FFEAC244A 831469CA350DC1757822E3588CE1F77C99BF8A65900934B4B939B16598A30691 CE961E7A9F2F10E041768DE6D4D671089A01740AED27779B9EDABB4A9D8DF5B3 8CFA607DC17A88DC58B089BB2F404919EDD4C2DA54C57BBB59B41976B5D6CD34 5D2DE0FF5B2559FF0302805919C4A6F76B784667D02785F4B79CE6F1AE74F935 DB1754DBBC6601F768FBFEFFA85C4DAC67902A383F407030F27A2022C67C2701 32777B52B59335089EB91135D23B1A1828ED155A9EC22CBDE585736D68CFE976 B1315FB983AD69DBC912D8D51AAC1DD93C47F2CC7F865F53E3A29AAE445C27FB 98EADA8A54890ED851D6D30CBBEF061E7F351B3332F84A0A16ACF00CD38E2B5F 0379FE77A803CB3CF254D719F4C0A6C3283A934884B5CFD93E1315A946C7F0ED 249ACAC10D0ADC3D8327AA4E2AE9791085F6A7F4DEFB2809623D08DBBEF4805D 7784EDD1ED71A6156D6B210CA63124743692 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMBXTI10 %!PS-AdobeFont-1.1: CMBXTI10 1.0 %%CreationDate: 1991 Aug 18 17:46:30 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMBXTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /CMBXTI10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-29 -250 1274 754}readonly def /UniqueID 5000771 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D004B836D34E88C20EEB527CE1124209388A2DF E27A8DF298A2693A9D529916AA0B2176E6ED237F69D84A8FEEB36861D1847207 BE2BD61C6A412FFFEDFF13AFEC32AC7735BCCE5965F5966418A62ECB99112AB3 3BC938EC590FF6922659125EB67E260BF02885E49BA6019E696D33F0B53606A2 F515E0C45F323311613A94B838491BAB9FE230C5CC79D22925E3D882799F2707 C32975A494F0F9513E4D8332E7E54470D9721FBD345CDBB48286F2F19CC6D66E BB631DD6476A509167A49CA525A72CA50E82C1D08C2B372DB54C5949C753B632 2009B761EB90492ACD3CBE6A35CE1B66F3BC4D8DC36827CE4261A703328451D1 879438479917C1647772999171DCCF1491A1C9086E0C6393506768F8757BD81D 141C46EB9BF507EEC29962A0072B6C5D8C8588F3D68886CD2606DD3BD2FECCEF 63245494E93EEA12AAFB06110E54ADC444C7E7619627A48A464394E5DE06EB46 4C76A2FF010318BBE48B3776C826A265C66515717F7F2E943C60EBAB23D96B5B FD514A1C4E79BB3D3D2DEB936F90CD3FABF7B09FF7F564AB5CF4AF6A40E869FD 395885A88F4A138B3CA6943A2D430BBE43D91F7F17621CAF52FB7161DA3B2003 82244FB6EE792DCA1722C03392C296C029A2DCC5BAAB3EA03F8DEB039DC83AE1 763AAB84776A2CCFFAE9EAF0BFDAE417E8BE682D237FFEDAF224AC09C9665019 165CE32F5349E857177D94AD6396570932E1657ADE4D3FF57A3419946CCD210E 57E5A1D91CF708395942527D127606350924D71BC21C6F969288B1C8CA3404ED E6219985F7301A20621368F74747EAD38990A4C9F2B62913B8FDB93657409FF5 178DAA7C97C35EAFA47778CE03E863303582D8A9900EF4F8DA879DED54BACD7A 4A50C18AA2ED906FC4DC073B1E6CA1E3855AD5B7698EF4A96B77DBE19A12382A CFA8717DE230CB6182F2250885B8E90AC42A66484A7B527061B223A6D1CC72D4 890359E7E04690BFFA99FAB5CC9999F0873A9DBE49E33F79E483FAD72313DF9A 7B7D926461988C23CCE9F71AB7BB63BDB2B10B3F78176380AFFC154825C9BDCE 82303FBFC3B59E070438984C28D12E8655BBBF049125BF56DD2B0DE8C0450E55 82832DA59EBEB001AAD86F2317460DD7ED264611B9043614221ECF 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMR12 %!PS-AdobeFont-1.1: CMR12 1.0 %%CreationDate: 1991 Aug 20 16:38:05 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-34 -251 988 750}readonly def /UniqueID 5000794 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C 68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361 3645B82392D5CAE11A7CB49D7E2E82DCD485CBA04C77322EB2E6A79D73DC194E 59C120A2DABB9BF72E2CF256DD6EB54EECBA588101ABD933B57CE8A3A0D16B28 51D7494F73096DF53BDC66BBF896B587DF9643317D5F610CD9088F9849126F23 DDE030F7B277DD99055C8B119CAE9C99158AC4E150CDFC2C66ED92EBB4CC092A AA078CE16247A1335AD332DAA950D20395A7384C33FF72EAA31A5B89766E635F 45C4C068AD7EE867398F0381B07CB94D29FF097D59FF9961D195A948E3D87C31 821E9295A56D21875B41988F7A16A1587050C3C71B4E4355BB37F255D6B237CE 96F25467F70FA19E0F85785FF49068949CCC79F2F8AE57D5F79BB9C5CF5EED5D 9857B9967D9B96CDCF73D5D65FF75AFABB66734018BAE264597220C89FD17379 26764A9302D078B4EB0E29178C878FD61007EEA2DDB119AE88C57ECFEF4B71E4 140A34951DDC3568A84CC92371A789021A103A1A347050FDA6ECF7903F67D213 1D0C7C474A9053866E9C88E65E6932BA87A73686EAB0019389F84D159809C498 1E7A30ED942EB211B00DBFF5BCC720F4E276C3339B31B6EABBB078430E6A09BB 377D3061A20B1EB98796B8607EECBC699445EAA866C38E03ED7D4F3EDBCA1926 2AF6A41F67AFCFBF3630C943FA111E4CCD988A7363F7C2B75EAF5830B049460E 0D2B337988F150B9182E989E7750C51BA83DF37685483F86D1F47478883F3F6A 4B7F768DA5AA89E8F163029ADD4A9209DE8A4F285766C06EA859639B92CCCDCA F59B1C2BB8D588CA754D1257BFF76B53984DF4937093AAEF79009D32A29A4C16 FB610C7D6713482C48D7F9E8410C0F00AD6E67021056B6035534E79F05D14EF2 4E800A9A5A3CD83594CE388E8433AC5051BD89C9E6B87E0B4A9AAB680BC70FDC 84AF9C71E2F8DE736B73125954A51C8FE41AE8D764F57136C3DD4CB19396515A 084698B6E514C4E196782DB71734C0095DC206F685DF22988B3FD07E3CC0BB2F 79E1D14EEEF0D8C43F88BBBD20D2FDFDCAB1CF4CE88E51451C7F9A0D38C7C658 1935D9C8E613E47DC498A8C5CA65DA6BF067C7E62DE9E51DF828E640AA91BCE1 609E0EA7BE6DF82E6FCB8433DC54EE004CB541ABDA33FC9D6A92DE229B7D9D81 F591B6DFF49FC440F4AB5410CD448930061E253164899BAE87D432999E14C590 756BAED5C6D1496C5A2D3DC41593FABFFB2DAD8C2612614C38756853441F5E7A 214E0D4382F1FDE1463377245E57729D95CB115C0C2CE231D2695743D7C27D4B C5F2BC99C731D328CE7E1C6C20D6D3147F438E141CD41960688A359238F56565 9617E92957630F2A4DB38EACE33BB49CCF3F54A2789A779A257B7363AA876648 A984B4111E00F4ECE6FFA16F94CEDF9C6655E0D5AA07EFCE30D5F0A0033D567F 42A64A9B6E35794C51EFDC3D3A3902211E34217EC90987D9748A7857A1C6710B E7533A44D6437980C920E38FBFCFDAD3433FAF4081D6313D24E14C1438F277C4 EFC8575C8881506B414F839FCD80CEDA9385AB0FCE3A68A3CBD2B65335DDD811 E84B47913A659E2F03F5EAD2E8C09C501D5DF26BE05B105F4BAECD9C2E6E9D4E BC4BC25F3512A9A48DE9FB78A93D94B8CDAF73C06E60642BD2A39ECF6F29E9D0 94E855F6F733753B5D0B7FF9EDBFBFA75B31C467B53A7CA868F6E4BC4E3541E2 032F9F79A69E044774491BBFC539D11EA642FD187072129F46E6F47B21EAAFB3 BCF6C14A5A7D9A4429F0C0F7554E0F936D85B976DBBE7508D1F35DBC84CD2CDB E4DC5AB7BB4C920BD05BEEC45AC243EE89E5C896EB6B96C881410A7318A8EBB4 9E6780915D62DD0EA49AB06BEA8856183104D56098D82BC7A69C9D4F253D39DD 6B1AE4C506DD583DA459F0E9A3BBC730B73EA98C1E09AEF3AA7F17687FBBBFFE EAA0FE1E4DC62E252254BAA0F3C76053A5852ACDDEAC7BEAB94335628BFF4B55 FB5F2D94B8B3FEFBE1D38D199F93445174751956F1C60FF4CEE3050FD844DF7F EE8F9CFD1DC67D1064D62F677DC6A1B12C5B74C3CCB113CC85052DEBBF99B65F 81165A8C61F78807F171FF96674AFFC0C51F53FF2A114BDCD1C79E18021783C0 FA96743111CF9562BCE5672185AFA605F117DD96D227E10ED1BA16143F685672 E5DD5D85EB2E8E5B0C5DD740DE5A3C6EA2B2742CC52693862D585F9B8F2843D8 7A8419B602196A38D2EBD1C8ECB91465975391573A186CDC86CF42E833CCE877 8AF2F31BAF75460CD0089223048BFECDA4911CA63804653A1E7714FC0E4EE7A4 60364588A5A65F0068691705526EA2D8A44B67FB3A26AF3028519B4A8E4D23FA 40DCE27565B8645C7CB592CA93EDD109202BDEAF5D27021109F28A23DE8451F3 B4F4148F4D1D1F6E1DE94996D8D1C1ECD297BB809852521A0609F1E1CB55D0F7 5F4B90E9CF86FC9EB694462FA15E012DA3FF343E027E403768D472A411D1BB3D 13F1DC531745D7E01B696EC140AC17AF581E152AEFB71B3E7667BD9A2B1E5882 5337A3A604C6F3B2A95955D20649BFBB817B10018789AF2EEFED426A250F15FC 04D0541AC33E04E9AF4FF1D989ADB4ACF1EF8EE3D7BD5C7E58B3E8B0DE7B2887 0683A69FA621490803807554B237D7941361BF05ABD8B181A81350F78995A2BF 4BA0110928A78D74B6D785C7B55734836C279A08F4B04B7E50DF416943BF5DB9 3BE263768CEC8F8DA95282B691531F1A6B01403E7F72FC6D4CDA60E12B066823 93EFB4BC8C5327382AEE9AB3B593AE69D5AE63A865F4512FC7B183DD53803994 FA85635C55D737ED7AEC8F9E706F94B0CE2ACA783EDC9FC00938CD8FDF8E0AC6 16C20BD6392210EB39E455BD5EBBA8493B9B803D219A3549D8B51CE9686B0280 3E149A7F831FE37DC2D7C6F4F01310846AFEFADE1539944393D47AC7E7855F13 F01C03430872C991212B74AE2D3BC53FDCEE2751A5FD6B0C51EB410881109D99 26ABF43030EF76926BC5B85585EB8755894841B71A4F87E07FBE05A06E15ED01 FC686D52EFA957C4983F9D8BBB5BC719179000DFAAB97AAA6248D3EEC0C7B40B EA12D3476E92CEE50AFBD82E24226E9FCA7538D8B0F73F6E1EBD46C52F85F42A C3AC0E8EF61D1BB3100AAAE83739DEFA1487CBE6A4000691E5710855701294E7 DB4D92D20374105ADF92ED4EBEE4C7BCAB057BEEBF44DE95F2DEAD23453E269E BB5F2F6E4806DDA44A1217189F58E4EB202BC11114B6E4186D06965FDED7260C 86E991D23693649B7F78410BD894ABEF66220F2D440E1DE877FA7E71469CB8EB D37128E42D9A2DCA38DFEB06E868F8975BE7CA0D8FAE28D7A71EB31859E55531 C76730F467B128FE583BC62895D66A43B3945D4821E1DA0EB23A2D40AFB77136 E99CB02402DE511600F38AB15E93F661B73C21AFA85AFF5FC3B2E97997FB64F6 2D8E1C85DE603F228931E9298E8E12F7B85533CEE4A2837EC720C139098B0AFC D955CA7D605798368A919246D6089A28587003CB875952E220913C11A1683863 67E988256472743A2D58F3F9549613DC6558D8C1E09EE553DB3D0839B732AD2A 53CB2B0B8ACC9E46FA935A42C7858D6D143FFB8DFB95506BB9ED4FB5CAC87072 71FF3C6FC7820E48804A36B5AFC2BD931291FF3F74EAFFCEA6132F5DB2D1AB95 9A7DFE98F1296FE72580B3FF19AD861AC9260C92F1041851CBAFA4008A1AF147 A5CBC53135AA16C281B8997260FF7B47DF5BC514F95072553285364884B843C6 005693854B0C23A4039ED0DD77C40698184DDADDEB170C7FEECE1022004FDC0D D220AC860334A782AFCBD3DF84C98908AAA3867878EE7171743D295BE76B28E4 7E8177C9F8E1AF69779493B5341C34FB970F7B7D6DF4E9161BE5EC640BA04835 E5116F3A3BB93C7EDA01209C7D19BC72104AE3D83E1C7D9F9E2F9BF328DE3B72 25C913527B60C028DCCF6F9685B0DB05642C0E02A795DE06B47C24DDDB0D1CF0 E67602D2F26FE4BC844CC9863795ACAE0527E671701F35992683A18DF15A91E4 9DB3E51F4B8A4537D9EA15D2DEDC1E24D3A2D3FEF2F1C4870C96E22F2F228A2F 44E8B57D17AD06EF33F4B104A69DF95402404A1531BA3E82844CB0E30AEB8D9A C0837467AED5B0B67B641287BE560DB16A508615EEF460A2FF1F1DDD65768D8B DD75D89E2AD8488DFF52F88C6EC957FCD12C6FE18914684ECB58238DA6C8B11B 47488BBFC1FE114FA6767C8AF05EBA078599C4A8427CACDB1FB7717C72A70F82 C7FE97B638CF6D3193852CFF63B4097BF4E9BD0C28595639F8EB6D64682079A4 CDB315688987C5ECA0BB49C8AE27A76B4A87F9130BCD2221931E32E33AE34546 1972AFDC2ED607B6A28434CDDC46880E3132B49766DABF749BAE176F3796AA95 E945DC60E59A0BF08DB5CB0111EF64A0CCA9C5573DF889830DD26593317BAE31 23357FA96F24FCC761B55E1C98542BA67046540BCAFC780E4B299E8DDFFA80E0 72D3876E4D64DCEC4095B9EBE4CCA03B1C55C210504534C10369F9C3BDA248C6 59FA11B06EEC15D3376B2FB1A243EADF6B46B956D40FEA6755F142E908AADB28 08FA333950CF93695085613BDDD573ED90F21B19C34723F72CF70D890CCB1A2F 40A8E9F76FADCABFB09F103BC22A348F974139F900D5667B3A47623E468B83AE 427F969EE13768D965AFD0AC3B5E2F50C48C374BCC46BEDDD19730FDBCFDC1C7 ABB27EDA9720C130AA8B235E66FE630E26174FC4C571DED48903019F8A851203 F5CBBFD59B23D67A55C3C369F835A50E0B5D59A7075FD08221D43D62085E5E82 83C93F6F75ABAB5888ACA0524F87E4FE61E5FE7179451D493DA500ACB7937290 BA5FCA6C1C93BE95F7D668630AF3D9D64619E8836BDADB15117C46BBA22A1141 AE969E24B553CB158F30E91953C0B104FBBED6B5AE64036F88178568B1F552A3 70B7B3CC77CA3D10413A37260F2E92E7E978DD4086ECE0EB74F4584543FBB450 B70E940FE80FA4427877D5D42FB0202C1694CD0BB7F7CE0AF52075E1F52A3DA7 6CF33B70E2CAFF0A230F45DA0A0EC27064A884CFA8290F5A6A64E8E137A25966 BC97068069029078C1A750F579E7BA1107EB9850976CBC1B58EECB3B276F857C A879CBBC1D435C19A844D92DDD2DBE045733553298D0481E133B1E5D1697257D EA88B5DAE8C9AD730D9F2A9F7C8501D442393E4AC75C8CDA11CDBE8C16B5780D 31BA169F3D31C628954DB59CB0A3D00851A3D2CF843105F1054C05F3770F0C47 7D4DD6F1B2F773C8074274453A37D1F6DE223D38BFB459DF17529379308F7CC8 75AEEA962F30B71557BAA0116A38F33257DC1AFC8F257F4A07CCAA35EC1D90C4 3DDE17852B23BD22A235A1A865C984111935C05814A519677C123C52770E67D6 989D65115155C90E4777E4431174AA456063EADCEED9BFF0C1A4A68BE1F3A351 F260AC7237616CB3246FEAA7919CDAD4301832B93713FD6821F33566893B22C1 E40588D21A5A14BBADD65C669D1BABD0A10457B1F5F4AF835B5FEEF78034103F 21B9E82F113AFFC50C9BDF3DD8866E90B451A9FE457C29EA00418D115D62712D 00639928F6196B21A596BE73DEC3021FA4CA7437E29C22DECB3DD75C8C02EC37 B57FAF5681F4656A35E06B5A19438D703DCAA6F52BAC22DCB7C358FD02D6CCEA A74D4A43D9C7B98B870D7F149EF37404E754A43B17FD5F7C61754A570D522BAC 5EA3D7D015DBEC407C4299CD95B88B9D8B1626AAD13A2B7303567D077B62DC07 2A7C769938029BEF66668BC0A5BF5A8CFE4EA5472DDF4421E817F3C62D8A615F 8C71C3173B613A84B89CB82C6937D390B95C9A880F31B6E54E0C7BF35E13611B 68F389B6B4F434A899218B35CDB432824BD5F2924CD0029384D02348EFEE32C3 BA0E0153DBA07AEA866422C09EF59217EC93C265A785F7BA5DF5FC376A1020BF 97B15CEC790088B47E172AB99C715EB58AE09CB44CD6249C95B3F91AA8BE71E1 A7036B7185C83DA4917CA608EFC255AC7BA99284FBF732723C0A2FF33958F704 910FBFEFA9774A11500D709396B4C7DCE9F85A9AEE2467033222FE72997A67A2 D4AFD52B864F232B0D662D45A914E0F31726EC635F71F189A47F93E1B12E4790 B35C5A30BA594E721F632172EC6638AA4C8022CB9F984392C9403A0AD2DCDE64 CADB7AE4DC11661C828B5E346DBF81FBD5338F79F0D9E70D1D4FAE9D4370CCB6 7C6857C34134B48953A8A410829D09294DC20DC040F64925212CE3AF183C45F3 EFAF0822BD0033A703F43A6E29310A3ECBC632F0AC698006FC70540E0AFDABBE 2F4DE2B874AD0054FD889D72B3003C9C338D11E701EC6CB16F991215EA27E956 771D0E02057E9F05124BB831AA2270BB9AC5ED3D7B0A11EF3AB90CF4237C4B72 967E87963CB319228639D648C7CBBA518AE93338A11CEEC1259D95B88A30938E 3C9B7EEDF30E77057256F48EFB602F69100B02D6CD62FB1F715942F8C6FBC839 AA5CF02F0583254F94D5AC8908718B8D5AC9F409ED819DD216A5FED4B6C7F564 B35C4B24F1A6DA665A16172819086EE2330DC345CC25F878C3CBD430397C6339 DC0499450FB6D53FA1A77D3EDC17EE9F3D68BB6D2FAD4423D21A9E8DFC5C6BB2 206D1CFEBEDDEF712069927E65D0531F3BE2BEF68DB128DE9DE8832A67CB50CD 9712029EF474218A8CED43DEEEDCE40A99C223FCC654C0B75547567FF8EB7D9D BB8C6C4D358CC3E9164B692AC4A6E2923CC4A8267459F469F25D32C322185296 0A6C1CF53665DF7E8058D5BE80536714C7302B9C457D8CA543DCD2296EDCB5FA C4A514B91D1D84B5C4CC98F3ED5930C78C3AA268A311A9DC4164EDE1FFC1DEF5 49BB0F28D8D3FC18A8CC83F86C4D3633CFCF86583791635E607B403E3BA00784 50F23E2E786F2E9212FBF7E9A54A4AAA35D5B1C8B13099D79FF461B77779CD1E 21814A60BC492DA3DA805DE83676B37DEF8D2DC700AC241EA563ABCC920965A9 55EFACF08239BA1C5D23444864F28D8A1ECDF74D5A9082C20C681A81662DD430 22BB64ABB03D6C4A8EE5EEF1592970CE1216DAF57EE871C2915088F7F5FE1064 62FC77361F93DC8A45C012EB9D87232EB6475896754BE3D123754D542FAF29AD 2E32B85F4B6F6800544A40152705448F2D6F56B0F7027B9A4F17F758229E8D4F 3F9DE14D63D5E894C6834B362EC94E0494C2D645E813F2C6F2D861C3A92CBA84 088E8C404D07F39B656DD0C5FC1CC0A3D88984F82E0E58B572C8801E04317938 62E787D315C0EFF5D1458A58FBB115AC1C5D04FB8AC767043B324644F6B3E739 79A01593F65CFE3F62E27316A93596BA9C4764A302A4B814A0BFC495C154A96B 67EDAC21D978E91083D620C2F564ABBEEB40160285F92102A44450714FDFFF49 5B7E1D6C7A685628B073B8ADB988B1F8287B4DAE0800858542900342AA4B08E9 16B978CE0BC9D2961B2D97B48E9861A4596EE3211467F0C3B78990D7A86B436B 02AA3747801EB3C73E73352DE918F52C9A64792C2816454ED6C0CB12669C3545 847119F0132AEE24C0075C56B11BB6F3377BE123E915BED6609B7671B795196B 2D45A6410947A641AD052238A094DB21442161C9E3F4DCF657AFDCA05DCBCB22 845563D6E7C6645D79D99CF7B3A26E4915B099A6DEAFD1AD1A8040DE3C3FC698 FB33E9BE62DF9F96BA1F02DDA9EB523A08786FA7D2BBCF3722903C5DA4BCC546 D75951DA27B91CAAE62E7AC6B36D55217A4020A235235917E9F6469DE5D15408 B9FD8B0466091259980EB52125AB8E88D966C6F22B3191E00B95A01DE43F50F1 641C09627217E5AA72B04E74A9487DCB1613DF0A1DE792FDAA4AC8D7FE30359E 39D5FBD3CAC2664629D48604A0A456524BD3C9614845B92FA5071673B387A336 FA8CC2687F0B60112F4E85A7CFD613CF3FD8DF2AABBECDB0CD284BB8A9BCD8D3 B65C2D895B412D81A4CD8C2DF9C080E22538DC3A7E1561A059D0120BC93AAC37 45ACFD0881C8151F70BC111AB6BEC084008E3CD54976CFEA695F6AF97130134B 079F937262410E0D481947A3430AE51BABFAAA793F654A077F465C9AA950C722 AF73E6D76ED96BA9BC01951308EE097ACCCA12134B836C752B54D10218BAF6B7 4E9ABC074EE2E46D64B3814E699180E3A89F192E22A590E8A7CA316180BA45B0 15D27A3CE3BADE12DFB80011320D30634FFA4C7F05701E6FEB06E9AE15FDC47A E8A856946FB0682B540B593892222622CD7970984662D8EC4787D7C4157E37E8 12295B17CFACEFEB48C9FAD074EABA9CB589CA3993FBD0C881102EEDEB52D3EA 50E211330EBEE671E623DC2A2CACE5B6E818B559ABFAA611CAFB737857C0B090 4C691E03D2913B250C15724DF519C178B600DF923D94DE7ACE026A9E443B4A1C 552BA1E0019FEC87198B9A5A85E6BAB2CE6D88E6FF87E2F0DD1D3A7C4F384F2E D9181CA3D46145DC2601BB8CB56E05BAC8F26331E837330B70D392A686346F7F C101A24548090AA67E25D4993721B244B5BD4760A035D54216DAB0BE02E9326A 04BB25FF9EA5EA740606BE74D0037A003C3B98BD47AA22AB4082FFA47B5ABBE2 D3ECD38B0C9AC46523639EFE8DFFF8439B871E20F121BA0F4704106F2CDC67CD F875C0F691D4DE2A57BFE404F0C3952CFC1D153BC5FD96A817457CECD99BD62A BF63D45407496824B2B436C25C2EF5E89B48290AD7D5A2EED115C0DD2DD06138 016F337F02661E60BA5BA444FAF0132775685D3160F1DD531472ADCA4FD177E5 6C42A61202C493CE035279E1F903480DCC8D1B052D071DF7DAE06CAEEC6D3D11 6AA4BEBCA2F4369EE50029C5548DF8E77CB0DC51EEEB703EB238E5FDE72FD371 D801517CC9538AFB91120ECC34C8EE7CEBBFBC5B060838484C9CC6210F8E51EA 6EA6AFAE6E402C9A2F75BFA15D6D5F791A47CF81E793ED685D48DF0DC51136BC A82C3A1940E3D94F88E9C3EA47447DEDEA92BC9FD71E848E5CA58BB04B6E6937 64579DC80D703D2F81296AE701991F6EF76A2D3FF6DC0146E06DA6B04604DD17 FC95DEA836A51695BCCF416CD527A0030603426A226CBE6938D9CAFBFA61E1BC 44E4B726E3624053C2C151CA5F48A5027F1DEAAFCAB929EA90204B22E9A2F4C6 B836C47FE514C0575515FC3B5D7F408718F7570E7EC00E668E561C0E5F8DD5FF DB7B7FEE568E62573401CA5AC709BE70AB6C6765A2FD974D88C270B8F0455412 6CA8F429FC21A54A1A476F6A82982D4D7E986BD7AE20D4B31C9E69E683DD861C E9712F9501B4331C7DDE3F7858FA16063876AC43F1688ABB454105D699B69F25 FAEDC0896851AC5EF7C0138BBE6903BA09CFCB702D9272C2972B0448C9C87D4E 85E00ED7CFD65D7119ADB7A9C5C6ADC8D22B6D22296D86312C030139D7999E00 C04EB3E5BB900941E3947B458849B5098495082CEF42FF1D66AFE1394231550C 1E3AB9289B03290CE51BAAFAC3B039D5692C11F26EB55D5C6F4A50065E703FE3 A2E54CEBFCA3BBFFCE67BE12A3DF811AD878A542327386D0392EF86D85859C74 A146FB32B6705BA9E01C77BB3C33BE3AB8ED410F71E85901E6BE31B59D6FB4C9 4658113F275F0FB49F15761D7912BCBD8E3EC83B101B7A71CB2AB6F7E4E2D29C F66B37C7FD49E71485FE8FCFAD32CD4F9CF9F81FBB93BDBEC190636A20DC01F8 679CE1A5F4167076E7B8EFFE9D111BB295A4F4FACA2FBF6CD56F740AB050EF04 EBC6FA6E10FE9E380353B6CF39CA02D308C0654382BC955C824B834434CA5D22 1CB9DF7BDFD843874A585172F817C6A648C5367008DE4EF331F1B53CD9975E53 DF403FC7E8A229EC76B38D27F754F030876AE33D434902B13D1EB4691FB64136 1F8496A8C5482DC37FB7E28958D334A3E27DEC0BF78F65A2C0EFF71F5AA23650 A3ADB2E7ABF612797651B936132BE222FD890A76F0D81BD237B962732C73CD66 597FBCDE46F1B7FA238121AEC4ABB57C1B36A5C03A55BC6CE2869E374AE89DB3 E741CDA179FCE5E4634386827F5E00C7FF46338D88B133C72B806907A4E3CD8E C00B8D213419D4473E8A8CF7B98312651918F241E662C30EB717C19CDC0A3179 1170620D8C990EE45972ED1E68726FF892E30F4981C1C249F490F75B92804742 ED9728CDCF3CDA45774EBA7BAC2834CBF7F554156D63E0CC8AF391C3DFF54011 E57107FB989DC3E932162FAFDE70542B943C0B253798CE42F0F996093AC0C314 E5D2CFE5154740F396A25133C0E4EB8B5A107D782E81BAB656F7C9685EE29BB2 F4F7186D7B4E3556061BEF7FAD6D54A1B0A3CE34F53D551561B3175CE1D63041 8B8A53D86666FE7BE9D7C3835EA0D3F58A59807298E5107FAD29ADAC32360A07 E4A9197F8F32E6825B71863DB06AB7F34933F513E3E1E8FDE14EE8DC4527FD57 A8DE8AC19F44F9258D16E5323C379D4AAF3662FFCE89BD205D7F435E2DD780E9 15FCC5153333137E0A8AE6E9EEAD75772BD7BD3FF19174A2852094EBF5BA2004 9596A6CCC8FEEDB6A9E4AA21A3621E4DBDD421292C79CB33245CF6DD81DA54B7 7134CEFB4C65CE3BCA76B306B8F1A1E94D3631126BB50B9E7B795BE484281D28 349581895E8BBB06DCFC847C7B8B28ADA8A734791C2E60931EF4E6847A28B95E 49F17927F697875106A0BAB551F068D6AB753723CF86B14B238E23DB9DD1D08A 608E6135E315FAEE9E51C584334FEE336157B8EA5CB9218648D7B4464BC8A20C 8BC270EA49ADBD2D917DCE871A764B6D9CD7AA111FF35948FFCB79126F859DD5 1DF11157489A86DA22979EAC2B3FCDC5FBE609F3DF5DA9F6EC3810CBC19C2BBB 08DFB0CEC28A5A6E7B3128BDBF742EE805BE5D8D1931633E72C6FCDDA350259E E197400356D6FB20E494BD8D095541FE1C58FA21F8D23E9A8E828AF0443EF299 22D9E6FD853F83BEFBDFDE76F5C6E17F068480AC803F3260C071D04441DD3416 7979328B05AB6E2B3CCB553D96F228E363AB6C72794D0E98197BE77C5FC04D68 9210365D02081FAEDAA176BB80397D93E66DF7BD26BBE9AEA3AE12B3ABE23F57 E3DB1B361078068C1B67D4163AD279E9C621CC6E08C1F68F1D146C212194729A BBD6BFB6156A74D06DEF5683F253DE6653729B34A913AC712AB594A049C9EE77 76639ECD57A2C9B27B30FBAB2096924E419ABF25E7B5676B6A94829FC0E5FA4E C350C2A7BCDA359917392CD71432890F9F56B1B07FEC3A9821B582DA3FC30A55 09CF945A0D735BED3BB0C9BB39F136FCBE5ED7EF5166C1BBBA809A8331205609 4D54359B66B18CC82A4402FE7EC88BD99AD9ED888F30ED18A5BE60928EE206E5 F60678D690785AEFE15DBD49729979F67F667E8CB9C90E278545F0C553E0B62F 8A829755B3485D46817D67B23EEECD5909948BAEA55CCB1D1591D84632029725 12E0FD5D4E85BD51E1F3F48A0C0F98B4EFF7946E82538DA406161C6ABCB42BE8 CD33AFB175498BD4CFDA8E5C3FC3238E92A9101578396F3BBB3803AA3C225F86 0C7A5ED6B3AB9399F9254A26231BFB0AAECCC3B59FB69A516516A5EDFF3F47B2 30B5D899A7C30AFD5915680CEF679B1F1D382F17404B49DBE811C28C9811C483 4A08355064565E5047C1175314148E7B22435572A1AB7E4FBD53544816DE2B92 DCB37725A589DDCA578424B457C21B7474CF56304A5E9D48111E35BF815AB839 0117A089446CAFDC610C9CE27429BC4B6E8AC33DD1FD4D9AD9669ADAC1817490 51B4D5AFEE777107CC2425FCE0D8F12B217B7F19B4F90071A4DE8C69ED4F6F51 313B48D073AA6D10F629F0A750F95A9D09B1E5ADBF289812DCEBBB9399C87D0C D422CB3B56BA0463F52FDFC7E4A25B911A0F1B0B670AE0B8A0F4191912E87E53 77075CB64ADACFE741F7C47BAB1FCDDB17338663505697A20598CA42C2778924 214BFEAD0F474CB239D8DDF5943A8FC8B257D7C311AD857C9D26A647D25739F6 5318BFB069D71A68CDD61D88F6425C63FEDE2F22F44763AC813BB422A4C10A7E F5F72A98FDFB92FE7AA39F6BD4577D48302D45C4765614A6E4F5613736DBFFE9 294AF6CB0DD15DCD1A2E1A80F35BF569C2193C8F2C9C700D9AD98A30F57FDCD9 C322CC2D597B7CBAD57422AB1AACC224BFEA6D147D1C640D86E688893A1B0383 D3B517A1D2F640D8BA8E68597A01DEAD6A9A9C7A29847FD2086216B3A46A0444 30FE688DF1110725CF8BA9415258A90452FA6462F58867074BE74ED6D059DB21 C209837066AAC11D7890808CFFC1BCB57ED65168689015AF9372A15BE21662C0 05FB8CA2B3B25AD163145D35E1967531BA1E7CEC77DF645F93DEC157E5D9566E B2399FC8F9253A627F00B659BA0589213D24AE31CC5E8D48897159422BA74DB2 2248F1021EE576FFE696F06EA28AA8C20802C4896337922FBEAA6C5DB2AA4969 7C454E4C2140578932B1BCCE089A30845E8D524292212397F16247B6999D961D 802464BFDBE72AC551FCCAA1A004D39B60AEC32DE93C11868F91A7529F4C7603 301F1B42EF78CE621DB33B48E4BF93266BA181CEDEE6F83054FA5FEA403DDCAB E70C362C564BA841D636F140B65010110A2EF28797230299A5D1A7B32E3DFA10 AB96777A5ADC03FB7987786436B25F0008875A22BF989CEC3138B09844A95E50 AA7E1F62A8F46133B3FFB9677D1A7129F3AD66ADF527859AFA29A305231E877E 810A89734D2D783D5505713D8B4E5DBDC08E989339 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMTI10 %!PS-AdobeFont-1.1: CMTI10 1.00B %%CreationDate: 1992 Feb 19 19:56:16 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /CMTI10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-163 -250 1146 969}readonly def /UniqueID 5000828 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F 21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6 06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF 55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5 B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86 0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9 1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961 7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A 7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402 356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B 19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2 C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F 244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95 5C4DD885310A706B320AB25C8D742C6F29953254FA54DAAEE60ED477877D19BC D28E9AB576B0EA088171FD000B60D73B3C57F754BC07EBC9BF751B7D2B32459D 993861B7C4B0D98C422A11BECEF76F4EFC0ECAEE89723E6CED53E3678D733363 2DF068AEF0FE7DFB57393BDAA439A6A4C396F86032A98009EAE1247B7DE83B3B E46DF2898598FF5E6CA6953127432A967E4FD41CDD60D6E413059A58FA556EF3 309178B57C16A763CFC9BEEC276944BDEA255789EF4E1ECDE1EA43EEDB955513 F42EDDCF39AE522A1DC2D80B2772B05DA60F3DC15A815A6BAFEDC399C7956E75 3851CB3588E22936FBFB63A58300298B11C45D82385C083D07AF133BB1BC941A FDD9F34D5E0B8087EF2A58C54D8AB7580EE3ED58AEB83B72CB9028F472ADBF11 05A77651F118824F6CD00209EFB60C1D32D46DF39770905D31D051FF2ACECBD0 08911D3CC25B783103E4A26EFDD866414ED5F0DD28A4BBEB1461ADD6EC174A1E 75AFFD283746EA8657E33B8872EA021C6875189718CA0E705F28A9792E71452A B89E04787CB1DE71CCC500EA765379AE119A4D5F99F68D41B9178C7C8ED352E0 A1E6DC9DF53C5301100FA3234C1D8E2EB7D5E267C640158A7C16ED424F1F801E D49A6E55D88E47257C1FE6F4911D337E67499213360B5335A69D75C6768FC2EF 3911057FC30AC0799341051A4ACE6DB12C707C05D2FCB11CA7EDDE9E2AAB5DBC 4BCA8E72F2E4610162A87B79319A53C8E6F6536F127F063A9F928F68183009C3 ED472572C46C4FC7A85B35C3B72D9251015CA6A76DC4A7A60B4EFF90E45AABAC D2DA6F5D256D58C06B778C1CCB7AE52A144AFFD8820A50BA4FACF77BEAD4F999 1EF7A81FDE394331AA4AB5BCC5E394F9A302A3A9225296508C28F0A57FA54237 CC54F0CFF6D59150B9811BE8A0D6C8CF4FA28D1AE88BAD2089BEFC8563D9D704 E195E40FDE78C5D99570B3C4EBF1B4BB9EC62AD18ED36F7562A5E1D75145EA13 8CF0FC5004064471E3695EE9C94EF615D076A9C3E7A0E12A6B0C38E95410A983 D6349FE01A273B3FE6A25BFF34CE9933D06CCB0D2CA46B37B1E218FD946F0302 896962B7D637AC7B951FF4AED53968714C3D5C2992827E68A31F0F25A72666AE CD4F5C7B080B6BB7C30213229C1CB3ECC70466FA69E02953E5D2A645311BB660 2F90598E748494929F3938229A9CDB161FE6050C8F3F4C012BD948832BF59A31 DA43608239D9C28521E5623C1CD18139E2A1E50EA17F965F2D44D735F02BF6C6 BF343B34BB6AA3D4A25C77F0FAC59378A8BBB6AE6D6076885AF697214A9279EA 8D47CE5FA0CA0A5B6933CF7DEA246E5F0C51F84F044A80796EE7FA1FC71FEA3D E521F6F8456B091E315C1A4D30B495B932E2D9EE6AA1D5636535526737F2F90A EC483E88C03D0CCF1783C3E80C7C01AA1101238DFCD96D94534C9A5828B08204 EAA20A20B964CC96786CB814E3CACC814836965EEA5D01483B47EAE3F2951A32 9A683BDC81E8BE7857EC08FB5E66038050CE557EA5EB30F42EF0351A1F9D2D7D FA3E964014C3E783570A540DDDF209002596636B4AD2F3C7934D4C9BB23EFFEE 2EA5A47D6DA62455DCC4DC5347224ADEB46BF52CB77A9C3CFC90D023C808B435 11B72D18E1AED8774479A6805C78C0B3FC3F41503B9A49B2921FAB14E37B1EDD FE70E07C4925B9524C6B50106623BB7951719C22B24DDBE5A0132B72E84CCBD8 6D7EBC4BF7E1F09862F0280797C2276054731D077371758514ACE9FF584D24B1 D006B42C4675EB93774BA8DC72EE645A8547B3773D9A52C0C1AE61E98B1B47EC EFA53F0D3D356BF0F31DB25ACEC59A5CDE8D7D9D725A59BF0E40D419EC81BAC5 31D51F71C5400A7868E1F3C16EA0A1A3E7786948FEF0061FB18D82E3088B094B C587EA4B0C646633D1407DFE82EEC7A64C1A6397B0E84AF0D6AA61388D38B7CD 93A4903B41BA3C8ED8726C3B138A0E6973DC76FF6138EC007F0CCEEF883087D2 142DAE6E90359168C6D73DC22BD8155D29EEEAD890330B5E8F3801C7B1AEE895 7BE158671A96797D9D8B7D4DA7601923DDDAD7643BD78C7AE2206456CD273EFA 09639B6ED97FABFB6A57C8F0C01D7841DB6C9FC90ACBB626908F6999C58F3AD2 E249EB1C35111201F88C472BA0BBD247D3F8243127F0F40E5BC87A597C76FCD3 06AB28005360682E66AB22B480694A9B6BF4BF8148ADAAFBA584CD5522ACFC1D C0F8B5CC7452842677EE2F01FEB84274C7CC6F52CDDDDC10ADAAD910F5D7857F A67EC4DCE5D8A0654373493323136EA7B90D5D217AB085F0FA3D9A183CA5749B 0475AFD365F73DAF6A512A9B7B162DDFE18D2B64E89DDD05AA329F9B1D8722B4 BC4AF1B2FEF9FEBC4799C7F1D834EC213EDFCD87BE6E6108AB1BEFD4DB901A14 322D8711D2539686A0B90821BFC3FA324E4D4EB3A7BD04633B4776F2BDFA272A 64B5D1A39F4807AB54AD5E8DEE812A4F1B247F0846D1C277998B009A6A4628B6 D1E3B81A20105147B722F65C90F780479B79930B68E10B22C2613803DB6BF708 5FFBB3E9372697EA3FECF7B5D63A4E3B69BC5A97463810722EF33A70923EBFAF 1A0D7AF8E71AD6DFD9A6CAF40B58E354F875EC19B60D5016157797D7FE7406EA 95F70A2C02390B35C441D7599CB0E9095C66C8308CFD5E8FE1BB30BA18FBB8DB 99257755AAB01BA19DB11BC0427B461A4E61E342E01824DCF3ED8BD8D021D24A 91869FCE9BCAF29E81ADACB2A06C5122476F49DC16F4F4B9A9E61A106F212812 11F21A5F4A1B84A2FA6959B9065C5ABB74E0400FD168F7285034EA34230C1577 9D4352ABFEF19423780B0635CAA42FDDB9A32D3E3AC634211691A5281260C2A3 6E116E86567451E9442D885781FC99E07CFE8CC6EA36602DE0B0936363B4E2DA 74D0CF83F981E7007B8CF80837029B88378A99C791A725C537133AA800AE485B B9B38C00066E30275905C47B590567BBA3DD1C0EF04DE89D04DE445208514861 7554473797767D49D7721DC8E6915E6438987F8D4B068D9B218C2B041FB3780B 159F13FBE67B698D7F438130D60D6DCCD22537A0F18397D694DF0D81CCD7B2DF F5EFEB39DF2C6946B2CDC384596B1DFE315A3BD92D9F0AB474665042251D6EF1 3C6A809E12D0C827BF7FFE7D789C7E241C4D86AED9763EA06B12A06CCB3338B7 5CD152386AD17442C5CA0F114E2DBB00E555908A153909E55DA6092A2E46D1BD 3623CDE5F7FFB61992D7F95C58CB54180695B33643D74064CFCFB5E62B7DCF56 18DD4C49FA69B19FBD42278647566E5421654C3C77AA9F641AD4E16C5F87EF63 9A99EA6BD4E2FE5E0037C17CF6B0E52B446C347E44875B7E4F2B4E4A5B9C4779 1F5CE261A956AEE3D571B29E8FB7C83009DE529035888467E56BA11886E4BA57 6DD22AF159A6FBD613F528482AA775382931359D4FC466DB0F8B14C44D3F02C2 10057456C89063AE2E7FF86F527E62983BF79C8DCB58F4401730EC17F403FEBF F0A1BD5E29F16755EFB36BEE45DF005BBFD67912AFE5493B6027D487A3C259E4 D0D8E51718961ACD732B17060F335239053A69C5BD86B8F400767F5661EA09CC 04D7D800F0CB08DAC7A2C281348132944BFAB017BEAC43E3574799DB9BC57D64 AFEC830D4735D35FADBB452DF2ECA6B6D9125AA71A5635FCC468B217ED9AB392 8D83AE9646E2913B2EF7BF35340E8337A2404012E47418101C3AA6A28CD3355A 92B7C5E2DE41C9FADC18C50EBAC62EFF3703484AD3C56FF8D10B75E192869A11 2D48DEB41382DEF1DC8A3B8D984061B73055C9D65F687563AEA9462118B2C6B5 D862BC46B35AC803577C87967813891D2604AC88334FAF8B8D5D2C56E549D93F 1A543A70D6A198D40E4737104AA76D93D6DE734F04C134AF522EC258F4271F2C 42B0778AF79C50FE32C5A2AC55CBFF7CBB392D0971F35F054DE5EE5AE2ED07EB B21DD9BE1F60D2EA9BA8995F8C91D8DBD222EEE79C780182806946EBA22E9B85 7C9F178BF8309EBFFBF30979FB415269112F6CFED87016BB65985CC27D77CF4F AAD85555D0F5B9934BD55A96C1552537F0CF5B63AD064A9949AE65B6FD104335 7A38B297218ECB46CC054B2AECFFC49007CAD6ACAAF8D277D27E0F95B2E6B273 7519D57620BC027DCF4C4E347E2CB815B74C04A2F4FDFA2DD880B560E9C28A85 AFAFDE21E33417B8B3178B5E9E666E80D17A4D2C4FC41514B7355C327B0306B7 4D42E4D3B27215608277B516B32AD10424BB10A367013A93C75EC73A7733547F 793ED46D28AC1A43A33F0BC06D7984378C59200966A13E2E1B94371A0E3609BA 40C7A4CF6A1437D6A6D52F91BB0475979A7C8CA6D1D91378798B087C030D7A77 5B289C2730940D0604523C299CDBE506BBFE9C2582E74C1F219ECBA15E51AB1D A67E3E082E9DF244F105B5B1E652D7BAEF01B9E1A09C4EBF899651BD621BF09D DB69E7C408BF2EE740BA435F733EC5104E599E8D6F12E49B09C85ED0E001DFE3 CAC3D86401D079BF838308FA7DCC28861D9340FD27D2078947541B81E00249A4 58B0C3BFF2C3E3BF473868A65B5C14D2186483C1A6E0153A55EDD11429C23CA7 6A50E36D4B817DA4B64593DE2333B33EDC2618C70038F45240C7709004EE100F F45FFC16CCBA4947F1CA88FF6F1145A6D0BD7E32C3287EE87F6CB80E7C389C82 7055C9DA3B366C404BA0FB5C10E1EB2757A5A62FA6CAFD3489C53E91BB1C8C96 EFBA203A7A9D47A34E11C2CAC02367B6254572F98A65282897BC44057552F8FE BC6903C39F2749EC7D4BC965BBA8F276E269A3E6E009A0B032A008B23EB96420 27A05BA867B461B15F9E7114A1FCBCB18775C3711E47DB440F67DE1DA139B891 1C68D64FC33D319ED4E39F58C03E0489AB8617BB01FD141E3EA2D82532DEDE5D 2C05BFA88B6C11C95079E5DEB13009B384A02992B7F7E251D6F7AD53DDDFCA2A A9D1BCC907F449A332CB43FAE92C7210ACAF64ACCC90551C1171B9336277C821 B31DD791242D2229D48E890C2ED6E0B20CBF9BDFD8FCF5800ADEEDB5DF4E495E 937A8A13529887283FBF08E77F5625751A3E88ED0230A9809390231E9FF16464 29A500FD695D5567BC235F97B160FCBB9EB1A676DAE4FC50480AF210F42500D5 B8E2BF409E5C65EA0884971F0B4A98D4C3813E748D13D10D54DD1697E85962D8 C91972CDB458DA639A1C02BFD05C062C995061F6BB625B640D9770B8A61A325C 553E98B7C0B324F90144A3C0B401EF929DF0318833BC2D1FEB7258075EB1A6E2 DC191156F069E9CBE0638AD58C092DEC160112F2322C5567A3471A66F5B47CB7 785F85626CEBBE779A64277A9A91372855708709F2468B762DF0A0866C9F9D8E 37E08AF1AFA32E8352C5AF475E508A7F66261B544F01435D1F5F665D71768C4D 664A87E007711A8050B4B79DAD1204C8A0E8FA655AE055707807CA8C8E240683 A404FF91F6AF620A51F05C4154835C4E0892928664E2529D50CD3F72D698E607 1D8A53AF627BAA14D8B49D88E0D2B9310E2C187DD6F77C2B5F8E3EDED982137B 06AB784B3E1CC127A3C62E945D352E0BA9D0C85EF5D04DFB6117ED07D4ACD172 2AC6E2862FBD7FF616214A90F1E0DA70B3C10D56CAD7AE1C85CA7E4A1B35B9D1 7A894BF6D19A2E8A2D9A16798DAEBE2FC0764F1E5345C11D327654C215869F52 34873D49327468A48C83767DD652EFF339FAF80B838D0A63288566A48421DCF0 6530B526B5639C28F5EE13775A4DBAAEF8720069208FDA6C9D56C1ACBA02078B BC6696C621450BB2398450A68211196578DDD1D00003FC0D52245A472E17D38B 8DB686E1AD7B0C0CD3D2DBC1C10F8638C77C2930102EB3CA710E9D71C4928C6E 028522FDD890EBEB118A7A181CBC12D326836E906A863D7E2AD01931AEA2B9B0 F29B67F1EAFFCEB85B91B062E476B78682715C61AED2C00D1BA16590C72BC9CB AB25F00770DA1B034F4AA26C7D9B750ADC0A24B081A9D345B08C49E6858F9191 8864830580FFC0F78CD501C73E743988E085CDC003EDA4A92E25DAABA1CFFB18 469BBD46DEED41CAA25AB447CBA5BD9F50E9149C23950CBF9EF2D50CB1F4DF9A 7E9B580B8F82D9968E6D87A69AD43D86622A1AE302B3A047797980B5BF7BDC4C 13F685393D3F17C3D85F59E18BDD8A305F2920A4C1EE7FCFB24BECFDC2BED0EC 37E5052295CEF17638984E76EDA95BD285A5886791FE37F46532B2D92F91DE09 0E62AB116871CCDC4997159944AA6E7C68D0AD71983380129BD061A3BF6CD41C 29BAB419B861C4244F34596BA4D561E00EC3B5AB8E8481B7286AB757A1C67A8E 61B2052195FCDED77F7C1B7294612384A85F638E683B1FCABCD8C1213E8B83D4 92FBFA8A2E1FBDB59C03564446A2A0D750A94E6D9DAD8EAB85F63C9A486A9620 5A50BF19AF7F08CE6E163B6EAA415ABE1BA76FA86A9BDFEE671E08848BE0AD44 94074E6C0C6C84B38538AD37858FEAA018F5B7250A35595FBD3A438477A06A7C 6F3EDAFF1D9006CA6928176D558CC213DCB682F3D21E5D78F0738A3576D47BD4 270032ADB56A8E0013F626970607228B6A7055813DD68DEC3BCC7DB5B6C0D61E 93D4413BD3F6D05DEEC35CBE80BE774848AB412D2B94F69342200BBAE1BAC047 7537D0070813292EBA4329CC64C4584637BB043BF01875495CC571A919EB41A5 A1498B9D5020DB23CEF40B466F5B39B0522DAE86FCFE404BCA02C3D827A17BDD 2B163B340556A109DB6312BBCE0458FEFB56FD1D52511F024B5C249ED434E665 D53E13C003D6E9CBAE7F64EF82202F48BBA3504B06835734EA2AECE618AEFB01 8037CD6C84D4283E07AF873879F5D604D04FF2F36BB3FA68B3D4313D75A35B24 349CD2BBBEC160EE24B61ED7F366CD34B05C1EB91B9EED33BC1C9682FE0EF48A 8C2F1E2AA2AEFFCD0CF11E3F2AE6D65C790DD503BEB10F6E1FFA0938801925C5 511B0C5533D46CA744617EED9D5B47BBC6BCC9EAF869B4B3CC7EC84C262FFD76 03988D37B99D6C77CF80F3B02D24D61819D1E3211A40DAF7541B694B442923C9 394B9733D792FFA6BB70ADF410F105C7FA575A4DF17681F800B7E8E754E26F3C DA8AB9E9CDA45C005CF36570F684E754B2F96C2F7F95FB3FCA322802F01BD54C E03128D36B2769E1140EF0620632E80324B95C75BE26C4F585B49DF331CEAE9B FEE50629E35B08A3FF4BB2AA69F6C0FF7C77C0AA6A4F31EFF8C2DF66B6A6ED21 E5B733E9D2CC7E669DE0A8904E5812A49FACFCBE42F4C192C64370FA0FC5D03B 0AB3E55D12593DE4B7F84BD05B6A4B5AE6202C39EC6F93DE8508347FF45B7BB6 18B45795EC05C94EFD25B3D40C8157C76636A5DDFAA50127A13D4E05DE3330C2 EA7BB8E98CBC99EBEF0516CE25C1F2412FF85016F4BD61DEBB123525AF7307BD 379C4226DBB185D21178CA33EBCE4DD3D8E85B04AAF5E2A06264EA4DF7CAD439 5441B4DA8135CEC88C300F2238ED0DF8D334DE94D985565F44D097DC6B4CAF13 0EFAD8A52F715680CB362AFBD890AE909BB80816EE8AC17F3847B49B232BC2D4 919F8F4933427CA41D2C527C28E543737983F2D87B26C525B4E914C9E4B20DEB 6A0D9F9FCA09ADBFC74C839B24E48FD6A47EE9A9934F5BE5B703D765CD8AF334 808B1349CB18EB81D932BA5F70055A772322D3112182C506E0DA88DBAC2D0A4F E02414496804B38AD3D29FA82329654A28132D73B827C0C89C0B70D97606910D 575CD20D30D1AC365BDA5467F3C7A292158DFC1F48EFB5427EBAEBF158138AFD FAE571DFEFACA4E227600A9B5D0053FA52F93ED36A10A73C23E3A2675DB60DE5 60D2983274DEF9FA60C42BDB0F3E7E9707AEC0759DE8128C936F6CFC74B7ED6C 6039F9F28EAC65489073740C84B2CB2D2E2E489682154F27514BF5B5D8B843D1 07AA4737E25B5D3F3505CE749788C413317AA0F4245B2B93A35753A6ED7B1B95 C8C4806DB8AD50B9E8755EC8CAFC416131D43258651B2FC67BE8DB575699E712 EC401EA45D57E55C88A6879B2B684C916CF76020D5E512DBD272D99CA58A9D77 59D13C5D256C4C0376A025393BBFE8234910BE2CDD30C65F3FFB3A075F3898BE 73943D880656A0D4D8F735D005CF83ECAFB64745F2AAB3CB62501CF18A33B136 72E787068A6848A4E93E80CC2AB4B7338053EDDA5C9E9575E5C29ABB73E0A439 6E8351959DDBF45D1279CE1351C25F8AB5E84A0AF4224D7108717FD30DB6F0B7 A13F968BC5E23A066661ECE811CA0FA3329DDC5F737AEBA28DE91EE9245012DD A8CCEBF16F44ED77460F190DE4B4814A698A2A62B9BEEC7BF11BE548DCD92C0E C4E87E8D502BB53ECAC68A76B200D5FD6F04F7272090C4FAB30619093FAB2864 DB53AF9E066C7C0936B605C1AAD3937EC1D7F778CAEB5DAF2B2780059F90B981 E90B767569E10407D0A44627E6785CAD10A14CCE79736D97629DE1C415A2ADCE C03A512CD5B71A69AC8F5E5B96DB581F7AA864BF50E43AA2A621A2CD6AEECA32 00A0496C5108B03CF50DDE21ECEF498C29B77EBF9446D0D46F2838196CC672C8 DA377DD723A1EDE264F454B5FA6C79061219695AC540290D95B8CF9BC1B56CB8 8FE0C62C624E65FAFD17EE48430517E6DCE8A9351700954F0A05BBC2D14E4FF0 4B42A073F06F3C1518965A5DE831A7CD8C9D54CE020C1974742441EF610E8C71 538059F1A32CB09E9E61C7AC473E1223A14C639CDCF3A1883CAA05D0297A3D52 264CEAF5D754D35A345B9C6B8DF9F24AA0609F2184B83194E4FB350EEE8A559B 9843CAD9742DE0AD53820913B7A40A3C542106038C42859297EFA478F73B9A3A 634A0D40D247BA0637B889D40DD8C320FA9D8AF046B100773588FF67E9B27D89 ECFD5AADAFFDFA206F51C7479E9E34769B04766B6EAF309B2EC6FE50F4D8D59D 276A6AD89E2E918B33F957F92C3819B7236269CD13F4796B0C8F01F3A4099BF2 10E65F4BC1C56AED369E4DBDCDE13A9A9CA9FAC40D33A2BF38F06985452CBFD2 C50DC0A19A0465BB22A1B46D9C493CE85D21B09AC97083E32406608AD205A1BF DC975ADCD6147271980139DF9171372E44719A8B2761699375A58F65D22D0B21 4C8D7F9E224B46DFF8B7286C38EDE1F97B442773A87560517BC0255F67CB9D3E 0096EA4CDF3322ED10F28A037F4E46B9D5754F216328A08CEA6A59C204090014 BC6AE54C5F7575188484DEC18AB3C232349D4D8CFB53DAE8CEEAD3206EDBB418 F7E53D1B74E99D5796A76A55B257D6A0C51F397AC0F5D4B02A14D6DFC3CD682F FA2F3AFDDDEFD9BDC901D885F3DC3FE6ABB2248F87A26E0001441CA3A27C239A 40C82B57AC6C9E13EE7397B409AEFBFBE0E9EBA2E2084CB5B561554B91ABA20E 31657EC38883BF9B60D64E62DC8B4136C3C1F45195737B9594F2CF980A41B927 34C47433096B724A388A12F0BD849F9E489ED8C8434EC9F47C44DCD9C8613FFE CDDD261516963ED14B584630C677D5F52FBE138532C01A137C30A784957AEC95 B803D7708B54B5CD874901DD8D851C9623CEA6C0FCDB69206CA0287C0F4597BA 6BA37AA7ECE315EA4A945805492648FE8E7B54AEA0C6E0D22149A340B3AEF1DC 3E49B032C0614BE04DBBB1232172B684A4D7BF67B67138E032063F42BEAA7030 740E33D9345DE4748044595819223346FBDB88EA6101DB59E8F81B1CC6126F6D 11109C0E4DF98E8E56815BAE907BF8B559BEA7DE19065FA2E0E63333EF4C1C43 544FF6C610B58A9629EE5ED1D434AB6BB95BD91912CFABB6E05463D6B293B07E 6D6E3236A3DA3B7BAB90BDA505B0EF038FFBF26794C9DE65E56AE47552043127 8ADC2999E507D00ED3CF2E822A5C90CB5B9D0923B536465D8C11BE9E52857524 2EAEF99AE466002CF7C8260EE714DB11A7BA2C603337C9666282DF0860627A44 1F1F86A98176045EC2C6669179F85EE8FF402D4914E34FA855F5FB3ACF139435 02A16FEE669FF1F48C1F9CD2B4B646E6489C10B7152F7FF79465CF32900EBB38 83C5EC53DBCF72F551CBBCA9B6C57DD7EF81FBA655488E0AA29721BC9ADBE9F7 77D2FA097A7FF76966683CF6F58E9BC68A1CE3A4E81ECD3430DE93F8EFF4C28D 3CC28F397FCB6F9D6D8ED5F004B7B46E4043C62EDE6D2954B7669E09D9A06DB0 DF10A7B913ACB8FCF2CCEC10048DAFD32DCB86102C384A547852B6C2076B6FA1 D3B624F0A4E26A0C62201DFBC505347115A2D075835B2E24B876E5F1C7975C0C 466B24221FF9330688DC72239786A129924E8E10FEC013FBF914892B504A109D 3A6C757AA5C1E2B94E473B54C161FAC14E1322D106E05F7F4A1538D11DF43960 DA23055331145852A80EAF3A4F1A70CE1BA14AB62C4E50D2E4D6406BDECF7482 CF1DD1621F451DBD07FCDC4DF9C6844CE99E0AC8A1D607ABA5FDBFC6512C8CE2 46C2192E7B0C351E64ECF68B5E9E6A21B751A6FA066CE964139CC8489A266D7C 5CFF122012C34CB32D76892CE45B847A469FEDEBD35E097CD9448E39E5B2337F 10516CC2BD95FCAC30A143298990BA235D5FED0BD98F521977D57F86F83E6417 5F21DC4801BF9A2082802C99F58D42E2B6FCF5FCB2EF025A7D3CBA7BE660AE1C F411A376848C3580E81D19299F7F93B2E3E55CB69E8C02CDE5CD583FD3E2EC4E 239C75DACD74CA921F30051A53354156178208028A3BD4A0892C638B00AA2EDE 3447AA54A7DC2301C1D32005710FF15357B223C2F805439FBD192C3C70E38B17 EC818CC9F07A41E9944E6F55FDC9B0DC86BAF2BE49435373BB3F3AB0E92A2386 87A1EC7FFA1236A0A380CBB5A52E79852CB347F2B6414B6B10DB92B1E132652A 114EF3F0963C96DF1843926CBA5B018595D18BB11F1CEE23ADC684B1CD68BD17 2EB53815F037B1CC4BF6BE4EF78F021215FA78A51086E340356BC3F144C8C4D6 1A92AA525C4D513E7F6C63C742AA635692D2D8F08E6DE12FF006E0E7FB5C63C0 6C1916E70C25C45D1BE5FD4FC246576B03456F335C5E3D36BC829FA6F86E4483 5CE55A83B067CEBA08A95F496D19732E03C482A49E385EE0585AD4208EAA1DD9 4EBD8AAEED2824020CD0CB13BC4910F42DF55DBC850CFD7951B6FA2DBC22FB91 306AE2DEE752BBD94B99D08D62A1B8A28578F29C48B5735E1AD1F35CAE84667B 21FCB52B4951ABDC8F59E3A90E3F218A74534E129098ADE2B69939F72950E612 0A19ED133F04B7C32E4BD69A32B7A772F2E2DE43AB2C4D19C4DD103B0D18AAF6 374AD63E341056EB7D7DBF4BC5BD6D6CE1CA65EE9908F17E38EC6D373D6D510F 607EFDC00264B9737117C21FB3780910C3D728BEA3CD5D9831CC2C858B6A669A DB23F38C2C1215BCBCBAEA5B6410FCD60614074469766F244C5D4F661EC227C4 A0DBF6A65F28395C6288988E2891B23577A422FB79F0CF7B2A97AFF128C6B026 ACFAB2C4A5033342C9FC55FA05038C3B6B4E642947C91AEC95D95254F45F817C AB46F5B07CEADEFB8470DD7BB9D5D2E51ED52FA5DCD55DD0A1C978F9735451AA C43396D4B91DA5AF17C8C4930CFF010E02FCC11291B0FF78BCFD1646AA856280 23FBA6A9A4FBAA950226A2B10700922132149FC91684E229C1C2CD891DE80AB5 A761FF6C8D057E1BDD8A0A85CBEA1118E942DCA8DE6A34FFE656D77E9EBE44CA 38386CDC42D3AC3F9AB9AB396E932C2E8C241AEA98C85B7E1E5E2AC3C058C0AA 927B7B63710D0A161A5DD8722861A77BEA152F69F7B99257EE3CE88717DBC1F7 D045307E06C89D3E72CE09B8D5799B6D07F5A19F5C3F44101C506D44A7F2BF59 FD070EC2CE2D644D29D57F5D454CBE00DD306688E25B7D97A0ACDFF4381A0B97 FC4F0EE9C943A3B1A72D564DB0897973C707E14E7FE69AFD186BD6579AA7DACD DF132775FA305C4530259B6F28097F08EC2F31376C77BA8650A4EC3C3707C695 6AD811C2719C72C2FBEE5364306464BAEF21BD6A5A4548967D86164821F92A12 6CC96B35D1DC7584E631219C7D0050AB1C73208D73FD201D91191DA11F4CAA2C 02F3F6476A58A71020432F00F3F914A26DA450D8034F8DAE4586D035DBC94898 AC80FE6DA9C8A670E70F58F30B1BAB17F29A60DAA4F7DCD18CC05E7F7B8602EA B36D8EDFBC2196FAA287D5AF62E9BFA6F2591AA0C35E111A96438784E440ED4C 8FA4134BEE2607024FE0C54FDB4274D7908691D090A4C96F9FE64E96F4F8A3AA 8ADC4B08CE2DD70288DD3E5811C6403B048E7E0E7784B3A0CD01C1D8E3B16C21 DC3C992F2BA413D2F2467F4DB51035100DE730EE766499316CFE263D962340D4 D90A5753B7E8C1EAAAE66F24483E01CEC1D46A7BF8D3FB3AA27BEF4D70AB90D9 67353EACC8EAB9C66DEA810725D894C79222EB4313E8EE2444BC4513E366013A 3B24B34DE3C9A223CD1C96A8C9236048254833A6EEEA1278AC22D9F108177EC0 D42226D5FB23A8019DA7CA38EDC642A6D3A48212A507031E6DB223C91B672916 E1CC47D0730D3C5D49B59D22183DB63D3056C09D2D27120B8C8469B9BE663800 877DD6057CAAEA2E348582F96460B3526AF6C31A1B79D1775A421F1752017312 B7F890153F9C57EE1EE64FC2635F9A261FC5C27FCED1777A7E332A93B6EFA4BD A5D7F48E56FDBF1E19EA7263A5123EA53B63B518CF431454E155790F5B862B97 AA74570408C92E5923364C9D8C1AA9796B865A2D84436167AE42EE8F27E6AA5B 926099D34023DB8DC261D114F4EC6286143F4360F930A430CE78A4D424AD0304 E05D43E8D6CF0DBA7DD6644668A3558C1C3A83C589EEC4701C948C4DF03B080D 43F4A0F7F636F206AE69FB194C8EB7FDBC6252827A1EFC1451F2F2A10D0483A1 1E95172ED86E322DEDBBB80F8FA5A7EC1918F6719071AE15B88A6AB7C7628102 A8CF1D4C6CA1B59772004A88520689343E3265A04C534B39908D827AC4DB9586 146D45B09DBF98E143017B93EC5B85DBBD2D1B6D75C2FD89697964573B6D3813 E824FF5143F432A11C9A3060181C2639289A2A34834082337635CE4E885A7D3E 0AFD3FD955B30B7C7CD40ACFB83D3A381CCC1E24E327CD1E91619696C848FEB2 22ED38BEB60A78E3C49B691026FB0698A0B43F45D7FDE1FA56FCA0BCEFAEFE11 C708998F238E9C475B212827B4886761618512E68598FD9935181C9FE6EE565B 9F6BB79EC733C8CF63A43CBC30637E0C942C17FB57A60F8B5004AA6D104774BD CBBB0DE43F6D1E8E82759CF4BC17B454B71EF6B01533EF15F8CE312FE268E591 07086CE3AD1BD11202C1769696BF797B29FA97C538A7D013D4D0C7312F4A4994 6951B65FC3005385C626F9A0A229310A7BD60089664A56E52C0F5EAAF6732514 29F11DC09A7A153B4794BB2B90617F2ABB361070553D2D1D95B6146BE43197C7 7103C9065C43FCEC9A7FE662883C568B4CA2748671B39E60F652E10675D291A4 D3607D7541C89A8114C77F00623D0D43581E29E00817B4EE0B9FD67003C59353 F9AF02862C6867A5F9E39DA1B5494806A80B5CB7BADADFEF772ED083F402CFFE 7E9BA1B5AA350C5F0AA92E898D7791389D2A131057A00888022FE9C45BA8FB14 190A2D146524DBEE0A4063754F6E65A2B7E35A2774824DED1777F1315D7F0FA9 04DE3C2F02E468542CC63D1488CD9A695F919D6F50797E7AE2E920957BA12B6C 634CB87C4595C2C1E21B4B685542188714820D209308C95434ED6A4686855200 A71B51EA42EF010AAF21488BBA421A5222ECD23DAD721FBA0F145CA51F3D7DDA D0427F71C800FC6C1654C036E8B71F64B33BE82A9EB9F8D3CD716EFBD57B708E 94F95B0393D5AC1BE6FC5D232068CB306F0E84FC1E38A611C9D876A50D2ABBC1 C5F12E4A70450FBF65514CAE6B9E6384F2BB7CC205E325973087234BB2C253A7 29EF43549DD3CE58D7BF2779CC8DE271C9BC49D3FCF671E44BFE17F9FCC48D7F D6C32A18C19B248D11618AB6ECFEB7F88234D0D588E407986D29FBF91E11FF4E E47617BF9662C9EC24295840BC00EDF6DDB4009762510B4681BD3DC9CD0DD1B7 80318FBCB33D3486CD2851F47D045FCB3F8BCE9765052512E50662A6CEF8873F A360D1EEF7DBE749360DDF9E6C4E19C13CB2103835BCC7986704BE87F9FC195F 4091B4DED08879465F28B10A614D2AF3243EDF1F365D961A7FB96C5533CB6D1B 27AE00DE0BFF3C23D1820DFEBA61C072FDCA008EB51362A942AC84312A149B58 D935BA19C190D824EC5898DF84105E400FBEDDA0D9D88009D49A0ABC0147C616 5D67DD716BD6C1193C1F5F869224C436302DA9D540BD744F3728EACF34E4D74A A39421BF5B8C6F8347DD86806F9EA0202EF37FAF7673AC93ABB22A4A8440DCC3 5F623D66169216542C7C16C4FB1F8253C86E70C1B2B03DBCCA7D7C913A2EB182 2C84798B5312060712D7B44F54CAE2803C5C3747544493BFC3DA56E571C47E41 21021EB0B817408AE5D6D0D43033A9148D8367F019633BC54921153C881334B8 1CB27C925664B1D61782BE0242AD7D668DD7B779E5A3F267E4EE634637BFDBFA AED14841EED34E2F10338E6C3886439E9B61FF5D631A8C816514285F745782A7 B3CDB75EE17403B7B7B28501911D5BB7E13F008CC346CC05B4B2FE4CA9D923B4 B75485D1BE0EDD5D029B61A3CEA984B50E0BF4BBCC9EC483CB9E6426EB8BB4EC 59BE9ABCA9E28656304DE5DF0F346DB97AE7B54AE2C61BFB1F667BA9FB807D9B 05E33E1F0CAC7D5D957304E784B169325C387A596029D2812FF3E682C3551C45 0D4C30484203D81548C2E8771AF41D207A6CB3D5F8437CF5F280ACD775463128 BD7039D6A1A6EC59E3BC324C4326C05B3EF3EEAAA968EB37D43EF30B409756DF AE3E5BB49FB921B1D8578B6E9D00A39B40FE400F124BF5AE08719D385302CB2C 23B770B5F9CB38285F8B2B267135FFA1A6924B780BEA40CAA3906FB1BCF4A96B 01562C07AF9F1BF1F6894C6316186A0E7EAFA5754ADEFC15E54E964785C4E934 A9F659050DDB59DAA3F171B214EEBCDE8BEC5B7B92594C390562F4AE16247837 FB40474BEFE8CD6BA8E5FFB7ED6CF691AB8F660333E89AAC9AACF2FDF63DF007 8E2F59342CB755B5874D468FE322E3C97CB1A0205BA59455BC07C3FAB1BDC4FF 5E57FDA90CFA4350340023816FEBF47D504940E9952E60ADA11EC23B34A3BF7D FDEA75E6DB099F8EFB836590FC96702610D3A2B2BDACE8FABC857FEC323EF1CE 4CA110081A3B75EF78E42164E7DD6F60C566378A044EB433A1095192108F6C3D F7B1BC59195D208B4A0D7F64D038A74AAA1E9C7F4162F6B4F1AE89053848C53D 46A55A7972AFE3DC3488877536A1050CB9A293032225DD140A38926AF358535D C10F52AB98EFB22ED54B0BED63EC337CA1E7DDC372CF8A5633F4EC698768D90D 930D743A00B373F9280E9FA45237B47BB5945E591249A13A945E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMSL10 %!PS-AdobeFont-1.1: CMSL10 1.0 %%CreationDate: 1991 Aug 20 16:40:20 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def end readonly def /FontName /CMSL10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-62 -250 1123 750}readonly def /UniqueID 5000798 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142 08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C 30783C52AFA60FBE3E353E2AE354CF87B558776A22C776C7A0B5AB5CE1F941EF C2D9CAC37294BF407A671F10E4743BF842143F4F7DFEE643BA3BBD8BB9E3F24A BCCF7F0ADF8BA500620C81033EAE8C4EF2C1DEF13AC575F1B3BBB66F093D3B78 5412B82B67FFA087AF57182B2230F9F2137180CA58A7D9B2C822FF04BE6CD01D 43B2CA7058C7B953F6D9B5D6E91ECBAA5CDE1159B0E59C83DBAD96D6C8C8BAB1 374EF652D10C0F3EE7104472C98DD3572AAF2D45A70BF7061447E21EE3C3BF23 DF39C2D1B35B42CD5297BEBE6BC94F7C9DC6E61EC67E4F677256FED9064BD3E4 B51A71B1D27CA4E5AA9E1D8080E6DAB5310711EEF87C40859FA935B19524AE83 63B163FA8397BDFF443227FEDF7DB27DC35D89FB1C5E435DA0619A5C88AFC73B 89A2DF5E767C5B536BC7167A840A0C32BD57A14DE69A7D0D819AC36FF32F908A 5070F32983BB007437E3500799DF5E0AD3710A4C0000F0098D5BE99F2EB9C1C2 C444FD9552D0DCA098A94B3BF176F511CEE13DB7EFFAED7C47B5ADCF8D4700F5 7A5FD1B49560969BF5C44F3749370663A04776F749DDD7B50674D93254426C4B EFE264BEE7810EC93784B7C01A7F29EFD92547E13A2C7851A2E709FBD5B87850 4A44F08F56A542DBE072D2FBC58D9E6468E1AB858DC35240E30D31C7AC13D6C5 7D2BB634BEE96FA0E10F842B11A789F72A333DD6DDCB1BC23227EBC406E50B40 30AF0C48E6359AB0C46898CDAF1118E46BFF8B00F54EACBC2AC262AB898C42B9 2E080C10DE923C1A0C4C7387E0609D4E69FF8C2B9A89A34F4ECC2809BD697342 CB14BD2C31B2E14FC159E50DCBF17782323558ED69B996C8C18744B41E7A9A08 63F69C8F09434BCEDED9364157EE28542A5C34C98F3163A38D3DF98A4E5E46B7 A69CEF4911BB77BEC1C279D4AD04FF725D54514C2C30FBBB3E638191C2BBBD47 05E35CDB532ECE5F8C297A6BCC8CED47F15A609EA146903E54F220C1C1FA2DC9 0F7793466865C5DBA012BE4B7F290A22E8CE60E780B3CCB48880E37D0475BFAC 57C13C069226BE841F5315EC940311C308A7346AA6597C58607AE556E713746A 1E7250B5D365E9915EEE6DB20604EB896B6BAAEEA168A879F3EF8B52D795F22D DB37960BAC4A2CF2E2E1FD912DFE025AB705B7C6F8CA6318ADA85D06016677C1 1D7E41FC1129682CC366A53AED06339BE26DB1A531ECB43CA01FA762BC1F6810 AC466B2695379D3DDB0AFBD5EC75B548A90E940772F83A1A7B3F7C84757437E7 F0FE54C017391484271A2374E659ECCD64B674AB378AE29E15889DD0B9501A7E 7215305F9DFF015164E3524D95B2C4B6C2489DCC7BBBFF342D250562926AF17D 83F0177AFBD0B3BD23EC297B226F12A339058920EC369CEC7F4A3EECD3623F49 543E33E753401AA473483F141D73BA8E5499F90E09C4F63664ACFB0CACD0C428 E99B36A71FE7F5BB757EC71D82F17F3060AF8F31E174F1D9505413EEED3A3892 4C10F4A21645880688146ED3936B4AB87E8E577EBD6D5DDCC1F86EA75B5DC666 75151795266391D9214C3B0AEA7AFCB084E2D4438E6F6CEC9BCA5BD96F31B555 A12A4D483F8422B2903BE5590276753367A648743FBB333732447313C216F058 3EC8EFB28A41CDA9FA156A3745F9CD074E7BFE5E5F83A218D4673D17A67B29F7 C722A99D5186D03BD0A52FDBEDCC9A8DC636D7BD91482335449AB5B16E0855EB E4FA44D6398CFE90378D94F98F421454B147F660BA9824BF98B51A764BF28423 FF8679E3710075DF83EB5D88EBF723151855518F9EE72B5FB9AF1DFDA4FD3161 EF3CF6B3ED44020B289F2280E04E800E9EE576C64C58EF968452846D4A232009 DCD17DD2F7B6DF15CD323506EE4CA6CFC74CCC98C48FC5936E0DFB340EEE8588 150F085CAD5AC5664AF19FB1033F8372420DFD2A2CB97E91F20245D8393A6ED8 0CAC2837690C93D6B7CC19768011D83D4F276823247CC72DAFD573B61D239A13 FF0AE4905E43E681FFC1A4F67F32B222ACF39FCE81A36D6332435250E03B9456 75B372F6AACA074FE6E0418BF38AA58C8BB40EA4CE2F88D14392C482A32511A4 2108E45067EBE9F5F61B55E308D2D57BB3D513D261EACF7F1E5505DEF763FA51 D11A43B6F14BB41889AA3883FD0EB0AABF5C6B88F65235493CA6207D5FFE4766 8A4D64D4C37D3A2EFFAA912384E8A0A8B5087CB9069BCB0D6F57BA9A6B0652A7 BB0EB9D2BECA227BE1BFE6FBE7BE9FAB7D4A1A734956CFFF1F09E5D5AC9A5633 0A6781B6214F877D4D27FA27A4C17AA443BAC4EACA7E90409AFEDB2BB23F1076 E58996119B416A7802D235A8230C62F5E971F8D518A6D4B5EAA0F1C144FA3D71 149EDFE155833032F7A99D91241683647146B0C1F979B05819D04E8698B1BBA2 F04F6FA4FD324454D04BD345CBC01565EA9FEA4F5546CD34AED5174D1615CD18 DF06B6BF5344B59F9D29D900CF437A1BA4E0E69B75447DE0CED191A01CE82034 1FCDE93980B00FF9748EB350E88F54D9C68CEAAB63E6225E788261131641FFA7 5A09CF607690B03A4982A66063F54A405E62AFDA14A2A043ADF4AABDF9AE8064 A4AD15786EDA36EDCB834489AB0755DF3B9060515D4110015ED95DED012E7A70 A722C94AA48E7F5C1E2F0CEA291E64864710EE7CABE903C9B6BFC9C028E37A6E C7FF2A4F6A066F6F7FA63D70C955C2478048436ADD1D519D30623FE9514FC155 7C721A0BB213B9BE4E44095927E5759FB437F79050C4459D78BF2653AF503DDC 85595ECFD5C96B7AC70692774F71DB37F1AFC2FF0DE210CB1588F33872F4C296 ABD50BA705AC3E2C8C223A10A2B199564B3443F39109627043507580B5994A10 64EFA45904A2EFF90BE71DA58E0F915C827A59AEE7F55F21A462B05F215A1B7F C3B44B54DCD29CCF308FEAD96EA97D44A58E6CE59E2F2993FD83C3F170440223 F2FD100A94A3D7A6BA6C541AF71C4227DEB37DED9790D77FA44B19C63F1AC1AA EEE87803FC7E7072C1E5D9ABEC3DEBF1974139FD995ED863972BEC68AAC18FF6 D6F558EF6C57127A6AA6EAEFB3C52DED066D52ADE7A8ACAF3D561E52AA017244 1ABAE86AF5564E179CDE399A1F85DA6F947789267E3E6446810C0F6EB521513C D674835EF368B0CADFECB41B3F72E51DC3A962716CD795EBDB51D85EC23B8B5B 5931D399A0F52FB610D6902CD326BBFF7591A4D7AE820E9F2107532BA8E9439A D9CD1EEC166324305B041A93ABA5194D5502B52DE13F7FFFC7B1816B84CADD8F 77587A110B77CC8FD422F56DFCE85951C4D1DCD170811839D4BA0EF7E26790A4 1024A47215FAF380B162FED30E26C63E97AE1327A7AA3C1AB808394056D4B48B 13CAF31687564ED46C0F49B51EAD36052589847187F781C86CEBA05735FA8C20 5166E4DB9AC7C31E6128642B15E7368155106ACE814A89A47A6D5AE7D3EDDB20 F6FAC78A0886FC3D3E5FEC6625B140741C07AB1DA3F33AC5573A157F57B9E53F BD8F94E3FB8382A0F682969E5797D07A18F75E5F6A59CB05C4BEF137806BA314 7763E7C79E8B6B75E8657DEBEFFA88902F82CE3010AF42454182ACFFD573DF96 90D393E41CF34F2A6ADA8B2655C4AED2C22BA1E8DCD41C1BD97B9144D53DAEA5 781B6DE517453C861C3866C64D83FF87A1FB23030E315186084F0425B1F87C56 C6F0EFF259BF46CC81521E3D43FF80B2843E971FC66E70D98A0FE49689A3442E 95E2E3AC0A665B644A1D1606954E25D73D51368967C6FDAB03143DCD4A511BC1 6085CFFA62F524643C0442057B5CFD3BFBA67C89B63C4D41B86B869B9EF8DDC2 EBF23D584FDA08EF4C56B056EF546DCC249574F3117F96B8ACAF714F2C41120F FBBE8BB7F2B565E8FE766F6C4B2D3952B225751FD13519269C4E12762436D4DE 9133901E649A09D38CBB7C155405832B0A3477865CE549BA6850FD7AF8236665 E52ED03BF1F400183246FA236B97635C28236A352BF2357FA3F9F06D88B19001 6611E81D2B922D1A864468ED6294EA60AC50B165B55149BE1C96A417B02C4B61 B64D25919C4CDC9B17B81AAFD7A51502A88E8C572C22A06E803815B4DDCCE90B FB55601F83CA533623243FA5EC5D2130040E4153F28582F8506769D860089DE1 013505956D951F9E2CD94867A46C1B3497548BF18261B8C43D43A67A98742CA1 B3E5E2723D47124819B12DE35F993A24FE6AE17FE1F4A1A64041EC28820107B3 937BCE421CCFB29DF13FAE4FDB0597921512F7BD7186B295F26F0356939B2373 EE0634FB48593321E885AC24C8FB4350BAC691C8E6790261034C476AACE62D1B 2CB71A0C26CD350644B70B0FA5559D21B4E9BC6F09A83E775421B94FAA84A13F 2113A4DBD187D642F3E8254F15222FBABFA65093FF807CEE5EFCAFB11323E880 0B03778910622DF66FF52CE837B0CF8B3076B96C0B909D6090E63CC647982D6E ABF681EF439999F9863ADCEB042BC9B953F2FB46ED5BD45548D3C6C74720283A 49CFE5723EA35892BC98F2B16B52EC0BD5F5CD2D17F7A396202836651543B55E A5DB0A6CD4A81B5C99FC9155E0FE88F3574429CE2A09E03C1AE9B3F6C5257E60 FDE806D4BE210EAC23E6EF365EDC1A7BA4F46DAAB887B98E540813A362819AF0 0617BB4047695A07D016DF4DA3669FD525050AD6F259881084ADB5714E3AB432 36B950678CC7BDC04429AA33889A076CDDF795218CF41BFE66BBA5A73C2DBF7E C16665E80E079DDE94549FC9AB2F5459332F90587EB48D200C09AD4735853888 7C31E31A0BC8702B800AD217E2397E84A1FC6D040C3EFB5E005BC3B8A3FCA79F 6358FD733AB46A7D40B264FD9FDB95F48D4CB0C48A8DB23365399860C7F66275 3FBBF7E54426FC5CFFC7D5E7821EC7033690FD49B7AE657198E9DC9E3171B5E6 45ADDCFB98E80D2A04C7EEFFE18A4207EC097939D0C325C21C3FC6D1280DDE2D B082A7FC23FB3B10C2F90D139636509703A7FFF772637BB0F5FA3BA3F9B67638 BE6E33DFED5F65C8AA652A8CDCA31431AEB50E83111A826661D0ABE8850E1E56 9A228921A4CC0A24C69DD5C3F0DE3C48E8F78FF58AD3E833F832D0D0249538F8 8A05DB9CC5BF1B301A64DF75C04F2AC0ADC94ED9512BAAC38AEDD1E247A11914 F1A37B31026D879059BA8ECDDDC4E1DDA51C00E006A378C8E9F4C2423E75F006 33C069DC35F9B0484364680860C74A1B984FA5DED73C37F23890FAC395263B15 7293DA71258EB7F553A7047A520120307F396BA0536BAEA5EABFD71B46741590 7194F492D1DAC7ACB41D778032890DB672F9E846003EC2A0BBD5818B4B8E5B7E 93539FF9C1581CD6F8A65AF1E150CCCD00F846C3FED19C49CC96175DA048737A FD4B3A66E8FB6E3B7A24311A9DFFBA3EAD1AF7D3A15595E2EDFE0D7C2D558BFC 09E3CB4F6BC51130F37690CE0AF8DFE37109C69A2F7787E4FE25038509C44B32 004F5E2A0FC2675BEC2EC17EF34483F5ECE1ECBCCC563D755C5135E0709D69EA A186F2D479A72270B2365699575C7DDE869582292DAA580A43CA5CC416C611A5 D45ED97822AF41326CA6C912837BD44392A04563E8A56A23870111C8CD2B4D0A 936E4644FD1BC2CEC37C7DA86C2511779EAF289A86DEC6B18F9F9BFA2942AE2E 04B98DD9489EB2D35290B30DD267BCE1509E807B7A4FD8557F6BCAF79C84E828 FF7E52B99AE754BF75A15BDECB4CC769A7DAAA334DC6892906827EA52C85D95C A8627440391FCAE290FE91B8878FF9219FC70C475CF09ECF14CD7BE8DC63E668 6102456E35F9F9DDF8C35CBA853304A367543264554FB6C4E6021FB84D019C5C FE75C7A348D65E72F0D55624971B7A3D570BFA8CA45B2A8E03C5EFCD4BFDABC0 95953EF44CE9E8E493BEFAA172E13E847216A1417C080C4878B7CF95D98A7B86 9D6EE9070654C02026CE1CA6705FD5381C8DF472AAE7B25C02D0C631E28F2FFF EB4AD90CAB09C0304B2169C7FA9124BED1807BED1052013B31899C840108A528 F883802C406157EDD5263401B2702972ADB02E5DC217C2FD9518381C10248F56 83319883A010C3C1230D6C624AEE303AA8CD89AD0BAE9B89756571AED5053EBC 06FF76ED074651CC1486F947C1264375E67C870E6140EC379EC8FD98891FC4D0 C351CFBA0664561360372B4DBFFD0170143C5AADA40CA0D620B96E232952B2A8 D721955B738A86AFD9B977B3E00B9009D7454C2ADE2D5167D7C198FF5DD8F2D6 3874568B40510B59477B0692C44D1149B009304D467580A2B8DC562ADB00ED4D 432783DE5C311E5BEE4C290DD92F03A8BD98A35CBD6DA10E644D6251327F90B4 2512D3A97ECF2432A25F2CC631524E8B1AE530ED56441ADEA438EE8559F2B828 C7A2B9492B39537DCD1B01B16B8F5FC5C09C9CEB08A9C7961C180A8D59BF57B1 19CA1FBAFB62F8278336ABFD2363AA53D5127E83A80549D7CA17509214087EDD 74A7DAB883FAB960F3479FA8FBF569ADD0637C00CFB2E52288542145771EA15B B3C647EDC40DB10917B2AFF3B6CDE5E453D668EEEB51352B35DE692660A5934A 168909414EB06D8E2EE3A549DE4911085F7BE8344649D4ABF195D960C5AD7F66 50FFF38D5DD53F730C401A04CBC58D917E1F730F4BE0C70EC33BA6ECF0FFFF19 711C57151F90CDF13FBCC48636BADEC6F2E1CA037E48F4E207A09DBDC32FEA2A EB55BA7D5E9FAF3BEC71FA1D73DF5C270E967A4DE8C2459F3D2554870CB7B93D 5FC2D3B937AB71BDF445AF97E18372A741130F90F119DF7C5C75971AC59A5603 2254E6FC62C5E3192F672FC514A35A67E9B9CD6B85A23FA39D6A04150CA66408 2DE44807D19896622D13C8A9B6806222CF7B6BE62282906A9F9A14E662D1BD01 C17DF9B37ED489A58587B8DE397CC204EC3A8DE714F6CDD4ABB2CBA03B163DE0 82C803F0A34ADFBFB1E4BB7ABD52912D7D587D9A35269783AA2088B2EC8060A3 6B0E29F1A990B4180BF7F29D647BACC06A96C506A9E8DC3B48AB8A41CF9528BF 2B29BDD65809B9D87EF3AEAF324AB447CBA4EFA398B047392F2C39BF9B44CE47 BB26D2ACB6A4CAA0998437F539EBFBC0E90D6DA4F56560116BA0E93810A8F94C C8BFC4436A6257E176620A74481B2BBF3B9681D47BDB95AE9B345D22870AA105 24EF9D0D8824DAC48DC4B45DE1B2D244738F96216FD6AF74F5C3A54528D8EDA4 A58EE73D6901074C357807B8202A440DE0EAC6875FC77A0941215F9FA9B2E937 BC97FB1C8ADEE12A44ACBD1AFFE5F6A48CEB7E0F4C3078ADB3F30380A62E1B20 049BBFF7DAE6441BFA5777412D73A80B540E13DB38CF31908800E77184E19D61 AD7C2DF4D178B17DA6F1F3B182221E8DE82DC88E51360243CBDF94A12B5CACA1 DA6C8F90149F73CF6AE08167C15E9F82D2D22C6C8EE64D1C6E54AB58EDD5CE26 34095F81C10A54D99316B443819E4CB65DDE15745E0FB06BA665EFE8556FD202 A60857E1D3B3B05ACAF7878A65FA4208225F77E21F06B9DCDDB44D18DA526D7C C997638DF75F6E8B1A0E6F31B65EC5C11A3FE5B9F37DF2D2065E7A457208CBF4 3881DF34AEDAA74F1CD249D53D67528C66493B79BD993899B0B6C10B72737FBB F1A5012BA9F5387EAB304C7A930998F818451DC35AAC9DE2ECBE8F1008E3BDBF FB724847215BDC69E797A54BDAB56F2044E3CEC0018ABB337DC635A68C2934AE BE0B3070448414FBFDE151B9F3BCF9FA75B0AA8EAB5D30B8663F84EE7633B004 56500239A3C81A8C6186AEEC8665C7DC57A093186E6EC6B4047B24BB4F8B2DAB 0D3DCBB3D912CD8052D19C6BE180D3CA1F0347ADE6B569C217418DD5797F6D92 3290337D7C7596A7C733C34174EDDEC892DD7BB0116BC50DDDA91E204536CDE0 0CDFB520F0EBDF6BBE318291910CAA9DB99275C7D1490A80DBAD066F83408B50 3EDA604D7D7E2091F195C4EB49ECDC13D8609AC032741DC4621E605FD4519B2E CC756EA64A389119CB86EAD70F906334C45E034BCC5688DEC80E8E99F9EB8C3A 586AF93383D1A067096E789FA359E030A8BD5771BB5ED4F507F776B6CFCDF193 EF0875EA67AC80513B146DC450429C0FDFA091F4F77A4C1370E29A8B9227ACFC EFDFA85E39F74994F62FCA60F9E5A7CB026154D8A6984ED23C68786765C80DBB 052407CB19ED1C3E1A6A710F4287811069294A1B3CB2F36F27A72CFA86A27CEC 82A06996766B12B0D4A2A0FBA8F614C261A9F468AAFC21A288CF42B958948C8A 3914E72BBD7CD6AF5DC987E878A80E630EA6BDED515E6666480A00C873531FC1 624923C10251E7F3B98515AC3788F34BBCC184088EC784CC11D5B18C9FE5521B DCA90D9DAF0BD31212E58A037217641E861F4197EC645D5D4EED526294A7AF28 F29BE99E8615DE227297D2C19E15B1E93E1F0F294147EA3EF60F7505AD62BA96 A9C85851289B79B1922C61C7B8FAEA3D7910BB419C7E43D66D2F3E3EB4F07B6C DF63639EBB7CD573259388C68E241407ED3C8F53D0195DB452228C8367228399 9CE99829D672F03B71B44AC66C5B6D6401B5F76A8EA5B3806139073B69769D5A 20D44021AEC559E147FD1A99781BC0AAC092089E6B49D630E20D2D6B41AE1003 1B7878E83647F6D4B27309B715F6711F95422F60886093E63E9AA2F018318E58 DCFAD639CCE6E3B68779939C33102CCF6812B317CB9DDCC8FE9556F9DD48B215 D979022B7D30A7A5594EE651D82E6F6B65E767FCC2C70F93C157AAD360D2A040 1F82163359FCFEE877AF14C8FD7C619012E68FADF224826CEEB96E76A09AB602 786A14030DBB21E49AC0016EA8AB6D5E6B103D1609526168D54967F2F3997430 AE5DA4F101D63E2A2B77CE3216356D8DB196B4A450698CE853FF1DC597E21431 9987859B571C69FC7EEC43DC6B7A8DC974981BDBFB87D310FEE079CC0CC07D61 982F857DBC7D6B294BC80A1634FC2E802FB22758740D6A2A197F031C3E00B8A8 D9624E2149920BA5C1B1258A01332864504EF665394358EDFE3C1E7D6193A07F 70B9E4C35A623770391C23FCA738CD967C9E94E187377B50C2659E17BED040B5 3E61205EDE7D1B1728513F5C0BEBA19B649FF085D81B705CA28A90EA9F22449D E51E9DB34F52BD841BEAAE3EE474C968CC6379545208FB8B5038A67451A73EA0 7A9DFA34E747B14DA24FFD0F314045309B34D9DA198118D264A30212CD1AAF04 64A9D72AE3D496EFFD69A5DF108590449F41100B4C38FA964F4D79072C315D00 4BF58E47D7CEB288F309721678FB688169B96FF9C6761DDDCE7098D8FCBCF038 4A44BDA36704F4F2B6D1257F33909124B4C4FB0558D320E4BE559AED78AE8042 8E892B7D81E1E736CBC6701886B44AB59A5B59A182FB2FB52B2B7CDCE081D51D C22E7AAA70B637196EA27E6A35E2099C077CB14F1A83CD2CFFDCA850F244BEF3 C60250C8C86BC740CCE251F472892F8D2EB9AA6FAC88EB21CA6C9B8A4EBBA41A 1347872FD5D7A2B04AC7CC665272810955D9581E4E8717454F62660A2BA48AA2 4AED38BCB81D898C61F2BB95E42A0FFD4159AF6F6F53A390B89F72D6321E1050 92D19A1ECF9CFC01B42FAF171E2226EFE8EB7717F68EC65A04C0A3B3A18E27A7 D2FE04A04C88A2F6C5E7347FAF5F3C54C72446A638E73D2B5B04CE1174344C57 3B25CA2193ED7D79C2AB5B6073D42A8B54C379D498823ABBDD8BBE7E8EAA154A 713C42F16D781755482D87E65C6135DE608B4BCE596B6C65721928AF287D9E80 9528C20EF17F69945E073657F4D242148DAE520D380846E5E062F3FFE2C05BC6 70C78B8CCA5AD62CBB77A589CA8176BD43FC4A546D77BB33DE957096C0051D85 5C618C92DF974428834DCDD498E29C48AF09EFFF94C0E6CBBDFB928A71A8CDDD DB7055EC3EFA60078BD58F43F883B0A446F15E27285F34BA112AA405F39A0169 6CFC91A6EFB7678F96C3E6874E35BCC4EF7DEDF438F402417FD21EB9FDEDAD0A 45C3756AB34B3CCD6D93890B51601BD41111BE55125DF8FBEBAFD784695E48AF 53C300583532FFEB557E6740AC4E73A89B399F074E4BD78D0570329E1570DD0D 5482992C58DBF0BF1E95A3BEA35F00891615004DD6CF8A2ABA7841AB588615DD E79CA0B64AD7BB1B4201AC6B629196FF7CFD4C0D2A0345A7DEDC6565DE92AA03 DF7575ADC633371EE7F3C9CE5C5F9B72862E3A817BDEB9B36DD0EE235D22311B 677A8734D78CFB98BA916E0A0E2A625E3BAE6B01AE48B70158FDCF618E715C07 84C1592B81921CB92EAD6C55FC09DCC35EE4D31E789F21116C13D623DC446CA3 5F4F12F694C0A32E7F219A03581F4ABBECBAE45413C79F5A56D93DAE13AAD88F 9E86EA0D731AEBD81008CE53FEACEFF91ABE9A29D35E7005211929976CFE0982 5843D7C88BCD4865099C81D733CC8C9DD3EA7943F259B70FCF80A7842337D152 093D2B943CFB6848B8C97619F7F22F16D7E286A756C9BEE3B482EE98CD766025 9AC32B9CBFCA52F2E18AA2CDB7A1FC46E40E10AF21D2CAB6B3D5DB5138D14387 0C51EFBF7C1B50ED8CEB7721BD8FAC0E7DA223A632D71A289128A1373BA4AD5C 79CE7FB013424F47BF8170F273DE8A6A177FA61C6AA4F1A613817C200BCCFECD 13C0E7511823F84131F1D6A575D0B81DFF896B0879B61050FB90CA4774BD302B FDB0F3BBA1FC09CD68D50695D896473D94AF263A7ECFEF4C2EA5A4AFD0ED5025 9E0BD98099B0D7C3015940FFF5D0722B821B1E30483EB65F6C1689689AF7059A 3D011CA88D7571EE6FBDDAA6420AAD3F24762EFA3DF3732422600D1B848C318B 326531495BCA91E7D24C937E685B972C1779907F296A44C68D4410356B2AB07F 166FF7F5C77688318DA5998593B2E4976FF86F41AB7CD3178800FC731383ECD4 011673C2F4C648A07B02B7C2188C402BB4B7BA10BB21C9F4E7FC83112F4F130E B6571C10952F38A6D59E00A7F7AA22D249E9D9A93E1E25ED0232C451BD09EE70 12BE73863FC5241345F47B26CB7477FD3C21380A752F7ED146E70649B5EA2546 51E00DEE847214BA0C37992CA35685915406817BCE12A1C151B6370838C71477 D05C7576EE6243035A65AB341D7084FF98CAFE1760C76554075E3A5AC106E23C 463CC6B7D6BD6E28FF9A1A624C4BA462DFC618DBFF3AE7405C578415F8BFFB3F ECDE7EFD74F6988F7F9093B93927335CD0E1E31E853123496BCF20BEB7ADCF89 C88437AE8961526912E59F7AAD28DB251FD16080E3D2420D0249D535ED501E94 430A169301A6EE2499B0BE06A6950E4393C5A686EBAABE698955A7F1F6AF1944 A7C093CF7FE5E532FEAE8A3B2D47EA496C1955A0E44B9B60C6B19D2D70ECC4E8 D03944A464A13FD367936ABD05ECD8ABFDD94533DE987641080E720FB985944B 4ADF0665F333F623A70F988E0F76BD65A30B71527A82D1D43844F9A741F8748B EC48AA2ABE185E6057E1C7FED7AB163D886C7DAFECCE23EC7EFBC1D46EE7CC95 C2040A942C29116B6D23CF6EE46D6B626035CFEDF2FA07F18F36338A8035AEA0 6A893F989423F2C19C300C00692B77FC46F0F1DABC772D9791EA195ADADF78F4 209F6EFCA0C3FDC482DADE2D767E5664DF5371B88552B81186B359DAF73F5177 50176FECD3EA4DC62012B0167E8F85CCD8573F67957402A77E66054F7B6B6153 6C470CE9C1968F4BC53E635E7F61B4869C7CB5D0D605D6E11D94B50BE995BB53 82664988734B3F6AEF4432712F9E444D704A158A974766543A072CD02FA1C4AB 601DA86F75703D157BE6CB029B5C3C65A7169A052C77C0266F9B7D800BE21993 DD7748CE7F4355056ECDF8BF84E4A059C423293BC8B6C3290E89525E93F438D6 113A4856C31B2447304E474BDD38DB089136CF112846378BC3760150AC262F75 48F244C7A8E82532ABDBD4C5DADA558D5421B583588FBAAAD99B662CA858A544 B5DDCC4DFBBE346E731E3F16620CA8E91A11AD7F05879ED0008030C27AFD61B9 19C2BAC77B886E399AAECE6C9CB878F0C74495BFFBB2FEBC691EEEB39F708A26 FD894364D58DE8843AF5B1A84AF68B22EE47008DB70AF49D7C404BD963A66E62 3AD4BD9472B0DE746391124BE8F566E09E05F741CEB2A97A0B43B6A40EA3CE99 42852E3B6BC1DDC11E03C4AE056C021228748E59AFE5881A45259AA3817EBB2E 37C142E08AFFEF7945A92C6DD6A96A41BD3F0550685E6470E534D7A36BB5568B CE00D1FCA181EAB9719DDFEC35314DA7A6A0339DF2662487E4C28C03BE1B1D23 5A1BB44F4E700D256BE0850AB49798F21BBEDB68477F476DDB106FD0EE4DB85A 45DC9FC1987F91F3B6912DDF59DDB8624DED6FE0006C30C1F7AA9EAF005485ED 041325A49EC3678FDB3A0BDF7FEF43F8487C78D3C9EE7EEE1312FBFF202A838B 56E6E470E959677F5C663EE6549CC14B7CDB15C158A42479328400467C1551A4 1B3B91981EC4172AF56EB41BFE44781FE29FAFAC3B07227101AF2657E75D5B29 939167B8793006E56527BCA79FD393F3D55B78C2FE18D4272CACD94B56ADDBE0 F76CF0D1F77DA9BD201C7EAB8D3BEAF637455E829A2904C856AE93C99EFEFDFB EB374B9AF4DBA6C876AD4B9D594B7C46D1795A91D0E182D9C698631AFB1BE5F8 074C5C78B8577D8F32A010D453383C97FA9296E79CF504AC43803BCC7605B1CD BBAD729F784B984618CF5A8C95633D891D85556A5CF24351BC038492E3A10607 31280CD1FBC29B6C3DE447D749DFB91CC7F7FC11758B880A68AEDD2E505EEF66 03E20CD44F4831D75938D76F7613180FF2F6451F464404BE23FCE8ED1A7300D2 418D7AE211B9210F5A2B3AA66AEB2637F933B395A325A3FC0A4F543E85F439E4 5F277D2571D243F48BCC7141C518C1DCFFDA70A7EB97449B5E161D25721580A9 A84565C1F67A96F47A4A16FFD7CA22E53F7B91813041D6D7B99443A0A2E0AC7E 5EC0053E5FBA9E292A65DDD0CD4079454D38C1B6983AA8B513292DD16599ED5B 8AB2169234FC0099E96E10EE18797487E5A5A862BB110655BBF2AA202EE2C8CB 8D86A9314D305101510EEE45CC7CB82058C9F4A296F4FD0188038A549C18BD02 294B53988949C484F7A17FE1667998C4922128ECEB27B791BE5BE03DA236C7E4 6990972C4DC790918B5EDD8A1991CF626870843CC2FF8CF62C6C589F76FF375F D3A716DEC03FE68E69B51E9376B4D6F8DE56285140893A1E1622014F788A1297 4CF872D3A3A8080B9ECE8305768092A7218C8BCC3B24D3139CAA8C8BB77283E7 A44549279BCFA430B135AA9B2AA89A6443C0A48C0264BE65961C547896D850E9 BACA8BF0A4D054F99648C5181077CE8E89EAB587FA9FD87F99F7CF37EDC03AC3 E6838CE80315EDB086E5A6B0E5A1CFF21822DCE1ADDC5442FE642636251725FE DA27A1138B9F8BDB1E998BE09DB77F6359AB1927CE4E887B3ACEC9A07F88A2A3 0BEAEB1AEFE2D7F36C05C3F2C07737EF7B9ED2B94B14C63CAB445D8F1E302686 F7B23BF22560631E8DD211BF86D0CE255FB1B7CB7AD6824E178FB9054540DC53 202D3B5D71E92A8FA09427D86E1DD621565FECC765557CE7314BD2C9B6C0E048 C89CE6C5692AC5688DB54136C72FB78E36B1AE8D3965687AFC30EE7FC839FC4B 9A34815476DE92FDA62394A7F8F57AEA5F3FC4B7D8A461D448CCE311ADFCD38A A1684821884BC2E6C1852ED43E71736CF1CFDB43AE3513337CA034BE994E3F8C 325C0C7BDCE53ECBA6AC3287ECB9F8388C9015373662C50C5A23A9C7EA086C6D 9418CFF9BE74BB56FD1E07206C2D741C1D8A3DD3CDB88E3E6019E73668431C87 2AB90F0E015D2034DDC88B912F0D7D8BD52AB02F2E40B06897608854E773DFAF 0A1355B04BBD6A3C70D7D6C7791D38F114A929482F0A1154022363C16198BBEA D6785500A00B99F176475E9DCBCD858286576CFD41E825A697675147A77723A7 72EB8B447928244FD0F5F85FA70403E993827E59F91B6E36E7EAB1D9C0604622 E9196D87455A860B85FBE29AE5E004167CBDF570CB2F8F4A24DD7F553EA422E4 68DFFA901EC9ADD7DEEC6955FA0576FF43E37DB429EFA3E771D8FF5CBED7BFBB 8FFECCD3FEFF16EE11848FB6C006AA3EA21915FF5950328DFA2A458BDCE456D1 D52C6AE6F5B89FD6BB13421CEE7FCBD5F2D7C40BB851560ECD182603019B5D7E 740C34EA481A4E4CEB93C5AFC7E17D225450136191F3867664BCA8BCBEF598BE 57FFDBE3A7CFB5996DB876EA3F9FF58B864509E25974F07A4E09D67A24111AF3 984B2A07ED442A4191FB128B8AE3CD3DC2E9696895221F53456BB38398EB688B 523C0D804AEC3091072A850248B8908E3C1B36A6ABD7B6EE5FEB9769E872E49B 502C99D87ABC1D602BBAF17FBDDC31EA19F83EE5BDEAFEBA7FADC88EC47A06B4 E24880F6BA0A6481020CB561DD4D12BADAD71835EA0FCE241BEBD17D3B32A2A8 120272F8D50D4AEDBAEF022C28450CF850E9E66664E3413EF3B65B3946F3F697 B5A948C805F12DE022808BD5DE9642533ED22D66341D4F8924BCE80548EFB4B0 C01EBFF82C42CCC8BD5EC97C59DB1FD4B64C10E37D44ABFA44103D31032AA6A1 5F764DB20278888E234C9D533C34EA8DFCE6B9AAA5967111E8D0DC2650F24D7A 4F214E03A62CBE473D8DAB67680E25E21B0DCEBFEF04A9C1E67CF2FCC77D2976 DCD9995D9E5F38AF8ACC53D9F432D6BDCE32D85D7B0ADA3900F38523006060BE A2F05A496B09EBD5338620BFCDD7F0C5784C45675C3E7CAEB17E551ACD663CA3 48A261CD5452C41FCB970821C23C703871D640672B2D5052950436AF2463253E 92157142955B11593F4610DAFE4CEB8E358C66B8A9CA4BA4276BBAE5E828E5C9 0FC22A6C6BA5BCA9B1816CD42936E673FC88055D4C77528B313D54CE1EA63637 5A9FF5769319F6F0CDFB1F4D2F5C399FDC4D15AD288C8B91DB98D56A15C65D60 6087F23DD84C2DB58D8EDD5A81EAE1CD3A5E4956866F1BC8985E095D59691672 DDA53F44B6C41E156181380D33B8D7B6F909598E364F9B868ACF6A65B72DF479 BD205411BFDC7CD0D39926A5ED409DEBC58ADD745391DDBE7365333D6D13089E C87B565D14A63556D2EF7233063DD81BAFB87A53306E3F5FC8EDD93BFB2F875F C7134F72C891BB7CD079B308915FD79B8B2C5914AEC640D530538E287B3FF77A 71B57DEE1018F039C71B5737A670C07DD8209FAEDF9A6420758CD2F1E4DDDA67 BC6702142FD6736B4588E0AC6D9DC41B07E98873B88827795545649A1B10ED90 518D2077E09450831B6A1096C09D583F0EEFF882F6B7C2FED5A618E9FD9C0DA2 111504668F39CE594FBD99AD92C894F77C90766B91EE7A97876052D68CBBF6BE 705D480EE5F9ACC63C7E081DD7CA3809C79E37542F4ADF2EE78507EEA1381855 F1CCF6C4AEE7475B42EDC1F084CE3E03F6114A90A67B77913EB82E8DA99C278C 169BFB318F4FA2672A04F017655227C7CCC1B5D3F234057BA62B946BACF46BFD 140DA239034E722FADC6FD63318267F653EE1C9203000CC885641B7589A80A9E 0DDB33703F12176BBB5A3890843995E5572842A5981DC6D9E73FAEB3A245E872 91B25C5DBE9930EDF5E0AF0AA4662AECB3299CABA5ABC9F4594192D276F90998 C03982EE6A4E8FADD3AC486CAA9CA9BA42B388F686A540C2D9A0BD46A9462296 7A0B8B92983F0FAF1679C06B53DFC272FBBAF927DA123A7FB374D532C5813E8A 9E7F3187442565ABF25874868E0FB888703040C8DD283CA8C2F052585904CDDD EBA8E7FBAA34F4D509E31EED6007631F9E55C0CF11F3235144190313988483D2 FDA378D33161381B6369FD3DFBBC3041BB21A513CA0F698744732EB772F1BAE1 A7A866A0F1CB514CDCEE221987B5FE3CC7C5EC98C201D642662ADBCBDD3C3898 7D33A176D417755C6D76ED9F95FD0537F64CE004712687374591AFCFFB52B2A8 2BAA7ECCBA33DAF1CD37A56F870B4F06B2656D941D203BFD222846E72378A29F 52CC209BA1EC3EA855B13F9B57AF089D76A3CC99CB542DB98BF9BC55BE472C04 4C86F40AF31E8630C300967B5A9D996FB9942BF524D12A3ED94A851CA9CC0C5B C800CBBB05902F7BEF565C0B397C90B4076969B4AEFD18D304CD01CC37B714B3 8B143C773AF21A10DAFF8AE89A9901936D68DF16D12057EB6D8F6BD9E267E7D4 6EAA05782BA8D4753BEF44DC15EC423AF482D008F0DD8EC9858E08484404A2AC 90A1E93559F100545D38184E40CFC7E41C9C9A6776A9D8324172177BF1EDB2B5 BC8539127518941573CFF1AC3B221A0D04B58FF27E7E787522DC54243B2D1E87 461B9FC2433A198ECBD75A51927B14500D6093DC15E1FADA2EF962D35387B8F5 F34BD9A31F56F731BB9F11D2E000749E62756487187416ABF538C1BE508BD653 BB1FF5BC415E29337AE60D068846AD6CF18F2A028F27351C64CEE8A2595FF0CC 118F49CE8F6A183A90F636616804E9214CB2EFE0AA79A776CAA1BDCBB41F6587 6B5528E733FC4A7E27DA04738D89F70858396787B47E42E2313D3E16E10D28CD 9CF6DB4E2D3C2820A8DF104A0C48A1FAD30CE185F6CE89EF4AB514E23AFF78C6 456F1B99302480C0DBD19586E5BD0BA448B945D23EC78E3FF476B88A9544E14C 3D8B85C7CD23D44A9C5CE41C5E984934753BAE2C9A496F536232630A296DBFBE D4405AAEB76403AAE67CEDE7D43A1A71CDD5631D7BE493053E27E3FD5DABC30A 4C87558C61A5FE3F1B6B7D505E8F7328A6C9700880D8A47C67DFDAC201B92EBA D7E1D72F19AE918A6B79C22D1CE43B78140BD055BA8B2CB86DDBECD25FC1C7A9 2A26BE0BBE1BF83259D205DD81E11063D6917D008649A412439DD9EA0230EA9B A66D53EA4F673823DD86C348C07F7FE1B8CCC056D3FF65BF1DC16D6BDEB33BF3 987C907E546EF5AEF7372EA3FF4DE6A16035947160D971EA4E90AA1F758A06E2 0E9B66A71BE643A47679E0BA5E3FC0FB84DAFD287C18171C3CE08C15E50DF498 C1B500B01397E4845D9DDCD9BCEBE84FDF1CE74C0FD985551423324B71789923 64C1726DE703D4F35EBA7E7AD76AD0C9F7EB2CB057A3E00445C3A07CB543CFC9 09E7FF3561CADA0999A6356A241D0ED7EF01DC56601FFBC9CFBF46592D7064DC D6E69FCBA03722FD06AB7581ABE8C2F3EDC52D4B43F461716476CB750F1F2043 FAACF9F77CBC1E7BDF4266647092F44DFBCFA46E0628279EF8D602E96F7B2EFA F015F93EA811FDAC4865D5DEF691289167C083FD0E57D4D3249728370D68B84A 2DE0441A5018DFC309BC9AD2C2A656F2BE7850BF19F60D04F94437ED0891B42C 9941FA51604A5491CA00F493E44619788399B6E92342A849F79D721134AA6DE1 A2D0273D4069DF0D1AB421A2BCA1CEA535860AB986A7E3ED28F792136EAF492A 769B92F9D615538FF0DC172F18AAFC57C314B13ED30F9C84C76058B284B77228 5431B02AC080F1D2451AC72107B279BF5FE8E8D2C2C9C12A2F5960B3830203B6 23D15AAFB44297C90A94D7C4E7B99DFAFECEE017B6001A0536FACA99D992688C 0A214BDCB7729EB43C0C34016AF776B8361D7DBD7066D52A644F476C4BE8CF52 5712F98BE719454CA705A1A806A659F79E22405C14D949FB542959268F3AC2A0 BDEE0179D7812817F7632F4D673C79D0B75634A970065088CC1CB89B26A9E776 9DA37E60376786F52F352A3EDBE87B3F4966EB2148A4200D0B2B9D7E73E58B8C 51CF1CE864BA095FCA9D627187E9B0D676339B887461B99EB07D041A4FB7C966 7BEE1B9B10C59452766D808807006C44A7D0F12C3FD77C7F68640662601DA88D 1B7AFDDBFD843681735C8AE625C3F7EBBC9EEDBC9CDE272962581DD58378BEE4 C0E78EB44039604970EFFA9E1E8921591CFE96C2AA1D756D7661540F8E5A6424 6208362463EC8B50C4BC629456CBF62CFE13A07AEA01E8089BBCB2DEE1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.1: CMSY10 1.0 %%CreationDate: 1991 Aug 15 07:20:57 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.035 def /isFixedPitch false def end readonly def /FontName /CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-29 -960 1116 775}readonly def /UniqueID 5000820 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A 221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A 27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF 5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A 71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C 515DB70A8D4F6146FE068DC1E5DE8BC5703D288CAFFEFC421ABEC649FD87E34B 8152B8403C7DB49860ED86B02711EE6E5B72D7D9B408B1FB89D5C1C78ACAA4A0 4E176AB7D7281992BE94DC902056793D2F8F189600650843FCB5CB77BDE88C4B 449C6606FAA7FCFF79732F2083CE34C010D0AA0963C8DC56D79F3811DA1C9A31 92C51EAE54710AA8DCB635840E93C3C7A82A1D802DB0D417A624E651C3D8358D 1DE685CA39BD3236511D6A5040C077EADFB458ED084044CCA842DBE833F114CF 009D26C2A8C1D12038C13AF9EF7FCB8702554BC8FCBF0FD67EA5CB6785579E7C 425B45E7E1EF93A72176ADCB3BC1FE8F5587117779D732888E072703714E111C EEF1CD15BA84970D7EC6EBFAA477D46873A17D4D146AD19FA3E28047D7C5E54D D18C33BC9AE075AFE026207DFB4D07A4A349BA1D9AB66DCE9EF8CC57EE18EB90 12D7325BA2D8DC5BB1A8A18744964824321925C933C93D1C7CCE3A82052055F6 87159922DAF60521F2714E79DE148F1B064E712E9582221FB4596E02F2DC0D5D 0CB01244491567A88681A538286A7377BE2D7BF5AD451DF68B104BD82CA8CB49 2C61FD05544B4EA3DBCDCD97BCA6EE30DB41C019C26460FB338206518F160ABA 16A8983030FED5918242A266345058B09101F4F9E617206394E119EE53363A73 1446BAB34A4613095BE3F342BE241093F7AE9B1D270365C26CA2D9089AD3C4A7 51894318C317F5390F5FC618587B4031BD08A7BFF52F22D5BBA027912B69B0BB 4F598EA5CD07D09570C024FCFF09C4CD2A66FEE1FCC36D32D646199637A8A6AD C92266B2013DE9844AE92079EA007B7364861CF065131D223C7F8F635D7C174F 5BD3D6DC9E3214625C2CA0BF1C393348F636D0ABB911A9B529A1377DB805BB94 718EFBE7A7115E1A16CA5F8C8054C4E6665CE0BC6BBF700F20DA7AF29D0E85D9 5CB7D1F1E820A6DFBFD9991BBDA5CE43D6DA037FC1C25D1E1A2AAFB31429C86B 5597383D3707E2A91196D616819420C0AD1A54650F45EB832172366AE40D8682 5CF9AC10FDC2EE12A9CE35DA639527BD74300291DA188083B2D5779BE399C731 2EB2E7D304B17E7B7147F1A46B87D091D0B241B2E45138AA49D6F3FDFD57EE5F 3A30324DD4439F13344568A9087B25F2045822D176CC3F192E1C3547156191C6 6A7601C95563A6DB8C967C972FCBB2ED774F615D9D5117ABE00F741E73421AB6 667EA3D5434A488A666D7D9A6E67FCE567A065CE5DD5CDA5E62DCE7BDC91EA74 3B606BC18524DB132F04D6E8D66E876160C33F497E9B016A62065003521E8E3C 20A64FB64DAC93B4C6F79EBF0AFEB6553994E6F8D459206B3A06E59277229978 F269BE38DEB189DE637BA95E39908D19F873C769CB1F2487BD7ABD7B1A6DC506 B7FF6B86F310BA02 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.1: CMTT10 1.00B %%CreationDate: 1992 Apr 26 10:42:42 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def end readonly def /FontName /CMTT10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-4 -235 731 800}readonly def /UniqueID 5000832 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19 38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204 EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727 A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593 F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714 4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA 6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F 1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438 452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF 8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369 5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9 BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19 741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79 E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712 E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7 D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DA 726405EFE420635B5B7F0B48752C06083E92BDE06401C42A2C528C8A60381227 CEBEF0C9440DC034DAD9C19FB27DB399BDAEE22053591D6538587C768C1B7B0B 7D1E222D2D8AF3A6473CC4C0D6C3E0DB49068CEB8C9BD1C5CD486A50DAA10BC7 7D6286142355E3F21DD254E27C00C442728A0BAEC9D3F17AE9CE320D365152E9 EB0D5E3874F2BCEDA98521D23FCFC30B4B69DAD2ADBE80E5964ED0ABEF6C73B6 DAD30E2C5061E3747FE536E1A5D190D028F2130AF608F5DDF9DDDF1E77DC8437 ECB3EC93B33505DF47884DDBD1DC6BBE4098DF04A29AF6FA3AE344600D0AAB53 B3820DD7ECB600A3B8001C51AF2CA7A39AE1485A087FD1752DF68F55B52B4DA7 48030F2AA7E570B3D56C4EAD367B9B73FBC0A7356253233006178B9A6BC19081 B815B5988AE76FE6FAFD7AC239072B1106A3F509381AAEE79B2F2154CAC4727B D199CDC8B4D05DF4BA006982512ABD7539E28D937B0F87FF79A3F84C29ECF943 A8DCB8BDF8EA9E7A0E7CD60BC2308C96B3E889C797D0FF28FF4847016B3DA141 E76FC6BE78A6EE9CE07E651FF86E720A1A1F075972D36E5C55162E3FE26BCE3A 814BFEB12D4C5FD24340CFFED499C7CA183E57EC4F12CFFBE3291D43F7270575 C6C3306F832EF182ADD0AA14C4D8669A17C09F632406AFA195F90C4DDC39779E EC0A77E590211592D6EE19563963225C06C2F13265EBB5A6CFB7C17D9E77650D 11958305727AF662AE73AD0E3ED5F7E7086C5A0C3548A8129575980B06C715AF DD55C8DF869BED0A7883491030B1A7E82C5EB04E5A7D952E716DD8F2EF6275EE 087614CFAB55FCE2BBECD7E8D9C90FD8359E929D5E0A416A23BD58158318B4FF 87B095EB63F7F052B3A77F136FD66EB2C52BD46CD7DB3091A4B78A607112B12C 4D171B2A00B78B0E1C44B0D90C20D9244281F5123DC1F6063F91E9E3E48DE78B C862D848BAD073A4FCB5EEC9FF54B5AB8E234CCC3C7439C62ABC4A13EF1B8897 ABBF21F900C564C9A305FC36FC7224932F766E6E72C2EBB55953DFE2AFC2E3FD 33A0C6F0FDFF086E9FD796E7242596AE85B877223532667625E371D2156E4C04 0D7FFCD3337B93DF066CB6FE1E13960719EB7CB409EE805C08ACD2C06303ED9C E34C898787A43C1B428B896551C6FEB50A831C6F8CE2073EFC662EC286CB7555 A3B42E58772E82FEE206948B8C439FEC5E4ECB9E11DC3A4CBC7611E30890E408 637A01A2118441B4F9467A98BB2A1B03BB2F5D8E3DB7D1D15C188D9E856088EC B762F07B1C06024F7EF53A2FBD60C0A1F4C0275D07164545250ECEEF8CB15B04 A2D8AC44DDE818C4E0A05F027E43A2F1EB02870F64D628E2C31D2E325377233C C8C26258048D1B7ABF63CDD5A0CA5EF3F614EEEE1C14A598B6CBEAD5F98ABDCA C942ECEA57DF59F87AF9F90E4725202DABB8CCA01C143BCF303AE8A8BECFB42E 52EA6BE02929136F9E7C5C74EA15AD7FEF32F83B2EF937DCE814AFAE4C7E8B82 D998FB0DD01A3864853F5488039F9D1E848585C5932AD7315830F7E0B738466B 0446F054CB0786F5E5A063410DFB3342749FBEF210F850161B51A3C804D6C5C6 302BBEC057F9036AD8F9267FD4EDBCA87AC2D54CFD508AAEE2E9007F111FE390 BE32DAA6FA3C299664C471808730A4136B1DA904A65F9541E2DDA91BD1540FF0 DB391BB308A817F9123AD7A5A8B61232F053C7C6DA734CF6EABC49F9CF7A8031 5C7453FBBD4B6E86AD2236BA748E552B211AC00CE332DF493BB8252B4056E184 089F19614215BC45F259BA62FDD171B9B5C3798DA5D2B2234C7B3A8DFF74EB28 2CF816C9CD4DFBD39052532B2426D54DC28794153BE598E6863F7E7B67207B87 7892C9CCD795FBDD332033AFA81CC565FC2658ECF2525918D9EDF75ED90BB8DD F29B33505428E2617C2A1523CB08FDDF840B95B1964CC4812D185338F2A676D9 8B881484306DA2E0BD2072C133F6D1A5D4327525BEC71CB746B9E8FE01E8822F 085F62D9749D741A532E3D4A774D01FA89E233427BD755D4FA17C1DFD362A761 2FCF519ABCC1876F08FAB192F1141B5EC3D612E5769B060A80F50E38420A752D A9FA82BECB959C5F524E834B8D4990767ABB9502F8119B9D4717FA7C97A4CA29 BAA11FF2EE4A7D3937A68478BF9378F68267E28DACCCD584F2BFD14534951FC0 7113BC1AEAA18CED0E6A1DF4CC1D509A972E4E4779D91CAC94B804BB803DAD32 9B6FEAD9B59C4ACEF32CFA6227053BE72FEDBF94581380B78D93F70742761C2C 3F1F4AC44CE8C711C4402B7EC2710E5E06CA85A51B6A034DA2B7CC1E14D70B6A 151151842F730892BA502D8352689D3022B028CC10A04D2325DF478251D6B5A0 8E76A8EFF93D4BF939487A5E59E510F8224922BEE6B4CE1F71FD933CB1B2C6FF ECD4EFE73F474B7E7781B5CF08677BED77097C53DD7FE3892D79F666BE47B73A A1BF81B2C0F349A96E43E466B2C3DDB82D781F3C5EEB290CF602B95294CE91FD 71FA307653556CD91B32EAFF81117D620C8C1791A827BE44661B67CF541A46B9 9E36CC65C1D728190485D4CC17AB8B35CAC3A190247A4673A0782BDB377AE5F2 425949F652F4E7F8207552F1519494546F02AF9989C01C4D1C96EBE459C3E0F8 AEC00EB63947848EFE7D9996FDB813D99B7DFE0E67BC4A91A930A7F2C133AE3C 9F3E81C350A9C1A52213A7793AC970D76D7C264FEC425DDA26B054ECB622A97F 8ED78EE38A7EF09E05695E883AAC5CEE0F7E686F0171069918290D9A1C13815D 3CE754208CF8D42A37ACC55596AB2D4E9C08181548A076C30EEBAB5090070CE6 7F66EDD9EFC020CD1069CC457B3DC39321B4811EDC12D65D80B3DEF2D62F8209 15086852919A14D8D6D2DF92D3A712DFF7845D37DBA07925E5CBFD352D6EDDAD A25772719414337272B141EE57CEAA493AB84C343C5C7101D69B81C225AE68F4 E631611273AA53FBAA119695A93317C1FB20053D84E70356B8B8D1A22EDB2654 00DBF46F3EA137DCF2112022999C568BA998700C57335CFCA34C561F15D850EF 028CAD2A5A167FEBF40CB7A0E80BA898B1DB9B98D87E3A14A1239425B33ACD5F 8CA7DE2C3DE8CF275A4714430EAD365A887592C44403AE5FB0E6F881A32F60EB 05A942DB34C5338FB6006179617B6EF6BB5FDABBE1B913000E85822F9C2C348B 1A7772896AA243BAC0329AC141FC506239C66F6C01EDE273C0EA50AB6C865E08 52982F3B4E3C2A8AE50CB0D474C5893B4D83A050EC6B2F91594A69088DD27259 D569C9134FFDB4A48C479490D76EC8ECD2C898365A09040F94D86FE6CC7F64AE 84C9CBBD26638B575E6F19DBAF6572F16B02987527E94E0E35720ACBDC7B8193 45DBBF08FC1D18634FF483279F6C4CD6CC92B76E2934D243922B61EABFBF1470 60D842412C312738C10F0DEE662B20EF949A335812B9831C4A1281DA12F3B789 B055A94CD79193C7A515201D6EF86C54A868BE23E79A227B40B8A6A2D8EDD51C BB4803423E4F0D05970F4A28312EE3673D60041A639E6ED9475249BED3F68B1D 1A2F66CE8F7ABBF0EEC74D96AA0B3C34F0E14E3A057F9D12717958BDB18CEA58 B6CD72A026716E06D65CEB1907074A5CBF8483F0D23D3D2C7B98C4D199221646 4AE6A0A0DCC75B351049FD0D682FC96195FAE678CD69B8B8F29BC68CDD78190B 58E96C19E1516749A61981E0CFD28DD1B0219168B831AE59238CC794A3264D70 02FE875284D292C88DC24E1A9873AEC179F2F982102C4686E05232D74173C1FE 90DAC0EED54BE951F8B9C466210AAAAE48062F4E9A85B2A82082211AA848E990 DDC6111BEDE3DB95AC4178662B4ABAC6BFD364E210AF8F31FBB5C9ACE072DAA6 85CB3F01C05AE6BC4EB24D507E2E9C0426E1B0C2CE2894260E1BAA17E370D382 547995955A6CC30C1CFBDDE620B374F473BC77897F5E1629F22283E15C999CF4 6A3226DDDEDC275AC25A44EABB16403B76DC5EA85B80190559F325E8D4625EAD 0926F70AEB695A3D9C55E3C69D2CE19633958677FD6DB0F5924203DBB1DFF2A6 263DCB9B5FDA810AE4179D4C8C44C00CD892572C1B0C481272114239043A7CE3 9316C51B27B8973E1E42E70AE9D497E37FA8DF6654D6ABD12DF04FC53FAD6A54 A1A1D7D94ABBDD27D82E53DAC7D043A17332E8F70A777EE6A0EAC8E2E389E1D5 A9416957E0F156DF34A1B20F0FD37ADF71D1238AE23C4814568A63349C0F2508 13E820FAB254BEEC822728406EE0F2665FD27AB4B48FBCD36408B0A3834FC5CF 3F16AF3F3D50ECE31568989D1BF9F1704B5193784E338D736107806391F3BA2B 56E2166F48584A5D129EF182C025EBE74EBB2596A5996C2A26320B87208A36D8 66082E9A665A641C2365E9AB017234ECEDFA92B774BD8C8E4458496AA08B3A67 73B510D2249C4EA047C0366472790D1B8FD9FD2A99C651150EF9A3EF20A64B15 2E2F56178B170BC39EEF4C176727B52EC4D5BC66091311EB8D3765678DD20345 3DB8E114277AEDC511D09596D8B1F4BB31F4B601FDE024F389E64EC17E08A844 625E9148F299857B76E785EB80EF27D15DE83F8477221BC2FF0AE8B02D7B7222 87DC1D0680395FBB32BA443DF2E44811F4BA70AA2108A1656F5851AD1EB20349 997D8CCE568673C2E579962A7C8CCE20D015A16DF8D2558B8A362C716BC10765 914AC860A08C0B7F673BA29A963A97B3296CB210DE1BD244851D19B31808088F F001F3B754FBF17CBD9075D2F066682F88BA625493BAD81A6C8964E0B63FEBAE 895A1C3ABDF50DDD64531A7D880A19B80283E12CF7DB9F9A884B79729725283F 993C2175FFFFED4D79851346C4DFB66B5F2E702CD485AFCAEFCDF2AAC84720E2 F80B458E80C0766CE3153D717FB3953F3AC1F45007A0641DC8C67031448D2D4F ADAE82E5B84A1152CB8361A46F72ADA98BCC2DB13A7B8CEFC2CBB7532147127F 07A695AE9E195114515E31A98D3756FAD72DECFE63269F72758DD4F622A9F260 36D39599421ECF2659F758955BC9F64D0689355F8CC3A1650AA5B51B03C204F3 A9D8D3872DD9E5FAEDD12B8A7F999ED1C4D235AD51C372594ED98AFD0E78699F F13CE1834E7AE35850E4392F12E250AF16962E0D1B2BB1D256FBD5302B23020F 54FD5E9E5E79B2C792D9AF730648B314048DBFCE1E8E41A0D9355AE797F5DCB1 44BBEA85B27E628E2F3FE873B887F1FA2BBEDDAAF8D839BBA439FDB0BAA5E679 2D7F90CF610864F86B52EA1AD71EAD2A4B260739DF505768F0370E1630D2A177 234026D5EBF76A0860102999680C12B351BA1A67A40FF1280CE42DE68649CE6D 0810E45769A367BCBE62C3355D965792AD61CB3968D92AB25EF7F77033106E33 E04218A69F0380AE32547BBC6ADED313A9946F17F2EF674B619CEEC49E341928 7CD1CD8D3742282F821306340B7068054542477989C5930D6C7A1361C80E1946 5E9CE48791844E23F325B290DEE5B7C8160535B9CC4554C92718A5A27FA3B44D 67E0C4303EB95FB83B11A1DB65637DE2486E2220D03C2D2618CBAC14DBC7B695 2DABFA08E0D20ADAE5498181193D77943A941AFD70FFA777E1E35358DC653FA5 3150DFE3DA0EAACEA4FF0FB4F225ED038530E3FFDFE6B6AE88C38CF88A565D12 38C9B9FF9E59CAB3A803BB0EB149F58B8E7F273A9F6E4F1D39A796E3F4A38361 AF49EBF062851CA5A5E31C19D3C550FEDF900C0D147D784043F5BAFD951A85B1 A30635193CF609FA5FBBB3EDFE0216F29A3A2266E15F7283BE313016644EA611 83E09F3081DC1C57BF6C83F574F31F470F9FD868817CE4F7286B65B9382BFD97 D5FB51CD583F4DC1241C9B689180DDA8047C03E8E3849BA304CCD4A3B631F06D 39F1192FE859B010C1D7A4701F07DB4B97A1236DF65CB3DE7FE09C279508147B 6EFA74A3DB530097187F44259669A691C46D5ED8642DB58004CB05DBA57D7A32 C1C91AB663E0C101E2AF60B4824BA5CA3B78C3A6414D59DB8980651950268570 31E0CF7818020F216B83306ECFDF32DB6295CE4F80CA9D54D343B6CF53E9F830 14BA6CF6D4F45387F9DE703D5FF5CED6797FABD8824D020C5D7C1609092F6B20 8CB6957C28C24C6FF3D2AEAC9BACF38D84ECD9BB3C86CA9D43E55A477C01F17F 91CBBD62E1D62C77C82A777BF4D7D82D9D50480A95DA2CDD1F632CE94A3CC739 B008CBACA07107EDD32E8734482AC5D6DC3C79CA9E8E7D7E0C7BFC95173477EC 43D147319CEC417A30F7E5188FB4E1A116DC91257E379153BDFB08A861E515D6 191D50ED350C53B19F2CD85EEFA7DAD1DD0E44548F064F7D8DDD8504B62448FA 6BAF6E48B39E226C091D0E620555BEA603231747B722C4C5472A8CC954215CC2 9F42E056EAA7990628D5659BFAA0927F754068EA88EA181A7515B722EE0AA3FE C06C48C5DC5687A3D4C45B54E4F396A06F4CD381BB7B59042858CFE0F3814DEA 57CE000167B1540DE884B81B04C793E66DD9791DF721C09A543DBF42F66E91A0 6A3CDFF88C20C3D129CD1B24FD8A6BC11469228BEFA24AFC36C5C0AA8B19627D 8564742EFC216F6851E31F4FC2C86E981CB8756D3F41CF8FAC35EBD8EF4CE75A 21D8404518807FDB851D27127A69F56AE6028D9B3A4D8CDC04CC7CD2A3946814 073610A21D0E6C3DB9ACD3FECFA2A86539FD07DAA19570FA9AA84FEA9C2E6D08 6CDD4F9304910C0E7B20EDAA2527093BE3E9C186D16F795794A4B015D604D8DA E56FF4BF5C432E10AFB58E565EDB0F9EC5F6403908196FC0E67CDB436834F935 4F3CF6E54E0D00BE16705379A66D5B275BD42544D26D268B4C279A4D2F498483 6F63D8710EC9E928D19C92F56ACADC82B7F6E8DDDA1C8FFD741447715783D58C 5CD9BFF8ED8DADD3BD84863D643706E945E5C111BCF09D50F395F4B790AE8A84 6B2996154D4DE1164B23CE93FE2E438E1D48734347DBD1918F481E41F50BFCB1 A34D7E62D9A88A11F4DC6A3EC23A57C04F0F55A696FA2BED74FD6D45A9AF5019 D2F442F00B55F360552E630C1F10511B27143CAD5754171B63DBEAC6B5480276 D5D6864A9240D7336DE05D40D3A85A6C3CF4189A2DE9E00752A6FF08A35DF3A2 8B63637CB18D9EFBF89A306D8E2C1EFA0A644984E327E536BD2687A274968EDF 7453999407123DD3746D075F09F2D7BF7DB52803006B3EED10FBD79B51C2D62B 463FCD43DCFB66EE85E27DE6BDB2E37F90560677A3520220D3A3BFC8AE5B9C8E B49C64118B4EC03D3316D8C092821AAEA418C8362EAF0BF2A0805CFC0FB82AAC 049780BF0D001ECAA4F579AAFDA3D0F4460957795ACADC04B44071E2242FFECA ADA25F5C597734111F4ABD29E4D0E7F66779203EA93DE99C17094F3588000AAF FD0BDB3C8950A9891B94B0561E93123845BC1C0BC75483AD3687E0B57C36BA94 BF3AF490CCE4668F56DB8E3B0C7252FAFCCDF1A0F8CD7878566120531C40B6E8 497B8BEE031CBCE53884162F9516A14F0092EFCF89E9EBF947E55B0D05BE782D 80CE15C49C37E21E0BEA918C34CA1DE5A6B4BF3035CBCFA06D772F99552783C1 75292E45569BD3EB691E40F10D0193768A232B8F2EDD04DB2DEBFC42E20DAA24 8FF3344A699559682BEF5D4E13B72E928575031C063589E2372A165FCB58D651 1F7BAD53185AEF4EF632256FCB5B2E5D0E0E3EB800D1ACBC5A3F5F2286D76B23 1F3AB27E8DD911D1BE03641835531E79871333661DA01DF20F12DDAE0E7A003B 9F8D361AE4FB58CC4F9F7FEDCC8F3ACC61E24EAF8164FD191A407A9B8709AD33 264E7AC0961E679F84325F3FAC51119427FE2395BAE7F7E8B797964B01CD3F83 761E38E853E6BED094446DC4523A0E33C57E9686CED24E5270A637274B81BF60 EF51B2355AF2CF450148EE292D0F85B33DD71BA5DB0F60FCFA00A695CF440334 60F94D24386D8701F7D70AEA50A98AA112A97537C5ADA4463B8C53DA7B4DDAD6 2786D5A490128BC346F7675D76621CFDA2B2200A8954617A9C7E6F19155624F4 3C28A48120BFB11AD081F7B42E1D575AC96610543C17884991CD6ED4BD3461B7 281337B7C542E8C9BDA5B9E401DC5EBED7C1ACDF30C6582C2A8F8D13F7919AF3 CC500160D4A4FB8F5DB083E8E0433095B620F61C01D26BFFB2D545CA62037091 350E44F9588FB82C146CAFAADFCAB7EF9EA2EC97EF95A9EB83D827788C4A2F4C C289C4D36283C4BDE8B168CF86C5BB78F01734807EF85CDA7D30563283C126B6 491E273DECDB8FC4BCC7A8AF6D9736327ABB09CC2B21B60DA895D96F8AF18CF3 3EF3CFDEB0446A66E1EA7AB94AECA228DDCF1E6E59454D5D0610EF305DD061F6 662738E05E9C821B24672BC973EDC64A06890432680176F889C2484F9A034733 553673AFAD30E1ED824CD3C0977D3638F03D42B178BF8CF28975825086E2E63F 054422F3EDFE3F5268CF217AFDCAF03833F92A35F4A8E8B62043F62D1AAF6281 17CBDD744A65C2C2433F1905202A9A8BFF86DC019204CAD5D19B7FB43F53D5D3 E0D8A8A4F27AA927CCA0B8C9972BF7B8D69E57FA35064AF461AE42BFF738AC70 B851AF2BB48C72EE0B7C12322B70DE488B189D7422C04773EED14F31D9DB65B8 E5392D6BD2960C421DC6663929FA417397A816C282F8B30FBE16E7A420D65963 887CAB87AD1427F51FC9139267393E61D98A3DE7376A3970F9363D1930613960 BE0141858B18E0E8FFE4ACE75A837DFC537DC0844D2036FF5B3EEF53645C3EEB B0062DCD9A6873307DDBA0F9A19A26C02925A74D0AE86DCADA66DF9E8050A7F9 D4B507361EA6810F4D72D13E3A184C58ED3D11E6846C10F4A00A978824378D9E A833F96A60B20236E8BF685A72C0D92FC3041771DF24A29CCB54984174F8DBC3 1582C4F9A47754445D49D6A1AC4374B773E21B0A78C3870B1E301CD9AC8ADACE CE951F38522C947BCA5BFA52DC28400DE65F3B5F4E50B68C74FD475FEC71376A 6F7BAE0BDE2BF5A860EDCC538B8E77C20E8972C5FE0350F41FAB7E2009338AFF 9CB888694EA51F0F6E383B92349469B158FDFFAAC0514C9CF260B4B9209D9552 5AE5E4639EDE629E040470DF644F02762BB5AA11570C6909B3562F98864B44E0 F38FF259C74C29289A61DEFC48F5233313990A9E7A7758AC66E10BEBD3E7024D 39A73D340FBE713509E7F5A0066D7E752452F94006C554B78F24F17A1DAB65C9 DE6AB0AFA0581DF2D2351A1C6251F9CA3B94E8EF56EC7A272F034E3EAA47A6F8 215A87B8F0D6A4BFE98F80964CE757373E8588CC6E4168B1225EBA400C4DD2A1 FE867F79A78805620B33161A2F03AB844858ADFF24CF5916E435250728F646E7 D46BEEBEFF5C31CA924CC606620AE3B5A23A0C2CC24E2F164B20D056F0946F7E D2E28BCB9BE04D6F99B8BF798007F0A4C43869B980BDC3909E5576F38646C86D 21F942A5E3CC6815087BDB0A547459F1F523BC2EFFC304C4998ACF0CDCF3ECFA 3577B08F8F888B986D0747929DEDA7095C92929D187A28664BE533BEF6562B4E 1D0289B62FF81239E0F1DE2F276289E94BC2F731761125AF71122C2514CA18F1 4691EB23044A21EF07972B73E903F3538FB7DB6CE907209C24FFBE74E591FEED AEE563CE784D8A1E5D410572C0A00BFD64C909B70477D32F89308E09CC1B85FB 2CAF56856010726ACEE860DF98DDED4242BA3D6D6EA360E074EA2C98F0F43F01 BF0E4E26C68626F60BDE444504528CF50E9F47AE57BB149D89B634641AB41817 221B9CF21A604BE8865CE8F3530FED3CE933650BD72CC8A0B79E653F8FE40AD9 4B80EAF2B1A7F9194C7952C011A908C85187835F3CC1752CFF4C385076523ECC DDB1552F740DD2E605BE45B7DA20EE1AC13786670578A6A7D82FB2E4D42B6E50 BB29BCABCC1A60AB13945A3977ABE7E6771E3F8463FE755F171D38987DE08497 2AC8AD6761172A702A4F83B387918A1EC6574C8675CE9B6B54686729A60558D3 A6D7AC4EE05F0DDC90ECC1D75BFB37786313387CFFD5912B69E5BA7C15EB107D 27880FD1FE88B49DEF1E98889C389EDE04D0E957CC802BB1CD48D1EB6015509D D4B32005168AE527594B08916E68B2125DAD9D2DCD9B6D0B1C2761FF381505A2 9EE99F6A4F7ACC32B64E80853DE18F27743AEAB3B94A59D6DFEA924CB707238C A3FD1ACB2B462D6369E1512F74B60682EB1768DDAEF0DA3266FCBE98C45A72E7 A55316613E75BB4E7CD5B70364D539D2ED19093C9160B205AE887E2D3E803409 90A6BC4826D80CCD01F3D28935BBED688B7DB2589F13429C2E4E8756FA8ADF3D 24635304440A49FD0497E7E0DB9E0FD35033694BE02496F084D53857B8749C89 F26AD546A40CF24E18D03558F8D572F836EDCE7D85FA2597E9B0711ABDE0E60F 7B8B749F449A66E9DC8D57C7EB9AA28A480FF9BFD24ECEC487D8E1BDFD949144 2DBF7D70BF209F56F75CF2A6FBD5832872FA9D9872F29EA8C10A3295AF3B9203 1661727D57792B68909B428A589B5F9F3D383AB1045331CFA5366EE8CA259655 4642DB9FE9EF7590433AC48168263CDA4687C9AF4097F4A14D8DB55202985DB3 7EC5B628937CE5C7E6D172CE309D220FCFCB6734678EAB97C2F4A0B7AEADC1A0 E2F3CB6F56A0474BC8CF64E458452145EC809D444E0F172E51E0928406C827B0 98DCC0A71B0BCCC208562DC7F2069751EF557AA42034E6C5E1DF68549490435B 01CAD0DB8A1BD0D75574CCE9E9A779555542ECCC23E7E2415DCD870977D0B6E0 3A0CC6DF04A22B42DA738B8484C2D1BD02549D84B7519F357F2E5432FA9735C7 1455410E759CE8A3EB843EF0D8025197FD5E9BE62C4F20070CF7FD64A5CF838C 8489412B85A6B4C82CB4632F26D6AB35DE6A27F7F8704B2E037E89051D8DAA68 30B6AB315E7F254F9642E4DEB0A03EF42102B0387A7C2CB851C266FC6EA0F342 3A5EBD986DA923464CA89ECA7E834D3EFA59BB0D05FC65C3048558614B79A28C EE03DB6F853F87092AF68FA5BA5B6C144FE0678CA40C2B375F728359B83A6053 43B737B8650A473DDD7CEF3DA218DD44EB7219537E3F59D5CC6E9F36EDCBB9AB 61196601FEB4FE8C1401C0E2C6EDF089C235ED39A10757A3F9726886E739FA72 024515CE027D5AD3D3C9B7FDDBF3A18DA2BDC8C0E2397987B26216C3BCEB4AFB AE0E3987C89989881B44641B6DCFE59DAC09006E061D332A262578F31BB1B2CE DC17D7C335BB6F34380B18D7D9C29C6979602ECB2D73373932A04B660471A4FF 0E00A7B37B274D1CF974F49D91A169C46B079E9942A345C74C0AE5D7AA8172AB 5806D37BEA327F96269CAF0EEEF0192E64B8D47204CE3D7F9E34F8F8E496276F 7945D5798DBE585F3DB7A61DA13EF980E3925E177664CEAF8C4F8F5857485CC7 75413C2C00C58947274DFB0FED7BC33511EA956FE6792BE9692E22B6AE423224 405CF3FA72B4AB8845F384B13A32A8B4805991534A4ACAEEE7AFB1B364F6A7AD A14A0E46F7D7BA66EA1C6C7A38C82EF7920CB5F64AE0EF2906ADD43F6E9DF952 A84F76DECD256D742A2AE8317194E362E891FEA7522B47AB4CFDEB5884804C3E 72A3918B9263B6AB3D3D86EBFF7F74702C8EA691D71FB516422EDD3CD32BCA99 106C2AEB18C06E9247239C65C52944AAF994A2679B037F649551DB507287368C 62424FEAB63D24606604F0F636065B084EFA6A36FC593AF661A3A4B3391D4D4E EA15090B1BB6386FA324376D91B82D87B7C18345915392EC05FA1C64A3CCD5AD A4EA9A027D9573A35DB0D97E7E4440BAA4A8C72499F2B61382DADFDD4EAEA106 C551DA6E8CFF24E163B41B341529629BE2970398CDD0F1003B4A13F990D15525 EBB428326714D7235EA0FC8A5CDA3AE4E7E27E35CCC337B0675144ECCF49A30F 5634C2334955E3DB4F114FD210273E32A9F82A748524EF791D83E6B1358032D8 62C8637865B97D3F42CCF13474BB1EFBE230AC43C7360134511A0FC6F8EEF589 FB00EF2C530B2099BA135826861CADC9C0D62247453DEDD15F0F357B38DCD80C B03E0F3122FDB50506C0CD171E1C7FC6CA64147DEE5D59E6CADD39F8F13B94A2 8699DD3D21E4C016CAAAAB7B5737B51924160262D274EDD1947613C3D21F1F6E BACF4FB996EEAA5196A3C947C551D4F4466D40839B9C0CE17BAB62449DD3EF87 20BF005139339BC2482AF349988FE0F13E2E8BAB06EB6DAD42DECCC71842812E 5BDABAB6338CAB337CF90F645AE5E47757AE2F80E1AEC16DA5023D6E01F43B66 A3D06E8F5F092B98B773E962173BF3866F2A99764430F2C0868003BAE1467ABD DA5BD6400067BEE0D88EB800543C1B1EBED42CF3928915382D014BBA42035667 54C1D3137091F8797B40B8E879134B8887540338C2990492C05A50FCF0FC9986 96D71999900C8FAC084A2542C2CDCE00F087CF448CE6AB54703ED425A27B35B8 55B3C44966D02C566A8D903376B0C69CCFD8971A29BEA1564168D11255CF4361 5129972FDE04EF5E371260459078C6A14A6C525FD8994E21A934D8FB0ABC5F4F B40F4A318483C2A467400697119C51AEA36371DC706D5736D2E3BF0D73BC32CC 8BD45D8539FF0E6E17938AACB978B61C6A6E3069AEF58BC5C3AA0F4A47788962 1BB31C48350F90B47DA0E0A7F1037B33A580E003BE0F956A4B496BE60DA94CE3 C0887451BFB07DB63D5538CF467A9EF0F11F74B1D84B60FC4BB3FED20693C35F 3B5837FAF3708A0EF70BF5231C8A8CAEF058CB42AA267D2EA0131AEE2690C578 842236EC82797740DEBE7379B24CD520F8849590AA17E72F1DC2E91E1FFCCFC4 526AFB789AD3DF53DFC6E74ECA00BA6609375F557988919F40CE3C3EDB44CAC2 3814BCE2B64233901306F97893759585FCBDD80E96105EDA8C307C2AF048D52F 91F6378D2604752A1264834F23F52E8BF5C1724057A7B5C57A75EB5F02954128 313E36483046F70D10ED98CFA141E81D7F25C186AAF0AFE1F894451CD0F35E19 2CAD0EDB30ACA9810818EC01E3F3D1544A9D2E62D2859A44AF86C72FA2FE4BDE 32C5AD23E86E553836C40D546D7F5E8622D42E60D696320DC53A02F3E9C84DDC 08107208920C3CD613269E7E392EABBE538E880BD4719C01DB70D6BF3FFA7A7F 647891F3BE1B7B34669D01FF6D7D1B892C18801BC89F2EF07F634939CAD39A0B 10954B5117CEEF959FE1A79CAB71A4853335FF72E55ED6DA5928229EC64F311F 8E38256772E5F63F46EBEF384F6229B808B6EBBB497B431092F0A26AD946C376 1D1636B24C771DAD70AC1CF9140A4A38D838C5D13BFEFC7A698046BF0A1ECF6E 916FA642DC65B5C815E5CCB7711D67850F55ABDEB55FEFE56FC8F8DC77C8FA27 D2F0EB9F859EAAFFCF6060EC6D6388B3C709981EFC3C1C7C62CB55826BBD703C FD1EDC5BEE7434A6F08503540D0C29F142C11D8E66B44A1A1F2CC08BDD884889 8E6DA1393D82A69CE74ACB644D6E8A4883BE728AAA20726AD2E4C4612D74E470 15EF5ABAA7F5BE0CCAC23FC84F895030DA2AC190482B242AB8D633A956748760 7976D448A6F514F26927C0E4DEC39068AF4337EE79A02EBE1C87077A3B6CB2EB FB681628E2CC25E13A0A26A98502471ABF184E4632C0F2F44A45C982E0A865A8 0EA135004EE08B49019114F0B959A334B92C18AA885A615D6ADF5300725C0F3B BD75FC2137FCDF4DF6DBA9EC4D63DEFEFA1BF6EE87792D8255C87722ABC6F37E A9BE7C46A5DCD7109D654CD34AC9EE728844C52019FCC3BD67D92BD90B61660F 7F019818CB5CC5881DA7FDD30E3B8BE0E684CF6D5EA4D7455120ECB858B45F2A 517AEBCAA124510D759780E7849E9389A407762406B85141688C3A8680B40D3D E4A82A4CCF7F0E597764C24F2126C83967ED300BCED2A801A04F8C6902B7C235 C800270E4F6F10748EFD2D03A1BA172A2FBE36E715F8E1BDDBF448D37454F1B6 9D8BAC3E2AD00C8A7F5FFFE304887871BF7C3C3538311211B0312AE0DAEA26A7 3CF2964D4ACA8E33C604B903CE44F430836343EF1ECB191ED6684C31732C2D9E 6DC37E54C362A3FF25FD37F5DBB4E64FFFA714C792F6281F11FEE3286102BADC 039DEC243E8D472E71FD8B918A4C6C89040E364CBB35B18C277EB00F4A93CE51 D44B5385D7323CAC694FDD4FF6B5EA26EEB36BBC1DDD695B4815189ED0995BB2 CBABCE4D2D45995EAB74B0138C70F7F11EAAF6504C0CDDF70C31652C2C632D85 5EEFA79CD3AF85F92673F895003E2A78150AD20515408E5DF0B680BE770D88D1 39E32F45ED29FA2D6F8B1BDB6602945338DCACEC76D9F6EC6A3B187998833D2C 6EC71997BC8EE55AE18493A74382841776D7615B6DF66D3A24FAA639FA5F4716 8B4B3FEB674C48A5FA76D51E026F9A883825E77A6908FE3F2E5D1BC76F6B4430 B773EBD192B3BA15A17FEE6C3E2992682EA43C6CF8FFA3F181A3505076356F05 1A5DAC4BCA39E5211ED1FAFE9ECE395F8C18F49DF85F13791DE97E30666AE744 16F77FD0EB0EC8C970EEB3DAEA263EB092ED5A6D1E78B0CEAE4EF9A647F57DA4 88DF3F3BD59811BB9976A665A1AA9F5C83FD7DEC4263F47B1832572FC07B6D4F 5D762ADDAC399A8E03C113D008B6CACC220E98C39D6744EC178CFE2731901365 4DC45E0DB0F66C9E1B14AD6BADB2EB7AD640E8CE51B385F372F0A187A92107B1 422D18A43A06560C9B2027F6647E17F245084D124CF19769B4250351B604CCA2 6B68518B272057EA0D95D50162CCAB9E8CD6B7C136C5DD37862FBF56F009496D 11F2BF6C507CE843B535B6B9F00F403374D698FB106D4652B830F7576BD05A7D 476C6A1761E5F0DEACCBE23B910BA0C0858ED1A0DA8DF1594B6E4C33FC437E10 1A59DE563232329FFFDA6A924A4AA8D5C440DFA5F08DB10F5250CCC60C4B3801 CA43357A4DA445496B3B015457730C5C351733F28A3C89810584C4DA473D6068 927C448567DECE13AA7F369E67727E75F0B0291AAEBE4E93069C6B872DB970A1 52EC2DF9550759622B03B917D8BADD7C9839B910B11CD715E89E72550AC5B9E4 F8ADB53D51717BCF1626642425D2C81EF766A081861C73D2EB9E4802C737EBD1 867F3DF611EBBCA1D91F87F0159FF25DBB2A1044D349E731DA50DA73B93F1532 151BCE08D66DAA51F1C6271F70E5BB8B2C7E57E384C9133009193E51B60A6EFB FA510B954E93283A962780A727647C9DC9E33F44E53701D621FEBE411EAA3974 C7C3EBD6EFBF9CE7C8F330543506DA54B22671C174AC30311BF64CF668240B5B 254B0B070065E562BD9740CF57CB95A321B469F52650C5B1BB2C82075DC469E5 9808023FD86DBF6A6A94178023B3B492CC3F5EA2DD4715A514D3CE97F0D62D0F 165988FED0F475304D689BAABBF1F504D2DB88415FF5D1D6F795882B32207FA7 B64B491FAA3FA69019802DD8ADFC6901CFD87FA5554EB225D12D64F6CF92168D 54D5C07C15210970E22C65F46912CB0BC87A1774A861F64CF17827C5201A07F4 396B4CBA82A1E8D0A34AE2DE8225706B836CE9B1B4F856B38A236F4D4006ABD7 B38EC1870337B0E0A530F88080A02AA3E4970733F2728F52591BDE0111C878C8 375BBAE47B35AD56A286BC16FF0C2A60576BA7AC03760AC76AE9BBAFAE017324 772D4D653B41174CCDED012FEAB1B1B8862F499720A22D5956A9FCF36EE63054 944CC77F09C2878DC994A2AC930C09FB2B47E3D261BE68820F781451CDDA5194 F707F4BD553B9FC4B3F4154F3BD3B58D086D24CD2500CA03D0A65827FBB18B3A B36671BF548BB67207793E739B5F1333FD8DB03821DD447552BC1D43CF5DED1F 1C537B35983479628A3DCB3A0B0D97BDEC306D6B7638F193D7616DFCBC36324E 74EEE7D1877EB886E3FA5DEDC96483B60C2F2EC330F75797FD7375105E758565 2F0F7DDAF68CC212DDBC44767BED607B0A13335CB7DDE2E9ACA6D2E05996C8D9 DB1FB27950CCCC0FD5ABE810B23477AC67844C38830829FCB8672E6ACE4279FD 629DCC5AA1E8D580DC1BA87048A71BC12367BE13874E0BA0FE4C5EFFC20D53DB EF8B0C6390A1817EF6B70C36EA2FB84A5A08E6128155F2E6B90146FA1796B65D 541CDCF32E77EEC403A075A50154254A01C80C73FD11647B03F4070C8CC0204B 119A6C7CD3254A4D9463AFBF47770101E1406BC568D5338F592EE343C373F1D5 F9746AFDE1D7CD81E8DEDABA1198D32F86792E0C1E451A761CF030D267F2AE3A 767EB5475DEB23666F7F1FA8B97F75F682C59264190C58F3120AFD5950610B87 8AB11B3B3966976B4791F5C46A81BB26A3CD376F70DA860364646C4B209E69FD 10DF810438C922AF42BC9694D96A6737B222FF8471582E38169DF4480EA65E5F 96FF6918AC2F64BA92041F02263F37482A473A6B8B2F593868E4DB9C165CF184 880ACA4232977D5F3D6D06E9FC224EF530221BAFA7CA5EA2EBFFA7D488D16595 C46E4BDD8FC9A275D9F51D57CB56511DFA623F5B6DFFBEC29D82648729204AFC 3FCD66B9B94A9271867B92458F333BDEFF7059EBF190FA91301A716BDBC921BA 7440625034CC608E15138A76A0D8A0DA670775D9277C301A771EDC9EDF3817BA BC5FCA036CCD14E22F46DD8731A2C28A4CDF7C513B3182AC05C353E7F3EDE043 83DE642E1B910AC34A92071C43C97CF10CE5F08C062B5FABE52F58A7BD7CC56E ACF6E3949B6DDD5930166EAA40F6E8A3584BE53E9EF6A5743A383006D1E618DE C76B3641EF03377F78EE698598BFA119EB1F83C1C5D6EF5E96B8D00B251B1FE7 5D2B852206B79BBF0A78F8CD344AF1A6FA525AC8008104912B072EB8510F1818 3E14644D38C8C077F82303C2CC3BAE423B63E0F134AF9B9A8A7FC939EC0183A7 93A5A64E25AC95D120F9FBBA7CEBC1A5CB23FD4E6800A41D76B0B3F8E29EA014 5FA9B563908B285F6D85E36552DAEA673526D22AE1C7579B81B8DB9E13D83B4C 1DB96BF63AB63DF108E1F4D3E646E4DED009D05C3DDF4114C73C28E7554D311D AC65EA35B231E35228E8B270D92B2F9E3D07BB88BAB2B719F268D3A570F73511 71854B3FDA1185DCF724C198F7096E336BE80CEE91182CB21DB42AA86E7C0DA4 F8D7FDE244E266F6A681FC7BC500618BFC9916389E94E77924AE482E2B1D76EB DB71F163DC37878817EEACB1DC5AA41EB47380EFC61F8CC5A82C9CDD471867F9 143AF48F177ED189D5A64854E1082B64EA822A5F66D0A56A9BC7BF4C34BF81AF 242D1F9A6BF9A168DF668039F051471888ADF7F322A34B6CFBF60415D31BD010 EBE10EC2774E3DB40B2F3AC6753A2F0F09A3F609CF00819A0EF3702121841A3B B32D7907460B09CE183E89A7BFEB0FACD162DFEC50AD8A32F8673FC6588FB874 6E497196436515822482E02765162914581A7AB5A5C5F11C346C9F4C6FB5D236 F8A8DE5E254DA3B28294F2602859C947C2AEFFECF947BA95FF516CE393CE4861 F8A334EA2B8A87D44542748F7A72DDFE718E0C0AC8A4BC6CC17E2FD5BD27E692 40520A0E94C0FC0ED30DA8F4480876FCD3AA1E321A99BED4070BBB05E1CC933A D4DEBB45F4F42E1C02DDF6CB7A998A519A16AB81711B66C74BA75DEC1724A787 51763A882021F1B203460E47D2525D86293C033C9371B05CB3F39D75DD305461 A60102E14D130FA015A8EC74228DD2834D38E6D49842AB405D1C3AA7F70FDA1C 2D1749FC44204D4678EA149A9A1739648DB67F035DC1CF11BCFB7925E6FD96A3 712E80B375278A0AFD9E06397AFFBFCE788CF0C5C10E789785A9E056FE756BD4 688F2DE7E08A179D294C886C6CC6765EF65E566303B50DAA033E0CCF400B387B BC0910238DFB8EFB57AC3326C264F0453C275351E8F1AE4CC5DD1B11875DEAC9 E6631AF7370E25E40E369546A156B1405DFA3F61D71139E68188BED7CBD4025F 2B22D7A0657AF131FEE2062E21BA8BA8CB3678579353C6A327F6313555FB5902 B27A6EE09F411C906CE615DB7E8DAAB51CC9C3F83A64F17700C6B3C25990A1D5 96C2D72AA576D623BA62D592978A7B5D15A3F1AE790D15F03173132793596F14 FD43302144F0C6AB8344B750A8CFE52D2AFBEEBEBC95E899ECF0225A5EF41DBB 90C62619BB2BC641A487E6C9278A0F9BA8B0119B9D569A03702F0FE1E93DF9E5 B9E85927EE9118520C6F3835B590744766412922E1F67B7CCB8B86611F9BEF73 5F302E5F2CD670E3E0A6A0D882488309B1BE22783AC71A14B0E3C3AF464540E2 025E4D62383DD6B6005D518ECADD44DFF9AB7E574C9883790DB166FB7F5D9715 4EAF53AA3162CC3840FFC54D91897E0ED8736FC0B84EE5F2343E95C071A54E58 2F3BDF18666142E4B2685201083F251E38CB8004309EB5A85F69C7768A92CF4A 5A53609CDA6DA73106D5F7EAC8C9FF8FD7A486175A8E8560CE965DE0211AEAE3 FA169E08B2B8CABEE047CE0B9B81F309BE32110E10234F653DED7DB2661852FE 3A4481754BDA745EC035AA3B23DB36C1439556E545982FDF00589C0B1C8992BF 84BEF80F22513C88E6D52FE48D76729547C6B3DD66EE73C8D0CAD4B3F1581B99 E1C2C6FE172A2062DE13FF9365DF55F4EA1AA97DFC2A523D8941354721B3B1B3 67863F80682F47573BEEBEF363A7189D1E4B56032B9E6C40EFFA8D4ABE743497 3116B06ED8CB4448607F896CB13C642D6947B62EAB81F3BD0D41D11357B18A38 4B217819F1BF6DD4B1B14E2FFF089BF9B0C10AD4C4A594DBA7DAF712BB403F27 E8D152FD851BEE7D4D263FFDCDC8176EF76B9C28F732BBDFF370E1520D1CECFA DF48B9BB1B8CB9809CA5DA90731BC0C86CEFBF0D18CB0930CFA55FB84E7C6830 8EDDEFBFD1E82E021D4FFEC3680889A4ACA1CFD6F69D33A0364AAFC3799802AF E0DBEA924B747B6EDCB102E4DE489B258AE66E3780F597D5FF6CB92A4691FC7C 5C5ECA772CBB0B484F15D3F90C3087415EBAF45446FEB52A2F01926AA2F561DE 9F50ECBD94E274D45DB6E9A017F98E2A6EDCCF17F12CE873668A85909295D63A 24C333BE961E281A50310BED4293A972B035CD0991527D36A41FC55682E1336E D4625BB23513FC9E0469720AF85A534AC3A91D28392E115689DFF37B0A6C6BF5 1915C19766BCB3CF04E4ED3EDA7ECFE152A79C0B6F90DD64CE97F3345F2FC81E 47EF426774F07D1D45C748E797D1E8A455B34DB0B7782918EEC3F0A6B683798A D959753C7B1E6CD04DEBFEAAB5696AF93E6C9D69F0F8669347164750AB7412EF B9E37D151526D16F6C155C98CDB3FC327E84A91493C93D243D3CC52C1902FFF9 EE53A3E976934E6AE0D1E5D8557C2C1709408F628A76EC0DE4F4F96A82CA967D 7D9EE8D35735890B49E263CB3DB8CF732E4D6CF9D3B4A7F32AA230D5DCBB5584 448E4B64D9656618FD8E65C94FE03A5EE14E792159381F2D9696D34CBF5569A4 66C7E555DB4D28627D507A21B3F2658CC296ADD6AC6F95B59DC6EB54591BE9E3 16DD5D5B76BDA0B4AAA704AD3E55DB12E38F80AB014808F90C041222180061E3 ECB91D9C05B1E697B4E0DBA529E5179606E817831113E0F7098D3F7DA9A38391 221A3187AF4D2352A1DA044CD9597568A44F733EB0B6A835E5EA64CF81B9C7C1 6E04CA534720DFE775EC2808EDBF4922DC8704D7D01ABAD32E21FB22F56A261A B9A71144D314E2E712175308971EAA4F8CBC10351E5E5A942A2938F44868044E 3DAE0AAB556D321B0F7F2DBCD10ED3902F395DFAD2C1A48968E260DAB5B66960 F87CF4C7E4BA880C7569FBC0FF7F730D954D3957157CE66B06B3E52A2A4D292F 0260DE9B12F5F2D7997B8FDB0663349161DC9BE5F892E854625B748F9E83BDB1 94E75C6B2C9ACFC0FBD1ED986C82D42EE4F71799DF3E09EFC8BF79E9CE3BB638 9EF260A7EE39BB012BFD4FD10CD0B8D6681FDAF45C218FC350F994B56A4B3DA7 C2936E7101F2C3E4806A669D1D83F1D11E9F3F82CDAB54E50B790EF4D9CE61CF 556CC5CDD83D1680E446B197CEACA03C2D8F669E86C1E7D837E14670D232F750 38D40C6D32E530888869B70ACAC9A6B0A0405F67596AADBCC2248BFF1C03BA53 927D830DC21C4D7AAC6AAB5C7F9FC212E6419ED28F92F5663FC4CD1BEB5FC60F FD75962AEADCE0748A89406182F3EDF6A48BF5E3C2DFBC16A3DF78F1D9BD3B95 52179359DFD77AAB49204C9AEC10C37AE01BF2897A98C9D86CAD9B7BD8B86BD0 20D7AF2EE0C433B698A11F8592F4D8973CAE1568CA943E06CE03F0F57F88A2C3 731A2A12D36056D81843197187E7B2CD3648AAAD9880172BA838AE174FE7631E 5D2E7F8F0C5B8B44840CCDDD8EA3F07FEE087D6B644F46115C24897418D36D6F D83D9BCF77296661F1C2197B45F129429CAE0B11F6EA1E44E93C120714579B6C 2D52AF343BA4CBB439A1FCAD97AEAE12D02D26DA2780A626D0FBFCF958CC3E61 12F0CE4548E24B0E16B7B05045ABCFF7983548B5C6AB0D22C3DE703BE424D728 59FB65F3ACAB31821DD396B367982FDDB0F6190D6CD168AC0A45CCF19B87CF49 F4AF4ECA757C4664621B2899655AAA1015D02182C9D8C0148F0E7FA280CAA70C 1B583BF3A9B072F0F52A6AF5C9BA92250567F9DC79A9BB00381B24366C08389E A4B72277324FF6D492A1AC7F7BBC64605B5533B755D623D8E801BBEE58D29346 6FDC5F7BD63A31BE7D8EE85AE2EAF79B7703B9976CC898038743FCABD748AD77 09D5D227CCA44A25F3024A5A5F11A7BE9CE8181F372B2D5FC6D769124E6B79CB B70104A450258FA91431903AC0863D5B177F27 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (gawk.dvi) @start /Fa 209[24 46[{ TeX74afc74cEncoding ReEncodeFont }1 74.7198 /CMTI9 rf /Fb 167[62 3[60 46 2[57 1[62 76 52 1[43 1[62 65 54 1[63 60 67[{ TeXf7b6d320Encoding ReEncodeFont }13 83.022 /CMR10 rf /Fc 134[39 1[39 39 39 39 39 39 1[39 39 39 39 39 2[39 39 39 39 39 39 2[39 12[39 16[39 20[39 6[39 39[{ TeX09fbbfacEncoding ReEncodeFont }23 74.7198 /CMSLTT10 rf /Fd 163[35 9[52 6[55 5[48 1[51 50 53 65[{ TeXf7b6d320Encoding ReEncodeFont }7 66.4176 /CMR8 rf /Fe 150[30 30 6[47 97[{ TeXbbad153fEncoding ReEncodeFont }3 74.7198 /CMSY9 rf /Ff 135[41 3[30 30 30 1[43 38 43 64 21 41 1[21 43 2[34 43 34 43 38 97[{ TeXf7b6d320Encoding ReEncodeFont } 17 74.7198 /CMSL9 rf /Fg 138[56 1[42 4[56 1[47 2[27 5[54 1[56 97[{ TeX0ef0afcaEncoding ReEncodeFont }7 90.9091 /CMCSC10 rf /Fh 134[56 56 56 1[56 56 56 56 1[56 56 56 56 56 56 1[56 56 56 56 56 56 56 56 56 4[56 5[56 2[56 56 2[56 56 4[56 1[56 56 56 56 56 56 56 3[56 12[56 56 8[56 2[56 56 56 33[{ TeX09fbbfacEncoding ReEncodeFont }43 109.091 /CMTT12 rf /Fi 136[74 11[74 3[74 5[74 97[{ TeX09fbbfacEncoding ReEncodeFont }4 143.462 /CMTT12 rf /Fj 134[65 65 89 65 68 48 48 50 65 68 61 68 102 34 65 1[34 68 61 37 56 68 55 68 60 34 5[75 1[93 127 93 94 85 68 92 92 84 92 96 116 74 2[46 96 96 77 81 94 89 87 93 6[34 61 61 61 61 61 61 61 61 61 61 61 34 41 34 4[34 26[68 72 11[{ TeXf7b6d320Encoding ReEncodeFont }66 109.091 /CMBX12 rf /Fk 133[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 5[48 1[48 48 48 48 48 48 1[48 48 48 48 48 3[48 1[48 48 48 48 48 48 3[48 4[48 4[48 48 48 2[48 48 48 44[{ TeX09fbbfacEncoding ReEncodeFont }54 90.9091 /CMSLTT10 rf /Fl 141[31 2[45 9[40 101[{ TeXf7b6d320Encoding ReEncodeFont }3 90.9091 /CMSS10 rf /Fm 129[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 33[{ TeX09fbbfacEncoding ReEncodeFont }93 74.7198 /CMTT9 rf /Fn 128[38 4[34 41 41 55 41 43 30 30 30 41 43 38 43 64 21 41 23 21 43 38 23 34 43 34 43 38 21 2[21 38 21 47 58 58 79 58 58 55 43 57 1[52 60 58 70 48 60 39 28 58 60 50 52 59 55 54 58 5[21 21 38 38 38 38 38 38 38 38 38 38 38 21 26 21 2[30 30 21 4[38 21 18[64 43 43 45 11[{ TeXf7b6d320Encoding ReEncodeFont }81 74.7198 /CMR9 rf /Fo 198[33 33 33 33 33 33 33 33 33 33 48[{ TeXf7b6d320Encoding ReEncodeFont }10 58.1154 /CMR7 rf /Fp 145[55 42[65 67[{ TeXaae443f0Encoding ReEncodeFont }2 90.9091 /CMMI10 rf /Fq 129[62 1[62 62 2[62 62 2[62 1[62 1[62 1[62 1[62 62 1[62 1[62 62 62 62 2[62 2[62 1[62 4[62 2[62 3[62 4[62 2[62 6[62 2[62 1[62 16[62 8[62 34[{ TeX09fbbfacEncoding ReEncodeFont }29 119.552 /CMTT12 rf /Fr 133[40 48 48 66 48 51 35 36 39 1[51 45 51 76 25 48 1[25 51 45 28 42 51 40 51 44 9[94 69 70 63 51 69 1[62 68 71 86 55 71 1[36 71 71 57 60 70 66 65 69 6[25 45 45 45 45 45 45 45 45 45 45 3[25 32[53 11[{ TeXf7b6d320Encoding ReEncodeFont }58 90.9091 /CMB10 rf /Fs 136[51 11[51 3[51 5[51 97[{ TeX09fbbfacEncoding ReEncodeFont }4 99.6264 /CMTT12 rf /Ft 209[43 46[{ TeX74afc74cEncoding ReEncodeFont }1 119.552 /CMBXTI10 rf /Fu 133[72 85 85 117 85 90 63 64 66 1[90 81 90 134 45 2[45 90 81 49 74 90 72 90 78 10[122 124 112 90 120 1[110 121 126 1[97 2[60 1[127 101 106 124 117 115 122 7[81 81 81 81 81 81 81 81 81 81 3[45 44[{ TeXf7b6d320Encoding ReEncodeFont }51 143.462 /CMBX12 rf /Fv 133[43 51 51 70 51 54 38 38 38 1[54 49 54 81 27 2[27 54 49 30 43 54 43 54 49 10[73 73 70 54 72 1[66 76 73 1[61 2[35 1[77 64 66 75 70 69 73 7[49 49 49 49 49 49 49 49 49 49 3[27 44[{ TeXf7b6d320Encoding ReEncodeFont }51 99.6264 /CMR12 rf /Fw 131[93 1[37 44 42 60 42 49 30 37 38 42 46 46 51 74 23 42 28 28 46 42 28 42 46 42 42 46 9[91 1[68 65 51 66 1[62 1[68 82 57 70 1[35 68 70 1[62 69 65 64 68 18[28 33 28 4[28 5[28 20[51 12[{ TeX74afc74cEncoding ReEncodeFont }51 90.9091 /CMTI10 rf /Fx 131[91 1[40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 1[25 51 45 28 40 51 40 51 45 8[68 93 68 68 66 51 67 1[62 71 68 83 57 71 1[33 68 71 59 62 69 66 64 68 6[25 45 5[45 45 45 45 45 25 30 25 2[35 35 25 24[76 51 51 53 11[{ TeXf7b6d320Encoding ReEncodeFont }65 90.9091 /CMSL10 rf /Fy 158[56 55[91 16[71 3[71 4[45 1[91 12[71{ TeXbbad153fEncoding ReEncodeFont }7 90.9091 /CMSY10 rf /Fz 129[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 13[48 48 18[{ TeX09fbbfacEncoding ReEncodeFont } 96 90.9091 /CMTT10 rf /FA 133[60 71 71 97 71 75 52 53 55 71 75 67 75 112 37 71 41 37 75 67 41 61 75 60 75 65 5[37 82 102 102 139 102 103 94 75 100 101 92 101 105 128 81 105 69 50 105 106 85 88 103 97 96 102 1[64 1[105 1[37 37 67 67 67 67 67 67 67 67 67 67 67 37 45 37 1[67 52 52 37 105 112 67 112 1[41 20[75 78 11[{ TeXf7b6d320Encoding ReEncodeFont }82 119.552 /CMBX12 rf /FB 128[45 2[91 45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 1[43 1[71 1[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 1[45 35 35 25 71 76 1[76 45 25 13[45 45 3[76 51 51 53 11[{ TeXf7b6d320Encoding ReEncodeFont }92 90.9091 /CMR10 rf /FC 137[102 1[75 1[79 2[97 108 161 3[54 1[97 1[88 1[86 1[94 9[200 6[132 4[152 3[152 1[127 3[146 6[54 46[113 11[{ TeXf7b6d320Encoding ReEncodeFont }19 172.154 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 150 1318 a FC(GA)-22 b(WK:)65 b(E\013ectiv)-5 b(e)65 b(A)-22 b(WK)65 b(Programming)p 150 1418 3600 34 v 2553 1515 a FB(A)30 b(User's)h(Guide)f(for)g(GNU)h(Awk)3380 1623 y(Edition)g(3)3324 1731 y(June,)f(2005)150 5091 y FA(Arnold)44 b(D.)i(Robbins)p 150 5141 3600 17 v eop end %%Page: 2 2 TeXDict begin 2 1 bop 150 1018 a FB(\\T)-8 b(o)39 b(b)s(oldly)f(go)i (where)e(no)g(man)h(has)f(gone)h(b)s(efore")g(is)f(a)h(Registered)h(T) -8 b(rademark)38 b(of)h(P)m(aramoun)m(t)150 1128 y(Pictures)31 b(Corp)s(oration.)150 1701 y(Published)e(b)m(y:)150 1945 y(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation)150 2055 y(51)31 b(F)-8 b(ranklin)31 b(Street,)g(Fifth)g(Flo)s(or)150 2164 y(Boston,)h(MA)e(02110-1301)35 b(USA)150 2274 y(Phone:)40 b Fz(+)p FB(1-617-542-5942)150 2383 y(F)-8 b(ax:)42 b Fz(+)p FB(1-617-542-2652)150 2493 y(Email:)f Fz(gnu@gnu.org)150 2602 y FB(URL:)30 b Fz(http://www.gnu.org/)150 2847 y FB(ISBN)g(1-882114-28-0)150 3310 y(Cop)m(yrigh)m(t)602 3307 y(c)577 3310 y Fy(\015)g FB(1989,)i(1991,)g(1992,)g(1993,)g(1996,) g(1997,)g(1998,)g(1999,)g(2000,)h(2001,)f(2002,)g(2003,)g(2004,)150 3419 y(2005)g(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)31 b(Inc.)150 3773 y(This)e(is)h(Edition)g(3)g(of)g Fx(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming:)40 b(A)30 b(User's)g(Guide)g(for)f(GNU)i(Awk)p FB(,)150 3883 y(for)f(the)h(3.1.5)h(\(or)f(later\))g(v)m(ersion)g(of)g(the)f (GNU)h(implemen)m(tation)h(of)f(A)-10 b(WK.)150 4017 y(P)m(ermission)32 b(is)f(gran)m(ted)i(to)f(cop)m(y)-8 b(,)33 b(distribute)e(and/or)h(mo)s(dify)f(this)g(do)s(cumen)m(t)g (under)g(the)g(terms)h(of)150 4127 y(the)37 b(GNU)g(F)-8 b(ree)38 b(Do)s(cumen)m(tation)h(License,)g(V)-8 b(ersion)37 b(1.2)h(or)f(an)m(y)g(later)h(v)m(ersion)f(published)e(b)m(y)i(the)150 4236 y(F)-8 b(ree)23 b(Soft)m(w)m(are)f(F)-8 b(oundation;)25 b(with)d(the)f(In)m(v)-5 b(arian)m(t)22 b(Sections)h(b)s(eing)e(\\GNU)h (General)g(Public)g(License",)150 4346 y(the)30 b(F)-8 b(ron)m(t-Co)m(v)m(er)33 b(texts)e(b)s(eing)e(\(a\))j(\(see)f(b)s(elo)m (w\),)g(and)e(with)h(the)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(exts)31 b(b)s(eing)f(\(b\))g(\(see)150 4456 y(b)s(elo)m(w\).)41 b(A)28 b(cop)m(y)g(of)h(the)f(license)h(is)f(included)f(in)h(the)g (section)h(en)m(titled)h(\\GNU)f(F)-8 b(ree)29 b(Do)s(cumen)m(tation) 150 4565 y(License".)199 4700 y(a.)61 b(\\A)31 b(GNU)g(Man)m(ual")194 4834 y(b.)60 b(\\Y)-8 b(ou)31 b(ha)m(v)m(e)h(freedom)e(to)g(cop)m(y)h (and)f(mo)s(dify)f(this)h(GNU)h(Man)m(ual,)h(lik)m(e)f(GNU)g(soft)m(w)m (are.)42 b(Copies)330 4944 y(published)29 b(b)m(y)h(the)g(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation)31 b(raise)g(funds)e(for)h (GNU)h(dev)m(elopmen)m(t.")150 5322 y(Co)m(v)m(er)g(art)g(b)m(y)f (Etienne)h(Suv)-5 b(asa.)p eop end %%Page: 1 3 TeXDict begin 1 2 bop 1213 1395 a Fw(T)-7 b(o)34 b(Miriam,)e(for)i (making)e(me)h(c)-5 b(omplete.)1240 1614 y(T)e(o)33 b(Chana,)h(for)f (the)g(joy)h(you)e(bring)h(us.)1181 1833 y(T)-7 b(o)33 b(R)n(ivka,)g(for)g(the)g(exp)-5 b(onential)35 b(incr)-5 b(e)g(ase.)1197 2052 y(T)e(o)33 b(Nachum,)g(for)g(the)g(adde)-5 b(d)34 b(dimension.)1293 2271 y(T)-7 b(o)33 b(Malka,)g(for)g(the)g(new) g(b)-5 b(e)g(ginning.)p eop end %%Page: 2 4 TeXDict begin 2 3 bop eop end %%Page: -1 5 TeXDict begin -1 4 bop 3723 -116 a Fv(i)150 299 y Fu(Short)53 b(Con)l(ten)l(ts)150 540 y Fv(F)-8 b(orew)m(ord)24 b Ft(.)19 b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h (.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) h(.)f(.)g(.)h(.)f(.)h(.)55 b Fv(1)150 681 y(Preface)34 b Ft(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.) h(.)f(.)h(.)f(.)g(.)h(.)f(.)65 b Fv(3)150 822 y(1)146 b(Getting)32 b(Started)h(with)g Fs(awk)26 b Ft(.)21 b(.)f(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) h(.)f(.)58 b Fv(11)150 963 y(2)146 b(Regular)33 b(Expressions)11 b Ft(.)21 b(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)42 b Fv(24)150 1104 y(3)146 b(Reading)33 b(Input)g(Files)18 b Ft(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.) h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)49 b Fv(36)150 1245 y(4)146 b(Prin)m(ting)34 b(Output)d Ft(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g (.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)62 b Fv(57)150 1386 y(5)146 b(Expressions)40 b Ft(.)19 b(.)g(.)h(.)f(.)h (.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)68 b Fv(73)150 1528 y(6)146 b(P)m(atterns,)34 b(Actions,)g(and)e(V)-8 b(ariables)32 b Ft(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)62 b Fv(93)150 1669 y(7)146 b(Arra)m(ys)34 b(in)e Fs(awk)h Ft(.)19 b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.) h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f (.)g(.)h(.)f(.)h(.)f(.)64 b Fv(116)150 1810 y(8)146 b(F)-8 b(unctions)24 b Ft(.)c(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f (.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.) h(.)f(.)h(.)f(.)56 b Fv(127)150 1951 y(9)146 b(In)m(ternationalization) 34 b(with)f Fs(gawk)18 b Ft(.)i(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f (.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)50 b Fv(156)150 2092 y(10)97 b(Adv)-5 b(anced)34 b(F)-8 b(eatures)33 b(of)f Fs(gawk)26 b Ft(.)21 b(.)e(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)58 b Fv(165)150 2233 y(11)97 b(Running)33 b Fs(awk)g Fv(and)g Fs(gawk)22 b Ft(.)f(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.) h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)55 b Fv(173)150 2374 y(12)97 b(A)33 b(Library)g(of)f Fs(awk)h Fv(F)-8 b(unctions)21 b Ft(.)f(.)g(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) f(.)h(.)f(.)h(.)f(.)h(.)53 b Fv(181)150 2516 y(13)97 b(Practical)33 b Fs(awk)h Fv(Programs)39 b Ft(.)19 b(.)h(.)f(.)g(.)h(.) f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h (.)f(.)71 b Fv(210)150 2657 y(A)122 b(The)34 b(Ev)m(olution)f(of)f(the) h Fs(awk)h Fv(Language)e Ft(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h (.)f(.)g(.)h(.)f(.)h(.)f(.)65 b Fv(252)150 2798 y(B)126 b(Installing)33 b Fs(gawk)39 b Ft(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)69 b Fv(260)150 2939 y(C)125 b(Implemen)m(tation)35 b(Notes)k Ft(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h (.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)71 b Fv(279)150 3080 y(D)120 b(Basic)33 b(Programming)g(Concepts)k Ft(.)20 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f (.)h(.)f(.)68 b Fv(295)150 3221 y(Glossary)19 b Ft(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.) h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)52 b Fv(300)150 3362 y(GNU)32 b(General)h(Public)h(License)23 b Ft(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.) h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)55 b Fv(310)150 3504 y(GNU)32 b(F)-8 b(ree)33 b(Do)s(cumen)m(tation)g(License)h Ft(.)19 b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)64 b Fv(316)150 3645 y(Index)22 b Ft(.)e(.)g(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f (.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.) f(.)g(.)h(.)f(.)h(.)f(.)54 b Fv(323)p eop end %%Page: -2 6 TeXDict begin -2 5 bop 150 -116 a FB(ii)91 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)i(A)-10 b(WK)30 b(Programming)150 299 y Fu(T)-13 b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y FA(F)-11 b(orew)l(ord)25 b Ft(.)20 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g (.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.) f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)70 b FA(1)150 911 y(Preface)19 b Ft(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h (.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)63 b FA(3)275 1048 y FB(History)31 b(of)f Fz(awk)g FB(and)f Fz(gawk)20 b Fw(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b FB(3)275 1157 y(A)30 b(Rose)h(b)m(y)f(An)m(y)h(Other)f(Name)25 b Fw(.)15 b(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b FB(4)275 1267 y(Using)30 b(This)g(Bo)s(ok)19 b Fw(.)d(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 b FB(5)275 1377 y(T)m(yp)s(ographical)30 b(Con)m(v)m(en)m(tions)c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)54 b FB(6)275 1486 y(The)29 b(GNU)i(Pro)5 b(ject)32 b(and)d(This)h(Bo)s(ok)g Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)59 b FB(7)275 1596 y(Ho)m(w)31 b(to)g(Con)m(tribute)22 b Fw(.)14 b(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)g(.)51 b FB(8)275 1705 y(Ac)m(kno)m(wledgmen)m(ts)20 b Fw(.)d(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b FB(8)150 1948 y FA(1)135 b(Getting)46 b(Started)f(with)h Fq(awk)24 b Ft(.)17 b(.)j(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h (.)f(.)g(.)h(.)f(.)69 b FA(11)275 2085 y FB(1.1)92 b(Ho)m(w)31 b(to)g(Run)e Fz(awk)h FB(Programs)15 b Fw(.)f(.)h(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b FB(11)399 2194 y(1.1.1)93 b(One-Shot)30 b(Thro)m(w)m(a)m(w)m(a)m(y)i Fz(awk)d FB(Programs)10 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b FB(11)399 2304 y(1.1.2)93 b(Running)29 b Fz(awk)g FB(Without)i(Input)e(Files)16 b Fw(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)46 b FB(12)399 2413 y(1.1.3)93 b(Running)29 b(Long)h(Programs)e Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)h(.)56 b FB(12)399 2523 y(1.1.4)93 b(Executable)31 b Fz(awk)f FB(Programs)d Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) g(.)g(.)56 b FB(13)399 2633 y(1.1.5)93 b(Commen)m(ts)30 b(in)g Fz(awk)g FB(Programs)25 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)54 b FB(14)399 2742 y(1.1.6)93 b(Shell-Quoting)31 b(Issues)26 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)57 b FB(14)275 2852 y(1.2)92 b(Data)32 b(Files)f(for)f(the)h(Examples)11 b Fw(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b FB(16)275 2961 y(1.3)92 b(Some)30 b(Simple)g(Examples)24 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b FB(17)275 3071 y(1.4)92 b(An)30 b(Example)g(with)g(Tw)m(o)h(Rules)15 b Fw(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b FB(19)275 3181 y(1.5)92 b(A)30 b(More)h(Complex)g(Example)19 b Fw(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b FB(20)275 3290 y(1.6)92 b Fz(awk)29 b FB(Statemen)m(ts)j(V)-8 b(ersus)30 b(Lines)21 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)g(.)g(.)50 b FB(20)275 3400 y(1.7)92 b(Other)29 b(F)-8 b(eatures)32 b(of)f Fz(awk)25 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b FB(22)275 3509 y(1.8)92 b(When)30 b(to)h(Use)g Fz(awk)9 b Fw(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)39 b FB(22)150 3752 y FA(2)135 b(Regular)46 b(Expressions)36 b Ft(.)19 b(.)h(.)f(.)h(.)f(.) h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)80 b FA(24)275 3889 y FB(2.1)92 b(Ho)m(w)31 b(to)g(Use)g(Regular)f (Expressions)9 b Fw(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b FB(24)275 3998 y(2.2)92 b(Escap)s(e)30 b(Sequences)c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b FB(25)275 4108 y(2.3)92 b(Regular)31 b(Expression)e(Op)s(erators)16 b Fw(.)f(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)45 b FB(27)275 4218 y(2.4)92 b(Using)30 b(Character)h(Lists)e Fw(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)59 b FB(29)275 4327 y(2.5)92 b Fz(gawk)p FB(-Sp)s(eci\014c)29 b(Regexp)i(Op)s(erators)22 b Fw(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)51 b FB(31)275 4437 y(2.6)92 b(Case)30 b(Sensitivit)m(y)i(in)e (Matc)m(hing)21 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)50 b FB(32)275 4546 y(2.7)92 b(Ho)m(w)31 b(Muc)m(h)f(T)-8 b(ext)31 b(Matc)m(hes?)f Fw(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)58 b FB(33)275 4656 y(2.8)92 b(Using)30 b(Dynamic)h(Regexps)23 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b FB(34)275 4765 y(2.9)92 b(Where)30 b(Y)-8 b(ou)31 b(Are)g(Mak)m(es)g(A)g (Di\013erence)9 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b FB(35)p eop end %%Page: -3 7 TeXDict begin -3 6 bop 3674 -116 a FB(iii)150 83 y FA(3)135 b(Reading)46 b(Input)e(Files)16 b Ft(.)k(.)g(.)f(.)g(.)h(.)f(.)h(.)f(.) h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)61 b FA(36)275 220 y FB(3.1)92 b(Ho)m(w)31 b(Input)e(Is)h(Split)g(in)m(to) h(Records)21 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b FB(36)275 330 y(3.2)92 b(Examining)30 b(Fields)9 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b FB(39)275 439 y(3.3)92 b(Nonconstan)m(t)31 b(Field)g(Num)m(b)s(ers)12 b Fw(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)41 b FB(40)275 549 y(3.4)92 b(Changing)30 b(the)g(Con)m(ten)m(ts)i(of)e(a) h(Field)14 b Fw(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)43 b FB(41)275 658 y(3.5)92 b(Sp)s(ecifying)29 b(Ho)m(w)j(Fields)e(Are)h (Separated)26 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b FB(43)399 768 y(3.5.1)93 b(Using)30 b(Regular)h(Expressions)f(to)h(Separate)g (Fields)19 b Fw(.)d(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 b FB(44)399 878 y(3.5.2)93 b(Making)31 b(Eac)m(h)g(Character)g(a)g (Separate)g(Field)25 b Fw(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)54 b FB(44)399 987 y(3.5.3)93 b(Setting)31 b Fz(FS)f FB(from)g(the)g(Command)g(Line)21 b Fw(.)14 b(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)50 b FB(45)399 1097 y(3.5.4)93 b(Field-Splitting)32 b(Summary)22 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)53 b FB(46)275 1206 y(3.6)92 b(Reading)30 b(Fixed-Width)i(Data)c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b FB(47)275 1316 y(3.7)92 b(Multiple-Line)31 b(Records)22 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)51 b FB(49)275 1425 y(3.8)92 b(Explicit)31 b(Input)e(with)h Fz(getline)24 b Fw(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)56 b FB(51)399 1535 y(3.8.1)93 b(Using)30 b Fz(getline)f FB(with)h(No)h(Argumen)m(ts)e Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)58 b FB(51)399 1645 y(3.8.2)93 b(Using)30 b Fz(getline)f FB(in)m(to)i(a)g(V)-8 b(ariable)20 b Fw(.)d(.)e(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)50 b FB(52)399 1754 y(3.8.3)93 b(Using)30 b Fz(getline)f FB(from)h(a)g(File)8 b Fw(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)37 b FB(53)399 1864 y(3.8.4)93 b(Using)30 b Fz(getline)f FB(in)m(to)i(a)g(V)-8 b(ariable)32 b(from)e(a)g(File)21 b Fw(.)c(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b FB(53)399 1973 y(3.8.5)93 b(Using)30 b Fz(getline)f FB(from)h(a)g(Pip)s(e)14 b Fw(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)44 b FB(54)399 2083 y(3.8.6)93 b(Using)30 b Fz(getline)f FB(in)m(to)i(a)g(V)-8 b(ariable)32 b(from)e(a)g(Pip)s(e)e Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b FB(55)399 2193 y(3.8.7)93 b(Using)30 b Fz(getline)f FB(from)h(a)g(Copro)s(cess)13 b Fw(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b FB(55)399 2302 y(3.8.8)93 b(Using)30 b Fz(getline)f FB(in)m(to)i(a)g(V)-8 b(ariable)32 b(from)e(a)g(Copro)s(cess)d Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b FB(55)399 2412 y(3.8.9)93 b(P)m(oin)m(ts)31 b(to)h(Remem)m(b)s(er)e(Ab)s(out)f Fz(getline)22 b Fw(.)13 b(.)i(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b FB(56)399 2521 y(3.8.10)93 b(Summary)29 b(of)i Fz(getline)d FB(V)-8 b(arian)m(ts)18 b Fw(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b FB(56)150 2764 y FA(4)135 b(Prin)l(ting)45 b(Output)27 b Ft(.)20 b(.)f(.)h(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) h(.)f(.)72 b FA(57)275 2901 y FB(4.1)92 b(The)29 b Fz(print)g FB(Statemen)m(t)11 b Fw(.)17 b(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 b FB(57)275 3010 y(4.2)92 b(Examples)30 b(of)h Fz(print)d FB(Statemen)m(ts)22 b Fw(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b FB(57)275 3120 y(4.3)92 b(Output)29 b(Separators)f Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b FB(59)275 3230 y(4.4)92 b(Con)m(trolling)31 b(Numeric)g(Output)e(with)h Fz(print)22 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)53 b FB(59)275 3339 y(4.5)92 b(Using)30 b Fz(printf)f FB(Statemen)m(ts)j(for)e(F)-8 b(ancier)31 b(Prin)m(ting)22 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)51 b FB(60)399 3449 y(4.5.1)93 b(In)m(tro)s(duction)30 b(to)h(the)g Fz(printf)d FB(Statemen)m(t)16 b Fw(.)h(.)e(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b FB(60)399 3558 y(4.5.2)93 b(F)-8 b(ormat-Con)m(trol)33 b(Letters)9 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)38 b FB(60)399 3668 y(4.5.3)93 b(Mo)s(di\014ers)30 b(for)g Fz(printf)e FB(F)-8 b(ormats)13 b Fw(.)j(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)42 b FB(61)399 3778 y(4.5.4)93 b(Examples)30 b(Using)h Fz(printf)18 b Fw(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)47 b FB(64)275 3887 y(4.6)92 b(Redirecting)31 b(Output)e(of)i Fz(print)e FB(and)g Fz(printf)e Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)58 b FB(65)275 3997 y(4.7)92 b(Sp)s(ecial)30 b(File)i(Names)f (in)f Fz(gawk)8 b Fw(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)g(.)g(.)37 b FB(67)399 4106 y(4.7.1)93 b(Sp)s(ecial)30 b(Files)i(for)e(Standard)f(Descriptors)20 b Fw(.)c(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)49 b FB(68)399 4216 y(4.7.2)93 b(Sp)s(ecial)30 b(Files)i(for)e(Pro)s (cess-Related)i(Information)26 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)56 b FB(69)399 4325 y(4.7.3)93 b(Sp)s(ecial)30 b(Files)i(for)e(Net)m(w)m(ork)i(Comm)m(unications)14 b Fw(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b FB(69)399 4435 y(4.7.4)93 b(Sp)s(ecial)30 b(File)i(Name)f(Ca)m(v)m (eats)g Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b FB(70)275 4545 y(4.8)92 b(Closing)30 b(Input)f(and)h(Output)f (Redirections)e Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b FB(70)p eop end %%Page: -4 8 TeXDict begin -4 7 bop 150 -116 a FB(iv)91 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 83 y FA(5)135 b(Expressions)39 b Ft(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h (.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) f(.)h(.)f(.)h(.)83 b FA(73)275 220 y FB(5.1)92 b(Constan)m(t)31 b(Expressions)14 b Fw(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b FB(73)399 330 y(5.1.1)93 b(Numeric)30 b(and)g(String)g(Constan)m(ts)18 b Fw(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b FB(73)399 439 y(5.1.2)93 b(Octal)31 b(and)f(Hexadecimal)i(Num)m(b)s(ers)9 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)39 b FB(73)399 549 y(5.1.3)93 b(Regular)31 b(Expression)e(Constan)m(ts)e Fw(.)15 b(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)55 b FB(74)275 658 y(5.2)92 b(Using)30 b(Regular)h (Expression)f(Constan)m(ts)17 b Fw(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b FB(74)275 768 y(5.3)92 b(V)-8 b(ariables)25 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b FB(76)399 878 y(5.3.1)93 b(Using)30 b(V)-8 b(ariables)32 b(in)e(a)h(Program)14 b Fw(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b FB(76)399 987 y(5.3.2)93 b(Assigning)30 b(V)-8 b(ariables)32 b(on)e(the)h(Command)e(Line)10 b Fw(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)39 b FB(76)275 1097 y(5.4)92 b(Con)m(v)m(ersion)31 b(of)f(Strings)g(and)g(Num)m(b)s(ers)15 b Fw(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b FB(77)275 1206 y(5.5)92 b(Arithmetic)31 b(Op)s(erators)13 b Fw(.)h(.)h(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b FB(78)275 1316 y(5.6)92 b(String)30 b(Concatenation)18 b Fw(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)47 b FB(80)275 1425 y(5.7)92 b(Assignmen)m(t)31 b(Expressions)d Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)g(.)g(.)58 b FB(81)275 1535 y(5.8)92 b(Incremen)m(t)30 b(and)g(Decremen)m(t)i(Op)s(erators)14 b Fw(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b FB(83)275 1645 y(5.9)92 b(T)-8 b(rue)30 b(and)f(F)-8 b(alse)32 b(in)e Fz(awk)f Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)g(.)58 b FB(85)275 1754 y(5.10)92 b(V)-8 b(ariable)32 b(T)m(yping)e(and)g(Comparison)g(Expressions)25 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b FB(85)275 1864 y(5.11)92 b(Bo)s(olean)32 b(Expressions)12 b Fw(.)i(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)42 b FB(88)275 1973 y(5.12)92 b(Conditional)31 b(Expressions)25 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)55 b FB(89)275 2083 y(5.13)92 b(F)-8 b(unction)31 b(Calls)24 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)53 b FB(89)275 2193 y(5.14)92 b(Op)s(erator)30 b(Precedence)h(\(Ho)m (w)h(Op)s(erators)d(Nest\))19 b Fw(.)d(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b FB(90)150 2435 y FA(6)135 b(P)l(atterns,)46 b(Actions,)f(and)g(V)-11 b(ariables)20 b Ft(.)g(.)g(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)65 b FA(93)275 2572 y FB(6.1)92 b(P)m(attern)31 b(Elemen)m(ts)9 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b FB(93)399 2682 y(6.1.1)93 b(Regular)31 b(Expressions)e(as)i(P)m(atterns)26 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)54 b FB(93)399 2791 y(6.1.2)93 b(Expressions)29 b(as)i(P)m(atterns)23 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b FB(93)399 2901 y(6.1.3)93 b(Sp)s(ecifying)30 b(Record)g(Ranges)h(with)f(P)m(atterns)15 b Fw(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) 44 b FB(95)399 3010 y(6.1.4)93 b(The)30 b Fz(BEGIN)f FB(and)g Fz(END)h FB(Sp)s(ecial)h(P)m(atterns)c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)56 b FB(96)524 3120 y(6.1.4.1)93 b(Startup)30 b(and)f(Clean)m(up)h(Actions)h Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)59 b FB(96)524 3230 y(6.1.4.2)93 b(Input/Output)28 b(from)i Fz(BEGIN)f FB(and)h Fz(END)g FB(Rules)e Fw(.)16 b(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)58 b FB(97)399 3339 y(6.1.5)93 b(The)30 b(Empt)m(y)g(P)m(attern)15 b Fw(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b FB(97)275 3449 y(6.2)92 b(Using)30 b(Shell)g(V)-8 b(ariables)32 b(in)e(Programs)21 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b FB(97)275 3558 y(6.3)92 b(Actions)12 b Fw(.)k(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)42 b FB(98)275 3668 y(6.4)92 b(Con)m(trol)31 b(Statemen)m(ts)g(in)f(Actions)9 b Fw(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)38 b FB(99)399 3778 y(6.4.1)93 b(The)30 b Fz(if)p FB(-)p Fz(else)f FB(Statemen)m(t)e Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)55 b FB(99)399 3887 y(6.4.2)93 b(The)30 b Fz(while)f FB(Statemen)m(t)20 b Fw(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)50 b FB(100)399 3997 y(6.4.3)93 b(The)30 b Fz(do)p FB(-)p Fz(while)e FB(Statemen)m(t)22 b Fw(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)51 b FB(101)399 4106 y(6.4.4)93 b(The)30 b Fz(for)f FB(Statemen)m(t)e Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) f(.)54 b FB(101)399 4216 y(6.4.5)93 b(The)30 b Fz(switch)e FB(Statemen)m(t)18 b Fw(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)47 b FB(102)399 4325 y(6.4.6)93 b(The)30 b Fz(break)f FB(Statemen)m(t)20 b Fw(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)50 b FB(103)399 4435 y(6.4.7)93 b(The)30 b Fz(continue)e FB(Statemen)m(t)13 b Fw(.)j(.)f(.)h(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)43 b FB(104)399 4545 y(6.4.8)93 b(The)30 b Fz(next)f FB(Statemen)m(t)22 b Fw(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b FB(105)399 4654 y(6.4.9)93 b(Using)30 b Fz(gawk)p FB('s)g Fz(nextfile)e FB(Statemen)m(t)10 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)39 b FB(106)399 4764 y(6.4.10)93 b(The)30 b Fz(exit)f FB(Statemen)m(t)21 b Fw(.)c(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b FB(106)275 4873 y(6.5)92 b(Built-in)31 b(V)-8 b(ariables)27 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b FB(107)399 4983 y(6.5.1)93 b(Built-in)31 b(V)-8 b(ariables)32 b(That)e(Con)m(trol)h Fz(awk)14 b Fw(.)g(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)44 b FB(107)399 5093 y(6.5.2)93 b(Built-in)31 b(V)-8 b(ariables)32 b(That)e(Con)m(v)m(ey)h(Information) c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b FB(110)399 5202 y(6.5.3)93 b(Using)30 b Fz(ARGC)g FB(and)f Fz(ARGV)f Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)59 b FB(113)p eop end %%Page: -5 9 TeXDict begin -5 8 bop 3702 -116 a FB(v)150 83 y FA(7)135 b(Arra)l(ys)45 b(in)g Fq(awk)20 b Ft(.)e(.)h(.)h(.)f(.)g(.)h(.)f(.)h(.) f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g (.)h(.)64 b FA(116)275 220 y FB(7.1)92 b(In)m(tro)s(duction)30 b(to)h(Arra)m(ys)10 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b FB(116)275 330 y(7.2)92 b(Referring)30 b(to)h(an)f(Arra)m(y)h(Elemen)m(t)24 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b FB(117)275 439 y(7.3)92 b(Assigning)30 b(Arra)m(y)h(Elemen)m(ts)9 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) 39 b FB(118)275 549 y(7.4)92 b(Basic)31 b(Arra)m(y)g(Example)17 b Fw(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)46 b FB(118)275 658 y(7.5)92 b(Scanning)29 b(All)i(Elemen)m(ts)h(of)e(an)g(Arra)m(y)c Fw(.)15 b(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)55 b FB(119)275 768 y(7.6)92 b(The)29 b Fz(delete)g FB(Statemen)m(t)i Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)59 b FB(120)275 878 y(7.7)92 b(Using)30 b(Num)m(b)s(ers)f(to)i(Subscript)e(Arra)m(ys)9 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)38 b FB(121)275 987 y(7.8)92 b(Using)30 b(Uninitialized)i(V)-8 b(ariables)32 b(as)e(Subscripts)17 b Fw(.)c(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)46 b FB(122)275 1097 y(7.9)92 b(Multidimensional)31 b(Arra)m(ys)13 b Fw(.)i(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)42 b FB(122)275 1206 y(7.10)92 b(Scanning)30 b(Multidimensional)h(Arra)m(ys)11 b Fw(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)40 b FB(124)275 1316 y(7.11)92 b(Sorting)30 b(Arra)m(y)h(V)-8 b(alues)31 b(and)f(Indices)g (with)g Fz(gawk)18 b Fw(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)h(.)47 b FB(124)150 1558 y FA(8)135 b(F)-11 b(unctions)34 b Ft(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h (.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) g(.)79 b FA(127)275 1695 y FB(8.1)92 b(Built-in)31 b(F)-8 b(unctions)15 b Fw(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b FB(127)399 1805 y(8.1.1)93 b(Calling)31 b(Built-in)g(F)-8 b(unctions)19 b Fw(.)d(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 b FB(127)399 1914 y(8.1.2)93 b(Numeric)30 b(F)-8 b(unctions)11 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)40 b FB(127)399 2024 y(8.1.3)93 b(String-Manipulation)31 b(F)-8 b(unctions)13 b Fw(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b FB(129)524 2134 y(8.1.3.1)93 b(More)31 b(Ab)s(out)f(`)p Fz(\\)p FB(')h(and)e(`)p Fz(&)p FB(')i(with)f Fz(sub)p FB(,)g Fz(gsub)p FB(,)f(and)h Fz(gensub)734 2243 y Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b FB(137)399 2353 y(8.1.4)93 b(Input/Output)28 b(F)-8 b(unctions)30 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) 58 b FB(140)399 2462 y(8.1.5)93 b(Using)30 b Fz(gawk)p FB('s)g(Timestamp)g(F)-8 b(unctions)30 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)59 b FB(142)399 2572 y(8.1.6)93 b(Bit-Manipulation)32 b(F)-8 b(unctions)31 b(of)g Fz(gawk)17 b Fw(.)c(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b FB(147)399 2682 y(8.1.7)93 b(Using)30 b Fz(gawk)p FB('s)g(String-T)-8 b(ranslation)31 b(F)-8 b(unctions)20 b Fw(.)c(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)50 b FB(149)275 2791 y(8.2)92 b(User-De\014ned)30 b(F)-8 b(unctions)20 b Fw(.)c(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b FB(149)399 2901 y(8.2.1)93 b(F)-8 b(unction)31 b(De\014nition)g(Syn)m (tax)20 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)49 b FB(149)399 3010 y(8.2.2)93 b(F)-8 b(unction)31 b(De\014nition)g (Examples)9 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)38 b FB(151)399 3120 y(8.2.3)93 b(Calling)31 b(User-De\014ned)f(F)-8 b(unctions)25 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b FB(152)399 3230 y(8.2.4)93 b(The)30 b Fz(return)e FB(Statemen)m(t)18 b Fw(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)47 b FB(154)399 3339 y(8.2.5)93 b(F)-8 b(unctions)31 b(and)f(Their)f (E\013ects)i(on)g(V)-8 b(ariable)32 b(T)m(yping)15 b Fw(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b FB(155)150 3582 y FA(9)135 b(In)l(ternationalization)48 b(with)d Fq(gawk)32 b Ft(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)77 b FA(156)275 3719 y FB(9.1)92 b(In)m(ternationalization)33 b(and)d(Lo)s(calization)f Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b FB(156)275 3828 y(9.2)92 b(GNU)31 b Fz(gettext)24 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b FB(156)275 3938 y(9.3)92 b(In)m(ternationalizing)32 b Fz(awk)e FB(Programs)13 b Fw(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b FB(158)275 4047 y(9.4)92 b(T)-8 b(ranslating)31 b Fz(awk)e FB(Programs)9 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) 38 b FB(159)399 4157 y(9.4.1)93 b(Extracting)31 b(Mark)m(ed)g(Strings)c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b FB(160)399 4266 y(9.4.2)93 b(Rearranging)31 b Fz(printf)d FB(Argumen)m(ts)11 b Fw(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b FB(160)399 4376 y(9.4.3)93 b Fz(awk)29 b FB(P)m(ortabilit)m(y)k(Issues)20 b Fw(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 b FB(161)275 4486 y(9.5)92 b(A)30 b(Simple)g(In)m(ternationalization)j (Example)c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b FB(162)275 4595 y(9.6)92 b Fz(gawk)29 b FB(Can)h(Sp)s(eak)f(Y)-8 b(our)31 b(Language)15 b Fw(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)44 b FB(163)p eop end %%Page: -6 10 TeXDict begin -6 9 bop 150 -116 a FB(vi)91 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 83 y FA(10)135 b(Adv)-7 b(anced)44 b(F)-11 b(eatures)45 b(of)g Fq(gawk)33 b Ft(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h (.)f(.)g(.)79 b FA(165)275 220 y FB(10.1)92 b(Allo)m(wing)32 b(Nondecimal)f(Input)e(Data)16 b Fw(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)45 b FB(165)275 330 y(10.2)92 b(Tw)m(o-W)-8 b(a)m(y)33 b(Comm)m (unications)e(with)f(Another)g(Pro)s(cess)16 b Fw(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)45 b FB(166)275 439 y(10.3)92 b(Using)31 b Fz(gawk)e FB(for)h(Net)m(w)m(ork)i(Programming)23 b Fw(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)53 b FB(168)275 549 y(10.4)92 b(Using)31 b Fz(gawk)e FB(with)h(BSD)h(P)m(ortals)22 b Fw(.)16 b(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)h(.)51 b FB(169)275 658 y(10.5)92 b(Pro\014ling)30 b(Y)-8 b(our)31 b Fz(awk)e FB(Programs)17 b Fw(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b FB(169)150 901 y FA(11)135 b(Running)45 b Fq(awk)e FA(and)i Fq(gawk)17 b Ft(.)g(.)j(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.) f(.)h(.)f(.)g(.)h(.)f(.)h(.)61 b FA(173)275 1038 y FB(11.1)92 b(In)m(v)m(oking)31 b Fz(awk)11 b Fw(.)j(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) f(.)40 b FB(173)275 1147 y(11.2)92 b(Command-Line)30 b(Options)c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)56 b FB(173)275 1257 y(11.3)92 b(Other)30 b(Command-Line)g(Argumen)m(ts)e Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b FB(178)275 1367 y(11.4)92 b(The)30 b Fz(AWKPATH)e FB(En)m(vironmen)m (t)j(V)-8 b(ariable)30 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)59 b FB(179)275 1476 y(11.5)92 b(Obsolete)31 b(Options)f(and/or)h(F)-8 b(eatures)20 b Fw(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b FB(179)275 1586 y(11.6)92 b(Undo)s(cumen)m(ted)30 b(Options)g(and)g(F)-8 b(eatures)20 b Fw(.)c(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b FB(180)275 1695 y(11.7)92 b(Kno)m(wn)30 b(Bugs)g(in)g Fz(gawk)23 b Fw(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)53 b FB(180)150 1938 y FA(12)135 b(A)44 b(Library)h(of)h Fq(awk)d FA(F)-11 b(unctions)25 b Ft(.)19 b(.)g(.)h(.)f(.)g(.)h(.)f(.)h (.)f(.)h(.)f(.)g(.)h(.)69 b FA(181)275 2075 y FB(12.1)92 b(Naming)31 b(Library)e(F)-8 b(unction)32 b(Global)f(V)-8 b(ariables)17 b Fw(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)47 b FB(181)275 2184 y(12.2)92 b(General)31 b(Programming)21 b Fw(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)51 b FB(183)399 2294 y(12.2.1)93 b(Implemen)m(ting)31 b Fz(nextfile)d FB(as)j(a)g(F)-8 b(unction)10 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)40 b FB(183)399 2403 y(12.2.2)93 b(Con)m(v)m(erting)32 b(Strings)e(T)-8 b(o)30 b(Num)m(b)s(ers)10 b Fw(.)k(.)h(.)h(.)f(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b FB(184)399 2513 y(12.2.3)93 b(Assertions)9 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)39 b FB(185)399 2623 y(12.2.4)93 b(Rounding)30 b(Num)m(b)s(ers)21 b Fw(.)13 b(.)i(.)h(.)f(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b FB(187)399 2732 y(12.2.5)93 b(The)30 b(Cli\013)h(Random)f(Num)m(b)s(er)f(Generator)21 b Fw(.)16 b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)51 b FB(188)399 2842 y(12.2.6)93 b(T)-8 b(ranslating)31 b(Bet)m(w)m(een)i(Characters)d(and)g(Num)m(b)s(ers)24 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b FB(188)399 2951 y(12.2.7)93 b(Merging)32 b(an)e(Arra)m(y)g(in)m(to)i(a)f(String)21 b Fw(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)50 b FB(190)399 3061 y(12.2.8)93 b(Managing)32 b(the)f(Time)f(of)g(Da)m(y)18 b Fw(.)f(.)e(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)48 b FB(190)275 3171 y(12.3)92 b(Data)32 b(File)g(Managemen)m(t)27 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)54 b FB(192)399 3280 y(12.3.1)93 b(Noting)32 b(Data)g(File)f(Boundaries)25 b Fw(.)15 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b FB(192)399 3390 y(12.3.2)93 b(Rereading)31 b(the)g(Curren)m(t)e(File)18 b Fw(.)e(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b FB(193)399 3499 y(12.3.3)93 b(Chec)m(king)31 b(for)f(Readable)i(Data)g(Files)17 b Fw(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)46 b FB(194)399 3609 y(12.3.4)93 b(Chec)m(king)31 b(F)-8 b(or)31 b(Zero-length)g(Files)8 b Fw(.)17 b(.)e(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) 38 b FB(195)399 3719 y(12.3.5)93 b(T)-8 b(reating)32 b(Assignmen)m(ts)e(as)h(File)h(Names)26 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)55 b FB(196)275 3828 y(12.4)92 b(Pro)s(cessing)31 b(Command-Line)e(Options)17 b Fw(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b FB(196)275 3938 y(12.5)92 b(Reading)31 b(the)f(User)h(Database)26 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b FB(201)275 4047 y(12.6)92 b(Reading)31 b(the)f(Group)g(Database)9 b Fw(.)17 b(.)e(.)g(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)39 b FB(205)150 4290 y FA(13)135 b(Practical)46 b Fq(awk)d FA(Programs)d Ft(.)20 b(.)f(.)g(.)h(.)f(.)h (.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)83 b FA(210)275 4427 y FB(13.1)92 b(Running)29 b(the)i(Example)f(Programs)13 b Fw(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)42 b FB(210)275 4536 y(13.2)92 b(Rein)m(v)m(en)m(ting)32 b(Wheels)f(for)g(F)-8 b(un)30 b(and)f(Pro\014t)12 b Fw(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)41 b FB(210)399 4646 y(13.2.1)93 b(Cutting)31 b(out)f(Fields)h(and)f(Columns)19 b Fw(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)49 b FB(210)399 4755 y(13.2.2)93 b(Searc)m(hing)31 b(for)f(Regular)h(Expressions)f(in)g(Files)20 b Fw(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 b FB(215)399 4865 y(13.2.3)93 b(Prin)m(ting)31 b(out)f(User)h (Information)22 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b FB(219)399 4975 y(13.2.4)93 b(Splitting)31 b(a)g(Large)g(File)g(in)m(to)h(Pieces)9 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)39 b FB(221)399 5084 y(13.2.5)93 b(Duplicating)32 b(Output)d(in)m(to)j(Multiple)f(Files)18 b Fw(.)d(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b FB(223)399 5194 y(13.2.6)93 b(Prin)m(ting)31 b(Nonduplicated)f(Lines) h(of)f(T)-8 b(ext)28 b Fw(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)57 b FB(224)399 5303 y(13.2.7)93 b(Coun)m(ting)31 b(Things)d Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)59 b FB(228)p eop end %%Page: -7 11 TeXDict begin -7 10 bop 3652 -116 a FB(vii)275 83 y(13.3)92 b(A)31 b(Grab)f(Bag)h(of)g Fz(awk)e FB(Programs)c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b FB(230)399 193 y(13.3.1)93 b(Finding)30 b(Duplicated)i(W)-8 b(ords)30 b(in)g(a)h(Do)s(cumen)m(t)22 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)52 b FB(230)399 302 y(13.3.2)93 b(An)30 b(Alarm)h(Clo)s(c)m(k)g(Program)21 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)51 b FB(231)399 412 y(13.3.3)93 b(T)-8 b(ransliterating)32 b(Characters)11 b Fw(.)k(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 b FB(233)399 521 y(13.3.4)93 b(Prin)m(ting)31 b(Mailing)h(Lab)s(els)20 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b FB(235)399 631 y(13.3.5)93 b(Generating)32 b(W)-8 b(ord-Usage)32 b(Coun)m(ts)11 b Fw(.)k(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 b FB(237)399 741 y(13.3.6)93 b(Remo)m(ving)32 b(Duplicates)g(from)d(Unsorted)i(T)-8 b(ext)28 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b FB(239)399 850 y(13.3.7)93 b(Extracting)32 b(Programs)e(from)g(T)-8 b(exinfo)31 b(Source)f(Files)25 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.) 54 b FB(240)399 960 y(13.3.8)93 b(A)31 b(Simple)f(Stream)g(Editor)11 b Fw(.)k(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 b FB(243)399 1069 y(13.3.9)93 b(An)30 b(Easy)h(W)-8 b(a)m(y)32 b(to)f(Use)g(Library)e(F)-8 b(unctions)28 b Fw(.)15 b(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b FB(244)150 1312 y FA(App)t(endix)44 b(A)160 b(The)44 b(Ev)l(olution)j(of)e(the)g Fq(awk)e FA(Language)454 1445 y Ft(.)19 b(.)h(.)f(.)h(.)f(.)g(.)h(.)f (.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.) f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)79 b FA(252)275 1582 y FB(A.1)91 b(Ma)5 b(jor)31 b(Changes)f(Bet)m(w)m (een)j(V7)e(and)f(SVR3.1)e Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)57 b FB(252)275 1691 y(A.2)91 b(Changes)30 b(Bet)m(w)m(een)j(SVR3.1)e(and)f(SVR4)19 b Fw(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)49 b FB(253)275 1801 y(A.3)91 b(Changes)30 b(Bet)m(w)m(een)j(SVR4)d(and)g(POSIX)f Fz(awk)e Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)g(.)57 b FB(253)275 1910 y(A.4)91 b(Extensions)31 b(in)f(the)g(Bell)i(Lab)s(oratories)f Fz(awk)26 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)h(.)56 b FB(254)275 2020 y(A.5)91 b(Extensions)31 b(in)f Fz(gawk)f FB(Not)i(in)f(POSIX)g Fz(awk)9 b Fw(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)39 b FB(255)275 2130 y(A.6)91 b(Ma)5 b(jor)31 b(Con)m(tributors)f(to)h Fz(gawk)23 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)g(.)53 b FB(258)150 2372 y FA(App)t(endix)44 b(B)166 b(Installing)46 b Fq(gawk)27 b Ft(.)17 b(.)j(.)f(.)h(.)f(.)g(.) h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)71 b FA(260)275 2509 y FB(B.1)92 b(The)29 b Fz(gawk)h FB(Distribution)f Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) 58 b FB(260)399 2619 y(B.1.1)93 b(Getting)32 b(the)e Fz(gawk)g FB(Distribution)16 b Fw(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b FB(260)399 2728 y(B.1.2)93 b(Extracting)31 b(the)g(Distribution)24 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)53 b FB(260)399 2838 y(B.1.3)93 b(Con)m(ten)m(ts)31 b(of)g(the)f Fz(gawk)f FB(Distribution)d Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b FB(261)275 2947 y(B.2)92 b(Compiling)30 b(and)g(Installing)h Fz(gawk)e FB(on)h(Unix)19 b Fw(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)48 b FB(264)399 3057 y(B.2.1)93 b(Compiling)30 b Fz(gawk)f FB(for)i(Unix)10 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b FB(264)399 3166 y(B.2.2)93 b(Additional)31 b(Con\014guration)f (Options)f Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)59 b FB(264)399 3276 y(B.2.3)93 b(The)30 b(Con\014guration)g(Pro)s(cess)19 b Fw(.)c(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)49 b FB(265)275 3386 y(B.3)92 b(Installation)31 b(on)g(Other)f(Op)s(erating)g(Systems)d Fw(.)15 b(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)57 b FB(265)399 3495 y(B.3.1)93 b(Installing)31 b Fz(gawk)e FB(on)h(an)h(Amiga)25 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b FB(266)399 3605 y(B.3.2)93 b(Installing)31 b Fz(gawk)e FB(on)h(BeOS)19 b Fw(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b FB(266)399 3714 y(B.3.3)93 b(Installation)32 b(on)e(PC)g(Op)s (erating)g(Systems)25 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)55 b FB(266)524 3824 y(B.3.3.1)93 b(Installing)31 b(a)g(Prepared)e(Distribution)i(for)f(PC)g(Systems)10 b Fw(.)15 b(.)40 b FB(267)524 3934 y(B.3.3.2)93 b(Compiling)30 b Fz(gawk)g FB(for)g(PC)g(Op)s(erating)g(Systems)c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b FB(267)524 4043 y(B.3.3.3)93 b(Compiling)30 b Fz(gawk)g FB(F)-8 b(or)31 b(Dynamic)g(Libraries)16 b Fw(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b FB(269)524 4153 y(B.3.3.4)93 b(Using)31 b Fz(gawk)e FB(on)h(PC)g(Op)s(erating)g(Systems)17 b Fw(.)e(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)47 b FB(269)524 4262 y(B.3.3.5)93 b(Using)31 b Fz(gawk)e FB(In)g(The)h(Cygwin)g(En)m(vironmen)m(t)e Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b FB(271)399 4372 y(B.3.4)93 b(Ho)m(w)31 b(to)g(Compile)g(and)e(Install)i Fz(gawk)e FB(on)i(VMS)9 b Fw(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)38 b FB(271)524 4482 y(B.3.4.1)93 b(Compiling)30 b Fz(gawk)g FB(on)g(VMS)22 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b FB(271)524 4591 y(B.3.4.2)93 b(Installing)31 b Fz(gawk)e FB(on)i(VMS)19 b Fw(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 b FB(272)524 4701 y(B.3.4.3)93 b(Running)29 b Fz(gawk)g FB(on)h(VMS)14 b Fw(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b FB(273)524 4810 y(B.3.4.4)93 b(Building)30 b(and)g(Using)h Fz(gawk)e FB(on)h(VMS)h(POSIX)c Fw(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)58 b FB(273)275 4920 y(B.4)92 b(Unsupp)s(orted)28 b(Op)s(erating)i(System)g(P)m(orts)23 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b FB(273)399 5029 y(B.4.1)93 b(Installing)31 b Fz(gawk)e FB(on)h(the)h(A)m(tari)g(ST)c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b FB(274)524 5139 y(B.4.1.1)93 b(Compiling)30 b Fz(gawk)g FB(on)g(the)g(A)m(tari)i(ST)18 b Fw(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b FB(274)524 5249 y(B.4.1.2)93 b(Running)29 b Fz(gawk)g FB(on)h(the)h(A)m(tari)h(ST)10 b Fw(.)k(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)40 b FB(274)p eop end %%Page: -8 12 TeXDict begin -8 11 bop 150 -116 a FB(viii)92 b Fr(GA)-10 b(WK:)30 b(E\013ectiv)m(e)j(A)-10 b(WK)30 b(Programming)399 83 y FB(B.4.2)93 b(Installing)31 b Fz(gawk)e FB(on)h(a)h(T)-8 b(andem)19 b Fw(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 b FB(275)275 193 y(B.5)92 b(Rep)s(orting)30 b(Problems)g(and)g(Bugs)24 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b FB(276)275 302 y(B.6)92 b(Other)29 b(F)-8 b(reely)32 b(Av)-5 b(ailable)32 b Fz(awk)e FB(Implemen)m(tations)21 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) 50 b FB(277)150 545 y FA(App)t(endix)44 b(C)165 b(Implemen)l(tation)47 b(Notes)41 b Ft(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)84 b FA(279)275 682 y FB(C.1)91 b(Do)m(wn)m(w)m(ard)31 b(Compatibilit)m(y)h (and)d(Debugging)d Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b FB(279)275 791 y(C.2)91 b(Making)31 b(Additions)f(to)h Fz(gawk)15 b Fw(.)f(.)h(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b FB(279)399 901 y(C.2.1)92 b(Adding)30 b(New)g(F)-8 b(eatures)11 b Fw(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 b FB(279)399 1010 y(C.2.2)92 b(P)m(orting)31 b Fz(gawk)f FB(to)h(a)f(New)h(Op)s(erating)f(System)21 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b FB(281)275 1120 y(C.3)91 b(Adding)30 b(New)g(Built-in)h(F)-8 b(unctions)31 b(to)g Fz(gawk)c Fw(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b FB(282)399 1230 y(C.3.1)92 b(A)31 b(Minimal)g(In)m(tro)s(duction)f(to)h Fz(gawk)e FB(In)m(ternals)15 b Fw(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)45 b FB(282)399 1339 y(C.3.2)92 b(Directory)32 b(and)e(File)h(Op)s(eration)f(Built-ins)16 b Fw(.)g(.)f(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b FB(287)524 1449 y(C.3.2.1)92 b(Using)31 b Fz(chdir)e FB(and)h Fz(stat)25 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b FB(287)524 1558 y(C.3.2.2)92 b(C)30 b(Co)s(de)g(for)g Fz(chdir)f FB(and)h Fz(stat)c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b FB(288)524 1668 y(C.3.2.3)92 b(In)m(tegrating)32 b(the)f(Extensions)9 b Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)39 b FB(291)275 1778 y(C.4)91 b(Probable)30 b(F)-8 b(uture)31 b(Extensions)c Fw(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b FB(292)150 2020 y FA(App)t(endix)44 b(D)159 b(Basic)42 b(Programming)h(Concepts)15 b Ft(.)20 b(.)56 b FA(295)275 2157 y FB(D.1)92 b(What)31 b(a)f(Program)h(Do)s(es)22 b Fw(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)52 b FB(295)275 2266 y(D.2)92 b(Data)32 b(V)-8 b(alues)31 b(in)f(a)h(Computer)11 b Fw(.)j(.)h(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)40 b FB(296)275 2376 y(D.3)92 b(Floating-P)m(oin)m(t)34 b(Num)m(b)s(er)29 b(Ca)m(v)m(eats)10 b Fw(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b FB(297)150 2619 y FA(Glossary)h Ft(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h (.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) h(.)f(.)g(.)h(.)f(.)h(.)84 b FA(300)150 2888 y(GNU)45 b(General)h(Public)e(License)31 b Ft(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h (.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)74 b FA(310)275 3025 y FB(Pream)m(ble)14 b Fw(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)44 b FB(310)275 3135 y(T)-8 b(erms)28 b(and)h(Conditions)g(for)g(Cop)m(ying,)h(Distribution)f(and)g (Mo)s(di\014cation)10 b Fw(.)16 b(.)39 b FB(311)275 3244 y(Ho)m(w)31 b(to)g(Apply)e(These)i(T)-8 b(erms)30 b(to)h(Y)-8 b(our)30 b(New)h(Programs)15 b Fw(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)45 b FB(315)150 3487 y FA(GNU)g(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h(License)28 b Ft(.)20 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)72 b FA(316)275 3624 y FB(ADDENDUM:)32 b(Ho)m(w)f(to)g(use)f(this)h(License)g(for)f(y)m (our)g(do)s(cumen)m(ts)12 b Fw(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)41 b FB(321)150 3866 y FA(Index)34 b Ft(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.) h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)79 b FA(323)p eop end %%Page: 1 13 TeXDict begin 1 12 bop 3239 -116 a Fr(F)-8 b(orew)m(ord)93 b FB(1)150 299 y Fu(F)-13 b(orew)l(ord)150 526 y FB(Arnold)21 b(Robbins)f(and)h(I)h(are)g(go)s(o)s(d)f(friends.)37 b(W)-8 b(e)22 b(w)m(ere)g(in)m(tro)s(duced)f(11)i(y)m(ears)f(ago)h(b)m (y)e(circumstances|)150 635 y(and)k(our)h(fa)m(v)m(orite)i(programming) d(language,)k(A)-10 b(WK.)26 b(The)g(circumstances)g(started)h(a)f (couple)g(of)g(y)m(ears)150 745 y(earlier.)41 b(I)29 b(w)m(as)g(w)m(orking)g(at)g(a)g(new)f(job)h(and)f(noticed)h(an)g (unplugged)f(Unix)g(computer)h(sitting)g(in)g(the)150 855 y(corner.)56 b(No)36 b(one)f(knew)g(ho)m(w)h(to)g(use)f(it,)i(and)e (neither)g(did)g(I.)g(Ho)m(w)m(ev)m(er,)k(a)d(couple)g(of)f(da)m(ys)h (later)g(it)150 964 y(w)m(as)d(running,)e(and)h(I)g(w)m(as)h Fz(root)e FB(and)h(the)g(one-and-only)h(user.)46 b(That)33 b(da)m(y)-8 b(,)34 b(I)e(b)s(egan)g(the)g(transition)150 1074 y(from)e(statistician)j(to)e(Unix)f(programmer.)275 1207 y(On)k(one)j(of)e(man)m(y)h(trips)g(to)g(the)g(library)f(or)h(b)s (o)s(okstore)g(in)f(searc)m(h)i(of)f(b)s(o)s(oks)f(on)h(Unix,)h(I)e (found)150 1316 y(the)42 b(gra)m(y)g(A)-10 b(WK)42 b(b)s(o)s(ok,)i (a.k.a.)76 b(Aho,)45 b(Kernighan)c(and)g(W)-8 b(ein)m(b)s(erger,)46 b Fx(The)41 b(A)-10 b(WK)42 b(Programming)150 1426 y(Language)p FB(,)27 b(Addison-W)-8 b(esley)g(,)28 b(1988.)41 b(A)-10 b(WK's)25 b(simple)g(programming)g(paradigm|\014nd)e(a)i(pattern)g(in) 150 1536 y(the)d(input)f(and)g(then)g(p)s(erform)f(an)i(action|often)h (reduced)e(complex)i(or)f(tedious)f(data)i(manipulations)150 1645 y(to)31 b(few)f(lines)h(of)f(co)s(de.)41 b(I)30 b(w)m(as)h(excited)h(to)f(try)f(m)m(y)h(hand)e(at)i(programming)f(in)g (A)-10 b(WK.)275 1778 y(Alas,)38 b(the)f Fz(awk)f FB(on)g(m)m(y)g (computer)h(w)m(as)g(a)f(limited)h(v)m(ersion)g(of)g(the)f(language)i (describ)s(ed)e(in)g(the)150 1888 y(A)-10 b(WK)34 b(b)s(o)s(ok.)51 b(I)34 b(disco)m(v)m(ered)h(that)g(m)m(y)f(computer)g(had)g(\\old)g Fz(awk)p FB(")g(and)f(the)h(A)-10 b(WK)35 b(b)s(o)s(ok)e(describ)s(ed) 150 1998 y(\\new)24 b Fz(awk)p FB(.")38 b(I)23 b(learned)h(that)h(this) e(w)m(as)i(t)m(ypical;)i(the)d(old)g(v)m(ersion)h(refused)d(to)j(step)f (aside)g(or)g(relinquish)150 2107 y(its)k(name.)40 b(If)27 b(a)i(system)f(had)f(a)h(new)f Fz(awk)p FB(,)h(it)g(w)m(as)h(in)m(v)-5 b(ariably)28 b(called)h Fz(nawk)p FB(,)e(and)h(few)f(systems)h(had)f (it.)150 2217 y(The)e(b)s(est)g(w)m(a)m(y)h(to)g(get)h(a)e(new)g Fz(awk)g FB(w)m(as)g(to)i Fz(ftp)d FB(the)i(source)f(co)s(de)h(for)f Fz(gawk)f FB(from)h Fz(prep.ai.mit.edu)p FB(.)150 2326 y Fz(gawk)i FB(w)m(as)i(a)g(v)m(ersion)g(of)g(new)f Fz(awk)f FB(written)i(b)m(y)f(Da)m(vid)i(T)-8 b(rueman)27 b(and)h(Arnold,)h(and) f(a)m(v)-5 b(ailable)30 b(under)150 2436 y(the)h(GNU)g(General)g (Public)f(License.)275 2569 y(\(Inciden)m(tally)-8 b(,)33 b(it's)f(no)g(longer)f(di\016cult)h(to)g(\014nd)e(a)h(new)g Fz(awk)p FB(.)43 b Fz(gawk)30 b FB(ships)g(with)i(Lin)m(ux,)f(and)g(y)m (ou)150 2679 y(can)25 b(do)m(wnload)h(binaries)e(or)i(source)f(co)s(de) g(for)g(almost)h(an)m(y)f(system;)j(m)m(y)d(wife)g(uses)g Fz(gawk)f FB(on)g(her)h(VMS)150 2788 y(b)s(o)m(x.\))275 2921 y(My)30 b(Unix)g(system)g(started)h(out)g(unplugged)e(from)h(the)g (w)m(all;)i(it)e(certainly)i(w)m(as)e(not)h(plugged)f(in)m(to)150 3031 y(a)h(net)m(w)m(ork.)44 b(So,)31 b(oblivious)h(to)f(the)h (existence)g(of)f Fz(gawk)f FB(and)g(the)i(Unix)f(comm)m(unit)m(y)g(in) g(general,)i(and)150 3140 y(desiring)28 b(a)i(new)e Fz(awk)p FB(,)g(I)g(wrote)i(m)m(y)e(o)m(wn,)i(called)g Fz(mawk)p FB(.)39 b(Before)29 b(I)g(w)m(as)g(\014nished)e(I)h(knew)g(ab)s(out)h Fz(gawk)p FB(,)150 3250 y(but)h(it)h(w)m(as)f(to)s(o)h(late)h(to)f (stop,)g(so)g(I)f(ev)m(en)m(tually)i(p)s(osted)e(to)h(a)g Fz(comp.sources)c FB(newsgroup.)275 3383 y(A)38 b(few)f(da)m(ys)i (after)f(m)m(y)g(p)s(osting,)i(I)e(got)h(a)g(friendly)e(email)i(from)f (Arnold)f(in)m(tro)s(ducing)h(himself.)150 3493 y(He)31 b(suggested)g(w)m(e)g(share)f(design)h(and)f(algorithms)h(and)f(attac)m (hed)i(a)f(draft)f(of)h(the)f(POSIX)g(standard)150 3602 y(so)h(that)h(I)e(could)h(up)s(date)f Fz(mawk)g FB(to)i(supp)s(ort)d (language)j(extensions)g(added)e(after)h(publication)h(of)f(the)150 3712 y(A)-10 b(WK)31 b(b)s(o)s(ok.)275 3845 y(F)-8 b(rankly)g(,)30 b(if)g(our)f(roles)h(had)f(b)s(een)f(rev)m(ersed,)j(I)e(w)m(ould)g(not) h(ha)m(v)m(e)h(b)s(een)d(so)i(op)s(en)f(and)g(w)m(e)h(probably)150 3954 y(w)m(ould)i(ha)m(v)m(e)i(nev)m(er)f(met.)48 b(I'm)32 b(glad)h(w)m(e)g(did)f(meet.)48 b(He)33 b(is)f(an)h(A)-10 b(WK)32 b(exp)s(ert's)h(A)-10 b(WK)32 b(exp)s(ert)h(and)f(a)150 4064 y(gen)m(uinely)g(nice)f(p)s(erson.)42 b(Arnold)31 b(con)m(tributes)g(signi\014can)m(t)h(amoun)m(ts)g(of)f(his)g(exp)s (ertise)g(and)f(time)i(to)150 4174 y(the)f(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation.)275 4307 y(This)23 b(b)s(o)s(ok)g(is)h(the)g Fz(gawk)e FB(reference)j(man)m(ual,)g(but)e (at)i(its)f(core)h(it)f(is)g(a)g(b)s(o)s(ok)f(ab)s(out)h(A)-10 b(WK)24 b(program-)150 4416 y(ming)30 b(that)h(will)f(app)s(eal)g(to)h (a)f(wide)g(audience.)41 b(It)30 b(is)h(a)f(de\014nitiv)m(e)h (reference)f(to)h(the)f(A)-10 b(WK)31 b(language)150 4526 y(as)d(de\014ned)e(b)m(y)i(the)g(1987)h(Bell)g(Labs)e(release)i (and)e(co)s(di\014ed)g(in)h(the)g(1992)h(POSIX)e(Utilities)j(standard.) 275 4659 y(On)j(the)h(other)g(hand,)g(the)g(no)m(vice)i(A)-10 b(WK)34 b(programmer)f(can)i(study)e(a)h(w)m(ealth)h(of)g(practical)g (pro-)150 4769 y(grams)c(that)h(emphasize)g(the)f(p)s(o)m(w)m(er)g(of)g (A)-10 b(WK's)32 b(basic)f(idioms:)43 b(data)32 b(driv)m(en)e(con)m (trol-\015o)m(w,)k(pattern)150 4878 y(matc)m(hing)41 b(with)f(regular)g(expressions,)j(and)c(asso)s(ciativ)m(e)k(arra)m(ys.) 71 b(Those)40 b(lo)s(oking)h(for)e(something)150 4988 y(new)30 b(can)h(try)f(out)g Fz(gawk)p FB('s)g(in)m(terface)i(to)f(net) m(w)m(ork)g(proto)s(cols)g(via)g(sp)s(ecial)g(`)p Fz(/inet)p FB(')f(\014les.)275 5121 y(The)f(programs)h(in)g(this)g(b)s(o)s(ok)f (mak)m(e)j(clear)f(that)g(an)f(A)-10 b(WK)30 b(program)g(is)g(t)m (ypically)i(m)m(uc)m(h)e(smaller)150 5230 y(and)d(faster)h(to)g(dev)m (elop)h(than)e(a)h(coun)m(terpart)g(written)g(in)f(C.)g(Consequen)m (tly)-8 b(,)29 b(there)f(is)g(often)g(a)g(pa)m(y)m(o\013)150 5340 y(to)g(protot)m(yp)s(e)f(an)g(algorithm)h(or)f(design)g(in)f(A)-10 b(WK)27 b(to)h(get)g(it)f(running)f(quic)m(kly)h(and)g(exp)s(ose)g (problems)p eop end %%Page: 2 14 TeXDict begin 2 13 bop 150 -116 a FB(2)91 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)31 b(Programming)150 299 y FB(early)-8 b(.)40 b(Often,)27 b(the)g(in)m(terpreted)f(p)s (erformance)g(is)g(adequate)h(and)f(the)g(A)-10 b(WK)27 b(protot)m(yp)s(e)f(b)s(ecomes)h(the)150 408 y(pro)s(duct.)275 543 y(The)32 b(new)g Fz(pgawk)f FB(\(pro\014ling)h Fz(gawk)p FB(\),)g(pro)s(duces)g(program)g(execution)i(coun)m(ts.)47 b(I)32 b(recen)m(tly)i(exp)s(er-)150 653 y(imen)m(ted)i(with)g(an)g (algorithm)g(that)h(for)e Fp(n)h FB(lines)g(of)g(input,)g(exhibited)g Fy(\030)19 b Fp(C)7 b(n)2918 620 y Fo(2)2990 653 y FB(p)s(erformance,) 37 b(while)150 762 y(theory)e(predicted)f Fy(\030)17 b Fp(C)7 b(n)15 b FB(log)i Fp(n)33 b FB(b)s(eha)m(vior.)54 b(A)34 b(few)g(min)m(utes)h(p)s(oring)f(o)m(v)m(er)i(the)e(`)p Fz(awkprof.out)p FB(')e(pro-)150 872 y(\014le)38 b(pinp)s(oin)m(ted)g (the)g(problem)g(to)g(a)h(single)g(line)f(of)h(co)s(de.)64 b Fz(pgawk)37 b FB(is)h(a)h(w)m(elcome)g(addition)g(to)g(m)m(y)150 981 y(programmer's)30 b(to)s(olb)s(o)m(x.)275 1116 y(Arnold)f(has)h (distilled)g(o)m(v)m(er)h(a)g(decade)f(of)g(exp)s(erience)h(writing)f (and)f(using)h(A)-10 b(WK)30 b(programs,)g(and)150 1225 y(dev)m(eloping)c Fz(gawk)p FB(,)g(in)m(to)g(this)f(b)s(o)s(ok.)38 b(If)25 b(y)m(ou)g(use)g(A)-10 b(WK)25 b(or)h(w)m(an)m(t)g(to)g(learn)f (ho)m(w,)h(then)f(read)g(this)g(b)s(o)s(ok.)390 1360 y(Mic)m(hael)32 b(Brennan)390 1469 y(Author)e(of)g Fz(mawk)p eop end %%Page: 3 15 TeXDict begin 3 14 bop 3315 -116 a Fr(Preface)93 b FB(3)150 299 y Fu(Preface)150 555 y FB(Sev)m(eral)36 b(kinds)e(of)i(tasks)f(o)s (ccur)g(rep)s(eatedly)h(when)e(w)m(orking)h(with)g(text)i(\014les.)55 b(Y)-8 b(ou)35 b(migh)m(t)h(w)m(an)m(t)g(to)150 665 y(extract)42 b(certain)f(lines)g(and)f(discard)g(the)h(rest.)71 b(Or)40 b(y)m(ou)g(ma)m(y)i(need)e(to)h(mak)m(e)g(c)m(hanges)h(wherev)m(er)150 775 y(certain)28 b(patterns)f(app)s(ear,)g(but)f(lea)m(v)m(e)j(the)e (rest)g(of)g(the)g(\014le)g(alone.)41 b(W)-8 b(riting)28 b(single-use)g(programs)e(for)150 884 y(these)d(tasks)f(in)g(languages) i(suc)m(h)d(as)i(C,)f(C)p Fz(++)p FB(,)h(or)f(P)m(ascal)i(is)e (time-consuming)h(and)f(incon)m(v)m(enien)m(t.)40 b(Suc)m(h)150 994 y(jobs)35 b(are)h(often)f(easier)i(with)e Fz(awk)p FB(.)54 b(The)35 b Fz(awk)g FB(utilit)m(y)h(in)m(terprets)g(a)g(sp)s (ecial-purp)s(ose)e(programming)150 1103 y(language)e(that)f(mak)m(es)g (it)g(easy)g(to)g(handle)f(simple)g(data-reformatting)j(jobs.)275 1245 y(The)e(GNU)i(implemen)m(tation)h(of)e Fz(awk)f FB(is)h(called)i Fz(gawk)p FB(;)e(it)h(is)f(fully)g(compatible)h(with)f (the)g(System)150 1355 y(V)k(Release)i(4)e(v)m(ersion)g(of)g Fz(awk)p FB(.)57 b Fz(gawk)34 b FB(is)i(also)h(compatible)g(with)f(the) g(POSIX)f(sp)s(eci\014cation)i(of)f(the)150 1464 y Fz(awk)30 b FB(language.)45 b(This)31 b(means)g(that)h(all)g(prop)s(erly)e (written)h Fz(awk)f FB(programs)h(should)g(w)m(ork)g(with)g Fz(gawk)p FB(.)150 1574 y(Th)m(us,)f(w)m(e)g(usually)h(don't)f (distinguish)f(b)s(et)m(w)m(een)i Fz(gawk)f FB(and)f(other)i Fz(awk)f FB(implemen)m(tations.)275 1716 y(Using)g Fz(awk)g FB(allo)m(ws)h(y)m(ou)g(to:)225 1858 y Fy(\017)60 b FB(Manage)32 b(small,)f(p)s(ersonal)f(databases)225 1996 y Fy(\017)60 b FB(Generate)32 b(rep)s(orts)225 2134 y Fy(\017)60 b FB(V)-8 b(alidate)33 b(data)225 2273 y Fy(\017)60 b FB(Pro)s(duce)30 b(indexes)g(and)g(p)s(erform)e(other)j(do)s(cumen)m(t)f(preparation)h (tasks)225 2411 y Fy(\017)60 b FB(Exp)s(erimen)m(t)30 b(with)g(algorithms)h(that)g(y)m(ou)g(can)g(adapt)f(later)i(to)f(other) f(computer)h(languages)275 2581 y(In)e(addition,)i Fz(gawk)e FB(pro)m(vides)i(facilities)h(that)f(mak)m(e)g(it)g(easy)g(to:)225 2723 y Fy(\017)60 b FB(Extract)31 b(bits)g(and)e(pieces)i(of)g(data)g (for)f(pro)s(cessing)225 2862 y Fy(\017)60 b FB(Sort)30 b(data)225 3000 y Fy(\017)60 b FB(P)m(erform)30 b(simple)h(net)m(w)m (ork)g(comm)m(unications)275 3170 y(This)g(b)s(o)s(ok)g(teac)m(hes)i(y) m(ou)g(ab)s(out)e(the)h Fz(awk)f FB(language)j(and)d(ho)m(w)h(y)m(ou)g (can)g(use)g(it)g(e\013ectiv)m(ely)-8 b(.)48 b(Y)-8 b(ou)150 3280 y(should)35 b(already)i(b)s(e)e(familiar)i(with)e(basic)i(system)f (commands,)h(suc)m(h)f(as)g Fz(cat)f FB(and)g Fz(ls)p FB(,)3287 3247 y Fo(1)3362 3280 y FB(as)h(w)m(ell)h(as)150 3390 y(basic)31 b(shell)f(facilities,)j(suc)m(h)d(as)h(input/output)e (\(I/O\))i(redirection)g(and)f(pip)s(es.)275 3532 y(Implemen)m(tations) 43 b(of)f(the)g Fz(awk)f FB(language)j(are)e(a)m(v)-5 b(ailable)45 b(for)d(man)m(y)g(di\013eren)m(t)h(computing)f(en-)150 3641 y(vironmen)m(ts.)66 b(This)37 b(b)s(o)s(ok,)k(while)d(describing)h (the)f Fz(awk)g FB(language)i(in)e(general,)k(also)e(describ)s(es)e (the)150 3751 y(particular)e(implemen)m(tation)i(of)e Fz(awk)f FB(called)i Fz(gawk)d FB(\(whic)m(h)i(stands)g(for)f(\\GNU)i (a)m(wk"\).)59 b Fz(gawk)35 b FB(runs)150 3860 y(on)j(a)h(broad)f (range)h(of)g(Unix)f(systems,)j(ranging)d(from)g(80386)j(PC-based)d (computers)g(up)g(through)150 3970 y(large-scale)k(systems,)h(suc)m(h)c (as)h(Cra)m(ys.)68 b Fz(gawk)39 b FB(has)g(also)h(b)s(een)f(p)s(orted)g (to)i(Mac)f(OS)f(X,)h(MS-DOS,)150 4079 y(Microsoft)29 b(Windo)m(ws)f(\(all)i(v)m(ersions\))e(and)g(OS/2)g(PCs,)g(A)m(tari)h (and)e(Amiga)i(micro)s(computers,)g(BeOS,)150 4189 y(T)-8 b(andem)30 b(D20,)i(and)e(VMS.)150 4433 y FA(History)46 b(of)f Fq(awk)e FA(and)i Fq(gawk)1195 4560 y FB(Recip)s(e)30 b(F)-8 b(or)31 b(A)g(Programming)f(Language)558 4702 y(1)h(part)f Fz(egrep)129 b FB(1)31 b(part)f Fz(snobol)558 4811 y FB(2)h(parts)f Fz(ed)237 b FB(3)31 b(parts)f(C)390 4953 y(Blend)g(all)i(parts)e(w)m(ell)h(using)f Fz(lex)f FB(and)h Fz(yacc)p FB(.)40 b(Do)s(cumen)m(t)31 b(minimally)g(and)e (release.)p 150 5066 1200 4 v 199 5134 a Fo(1)275 5166 y Fn(These)g(commands)f(are)h(a)n(v)l(ailable)h(on)e(POSIX-complian)n (t)f(systems,)j(as)f(w)n(ell)g(as)g(on)g(traditional)g(Unix-based)e (sys-)275 5253 y(tems.)38 b(If)27 b(y)n(ou)g(are)g(using)h(some)f (other)h(op)r(erating)g(system,)f(y)n(ou)g(still)h(need)e(to)i(b)r(e)e (familiar)k(with)d(the)g(ideas)g(of)h(I/O)275 5340 y(redirection)e(and) f(pip)r(es.)p eop end %%Page: 4 16 TeXDict begin 4 15 bop 150 -116 a FB(4)91 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)31 b(Programming)390 299 y FB(After)38 b(eigh)m(t)g(y)m(ears,)i(add)d(another)g(part)g Fz(egrep)f FB(and)h(t)m(w)m(o)i(more)e(parts)g(C.)g(Do)s(cumen)m(t)390 408 y(v)m(ery)31 b(w)m(ell)g(and)f(release.)275 564 y(The)k(name)i Fz(awk)e FB(comes)i(from)f(the)h(initials)g(of)g(its)g(designers:)50 b(Alfred)35 b(V.)h(Aho,)h(P)m(eter)f(J.)g(W)-8 b(ein-)150 674 y(b)s(erger)28 b(and)g(Brian)h(W.)g(Kernighan.)40 b(The)28 b(original)i(v)m(ersion)f(of)g Fz(awk)e FB(w)m(as)i(written)g (in)g(1977)h(at)f(A)-8 b(T&T)150 783 y(Bell)31 b(Lab)s(oratories.)42 b(In)29 b(1985,)j(a)e(new)g(v)m(ersion)g(made)g(the)h(programming)e (language)j(more)e(p)s(o)m(w)m(erful,)150 893 y(in)m(tro)s(ducing)35 b(user-de\014ned)f(functions,)i(m)m(ultiple)h(input)d(streams,)j(and)e (computed)g(regular)h(expres-)150 1003 y(sions.)j(This)25 b(new)g(v)m(ersion)h(b)s(ecame)g(widely)f(a)m(v)-5 b(ailable)28 b(with)d(Unix)h(System)f(V)h(Release)h(3.1)f(\(SVR3.1\).)150 1112 y(The)j(v)m(ersion)h(in)g(SVR4)g(added)f(some)h(new)f(features)h (and)f(cleaned)i(up)d(the)i(b)s(eha)m(vior)g(in)g(some)g(of)g(the)150 1222 y(\\dark)37 b(corners")f(of)h(the)g(language.)61 b(The)36 b(sp)s(eci\014cation)h(for)g Fz(awk)f FB(in)g(the)h(POSIX)e (Command)h(Lan-)150 1331 y(guage)h(and)f(Utilities)i(standard)d (further)g(clari\014ed)h(the)g(language.)59 b(Both)37 b(the)f Fz(gawk)f FB(designers)h(and)150 1441 y(the)28 b(original)g(Bell)h(Lab)s(oratories)f Fz(awk)e FB(designers)h(pro)m (vided)g(feedbac)m(k)i(for)e(the)g(POSIX)g(sp)s(eci\014cation.)275 1597 y(P)m(aul)39 b(Rubin)f(wrote)i(the)g(GNU)g(implemen)m(tation,)j Fz(gawk)p FB(,)e(in)e(1986.)70 b(Ja)m(y)39 b(F)-8 b(enlason)41 b(completed)150 1706 y(it,)50 b(with)45 b(advice)h(from)e(Ric)m(hard)i (Stallman.)85 b(John)45 b(W)-8 b(o)s(o)s(ds)45 b(con)m(tributed)h (parts)e(of)i(the)f(co)s(de)h(as)150 1816 y(w)m(ell.)41 b(In)30 b(1988)h(and)e(1989,)j(Da)m(vid)f(T)-8 b(rueman,)29 b(with)h(help)f(from)g(me,)i(thoroughly)e(rew)m(ork)m(ed)i Fz(gawk)d FB(for)150 1925 y(compatibilit)m(y)35 b(with)d(the)h(new)m (er)f Fz(awk)p FB(.)47 b(Circa)33 b(1995,)i(I)d(b)s(ecame)h(the)g (primary)f(main)m(tainer.)48 b(Curren)m(t)150 2035 y(dev)m(elopmen)m(t) 36 b(fo)s(cuses)f(on)g(bug)g(\014xes,)h(p)s(erformance)e(impro)m(v)m (emen)m(ts,)k(standards)c(compliance,)k(and)150 2145 y(o)s(ccasionally)-8 b(,)33 b(new)d(features.)275 2300 y(In)37 b(Ma)m(y)i(of)f(1997,)j(J)s(\177)-48 b(urgen)37 b(Kahrs)g(felt)i(the)f(need)g(for)f(net)m(w)m(ork)i(access)g(from)f Fz(awk)p FB(,)h(and)e(with)h(a)150 2410 y(little)g(help)e(from)f(me,)j (set)f(ab)s(out)f(adding)g(features)g(to)h(do)f(this)g(for)g Fz(gawk)p FB(.)57 b(A)m(t)38 b(that)e(time,)j(he)d(also)150 2519 y(wrote)g(the)f(bulk)g(of)g Fx(TCP/IP)g(In)m(ternet)m(w)m(orking)i (with)e Fz(gawk)f FB(\(a)i(separate)g(do)s(cumen)m(t,)h(a)m(v)-5 b(ailable)38 b(as)150 2629 y(part)31 b(of)g(the)h Fz(gawk)e FB(distribution\).)43 b(His)31 b(co)s(de)h(\014nally)f(b)s(ecame)h (part)f(of)g(the)g(main)h Fz(gawk)e FB(distribution)150 2739 y(with)g Fz(gawk)f FB(v)m(ersion)i(3.1.)275 2894 y(See)c(Section)g(A.6)h([Ma)5 b(jor)28 b(Con)m(tributors)e(to)i Fz(gawk)p FB(],)f(page)g(258,)i(for)e(a)g(complete)h(list)g(of)f(those) g(who)150 3004 y(made)j(imp)s(ortan)m(t)h(con)m(tributions)g(to)g Fz(gawk)p FB(.)150 3268 y FA(A)44 b(Rose)i(b)l(y)f(An)l(y)f(Other)i (Name)150 3428 y FB(The)27 b Fz(awk)f FB(language)j(has)e(ev)m(olv)m (ed)i(o)m(v)m(er)g(the)e(y)m(ears.)40 b(F)-8 b(ull)28 b(details)h(are)e(pro)m(vided)g(in)g(App)s(endix)f(A)h([The)150 3537 y(Ev)m(olution)38 b(of)f(the)h Fz(awk)e FB(Language],)k(page)e (252.)62 b(The)37 b(language)h(describ)s(ed)e(in)h(this)g(b)s(o)s(ok)f (is)i(often)150 3647 y(referred)30 b(to)h(as)f(\\new)h Fz(awk)p FB(")f(\()p Fz(nawk)p FB(\).)275 3802 y(Because)e(of)f(this,)h (man)m(y)f(systems)g(ha)m(v)m(e)h(m)m(ultiple)g(v)m(ersions)f(of)g Fz(awk)p FB(.)39 b(Some)27 b(systems)g(ha)m(v)m(e)h(an)f Fz(awk)150 3912 y FB(utilit)m(y)34 b(that)f(implemen)m(ts)f(the)h (original)g(v)m(ersion)g(of)g(the)f Fz(awk)g FB(language)h(and)f(a)h Fz(nawk)e FB(utilit)m(y)j(for)e(the)150 4022 y(new)c(v)m(ersion.)41 b(Others)27 b(ha)m(v)m(e)j(an)e Fz(oawk)g FB(v)m(ersion)h(for)f(the)h (\\old)g Fz(awk)p FB(")f(language)i(and)e(plain)g Fz(awk)f FB(for)i(the)150 4131 y(new)h(one.)41 b(Still)31 b(others)f(only)h(ha)m (v)m(e)g(one)g(v)m(ersion,)g(whic)m(h)f(is)h(usually)f(the)g(new)g (one.)3081 4098 y Fo(2)275 4287 y FB(All)22 b(in)g(all,)j(this)d(mak)m (es)h(it)g(di\016cult)f(for)g(y)m(ou)h(to)g(kno)m(w)f(whic)m(h)g(v)m (ersion)h(of)f Fz(awk)f FB(y)m(ou)i(should)e(run)g(when)150 4396 y(writing)h(y)m(our)g(programs.)38 b(The)22 b(b)s(est)f(advice)i (I)f(can)h(giv)m(e)g(here)f(is)h(to)g(c)m(hec)m(k)g(y)m(our)f(lo)s(cal) i(do)s(cumen)m(tation.)150 4506 y(Lo)s(ok)32 b(for)g Fz(awk)p FB(,)g Fz(oawk)p FB(,)f(and)h Fz(nawk)p FB(,)f(as)h(w)m(ell)h (as)g(for)e Fz(gawk)p FB(.)45 b(It)32 b(is)g(lik)m(ely)i(that)e(y)m(ou) h(already)f(ha)m(v)m(e)i(some)150 4616 y(v)m(ersion)45 b(of)g(new)f Fz(awk)g FB(on)g(y)m(our)h(system,)k(whic)m(h)44 b(is)h(what)f(y)m(ou)h(should)f(use)g(when)g(running)f(y)m(our)150 4725 y(programs.)d(\(Of)30 b(course,)h(if)g(y)m(ou're)g(reading)f(this) g(b)s(o)s(ok,)g(c)m(hances)i(are)e(go)s(o)s(d)h(that)g(y)m(ou)f(ha)m(v) m(e)i Fz(gawk)p FB(!\))275 4881 y(Throughout)27 b(this)h(b)s(o)s(ok,)h (whenev)m(er)f(w)m(e)h(refer)f(to)i(a)e(language)i(feature)f(that)g (should)f(b)s(e)g(a)m(v)-5 b(ailable)150 4991 y(in)23 b(an)m(y)h(complete)g(implemen)m(tation)h(of)e(POSIX)g Fz(awk)p FB(,)h(w)m(e)f(simply)g(use)g(the)h(term)f Fz(awk)p FB(.)37 b(When)23 b(referring)150 5100 y(to)31 b(a)g(feature)g(that)g (is)f(sp)s(eci\014c)g(to)h(the)g(GNU)g(implemen)m(tation,)h(w)m(e)f (use)f(the)h(term)f Fz(gawk)p FB(.)p 150 5241 1200 4 v 199 5308 a Fo(2)275 5340 y Fn(Often,)25 b(these)h(systems)g(use)g Fm(gawk)g Fn(for)h(their)e Fm(awk)i Fn(implemen)n(tation!)p eop end %%Page: 5 17 TeXDict begin 5 16 bop 3315 -116 a Fr(Preface)93 b FB(5)150 299 y FA(Using)46 b(This)e(Bo)t(ok)150 458 y FB(The)30 b(term)h Fz(awk)f FB(refers)h(to)g(a)g(particular)g(program)g(as)g(w)m (ell)h(as)f(to)h(the)f(language)h(y)m(ou)f(use)f(to)i(tell)g(this)150 568 y(program)26 b(what)g(to)h(do.)40 b(When)26 b(w)m(e)g(need)g(to)i (b)s(e)d(careful,)j(w)m(e)f(call)g(the)g(language)g(\\the)g Fz(awk)f FB(language,")150 677 y(and)31 b(the)h(program)g(\\the)h Fz(awk)e FB(utilit)m(y)-8 b(.")48 b(This)31 b(b)s(o)s(ok)g(explains)h (b)s(oth)f(the)h Fz(awk)g FB(language)h(and)e(ho)m(w)h(to)150 787 y(run)f(the)i Fz(awk)f FB(utilit)m(y)-8 b(.)49 b(The)32 b(term)g Fz(awk)g Fx(program)g FB(refers)g(to)i(a)f(program)f(written)g (b)m(y)h(y)m(ou)g(in)f(the)h Fz(awk)150 897 y FB(programming)d (language.)275 1031 y(Primarily)-8 b(,)31 b(this)g(b)s(o)s(ok)g (explains)g(the)g(features)g(of)g Fz(awk)p FB(,)g(as)g(de\014ned)f(in)h (the)g(POSIX)f(standard.)42 b(It)150 1141 y(do)s(es)c(so)h(in)g(the)g (con)m(text)h(of)f(the)g Fz(gawk)f FB(implemen)m(tation.)67 b(While)39 b(doing)g(so,)j(it)d(also)h(attempts)f(to)150 1250 y(describ)s(e)29 b(imp)s(ortan)m(t)g(di\013erences)h(b)s(et)m(w)m (een)g Fz(gawk)e FB(and)g(other)i Fz(awk)e FB(implemen)m(tations.)3203 1217 y Fo(3)3282 1250 y FB(Finally)-8 b(,)32 b(an)m(y)150 1360 y Fz(gawk)d FB(features)i(that)g(are)g(not)f(in)g(the)h(POSIX)e (standard)h(for)g Fz(awk)f FB(are)i(noted.)275 1495 y(This)j(b)s(o)s (ok)h(has)h(the)f(di\016cult)h(task)g(of)g(b)s(eing)f(b)s(oth)g(a)h (tutorial)h(and)e(a)h(reference.)56 b(If)36 b(y)m(ou)g(are)g(a)150 1604 y(no)m(vice,)43 b(feel)c(free)g(to)h(skip)e(o)m(v)m(er)j(details)f (that)f(seem)g(to)s(o)h(complex.)67 b(Y)-8 b(ou)39 b(should)f(also)i (ignore)g(the)150 1714 y(man)m(y)c(cross-references;)41 b(they)36 b(are)h(for)f(the)h(exp)s(ert)f(user)f(and)h(for)g(the)h (online)g(Info)e(v)m(ersion)i(of)g(the)150 1823 y(do)s(cumen)m(t.)275 1958 y(There)27 b(are)g(subsections)h(lab)s(elled)g(as)f Fr(Adv)-5 b(anced)27 b(Notes)i FB(scattered)g(throughout)e(the)g(b)s(o) s(ok.)39 b(They)150 2068 y(add)26 b(a)i(more)f(complete)h(explanation)g (of)g(p)s(oin)m(ts)e(that)i(are)f(relev)-5 b(an)m(t,)30 b(but)c(not)h(lik)m(ely)i(to)e(b)s(e)g(of)g(in)m(terest)150 2177 y(on)j(\014rst)g(reading.)41 b(All)31 b(app)s(ear)e(in)i(the)f (index,)g(under)f(the)i(heading)f(\\adv)-5 b(anced)31 b(features.")275 2312 y(Most)21 b(of)f(the)h(time,)i(the)e(examples)g (use)f(complete)i Fz(awk)e FB(programs.)37 b(In)19 b(some)i(of)g(the)f (more)h(adv)-5 b(anced)150 2421 y(sections,)48 b(only)c(the)f(part)g (of)h(the)g Fz(awk)e FB(program)h(that)h(illustrates)h(the)f(concept)g (curren)m(tly)f(b)s(eing)150 2531 y(describ)s(ed)29 b(is)i(sho)m(wn.) 275 2666 y(While)d(this)g(b)s(o)s(ok)g(is)g(aimed)h(principally)f(at)g (p)s(eople)g(who)g(ha)m(v)m(e)i(not)e(b)s(een)f(exp)s(osed)h(to)h Fz(awk)p FB(,)f(there)150 2775 y(is)42 b(a)g(lot)g(of)g(information)g (here)g(that)g(ev)m(en)g(the)g Fz(awk)f FB(exp)s(ert)g(should)g(\014nd) f(useful.)73 b(In)41 b(particular,)150 2885 y(the)32 b(description)f(of)h(POSIX)f Fz(awk)f FB(and)h(the)h(example)g (programs)g(in)f(Chapter)g(12)h([A)g(Library)f(of)h Fz(awk)150 2994 y FB(F)-8 b(unctions],)34 b(page)g(181,)h(and)d(in)h(Chapter)f(13) h([Practical)i Fz(awk)d FB(Programs],)i(page)g(210,)h(should)d(b)s(e)g (of)150 3104 y(in)m(terest.)275 3239 y(Chapter)26 b(1)i([Getting)h (Started)e(with)g Fz(awk)p FB(],)h(page)g(11,)h(pro)m(vides)e(the)g (essen)m(tials)i(y)m(ou)f(need)f(to)h(kno)m(w)150 3348 y(to)j(b)s(egin)f(using)g Fz(awk)p FB(.)275 3483 y(Chapter)c(2)h ([Regular)g(Expressions],)g(page)h(24,)g(in)m(tro)s(duces)f(regular)g (expressions)f(in)h(general,)i(and)150 3592 y(in)h(particular)h(the)f (\015a)m(v)m(ors)h(supp)s(orted)e(b)m(y)h(POSIX)g Fz(awk)f FB(and)h Fz(gawk)p FB(.)275 3727 y(Chapter)h(3)i([Reading)g(Input)e (Files],)k(page)e(36,)h(describ)s(es)e(ho)m(w)g Fz(awk)f FB(reads)i(y)m(our)f(data.)48 b(It)32 b(in)m(tro-)150 3837 y(duces)d(the)h(concepts)h(of)f(records)f(and)g(\014elds,)h(as)g (w)m(ell)h(as)f(the)g Fz(getline)d FB(command.)41 b(I/O)29 b(redirection)150 3946 y(is)h(\014rst)g(describ)s(ed)f(here.)275 4081 y(Chapter)g(4)i([Prin)m(ting)g(Output],)f(page)h(57,)g(describ)s (es)f(ho)m(w)g Fz(awk)g FB(programs)f(can)i(pro)s(duce)e(output)150 4190 y(with)h Fz(print)f FB(and)h Fz(printf)p FB(.)275 4325 y(Chapter)39 b(5)h([Expressions],)i(page)e(73,)j(describ)s(es)c (expressions,)j(whic)m(h)e(are)g(the)g(basic)g(building)150 4435 y(blo)s(c)m(ks)31 b(for)f(getting)i(most)f(things)f(done)g(in)g(a) h(program.)275 4569 y(Chapter)h(6)i([P)m(atterns,)i(Actions,)f(and)e(V) -8 b(ariables],)36 b(page)e(93,)i(describ)s(es)d(ho)m(w)g(to)h(write)g (patterns)150 4679 y(for)22 b(matc)m(hing)i(records,)g(actions)g(for)e (doing)h(something)g(when)f(a)h(record)f(is)h(matc)m(hed,)i(and)d(the)h (built-in)150 4788 y(v)-5 b(ariables)31 b Fz(awk)f FB(and)f Fz(gawk)g FB(use.)275 4923 y(Chapter)h(7)g([Arra)m(ys)h(in)g Fz(awk)p FB(],)f(page)h(116,)h(co)m(v)m(ers)h Fz(awk)p FB('s)c(one-and-only)j(data)f(structure:)40 b(asso)s(cia-)150 5033 y(tiv)m(e)35 b(arra)m(ys.)51 b(Deleting)35 b(arra)m(y)f(elemen)m (ts)h(and)e(whole)h(arra)m(ys)g(is)f(also)i(describ)s(ed,)e(as)h(w)m (ell)h(as)f(sorting)150 5142 y(arra)m(ys)d(in)f Fz(gawk)p FB(.)p 150 5241 1200 4 v 199 5308 a Fo(3)275 5340 y Fn(All)25 b(suc)n(h)h(di\013erences)g(app)r(ear)g(in)f(the)h(index)e(under)h(the) h(en)n(try)e(\\di\013erences)j(in)e Fm(awk)i Fn(and)e Fm(gawk)p Fn(.")p eop end %%Page: 6 18 TeXDict begin 6 17 bop 150 -116 a FB(6)91 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)31 b(Programming)275 299 y FB(Chapter)e(8)i([F)-8 b(unctions],)32 b(page)f(127,)h(describ)s (es)e(the)h(built-in)f(functions)g Fz(awk)f FB(and)h Fz(gawk)g FB(pro)m(vide,)150 408 y(as)h(w)m(ell)g(as)g(ho)m(w)f(to)h (de\014ne)f(y)m(our)g(o)m(wn)g(functions.)275 541 y(Chapter)g(9)g([In)m (ternationalization)k(with)d Fz(gawk)p FB(],)f(page)h(156,)h(describ)s (es)e(sp)s(ecial)h(features)g(in)f Fz(gawk)150 650 y FB(for)g(translating)h(program)g(messages)g(in)m(to)g(di\013eren)m(t)g (languages)h(at)f(run)m(time.)275 782 y(Chapter)f(10)h([Adv)-5 b(anced)31 b(F)-8 b(eatures)33 b(of)e Fz(gawk)p FB(],)f(page)i(165,)g (describ)s(es)e(a)h(n)m(um)m(b)s(er)f(of)h Fz(gawk)p FB(-sp)s(eci\014c)150 892 y(adv)-5 b(anced)39 b(features.)67 b(Of)39 b(particular)g(note)h(are)f(the)g(abilities)i(to)f(ha)m(v)m(e)g (t)m(w)m(o-w)m(a)m(y)i(comm)m(unications)150 1001 y(with)30 b(another)h(pro)s(cess,)f(p)s(erform)f(TCP/IP)g(net)m(w)m(orking,)j (and)e(pro\014le)g(y)m(our)g Fz(awk)g FB(programs.)275 1134 y(Chapter)e(11)j([Running)d Fz(awk)h FB(and)f Fz(gawk)p FB(],)h(page)i(173,)g(describ)s(es)e(ho)m(w)g(to)h(run)e Fz(gawk)p FB(,)h(the)h(meaning)150 1243 y(of)h(its)f(command-line)h (options,)g(and)f(ho)m(w)g(it)h(\014nds)e Fz(awk)g FB(program)h(source) h(\014les.)275 1375 y(Chapter)44 b(12)i([A)f(Library)f(of)h Fz(awk)f FB(F)-8 b(unctions],)50 b(page)45 b(181,)50 b(and)45 b(Chapter)f(13)i([Practical)h Fz(awk)150 1485 y FB(Programs],)30 b(page)h(210,)g(pro)m(vide)f(man)m(y)g(sample)g Fz(awk)f FB(programs.)40 b(Reading)31 b(them)e(allo)m(ws)j(y)m(ou)e(to) g(see)150 1594 y Fz(awk)f FB(solving)j(real)f(problems.)275 1727 y(App)s(endix)40 b(A)i([The)g(Ev)m(olution)h(of)f(the)g Fz(awk)f FB(Language],)47 b(page)c(252,)j(describ)s(es)c(ho)m(w)g(the)g Fz(awk)150 1836 y FB(language)31 b(has)f(ev)m(olv)m(ed)h(since)f (\014rst)f(release)i(to)g(presen)m(t.)40 b(It)30 b(also)h(describ)s(es) e(ho)m(w)h Fz(gawk)e FB(has)i(acquired)150 1946 y(features)h(o)m(v)m (er)g(time.)275 2078 y(App)s(endix)j(B)i([Installing)h Fz(gawk)p FB(],)f(page)h(260,)h(describ)s(es)d(ho)m(w)h(to)h(get)g Fz(gawk)p FB(,)f(ho)m(w)g(to)h(compile)f(it)150 2188 y(under)26 b(Unix,)j(and)e(ho)m(w)h(to)g(compile)h(and)f(use)f(it)h(on) g(di\013eren)m(t)h(non-Unix)e(systems.)40 b(It)28 b(also)h(describ)s (es)150 2297 y(ho)m(w)k(to)h(rep)s(ort)e(bugs)g(in)h Fz(gawk)e FB(and)i(where)f(to)i(get)g(three)f(other)g(freely)g(a)m(v)-5 b(ailable)35 b(implemen)m(tations)150 2407 y(of)c Fz(awk)p FB(.)275 2539 y(App)s(endix)i(C)h([Implemen)m(tation)j(Notes],)g(page)f (279,)h(describ)s(es)e(ho)m(w)g(to)g(disable)g Fz(gawk)p FB('s)f(exten-)150 2648 y(sions,)c(as)h(w)m(ell)g(as)f(ho)m(w)g(to)h (con)m(tribute)g(new)f(co)s(de)g(to)h Fz(gawk)p FB(,)e(ho)m(w)h(to)h (write)f(extension)h(libraries,)g(and)150 2758 y(some)g(p)s(ossible)f (future)f(directions)i(for)f Fz(gawk)f FB(dev)m(elopmen)m(t.)275 2890 y(App)s(endix)23 b(D)k([Basic)g(Programming)e(Concepts],)j(page)e (295,)i(pro)m(vides)e(some)g(v)m(ery)g(cursory)f(bac)m(k-)150 3000 y(ground)e(material)j(for)e(those)g(who)g(are)g(completely)i (unfamiliar)e(with)g(computer)g(programming.)38 b(Also)150 3109 y(cen)m(tralized)32 b(there)f(is)f(a)h(discussion)f(of)g(some)h (of)g(the)f(issues)g(surrounding)e(\015oating-p)s(oin)m(t)k(n)m(um)m(b) s(ers.)275 3241 y(The)d([Glossary],)j(page)f(300,)h(de\014nes)d(most,)i (if)f(not)h(all,)g(the)g(signi\014can)m(t)g(terms)f(used)f(throughout) 150 3351 y(the)i(b)s(o)s(ok.)40 b(If)30 b(y)m(ou)g(\014nd)f(terms)h (that)h(y)m(ou)g(aren't)g(familiar)g(with,)f(try)h(lo)s(oking)g(them)f (up)f(here.)275 3483 y([GNU)49 b(General)h(Public)f(License],)55 b(page)49 b(310,)56 b(and)48 b([GNU)i(F)-8 b(ree)50 b(Do)s(cumen)m (tation)h(License],)150 3593 y(page)31 b(316,)h(presen)m(t)e(the)h (licenses)g(that)g(co)m(v)m(er)h(the)f Fz(gawk)e FB(source)i(co)s(de)f (and)g(this)g(b)s(o)s(ok,)g(resp)s(ectiv)m(ely)-8 b(.)150 3820 y FA(T)l(yp)t(ographical)45 b(Con)l(v)l(en)l(tions)150 3980 y FB(This)26 b(b)s(o)s(ok)h(is)g(written)h(using)f(T)-8 b(exinfo,)28 b(the)g(GNU)f(do)s(cumen)m(tation)i(formatting)f (language.)41 b(A)27 b(single)150 4089 y(T)-8 b(exinfo)29 b(source)f(\014le)h(is)f(used)g(to)h(pro)s(duce)e(b)s(oth)h(the)g(prin) m(ted)g(and)g(online)h(v)m(ersions)g(of)f(the)h(do)s(cumen-)150 4199 y(tation.)56 b(Because)37 b(of)e(this,)i(the)e(t)m(yp)s (ographical)h(con)m(v)m(en)m(tions)h(are)f(sligh)m(tly)g(di\013eren)m (t)g(than)f(in)g(other)150 4309 y(b)s(o)s(oks)30 b(y)m(ou)g(ma)m(y)h (ha)m(v)m(e)h(read.)275 4441 y(Examples)h(y)m(ou)h(w)m(ould)f(t)m(yp)s (e)h(at)g(the)g(command-line)g(are)g(preceded)f(b)m(y)g(the)h(common)g (shell)f(pri-)150 4550 y(mary)i(and)g(secondary)g(prompts,)h(`)p Fz($)p FB(')f(and)g(`)p Fz(>)p FB('.)56 b(Output)34 b(from)h(the)g (command)g(is)h(preceded)f(b)m(y)g(the)150 4660 y(glyph)25 b(\\)458 4664 y Fy(a)531 4660 y FB(".)39 b(This)25 b(t)m(ypically)h (represen)m(ts)f(the)h(command's)e(standard)h(output.)38 b(Error)24 b(messages,)k(and)150 4769 y(other)33 b(output)g(on)g(the)g (command's)g(standard)f(error,)h(are)g(preceded)g(b)m(y)g(the)g(glyph)g (\\)p 3232 4712 217 5 v 3232 4792 5 81 v 3255 4772 a Fl(erro)m(r)p 3444 4792 V 3232 4797 217 5 v 3498 4769 a FB(".)49 b(F)-8 b(or)150 4879 y(example:)390 5011 y Fz($)47 b(echo)g(hi)g(on)g(stdout)410 5125 y Fy(a)533 5121 y Fz(hi)g(on)h(stdout)390 5230 y($)f(echo)g(hello)f(on)i(stderr)e (1>&2)p 410 5283 V 410 5363 5 81 v 433 5343 a Fl(erro)m(r)p 622 5363 V 410 5367 217 5 v 724 5340 a Fz(hello)g(on)i(stderr)p eop end %%Page: 7 19 TeXDict begin 7 18 bop 3315 -116 a Fr(Preface)93 b FB(7)275 299 y(In)33 b(the)i(text,)i(command)d(names)h(app)s(ear)f(in)g Fz(this)29 b(font)p FB(,)35 b(while)f(co)s(de)h(segmen)m(ts)h(app)s (ear)e(in)g(the)150 408 y(same)j(fon)m(t)f(and)g(quoted,)i(`)p Fz(like)29 b(this)p FB('.)57 b(Some)36 b(things)g(are)h(emphasized)f Fw(like)h(this)p FB(,)i(and)c(if)h(a)h(p)s(oin)m(t)150 518 y(needs)27 b(to)g(b)s(e)g(made)g(strongly)-8 b(,)28 b(it)g(is)f(done)g Fr(lik)m(e)h(this)p FB(.)39 b(The)27 b(\014rst)f(o)s(ccurrence)h(of)g(a)h(new)e(term)h(is)g(usually)150 628 y(its)g Fx(de\014nition)f FB(and)g(app)s(ears)g(in)h(the)g(same)g (fon)m(t)g(as)g(the)g(previous)f(o)s(ccurrence)h(of)f(\\de\014nition")i (in)e(this)150 737 y(sen)m(tence.)42 b(\014le)30 b(names)h(are)f (indicated)h(lik)m(e)h(this:)41 b(`)p Fz(/path/to/ourfile)p FB('.)275 873 y(Characters)22 b(that)g(y)m(ou)g(t)m(yp)s(e)g(at)h(the)f (k)m(eyb)s(oard)f(lo)s(ok)i Fk(like)29 b(this)p FB(.)37 b(In)21 b(particular,)j(there)e(are)g(sp)s(ecial)150 983 y(c)m(haracters)29 b(called)f(\\con)m(trol)h(c)m(haracters.")42 b(These)27 b(are)h(c)m(haracters)g(that)g(y)m(ou)g(t)m(yp)s(e)f(b)m(y)g (holding)g(do)m(wn)150 1092 y(b)s(oth)k(the)g Fk(CONTROL)e FB(k)m(ey)j(and)f(another)h(k)m(ey)-8 b(,)33 b(at)f(the)f(same)h(time.) 44 b(F)-8 b(or)32 b(example,)h(a)e Fk(Ctrl-d)f FB(is)h(t)m(yp)s(ed)150 1202 y(b)m(y)e(\014rst)g(pressing)f(and)h(holding)g(the)h Fk(CONTROL)d FB(k)m(ey)-8 b(,)31 b(next)f(pressing)e(the)i Fk(d)f FB(k)m(ey)h(and)f(\014nally)g(releasing)150 1312 y(b)s(oth)h(k)m(eys.)150 1512 y Fj(Dark)41 b(Corners)390 1659 y Fw(Dark)24 b(c)-5 b(orners)26 b(ar)-5 b(e)25 b(b)-5 b(asic)g(al)5 b(ly)26 b(fr)-5 b(actal)26 b(|)e(no)h(matter)h(how)f (much)g(you)g(il)5 b(luminate,)26 b(ther)-5 b(e's)390 1769 y(always)34 b(a)f(smal)5 b(ler)34 b(but)e(darker)i(one.)390 1878 y FB(Brian)d(Kernighan)275 2014 y(Un)m(til)j(the)f(POSIX)g (standard)f(\(and)h Fx(The)g(Ga)m(wk)h(Man)m(ual)t FB(\),)i(man)m(y)d (features)h(of)f Fz(awk)g FB(w)m(ere)g(either)150 2124 y(p)s(o)s(orly)j(do)s(cumen)m(ted)g(or)g(not)h(do)s(cumen)m(ted)f(at)i (all.)60 b(Descriptions)37 b(of)g(suc)m(h)f(features)g(\(often)i (called)150 2233 y(\\dark)f(corners"\))i(are)f(noted)f(in)h(this)f(b)s (o)s(ok)g(with)g(the)h(picture)f(of)h(a)g(\015ashligh)m(t)g(in)f(the)h (margin,)i(as)150 2343 y(sho)m(wn)30 b(here.)81 b(They)30 b(also)h(app)s(ear)f(in)g(the)g(index)g(under)f(the)i(heading)f(\\dark) g(corner.")736 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 275 2479 a(As)33 b(noted)h(b)m(y)g(the)f(op)s(ening)h (quote,)h(though,)f(an)m(y)h(co)m(v)m(erage)h(of)e(dark)f(corners)h (is,)g(b)m(y)g(de\014nition,)150 2589 y(something)d(that)g(is)f (incomplete.)150 2823 y FA(The)44 b(GNU)i(Pro)7 b(ject)45 b(and)g(This)g(Bo)t(ok)150 2983 y FB(The)22 b(F)-8 b(ree)23 b(Soft)m(w)m(are)g(F)-8 b(oundation)23 b(\(FSF\))g(is)f(a)h (nonpro\014t)e(organization)j(dedicated)f(to)g(the)f(pro)s(duction)150 3092 y(and)33 b(distribution)g(of)g(freely)h(distributable)f(soft)m(w)m (are.)51 b(It)34 b(w)m(as)g(founded)e(b)m(y)h(Ric)m(hard)g(M.)h (Stallman,)150 3202 y(the)i(author)h(of)f(the)g(original)i(Emacs)e (editor.)59 b(GNU)37 b(Emacs)g(is)f(the)h(most)f(widely)h(used)e(v)m (ersion)i(of)150 3311 y(Emacs)31 b(to)s(da)m(y)-8 b(.)275 3447 y(The)39 b(GNU)678 3414 y Fo(4)756 3447 y FB(Pro)5 b(ject)41 b(is)f(an)f(ongoing)i(e\013ort)g(on)f(the)g(part)g(of)g(the)g (F)-8 b(ree)41 b(Soft)m(w)m(are)g(F)-8 b(oundation)150 3557 y(to)33 b(create)i(a)e(complete,)i(freely)e(distributable,)g (POSIX-complian)m(t)g(computing)g(en)m(vironmen)m(t.)48 b(The)150 3666 y(FSF)31 b(uses)g(the)h(\\GNU)g(General)h(Public)e (License")h(\(GPL\))g(to)g(ensure)f(that)g(their)h(soft)m(w)m(are's)h (source)150 3776 y(co)s(de)j(is)f(alw)m(a)m(ys)j(a)m(v)-5 b(ailable)37 b(to)g(the)f(end)e(user.)56 b(A)36 b(cop)m(y)g(of)g(the)g (GPL)f(is)h(included)e(in)i(this)f(b)s(o)s(ok)g(for)150 3886 y(y)m(our)g(reference)h(\(see)g([GNU)g(General)g(Public)f (License],)i(page)f(310\).)57 b(The)35 b(GPL)g(applies)g(to)h(the)f(C) 150 3995 y(language)41 b(source)e(co)s(de)h(for)f Fz(gawk)p FB(.)67 b(T)-8 b(o)40 b(\014nd)d(out)j(more)g(ab)s(out)f(the)g(FSF)h (and)e(the)i(GNU)g(Pro)5 b(ject)150 4105 y(online,)33 b(see)g(the)g(GNU)g(Pro)5 b(ject's)33 b(home)f(page)h(\()p Fz(http://www.gnu.org)p FB(\).)42 b(This)32 b(b)s(o)s(ok)f(ma)m(y)i (also)h(b)s(e)150 4214 y(read)c(from)g(their)h(w)m(eb)f(site)h(\()p Fz(http://www.gnu.org/manual/)o(gawk)o(/)p FB(\).)275 4350 y(A)k(shell,)j(an)e(editor)g(\(Emacs\),)i(highly)e(p)s(ortable)g (optimizing)h(C,)e(C)p Fz(++)p FB(,)i(and)e(Ob)5 b(jectiv)m(e-C)37 b(com-)150 4460 y(pilers,)31 b(a)h(sym)m(b)s(olic)f(debugger)g(and)g (dozens)g(of)g(large)h(and)f(small)g(utilities)i(\(suc)m(h)e(as)g Fz(gawk)p FB(\),)g(ha)m(v)m(e)h(all)150 4569 y(b)s(een)g(completed)j (and)d(are)i(freely)f(a)m(v)-5 b(ailable.)52 b(The)32 b(GNU)i(op)s(erating)g(system)f(k)m(ernel)h(\(the)g(HURD\),)150 4679 y(has)c(b)s(een)g(released)h(but)f(is)g(still)h(in)f(an)h(early)g (stage)g(of)g(dev)m(elopmen)m(t.)275 4815 y(Un)m(til)43 b(the)f(GNU)h(op)s(erating)g(system)f(is)g(more)h(fully)f(dev)m(elop)s (ed,)j(y)m(ou)e(should)e(consider)h(using)150 4925 y(GNU/Lin)m(ux,)28 b(a)e(freely)g(distributable,)h(Unix-lik)m(e)h(op)s(erating)e(system)g (for)g(In)m(tel)h(80386,)i(DEC)d(Alpha,)150 5034 y(Sun)h(SP)-8 b(AR)m(C,)29 b(IBM)g(S/390,)h(and)e(other)h(systems.)1925 5001 y Fo(5)2002 5034 y FB(There)f(are)h(man)m(y)g(b)s(o)s(oks)e(on)i (GNU/Lin)m(ux.)40 b(One)p 150 5138 1200 4 v 199 5205 a Fo(4)275 5237 y Fn(GNU)25 b(stands)g(for)i(\\GNU's)f(not)f(Unix.")199 5308 y Fo(5)275 5340 y Fn(The)g(terminology)i(\\GNU/Lin)n(ux")e(is)i (explained)e(in)h(the)f([Glossary],)j(page)e(300.)p eop end %%Page: 8 20 TeXDict begin 8 19 bop 150 -116 a FB(8)91 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)31 b(Programming)150 299 y FB(that)38 b(is)g(freely)g(a)m(v)-5 b(ailable)41 b(is)c Fx(Lin)m(ux)h(Installation)h(and)e(Getting)j(Started)p FB(,)g(b)m(y)d(Matt)i(W)-8 b(elsh.)64 b(Man)m(y)150 408 y(GNU/Lin)m(ux)33 b(distributions)f(are)h(often)h(a)m(v)-5 b(ailable)35 b(in)d(computer)h(stores)g(or)g(bundled)e(on)h(CD-R)m(OMs) 150 518 y(with)22 b(b)s(o)s(oks)f(ab)s(out)h(Lin)m(ux.)38 b(\(There)22 b(are)g(three)g(other)h(freely)f(a)m(v)-5 b(ailable,)27 b(Unix-lik)m(e)c(op)s(erating)g(systems)150 628 y(for)31 b(80386)i(and)d(other)i(systems:)42 b(NetBSD,)32 b(F)-8 b(reeBSD,)33 b(and)d(Op)s(enBSD.)h(All)g(are)h(based)e(on)h(the) h(4.4-)150 737 y(Lite)e(Berk)m(eley)g(Soft)m(w)m(are)g(Distribution,)g (and)e(they)h(use)g(recen)m(t)h(v)m(ersions)f(of)g Fz(gawk)f FB(for)h(their)g(v)m(ersions)150 847 y(of)i Fz(awk)p FB(.\))275 984 y(The)43 b(b)s(o)s(ok)g(y)m(ou)h(are)g(reading)g(is)f (actually)i(free|at)g(least,)j(the)c(information)g(in)g(it)g(is)f(free) h(to)150 1094 y(an)m(y)m(one.)d(The)26 b(mac)m(hine-readable)i(source)e (co)s(de)h(for)f(the)h(b)s(o)s(ok)e(comes)j(with)e Fz(gawk)p FB(;)h(an)m(y)m(one)g(ma)m(y)g(tak)m(e)150 1203 y(this)j(b)s(o)s(ok)g (to)h(a)g(cop)m(ying)g(mac)m(hine)g(and)f(mak)m(e)h(as)g(man)m(y)f (copies)h(as)g(they)f(lik)m(e.)42 b(\(T)-8 b(ak)m(e)32 b(a)f(momen)m(t)g(to)150 1313 y(c)m(hec)m(k)h(the)f(F)-8 b(ree)31 b(Do)s(cumen)m(tation)h(License)f(in)f([GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License],)g(page)f(316.\))275 1450 y(Although)f(y)m(ou)g(could)g(just)f(prin)m(t)g(it)i(out)f(y)m (ourself,)g(b)s(ound)e(b)s(o)s(oks)h(are)i(m)m(uc)m(h)e(easier)i(to)g (read)f(and)150 1560 y(use.)58 b(F)-8 b(urthermore,)37 b(the)g(pro)s(ceeds)e(from)h(sales)h(of)f(this)g(b)s(o)s(ok)g(go)h(bac) m(k)g(to)g(the)f(FSF)g(to)h(help)f(fund)150 1669 y(dev)m(elopmen)m(t)c (of)e(more)h(free)f(soft)m(w)m(are.)275 1807 y(The)g(b)s(o)s(ok)h (itself)h(has)f(gone)h(through)f(a)h(n)m(um)m(b)s(er)e(of)h(previous)g (editions.)44 b(P)m(aul)32 b(Rubin)e(wrote)i(the)150 1916 y(v)m(ery)37 b(\014rst)e(draft)h(of)g Fx(The)g(GA)-10 b(WK)37 b(Man)m(ual)t FB(;)j(it)d(w)m(as)f(around)f(40)j(pages)e(in)g (size.)59 b(Diane)38 b(Close)f(and)150 2026 y(Ric)m(hard)28 b(Stallman)h(impro)m(v)m(ed)f(it,)h(yielding)g(a)f(v)m(ersion)g(that)h (w)m(as)f(around)f(90)i(pages)g(long)f(and)g(barely)150 2135 y(describ)s(ed)h(the)i(original,)h(\\old")f(v)m(ersion)g(of)f Fz(awk)p FB(.)275 2273 y(I)24 b(started)h(w)m(orking)g(with)g(that)g(v) m(ersion)g(in)f(the)h(fall)h(of)e(1988.)41 b(As)25 b(w)m(ork)f(on)h(it) g(progressed,)h(the)f(FSF)150 2382 y(published)34 b(sev)m(eral)i (preliminary)f(v)m(ersions)h(\(n)m(um)m(b)s(ered)e(0.)p Fx(x)6 b FB(\).)57 b(In)34 b(1996,)39 b(Edition)c(1.0)h(w)m(as)g (released)150 2492 y(with)d Fz(gawk)g FB(3.0.0.)52 b(The)33 b(FSF)h(published)e(the)i(\014rst)f(t)m(w)m(o)i(editions)f(under)e(the) i(title)h Fx(The)e(GNU)h(Awk)150 2602 y(User's)c(Guide)p FB(.)275 2739 y(This)c(edition)j(main)m(tains)f(the)g(basic)g (structure)g(of)f(Edition)h(1.0,)i(but)d(with)g(signi\014can)m(t)i (additional)150 2848 y(material,)48 b(re\015ecting)c(the)f(host)g(of)g (new)g(features)g(in)g Fz(gawk)f FB(v)m(ersion)h(3.1.)80 b(Of)43 b(particular)g(note)h(is)150 2958 y(Section)26 b(7.11)g([Sorting)f(Arra)m(y)g(V)-8 b(alues)26 b(and)e(Indices)h(with)f Fz(gawk)p FB(],)i(page)f(124,)j(as)d(w)m(ell)g(as)h(Section)f(8.1.6)150 3068 y([Bit-Manipulation)i(F)-8 b(unctions)25 b(of)g Fz(gawk)p FB(],)g(page)g(147,)i(Chapter)d(9)h([In)m(ternationalization) j(with)d Fz(gawk)p FB(],)150 3177 y(page)41 b(156,)j(and)39 b(also)i(Chapter)e(10)i([Adv)-5 b(anced)40 b(F)-8 b(eatures)41 b(of)f Fz(gawk)p FB(],)i(page)f(165,)j(and)39 b(Section)i(C.3)150 3287 y([Adding)30 b(New)h(Built-in)g(F)-8 b(unctions)31 b(to)g Fz(gawk)p FB(],)e(page)i(282.)275 3424 y Fx(GA)-10 b(WK:)21 b(E\013ectiv)m(e)i(A)-10 b(WK)21 b(Programming)29 b FB(will)21 b(undoubtedly)e(con)m(tin)m(ue)j(to)g(ev)m(olv)m(e.)40 b(An)20 b(electronic)150 3534 y(v)m(ersion)34 b(comes)g(with)f(the)h Fz(gawk)e FB(distribution)h(from)g(the)h(FSF.)g(If)f(y)m(ou)g(\014nd)f (an)i(error)f(in)g(this)g(b)s(o)s(ok,)150 3643 y(please)c(rep)s(ort)e (it!)40 b(See)29 b(Section)f(B.5)h([Rep)s(orting)f(Problems)g(and)f (Bugs],)i(page)g(276,)h(for)e(information)150 3753 y(on)i(submitting)g (problem)g(rep)s(orts)g(electronically)-8 b(,)34 b(or)c(write)h(to)g (me)f(in)g(care)h(of)g(the)g(publisher.)150 3990 y FA(Ho)l(w)46 b(to)f(Con)l(tribute)150 4149 y FB(As)23 b(the)g(main)m(tainer)g(of)g (GNU)g Fz(awk)p FB(,)h(I)e(am)h(starting)h(a)f(collection)i(of)e (publicly)f(a)m(v)-5 b(ailable)25 b Fz(awk)d FB(programs.)150 4259 y(F)-8 b(or)40 b(more)f(information,)j(see)d Fz (ftp://ftp.freefriends.org/)o(arn)o(old/)o(Awks)o(tuf)o(f)p FB(.)61 b(If)38 b(y)m(ou)i(ha)m(v)m(e)150 4368 y(written)33 b(an)g(in)m(teresting)h Fz(awk)e FB(program,)i(or)f(ha)m(v)m(e)h (written)f(a)g Fz(gawk)f FB(extension)h(that)h(y)m(ou)f(w)m(ould)g(lik) m(e)150 4478 y(to)24 b(share)g(with)f(the)h(rest)g(of)g(the)g(w)m (orld,)h(please)g(con)m(tact)h(me)e(\()p Fz(arnold@skeeve.com)p FB(\).)34 b(Making)25 b(things)150 4587 y(a)m(v)-5 b(ailable)33 b(on)d(the)h(In)m(ternet)f(helps)g(k)m(eep)h(the)g Fz(gawk)e FB(distribution)h(do)m(wn)g(to)h(manageable)h(size.)150 4824 y FA(Ac)l(kno)l(wledgmen)l(ts)150 4983 y FB(The)e(initial)h(draft) f(of)h Fx(The)f(GA)-10 b(WK)31 b(Man)m(ual)k FB(had)29 b(the)i(follo)m(wing)h(ac)m(kno)m(wledgmen)m(ts:)390 5121 y(Man)m(y)d(p)s(eople)g(need)g(to)g(b)s(e)f(thank)m(ed)h(for)g (their)g(assistance)h(in)e(pro)s(ducing)g(this)g(man)m(ual.)390 5230 y(Ja)m(y)i(F)-8 b(enlason)31 b(con)m(tributed)f(man)m(y)g(ideas)g (and)f(sample)h(programs.)40 b(Ric)m(hard)30 b(Mlynarik)390 5340 y(and)43 b(Rob)s(ert)g(Chassell)g(ga)m(v)m(e)j(helpful)c(commen)m (ts)j(on)e(drafts)g(of)g(this)g(man)m(ual.)80 b(The)p eop end %%Page: 9 21 TeXDict begin 9 20 bop 3315 -116 a Fr(Preface)93 b FB(9)390 299 y(pap)s(er)29 b Fx(A)i(Supplemen)m(tal)f(Do)s(cumen)m(t)i(for)e Fz(awk)g FB(b)m(y)g(John)g(W.)h(Pierce)g(of)g(the)g(Chemistry)390 408 y(Departmen)m(t)37 b(at)f(UC)g(San)f(Diego,)k(pinp)s(oin)m(ted)c (sev)m(eral)i(issues)e(relev)-5 b(an)m(t)37 b(b)s(oth)e(to)i Fz(awk)390 518 y FB(implemen)m(tation)32 b(and)e(to)h(this)f(man)m (ual,)h(that)g(w)m(ould)f(otherwise)h(ha)m(v)m(e)h(escap)s(ed)e(us.)275 677 y(I)k(w)m(ould)h(lik)m(e)h(to)f(ac)m(kno)m(wledge)j(Ric)m(hard)d (M.)g(Stallman,)i(for)d(his)h(vision)g(of)g(a)g(b)s(etter)g(w)m(orld)g (and)150 787 y(for)30 b(his)g(courage)i(in)e(founding)f(the)i(FSF)f (and)g(starting)h(the)g(GNU)g(Pro)5 b(ject.)275 946 y(The)29 b(follo)m(wing)j(p)s(eople)f(\(in)f(alphab)s(etical)i(order\))e(pro)m (vided)g(helpful)g(commen)m(ts)h(on)g(v)-5 b(arious)30 b(v)m(er-)150 1056 y(sions)g(of)h(this)f(b)s(o)s(ok,)h(up)e(to)i(and)f (including)g(this)g(edition.)42 b(Ric)m(k)32 b(Adams,)e(Nelson)h(H.F.)h (Beeb)s(e,)f(Karl)150 1166 y(Berry)-8 b(,)46 b(Dr.)d(Mic)m(hael)i (Brennan,)g(Ric)m(h)e(Burridge,)i(Claire)e(Cloutier,)k(Diane)c(Close,)k (Scott)c(Dei\014k,)150 1275 y(Christopher)38 b(\(\\T)-8 b(opher"\))40 b(Eliot,)i(Je\013rey)d(F)-8 b(riedl,)42 b(Dr.)e(Darrel)f(Hank)m(erson,)j(Mic)m(hal)e(Jaegermann,)150 1385 y(Dr.)e(Ric)m(hard)f(J.)h(LeBlanc,)j(Mic)m(hael)e(Lijewski,)h(P)m (at)f(Rankin,)g(Miriam)f(Robbins,)h(Mary)e(Sheehan,)150 1494 y(and)30 b(Ch)m(uc)m(k)g(T)-8 b(op)s(orek.)275 1654 y(Rob)s(ert)23 b(J.)g(Chassell)h(pro)m(vided)f(m)m(uc)m(h)h(v)-5 b(aluable)24 b(advice)g(on)g(the)f(use)h(of)f(T)-8 b(exinfo.)39 b(He)24 b(also)h(deserv)m(es)150 1763 y(sp)s(ecial)31 b(thanks)f(for)g(con)m(vincing)i(me)e Fw(not)40 b FB(to)31 b(title)h(this)e(b)s(o)s(ok)g Fx(Ho)m(w)h(T)-8 b(o)31 b(Ga)m(wk)h(P)m(olitely)p FB(.)43 b(Karl)30 b(Berry)150 1873 y(help)s(ed)f(signi\014can)m(tly)j(with)e(the)h(T)1361 1893 y(E)1411 1873 y(X)f(part)g(of)h(T)-8 b(exinfo.)275 2032 y(I)36 b(w)m(ould)h(lik)m(e)i(to)e(thank)g(Marshall)h(and)e (Elaine)i(Hartholz)g(of)f(Seattle)i(and)e(Dr.)g(Bert)h(and)e(Rita)150 2142 y(Sc)m(hreib)s(er)27 b(of)i(Detroit)h(for)e(large)h(amoun)m(ts)f (of)h(quiet)f(v)-5 b(acation)30 b(time)f(in)f(their)g(homes,)h(whic)m (h)f(allo)m(w)m(ed)150 2252 y(me)i(to)i(mak)m(e)f(signi\014can)m(t)g (progress)f(on)h(this)f(b)s(o)s(ok)g(and)f(on)i Fz(gawk)e FB(itself.)275 2411 y(Phil)43 b(Hughes)h(of)h(SSC)d(con)m(tributed)j (in)e(a)i(v)m(ery)f(imp)s(ortan)m(t)h(w)m(a)m(y)g(b)m(y)f(loaning)h(me) f(his)f(laptop)150 2521 y(GNU/Lin)m(ux)31 b(system,)g(not)g(once,)g (but)f(t)m(wice,)i(whic)m(h)e(allo)m(w)m(ed)i(me)f(to)g(do)f(a)h(lot)g (of)g(w)m(ork)g(while)f(a)m(w)m(a)m(y)150 2630 y(from)g(home.)275 2790 y(Da)m(vid)35 b(T)-8 b(rueman)34 b(deserv)m(es)h(sp)s(ecial)h (credit;)h(he)e(has)f(done)h(a)g(y)m(eoman)h(job)e(of)h(ev)m(olving)h Fz(gawk)e FB(so)150 2899 y(that)43 b(it)g(p)s(erforms)e(w)m(ell)i(and)f (without)g(bugs.)76 b(Although)43 b(he)f(is)g(no)h(longer)g(in)m(v)m (olv)m(ed)h(with)e Fz(gawk)p FB(,)150 3009 y(w)m(orking)31 b(with)f(him)g(on)g(this)g(pro)5 b(ject)31 b(w)m(as)g(a)f(signi\014can) m(t)i(pleasure.)275 3168 y(The)40 b(in)m(trepid)h(mem)m(b)s(ers)f(of)h (the)g(GNITS)g(mailing)h(list,)i(and)c(most)i(notably)f(Ulric)m(h)h (Drepp)s(er,)150 3278 y(pro)m(vided)30 b(in)m(v)-5 b(aluable)31 b(help)f(and)g(feedbac)m(k)h(for)f(the)h(design)f(of)h(the)f(in)m (ternationalization)k(features.)275 3437 y(Nelson)d(Beeb)s(e,)h(Martin) f(Bro)m(wn,)h(Andreas)e(Buening,)h(Scott)h(Dei\014k,)g(Darrel)f(Hank)m (erson,)h(Isam)m(u)150 3547 y(Hasega)m(w)m(a,)51 b(Mic)m(hal)46 b(Jaegermann,)j(J)s(\177)-48 b(urgen)44 b(Kahrs,)j(P)m(at)f(Rankin,)i (Kai)d(Uw)m(e)g(Rommel,)k(and)44 b(Eli)150 3656 y(Zaretskii)27 b(\(in)f(alphab)s(etical)h(order\))g(mak)m(e)g(up)e(the)h Fz(gawk)f FB(\\crac)m(k)j(p)s(ortabilit)m(y)f(team.")41 b(Without)27 b(their)150 3766 y(hard)f(w)m(ork)h(and)f(help,)h Fz(gawk)f FB(w)m(ould)h(not)g(b)s(e)f(nearly)h(the)g(\014ne)f(program)h (it)g(is)g(to)s(da)m(y)-8 b(.)41 b(It)27 b(has)f(b)s(een)h(and)150 3875 y(con)m(tin)m(ues)k(to)h(b)s(e)d(a)i(pleasure)f(w)m(orking)h(with) f(this)g(team)i(of)e(\014ne)g(p)s(eople.)275 4035 y(Da)m(vid)40 b(and)e(I)h(w)m(ould)g(lik)m(e)h(to)g(thank)e(Brian)i(Kernighan)e(of)h (Bell)h(Lab)s(oratories)g(for)f(in)m(v)-5 b(aluable)150 4144 y(assistance)37 b(during)e(the)h(testing)h(and)f(debugging)g(of)g Fz(gawk)p FB(,)h(and)e(for)h(help)f(in)h(clarifying)h(n)m(umerous)150 4254 y(p)s(oin)m(ts)29 b(ab)s(out)g(the)h(language.)42 b(W)-8 b(e)30 b(could)g(not)f(ha)m(v)m(e)i(done)e(nearly)g(as)h(go)s(o) s(d)f(a)h(job)f(on)g(either)h Fz(gawk)e FB(or)150 4364 y(its)j(do)s(cumen)m(tation)g(without)f(his)g(help.)275 4523 y(Ch)m(uc)m(k)25 b(T)-8 b(op)s(orek,)28 b(Mary)e(Sheehan,)g(and)g (Claire)g(Coutier)g(of)h(O'Reilly)f(&)g(Asso)s(ciates)i(con)m(tributed) 150 4633 y(signi\014can)m(t)j(editorial)h(help)e(for)g(this)h(b)s(o)s (ok)e(for)h(the)h(3.1)g(release)h(of)f Fz(gawk)p FB(.)275 4792 y(I)d(m)m(ust)g(thank)g(m)m(y)h(w)m(onderful)f(wife,)h(Miriam,)h (for)e(her)g(patience)i(through)e(the)g(man)m(y)h(v)m(ersions)g(of)150 4902 y(this)35 b(pro)5 b(ject,)36 b(for)e(her)g(pro)s(ofreading,)i(and) e(for)g(sharing)g(me)h(with)f(the)h(computer.)54 b(I)34 b(w)m(ould)g(lik)m(e)i(to)150 5011 y(thank)27 b(m)m(y)h(paren)m(ts)f (for)g(their)h(lo)m(v)m(e,)i(and)d(for)g(the)h(grace)h(with)e(whic)m(h) g(they)g(raised)h(and)f(educated)h(me.)150 5121 y(Finally)-8 b(,)36 b(I)d(also)h(m)m(ust)f(ac)m(kno)m(wledge)j(m)m(y)d(gratitude)h (to)g(G-d,)h(for)e(the)g(man)m(y)h(opp)s(ortunities)e(He)i(has)150 5230 y(sen)m(t)28 b(m)m(y)g(w)m(a)m(y)-8 b(,)30 b(as)f(w)m(ell)f(as)g (for)g(the)g(gifts)h(He)f(has)g(giv)m(en)g(me)g(with)g(whic)m(h)g(to)g (tak)m(e)i(adv)-5 b(an)m(tage)29 b(of)f(those)150 5340 y(opp)s(ortunities.)p eop end %%Page: 10 22 TeXDict begin 10 21 bop 150 -116 a FB(10)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(Arnold)g(Robbins)150 408 y(Nof)h(Ay)m(alon)150 518 y(ISRAEL)150 628 y(Marc)m(h,)g(2001)p eop end %%Page: 11 23 TeXDict begin 11 22 bop 2085 -116 a Fr(Chapter)30 b(1:)41 b(Getting)32 b(Started)f(with)f Fz(awk)90 b FB(11)150 299 y Fu(1)80 b(Getting)52 b(Started)h(with)g Fi(awk)150 546 y FB(The)37 b(basic)g(function)g(of)h Fz(awk)e FB(is)h(to)h(searc)m (h)g(\014les)f(for)h(lines)f(\(or)h(other)f(units)g(of)g(text\))i(that) f(con)m(tain)150 655 y(certain)33 b(patterns.)46 b(When)32 b(a)h(line)g(matc)m(hes)g(one)f(of)h(the)f(patterns,)h Fz(awk)f FB(p)s(erforms)e(sp)s(eci\014ed)i(actions)150 765 y(on)k(that)i(line.)59 b Fz(awk)36 b FB(k)m(eeps)h(pro)s(cessing)f (input)g(lines)h(in)f(this)g(w)m(a)m(y)i(un)m(til)f(it)g(reac)m(hes)g (the)g(end)f(of)h(the)150 874 y(input)29 b(\014les.)275 1013 y(Programs)44 b(in)g Fz(awk)g FB(are)h(di\013eren)m(t)g(from)f (programs)g(in)g(most)h(other)g(languages,)k(b)s(ecause)c Fz(awk)150 1123 y FB(programs)33 b(are)h Fx(data-driv)m(en)p FB(;)i(that)e(is,)h(y)m(ou)e(describ)s(e)g(the)h(data)g(y)m(ou)g(w)m (an)m(t)g(to)h(w)m(ork)e(with)g(and)g(then)150 1232 y(what)27 b(to)i(do)e(when)f(y)m(ou)i(\014nd)e(it.)41 b(Most)28 b(other)g(languages)g(are)g Fx(pro)s(cedural)t FB(;)g(y)m(ou)g(ha)m(v)m (e)g(to)h(describ)s(e,)e(in)150 1342 y(great)33 b(detail,)h(ev)m(ery)f (step)e(the)i(program)e(is)h(to)h(tak)m(e.)47 b(When)31 b(w)m(orking)i(with)e(pro)s(cedural)g(languages,)150 1451 y(it)j(is)g(usually)f(m)m(uc)m(h)g(harder)g(to)h(clearly)h (describ)s(e)e(the)g(data)i(y)m(our)e(program)g(will)h(pro)s(cess.)50 b(F)-8 b(or)34 b(this)150 1561 y(reason,)d Fz(awk)e FB(programs)h(are)h (often)g(refreshingly)f(easy)h(to)g(read)f(and)g(write.)275 1700 y(When)d(y)m(ou)g(run)f Fz(awk)p FB(,)h(y)m(ou)h(sp)s(ecify)f(an)g Fz(awk)f Fx(program)h FB(that)h(tells)g Fz(awk)f FB(what)g(to)h(do.)39 b(The)27 b(program)150 1809 y(consists)33 b(of)f(a)h(series)g(of)f Fx(rules)p FB(.)46 b(\(It)33 b(ma)m(y)g(also)g(con)m(tain)h Fx(function)e(de\014nitions)p FB(,)h(an)f(adv)-5 b(anced)32 b(feature)150 1919 y(that)d(w)m(e)f(will)h(ignore)g(for)f(no)m(w.)40 b(See)28 b(Section)h(8.2)h([User-De\014ned)e(F)-8 b(unctions],)30 b(page)f(149.\))41 b(Eac)m(h)29 b(rule)150 2028 y(sp)s(eci\014es)h(one) h(pattern)f(to)h(searc)m(h)g(for)f(and)g(one)h(action)h(to)f(p)s (erform)e(up)s(on)f(\014nding)h(the)i(pattern.)275 2167 y(Syn)m(tactically)-8 b(,)35 b(a)e(rule)f(consists)g(of)g(a)h(pattern)f (follo)m(w)m(ed)i(b)m(y)e(an)g(action.)47 b(The)32 b(action)h(is)f (enclosed)150 2277 y(in)c(curly)h(braces)g(to)g(separate)h(it)f(from)g (the)f(pattern.)41 b(Newlines)29 b(usually)f(separate)i(rules.)40 b(Therefore,)150 2386 y(an)30 b Fz(awk)g FB(program)g(lo)s(oks)h(lik)m (e)g(this:)390 2525 y Fk(pattern)56 b Fz({)48 b Fk(action)56 b Fz(})390 2634 y Fk(pattern)g Fz({)48 b Fk(action)56 b Fz(})390 2744 y(...)150 2983 y FA(1.1)68 b(Ho)l(w)46 b(to)f(Run)g Fq(awk)e FA(Programs)150 3142 y FB(There)c(are)h(sev)m (eral)h(w)m(a)m(ys)f(to)g(run)e(an)i Fz(awk)e FB(program.)68 b(If)39 b(the)h(program)f(is)h(short,)i(it)e(is)f(easiest)i(to)150 3252 y(include)30 b(it)h(in)f(the)h(command)f(that)h(runs)e Fz(awk)p FB(,)g(lik)m(e)j(this:)390 3390 y Fz(awk)47 b(')p Fk(program)11 b Fz(')45 b Fk(input-file1)55 b(input-file2)g Fz(...)275 3529 y FB(When)35 b(the)i(program)f(is)g(long,)i(it)f(is)f (usually)g(more)g(con)m(v)m(enien)m(t)i(to)f(put)e(it)i(in)f(a)g (\014le)g(and)g(run)e(it)150 3639 y(with)c(a)h(command)f(lik)m(e)i (this:)390 3777 y Fz(awk)47 b(-f)g Fk(program-file)55 b(input-file1)g(input-file2)h Fz(...)275 3916 y FB(This)29 b(section)j(discusses)d(b)s(oth)h(mec)m(hanisms,)h(along)g(with)f(sev)m (eral)i(v)-5 b(ariations)32 b(of)e(eac)m(h.)150 4119 y Fj(1.1.1)63 b(One-Shot)41 b(Thro)m(w)m(a)m(w)m(a)m(y)e Fh(awk)i Fj(Programs)150 4266 y FB(Once)22 b(y)m(ou)g(are)g(familiar)g (with)g Fz(awk)p FB(,)h(y)m(ou)f(will)g(often)g(t)m(yp)s(e)g(in)g (simple)f(programs)h(the)g(momen)m(t)g(y)m(ou)g(w)m(an)m(t)150 4376 y(to)33 b(use)e(them.)46 b(Then)31 b(y)m(ou)i(can)f(write)g(the)g (program)g(as)g(the)h(\014rst)e(argumen)m(t)h(of)h(the)f Fz(awk)f FB(command,)150 4486 y(lik)m(e)h(this:)390 4624 y Fz(awk)47 b(')p Fk(program)11 b Fz(')45 b Fk(input-file1)55 b(input-file2)g Fz(...)150 4763 y FB(where)30 b Fx(program)g FB(consists)h(of)f(a)h(series)g(of)f Fx(patterns)k FB(and)c Fx(actions)p FB(,)i(as)f(describ)s(ed)e(earlier.)275 4902 y(This)f(command)h(format)g(instructs)g(the)g Fx(shell)p FB(,)h(or)f(command)g(in)m(terpreter,)h(to)g(start)g Fz(awk)e FB(and)g(use)150 5011 y(the)f Fx(program)f FB(to)h(pro)s(cess) f(records)g(in)h(the)f(input)g(\014le\(s\).)40 b(There)26 b(are)h(single)g(quotes)g(around)e Fx(program)150 5121 y FB(so)31 b(the)h(shell)f(w)m(on't)h(in)m(terpret)f(an)m(y)h Fz(awk)e FB(c)m(haracters)i(as)g(sp)s(ecial)f(shell)h(c)m(haracters.)44 b(The)30 b(quotes)i(also)150 5230 y(cause)g(the)g(shell)g(to)h(treat)g (all)f(of)g Fx(program)g FB(as)g(a)g(single)g(argumen)m(t)g(for)g Fz(awk)p FB(,)f(and)g(allo)m(w)j Fx(program)d FB(to)150 5340 y(b)s(e)f(more)g(than)g(one)h(line)g(long.)p eop end %%Page: 12 24 TeXDict begin 12 23 bop 150 -116 a FB(12)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(This)35 b(format)i(is)f(also)i(useful)d(for)i(running)d(short) i(or)h(medium-sized)f Fz(awk)g FB(programs)g(from)g(shell)150 408 y(scripts,)30 b(b)s(ecause)f(it)h(a)m(v)m(oids)g(the)g(need)f(for)g (a)h(separate)g(\014le)f(for)h(the)f Fz(awk)g FB(program.)40 b(A)29 b(self-con)m(tained)150 518 y(shell)i(script)f(is)g(more)h (reliable)g(b)s(ecause)g(there)f(are)h(no)f(other)h(\014les)f(to)h (misplace.)275 659 y(Section)43 b(1.3)g([Some)g(Simple)f(Examples],)47 b(page)c(17,)j(later)e(in)e(this)h(c)m(hapter,)j(presen)m(ts)d(sev)m (eral)150 769 y(short,)30 b(self-con)m(tained)j(programs.)150 974 y Fj(1.1.2)63 b(Running)41 b Fh(awk)h Fj(Without)f(Input)f(Files) 150 1121 y FB(Y)-8 b(ou)31 b(can)g(also)g(run)e Fz(awk)g FB(without)i(an)m(y)f(input)g(\014les.)40 b(If)30 b(y)m(ou)h(t)m(yp)s (e)g(the)f(follo)m(wing)i(command)e(line:)390 1262 y Fz(awk)47 b(')p Fk(program)11 b Fz(')150 1403 y(awk)37 b FB(applies)i(the)f Fx(program)g FB(to)h(the)f Fx(standard)f(input)p FB(,)j(whic)m(h)d(usually)h(means)g(whatev)m(er)h(y)m(ou)g(t)m(yp)s(e) 150 1513 y(on)31 b(the)f(terminal.)42 b(This)30 b(con)m(tin)m(ues)i(un) m(til)f(y)m(ou)g(indicate)g(end-of-\014le)g(b)m(y)g(t)m(yping)g Fk(Ctrl-d)p FB(.)40 b(\(On)30 b(other)150 1623 y(op)s(erating)36 b(systems,)i(the)e(end-of-\014le)g(c)m(haracter)i(ma)m(y)e(b)s(e)g (di\013eren)m(t.)58 b(F)-8 b(or)36 b(example,)j(on)d(OS/2)g(and)150 1732 y(MS-DOS,)30 b(it)h(is)g Fk(Ctrl-z)p FB(.\))275 1873 y(As)36 b(an)g(example,)j(the)e(follo)m(wing)h(program)e(prin)m (ts)g(a)g(friendly)g(piece)h(of)g(advice)g(\(from)g(Douglas)150 1983 y(Adams's)42 b Fx(The)f(Hitc)m(hhik)m(er's)i(Guide)f(to)g(the)g (Galaxy)8 b FB(\),)47 b(to)42 b(k)m(eep)h(y)m(ou)f(from)f(w)m(orrying)h (ab)s(out)g(the)150 2092 y(complexities)32 b(of)f(computer)f (programming)g(\()p Fz(BEGIN)f FB(is)i(a)g(feature)f(w)m(e)h(ha)m(v)m (en't)h(discussed)d(y)m(et\):)390 2233 y Fz($)47 b(awk)g("BEGIN)f({)i (print)e(\\"Don't)g(Panic!\\")g(}")410 2347 y Fy(a)533 2343 y Fz(Don't)h(Panic!)275 2484 y FB(This)32 b(program)h(do)s(es)g (not)h(read)f(an)m(y)h(input.)49 b(The)33 b(`)p Fz(\\)p FB(')g(b)s(efore)g(eac)m(h)i(of)e(the)h(inner)f(double)f(quotes)150 2594 y(is)d(necessary)h(b)s(ecause)f(of)h(the)f(shell's)h(quoting)f (rules|in)g(particular)g(b)s(ecause)h(it)f(mixes)h(b)s(oth)e(single)150 2703 y(quotes)j(and)f(double)g(quotes.)1186 2670 y Fo(1)275 2844 y FB(This)g(next)i(simple)g Fz(awk)e FB(program)i(em)m(ulates)g (the)g Fz(cat)f FB(utilit)m(y;)j(it)e(copies)g(whatev)m(er)g(y)m(ou)g (t)m(yp)s(e)g(on)150 2954 y(the)f(k)m(eyb)s(oard)f(to)h(its)g(standard) e(output)h(\(wh)m(y)g(this)h(w)m(orks)f(is)g(explained)h(shortly\).)390 3095 y Fz($)47 b(awk)g('{)h(print)e(}')390 3205 y(Now)h(is)g(the)g (time)g(for)g(all)f(good)h(men)410 3318 y Fy(a)533 3314 y Fz(Now)g(is)g(the)g(time)g(for)g(all)g(good)f(men)390 3424 y(to)h(come)g(to)g(the)g(aid)g(of)g(their)f(country.)410 3537 y Fy(a)533 3533 y Fz(to)h(come)g(to)g(the)g(aid)g(of)g(their)g (country.)390 3643 y(Four)g(score)f(and)h(seven)f(years)h(ago,)f(...) 410 3756 y Fy(a)533 3752 y Fz(Four)h(score)f(and)h(seven)f(years)h (ago,)f(...)390 3862 y(What,)g(me)i(worry?)410 3976 y Fy(a)533 3972 y Fz(What,)f(me)g(worry?)390 4081 y Fk(Ctrl-d)150 4287 y Fj(1.1.3)63 b(Running)41 b(Long)h(Programs)150 4434 y FB(Sometimes)32 b(y)m(our)g Fz(awk)f FB(programs)h(can)g(b)s(e)f (v)m(ery)h(long.)46 b(In)31 b(this)h(case,)h(it)f(is)g(more)g(con)m(v)m (enien)m(t)i(to)f(put)150 4544 y(the)h(program)g(in)m(to)h(a)g (separate)g(\014le.)52 b(In)34 b(order)g(to)g(tell)i Fz(awk)d FB(to)i(use)f(that)h(\014le)f(for)g(its)g(program,)i(y)m(ou) 150 4653 y(t)m(yp)s(e:)390 4794 y Fz(awk)47 b(-f)g Fk(source-file)55 b(input-file1)h(input-file2)f Fz(...)275 4935 y FB(The)31 b(`)p Fz(-f)p FB(')i(instructs)f(the)h Fz(awk)e FB(utilit)m(y)j(to)f (get)h(the)e Fz(awk)g FB(program)g(from)g(the)h(\014le)f Fx(source-\014le)p FB(.)48 b(An)m(y)150 5045 y(\014le)30 b(name)h(can)g(b)s(e)e(used)h(for)g Fx(source-\014le)p FB(.)41 b(F)-8 b(or)31 b(example,)h(y)m(ou)f(could)f(put)g(the)g (program:)p 150 5154 1200 4 v 199 5221 a Fo(1)275 5253 y Fn(Although)25 b(w)n(e)i(generally)g(recommend)f(the)f(use)i(of)f (single)i(quotes)d(around)h(the)g(program)h(text,)f(double)g(quotes)f (are)275 5340 y(needed)g(here)g(in)h(order)g(to)g(put)e(the)i(single)g (quote)g(in)n(to)f(the)h(message.)p eop end %%Page: 13 25 TeXDict begin 13 24 bop 2085 -116 a Fr(Chapter)30 b(1:)41 b(Getting)32 b(Started)f(with)f Fz(awk)90 b FB(13)390 299 y Fz(BEGIN)46 b({)i(print)e("Don't)g(Panic!")g(})150 442 y FB(in)m(to)31 b(the)g(\014le)f(`)p Fz(advice)p FB('.)40 b(Then)29 b(this)i(command:)390 585 y Fz(awk)47 b(-f)g(advice)150 728 y FB(do)s(es)30 b(the)h(same)f(thing)h(as)f(this) h(one:)390 871 y Fz(awk)47 b("BEGIN)f({)h(print)g(\\"Don't)f(Panic!\\") f(}")150 1014 y FB(This)30 b(w)m(as)g(explained)h(earlier)g(\(see)g (Section)h(1.1.2)g([Running)d Fz(awk)g FB(Without)i(Input)e(Files],)j (page)f(12\).)150 1124 y(Note)h(that)g(y)m(ou)g(don't)f(usually)g(need) g(single)h(quotes)f(around)f(the)i(\014le)f(name)g(that)h(y)m(ou)f(sp)s (ecify)g(with)150 1234 y(`)p Fz(-f)p FB(',)c(b)s(ecause)f(most)g (\014le)g(names)f(don't)h(con)m(tain)h(an)m(y)f(of)g(the)g(shell's)h (sp)s(ecial)f(c)m(haracters.)41 b(Notice)27 b(that)150 1343 y(in)37 b(`)p Fz(advice)p FB(',)g(the)g Fz(awk)f FB(program)h(did)f(not)h(ha)m(v)m(e)h(single)g(quotes)f(around)f(it.)61 b(The)36 b(quotes)i(are)f(only)150 1453 y(needed)30 b(for)g(programs)g (that)h(are)g(pro)m(vided)f(on)g(the)h Fz(awk)e FB(command)h(line.)275 1596 y(If)c(y)m(ou)h(w)m(an)m(t)h(to)g(iden)m(tify)f(y)m(our)g Fz(awk)f FB(program)h(\014les)f(clearly)j(as)e(suc)m(h,)g(y)m(ou)h(can) f(add)f(the)h(extension)150 1706 y(`)p Fz(.awk)p FB(')34 b(to)h(the)g(\014le)f(name.)54 b(This)33 b(do)s(esn't)i(a\013ect)h(the) e(execution)i(of)f(the)f Fz(awk)g FB(program)g(but)g(it)h(do)s(es)150 1815 y(mak)m(e)c(\\housek)m(eeping")h(easier.)150 2023 y Fj(1.1.4)63 b(Executable)39 b Fh(awk)j Fj(Programs)150 2170 y FB(Once)26 b(y)m(ou)g(ha)m(v)m(e)h(learned)f Fz(awk)p FB(,)g(y)m(ou)h(ma)m(y)f(w)m(an)m(t)h(to)g(write)f(self-con)m(tained)i Fz(awk)d FB(scripts,)h(using)g(the)g(`)p Fz(#!)p FB(')150 2280 y(script)k(mec)m(hanism.)41 b(Y)-8 b(ou)30 b(can)g(do)g(this)f(on) h(man)m(y)g(Unix)g(systems)2462 2247 y Fo(2)2529 2280 y FB(as)g(w)m(ell)g(as)g(on)g(the)g(GNU)h(system.)150 2389 y(F)-8 b(or)31 b(example,)g(y)m(ou)g(could)g(up)s(date)e(the)i (\014le)f(`)p Fz(advice)p FB(')f(to)i(lo)s(ok)g(lik)m(e)h(this:)390 2532 y Fz(#!)47 b(/bin/awk)f(-f)390 2751 y(BEGIN)g({)i(print)e("Don't)g (Panic!")g(})150 2894 y FB(After)28 b(making)g(this)f(\014le)h (executable)h(\(with)f(the)g Fz(chmod)e FB(utilit)m(y\),)k(simply)d(t)m (yp)s(e)h(`)p Fz(advice)p FB(')f(at)h(the)g(shell)150 3004 y(and)i(the)g(system)h(arranges)f(to)i(run)d Fz(awk)1572 2971 y Fo(3)1638 3004 y FB(as)i(if)f(y)m(ou)h(had)f(t)m(yp)s(ed)g(`)p Fz(awk)f(-f)h(advice)p FB(':)390 3147 y Fz($)47 b(chmod)g(+x)g(advice) 390 3257 y($)g(advice)410 3370 y Fy(a)533 3366 y Fz(Don't)g(Panic!)150 3509 y FB(\(W)-8 b(e)37 b(assume)e(y)m(ou)h(ha)m(v)m(e)g(the)g(curren)m (t)f(directory)h(in)f(y)m(our)h(shell's)f(searc)m(h)h(path)g(v)-5 b(ariable)36 b(\(t)m(ypically)150 3619 y Fz($PATH)p FB(\).)k(If)30 b(not,)g(y)m(ou)h(ma)m(y)g(need)f(to)h(t)m(yp)s(e)g(`)p Fz(./advice)p FB(')e(at)i(the)f(shell.\))275 3762 y(Self-con)m(tained)k Fz(awk)e FB(scripts)h(are)h(useful)e(when)g(y)m(ou)h(w)m(an)m(t)h(to)g (write)f(a)h(program)f(that)g(users)g(can)150 3872 y(in)m(v)m(ok)m(e)f (without)f(their)f(ha)m(ving)h(to)g(kno)m(w)g(that)f(the)h(program)f (is)h(written)f(in)g Fz(awk)p FB(.)150 4080 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b(P)m(ortabilit)m(y)40 b(Issues)i(with)f(`)p Fh(#!)p Fj(')150 4227 y FB(Some)30 b(systems)g(limit)h(the)f(length)h (of)f(the)g(in)m(terpreter)g(name)h(to)f(32)h(c)m(haracters.)42 b(Often,)30 b(this)g(can)h(b)s(e)150 4336 y(dealt)g(with)f(b)m(y)h (using)e(a)i(sym)m(b)s(olic)g(link.)275 4479 y(Y)-8 b(ou)33 b(should)g(not)g(put)g(more)g(than)g(one)h(argumen)m(t)g(on)f(the)h(`)p Fz(#!)p FB(')f(line)h(after)f(the)h(path)f(to)h Fz(awk)p FB(.)49 b(It)150 4589 y(do)s(es)34 b(not)g(w)m(ork.)51 b(The)33 b(op)s(erating)h(system)g(treats)h(the)f(rest)g(of)g(the)g (line)g(as)h(a)f(single)g(argumen)m(t)h(and)p 150 4702 1200 4 v 199 4769 a Fo(2)275 4801 y Fn(The)26 b(`)p Fm(#!)p Fn(')i(mec)n(hanism)f(w)n(orks)g(on)g(Lin)n(ux)e(systems,)j(systems)f (deriv)n(ed)f(from)h(the)f(4.4-Lite)i(Berk)n(eley)e(Soft)n(w)n(are)i (Dis-)275 4888 y(tribution,)d(and)h(most)g(commercial)h(Unix)e (systems.)199 4960 y Fo(3)275 4991 y Fn(The)36 b(line)g(b)r(eginning)g (with)g(`)p Fm(#!)p Fn(')h(lists)g(the)e(full)i(\014le)f(name)g(of)g (an)g(in)n(terpreter)g(to)g(run)f(and)g(an)h(optional)h(initial)275 5078 y(command-line)c(argumen)n(t)g(to)g(pass)h(to)f(that)g(in)n (terpreter.)57 b(The)33 b(op)r(erating)h(system)f(then)g(runs)f(the)h (in)n(terpreter)275 5166 y(with)26 b(the)f(giv)n(en)h(argumen)n(t)g (and)f(the)h(full)h(argumen)n(t)f(list)g(of)h(the)e(executed)h (program.)36 b(The)26 b(\014rst)g(argumen)n(t)f(in)h(the)275 5253 y(list)e(is)f(the)g(full)h(\014le)g(name)f(of)h(the)f Fm(awk)h Fn(program.)34 b(The)24 b(rest)f(of)h(the)f(argumen)n(t)h (list)g(con)n(tains)f(either)h(options)g(to)f Fm(awk)p Fn(,)275 5340 y(or)j(data)f(\014les,)i(or)f(b)r(oth.)p eop end %%Page: 14 26 TeXDict begin 14 25 bop 150 -116 a FB(14)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(passes)h(it)g(to)h Fz(awk)p FB(.)41 b(Doing)32 b(this)f(leads)h(to)f(confusing)g(b)s(eha)m(vior|most)g(lik)m(ely)i(a)e (usage)g(diagnostic)i(of)150 408 y(some)e(sort)f(from)g Fz(awk)p FB(.)275 549 y(Finally)-8 b(,)36 b(the)d(v)-5 b(alue)34 b(of)g Fz(ARGV[0])e FB(\(see)i(Section)h(6.5)f([Built-in)h(V) -8 b(ariables],)36 b(page)f(107\))g(v)-5 b(aries)34 b(de-)150 659 y(p)s(ending)40 b(up)s(on)f(y)m(our)j(op)s(erating)f(system.)74 b(Some)41 b(systems)g(put)g(`)p Fz(awk)p FB(')f(there,)45 b(some)c(put)g(the)g(full)150 768 y(pathname)34 b(of)h Fz(awk)e FB(\(suc)m(h)h(as)h(`)p Fz(/bin/awk)p FB('\),)f(and)g(some)h (put)e(the)i(name)f(of)h(y)m(our)f(script)g(\(`)p Fz(advice)p FB('\).)150 878 y(Don't)d(rely)g(on)f(the)h(v)-5 b(alue)31 b(of)f Fz(ARGV[0])e FB(to)k(pro)m(vide)e(y)m(our)g(script)h(name.)150 1084 y Fj(1.1.5)63 b(Commen)m(ts)41 b(in)g Fh(awk)g Fj(Programs)150 1231 y FB(A)36 b Fx(commen)m(t)k FB(is)c(some)h(text)g(that)g(is)g (included)e(in)h(a)h(program)f(for)g(the)h(sak)m(e)g(of)g(h)m(uman)e (readers;)k(it)150 1340 y(is)31 b(not)h(really)g(an)f(executable)i (part)e(of)g(the)h(program.)43 b(Commen)m(ts)31 b(can)h(explain)g(what) f(the)g(program)150 1450 y(do)s(es)j(and)f(ho)m(w)h(it)h(w)m(orks.)52 b(Nearly)35 b(all)g(programming)f(languages)h(ha)m(v)m(e)h(pro)m (visions)e(for)g(commen)m(ts,)150 1559 y(as)d(programs)f(are)g(t)m (ypically)j(hard)c(to)i(understand)e(without)h(them.)275 1700 y(In)d(the)h Fz(awk)f FB(language,)j(a)e(commen)m(t)h(starts)f (with)g(the)g(sharp)e(sign)i(c)m(haracter)i(\(`)p Fz(#)p FB('\))f(and)e(con)m(tin)m(ues)150 1810 y(to)k(the)g(end)f(of)h(the)g (line.)42 b(The)30 b(`)p Fz(#)p FB(')g(do)s(es)h(not)g(ha)m(v)m(e)g(to) h(b)s(e)e(the)h(\014rst)e(c)m(haracter)k(on)d(the)h(line.)42 b(The)30 b Fz(awk)150 1919 y FB(language)j(ignores)g(the)f(rest)g(of)g (a)h(line)f(follo)m(wing)i(a)e(sharp)f(sign.)46 b(F)-8 b(or)32 b(example,)i(w)m(e)e(could)g(ha)m(v)m(e)i(put)150 2029 y(the)d(follo)m(wing)g(in)m(to)h(`)p Fz(advice)p FB(':)390 2170 y Fz(#)47 b(This)g(program)f(prints)g(a)h(nice)g (friendly)f(message.)93 b(It)47 b(helps)390 2279 y(#)g(keep)g(novice)f (users)h(from)f(being)h(afraid)f(of)h(the)g(computer.)390 2389 y(BEGIN)190 b({)47 b(print)f("Don't)g(Panic!")g(})275 2530 y FB(Y)-8 b(ou)30 b(can)g(put)f(commen)m(t)i(lines)f(in)m(to)g(k)m (eyb)s(oard-comp)s(osed)g(thro)m(w)m(a)m(w)m(a)m(y)i Fz(awk)d FB(programs,)h(but)f(this)150 2639 y(usually)f(isn't)g(v)m (ery)h(useful;)f(the)h(purp)s(ose)d(of)j(a)f(commen)m(t)i(is)e(to)h (help)f(y)m(ou)g(or)h(another)f(p)s(erson)f(under-)150 2749 y(stand)j(the)h(program)f(when)f(reading)i(it)f(at)i(a)e(later)i (time.)275 2890 y Fr(Caution:)40 b FB(As)30 b(men)m(tioned)h(in)f (Section)g(1.1.1)i([One-Shot)e(Thro)m(w)m(a)m(w)m(a)m(y)i Fz(awk)d FB(Programs],)i(page)g(11,)150 2999 y(y)m(ou)40 b(can)g(enclose)g(small)g(to)g(medium)f(programs)g(in)g(single)h (quotes,)j(in)c(order)g(to)h(k)m(eep)g(y)m(our)g(shell)150 3109 y(scripts)c(self-con)m(tained.)59 b(When)36 b(doing)g(so,)i Fw(don)-9 b('t)45 b FB(put)36 b(an)f(ap)s(ostrophe)h(\(i.e.,)j(a)d (single)h(quote\))g(in)m(to)150 3219 y(a)44 b(commen)m(t)g(\(or)g(an)m (ywhere)g(else)g(in)f(y)m(our)h(program\).)80 b(The)43 b(shell)g(in)m(terprets)h(the)g(quote)g(as)g(the)150 3328 y(closing)33 b(quote)f(for)f(the)h(en)m(tire)h(program.)44 b(As)31 b(a)h(result,)g(usually)g(the)g(shell)f(prin)m(ts)g(a)h (message)h(ab)s(out)150 3438 y(mismatc)m(hed)c(quotes,)h(and)d(if)i Fz(awk)e FB(actually)j(runs,)e(it)h(will)f(probably)g(prin)m(t)g (strange)h(messages)g(ab)s(out)150 3547 y(syn)m(tax)i(errors.)40 b(F)-8 b(or)31 b(example,)h(lo)s(ok)f(at)g(the)f(follo)m(wing:)390 3688 y Fz($)47 b(awk)g('{)h(print)e("hello")g(})h(#)h(let's)e(be)h (cute')390 3798 y(>)275 3939 y FB(The)31 b(shell)h(sees)g(that)h(the)f (\014rst)f(t)m(w)m(o)j(quotes)e(matc)m(h,)h(and)f(that)g(a)h(new)e (quoted)h(ob)5 b(ject)33 b(b)s(egins)e(at)150 4048 y(the)f(end)e(of)i (the)f(command)g(line.)41 b(It)30 b(therefore)f(prompts)g(with)g(the)g (secondary)h(prompt,)e(w)m(aiting)j(for)150 4158 y(more)g(input.)39 b(With)31 b(Unix)f Fz(awk)p FB(,)g(closing)i(the)e(quoted)h(string)f (pro)s(duces)f(this)h(result:)390 4299 y Fz($)47 b(awk)g('{)h(print)e ("hello")g(})h(#)h(let's)e(be)h(cute')390 4408 y(>)g(')p 410 4460 217 5 v 410 4541 5 81 v 433 4521 a Fl(erro)m(r)p 622 4541 V 410 4545 217 5 v 724 4518 a Fz(awk:)g(can't)f(open)h(file)f (be)p 410 4570 V 410 4650 5 81 v 433 4630 a Fl(erro)m(r)p 622 4650 V 410 4655 217 5 v 772 4627 a Fz(source)g(line)h(number)f(1) 275 4768 y FB(Putting)33 b(a)g(bac)m(kslash)g(b)s(efore)g(the)g(single) g(quote)h(in)e(`)p Fz(let's)p FB(')g(w)m(ouldn't)h(help,)g(since)g(bac) m(kslashes)150 4878 y(are)28 b(not)h(sp)s(ecial)f(inside)g(single)g (quotes.)41 b(The)27 b(next)h(subsection)g(describ)s(es)f(the)h (shell's)h(quoting)f(rules.)150 5083 y Fj(1.1.6)63 b(Shell-Quoting)42 b(Issues)150 5230 y FB(F)-8 b(or)25 b(short)e(to)i(medium)e(length)i Fz(awk)e FB(programs,)i(it)f(is)g(most)h(con)m(v)m(enien)m(t)h(to)e(en) m(ter)h(the)f(program)g(on)g(the)150 5340 y Fz(awk)h FB(command)i(line.)39 b(This)26 b(is)g(b)s(est)g(done)g(b)m(y)h (enclosing)g(the)f(en)m(tire)i(program)e(in)g(single)h(quotes.)40 b(This)p eop end %%Page: 15 27 TeXDict begin 15 26 bop 2085 -116 a Fr(Chapter)30 b(1:)41 b(Getting)32 b(Started)f(with)f Fz(awk)90 b FB(15)150 299 y(is)33 b(true)f(whether)g(y)m(ou)h(are)h(en)m(tering)f(the)g (program)f(in)m(teractiv)m(ely)k(at)e(the)f(shell)g(prompt,)f(or)h (writing)150 408 y(it)e(as)g(part)f(of)g(a)h(larger)g(shell)g(script:) 390 549 y Fz(awk)47 b(')p Fk(program)e(text)11 b Fz(')46 b Fk(input-file1)56 b(input-file2)f Fz(...)275 689 y FB(Once)39 b(y)m(ou)h(are)g(w)m(orking)h(with)e(the)h(shell,)i(it)f(is) e(helpful)g(to)i(ha)m(v)m(e)g(a)f(basic)g(kno)m(wledge)h(of)f(shell)150 799 y(quoting)k(rules.)80 b(The)43 b(follo)m(wing)i(rules)f(apply)f (only)h(to)g(POSIX-complian)m(t,)k(Bourne-st)m(yle)d(shells)150 908 y(\(suc)m(h)30 b(as)h Fz(bash)p FB(,)e(the)i(GNU)g(Bourne-Again)g (Shell\).)41 b(If)30 b(y)m(ou)h(use)f Fz(csh)p FB(,)g(y)m(ou're)h(on)f (y)m(our)g(o)m(wn.)225 1048 y Fy(\017)60 b FB(Quoted)30 b(items)g(can)g(b)s(e)g(concatenated)i(with)d(nonquoted)h(items)g(as)g (w)m(ell)h(as)f(with)g(other)g(quoted)330 1158 y(items.)41 b(The)30 b(shell)h(turns)e(ev)m(erything)i(in)m(to)g(one)g(argumen)m(t) g(for)f(the)h(command.)225 1295 y Fy(\017)60 b FB(Preceding)32 b(an)m(y)f(single)h(c)m(haracter)h(with)d(a)i(bac)m(kslash)g(\(`)p Fz(\\)p FB('\))g(quotes)g(that)f(c)m(haracter.)45 b(The)31 b(shell)330 1405 y(remo)m(v)m(es)h(the)e(bac)m(kslash)h(and)f(passes)g (the)h(quoted)f(c)m(haracter)i(on)f(to)g(the)f(command.)225 1542 y Fy(\017)60 b FB(Single)38 b(quotes)g(protect)h(ev)m(erything)g (b)s(et)m(w)m(een)f(the)g(op)s(ening)g(and)f(closing)i(quotes.)63 b(The)38 b(shell)330 1652 y(do)s(es)26 b(no)f(in)m(terpretation)j(of)e (the)g(quoted)g(text,)i(passing)e(it)g(on)g(v)m(erbatim)h(to)g(the)f (command.)39 b(It)26 b(is)330 1761 y Fw(imp)-5 b(ossible)31 b FB(to)23 b(em)m(b)s(ed)e(a)i(single)g(quote)g(inside)f(single-quoted) h(text.)39 b(Refer)22 b(bac)m(k)h(to)g(Section)g(1.1.5)330 1871 y([Commen)m(ts)31 b(in)f Fz(awk)f FB(Programs],)i(page)g(14,)h (for)e(an)g(example)h(of)g(what)f(happ)s(ens)f(if)h(y)m(ou)h(try)-8 b(.)225 2008 y Fy(\017)60 b FB(Double)31 b(quotes)g(protect)h(most)f (things)f(b)s(et)m(w)m(een)i(the)f(op)s(ening)f(and)g(closing)i (quotes.)42 b(The)30 b(shell)330 2118 y(do)s(es)k(at)h(least)g(v)-5 b(ariable)35 b(and)f(command)g(substitution)g(on)g(the)h(quoted)f (text.)53 b(Di\013eren)m(t)36 b(shells)330 2228 y(ma)m(y)31 b(do)f(additional)i(kinds)d(of)h(pro)s(cessing)h(on)f(double-quoted)g (text.)330 2365 y(Since)42 b(certain)h(c)m(haracters)h(within)d (double-quoted)h(text)h(are)g(pro)s(cessed)e(b)m(y)h(the)g(shell,)k (they)330 2475 y(m)m(ust)36 b(b)s(e)f Fx(escap)s(ed)40 b FB(within)35 b(the)i(text.)58 b(Of)36 b(note)g(are)h(the)f(c)m (haracters)h(`)p Fz($)p FB(',)h(`)p Fz(`)p FB(',)g(`)p Fz(\\)p FB(',)g(and)d(`)p Fz(")p FB(',)j(all)330 2584 y(of)31 b(whic)m(h)g(m)m(ust)g(b)s(e)g(preceded)f(b)m(y)h(a)h(bac)m (kslash)g(within)e(double-quoted)i(text)g(if)f(they)g(are)h(to)g(b)s(e) 330 2694 y(passed)c(on)f(literally)j(to)f(the)f(program.)40 b(\(The)28 b(leading)g(bac)m(kslash)h(is)f(stripp)s(ed)f(\014rst.\))39 b(Th)m(us,)28 b(the)330 2803 y(example)k(seen)f(previously)g(in)g (Section)h(1.1.2)h([Running)d Fz(awk)g FB(Without)i(Input)e(Files],)j (page)f(12,)330 2913 y(is)e(applicable:)570 3050 y Fz($)47 b(awk)g("BEGIN)f({)i(print)e(\\"Don't)g(Panic!\\")g(}")590 3164 y Fy(a)713 3160 y Fz(Don't)h(Panic!)330 3297 y FB(Note)32 b(that)f(the)f(single)h(quote)g(is)g(not)f(sp)s(ecial)h(within)f (double)g(quotes.)225 3435 y Fy(\017)60 b FB(Null)22 b(strings)g(are)h(remo)m(v)m(ed)g(when)f(they)g(o)s(ccur)g(as)g(part)h (of)f(a)h(non-n)m(ull)f(command-line)g(argumen)m(t,)330 3544 y(while)j(explicit)g(non-n)m(ull)g(ob)5 b(jects)25 b(are)g(k)m(ept.)39 b(F)-8 b(or)25 b(example,)i(to)e(sp)s(ecify)f(that) h(the)g(\014eld)f(separator)330 3654 y Fz(FS)30 b FB(should)f(b)s(e)h (set)h(to)g(the)f(n)m(ull)h(string,)f(use:)570 3791 y Fz(awk)47 b(-F)g("")g(')p Fk(program)11 b Fz(')45 b Fk(files)57 b Fz(#)47 b(correct)330 3929 y FB(Don't)31 b(use)f(this:)570 4066 y Fz(awk)47 b(-F"")g(')p Fk(program)11 b Fz(')44 b Fk(files)105 b Fz(#)47 b(wrong!)330 4203 y FB(In)28 b(the)i(second)f(case,)i Fz(awk)d FB(will)i(attempt)g(to)g(use)f(the)g (text)i(of)e(the)g(program)g(as)h(the)f(v)-5 b(alue)30 b(of)f Fz(FS)p FB(,)330 4313 y(and)d(the)h(\014rst)f(\014le)h(name)f (as)h(the)g(text)h(of)f(the)f(program!)40 b(This)26 b(results)g(in)g (syn)m(tax)i(errors)e(at)h(b)s(est,)330 4422 y(and)j(confusing)g(b)s (eha)m(vior)g(at)h(w)m(orst.)275 4590 y(Mixing)i(single)h(and)e(double) g(quotes)i(is)f(di\016cult.)48 b(Y)-8 b(ou)33 b(ha)m(v)m(e)h(to)g (resort)f(to)g(shell)h(quoting)f(tric)m(ks,)150 4700 y(lik)m(e)f(this:)390 4840 y Fz($)47 b(awk)g('BEGIN)f({)i(print)e ("Here)h(is)g(a)g(single)f(quote)h(<'"'"'>")e(}')410 4954 y Fy(a)533 4950 y Fz(Here)i(is)g(a)g(single)g(quote)f(<'>)150 5090 y FB(This)38 b(program)g(consists)h(of)f(three)h(concatenated)h (quoted)f(strings.)64 b(The)38 b(\014rst)g(and)f(the)i(third)f(are)150 5200 y(single-quoted,)32 b(the)e(second)h(is)f(double-quoted.)275 5340 y(This)f(can)i(b)s(e)f(\\simpli\014ed")g(to:)p eop end %%Page: 16 28 TeXDict begin 16 27 bop 150 -116 a FB(16)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz($)47 b(awk)g('BEGIN)f({)i(print)e("Here)h(is)g(a)g(single)f (quote)h(<'\\''>")f(}')410 412 y Fy(a)533 408 y Fz(Here)h(is)g(a)g (single)g(quote)f(<'>)150 549 y FB(Judge)30 b(for)g(y)m(ourself)h(whic) m(h)f(of)g(these)h(t)m(w)m(o)h(is)e(the)h(more)f(readable.)275 689 y(Another)25 b(option)h(is)f(to)i(use)e(double)g(quotes,)i (escaping)f(the)g(em)m(b)s(edded,)g Fz(awk)p FB(-lev)m(el)g(double)f (quotes:)390 829 y Fz($)47 b(awk)g("BEGIN)f({)i(print)e(\\"Here)g(is)i (a)f(single)f(quote)g(<'>\\")h(}")410 943 y Fy(a)533 939 y Fz(Here)g(is)g(a)g(single)g(quote)f(<'>)150 1079 y FB(This)35 b(option)i(is)f(also)h(painful,)g(b)s(ecause)f(double)g (quotes,)i(bac)m(kslashes,)h(and)c(dollar)i(signs)f(are)h(v)m(ery)150 1188 y(common)31 b(in)f Fz(awk)f FB(programs.)275 1328 y(A)d(third)g(option)i(is)f(to)g(use)g(the)g(o)s(ctal)h(escap)s(e)f (sequence)g(equiv)-5 b(alen)m(ts)28 b(for)f(the)g(single-)h(and)e (double-)150 1438 y(quote)31 b(c)m(haracters,)h(lik)m(e)g(so:)390 1578 y Fz($)47 b(awk)g('BEGIN)f({)i(print)e("Here)h(is)g(a)g(single)f (quote)h(<\\47>")f(}')410 1692 y Fy(a)533 1688 y Fz(Here)h(is)g(a)g (single)g(quote)f(<'>)390 1797 y($)h(awk)g('BEGIN)f({)i(print)e("Here)h (is)g(a)g(double)f(quote)h(<\\42>")f(}')410 1911 y Fy(a)533 1907 y Fz(Here)h(is)g(a)g(double)g(quote)f(<">)150 2047 y FB(This)30 b(w)m(orks)g(nicely)-8 b(,)32 b(except)f(that)g(y)m(ou)g (should)e(commen)m(t)j(clearly)f(what)f(the)h(escap)s(es)g(mean.)275 2187 y(A)f(fourth)g(option)g(is)h(to)g(use)f(command-line)h(v)-5 b(ariable)31 b(assignmen)m(t,)g(lik)m(e)h(this:)390 2327 y Fz($)47 b(awk)g(-v)h(sq="'")e('BEGIN)g({)h(print)g("Here)f(is)h(a)h (single)e(quote)g(<")h(sq)g(">")g(}')410 2441 y Fy(a)533 2437 y Fz(Here)g(is)g(a)g(single)g(quote)f(<'>)275 2577 y FB(If)25 b(y)m(ou)g(really)i(need)e(b)s(oth)g(single)h(and)f(double)g (quotes)h(in)f(y)m(our)g Fz(awk)g FB(program,)h(it)g(is)g(probably)e(b) s(est)150 2687 y(to)k(mo)m(v)m(e)g(it)g(in)m(to)g(a)f(separate)h (\014le,)h(where)d(the)h(shell)h(w)m(on't)f(b)s(e)g(part)g(of)g(the)g (picture,)h(and)e(y)m(ou)i(can)f(sa)m(y)150 2796 y(what)j(y)m(ou)h (mean.)150 3037 y FA(1.2)68 b(Data)46 b(Files)g(for)f(the)g(Examples) 150 3197 y FB(Man)m(y)33 b(of)g(the)g(examples)h(in)e(this)h(b)s(o)s (ok)f(tak)m(e)j(their)d(input)g(from)h(t)m(w)m(o)h(sample)f(data)g (\014les.)48 b(The)32 b(\014rst,)150 3306 y(`)p Fz(BBS-list)p FB(',)c(represen)m(ts)h(a)h(list)g(of)g(computer)f(bulletin)g(b)s(oard) f(systems)i(together)h(with)e(information)150 3416 y(ab)s(out)h(those)h (systems.)42 b(The)30 b(second)g(data)i(\014le,)f(called)g(`)p Fz(inventory-shipped)p FB(',)c(con)m(tains)32 b(informa-)150 3525 y(tion)f(ab)s(out)f(mon)m(thly)h(shipmen)m(ts.)40 b(In)29 b(b)s(oth)h(\014les,)h(eac)m(h)g(line)g(is)f(considered)g(to)i (b)s(e)d(one)i Fx(record)p FB(.)275 3666 y(In)26 b(the)h(data)h(\014le) f(`)p Fz(BBS-list)p FB(',)f(eac)m(h)i(record)f(con)m(tains)h(the)f (name)g(of)g(a)h(computer)f(bulletin)g(b)s(oard,)150 3775 y(its)45 b(phone)f(n)m(um)m(b)s(er,)j(the)d(b)s(oard's)g(baud)f (rate\(s\),)50 b(and)43 b(a)i(co)s(de)g(for)f(the)h(n)m(um)m(b)s(er)e (of)i(hours)e(it)i(is)150 3885 y(op)s(erational.)k(An)33 b(`)p Fz(A)p FB(')g(in)f(the)h(last)h(column)f(means)f(the)i(b)s(oard)d (op)s(erates)j(24)f(hours)f(a)h(da)m(y)-8 b(.)49 b(A)33 b(`)p Fz(B)p FB(')g(in)150 3994 y(the)27 b(last)g(column)g(means)f(the) h(b)s(oard)e(only)i(op)s(erates)g(on)g(ev)m(ening)g(and)f(w)m(eek)m (end)h(hours.)39 b(A)26 b(`)p Fz(C)p FB(')h(means)150 4104 y(the)k(b)s(oard)e(op)s(erates)i(only)f(on)h(w)m(eek)m(ends:)390 4244 y Fz(aardvark)236 b(555-5553)h(1200/300)475 b(B)390 4354 y(alpo-net)236 b(555-3412)h(2400/1200/300)e(A)390 4463 y(barfly)332 b(555-7685)237 b(1200/300)475 b(A)390 4573 y(bites)380 b(555-1675)237 b(2400/1200/300)e(A)390 4682 y(camelot)284 b(555-0542)237 b(300)715 b(C)390 4792 y(core)428 b(555-2912)237 b(1200/300)475 b(C)390 4902 y(fooey)380 b(555-1234)237 b(2400/1200/300)e(B)390 5011 y(foot)428 b(555-6699)237 b(1200/300)475 b(B)390 5121 y(macfoo)332 b(555-6480)237 b(1200/300)475 b(A)390 5230 y(sdace)380 b(555-3430)237 b(2400/1200/300)e(A)390 5340 y(sabafoo)284 b(555-2127)237 b(1200/300)475 b(C)p eop end %%Page: 17 29 TeXDict begin 17 28 bop 2085 -116 a Fr(Chapter)30 b(1:)41 b(Getting)32 b(Started)f(with)f Fz(awk)90 b FB(17)275 299 y(The)32 b(data)h(\014le)f(`)p Fz(inventory-shipped)p FB(')d(represen)m(ts)j(information)h(ab)s(out)f(shipmen)m(ts)g(during)g (the)150 408 y(y)m(ear.)45 b(Eac)m(h)32 b(record)g(con)m(tains)h(the)e (mon)m(th,)h(the)g(n)m(um)m(b)s(er)e(of)i(green)g(crates)h(shipp)s(ed,) d(the)i(n)m(um)m(b)s(er)e(of)150 518 y(red)35 b(b)s(o)m(xes)g(shipp)s (ed,)f(the)i(n)m(um)m(b)s(er)d(of)j(orange)g(bags)f(shipp)s(ed,)f(and)h (the)g(n)m(um)m(b)s(er)f(of)h(blue)g(pac)m(k)-5 b(ages)150 628 y(shipp)s(ed,)25 b(resp)s(ectiv)m(ely)-8 b(.)42 b(There)25 b(are)i(16)g(en)m(tries,)h(co)m(v)m(ering)h(the)d(12)h(mon)m(ths)g(of)f (last)h(y)m(ear)g(and)f(the)h(\014rst)150 737 y(four)j(mon)m(ths)g(of)g (the)h(curren)m(t)f(y)m(ear.)390 902 y Fz(Jan)95 b(13)g(25)f(15)48 b(115)390 1011 y(Feb)95 b(15)g(32)f(24)48 b(226)390 1121 y(Mar)95 b(15)g(24)f(34)48 b(228)390 1231 y(Apr)95 b(31)g(52)f(63)48 b(420)390 1340 y(May)95 b(16)g(34)f(29)48 b(208)390 1450 y(Jun)95 b(31)g(42)f(75)48 b(492)390 1559 y(Jul)95 b(24)g(34)f(67)48 b(436)390 1669 y(Aug)95 b(15)g(34)f(47)48 b(316)390 1779 y(Sep)95 b(13)g(55)f(37)48 b(277)390 1888 y(Oct)95 b(29)g(54)f(68)48 b(525)390 1998 y(Nov)95 b(20)g(87)f(82)48 b(577)390 2107 y(Dec)95 b(17)g(35)f(61)48 b(401)390 2326 y(Jan)95 b(21)g(36)f(64)48 b(620)390 2436 y(Feb)95 b(26)g(58)f(80)48 b(652)390 2546 y(Mar)95 b(24)g(75)f(70)48 b(495)390 2655 y(Apr)95 b(21)g(70)f(74)48 b(514)150 2933 y FA(1.3)68 b(Some)45 b(Simple)h(Examples)150 3092 y FB(The)29 b(follo)m(wing)i(command)e(runs)f(a)i(simple)f Fz(awk)g FB(program)g(that)h(searc)m(hes)h(the)f(input)e(\014le)i(`)p Fz(BBS-list)p FB(')150 3202 y(for)i(the)g(c)m(haracter)i(string)e(`)p Fz(foo)p FB(')g(\(a)h(grouping)f(of)g(c)m(haracters)i(is)e(usually)g (called)h(a)f Fx(string)8 b FB(;)34 b(the)e(term)150 3311 y Fx(string)37 b FB(is)28 b(based)h(on)f(similar)i(usage)f(in)f (English,)h(suc)m(h)g(as)g(\\a)h(string)e(of)h(p)s(earls,")h(or)e(\\a)i (string)f(of)g(cars)150 3421 y(in)h(a)h(train"\):)390 3586 y Fz(awk)47 b('/foo/)f({)h(print)g($0)g(}')g(BBS-list)150 3750 y FB(When)26 b(lines)g(con)m(taining)i(`)p Fz(foo)p FB(')e(are)g(found,)g(they)h(are)f(prin)m(ted)g(b)s(ecause)g(`)p Fz(print)j($0)p FB(')d(means)g(prin)m(t)g(the)150 3860 y(curren)m(t)34 b(line.)53 b(\(Just)34 b(`)p Fz(print)p FB(')g(b)m(y)g(itself)h(means)f(the)h(same)g(thing,)g(so)g(w)m(e)g (could)f(ha)m(v)m(e)i(written)e(that)150 3969 y(instead.\))275 4134 y(Y)-8 b(ou)39 b(will)g(notice)i(that)e(slashes)g(\(`)p Fz(/)p FB('\))h(surround)d(the)i(string)g(`)p Fz(foo)p FB(')f(in)h(the)g Fz(awk)f FB(program.)66 b(The)150 4244 y(slashes)22 b(indicate)h(that)f(`)p Fz(foo)p FB(')g(is)g(the)g (pattern)g(to)g(searc)m(h)h(for.)37 b(This)22 b(t)m(yp)s(e)g(of)g (pattern)g(is)f(called)i(a)g Fx(regular)150 4353 y(expression)p FB(,)48 b(whic)m(h)43 b(is)h(co)m(v)m(ered)i(in)e(more)g(detail)h (later)g(\(see)h(Chapter)d(2)h([Regular)h(Expressions],)150 4463 y(page)32 b(24\).)45 b(The)31 b(pattern)h(is)f(allo)m(w)m(ed)j(to) e(matc)m(h)g(parts)f(of)h(w)m(ords.)43 b(There)31 b(are)h(single)g (quotes)g(around)150 4572 y(the)f Fz(awk)e FB(program)h(so)h(that)g (the)f(shell)h(w)m(on't)g(in)m(terpret)g(an)m(y)f(of)h(it)g(as)f(sp)s (ecial)h(shell)g(c)m(haracters.)275 4737 y(Here)f(is)h(what)f(this)g (program)h(prin)m(ts:)390 4902 y Fz($)47 b(awk)g('/foo/)f({)i(print)e ($0)h(}')h(BBS-list)410 5015 y Fy(a)533 5011 y Fz(fooey)381 b(555-1234)236 b(2400/1200/300)f(B)410 5125 y Fy(a)533 5121 y Fz(foot)429 b(555-6699)236 b(1200/300)475 b(B)410 5234 y Fy(a)533 5230 y Fz(macfoo)333 b(555-6480)236 b(1200/300)475 b(A)410 5344 y Fy(a)533 5340 y Fz(sabafoo)285 b(555-2127)236 b(1200/300)475 b(C)p eop end %%Page: 18 30 TeXDict begin 18 29 bop 150 -116 a FB(18)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(In)36 b(an)g Fz(awk)g FB(rule,)j(either)e(the)g(pattern)g(or)g (the)g(action)h(can)g(b)s(e)e(omitted,)k(but)c(not)h(b)s(oth.)59 b(If)37 b(the)150 408 y(pattern)22 b(is)h(omitted,)i(then)d(the)h (action)h(is)e(p)s(erformed)f(for)h Fw(every)30 b FB(input)22 b(line.)38 b(If)22 b(the)h(action)g(is)g(omitted,)150 518 y(the)31 b(default)f(action)i(is)e(to)h(prin)m(t)f(all)i(lines)e (that)h(matc)m(h)g(the)g(pattern.)275 655 y(Th)m(us,)h(w)m(e)h(could)g (lea)m(v)m(e)i(out)e(the)g(action)h(\(the)f Fz(print)e FB(statemen)m(t)k(and)d(the)h(curly)f(braces\))h(in)g(the)150 764 y(previous)i(example)i(and)e(the)h(result)g(w)m(ould)g(b)s(e)f(the) h(same:)52 b(all)37 b(lines)f(matc)m(hing)h(the)f(pattern)g(`)p Fz(foo)p FB(')150 874 y(are)e(prin)m(ted.)50 b(By)34 b(comparison,)h(omitting)g(the)f Fz(print)e FB(statemen)m(t)j(but)e (retaining)i(the)e(curly)h(braces)150 983 y(mak)m(es)d(an)f(empt)m(y)h (action)h(that)f(do)s(es)f(nothing)g(\(i.e.,)i(no)f(lines)f(are)h(prin) m(ted\).)275 1120 y(Man)m(y)i(practical)h Fz(awk)e FB(programs)g(are)h (just)f(a)h(line)g(or)f(t)m(w)m(o.)49 b(F)-8 b(ollo)m(wing)35 b(is)e(a)f(collection)k(of)c(useful,)150 1230 y(short)27 b(programs)h(to)g(get)h(y)m(ou)f(started.)40 b(Some)28 b(of)f(these)h(programs)g(con)m(tain)h(constructs)e(that)i(ha)m(v)m (en't)150 1339 y(b)s(een)24 b(co)m(v)m(ered)i(y)m(et.)40 b(\(The)25 b(description)f(of)h(the)g(program)f(will)h(giv)m(e)h(y)m (ou)f(a)g(go)s(o)s(d)g(idea)g(of)g(what)f(is)h(going)150 1449 y(on,)34 b(but)e(please)i(read)f(the)g(rest)g(of)g(the)g(b)s(o)s (ok)g(to)g(b)s(ecome)h(an)f Fz(awk)f FB(exp)s(ert!\))48 b(Most)34 b(of)f(the)g(examples)150 1558 y(use)c(a)g(data)g(\014le)g (named)g(`)p Fz(data)p FB('.)39 b(This)28 b(is)h(just)g(a)g (placeholder;)h(if)f(y)m(ou)g(use)g(these)g(programs)f(y)m(ourself,)150 1668 y(substitute)39 b(y)m(our)g(o)m(wn)h(\014le)f(names)g(for)g(`)p Fz(data)p FB('.)67 b(F)-8 b(or)40 b(future)e(reference,)k(note)e(that)g (there)f(is)h(often)150 1778 y(more)27 b(than)g(one)g(w)m(a)m(y)h(to)f (do)g(things)g(in)g Fz(awk)p FB(.)38 b(A)m(t)28 b(some)g(p)s(oin)m(t,)f (y)m(ou)h(ma)m(y)f(w)m(an)m(t)h(to)g(lo)s(ok)f(bac)m(k)h(at)f(these)150 1887 y(examples)h(and)f(see)h(if)f(y)m(ou)h(can)g(come)g(up)e(with)i (di\013eren)m(t)g(w)m(a)m(ys)g(to)g(do)f(the)h(same)g(things)f(sho)m (wn)g(here:)225 2024 y Fy(\017)60 b FB(Prin)m(t)30 b(the)h(length)g(of) f(the)h(longest)g(input)f(line:)570 2159 y Fz(awk)47 b('{)g(if)g(\(length\($0\))e(>)i(max\))g(max)g(=)g(length\($0\))e(})809 2269 y(END)i({)g(print)f(max)h(}')g(data)225 2404 y Fy(\017)60 b FB(Prin)m(t)30 b(ev)m(ery)i(line)e(that)h(is)g(longer)g(than)f(80)h (c)m(haracters:)570 2540 y Fz(awk)47 b('length\($0\))e(>)i(80')g(data) 330 2675 y FB(The)37 b(sole)h(rule)f(has)g(a)h(relational)h(expression) e(as)h(its)g(pattern)f(and)g(it)h(has)f(no)g(action|so)i(the)330 2785 y(default)31 b(action,)h(prin)m(ting)e(the)g(record,)h(is)f(used.) 225 2921 y Fy(\017)60 b FB(Prin)m(t)30 b(the)h(length)g(of)f(the)h (longest)g(line)g(in)f(`)p Fz(data)p FB(':)570 3056 y Fz(expand)46 b(data)h(|)g(awk)g('{)g(if)g(\(x)h(<)f(length\(\)\))e(x)j (=)f(length\(\))f(})1238 3166 y(END)h({)h(print)e("maximum)f(line)i (length)f(is)h(")h(x)f(}')330 3301 y FB(The)29 b(input)g(is)h(pro)s (cessed)f(b)m(y)h(the)f Fz(expand)g FB(utilit)m(y)i(to)f(c)m(hange)h (tabs)f(in)m(to)g(spaces,)h(so)f(the)g(widths)330 3411 y(compared)g(are)h(actually)h(the)f(righ)m(t-margin)g(columns.)225 3546 y Fy(\017)60 b FB(Prin)m(t)30 b(ev)m(ery)i(line)e(that)h(has)f(at) h(least)h(one)f(\014eld:)570 3682 y Fz(awk)47 b('NF)g(>)g(0')g(data)330 3817 y FB(This)37 b(is)h(an)g(easy)h(w)m(a)m(y)g(to)f(delete)i(blank)d (lines)h(from)g(a)g(\014le)g(\(or)h(rather,)h(to)e(create)i(a)e(new)g (\014le)330 3927 y(similar)31 b(to)g(the)f(old)h(\014le)f(but)g(from)g (whic)m(h)g(the)h(blank)f(lines)g(ha)m(v)m(e)i(b)s(een)d(remo)m(v)m (ed\).)225 4062 y Fy(\017)60 b FB(Prin)m(t)30 b(sev)m(en)h(random)f(n)m (um)m(b)s(ers)f(from)h(0)g(to)i(100,)f(inclusiv)m(e:)570 4198 y Fz(awk)47 b('BEGIN)f({)h(for)g(\(i)h(=)f(1;)g(i)h(<=)f(7;)g (i++\))1381 4308 y(print)g(int\(101)f(*)h(rand\(\)\))f(}')225 4443 y Fy(\017)60 b FB(Prin)m(t)30 b(the)h(total)h(n)m(um)m(b)s(er)d (of)i(b)m(ytes)g(used)e(b)m(y)h Fx(\014les)t FB(:)570 4579 y Fz(ls)47 b(-l)g Fk(files)57 b Fz(|)48 b(awk)f('{)g(x)g(+=)g($5)h (})1429 4688 y(END)f({)g(print)g("total)f(bytes:)g(")h(x)h(}')225 4824 y Fy(\017)60 b FB(Prin)m(t)30 b(the)h(total)h(n)m(um)m(b)s(er)d (of)i(kilob)m(ytes)h(used)d(b)m(y)h Fx(\014les)t FB(:)570 4959 y Fz(ls)47 b(-l)g Fk(files)57 b Fz(|)48 b(awk)f('{)g(x)g(+=)g($5)h (})713 5069 y(END)f({)h(print)e("total)g(K-bytes:)g(")h(\(x)g(+)h (1023\)/1024)d(}')225 5204 y Fy(\017)60 b FB(Prin)m(t)30 b(a)h(sorted)g(list)g(of)f(the)h(login)g(names)f(of)h(all)g(users:)570 5340 y Fz(awk)47 b(-F:)g('{)g(print)f($1)i(}')f(/etc/passwd)d(|)k(sort) p eop end %%Page: 19 31 TeXDict begin 19 30 bop 2085 -116 a Fr(Chapter)30 b(1:)41 b(Getting)32 b(Started)f(with)f Fz(awk)90 b FB(19)225 299 y Fy(\017)60 b FB(Coun)m(t)30 b(the)h(lines)f(in)g(a)h(\014le:)570 443 y Fz(awk)47 b('END)g({)g(print)f(NR)i(}')f(data)225 588 y Fy(\017)60 b FB(Prin)m(t)30 b(the)h(ev)m(en-n)m(um)m(b)s(ered)f (lines)h(in)f(the)g(data)h(\014le:)570 732 y Fz(awk)47 b('NR)g(\045)g(2)h(==)f(0')g(data)330 877 y FB(If)e(y)m(ou)h(use)f(the) g(expression)g(`)p Fz(NR)30 b(\045)g(2)h(==)e(1)p FB(')46 b(instead,)j(the)d(program)f(w)m(ould)g(prin)m(t)g(the)h(o)s(dd-)330 987 y(n)m(um)m(b)s(ered)29 b(lines.)150 1249 y FA(1.4)68 b(An)44 b(Example)i(with)g(Tw)l(o)f(Rules)150 1409 y FB(The)27 b Fz(awk)g FB(utilit)m(y)i(reads)e(the)h(input)f(\014les)g (one)h(line)g(at)h(a)f(time.)40 b(F)-8 b(or)29 b(eac)m(h)g(line,)f Fz(awk)f FB(tries)h(the)g(patterns)150 1518 y(of)k(eac)m(h)g(of)g(the)f (rules.)44 b(If)31 b(sev)m(eral)h(patterns)g(matc)m(h,)g(then)g(sev)m (eral)g(actions)h(are)f(run)e(in)h(the)g(order)g(in)150 1628 y(whic)m(h)f(they)h(app)s(ear)e(in)h(the)h Fz(awk)f FB(program.)40 b(If)30 b(no)g(patterns)h(matc)m(h,)g(then)f(no)g (actions)i(are)f(run.)275 1782 y(After)40 b(pro)s(cessing)g(all)h(the)f (rules)g(that)h(matc)m(h)g(the)f(line)h(\(and)e(p)s(erhaps)g(there)h (are)h(none\),)i Fz(awk)150 1892 y FB(reads)32 b(the)g(next)h(line.)46 b(\(Ho)m(w)m(ev)m(er,)36 b(see)c(Section)h(6.4.8)i([The)c Fz(next)h FB(Statemen)m(t],)i(page)f(105,)h(and)e(also)150 2002 y(see)j(Section)g(6.4.9)h([Using)f Fz(gawk)p FB('s)f Fz(nextfile)e FB(Statemen)m(t],)37 b(page)e(106\).)55 b(This)34 b(con)m(tin)m(ues)h(un)m(til)g(the)150 2111 y(program)d(reac)m(hes)h(the)f(end)g(of)g(the)h(\014le.)46 b(F)-8 b(or)33 b(example,)g(the)f(follo)m(wing)i Fz(awk)d FB(program)h(con)m(tains)i(t)m(w)m(o)150 2221 y(rules:)390 2375 y Fz(/12/)94 b({)48 b(print)e($0)h(})390 2485 y(/21/)94 b({)48 b(print)e($0)h(})150 2639 y FB(The)33 b(\014rst)f(rule)h(has)g (the)g(string)g(`)p Fz(12)p FB(')g(as)h(the)f(pattern)g(and)g(`)p Fz(print)c($0)p FB(')k(as)g(the)h(action.)50 b(The)33 b(second)150 2749 y(rule)i(has)g(the)h(string)f(`)p Fz(21)p FB(')h(as)f(the)h(pattern)g(and)e(also)j(has)e(`)p Fz(print)29 b($0)p FB(')35 b(as)h(the)g(action.)57 b(Eac)m(h)36 b(rule's)150 2859 y(action)c(is)e(enclosed)h(in)f(its)h(o)m(wn)f(pair)h(of)f (braces.)275 3013 y(This)h(program)g(prin)m(ts)h(ev)m(ery)g(line)g (that)h(con)m(tains)g(the)f(string)g(`)p Fz(12)p FB(')g Fw(or)42 b FB(the)32 b(string)g(`)p Fz(21)p FB('.)45 b(If)31 b(a)i(line)150 3123 y(con)m(tains)f(b)s(oth)d(strings,)i(it)g (is)f(prin)m(ted)g(t)m(wice,)i(once)f(b)m(y)f(eac)m(h)i(rule.)275 3277 y(This)h(is)h(what)g(happ)s(ens)e(if)i(w)m(e)h(run)e(this)h (program)f(on)h(our)g(t)m(w)m(o)h(sample)g(data)f(\014les,)i(`)p Fz(BBS-list)p FB(')150 3387 y(and)30 b(`)p Fz(inventory-shipped)p FB(':)390 3542 y Fz($)47 b(awk)g('/12/)g({)g(print)g($0)g(})390 3651 y(>)286 b(/21/)47 b({)g(print)g($0)g(}')g(BBS-list)e (inventory-shipped)410 3765 y Fy(a)533 3761 y Fz(aardvark)237 b(555-5553)f(1200/300)475 b(B)410 3874 y Fy(a)533 3870 y Fz(alpo-net)237 b(555-3412)f(2400/1200/300)f(A)410 3984 y Fy(a)533 3980 y Fz(barfly)333 b(555-7685)236 b(1200/300)475 b(A)410 4094 y Fy(a)533 4090 y Fz(bites)381 b(555-1675)236 b(2400/1200/300)f(A)410 4203 y Fy(a)533 4199 y Fz(core)429 b(555-2912)236 b(1200/300)475 b(C)410 4313 y Fy(a)533 4309 y Fz(fooey)381 b(555-1234)236 b(2400/1200/300)f(B)410 4422 y Fy(a)533 4418 y Fz(foot)429 b(555-6699)236 b(1200/300)475 b(B)410 4532 y Fy(a)533 4528 y Fz(macfoo)333 b(555-6480)236 b(1200/300)475 b(A)410 4641 y Fy(a)533 4637 y Fz(sdace)381 b(555-3430)236 b(2400/1200/300)f(A)410 4751 y Fy(a)533 4747 y Fz(sabafoo)285 b(555-2127)236 b(1200/300)475 b(C)410 4861 y Fy(a)533 4857 y Fz(sabafoo)285 b(555-2127)236 b(1200/300)475 b(C)410 4970 y Fy(a)533 4966 y Fz(Jan)95 b(21)g(36)g(64)47 b(620)410 5080 y Fy(a)533 5076 y Fz(Apr)95 b(21)g(70)g(74)47 b(514)150 5230 y FB(Note)31 b(ho)m(w)e(the)g(line)h (b)s(eginning)e(with)h(`)p Fz(sabafoo)p FB(')f(in)h(`)p Fz(BBS-list)p FB(')e(w)m(as)j(prin)m(ted)f(t)m(wice,)i(once)f(for)f (eac)m(h)150 5340 y(rule.)p eop end %%Page: 20 32 TeXDict begin 20 31 bop 150 -116 a FB(20)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FA(1.5)68 b(A)44 b(More)h(Complex)h(Example)150 458 y FB(No)m(w)36 b(that)g(w)m(e'v)m(e)i(mastered)d(some)h(simple)g (tasks,)h(let's)g(lo)s(ok)f(at)g(what)g(t)m(ypical)h Fz(awk)e FB(programs)g(do.)150 568 y(This)25 b(example)i(sho)m(ws)f(ho) m(w)h Fz(awk)e FB(can)i(b)s(e)e(used)h(to)h(summarize,)g(select,)i(and) d(rearrange)g(the)h(output)f(of)150 677 y(another)32 b(utilit)m(y)-8 b(.)48 b(It)32 b(uses)f(features)i(that)f(ha)m(v)m (en't)i(b)s(een)d(co)m(v)m(ered)j(y)m(et,)g(so)e(don't)g(w)m(orry)g(if) g(y)m(ou)g(don't)150 787 y(understand)d(all)i(the)f(details:)390 917 y Fz(ls)47 b(-l)g(|)h(awk)f('$6)g(==)g("Nov")f({)i(sum)f(+=)g($5)g (})1010 1027 y(END)g({)h(print)e(sum)h(}')275 1157 y FB(This)32 b(command)h(prin)m(ts)f(the)h(total)i(n)m(um)m(b)s(er)d(of)h (b)m(ytes)h(in)e(all)i(the)g(\014les)f(in)f(the)i(curren)m(t)e (directory)150 1266 y(that)h(w)m(ere)g(last)g(mo)s(di\014ed)f(in)g(No)m (v)m(em)m(b)s(er)i(\(of)f(an)m(y)g(y)m(ear\).)2190 1233 y Fo(4)2275 1266 y FB(The)f(`)p Fz(ls)e(-l)p FB(')i(part)h(of)f(this)h (example)g(is)g(a)150 1376 y(system)28 b(command)h(that)f(giv)m(es)i(y) m(ou)f(a)f(listing)i(of)e(the)g(\014les)h(in)f(a)g(directory)-8 b(,)30 b(including)e(eac)m(h)i(\014le's)e(size)150 1486 y(and)i(the)g(date)h(the)g(\014le)f(w)m(as)h(last)g(mo)s(di\014ed.)40 b(Its)30 b(output)g(lo)s(oks)h(lik)m(e)h(this:)390 1616 y Fz(-rw-r--r--)93 b(1)47 b(arnold)142 b(user)g(1933)46 b(Nov)95 b(7)48 b(13:05)e(Makefile)390 1725 y(-rw-r--r--)93 b(1)47 b(arnold)142 b(user)94 b(10809)46 b(Nov)95 b(7)48 b(13:03)e(awk.h)390 1835 y(-rw-r--r--)93 b(1)47 b(arnold)142 b(user)190 b(983)46 b(Apr)h(13)h(12:14)e(awk.tab.h)390 1944 y(-rw-r--r--)93 b(1)47 b(arnold)142 b(user)94 b(31869)46 b(Jun)h(15)h(12:20)e(awkgram.y)390 2054 y(-rw-r--r--)93 b(1)47 b(arnold)142 b(user)94 b(22414)46 b(Nov)95 b(7)48 b(13:03)e(awk1.c)390 2164 y(-rw-r--r--)93 b(1)47 b(arnold)142 b(user)94 b(37455)46 b(Nov)95 b(7)48 b(13:03)e(awk2.c)390 2273 y(-rw-r--r--)93 b(1)47 b(arnold)142 b(user)94 b(27511)46 b(Dec)95 b(9)48 b(13:07)e(awk3.c)390 2383 y(-rw-r--r--)93 b(1)47 b(arnold)142 b(user)g(7989)46 b(Nov)95 b(7)48 b(13:03)e(awk4.c)150 2513 y FB(The)25 b(\014rst)h(\014eld)f(con)m (tains)i(read-write)g(p)s(ermissions,)f(the)g(second)g(\014eld)f(con)m (tains)i(the)f(n)m(um)m(b)s(er)f(of)h(links)150 2622 y(to)k(the)g(\014le,)h(and)e(the)h(third)f(\014eld)g(iden)m(ti\014es)h (the)g(o)m(wner)g(of)g(the)g(\014le.)40 b(The)29 b(fourth)g(\014eld)h (iden)m(ti\014es)g(the)150 2732 y(group)25 b(of)g(the)g(\014le.)39 b(The)25 b(\014fth)f(\014eld)h(con)m(tains)h(the)g(size)g(of)f(the)h (\014le)f(in)g(b)m(ytes.)39 b(The)25 b(sixth,)h(sev)m(en)m(th,)i(and) 150 2842 y(eigh)m(th)i(\014elds)e(con)m(tain)i(the)f(mon)m(th,)g(da)m (y)-8 b(,)30 b(and)f(time,)h(resp)s(ectiv)m(ely)-8 b(,)31 b(that)e(the)g(\014le)g(w)m(as)g(last)h(mo)s(di\014ed.)150 2951 y(Finally)-8 b(,)32 b(the)f(nin)m(th)e(\014eld)h(con)m(tains)i (the)f(name)f(of)h(the)f(\014le.)2227 2918 y Fo(5)275 3081 y FB(The)c(`)p Fz($6)k(==)g("Nov")p FB(')25 b(in)h(our)h Fz(awk)f FB(program)g(is)h(an)f(expression)h(that)g(tests)h(whether)e (the)h(sixth)f(\014eld)150 3191 y(of)33 b(the)g(output)g(from)g(`)p Fz(ls)d(-l)p FB(')i(matc)m(hes)j(the)e(string)g(`)p Fz(Nov)p FB('.)48 b(Eac)m(h)34 b(time)f(a)h(line)f(has)g(the)g(string)g(`)p Fz(Nov)p FB(')150 3301 y(for)i(its)h(sixth)f(\014eld,)h(the)f(action)i (`)p Fz(sum)29 b(+=)h($5)p FB(')35 b(is)g(p)s(erformed.)54 b(This)34 b(adds)h(the)g(\014fth)f(\014eld)h(\(the)h(\014le's)150 3410 y(size\))29 b(to)f(the)g(v)-5 b(ariable)28 b Fz(sum)p FB(.)39 b(As)27 b(a)h(result,)h(when)d Fz(awk)h FB(has)g(\014nished)f (reading)i(all)g(the)g(input)e(lines,)j Fz(sum)150 3520 y FB(is)34 b(the)g(total)h(of)f(the)g(sizes)g(of)g(the)g(\014les)g (whose)f(lines)h(matc)m(hed)g(the)g(pattern.)51 b(\(This)33 b(w)m(orks)h(b)s(ecause)150 3629 y Fz(awk)29 b FB(v)-5 b(ariables)32 b(are)e(automatically)k(initialized)e(to)f(zero.\))275 3759 y(After)24 b(the)h(last)g(line)f(of)h(output)f(from)g Fz(ls)f FB(has)h(b)s(een)g(pro)s(cessed,)h(the)g Fz(END)e FB(rule)h(executes)i(and)d(prin)m(ts)150 3869 y(the)31 b(v)-5 b(alue)30 b(of)h Fz(sum)p FB(.)40 b(In)29 b(this)i(example,)g (the)g(v)-5 b(alue)30 b(of)h Fz(sum)e FB(is)i(80600.)275 3999 y(These)g(more)i(adv)-5 b(anced)32 b Fz(awk)f FB(tec)m(hniques)i (are)g(co)m(v)m(ered)g(in)f(later)h(sections)h(\(see)f(Section)g(6.3)g ([Ac-)150 4109 y(tions],)d(page)g(98\).)41 b(Before)31 b(y)m(ou)e(can)g(mo)m(v)m(e)i(on)e(to)h(more)f(adv)-5 b(anced)29 b Fz(awk)f FB(programming,)h(y)m(ou)h(ha)m(v)m(e)g(to)150 4218 y(kno)m(w)g(ho)m(w)g Fz(awk)g FB(in)m(terprets)g(y)m(our)g(input)g (and)f(displa)m(ys)i(y)m(our)f(output.)40 b(By)30 b(manipulating)h (\014elds)f(and)150 4328 y(using)f Fz(print)g FB(statemen)m(ts,)j(y)m (ou)e(can)g(pro)s(duce)f(some)h(v)m(ery)h(useful)e(and)g(impressiv)m (e-lo)s(oking)i(rep)s(orts.)150 4552 y FA(1.6)68 b Fq(awk)43 b FA(Statemen)l(ts)k(V)-11 b(ersus)44 b(Lines)150 4711 y FB(Most)31 b(often,)g(eac)m(h)h(line)f(in)f(an)g Fz(awk)f FB(program)i(is)f(a)h(separate)g(statemen)m(t)h(or)f(separate)g(rule,)f (lik)m(e)i(this:)p 150 4789 1200 4 v 199 4856 a Fo(4)275 4888 y Fn(In)25 b(the)h(C)h(shell)g(\()p Fm(csh)p Fn(\),)g(y)n(ou)f (need)g(to)h(t)n(yp)r(e)e(a)i(semicolon)h(and)e(then)g(a)g(bac)n (kslash)h(at)g(the)f(end)g(of)h(the)f(\014rst)g(line;)h(see)275 4975 y(Section)32 b(1.6)h([)p Fm(awk)g Fn(Statemen)n(ts)e(V)-6 b(ersus)32 b(Lines],)i(page)f(20,)i(for)d(an)g(explanation.)54 b(In)31 b(a)i(POSIX-complian)n(t)e(shell,)275 5063 y(suc)n(h)f(as)i (the)f(Bourne)g(shell)h(or)f Fm(bash)p Fn(,)j(y)n(ou)d(can)g(t)n(yp)r (e)f(the)h(example)g(as)h(sho)n(wn.)51 b(If)32 b(the)e(command)i(`)p Fm(echo)27 b($path)p Fn(')275 5150 y(pro)r(duces)f(an)f(empt)n(y)g (output)g(line,)i(y)n(ou)f(are)g(most)g(lik)n(ely)g(using)h(a)f (POSIX-complian)n(t)f(shell.)36 b(Otherwise,)27 b(y)n(ou)e(are)275 5237 y(probably)g(using)h(the)f(C)h(shell)g(or)h(a)f(shell)g(deriv)n (ed)f(from)h(it.)199 5308 y Fo(5)275 5340 y Fn(On)f(some)h(v)n(ery)f (old)h(systems,)g(y)n(ou)f(ma)n(y)g(need)h(to)g(use)f(`)p Fm(ls)i(-lg)p Fn(')f(to)g(get)g(this)g(output.)p eop end %%Page: 21 33 TeXDict begin 21 32 bop 2085 -116 a Fr(Chapter)30 b(1:)41 b(Getting)32 b(Started)f(with)f Fz(awk)90 b FB(21)390 299 y Fz(awk)47 b('/12/)94 b({)47 b(print)g($0)g(})629 408 y(/21/)94 b({)47 b(print)g($0)g(}')g(BBS-list)f(inventory-shipped) 275 544 y FB(Ho)m(w)m(ev)m(er,)32 b Fz(gawk)d FB(ignores)i(newlines)f (after)h(an)m(y)g(of)g(the)f(follo)m(wing)i(sym)m(b)s(ols)e(and)g(k)m (eyw)m(ords:)390 680 y Fz(,)191 b({)f(?)h(:)g(||)f(&&)g(do)h(else)150 816 y FB(A)30 b(newline)h(at)g(an)m(y)g(other)f(p)s(oin)m(t)h(is)f (considered)g(the)h(end)e(of)i(the)g(statemen)m(t.)2875 783 y Fo(6)275 952 y FB(If)k(y)m(ou)h(w)m(ould)g(lik)m(e)h(to)f(split)g (a)g(single)h(statemen)m(t)g(in)m(to)g(t)m(w)m(o)g(lines)f(at)h(a)f(p)s (oin)m(t)g(where)f(a)h(newline)150 1062 y(w)m(ould)31 b(terminate)i(it,)f(y)m(ou)g(can)g Fx(con)m(tin)m(ue)38 b FB(it)32 b(b)m(y)f(ending)g(the)h(\014rst)e(line)i(with)f(a)h(bac)m (kslash)g(c)m(haracter)150 1172 y(\(`)p Fz(\\)p FB('\).)60 b(The)36 b(bac)m(kslash)h(m)m(ust)f(b)s(e)g(the)h(\014nal)f(c)m (haracter)i(on)e(the)h(line)g(in)f(order)g(to)h(b)s(e)f(recognized)i (as)150 1281 y(a)f(con)m(tin)m(uation)h(c)m(haracter.)61 b(A)37 b(bac)m(kslash)g(is)g(allo)m(w)m(ed)h(an)m(ywhere)f(in)f(the)h (statemen)m(t,)j(ev)m(en)d(in)g(the)150 1391 y(middle)30 b(of)h(a)f(string)h(or)f(regular)h(expression.)40 b(F)-8 b(or)31 b(example:)390 1527 y Fz(awk)47 b('/This)f(regular)g (expression)f(is)i(too)g(long,)f(so)h(continue)f(it\\)438 1636 y(on)h(the)g(next)f(line/)h({)g(print)g($1)g(}')150 1772 y FB(W)-8 b(e)38 b(ha)m(v)m(e)f(generally)h(not)f(used)e(bac)m (kslash)i(con)m(tin)m(uation)i(in)d(the)g(sample)h(programs)f(in)g (this)g(b)s(o)s(ok.)150 1882 y(In)28 b Fz(gawk)p FB(,)h(there)g(is)g (no)g(limit)h(on)f(the)g(length)h(of)f(a)g(line,)h(so)g(bac)m(kslash)f (con)m(tin)m(uation)i(is)f(nev)m(er)f(strictly)150 1991 y(necessary;)50 b(it)43 b(just)f(mak)m(es)i(programs)e(more)h (readable.)79 b(F)-8 b(or)43 b(this)g(same)g(reason,)j(as)d(w)m(ell)h (as)f(for)150 2101 y(clarit)m(y)-8 b(,)35 b(w)m(e)e(ha)m(v)m(e)g(k)m (ept)g(most)f(statemen)m(ts)i(short)e(in)g(the)g(sample)g(programs)g (presen)m(ted)g(throughout)150 2211 y(the)k(b)s(o)s(ok.)55 b(Bac)m(kslash)37 b(con)m(tin)m(uation)g(is)e(most)h(useful)e(when)h(y) m(our)g Fz(awk)g FB(program)g(is)g(in)g(a)h(separate)150 2320 y(source)30 b(\014le)h(instead)f(of)g(en)m(tered)h(from)f(the)g (command)g(line.)41 b(Y)-8 b(ou)31 b(should)e(also)i(note)g(that)g(man) m(y)f Fz(awk)150 2430 y FB(implemen)m(tations)f(are)f(more)f (particular)h(ab)s(out)f(where)g(y)m(ou)g(ma)m(y)h(use)g(bac)m(kslash)g (con)m(tin)m(uation.)41 b(F)-8 b(or)150 2539 y(example,)38 b(they)e(ma)m(y)g(not)g(allo)m(w)i(y)m(ou)e(to)g(split)g(a)g(string)g (constan)m(t)h(using)e(bac)m(kslash)i(con)m(tin)m(uation.)150 2649 y(Th)m(us,)e(for)g(maxim)m(um)g(p)s(ortabilit)m(y)h(of)f(y)m(our)g Fz(awk)f FB(programs,)i(it)f(is)h(b)s(est)e(not)h(to)h(split)f(y)m(our) g(lines)g(in)150 2759 y(the)c(middle)f(of)g(a)h(regular)f(expression)h (or)f(a)h(string.)275 2895 y Fr(Caution:)36 b Fw(Backslash)28 b(c)-5 b(ontinuation)27 b(do)-5 b(es)27 b(not)f(work)h(as)f(describ)-5 b(e)g(d)27 b(with)f(the)h(C)e(shel)5 b(l.)38 b FB(It)23 b(w)m(orks)g(for)150 3004 y Fz(awk)h FB(programs)g(in)g(\014les)g(and)g (for)g(one-shot)h(programs,)h Fw(pr)-5 b(ovide)g(d)36 b FB(y)m(ou)25 b(are)f(using)g(a)h(POSIX-complian)m(t)150 3114 y(shell,)36 b(suc)m(h)e(as)g(the)g(Unix)h(Bourne)f(shell)g(or)g Fz(bash)p FB(.)51 b(But)35 b(the)f(C)g(shell)g(b)s(eha)m(v)m(es)h (di\013eren)m(tly!)53 b(There,)150 3223 y(y)m(ou)33 b(m)m(ust)h(use)e (t)m(w)m(o)j(bac)m(kslashes)f(in)f(a)g(ro)m(w,)i(follo)m(w)m(ed)f(b)m (y)f(a)h(newline.)49 b(Note)34 b(also)h(that)e(when)f(using)150 3333 y(the)40 b(C)f(shell,)k Fw(every)48 b FB(newline)40 b(in)f(y)m(our)h(a)m(wk)g(program)g(m)m(ust)g(b)s(e)f(escap)s(ed)h (with)f(a)i(bac)m(kslash.)69 b(T)-8 b(o)150 3443 y(illustrate:)390 3579 y Fz(\045)47 b(awk)g('BEGIN)f({)i(\\)390 3688 y(?)143 b(print)46 b(\\\\)390 3798 y(?)334 b("hello,)46 b(world")g(\\)390 3907 y(?)h(}')410 4021 y Fy(a)533 4017 y Fz(hello,)f(world)150 4153 y FB(Here,)40 b(the)e(`)p Fz(\045)p FB(')f(and)g(`)p Fz(?)p FB(')h(are)f(the)h(C)f(shell's)h(primary)e(and)h(secondary)g (prompts,)i(analogous)g(to)f(the)150 4262 y(standard)30 b(shell's)g(`)p Fz($)p FB(')h(and)f(`)p Fz(>)p FB('.)275 4398 y(Compare)g(the)g(previous)g(example)h(to)g(ho)m(w)g(it)g(is)f (done)g(with)g(a)h(POSIX-complian)m(t)g(shell:)390 4534 y Fz($)47 b(awk)g('BEGIN)f({)390 4644 y(>)143 b(print)46 b(\\)390 4754 y(>)334 b("hello,)46 b(world")390 4863 y(>)h(}')410 4977 y Fy(a)533 4973 y Fz(hello,)f(world)p 150 5066 1200 4 v 199 5134 a Fo(6)275 5166 y Fn(The)32 b(`)p Fm(?)p Fn(')i(and)e(`)p Fm(:)p Fn(')h(referred)h(to)f(here)f(is)h (the)f(three-op)r(erand)h(conditional)g(expression)g(describ)r(ed)g(in) g(Section)f(5.12)275 5253 y([Conditional)22 b(Expressions],)i(page)e (89.)33 b(Splitting)21 b(lines)h(after)g(`)p Fm(?)p Fn(')g(and)f(`)p Fm(:)p Fn(')h(is)f(a)h(minor)f Fm(gawk)h Fn(extension;)h(if)f(`)p Fm(--posix)p Fn(')275 5340 y(is)k(sp)r(eci\014ed)g(\(see)g(Section)f (11.2)j([Command-Line)e(Options],)g(page)g(173\),)h(then)e(this)h (extension)g(is)g(disabled.)p eop end %%Page: 22 34 TeXDict begin 22 33 bop 150 -116 a FB(22)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y Fz(awk)39 b FB(is)i(a)g(line-orien)m(ted)h(language.)73 b(Eac)m(h)41 b(rule's)g(action)h(has)e(to)h(b)s(egin)f(on)h(the)g(same) g(line)g(as)150 408 y(the)f(pattern.)71 b(T)-8 b(o)41 b(ha)m(v)m(e)g(the)f(pattern)h(and)e(action)j(on)e(separate)h(lines,)i (y)m(ou)e Fw(must)49 b FB(use)40 b(bac)m(kslash)150 518 y(con)m(tin)m(uation;)33 b(there)d(is)g(no)h(other)f(option.)275 660 y(Another)c(thing)g(to)h(k)m(eep)f(in)g(mind)f(is)h(that)h(bac)m (kslash)g(con)m(tin)m(uation)h(and)d(commen)m(ts)i(do)f(not)h(mix.)150 769 y(As)32 b(so)s(on)f(as)h Fz(awk)f FB(sees)h(the)g(`)p Fz(#)p FB(')g(that)h(starts)f(a)g(commen)m(t,)h(it)g(ignores)f Fw(everything)40 b FB(on)32 b(the)g(rest)g(of)g(the)150 879 y(line.)41 b(F)-8 b(or)31 b(example:)390 1021 y Fz($)47 b(gawk)g('BEGIN)f({)i(print)e("dont)g(panic")g(#)i(a)f(friendly)f(\\) 390 1130 y(>)1718 b(BEGIN)46 b(rule)390 1240 y(>)h(}')p 410 1292 217 5 v 410 1372 5 81 v 433 1353 a Fl(erro)m(r)p 622 1372 V 410 1377 217 5 v 724 1350 a Fz(gawk:)f(cmd.)h(line:2:)762 b(BEGIN)46 b(rule)p 410 1402 V 410 1482 5 81 v 433 1462 a Fl(erro)m(r)p 622 1482 V 410 1487 217 5 v 724 1459 a Fz(gawk:)g(cmd.)h(line:2:)762 b(^)47 b(parse)g(error)150 1601 y FB(In)38 b(this)h(case,)j(it)e(lo)s(oks)f(lik)m(e)h(the)g(bac)m (kslash)f(w)m(ould)g(con)m(tin)m(ue)h(the)f(commen)m(t)h(on)m(to)g(the) f(next)g(line.)150 1711 y(Ho)m(w)m(ev)m(er,)h(the)c(bac)m (kslash-newline)h(com)m(bination)g(is)g(nev)m(er)f(ev)m(en)h(noticed)g (b)s(ecause)f(it)g(is)g(\\hidden")150 1820 y(inside)30 b(the)h(commen)m(t.)41 b(Th)m(us,)30 b(the)h Fz(BEGIN)d FB(is)j(noted)f(as)h(a)g(syn)m(tax)g(error.)275 1962 y(When)25 b Fz(awk)g FB(statemen)m(ts)i(within)e(one)h(rule)g(are)g (short,)g(y)m(ou)g(migh)m(t)h(w)m(an)m(t)f(to)h(put)e(more)g(than)h (one)g(of)150 2072 y(them)32 b(on)g(a)h(line.)47 b(This)31 b(is)i(accomplished)g(b)m(y)f(separating)h(the)g(statemen)m(ts)h(with)e (a)g(semicolon)i(\(`)p Fz(;)p FB('\).)150 2181 y(This)k(also)h(applies) g(to)g(the)g(rules)f(themselv)m(es.)67 b(Th)m(us,)40 b(the)f(program)f(sho)m(wn)g(at)h(the)g(start)g(of)g(this)150 2291 y(section)32 b(could)e(also)h(b)s(e)f(written)g(this)h(w)m(a)m(y:) 390 2433 y Fz(/12/)47 b({)g(print)f($0)i(})f(;)h(/21/)e({)i(print)e($0) h(})390 2575 y Fr(NOTE:)31 b FB(The)f(requiremen)m(t)h(that)h(states)g (that)f(rules)g(on)f(the)h(same)g(line)h(m)m(ust)e(b)s(e)g(sepa-)390 2684 y(rated)j(with)g(a)g(semicolon)h(w)m(as)g(not)f(in)g(the)g (original)h Fz(awk)e FB(language;)k(it)e(w)m(as)f(added)f(for)390 2794 y(consistency)f(with)f(the)h(treatmen)m(t)h(of)e(statemen)m(ts)j (within)c(an)i(action.)150 3037 y FA(1.7)68 b(Other)45 b(F)-11 b(eatures)46 b(of)f Fq(awk)150 3197 y FB(The)23 b Fz(awk)g FB(language)i(pro)m(vides)f(a)g(n)m(um)m(b)s(er)e(of)i (prede\014ned,)f(or)h Fx(built-in)p FB(,)h(v)-5 b(ariables)24 b(that)h(y)m(our)e(programs)150 3306 y(can)37 b(use)f(to)i(get)f (information)g(from)g Fz(awk)p FB(.)58 b(There)36 b(are)h(other)g(v)-5 b(ariables)38 b(y)m(our)e(program)h(can)f(set)i(as)150 3416 y(w)m(ell)31 b(to)g(con)m(trol)h(ho)m(w)f Fz(awk)e FB(pro)s(cesses)h(y)m(our)h(data.)275 3558 y(In)21 b(addition,)j Fz(awk)c FB(pro)m(vides)i(a)g(n)m(um)m(b)s(er)f(of)h(built-in)f (functions)h(for)f(doing)h(common)g(computational)150 3667 y(and)f(string-related)i(op)s(erations.)38 b Fz(gawk)20 b FB(pro)m(vides)i(built-in)f(functions)g(for)g(w)m(orking)h(with)f (timestamps,)150 3777 y(p)s(erforming)29 b(bit)i(manipulation,)f(and)g (for)g(run)m(time)g(string)h(translation.)275 3919 y(As)41 b(w)m(e)h(dev)m(elop)h(our)e(presen)m(tation)i(of)e(the)h Fz(awk)f FB(language,)46 b(w)m(e)c(in)m(tro)s(duce)g(most)g(of)g(the)f (v)-5 b(ari-)150 4028 y(ables)35 b(and)f(man)m(y)h(of)g(the)g (functions.)54 b(They)34 b(are)h(de\014ned)f(systematically)j(in)d (Section)i(6.5)g([Built-in)150 4138 y(V)-8 b(ariables],)32 b(page)f(107,)h(and)e(Section)h(8.1)h([Built-in)f(F)-8 b(unctions],)31 b(page)h(127.)150 4381 y FA(1.8)68 b(When)45 b(to)g(Use)h Fq(awk)150 4541 y FB(No)m(w)f(that)f(y)m(ou'v)m(e)h(seen)f (some)g(of)g(what)g Fz(awk)f FB(can)h(do,)k(y)m(ou)c(migh)m(t)g(w)m (onder)g(ho)m(w)g Fz(awk)f FB(could)h(b)s(e)150 4650 y(useful)34 b(for)h(y)m(ou.)56 b(By)35 b(using)g(utilit)m(y)i (programs,)f(adv)-5 b(anced)35 b(patterns,)i(\014eld)e(separators,)i (arithmetic)150 4760 y(statemen)m(ts,)32 b(and)d(other)h(selection)i (criteria,)f(y)m(ou)f(can)g(pro)s(duce)f(m)m(uc)m(h)h(more)g(complex)g (output.)40 b(The)150 4869 y Fz(awk)31 b FB(language)i(is)e(v)m(ery)h (useful)f(for)g(pro)s(ducing)f(rep)s(orts)h(from)g(large)i(amoun)m(ts)e (of)h(ra)m(w)g(data,)g(suc)m(h)g(as)150 4979 y(summarizing)24 b(information)h(from)f(the)h(output)f(of)h(other)g(utilit)m(y)h (programs)e(lik)m(e)i Fz(ls)p FB(.)38 b(\(See)25 b(Section)h(1.5)150 5089 y([A)31 b(More)g(Complex)f(Example],)h(page)g(20.\))275 5230 y(Programs)i(written)h(with)f Fz(awk)g FB(are)h(usually)f(m)m(uc)m (h)h(smaller)g(than)f(they)h(w)m(ould)f(b)s(e)g(in)h(other)f(lan-)150 5340 y(guages.)73 b(This)40 b(mak)m(es)i Fz(awk)e FB(programs)g(easy)h (to)h(comp)s(ose)f(and)f(use.)72 b(Often,)43 b Fz(awk)d FB(programs)h(can)p eop end %%Page: 23 35 TeXDict begin 23 34 bop 2085 -116 a Fr(Chapter)30 b(1:)41 b(Getting)32 b(Started)f(with)f Fz(awk)90 b FB(23)150 299 y(b)s(e)41 b(quic)m(kly)h(comp)s(osed)f(at)i(y)m(our)e(terminal,)k (used)c(once,)k(and)c(thro)m(wn)g(a)m(w)m(a)m(y)-8 b(.)77 b(Because)43 b Fz(awk)d FB(pro-)150 408 y(grams)32 b(are)h(in)m (terpreted,)h(y)m(ou)f(can)f(a)m(v)m(oid)i(the)f(\(usually)f(length)m (y\))i(compilation)g(part)e(of)h(the)f(t)m(ypical)150 518 y(edit-compile-test-debug)h(cycle)f(of)e(soft)m(w)m(are)i(dev)m (elopmen)m(t.)275 653 y(Complex)g(programs)g(ha)m(v)m(e)i(b)s(een)e (written)g(in)g Fz(awk)p FB(,)h(including)f(a)h(complete)h (retargetable)g(assem-)150 762 y(bler)i(for)h(eigh)m(t-bit)h(micropro)s (cessors)e(\(see)i([Glossary],)i(page)d(300,)j(for)c(more)h (information\),)i(and)d(a)150 872 y(micro)s(co)s(de)31 b(assem)m(bler)g(for)f(a)h(sp)s(ecial-purp)s(ose)e(Prolog)j(computer.) 41 b(More)31 b(recen)m(tly)-8 b(,)33 b Fz(gawk)c FB(w)m(as)i(used)150 981 y(for)36 b(writing)g(a)h(Wiki)g(clone.)1150 948 y Fo(7)1247 981 y FB(While)g(the)g(original)g Fz(awk)p FB('s)f(capabilities)i(w)m(ere)f(strained)f(b)m(y)g(tasks)h(of)150 1091 y(suc)m(h)29 b(complexit)m(y)-8 b(,)32 b(mo)s(dern)d(v)m(ersions)g (are)h(more)g(capable.)41 b(Ev)m(en)30 b(the)g(Bell)h(Labs)e(v)m (ersion)h(of)g Fz(awk)e FB(has)150 1200 y(few)m(er)j(prede\014ned)d (limits,)k(and)d(those)i(that)g(it)g(has)f(are)h(m)m(uc)m(h)f(larger)h (than)g(they)f(used)g(to)h(b)s(e.)275 1335 y(If)26 b(y)m(ou)h(\014nd)e (y)m(ourself)i(writing)g Fz(awk)f FB(scripts)g(of)h(more)g(than,)h(sa)m (y)-8 b(,)29 b(a)e(few)f(h)m(undred)f(lines,)j(y)m(ou)f(migh)m(t)150 1445 y(consider)k(using)g(a)g(di\013eren)m(t)h(programming)f(language.) 45 b(Emacs)31 b(Lisp)g(is)g(a)g(go)s(o)s(d)g(c)m(hoice)i(if)f(y)m(ou)f (need)150 1554 y(sophisticated)k(string)e(or)h(pattern)f(matc)m(hing)i (capabilities.)52 b(The)33 b(shell)g(is)h(also)g(go)s(o)s(d)g(at)g (string)g(and)150 1664 y(pattern)d(matc)m(hing;)j(in)d(addition,)h(it)g (allo)m(ws)h(p)s(o)m(w)m(erful)d(use)i(of)f(the)h(system)f(utilities.) 45 b(More)32 b(con)m(v)m(en-)150 1773 y(tional)i(languages,)h(suc)m(h)e (as)g(C,)f(C)p Fz(++)p FB(,)h(and)g(Ja)m(v)-5 b(a,)34 b(o\013er)g(b)s(etter)e(facilities)k(for)c(system)h(programming)150 1883 y(and)41 b(for)h(managing)g(the)g(complexit)m(y)h(of)f(large)h (programs.)74 b(Programs)42 b(in)f(these)h(languages)h(ma)m(y)150 1993 y(require)31 b(more)g(lines)g(of)h(source)f(co)s(de)g(than)g(the)g (equiv)-5 b(alen)m(t)33 b Fz(awk)d FB(programs,)h(but)f(they)i(are)f (easier)h(to)150 2102 y(main)m(tain)f(and)f(usually)g(run)f(more)i (e\016cien)m(tly)-8 b(.)p 150 5241 1200 4 v 199 5308 a Fo(7)275 5340 y Fn(Y)i(et)24 b(Another)h(Wiki)h(Clone)h(\()p Fm(http://www.awk-scripting.de/cgi)q(/wiki)q(.cgi)q(/yaw)q(k/)p Fn(\).)p eop end %%Page: 24 36 TeXDict begin 24 35 bop 150 -116 a FB(24)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fu(2)80 b(Regular)54 b(Expressions)150 556 y FB(A)39 b Fx(regular)f(expression)p FB(,)j(or)d Fx(regexp)p FB(,)j(is)d(a)h(w)m (a)m(y)g(of)g(describing)f(a)h(set)g(of)f(strings.)65 b(Because)40 b(regular)150 666 y(expressions)28 b(are)g(suc)m(h)g(a)h (fundamen)m(tal)f(part)g(of)g Fz(awk)g FB(programming,)g(their)g (format)h(and)e(use)h(deserv)m(e)150 775 y(a)j(separate)g(c)m(hapter.) 275 917 y(A)c(regular)g(expression)f(enclosed)i(in)e(slashes)h(\(`)p Fz(/)p FB('\))h(is)f(an)g Fz(awk)f FB(pattern)h(that)g(matc)m(hes)h(ev) m(ery)g(input)150 1027 y(record)39 b(whose)h(text)g(b)s(elongs)g(to)g (that)g(set.)69 b(The)39 b(simplest)h(regular)g(expression)f(is)h(a)g (sequence)g(of)150 1137 y(letters,)c(n)m(um)m(b)s(ers,)d(or)h(b)s(oth.) 50 b(Suc)m(h)34 b(a)g(regexp)g(matc)m(hes)h(an)m(y)f(string)g(that)g (con)m(tains)h(that)f(sequence.)150 1246 y(Th)m(us,)f(the)f(regexp)h(`) p Fz(foo)p FB(')g(matc)m(hes)h(an)m(y)f(string)g(con)m(taining)h(`)p Fz(foo)p FB('.)47 b(Therefore,)34 b(the)f(pattern)f Fz(/foo/)150 1356 y FB(matc)m(hes)42 b(an)m(y)g(input)e(record)h(con)m(taining)i (the)e(three)g(c)m(haracters)i(`)p Fz(foo)p FB(')e Fw(anywher)-5 b(e)50 b FB(in)40 b(the)i(record.)150 1465 y(Other)30 b(kinds)f(of)i(regexps)f(let)i(y)m(ou)e(sp)s(ecify)g(more)h (complicated)h(classes)f(of)g(strings.)275 1607 y(Initially)-8 b(,)28 b(the)f(examples)g(in)f(this)g(c)m(hapter)h(are)g(simple.)39 b(As)26 b(w)m(e)h(explain)g(more)f(ab)s(out)g(ho)m(w)h(regular)150 1717 y(expressions)j(w)m(ork,)h(w)m(e)g(will)f(presen)m(t)h(more)f (complicated)i(instances.)150 1961 y FA(2.1)68 b(Ho)l(w)46 b(to)f(Use)h(Regular)g(Expressions)150 2120 y FB(A)32 b(regular)g(expression)g(can)g(b)s(e)f(used)g(as)h(a)g(pattern)g(b)m(y) g(enclosing)h(it)f(in)g(slashes.)45 b(Then)31 b(the)h(regular)150 2230 y(expression)24 b(is)h(tested)h(against)f(the)g(en)m(tire)h(text)f (of)g(eac)m(h)h(record.)39 b(\(Normally)-8 b(,)27 b(it)f(only)e(needs)h (to)g(matc)m(h)150 2340 y(some)37 b(part)f(of)h(the)g(text)g(in)f (order)g(to)h(succeed.\))60 b(F)-8 b(or)38 b(example,)h(the)d(follo)m (wing)i(prin)m(ts)e(the)h(second)150 2449 y(\014eld)30 b(of)h(eac)m(h)g(record)f(that)h(con)m(tains)h(the)e(string)h(`)p Fz(foo)p FB(')f(an)m(ywhere)g(in)g(it:)390 2591 y Fz($)47 b(awk)g('/foo/)f({)i(print)e($2)h(}')h(BBS-list)410 2705 y Fy(a)533 2701 y Fz(555-1234)410 2815 y Fy(a)533 2811 y Fz(555-6699)410 2924 y Fy(a)533 2920 y Fz(555-6480)410 3034 y Fy(a)533 3030 y Fz(555-2127)275 3172 y(~)d FB(\(tilde\),)50 b Fz(~)45 b FB(op)s(erator)h(Regular)g(expressions)f(can)h(also)g(b)s (e)f(used)f(in)i(matc)m(hing)g(expressions.)150 3281 y(These)c(expressions)h(allo)m(w)h(y)m(ou)f(to)g(sp)s(ecify)f(the)h (string)f(to)i(matc)m(h)f(against;)50 b(it)44 b(need)e(not)h(b)s(e)f (the)150 3391 y(en)m(tire)h(curren)m(t)g(input)e(record.)77 b(The)42 b(t)m(w)m(o)i(op)s(erators)f(`)p Fz(~)p FB(')f(and)g(`)p Fz(!~)p FB(')g(p)s(erform)f(regular)i(expression)150 3501 y(comparisons.)51 b(Expressions)33 b(using)g(these)h(op)s(erators) g(can)g(b)s(e)g(used)f(as)h(patterns,)h(or)e(in)h Fz(if)p FB(,)g Fz(while)p FB(,)150 3610 y Fz(for)p FB(,)i(and)f Fz(do)g FB(statemen)m(ts.)58 b(\(See)36 b(Section)g(6.4)h([Con)m(trol)f (Statemen)m(ts)h(in)e(Actions],)k(page)d(99.\))57 b(F)-8 b(or)150 3720 y(example:)390 3862 y Fk(exp)57 b Fz(~)48 b(/)p Fk(regexp)11 b Fz(/)150 4004 y FB(is)38 b(true)h(if)f(the)h (expression)f Fx(exp)j FB(\(tak)m(en)f(as)e(a)h(string\))g(matc)m(hes)g Fx(regexp)p FB(.)65 b(The)38 b(follo)m(wing)i(example)150 4114 y(matc)m(hes,)f(or)d(selects,)j(all)e(input)e(records)h(with)g (the)g(upp)s(ercase)f(letter)i(`)p Fz(J)p FB(')g(somewhere)f(in)f(the)i (\014rst)150 4223 y(\014eld:)390 4366 y Fz($)47 b(awk)g('$1)g(~)h(/J/') e(inventory-shipped)410 4479 y Fy(a)533 4475 y Fz(Jan)95 b(13)g(25)g(15)47 b(115)410 4589 y Fy(a)533 4585 y Fz(Jun)95 b(31)g(42)g(75)47 b(492)410 4698 y Fy(a)533 4694 y Fz(Jul)95 b(24)g(34)g(67)47 b(436)410 4808 y Fy(a)533 4804 y Fz(Jan)95 b(21)g(36)g(64)47 b(620)275 4946 y FB(So)30 b(do)s(es)g(this:)390 5088 y Fz(awk)47 b('{)g(if)g(\($1)g(~)h(/J/\))e(print)h(}')g (inventory-shipped)275 5230 y FB(This)34 b(next)i(example)h(is)e(true)h (if)g(the)g(expression)f Fx(exp)j FB(\(tak)m(en)f(as)f(a)h(c)m (haracter)g(string\))f(do)s(es)f Fw(not)150 5340 y FB(matc)m(h)c Fx(regexp)s FB(:)p eop end %%Page: 25 37 TeXDict begin 25 36 bop 2285 -116 a Fr(Chapter)30 b(2:)41 b(Regular)31 b(Expressions)90 b FB(25)390 299 y Fk(exp)57 b Fz(!~)48 b(/)p Fk(regexp)11 b Fz(/)275 432 y FB(The)36 b(follo)m(wing)i(example)g(matc)m(hes,)i(or)d(selects,)j(all)e(input)e (records)h(whose)g(\014rst)f(\014eld)g Fw(do)-5 b(es)40 b(not)150 542 y FB(con)m(tain)32 b(the)e(upp)s(ercase)g(letter)h(`)p Fz(J)p FB(':)390 675 y Fz($)47 b(awk)g('$1)g(!~)g(/J/')g (inventory-shipped)410 789 y Fy(a)533 785 y Fz(Feb)95 b(15)g(32)g(24)47 b(226)410 899 y Fy(a)533 895 y Fz(Mar)95 b(15)g(24)g(34)47 b(228)410 1008 y Fy(a)533 1004 y Fz(Apr)95 b(31)g(52)g(63)47 b(420)410 1118 y Fy(a)533 1114 y Fz(May)95 b(16)g(34)g(29)47 b(208)390 1223 y(...)275 1357 y FB(When)29 b(a)h(regexp)g(is)g(enclosed)g(in)g(slashes,)g(suc)m(h)f(as)h Fz(/foo/)p FB(,)f(w)m(e)h(call)h(it)f(a)g Fx(regexp)g(constan)m(t)p FB(,)i(m)m(uc)m(h)150 1466 y(lik)m(e)g Fz(5.27)d FB(is)h(a)h(n)m (umeric)f(constan)m(t)i(and)e Fz("foo")f FB(is)h(a)h(string)f(constan)m (t.)150 1697 y FA(2.2)68 b(Escap)t(e)45 b(Sequences)150 1856 y FB(Some)24 b(c)m(haracters)h(cannot)g(b)s(e)e(included)g (literally)j(in)e(string)f(constan)m(ts)i(\()p Fz("foo")p FB(\))f(or)g(regexp)g(constan)m(ts)150 1966 y(\()p Fz(/foo/)p FB(\).)55 b(Instead,)37 b(they)f(should)e(b)s(e)h(represen)m(ted)h (with)f Fx(escap)s(e)h(sequences)p FB(,)h(whic)m(h)e(are)h(c)m (haracter)150 2075 y(sequences)d(b)s(eginning)g(with)f(a)i(bac)m (kslash)g(\(`)p Fz(\\)p FB('\).)49 b(One)33 b(use)g(of)g(an)g(escap)s (e)g(sequence)h(is)f(to)h(include)f(a)150 2185 y(double-quote)e(c)m (haracter)i(in)d(a)i(string)e(constan)m(t.)44 b(Because)32 b(a)f(plain)g(double)f(quote)i(ends)e(the)h(string,)150 2294 y(y)m(ou)d(m)m(ust)f(use)g(`)p Fz(\\")p FB(')h(to)g(represen)m(t)g (an)f(actual)i(double-quote)f(c)m(haracter)h(as)f(a)g(part)f(of)h(the)f (string.)40 b(F)-8 b(or)150 2404 y(example:)390 2538 y Fz($)47 b(awk)g('BEGIN)f({)i(print)e("He)h(said)g(\\"hi!\\")f(to)h (her.")f(}')410 2651 y Fy(a)533 2647 y Fz(He)h(said)g("hi!")f(to)i (her.)275 2781 y FB(The)37 b(bac)m(kslash)i(c)m(haracter)h(itself)f(is) f(another)g(c)m(haracter)i(that)f(cannot)g(b)s(e)e(included)g (normally;)150 2890 y(y)m(ou)e(m)m(ust)g(write)f(`)p Fz(\\\\)p FB(')h(to)g(put)f(one)h(bac)m(kslash)h(in)e(the)h(string)f (or)h(regexp.)54 b(Th)m(us,)35 b(the)g(string)f(whose)150 3000 y(con)m(ten)m(ts)e(are)f(the)f(t)m(w)m(o)i(c)m(haracters)g(`)p Fz(")p FB(')f(and)e(`)p Fz(\\)p FB(')i(m)m(ust)f(b)s(e)g(written)g Fz("\\"\\\\")p FB(.)275 3133 y(Bac)m(kslash)d(also)h(represen)m(ts)e (unprin)m(table)f(c)m(haracters)j(suc)m(h)e(as)h(T)-8 b(AB)27 b(or)f(newline.)39 b(While)27 b(there)g(is)150 3243 y(nothing)h(to)h(stop)f(y)m(ou)g(from)g(en)m(tering)h(most)f (unprin)m(table)f(c)m(haracters)j(directly)f(in)e(a)i(string)f(constan) m(t)150 3352 y(or)i(regexp)h(constan)m(t,)h(they)e(ma)m(y)h(lo)s(ok)g (ugly)-8 b(.)275 3486 y(The)31 b(follo)m(wing)j(table)f(lists)g(all)g (the)f(escap)s(e)h(sequences)f(used)f(in)h Fz(awk)g FB(and)f(what)h (they)h(represen)m(t.)150 3595 y(Unless)23 b(noted)f(otherwise,)j(all)e (these)g(escap)s(e)g(sequences)g(apply)f(to)i(b)s(oth)e(string)g (constan)m(ts)i(and)e(regexp)150 3705 y(constan)m(ts:)150 3862 y Fz(\\\\)384 b FB(A)30 b(literal)i(bac)m(kslash,)g(`)p Fz(\\)p FB('.)150 4020 y Fz(\\a)384 b FB(The)26 b(\\alert")j(c)m (haracter,)h Fk(Ctrl-g)p FB(,)c(ASCI)s(I)f(co)s(de)i(7)h(\(BEL\).)g (\(This)e(usually)h(mak)m(es)h(some)630 4129 y(sort)j(of)f(audible)g (noise.\))150 4287 y Fz(\\b)384 b FB(Bac)m(kspace,)33 b Fk(Ctrl-h)p FB(,)c(ASCI)s(I)g(co)s(de)h(8)h(\(BS\).)150 4444 y Fz(\\f)384 b FB(F)-8 b(ormfeed,)31 b Fk(Ctrl-l)p FB(,)e(ASCI)s(I)g(co)s(de)i(12)g(\(FF\).)150 4601 y Fz(\\n)384 b FB(Newline,)31 b Fk(Ctrl-j)p FB(,)e(ASCI)s(I)g(co)s(de)i(10)g (\(LF\).)150 4758 y Fz(\\r)384 b FB(Carriage)31 b(return,)f Fk(Ctrl-m)p FB(,)f(ASCI)s(I)f(co)s(de)j(13)g(\(CR\).)150 4916 y Fz(\\t)384 b FB(Horizon)m(tal)33 b(T)-8 b(AB,)31 b Fk(Ctrl-i)p FB(,)e(ASCI)s(I)g(co)s(de)h(9)h(\(HT\).)150 5073 y Fz(\\v)384 b FB(V)-8 b(ertical)33 b(tab,)e Fk(Ctrl-k)p FB(,)d(ASCI)s(I)h(co)s(de)i(11)g(\(VT\).)150 5230 y Fz(\\)p Fk(nnn)288 b FB(The)26 b(o)s(ctal)h(v)-5 b(alue)27 b Fx(nnn)p FB(,)e(where)h Fx(nnn)e FB(stands)i(for)g(1)g(to)h(3)g(digits) f(b)s(et)m(w)m(een)h(`)p Fz(0)p FB(')f(and)g(`)p Fz(7)p FB('.)39 b(F)-8 b(or)630 5340 y(example,)31 b(the)g(co)s(de)f(for)h (the)f(ASCI)s(I)f(ESC)g(\(escap)s(e\))j(c)m(haracter)g(is)e(`)p Fz(\\033)p FB('.)p eop end %%Page: 26 38 TeXDict begin 26 37 bop 150 -116 a FB(26)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz(\\x)p Fk(hh)11 b Fz(...)133 b FB(The)23 b(hexadecimal)h(v)-5 b(alue)24 b Fx(hh)p FB(,)g(where)e Fx(hh)h FB(stands)f(for)h(a)h (sequence)f(of)h(hexadecimal)g(digits)630 408 y(\(`)p Fz(0)p FB('{`)p Fz(9)p FB(',)41 b(and)36 b(either)i(`)p Fz(A)p FB('{`)p Fz(F)p FB(')g(or)f(`)p Fz(a)p FB('{`)p Fz(f)p FB('\).)63 b(Lik)m(e)38 b(the)g(same)g(construct)f(in)g(ISO)g (C,)g(the)630 518 y(escap)s(e)24 b(sequence)g(con)m(tin)m(ues)h(un)m (til)f(the)g(\014rst)f(nonhexadecimal)h(digit)g(is)g(seen.)39 b(Ho)m(w)m(ev)m(er,)630 628 y(using)31 b(more)h(than)g(t)m(w)m(o)h (hexadecimal)g(digits)f(pro)s(duces)e(unde\014ned)g(results.)44 b(\(The)32 b(`)p Fz(\\x)p FB(')630 737 y(escap)s(e)f(sequence)g(is)f (not)h(allo)m(w)m(ed)h(in)e(POSIX)f Fz(awk)p FB(.\))150 885 y Fz(\\/)384 b FB(A)37 b(literal)h(slash)e(\(necessary)h(for)g (regexp)g(constan)m(ts)g(only\).)60 b(This)36 b(expression)g(is)h(used) 630 994 y(when)c(y)m(ou)h(w)m(an)m(t)g(to)h(write)f(a)g(regexp)g (constan)m(t)h(that)f(con)m(tains)h(a)f(slash.)51 b(Because)35 b(the)630 1104 y(regexp)c(is)h(delimited)f(b)m(y)g(slashes,)h(y)m(ou)g (need)f(to)g(escap)s(e)h(the)f(slash)g(that)h(is)f(part)g(of)h(the)630 1213 y(pattern,)f(in)f(order)g(to)h(tell)g Fz(awk)f FB(to)h(k)m(eep)g (pro)s(cessing)f(the)h(rest)f(of)h(the)f(regexp.)150 1361 y Fz(\\")384 b FB(A)31 b(literal)g(double)f(quote)h(\(necessary)h (for)e(string)g(constan)m(ts)i(only\).)41 b(This)30 b(expression)g(is) 630 1471 y(used)35 b(when)g(y)m(ou)h(w)m(an)m(t)g(to)h(write)f(a)g (string)f(constan)m(t)i(that)g(con)m(tains)g(a)f(double)f(quote.)630 1580 y(Because)30 b(the)f(string)g(is)g(delimited)g(b)m(y)g(double)f (quotes,)i(y)m(ou)f(need)g(to)g(escap)s(e)g(the)g(quote)630 1690 y(that)h(is)g(part)f(of)h(the)f(string,)h(in)f(order)g(to)i(tell)f Fz(awk)f FB(to)h(k)m(eep)g(pro)s(cessing)g(the)f(rest)h(of)g(the)630 1799 y(string.)275 1947 y(In)20 b Fz(gawk)p FB(,)j(a)e(n)m(um)m(b)s(er) f(of)i(additional)g(t)m(w)m(o-c)m(haracter)j(sequences)d(that)g(b)s (egin)f(with)g(a)h(bac)m(kslash)g(ha)m(v)m(e)150 2056 y(sp)s(ecial)31 b(meaning)g(in)f(regexps.)41 b(See)30 b(Section)h(2.5)h([)p Fz(gawk)p FB(-Sp)s(eci\014c)d(Regexp)i(Op)s (erators],)f(page)h(31.)275 2185 y(In)21 b(a)i(regexp,)i(a)e(bac)m (kslash)h(b)s(efore)e(an)m(y)h(c)m(haracter)h(that)f(is)g(not)g(in)f (the)h(previous)f(list)h(and)f(not)h(listed)150 2294 y(in)37 b(Section)i(2.5)f([)p Fz(gawk)p FB(-Sp)s(eci\014c)f(Regexp)h (Op)s(erators],)h(page)g(31,)h(means)e(that)g(the)g(next)f(c)m (haracter)150 2404 y(should)i(b)s(e)g(tak)m(en)i(literally)-8 b(,)44 b(ev)m(en)d(if)e(it)i(w)m(ould)e(normally)h(b)s(e)f(a)h(regexp)g (op)s(erator.)69 b(F)-8 b(or)41 b(example,)150 2514 y Fz(/a\\+b/)29 b FB(matc)m(hes)i(the)g(three)f(c)m(haracters)i(`)p Fz(a+b)p FB('.)275 2642 y(F)-8 b(or)32 b(complete)i(p)s(ortabilit)m(y) -8 b(,)33 b(do)f(not)g(use)g(a)g(bac)m(kslash)h(b)s(efore)e(an)m(y)h(c) m(haracter)i(not)e(sho)m(wn)f(in)h(the)150 2752 y(previous)e(list.)275 2880 y(T)-8 b(o)30 b(summarize:)225 3009 y Fy(\017)60 b FB(The)41 b(escap)s(e)g(sequences)g(in)g(the)h(table)g(ab)s(o)m(v)m (e)g(are)f(alw)m(a)m(ys)i(pro)s(cessed)d(\014rst,)k(for)d(b)s(oth)f (string)330 3118 y(constan)m(ts)d(and)e(regexp)h(constan)m(ts.)59 b(This)35 b(happ)s(ens)f(v)m(ery)i(early)-8 b(,)39 b(as)d(so)s(on)f(as) h Fz(awk)f FB(reads)h(y)m(our)330 3228 y(program.)225 3357 y Fy(\017)60 b Fz(gawk)41 b FB(pro)s(cesses)h(b)s(oth)g(regexp)g (constan)m(ts)i(and)d(dynamic)h(regexps)h(\(see)g(Section)g(2.8)g ([Using)330 3466 y(Dynamic)i(Regexps],)50 b(page)45 b(34\),)50 b(for)44 b(the)h(sp)s(ecial)g(op)s(erators)g(listed)g(in)f(Section)i (2.5)g([)p Fz(gawk)p FB(-)330 3576 y(Sp)s(eci\014c)30 b(Regexp)h(Op)s(erators],)f(page)h(31.)225 3704 y Fy(\017)60 b FB(A)30 b(bac)m(kslash)i(b)s(efore)e(an)m(y)g(other)h(c)m(haracter)h (means)e(to)h(treat)h(that)f(c)m(haracter)h(literally)-8 b(.)150 3892 y Fj(Adv)h(anced)40 b(Notes:)62 b(Bac)m(kslash)41 b(Before)h(Regular)f(Characters)150 4039 y FB(If)20 b(y)m(ou)h(place)g (a)g(bac)m(kslash)g(in)f(a)h(string)f(constan)m(t)i(b)s(efore)e (something)h(that)g(is)f(not)h(one)f(of)h(the)f(c)m(haracters)150 4148 y(previously)32 b(listed,)i(POSIX)e Fz(awk)g FB(purp)s(osely)f (lea)m(v)m(es)k(what)d(happ)s(ens)f(as)i(unde\014ned.)45 b(There)33 b(are)g(t)m(w)m(o)150 4258 y(c)m(hoices:)150 4405 y(Strip)d(the)g(bac)m(kslash)h(out)630 4515 y(This)37 b(is)g(what)h(Unix)f Fz(awk)g FB(and)g Fz(gawk)f FB(b)s(oth)h(do.)63 b(F)-8 b(or)38 b(example,)i Fz("a\\qc")c FB(is)i(the)g(same)630 4624 y(as)h Fz("aqc")p FB(.)63 b(\(Because)40 b(this)e(is)h(suc)m(h)f (an)g(easy)h(bug)f(b)s(oth)g(to)h(in)m(tro)s(duce)f(and)g(to)h(miss,) 630 4734 y Fz(gawk)e FB(w)m(arns)h(y)m(ou)h(ab)s(out)g(it.\))66 b(Consider)38 b(`)p Fz(FS)30 b(=)g("[)f(\\t]+\\|[)g(\\t]+")n FB(')39 b(to)h(use)e(v)m(ertical)630 4844 y(bars)j(surrounded)e(b)m(y)i (whitespace)h(as)g(the)f(\014eld)g(separator.)75 b(There)40 b(should)h(b)s(e)g(t)m(w)m(o)630 4953 y(bac)m(kslashes)31 b(in)f(the)h(string)f(`)p Fz(FS)g(=)g("[)g(\\t]+\\\\|[)e(\\t]+")o FB('.\))150 5101 y(Lea)m(v)m(e)k(the)f(bac)m(kslash)g(alone)630 5210 y(Some)45 b(other)g Fz(awk)f FB(implemen)m(tations)i(do)e(this.)84 b(In)44 b(suc)m(h)g(implemen)m(tations,)50 b(t)m(yping)630 5320 y Fz("a\\qc")29 b FB(is)h(the)h(same)f(as)h(t)m(yping)g Fz("a\\\\qc")p FB(.)p eop end %%Page: 27 39 TeXDict begin 27 38 bop 2285 -116 a Fr(Chapter)30 b(2:)41 b(Regular)31 b(Expressions)90 b FB(27)150 299 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b(Escap)s(e)41 b(Sequences)g(for)h(Metac)m (haracters)150 446 y FB(Supp)s(ose)27 b(y)m(ou)i(use)g(an)g(o)s(ctal)h (or)f(hexadecimal)i(escap)s(e)e(to)h(represen)m(t)f(a)g(regexp)h(metac) m(haracter.)42 b(\(See)150 555 y(Section)c(2.3)f([Regular)h(Expression) e(Op)s(erators],)i(page)g(27.\))61 b(Do)s(es)37 b Fz(awk)f FB(treat)i(the)f(c)m(haracter)i(as)e(a)150 665 y(literal)32 b(c)m(haracter)g(or)e(as)h(a)g(regexp)f(op)s(erator?)275 826 y(Historically)-8 b(,)43 b(suc)m(h)38 b(c)m(haracters)i(w)m(ere)f (tak)m(en)g(literally)-8 b(.)132 b(Ho)m(w)m(ev)m(er,)42 b(the)d(POSIX)e(standard)h(in-)236 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 936 a(dicates)38 b(that)f(they)g(should)f(b)s(e)g (treated)h(as)g(real)g(metac)m(haracters,)k(whic)m(h)c(is)f(what)h Fz(gawk)e FB(do)s(es.)60 b(In)150 1045 y(compatibilit)m(y)33 b(mo)s(de)c(\(see)j(Section)f(11.2)h([Command-Line)e(Options],)g(page)h (173\),)h Fz(gawk)d FB(treats)j(the)150 1155 y(c)m(haracters)39 b(represen)m(ted)f(b)m(y)g(o)s(ctal)h(and)f(hexadecimal)h(escap)s(e)f (sequences)h(literally)g(when)e(used)g(in)150 1265 y(regexp)31 b(constan)m(ts.)42 b(Th)m(us,)29 b Fz(/a\\52b/)f FB(is)j(equiv)-5 b(alen)m(t)32 b(to)f Fz(/a\\*b/)p FB(.)150 1537 y FA(2.3)68 b(Regular)46 b(Expression)g(Op)t(erators)150 1696 y FB(Y)-8 b(ou)32 b(can)g(com)m(bine)h(regular)f(expressions)f(with)h(sp)s(ecial) g(c)m(haracters,)i(called)f Fx(regular)f(expression)g(op-)150 1806 y(erators)j FB(or)30 b Fx(metac)m(haracters)p FB(,)j(to)e (increase)h(the)e(p)s(o)m(w)m(er)g(and)g(v)m(ersatilit)m(y)j(of)e (regular)f(expressions.)275 1967 y(The)j(escap)s(e)i(sequences)g (describ)s(ed)e(earlier)i(in)f(Section)h(2.2)g([Escap)s(e)g (Sequences],)g(page)g(25,)i(are)150 2077 y(v)-5 b(alid)33 b(inside)f(a)g(regexp.)47 b(They)32 b(are)g(in)m(tro)s(duced)g(b)m(y)g (a)h(`)p Fz(\\)p FB(')g(and)e(are)i(recognized)g(and)f(con)m(v)m(erted) i(in)m(to)150 2186 y(corresp)s(onding)29 b(real)i(c)m(haracters)h(as)f (the)f(v)m(ery)h(\014rst)f(step)g(in)g(pro)s(cessing)g(regexps.)275 2347 y(Here)j(is)g(a)g(list)g(of)g(metac)m(haracters.)51 b(All)33 b(c)m(haracters)h(that)g(are)f(not)g(escap)s(e)g(sequences)g (and)f(that)150 2457 y(are)f(not)f(listed)h(in)f(the)h(table)g(stand)f (for)g(themselv)m(es:)150 2656 y Fz(\\)432 b FB(This)25 b(is)h(used)f(to)h(suppress)e(the)i(sp)s(ecial)g(meaning)g(of)g(a)g(c)m (haracter)h(when)e(matc)m(hing.)40 b(F)-8 b(or)630 2766 y(example,)31 b(`)p Fz(\\$)p FB(')g(matc)m(hes)g(the)g(c)m(haracter)h (`)p Fz($)p FB('.)150 2952 y Fz(^)432 b FB(This)41 b(matc)m(hes)i(the)f (b)s(eginning)f(of)g(a)i(string.)74 b(F)-8 b(or)43 b(example,)i(`)p Fz(^@chapter)p FB(')40 b(matc)m(hes)630 3062 y(`)p Fz(@chapter)p FB(')e(at)j(the)f(b)s(eginning)f(of)h(a)g(string)g(and)f(can)h(b)s(e)f (used)g(to)i(iden)m(tify)f(c)m(hapter)630 3171 y(b)s(eginnings)35 b(in)h(T)-8 b(exinfo)37 b(source)f(\014les.)58 b(The)36 b(`)p Fz(^)p FB(')g(is)h(kno)m(wn)e(as)i(an)f Fx(anc)m(hor)p FB(,)i(b)s(ecause)e(it)630 3281 y(anc)m(hors)31 b(the)f(pattern)h(to)g (matc)m(h)g(only)f(at)i(the)e(b)s(eginning)g(of)g(the)h(string.)630 3429 y(It)k(is)g(imp)s(ortan)m(t)g(to)h(realize)g(that)g(`)p Fz(^)p FB(')f(do)s(es)g(not)g(matc)m(h)h(the)f(b)s(eginning)f(of)h(a)g (line)h(em-)630 3538 y(b)s(edded)29 b(in)h(a)g(string.)41 b(The)30 b(condition)h(is)f(not)h(true)f(in)g(the)h(follo)m(wing)h (example:)870 3686 y Fz(if)47 b(\("line1\\nLINE)d(2")k(~)f(/^L/\))f (...)150 3872 y($)432 b FB(This)31 b(is)g(similar)h(to)h(`)p Fz(^)p FB(',)f(but)f(it)h(matc)m(hes)h(only)f(at)g(the)g(end)f(of)g(a)h (string.)45 b(F)-8 b(or)32 b(example,)630 3982 y(`)p Fz(p$)p FB(')h(matc)m(hes)h(a)f(record)g(that)g(ends)f(with)h(a)g(`)p Fz(p)p FB('.)49 b(The)32 b(`)p Fz($)p FB(')h(is)g(an)g(anc)m(hor)g(and) f(do)s(es)h(not)630 4091 y(matc)m(h)i(the)f(end)g(of)g(a)g(line)h(em)m (b)s(edded)d(in)i(a)h(string.)51 b(The)34 b(condition)h(in)e(the)h (follo)m(wing)630 4201 y(example)d(is)f(not)h(true:)870 4349 y Fz(if)47 b(\("line1\\nLINE)d(2")k(~)f(/1$/\))f(...)150 4535 y(.)432 b FB(This)39 b(matc)m(hes)i(an)m(y)f(single)h(c)m (haracter,)j Fw(including)k FB(the)40 b(newline)g(c)m(haracter.)71 b(F)-8 b(or)40 b(ex-)630 4644 y(ample,)f(`)p Fz(.P)p FB(')d(matc)m(hes)i(an)m(y)f(single)g(c)m(haracter)h(follo)m(w)m(ed)h (b)m(y)d(a)h(`)p Fz(P)p FB(')g(in)f(a)h(string.)60 b(Using)630 4754 y(concatenation,)34 b(w)m(e)d(can)g(mak)m(e)h(a)g(regular)f (expression)f(suc)m(h)h(as)g(`)p Fz(U.A)p FB(',)g(whic)m(h)g(matc)m (hes)630 4863 y(an)m(y)g(three-c)m(haracter)h(sequence)f(that)g(b)s (egins)f(with)g(`)p Fz(U)p FB(')g(and)g(ends)g(with)g(`)p Fz(A)p FB('.)630 5011 y(In)k(strict)i(POSIX)d(mo)s(de)i(\(see)g (Section)h(11.2)g([Command-Line)f(Options],)h(page)f(173\),)630 5121 y(`)p Fz(.)p FB(')e(do)s(es)g(not)g(matc)m(h)h(the)f Fg(nul)f FB(c)m(haracter,)k(whic)m(h)d(is)g(a)g(c)m(haracter)i(with)e (all)g(bits)g(equal)630 5230 y(to)h(zero.)51 b(Otherwise,)34 b Fg(nul)e FB(is)i(just)f(another)g(c)m(haracter.)52 b(Other)33 b(v)m(ersions)g(of)h Fz(awk)e FB(ma)m(y)630 5340 y(not)f(b)s(e)e(able)i(to)g(matc)m(h)h(the)e Fg(nul)g FB(c)m(haracter.)p eop end %%Page: 28 40 TeXDict begin 28 39 bop 150 -116 a FB(28)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz([...)o(])241 b FB(This)33 b(is)h(called)h(a)f Fx(c)m(haracter)i(list)p FB(.)1823 266 y Fo(1)1912 299 y FB(It)e(matc)m(hes)h(an)m(y)f Fw(one)42 b FB(of)34 b(the)g(c)m(haracters)h(that)g(are)630 408 y(enclosed)f(in)e(the)h (square)g(brac)m(k)m(ets.)50 b(F)-8 b(or)34 b(example,)g(`)p Fz([MVX])p FB(')e(matc)m(hes)i(an)m(y)f(one)h(of)f(the)630 518 y(c)m(haracters)39 b(`)p Fz(M)p FB(',)i(`)p Fz(V)p FB(',)f(or)e(`)p Fz(X)p FB(')g(in)f(a)i(string.)63 b(A)38 b(full)g(discussion)f(of)h(what)g(can)g(b)s(e)f(inside)630 628 y(the)32 b(square)f(brac)m(k)m(ets)j(of)d(a)i(c)m(haracter)g(list)f (is)g(giv)m(en)h(in)e(Section)i(2.4)f([Using)h(Character)630 737 y(Lists],)e(page)g(29.)150 892 y Fz([^)f(...)o(])163 b FB(This)37 b(is)g(a)h Fx(complemen)m(ted)h(c)m(haracter)g(list)p FB(.)63 b(The)37 b(\014rst)g(c)m(haracter)i(after)f(the)g(`)p Fz([)p FB(')f Fw(must)630 1002 y FB(b)s(e)f(a)i(`)p Fz(^)p FB('.)60 b(It)37 b(matc)m(hes)h(an)m(y)g(c)m(haracters)g Fw(exc)-5 b(ept)46 b FB(those)38 b(in)e(the)i(square)e(brac)m(k)m(ets.) 62 b(F)-8 b(or)630 1111 y(example,)31 b(`)p Fz([^awk])p FB(')e(matc)m(hes)j(an)m(y)f(c)m(haracter)h(that)f(is)f(not)h(an)f(`)p Fz(a)p FB(',)h(`)p Fz(w)p FB(',)g(or)f(`)p Fz(k)p FB('.)150 1266 y Fz(|)432 b FB(This)41 b(is)i(the)f Fx(alternation)i(op)s(erator) 49 b FB(and)41 b(it)i(is)f(used)f(to)i(sp)s(ecify)f(alternativ)m(es.)78 b(The)630 1376 y(`)p Fz(|)p FB(')49 b(has)f(the)h(lo)m(w)m(est)h (precedence)f(of)g(all)g(the)g(regular)g(expression)f(op)s(erators.)95 b(F)-8 b(or)630 1485 y(example,)51 b(`)p Fz(^P|[[:digit:]])p FB(')42 b(matc)m(hes)48 b(an)m(y)e(string)g(that)g(matc)m(hes)i(either) e(`)p Fz(^P)p FB(')g(or)630 1595 y(`)p Fz([[:digit:]])p FB('.)35 b(This)21 b(means)g(it)g(matc)m(hes)i(an)m(y)e(string)h(that)g (starts)f(with)g(`)p Fz(P)p FB(')h(or)f(con)m(tains)630 1704 y(a)31 b(digit.)630 1837 y(The)f(alternation)i(applies)e(to)h(the) g(largest)h(p)s(ossible)e(regexps)g(on)g(either)h(side.)150 1991 y Fz(\(...)o(\))241 b FB(P)m(aren)m(theses)25 b(are)f(used)f(for)h (grouping)f(in)h(regular)g(expressions,)h(as)f(in)g(arithmetic.)39 b(They)630 2101 y(can)27 b(b)s(e)e(used)h(to)h(concatenate)i(regular)e (expressions)f(con)m(taining)i(the)e(alternation)i(op)s(er-)630 2211 y(ator,)34 b(`)p Fz(|)p FB('.)46 b(F)-8 b(or)33 b(example,)h(`)p Fz(@\(samp|code\)\\{[^}]+\\})p FB(')26 b(matc)m(hes)34 b(b)s(oth)d(`)p Fz(@code{foo})p FB(')630 2320 y(and)e(`)p Fz(@samp{bar})p FB('.)38 b(\(These)29 b(are)h(T)-8 b(exinfo)30 b(formatting)g(con)m(trol)h(sequences.)41 b(The)28 b(`)p Fz(+)p FB(')i(is)630 2430 y(explained)h(further)e(on)h (in)g(this)g(list.\))150 2585 y Fz(*)432 b FB(This)36 b(sym)m(b)s(ol)g(means)g(that)h(the)g(preceding)f(regular)h(expression) f(should)f(b)s(e)h(rep)s(eated)630 2694 y(as)30 b(man)m(y)h(times)f(as) h(necessary)f(to)h(\014nd)e(a)i(matc)m(h.)41 b(F)-8 b(or)31 b(example,)g(`)p Fz(ph*)p FB(')f(applies)g(the)h(`)p Fz(*)p FB(')630 2804 y(sym)m(b)s(ol)36 b(to)h(the)g(preceding)g(`)p Fz(h)p FB(')f(and)g(lo)s(oks)h(for)f(matc)m(hes)i(of)f(one)f(`)p Fz(p)p FB(')h(follo)m(w)m(ed)h(b)m(y)f(an)m(y)630 2913 y(n)m(um)m(b)s(er)29 b(of)i(`)p Fz(h)p FB('s.)40 b(This)30 b(also)h(matc)m(hes)h(just)e(`)p Fz(p)p FB(')g(if)g(no)h(`)p Fz(h)p FB('s)f(are)h(presen)m(t.)630 3046 y(The)37 b(`)p Fz(*)p FB(')h(rep)s(eats)g(the)g Fw(smal)5 b(lest)48 b FB(p)s(ossible)37 b(preceding)h(expression.)62 b(\(Use)39 b(paren)m(theses)630 3155 y(if)44 b(y)m(ou)g(w)m(an)m(t)g(to)g(rep)s (eat)g(a)g(larger)h(expression.\))80 b(It)44 b(\014nds)e(as)i(man)m(y)g (rep)s(etitions)g(as)630 3265 y(p)s(ossible.)39 b(F)-8 b(or)27 b(example,)h(`)p Fz(awk)i('/\\\(c[ad][ad]*r)c(x\\\)/)j({)h (print)f(}')h(sample)p FB(')24 b(prin)m(ts)630 3374 y(ev)m(ery)37 b(record)e(in)h(`)p Fz(sample)p FB(')f(con)m(taining)i(a)g(string)e(of) h(the)h(form)e(`)p Fz(\(car)29 b(x\))p FB(',)38 b(`)p Fz(\(cdr)29 b(x\))p FB(',)630 3484 y(`)p Fz(\(cadr)g(x\))p FB(',)44 b(and)c(so)h(on.)72 b(Notice)43 b(the)e(escaping)h(of)f(the)g (paren)m(theses)g(b)m(y)g(preceding)630 3594 y(them)30 b(with)g(bac)m(kslashes.)150 3748 y Fz(+)432 b FB(This)41 b(sym)m(b)s(ol)h(is)g(similar)g(to)h(`)p Fz(*)p FB(',)i(except)e(that)f (the)g(preceding)g(expression)g(m)m(ust)g(b)s(e)630 3858 y(matc)m(hed)33 b(at)g(least)g(once.)47 b(This)32 b(means)g(that)g(`)p Fz(wh+y)p FB(')g(w)m(ould)g(matc)m(h)h(`)p Fz(why)p FB(')f(and)f(`)p Fz(whhy)p FB(',)630 3968 y(but)26 b(not)i(`)p Fz(wy)p FB(',)f(whereas)g(`)p Fz(wh*y)p FB(')g(w)m(ould)g(matc)m(h)g(all)h (three)g(of)f(these)g(strings.)40 b(The)26 b(follo)m(w-)630 4077 y(ing)31 b(is)f(a)h(simpler)f(w)m(a)m(y)h(of)g(writing)f(the)g (last)i(`)p Fz(*)p FB(')e(example:)870 4209 y Fz(awk)47 b('/\\\(c[ad]+r)e(x\\\)/)h({)i(print)e(}')h(sample)150 4364 y(?)432 b FB(This)46 b(sym)m(b)s(ol)g(is)h(similar)g(to)h(`)p Fz(*)p FB(',)j(except)c(that)h(the)e(preceding)h(expression)g(can)g(b)s (e)630 4474 y(matc)m(hed)f(either)f(once)g(or)g(not)g(at)h(all.)84 b(F)-8 b(or)46 b(example,)j(`)p Fz(fe?d)p FB(')44 b(matc)m(hes)i(`)p Fz(fed)p FB(')f(and)630 4583 y(`)p Fz(fd)p FB(',)31 b(but)e(nothing)i (else.)150 4738 y Fz({)p Fk(n)11 b Fz(})150 4848 y({)p Fk(n)p Fz(,})150 4957 y({)p Fk(n)p Fz(,)p Fk(m)g Fz(})229 b FB(One)27 b(or)h(t)m(w)m(o)h(n)m(um)m(b)s(ers)e(inside)g(braces)h (denote)h(an)f Fx(in)m(terv)-5 b(al)29 b(expression)p FB(.)39 b(If)28 b(there)g(is)g(one)630 5067 y(n)m(um)m(b)s(er)36 b(in)g(the)h(braces,)i(the)e(preceding)g(regexp)g(is)g(rep)s(eated)g Fx(n)f FB(times.)61 b(If)36 b(there)i(are)p 150 5154 1200 4 v 199 5221 a Fo(1)275 5253 y Fn(In)27 b(other)i(literature,)h(y) n(ou)e(ma)n(y)g(see)h(a)g(c)n(haracter)g(list)g(referred)g(to)f(as)h (either)g(a)g Ff(c)n(haracter)g(set)p Fn(,)g(a)g Ff(c)n(haracter)g (class)p Fn(,)275 5340 y(or)d(a)g Ff(brac)n(k)n(et)f(expression)p Fn(.)p eop end %%Page: 29 41 TeXDict begin 29 40 bop 2285 -116 a Fr(Chapter)30 b(2:)41 b(Regular)31 b(Expressions)90 b FB(29)630 299 y(t)m(w)m(o)35 b(n)m(um)m(b)s(ers)d(separated)i(b)m(y)g(a)g(comma,)i(the)e(preceding)f (regexp)h(is)g(rep)s(eated)g Fx(n)f FB(to)h Fx(m)630 408 y FB(times.)42 b(If)30 b(there)h(is)g(one)g(n)m(um)m(b)s(er)e (follo)m(w)m(ed)j(b)m(y)f(a)g(comma,)h(then)e(the)h(preceding)g(regexp) 630 518 y(is)f(rep)s(eated)h(at)g(least)h Fx(n)d FB(times:)630 681 y Fz(wh{3}y)192 b FB(Matc)m(hes)32 b(`)p Fz(whhhy)p FB(',)e(but)f(not)i(`)p Fz(why)p FB(')f(or)g(`)p Fz(whhhhy)p FB('.)630 844 y Fz(wh{3,5}y)96 b FB(Matc)m(hes)32 b(`)p Fz(whhhy)p FB(',)e(`)p Fz(whhhhy)p FB(',)f(or)i(`)p Fz(whhhhhy)p FB(',)e(only)-8 b(.)630 1008 y Fz(wh{2,}y)144 b FB(Matc)m(hes)32 b(`)p Fz(whhy)p FB(')e(or)g(`)p Fz(whhhy)p FB(',)g(and)g(so)g(on.)630 1171 y(In)m(terv)-5 b(al)35 b(expressions)f(w)m(ere)g(not)g (traditionally)i(a)m(v)-5 b(ailable)37 b(in)c Fz(awk)p FB(.)51 b(They)34 b(w)m(ere)h(added)630 1280 y(as)i(part)g(of)g(the)g (POSIX)f(standard)g(to)i(mak)m(e)g Fz(awk)e FB(and)g Fz(egrep)g FB(consisten)m(t)i(with)f(eac)m(h)630 1390 y(other.)630 1526 y(Ho)m(w)m(ev)m(er,)46 b(b)s(ecause)41 b(old)g(programs)f(ma)m(y)i(use)f(`)p Fz({)p FB(')g(and)f(`)p Fz(})p FB(')h(in)g(regexp)g(constan)m(ts,)k(b)m(y)630 1636 y(default)25 b Fz(gawk)f FB(do)s(es)g Fw(not)34 b FB(matc)m(h)26 b(in)m(terv)-5 b(al)26 b(expressions)e(in)h(regexps.) 39 b(If)24 b(either)h(`)p Fz(--posix)p FB(')630 1746 y(or)38 b(`)p Fz(--re-interval)p FB(')e(are)j(sp)s(eci\014ed)e(\(see)j (Section)f(11.2)h([Command-Line)e(Options],)630 1855 y(page)31 b(173\),)h(then)e(in)m(terv)-5 b(al)32 b(expressions)e(are)h (allo)m(w)m(ed)h(in)e(regexps.)630 1992 y(F)-8 b(or)34 b(new)f(programs)f(that)i(use)f(`)p Fz({)p FB(')g(and)g(`)p Fz(})p FB(')g(in)g(regexp)g(constan)m(ts,)j(it)d(is)h(go)s(o)s(d)f (practice)630 2101 y(to)i(alw)m(a)m(ys)g(escap)s(e)f(them)g(with)g(a)g (bac)m(kslash.)51 b(Then)33 b(the)h(regexp)g(constan)m(ts)h(are)g(v)-5 b(alid)630 2211 y(and)30 b(w)m(ork)g(the)h(w)m(a)m(y)g(y)m(ou)g(w)m(an) m(t)g(them)f(to,)i(using)e(an)m(y)g(v)m(ersion)h(of)g Fz(awk)p FB(.)3124 2178 y Fo(2)275 2376 y FB(In)j(regular)i (expressions,)g(the)g(`)p Fz(*)p FB(',)h(`)p Fz(+)p FB(',)g(and)e(`)p Fz(?)p FB(')g(op)s(erators,)i(as)f(w)m(ell)g(as)g(the)g(braces)f(`)p Fz({)p FB(')h(and)f(`)p Fz(})p FB(',)150 2485 y(ha)m(v)m(e)26 b(the)f(highest)g(precedence,)i(follo)m(w)m(ed)g(b)m(y)d (concatenation,)29 b(and)24 b(\014nally)h(b)m(y)g(`)p Fz(|)p FB('.)39 b(As)25 b(in)f(arithmetic,)150 2595 y(paren)m(theses)31 b(can)f(c)m(hange)i(ho)m(w)e(op)s(erators)h(are)f(group)s(ed.)275 2733 y(In)f(POSIX)g Fz(awk)g FB(and)h Fz(gawk)p FB(,)f(the)h(`)p Fz(*)p FB(',)h(`)p Fz(+)p FB(',)g(and)e(`)p Fz(?)p FB(')h(op)s(erators) h(stand)e(for)h(themselv)m(es)i(when)d(there)150 2843 y(is)f(nothing)f(in)g(the)h(regexp)g(that)g(precedes)f(them.)40 b(F)-8 b(or)28 b(example,)h(`)p Fz(/+/)p FB(')f(matc)m(hes)g(a)g (literal)h(plus)e(sign.)150 2953 y(Ho)m(w)m(ev)m(er,)33 b(man)m(y)d(other)h(v)m(ersions)f(of)h Fz(awk)e FB(treat)j(suc)m(h)e(a) h(usage)g(as)f(a)h(syn)m(tax)g(error.)275 3091 y(If)f Fz(gawk)f FB(is)h(in)h(compatibilit)m(y)h(mo)s(de)e(\(see)i(Section)f (11.2)h([Command-Line)e(Options],)h(page)g(173\),)150 3200 y(POSIX)e(c)m(haracter)j(classes)g(and)e(in)m(terv)-5 b(al)31 b(expressions)f(are)h(not)f(a)m(v)-5 b(ailable)33 b(in)d(regular)h(expressions.)150 3439 y FA(2.4)68 b(Using)46 b(Character)f(Lists)150 3598 y FB(Within)24 b(a)g(c)m(haracter)i(list,) g(a)e Fx(range)g(expression)g FB(consists)g(of)g(t)m(w)m(o)h(c)m (haracters)h(separated)e(b)m(y)g(a)g(h)m(yphen.)150 3708 y(It)38 b(matc)m(hes)g(an)m(y)g(single)g(c)m(haracter)i(that)e(sorts)f (b)s(et)m(w)m(een)i(the)e(t)m(w)m(o)i(c)m(haracters,)i(using)c(the)h (lo)s(cale's)150 3817 y(collating)45 b(sequence)f(and)e(c)m(haracter)i (set.)79 b(F)-8 b(or)44 b(example,)j(in)c(the)g(default)g(C)g(lo)s (cale,)48 b(`)p Fz([a-dx-z])p FB(')150 3927 y(is)d(equiv)-5 b(alen)m(t)46 b(to)f(`)p Fz([abcdxyz])p FB('.)82 b(Man)m(y)46 b(lo)s(cales)g(sort)f(c)m(haracters)h(in)f(dictionary)g(order,)j(and)c (in)150 4036 y(these)d(lo)s(cales,)j(`)p Fz([a-dx-z])p FB(')39 b(is)i(t)m(ypically)h(not)e(equiv)-5 b(alen)m(t)42 b(to)f(`)p Fz([abcdxyz])p FB(';)j(instead)d(it)f(migh)m(t)i(b)s(e)150 4146 y(equiv)-5 b(alen)m(t)38 b(to)g(`)p Fz([aBbCcDdxXyYz])p FB(',)d(for)h(example.)60 b(T)-8 b(o)38 b(obtain)f(the)g(traditional)h (in)m(terpretation)g(of)150 4256 y(brac)m(k)m(et)d(expressions,)g(y)m (ou)f(can)g(use)f(the)h(C)g(lo)s(cale)h(b)m(y)f(setting)h(the)f Fz(LC_ALL)e FB(en)m(vironmen)m(t)i(v)-5 b(ariable)150 4365 y(to)31 b(the)g(v)-5 b(alue)31 b(`)p Fz(C)p FB('.)275 4503 y(T)-8 b(o)32 b(include)h(one)g(of)f(the)h(c)m(haracters)h(`)p Fz(\\)p FB(',)f(`)p Fz(])p FB(',)h(`)p Fz(-)p FB(',)f(or)g(`)p Fz(^)p FB(')f(in)g(a)h(c)m(haracter)h(list,)g(put)e(a)h(`)p Fz(\\)p FB(')g(in)f(fron)m(t)150 4613 y(of)f(it.)41 b(F)-8 b(or)31 b(example:)390 4751 y Fz([d\\]])150 4890 y FB(matc)m(hes)h (either)e(`)p Fz(d)p FB(')h(or)f(`)p Fz(])p FB('.)275 5028 y(This)23 b(treatmen)m(t)i(of)g(`)p Fz(\\)p FB(')f(in)f(c)m (haracter)j(lists)f(is)f(compatible)h(with)f(other)g Fz(awk)f FB(implemen)m(tations)j(and)150 5137 y(is)34 b(also)h(mandated)g(b)m(y)f(POSIX.)f(The)h(regular)g(expressions)g(in)g Fz(awk)g FB(are)g(a)h(sup)s(erset)e(of)h(the)h(POSIX)p 150 5241 1200 4 v 199 5308 a Fo(2)275 5340 y Fn(Use)25 b(t)n(w)n(o)h(bac)n(kslashes)h(if)f(y)n(ou're)g(using)g(a)g(string)g (constan)n(t)g(with)g(a)g(regexp)f(op)r(erator)i(or)f(function.)p eop end %%Page: 30 42 TeXDict begin 30 41 bop 150 -116 a FB(30)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(sp)s(eci\014cation)39 b(for)g(Extended)f(Regular)h (Expressions)f(\(EREs\).)66 b(POSIX)38 b(EREs)g(are)h(based)f(on)h(the) 150 408 y(regular)31 b(expressions)f(accepted)h(b)m(y)g(the)f (traditional)i Fz(egrep)d FB(utilit)m(y)-8 b(.)275 584 y Fx(Character)39 b(classes)44 b FB(are)c(a)g(new)f(feature)g(in)m(tro) s(duced)g(in)g(the)h(POSIX)e(standard.)67 b(A)39 b(c)m(haracter)150 694 y(class)e(is)g(a)g(sp)s(ecial)h(notation)g(for)e(describing)h (lists)g(of)g(c)m(haracters)h(that)f(ha)m(v)m(e)h(a)f(sp)s(eci\014c)g (attribute,)150 804 y(but)e(the)g(actual)i(c)m(haracters)g(can)f(v)-5 b(ary)35 b(from)g(coun)m(try)h(to)g(coun)m(try)g(and/or)f(from)g(c)m (haracter)i(set)f(to)150 913 y(c)m(haracter)g(set.)54 b(F)-8 b(or)35 b(example,)h(the)f(notion)g(of)g(what)f(is)h(an)f (alphab)s(etic)h(c)m(haracter)h(di\013ers)e(b)s(et)m(w)m(een)150 1023 y(the)d(United)f(States)h(and)f(F)-8 b(rance.)275 1199 y(A)31 b(c)m(haracter)h(class)g(is)f(only)g(v)-5 b(alid)31 b(in)g(a)g(regexp)g Fw(inside)38 b FB(the)31 b(brac)m(k)m(ets)i(of)e(a)g(c)m(haracter)h(list.)43 b(Char-)150 1308 y(acter)f(classes)f(consist)g(of)g(`)p Fz([:)p FB(',)i(a)e(k)m (eyw)m(ord)g(denoting)g(the)f(class,)k(and)c(`)p Fz(:])p FB('.)71 b(T)-8 b(able)41 b(2.1)h(lists)f(the)150 1418 y(c)m(haracter)32 b(classes)f(de\014ned)e(b)m(y)i(the)f(POSIX)g (standard.)150 1764 y Fr(Class)433 b(Meaning)150 1874 y Fz([:alnum:])208 b FB(Alphan)m(umeric)30 b(c)m(haracters.)150 1984 y Fz([:alpha:])208 b FB(Alphab)s(etic)30 b(c)m(haracters.)150 2093 y Fz([:blank:])208 b FB(Space)30 b(and)g(T)-8 b(AB)31 b(c)m(haracters.)150 2203 y Fz([:cntrl:])208 b FB(Con)m(trol)31 b(c)m(haracters.)150 2312 y Fz([:digit:])208 b FB(Numeric)30 b(c)m(haracters.)150 2422 y Fz([:graph:])208 b FB(Characters)35 b(that)h(are)g(b)s(oth)f(prin)m(table)g(and)g(visible.)57 b(\(A)36 b(space)f(is)h(prin)m(table)g(but)790 2532 y(not)30 b(visible,)h(whereas)f(an)h(`)p Fz(a)p FB(')f(is)h(b)s(oth.\))150 2650 y Fz([:lower:])208 b FB(Lo)m(w)m(ercase)32 b(alphab)s(etic)f(c)m (haracters.)150 2760 y Fz([:print:])208 b FB(Prin)m(table)31 b(c)m(haracters)g(\(c)m(haracters)i(that)e(are)f(not)h(con)m(trol)h(c)m (haracters\).)150 2869 y Fz([:punct:])208 b FB(Punctuation)24 b(c)m(haracters)h(\(c)m(haracters)h(that)e(are)h(not)f(letters,)j (digits,)f(con)m(trol)f(c)m(har-)790 2979 y(acters,)31 b(or)g(space)g(c)m(haracters\).)150 3098 y Fz([:space:])208 b FB(Space)30 b(c)m(haracters)i(\(suc)m(h)e(as)h(space,)g(T)-8 b(AB,)31 b(and)f(formfeed,)g(to)i(name)e(a)h(few\).)150 3207 y Fz([:upper:])208 b FB(Upp)s(ercase)30 b(alphab)s(etic)h(c)m (haracters.)150 3317 y Fz([:xdigit:])160 b FB(Characters)30 b(that)h(are)g(hexadecimal)h(digits.)275 3464 y(T)-8 b(able)31 b(2.1:)41 b(POSIX)30 b(Character)g(Classes)275 3627 y(F)-8 b(or)37 b(example,)j(b)s(efore)d(the)g(POSIX)f(standard,)i (y)m(ou)f(had)g(to)h(write)f Fz(/[A-Za-z0-9]/)c FB(to)38 b(matc)m(h)150 3737 y(alphan)m(umeric)e(c)m(haracters.)57 b(If)35 b(y)m(our)h(c)m(haracter)h(set)f(had)f(other)g(alphab)s(etic)h (c)m(haracters)h(in)e(it,)j(this)150 3847 y(w)m(ould)25 b(not)h(matc)m(h)h(them,)f(and)f(if)h(y)m(our)f(c)m(haracter)i(set)g (collated)g(di\013eren)m(tly)f(from)f(ASCI)s(I,)g(this)g(migh)m(t)150 3956 y(not)f(ev)m(en)g(matc)m(h)h(the)f(ASCI)s(I)e(alphan)m(umeric)i(c) m(haracters.)40 b(With)24 b(the)g(POSIX)f(c)m(haracter)i(classes,)i(y)m (ou)150 4066 y(can)e(write)f Fz(/[[:alnum:]]/)d FB(to)26 b(matc)m(h)f(the)g(alphab)s(etic)g(and)e(n)m(umeric)i(c)m(haracters)h (in)e(y)m(our)g(c)m(haracter)150 4175 y(set.)275 4351 y(Tw)m(o)40 b(additional)h(sp)s(ecial)g(sequences)f(can)h(app)s(ear)f (in)g(c)m(haracter)h(lists.)71 b(These)40 b(apply)g(to)h(non-)150 4461 y(ASCI)s(I)36 b(c)m(haracter)j(sets,)i(whic)m(h)c(can)h(ha)m(v)m (e)h(single)f(sym)m(b)s(ols)g(\(called)h Fx(collating)h(elemen)m(ts)t FB(\))f(that)g(are)150 4570 y(represen)m(ted)32 b(with)g(more)g(than)g (one)h(c)m(haracter.)48 b(They)31 b(can)i(also)g(ha)m(v)m(e)g(sev)m (eral)h(c)m(haracters)g(that)f(are)150 4680 y(equiv)-5 b(alen)m(t)37 b(for)e Fx(collating)p FB(,)40 b(or)35 b(sorting,)i(purp)s(oses.)55 b(\(F)-8 b(or)36 b(example,)i(in)d(F)-8 b(renc)m(h,)38 b(a)e(plain)f(\\e")i(and)e(a)150 4790 y(gra)m(v)m(e-accen)m(ted)f(\\)m(\022)-43 b(e")33 b(are)e(equiv)-5 b(alen)m(t.\))42 b(These)30 b(sequences)h(are:)150 5011 y(Collating)h(sym)m(b)s(ols)630 5121 y(Multic)m(haracter)e(collating)f (elemen)m(ts)g(enclosed)f(b)s(et)m(w)m(een)g(`)p Fz([.)p FB(')f(and)f(`)p Fz(.])p FB('.)40 b(F)-8 b(or)28 b(example,)630 5230 y(if)45 b(`)p Fz(ch)p FB(')f(is)h(a)g(collating)j(elemen)m(t,)i (then)44 b Fz([[.ch.]])f FB(is)h(a)i(regexp)f(that)g(matc)m(hes)h(this) 630 5340 y(collating)33 b(elemen)m(t,)f(whereas)e Fz([ch])f FB(is)i(a)f(regexp)h(that)g(matc)m(hes)h(either)e(`)p Fz(c)p FB(')h(or)f(`)p Fz(h)p FB('.)p eop end %%Page: 31 43 TeXDict begin 31 42 bop 2285 -116 a Fr(Chapter)30 b(2:)41 b(Regular)31 b(Expressions)90 b FB(31)150 299 y(Equiv)-5 b(alence)31 b(classes)630 408 y(Lo)s(cale-sp)s(eci\014c)36 b(names)f(for)g(a)h(list)f(of)g(c)m(haracters)i(that)f(are)f(equal.)55 b(The)35 b(name)g(is)g(en-)630 518 y(closed)c(b)s(et)m(w)m(een)h(`)p Fz([=)p FB(')e(and)g(`)p Fz(=])p FB('.)42 b(F)-8 b(or)31 b(example,)h(the)f(name)g(`)p Fz(e)p FB(')f(migh)m(t)i(b)s(e)e(used)g (to)h(rep-)630 628 y(resen)m(t)h(all)h(of)f(\\e,")i(\\)m(\022)-43 b(e,")35 b(and)c(\\)m(\023)-43 b(e.")48 b(In)31 b(this)h(case,)i Fz([[=e=]])c FB(is)i(a)g(regexp)g(that)h(matc)m(hes)630 737 y(an)m(y)e(of)f(`)p Fz(e)p FB(',)h(`)p Fz(\023)-48 b(e)p FB(',)31 b(or)f(`)p Fz(\022)-48 b(e)p FB('.)275 896 y(These)30 b(features)g(are)h(v)m(ery)g(v)-5 b(aluable)31 b(in)f(non-English-sp)s(eaking)g(lo)s(cales.)275 1031 y Fr(Caution:)39 b FB(The)26 b(library)h(functions)f(that)i Fz(gawk)e FB(uses)h(for)g(regular)g(expression)g(matc)m(hing)h(curren)m (tly)150 1140 y(recognize)j(only)e(POSIX)f(c)m(haracter)j(classes;)f (they)f(do)g(not)g(recognize)i(collating)h(sym)m(b)s(ols)c(or)h(equiv) -5 b(a-)150 1250 y(lence)31 b(classes.)150 1482 y FA(2.5)68 b Fq(gawk)p FA(-Sp)t(eci\014c)42 b(Regexp)k(Op)t(erators)150 1642 y FB(GNU)34 b(soft)m(w)m(are)g(that)g(deals)f(with)g(regular)g (expressions)g(pro)m(vides)g(a)g(n)m(um)m(b)s(er)f(of)h(additional)h (regexp)150 1751 y(op)s(erators.)46 b(These)32 b(op)s(erators)g(are)g (describ)s(ed)f(in)h(this)g(section)h(and)e(are)i(sp)s(eci\014c)f(to)g Fz(gawk)p FB(;)g(they)h(are)150 1861 y(not)40 b(a)m(v)-5 b(ailable)43 b(in)d(other)g Fz(awk)f FB(implemen)m(tations.)72 b(Most)41 b(of)f(the)g(additional)h(op)s(erators)g(deal)f(with)150 1970 y(w)m(ord)35 b(matc)m(hing.)58 b(F)-8 b(or)37 b(our)e(purp)s (oses,)g(a)h Fx(w)m(ord)j FB(is)d(a)g(sequence)g(of)g(one)g(or)g(more)g (letters,)i(digits,)g(or)150 2080 y(underscores)29 b(\(`)p Fz(_)p FB('\):)150 2239 y Fz(\\w)384 b FB(Matc)m(hes)35 b(an)m(y)f(w)m(ord-constituen)m(t)h(c)m(haracter|that)h(is,)f(it)f (matc)m(hes)h(an)m(y)f(letter,)i(digit,)630 2349 y(or)30 b(underscore.)40 b(Think)29 b(of)i(it)g(as)g(shorthand)e(for)h Fz([[:alnum:]_])l FB(.)150 2508 y Fz(\\W)384 b FB(Matc)m(hes)35 b(an)m(y)e(c)m(haracter)h(that)g(is)f(not)g(w)m(ord-constituen)m(t.)50 b(Think)32 b(of)h(it)g(as)g(shorthand)630 2617 y(for)d Fz([^[:alnum:]_])m FB(.)150 2777 y Fz(\\<)384 b FB(Matc)m(hes)33 b(the)f(empt)m(y)g(string)g(at)g(the)g(b)s(eginning)f(of)h(a)g(w)m (ord.)44 b(F)-8 b(or)32 b(example,)h Fz(/\\<away/)630 2886 y FB(matc)m(hes)f(`)p Fz(away)p FB(')d(but)h(not)h(`)p Fz(stowaway)p FB('.)150 3045 y Fz(\\>)384 b FB(Matc)m(hes)25 b(the)e(empt)m(y)h(string)f(at)g(the)h(end)e(of)h(a)h(w)m(ord.)38 b(F)-8 b(or)23 b(example,)j Fz(/stow\\>/)21 b FB(matc)m(hes)630 3155 y(`)p Fz(stow)p FB(')30 b(but)f(not)i(`)p Fz(stowaway)p FB('.)150 3314 y Fz(\\y)384 b FB(Matc)m(hes)29 b(the)e(empt)m(y)g (string)g(at)h(either)f(the)g(b)s(eginning)f(or)h(the)g(end)g(of)g(a)g (w)m(ord)f(\(i.e.,)k(the)630 3424 y(w)m(ord)h(b)s(oundar)p Fr(y)p FB(\).)40 b(F)-8 b(or)32 b(example,)g(`)p Fz(\\yballs?\\y)p FB(')c(matc)m(hes)k(either)g(`)p Fz(ball)p FB(')e(or)h(`)p Fz(balls)p FB(',)630 3533 y(as)g(a)f(separate)i(w)m(ord.)150 3692 y Fz(\\B)384 b FB(Matc)m(hes)26 b(the)e(empt)m(y)g(string)g(that)g (o)s(ccurs)g(b)s(et)m(w)m(een)h(t)m(w)m(o)g(w)m(ord-constituen)m(t)g(c) m(haracters.)630 3802 y(F)-8 b(or)37 b(example,)h Fz(/\\Brat\\B/)33 b FB(matc)m(hes)38 b(`)p Fz(crate)p FB(')d(but)g(it)h(do)s(es)g(not)g (matc)m(h)h(`)p Fz(dirty)29 b(rat)p FB('.)630 3911 y(`)p Fz(\\B)p FB(')h(is)h(essen)m(tially)h(the)f(opp)s(osite)f(of)h(`)p Fz(\\y)p FB('.)275 4071 y(There)d(are)h(t)m(w)m(o)h(other)f(op)s (erators)g(that)h(w)m(ork)f(on)f(bu\013ers.)39 b(In)28 b(Emacs,)i(a)f Fx(bu\013er)35 b FB(is,)29 b(naturally)-8 b(,)30 b(an)150 4180 y(Emacs)f(bu\013er.)39 b(F)-8 b(or)29 b(other)f(programs,)h Fz(gawk)p FB('s)e(regexp)h(library)g(routines)g (consider)g(the)h(en)m(tire)g(string)150 4290 y(to)i(matc)m(h)g(as)g (the)g(bu\013er.)39 b(The)30 b(op)s(erators)h(are:)150 4449 y Fz(\\`)384 b FB(Matc)m(hes)32 b(the)f(empt)m(y)f(string)h(at)g (the)f(b)s(eginning)g(of)h(a)f(bu\013er)g(\(string\).)150 4608 y Fz(\\')384 b FB(Matc)m(hes)32 b(the)f(empt)m(y)f(string)h(at)g (the)f(end)g(of)h(a)f(bu\013er)g(\(string\).)275 4767 y(Because)42 b(`)p Fz(^)p FB(')g(and)f(`)p Fz($)p FB(')h(alw)m(a)m(ys)h (w)m(ork)f(in)f(terms)g(of)h(the)g(b)s(eginning)f(and)f(end)h(of)h (strings,)i(these)150 4877 y(op)s(erators)28 b(don't)g(add)f(an)m(y)h (new)g(capabilities)i(for)d Fz(awk)p FB(.)39 b(They)28 b(are)g(pro)m(vided)f(for)h(compatibilit)m(y)i(with)150 4986 y(other)h(GNU)g(soft)m(w)m(are.)275 5121 y(In)39 b(other)h(GNU)h(soft)m(w)m(are,)j(the)c(w)m(ord-b)s(oundary)e(op)s (erator)j(is)f(`)p Fz(\\b)p FB('.)70 b(Ho)m(w)m(ev)m(er,)45 b(that)40 b(con\015icts)150 5230 y(with)31 b(the)h Fz(awk)f FB(language's)i(de\014nition)e(of)h(`)p Fz(\\b)p FB(')f(as)h(bac)m (kspace,)h(so)f Fz(gawk)f FB(uses)g(a)h(di\013eren)m(t)g(letter.)45 b(An)150 5340 y(alternativ)m(e)32 b(metho)s(d)d(w)m(ould)g(ha)m(v)m(e)i (b)s(een)e(to)h(require)g(t)m(w)m(o)h(bac)m(kslashes)f(in)f(the)h(GNU)g (op)s(erators,)h(but)p eop end %%Page: 32 44 TeXDict begin 32 43 bop 150 -116 a FB(32)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(this)d(w)m(as)h(deemed)f(to)s(o)h(confusing.)39 b(The)27 b(curren)m(t)g(metho)s(d)g(of)g(using)g(`)p Fz(\\y)p FB(')g(for)g(the)h(GNU)g(`)p Fz(\\b)p FB(')f(app)s(ears)150 408 y(to)k(b)s(e)f(the)g(lesser)h(of)g(t)m(w)m(o)g(evils.)275 543 y(The)23 b(v)-5 b(arious)23 b(command-line)h(options)g(\(see)h (Section)f(11.2)i([Command-Line)d(Options],)i(page)f(173\))150 653 y(con)m(trol)32 b(ho)m(w)e Fz(gawk)f FB(in)m(terprets)i(c)m (haracters)h(in)e(regexps:)150 812 y(No)h(options)630 922 y(In)j(the)h(default)g(case,)i Fz(gawk)d FB(pro)m(vides)h(all)h (the)f(facilities)i(of)e(POSIX)f(regexps)h(and)f(the)630 1031 y(previously)c(describ)s(ed)f(GNU)j(regexp)e(op)s(erators.)41 b(Ho)m(w)m(ev)m(er,)33 b(in)m(terv)-5 b(al)32 b(expressions)e(are)630 1141 y(not)h(supp)s(orted.)150 1301 y Fz(--posix)144 b FB(Only)34 b(POSIX)f(regexps)i(are)g(supp)s(orted;)f(the)h(GNU)g(op)s (erators)g(are)f(not)h(sp)s(ecial)g(\(e.g.,)630 1410 y(`)p Fz(\\w)p FB(')30 b(matc)m(hes)i(a)f(literal)g(`)p Fz(w)p FB('\).)42 b(In)m(terv)-5 b(al)31 b(expressions)f(are)h(allo)m (w)m(ed.)150 1570 y Fz(--traditional)630 1679 y FB(T)-8 b(raditional)37 b(Unix)f Fz(awk)f FB(regexps)h(are)g(matc)m(hed.)58 b(The)35 b(GNU)i(op)s(erators)f(are)g(not)g(sp)s(e-)630 1789 y(cial,)30 b(in)m(terv)-5 b(al)29 b(expressions)e(are)h(not)g(a)m (v)-5 b(ailable,)31 b(nor)d(are)g(the)g(POSIX)f(c)m(haracter)i(classes) 630 1898 y(\()p Fz([[:alnum:]])p FB(,)40 b(etc.\).)71 b(Characters)40 b(describ)s(ed)f(b)m(y)h(o)s(ctal)h(and)e(hexadecimal)i (escap)s(e)630 2008 y(sequences)31 b(are)f(treated)i(literally)-8 b(,)33 b(ev)m(en)e(if)f(they)h(represen)m(t)f(regexp)h(metac)m (haracters.)150 2168 y Fz(--re-interval)630 2277 y FB(Allo)m(w)60 b(in)m(terv)-5 b(al)60 b(expressions)f(in)f(regexps,)67 b(ev)m(en)59 b(if)g(`)p Fz(--traditional)p FB(')d(has)j(b)s(een)630 2387 y(pro)m(vided.)207 b(\(`)p Fz(--posix)p FB(')85 b(automatically)k(enables)e(in)m(terv)-5 b(al)87 b(expressions,)100 b(so)630 2496 y(`)p Fz(--re-interval)p FB(')27 b(is)k(redundan)m(t)e (when)g(`)p Fz(--posix)p FB(')g(is)h(is)h(used.\))150 2729 y FA(2.6)68 b(Case)46 b(Sensitivit)l(y)g(in)f(Matc)l(hing)150 2888 y FB(Case)26 b(is)f(normally)h(signi\014can)m(t)g(in)f(regular)g (expressions,)i(b)s(oth)d(when)g(matc)m(hing)j(ordinary)d(c)m (haracters)150 2998 y(\(i.e.,)45 b(not)c(metac)m(haracters\))j(and)c (inside)h(c)m(haracter)h(sets.)73 b(Th)m(us,)43 b(a)e(`)p Fz(w)p FB(')g(in)g(a)g(regular)g(expression)150 3108 y(matc)m(hes)32 b(only)e(a)h(lo)m(w)m(ercase)i(`)p Fz(w)p FB(')d(and)g(not)g(an)h(upp)s(ercase)e(`)p Fz(W)p FB('.)275 3242 y(The)24 b(simplest)g(w)m(a)m(y)i(to)f(do)g(a)g(case-indep)s (enden)m(t)f(matc)m(h)i(is)e(to)i(use)e(a)h(c)m(haracter)h(list|for)f (example,)150 3352 y(`)p Fz([Ww])p FB('.)45 b(Ho)m(w)m(ev)m(er,)35 b(this)d(can)g(b)s(e)g(cum)m(b)s(ersome)f(if)i(y)m(ou)f(need)g(to)h (use)e(it)i(often,)g(and)f(it)g(can)h(mak)m(e)g(the)150 3461 y(regular)e(expressions)f(harder)f(to)i(read.)41 b(There)30 b(are)g(t)m(w)m(o)i(alternativ)m(es)h(that)e(y)m(ou)f(migh)m (t)i(prefer.)275 3596 y(One)39 b(w)m(a)m(y)h(to)g(p)s(erform)f(a)g (case-insensitiv)m(e)k(matc)m(h)d(at)g(a)g(particular)g(p)s(oin)m(t)g (in)f(the)h(program)f(is)150 3706 y(to)h(con)m(v)m(ert)g(the)f(data)h (to)g(a)f(single)h(case,)i(using)d(the)g Fz(tolower)e FB(or)i Fz(toupper)e FB(built-in)i(string)g(func-)150 3815 y(tions)f(\(whic)m(h)g(w)m(e)g(ha)m(v)m(en't)g(discussed)f(y)m (et;)43 b(see)38 b(Section)g(8.1.3)h([String-Manipulation)g(F)-8 b(unctions],)150 3925 y(page)31 b(129\).)42 b(F)-8 b(or)32 b(example:)390 4059 y Fz(tolower\($1\))45 b(~)i(/foo/)94 b({)48 b(...)f(})150 4194 y FB(con)m(v)m(erts)33 b(the)f(\014rst)f (\014eld)h(to)h(lo)m(w)m(ercase)h(b)s(efore)d(matc)m(hing)i(against)g (it.)46 b(This)31 b(w)m(orks)h(in)f(an)m(y)i(POSIX-)150 4304 y(complian)m(t)f Fz(awk)p FB(.)275 4438 y(Another)f(metho)s(d,)f (sp)s(eci\014c)h(to)h Fz(gawk)p FB(,)e(is)h(to)h(set)g(the)f(v)-5 b(ariable)32 b Fz(IGNORECASE)c FB(to)k(a)f(nonzero)g(v)-5 b(alue)150 4548 y(\(see)22 b(Section)g(6.5)g([Built-in)g(V)-8 b(ariables],)24 b(page)e(107\).)39 b(When)21 b Fz(IGNORECASE)d FB(is)j(not)h(zero,)h Fw(al)5 b(l)31 b FB(regexp)22 b(and)150 4657 y(string)31 b(op)s(erations)g(ignore)h(case.)44 b(Changing)30 b(the)i(v)-5 b(alue)31 b(of)g Fz(IGNORECASE)e FB(dynamically)i(con)m(trols)i(the)150 4767 y(case-sensitivit)m(y)27 b(of)d(the)h(program)f(as)g(it)h(runs.)37 b(Case)24 b(is)g (signi\014can)m(t)h(b)m(y)f(default)h(b)s(ecause)f Fz(IGNORECASE)150 4877 y FB(\(lik)m(e)32 b(most)f(v)-5 b(ariables\))31 b(is)g(initialized)h(to)f(zero:)390 5011 y Fz(x)47 b(=)h("aB")390 5121 y(if)f(\(x)g(~)h(/ab/\))e(...)143 b(#)47 b(this)g(test)f(will)h (fail)390 5340 y(IGNORECASE)e(=)i(1)p eop end %%Page: 33 45 TeXDict begin 33 44 bop 2285 -116 a Fr(Chapter)30 b(2:)41 b(Regular)31 b(Expressions)90 b FB(33)390 299 y Fz(if)47 b(\(x)g(~)h(/ab/\))e(...)143 b(#)47 b(now)g(it)g(will)g(succeed)275 452 y FB(In)29 b(general,)j(y)m(ou)f(cannot)g(use)g Fz(IGNORECASE)c FB(to)32 b(mak)m(e)f(certain)h(rules)e(case-insensitiv)m(e)j(and)d (other)150 562 y(rules)f(case-sensitiv)m(e,)j(b)s(ecause)d(there)g(is)g (no)g(straigh)m(tforw)m(ard)h(w)m(a)m(y)g(to)g(set)f Fz(IGNORECASE)d FB(just)j(for)g(the)150 672 y(pattern)35 b(of)h(a)f(particular)h(rule.)1269 639 y Fo(3)1361 672 y FB(T)-8 b(o)36 b(do)f(this,)h(use)f(either)h(c)m(haracter)h(lists)e (or)g Fz(tolower)p FB(.)54 b(Ho)m(w)m(ev)m(er,)150 781 y(one)34 b(thing)g(y)m(ou)h(can)f(do)g(with)g Fz(IGNORECASE)d FB(only)k(is)f(dynamically)g(turn)f(case-sensitivit)m(y)k(on)d(or)h (o\013)150 891 y(for)30 b(all)h(the)g(rules)f(at)h(once.)275 1044 y Fz(IGNORECASE)25 b FB(can)k(b)s(e)f(set)i(on)e(the)h(command)f (line)h(or)g(in)f(a)h Fz(BEGIN)f FB(rule)g(\(see)i(Section)f(11.3)h ([Other)150 1154 y(Command-Line)36 b(Argumen)m(ts],)i(page)f(178;)42 b(also)37 b(see)g(Section)g(6.1.4.1)i([Startup)d(and)g(Clean)m(up)g (Ac-)150 1263 y(tions],)e(page)f(96\).)48 b(Setting)33 b Fz(IGNORECASE)d FB(from)i(the)g(command)g(line)h(is)g(a)f(w)m(a)m(y)i (to)f(mak)m(e)g(a)g(program)150 1373 y(case-insensitiv)m(e)g(without)d (ha)m(ving)h(to)g(edit)g(it.)275 1526 y(Prior)i(to)h Fz(gawk)f FB(3.0,)i(the)f(v)-5 b(alue)34 b(of)g Fz(IGNORECASE)d FB(a\013ected)k(regexp)e(op)s(erations)h(only)-8 b(.)51 b(It)34 b(did)f(not)150 1636 y(a\013ect)c(string)f(comparison)g(with)f (`)p Fz(==)p FB(',)h(`)p Fz(!=)p FB(',)h(and)e(so)h(on.)39 b(Beginning)29 b(with)e(v)m(ersion)h(3.0,)i(b)s(oth)d(regexp)150 1746 y(and)j(string)g(comparison)h(op)s(erations)f(are)h(also)g (a\013ected)h(b)m(y)f Fz(IGNORECASE)p FB(.)275 1899 y(Beginning)g(with) f Fz(gawk)g FB(3.0,)i(the)e(equiv)-5 b(alences)32 b(b)s(et)m(w)m(een)g (upp)s(er-)c(and)i(lo)m(w)m(ercase)j(c)m(haracters)g(are)150 2009 y(based)26 b(on)g(the)h(ISO-8859-1)h(\(ISO)e(Latin-1\))h(c)m (haracter)h(set.)40 b(This)26 b(c)m(haracter)i(set)f(is)f(a)h(sup)s (erset)e(of)i(the)150 2118 y(traditional)36 b(128)g(ASCI)s(I)c(c)m (haracters,)38 b(whic)m(h)c(also)h(pro)m(vides)g(a)g(n)m(um)m(b)s(er)e (of)h(c)m(haracters)i(suitable)f(for)150 2228 y(use)30 b(with)g(Europ)s(ean)f(languages.)275 2381 y(As)g(of)h Fz(gawk)e FB(3.1.4,)k(the)e(case)g(equiv)-5 b(alencies)32 b(are)e(fully)f(lo)s(cale-a)m(w)m(are.)44 b(They)29 b(are)h(based)f(on) h(the)f(C)150 2491 y Fz(<ctype.h>)f FB(facilities,)33 b(suc)m(h)d(as)g Fz(isalpha\(\))e FB(and)i Fz(toupper\(\))p FB(.)275 2644 y(The)c(v)-5 b(alue)28 b(of)f Fz(IGNORECASE)d FB(has)j(no)g(e\013ect)h(if)f Fz(gawk)f FB(is)h(in)g(compatibilit)m(y)i (mo)s(de)e(\(see)h(Section)f(11.2)150 2754 y([Command-Line)j(Options],) g(page)h(173\).)43 b(Case)31 b(is)f(alw)m(a)m(ys)i(signi\014can)m(t)f (in)f(compatibilit)m(y)j(mo)s(de.)150 3015 y FA(2.7)68 b(Ho)l(w)46 b(Muc)l(h)e(T)-11 b(ext)44 b(Matc)l(hes?)150 3174 y FB(Consider)30 b(the)g(follo)m(wing:)390 3328 y Fz(echo)47 b(aaaabcd)e(|)j(awk)f('{)g(sub\(/a+/,)e("<A>"\);)h(print)g (}')275 3481 y FB(This)33 b(example)j(uses)e(the)h Fz(sub)f FB(function)g(\(whic)m(h)h(w)m(e)g(ha)m(v)m(en't)h(discussed)e(y)m(et;) k(see)e(Section)f(8.1.3)150 3591 y([String-Manipulation)27 b(F)-8 b(unctions],)27 b(page)g(129\))g(to)f(mak)m(e)h(a)f(c)m(hange)h (to)f(the)g(input)e(record.)39 b(Here,)28 b(the)150 3700 y(regexp)j Fz(/a+/)e FB(indicates)i(\\one)g(or)g(more)f(`)p Fz(a)p FB(')h(c)m(haracters,")h(and)e(the)h(replacemen)m(t)g(text)h(is) e(`)p Fz(<A>)p FB('.)275 3854 y(The)39 b(input)g(con)m(tains)i(four)e (`)p Fz(a)p FB(')i(c)m(haracters.)71 b Fz(awk)39 b FB(\(and)g(POSIX\))h (regular)g(expressions)f(alw)m(a)m(ys)150 3963 y(matc)m(h)30 b(the)f(leftmost,)i Fw(longest)38 b FB(sequence)29 b(of)g(input)f(c)m (haracters)j(that)e(can)g(matc)m(h.)41 b(Th)m(us,)29 b(all)h(four)e(`)p Fz(a)p FB(')150 4073 y(c)m(haracters)k(are)f (replaced)f(with)h(`)p Fz(<A>)p FB(')e(in)i(this)f(example:)390 4226 y Fz($)47 b(echo)g(aaaabcd)f(|)h(awk)g('{)g(sub\(/a+/,)f("<A>"\);) g(print)g(}')410 4340 y Fy(a)533 4336 y Fz(<A>bcd)275 4489 y FB(F)-8 b(or)28 b(simple)f(matc)m(h/no-matc)m(h)i(tests,)g(this) e(is)h(not)f(so)h(imp)s(ortan)m(t.)40 b(But)27 b(when)f(doing)h(text)i (matc)m(h-)150 4599 y(ing)24 b(and)f(substitutions)g(with)g(the)h Fz(match)p FB(,)f Fz(sub)p FB(,)i Fz(gsub)p FB(,)f(and)e Fz(gensub)g FB(functions,)j(it)f(is)g(v)m(ery)g(imp)s(ortan)m(t.)150 4709 y(Understanding)36 b(this)g(principle)g(is)h(also)g(imp)s(ortan)m (t)g(for)f(regexp-based)h(record)f(and)g(\014eld)g(splitting)150 4818 y(\(see)30 b(Section)g(3.1)g([Ho)m(w)g(Input)e(Is)h(Split)f(in)m (to)i(Records],)g(page)g(36,)h(and)d(also)i(see)g(Section)g(3.5)g([Sp)s (eci-)150 4928 y(fying)g(Ho)m(w)h(Fields)g(Are)g(Separated],)g(page)g (43\).)p 150 5066 1200 4 v 199 5134 a Fo(3)275 5166 y Fn(Exp)r(erienced)d(C)i(and)f(C)p Fm(++)h Fn(programmers)g(will)h(note) e(that)g(it)g(is)h(p)r(ossible,)h(using)e(something)h(lik)n(e)g(`)p Fm(IGNORECASE)e(=)275 5253 y(1)d(&&)h(/foObAr/)i({)e(...)g(})p Fn(')i(and)f(`)p Fm(IGNORECASE)i(=)c(0)h(||)g(/foobar/)i({)d(...)i(})p Fn('.)41 b(Ho)n(w)n(ev)n(er,)28 b(this)g(is)g(somewhat)h(obscure)275 5340 y(and)c(w)n(e)h(don't)f(recommend)h(it.)p eop end %%Page: 34 46 TeXDict begin 34 45 bop 150 -116 a FB(34)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FA(2.8)68 b(Using)46 b(Dynamic)f(Regexps)150 458 y FB(The)36 b(righ)m(thand)h(side)f(of)h(a)g(`)p Fz(~)p FB(')g(or)g(`)p Fz(!~)p FB(')g(op)s(erator)g(need)f(not)h(b)s(e)f(a)i (regexp)f(constan)m(t)h(\(i.e.,)i(a)d(string)150 568 y(of)31 b(c)m(haracters)h(b)s(et)m(w)m(een)g(slashes\).)43 b(It)31 b(ma)m(y)g(b)s(e)f(an)m(y)i(expression.)42 b(The)30 b(expression)h(is)f(ev)-5 b(aluated)33 b(and)150 677 y(con)m(v)m(erted)41 b(to)g(a)f(string)g(if)g(necessary;)45 b(the)40 b(con)m(ten)m(ts)i(of)e(the)g(string)g(are)g(used)f(as)h(the)g (regexp.)70 b(A)150 787 y(regexp)31 b(that)g(is)f(computed)g(in)g(this) h(w)m(a)m(y)g(is)f(called)i(a)f Fx(dynamic)f(regexp)s FB(:)390 930 y Fz(BEGIN)46 b({)i(digits_regexp)c(=)j("[[:digit:]]+")d (})390 1040 y($0)j(~)h(digits_regexp)187 b({)47 b(print)g(})150 1183 y FB(This)31 b(sets)g Fz(digits_regexp)d FB(to)k(a)g(regexp)g (that)g(describ)s(es)e(one)i(or)g(more)f(digits,)i(and)d(tests)j (whether)150 1293 y(the)e(input)e(record)h(matc)m(hes)i(this)e(regexp.) 275 1436 y Fr(Caution:)44 b FB(When)32 b(using)g(the)h(`)p Fz(~)p FB(')f(and)g(`)p Fz(!~)p FB(')g(op)s(erators,)h(there)g(is)f(a)h (di\013erence)g(b)s(et)m(w)m(een)g(a)g(regexp)150 1546 y(constan)m(t)24 b(enclosed)f(in)f(slashes)g(and)g(a)h(string)f (constan)m(t)i(enclosed)f(in)f(double)g(quotes.)38 b(If)22 b(y)m(ou)h(are)g(going)150 1655 y(to)h(use)f(a)h(string)f(constan)m(t,) j(y)m(ou)e(ha)m(v)m(e)g(to)g(understand)d(that)j(the)g(string)f(is,)i (in)e(essence,)j(scanned)c Fw(twic)-5 b(e)7 b FB(:)150 1765 y(the)36 b(\014rst)f(time)h(when)f Fz(awk)f FB(reads)i(y)m(our)f (program,)i(and)e(the)h(second)f(time)i(when)d(it)i(go)s(es)h(to)f (matc)m(h)150 1875 y(the)d(string)g(on)g(the)g(lefthand)g(side)g(of)g (the)h(op)s(erator)f(with)g(the)g(pattern)g(on)g(the)g(righ)m(t.)50 b(This)32 b(is)h(true)150 1984 y(of)28 b(an)m(y)g(string-v)-5 b(alued)29 b(expression)e(\(suc)m(h)h(as)g Fz(digits_regexp)p FB(,)d(sho)m(wn)j(previously\),)g(not)h(just)e(string)150 2094 y(constan)m(ts.)275 2237 y(What)42 b(di\013erence)h(do)s(es)f(it)h (mak)m(e)g(if)f(the)h(string)f(is)g(scanned)g(t)m(wice?)77 b(The)42 b(answ)m(er)g(has)g(to)h(do)150 2347 y(with)28 b(escap)s(e)g(sequences,)h(and)f(particularly)g(with)g(bac)m(kslashes.) 41 b(T)-8 b(o)28 b(get)h(a)g(bac)m(kslash)f(in)m(to)h(a)g(regular)150 2456 y(expression)h(inside)g(a)h(string,)g(y)m(ou)f(ha)m(v)m(e)i(to)f (t)m(yp)s(e)g(t)m(w)m(o)g(bac)m(kslashes.)275 2600 y(F)-8 b(or)34 b(example,)i Fz(/\\*/)c FB(is)i(a)g(regexp)g(constan)m(t)h(for) e(a)i(literal)g(`)p Fz(*)p FB('.)51 b(Only)33 b(one)h(bac)m(kslash)g (is)g(needed.)150 2709 y(T)-8 b(o)35 b(do)g(the)g(same)g(thing)g(with)f (a)h(string,)h(y)m(ou)f(ha)m(v)m(e)h(to)g(t)m(yp)s(e)f Fz("\\\\*")p FB(.)52 b(The)34 b(\014rst)g(bac)m(kslash)i(escap)s(es)150 2819 y(the)31 b(second)f(one)h(so)f(that)h(the)g(string)f(actually)i (con)m(tains)g(the)e(t)m(w)m(o)i(c)m(haracters)g(`)p Fz(\\)p FB(')e(and)g(`)p Fz(*)p FB('.)275 2962 y(Giv)m(en)c(that)g(y)m (ou)g(can)g(use)f(b)s(oth)g(regexp)g(and)g(string)h(constan)m(ts)g(to)g (describ)s(e)f(regular)h(expressions,)150 3072 y(whic)m(h)k(should)f(y) m(ou)i(use?)40 b(The)30 b(answ)m(er)g(is)h(\\regexp)g(constan)m(ts,")h (for)e(sev)m(eral)i(reasons:)225 3215 y Fy(\017)60 b FB(String)23 b(constan)m(ts)i(are)e(more)h(complicated)h(to)f(write)g (and)f(more)g(di\016cult)h(to)g(read.)38 b(Using)24 b(regexp)330 3325 y(constan)m(ts)45 b(mak)m(es)g(y)m(our)f(programs)f(less)i (error-prone.)80 b(Not)45 b(understanding)d(the)i(di\013erence)330 3434 y(b)s(et)m(w)m(een)31 b(the)g(t)m(w)m(o)g(kinds)f(of)g(constan)m (ts)i(is)e(a)h(common)g(source)f(of)h(errors.)225 3573 y Fy(\017)60 b FB(It)39 b(is)g(more)g(e\016cien)m(t)h(to)g(use)f (regexp)g(constan)m(ts.)67 b Fz(awk)38 b FB(can)i(note)f(that)h(y)m(ou) f(ha)m(v)m(e)h(supplied)e(a)330 3683 y(regexp)f(and)f(store)i(it)f(in)m (ternally)h(in)f(a)g(form)f(that)i(mak)m(es)f(pattern)g(matc)m(hing)h (more)f(e\016cien)m(t.)330 3792 y(When)29 b(using)g(a)h(string)f (constan)m(t,)i Fz(awk)e FB(m)m(ust)g(\014rst)g(con)m(v)m(ert)i(the)e (string)h(in)m(to)g(this)f(in)m(ternal)h(form)330 3902 y(and)g(then)g(p)s(erform)f(the)h(pattern)h(matc)m(hing.)225 4041 y Fy(\017)60 b FB(Using)26 b(regexp)h(constan)m(ts)g(is)f(b)s (etter)g(form;)h(it)g(sho)m(ws)f(clearly)h(that)g(y)m(ou)f(in)m(tend)g (a)g(regexp)h(matc)m(h.)150 4249 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b(Using)42 b Fh(\\n)g Fj(in)f(Character)e(Lists)j(of)f (Dynamic)g(Regexps)150 4396 y FB(Some)c(commercial)j(v)m(ersions)d(of)h Fz(awk)e FB(do)i(not)f(allo)m(w)i(the)f(newline)f(c)m(haracter)i(to)f (b)s(e)f(used)f(inside)i(a)150 4505 y(c)m(haracter)32 b(list)f(for)f(a)h(dynamic)f(regexp:)390 4649 y Fz($)47 b(awk)g('$0)g(~)h("[)f(\\t\\n]"')p 410 4701 217 5 v 410 4781 5 81 v 433 4761 a Fl(erro)m(r)p 622 4781 V 410 4786 217 5 v 724 4758 a Fz(awk:)g(newline)f(in)h(character)e(class)h([)p 410 4810 V 410 4891 5 81 v 433 4871 a Fl(erro)m(r)p 622 4891 V 410 4895 217 5 v 724 4868 a Fz(]...)p 410 4920 V 410 5000 5 81 v 433 4980 a Fl(erro)m(r)p 622 5000 V 410 5005 217 5 v 772 4977 a Fz(source)g(line)h(number)f(1)p 410 5030 V 410 5110 5 81 v 433 5090 a Fl(erro)m(r)p 622 5110 V 410 5114 217 5 v 772 5087 a Fz(context)g(is)p 410 5139 V 410 5219 5 81 v 433 5200 a Fl(erro)m(r)p 622 5219 V 410 5224 217 5 v 1154 5197 a Fz(>>>)94 b(<<<)275 5340 y FB(But)30 b(a)h(newline)f(in)g(a)h(regexp)g(constan)m(t)g(w)m (orks)g(with)f(no)g(problem:)p eop end %%Page: 35 47 TeXDict begin 35 46 bop 2285 -116 a Fr(Chapter)30 b(2:)41 b(Regular)31 b(Expressions)90 b FB(35)390 299 y Fz($)47 b(awk)g('$0)g(~)h(/[)f(\\t\\n]/')390 408 y(here)g(is)g(a)g(sample)f (line)410 522 y Fy(a)533 518 y Fz(here)h(is)g(a)g(sample)g(line)390 628 y Fk(Ctrl-d)275 762 y Fz(gawk)33 b FB(do)s(es)g(not)i(ha)m(v)m(e)g (this)f(problem,)h(and)e(it)i(isn't)f(lik)m(ely)i(to)f(o)s(ccur)f (often)g(in)g(practice,)j(but)c(it's)150 872 y(w)m(orth)d(noting)h(for) f(future)g(reference.)150 1104 y FA(2.9)68 b(Where)45 b(Y)-11 b(ou)44 b(Are)h(Mak)l(es)h(A)e(Di\013erence)150 1264 y FB(Mo)s(dern)38 b(systems)g(supp)s(ort)f(the)h(notion)h(of)f Fx(lo)s(cales)t FB(:)58 b(a)39 b(w)m(a)m(y)g(to)g(tell)h(the)f(system)f (ab)s(out)g(the)h(lo)s(cal)150 1373 y(c)m(haracter)32 b(set)f(and)g(language.)43 b(The)30 b(curren)m(t)g(lo)s(cale)i(setting) g(can)f(a\013ect)h(the)f(w)m(a)m(y)h(regexp)f(matc)m(hing)150 1483 y(w)m(orks,)36 b(often)f(in)f(surprising)f(w)m(a)m(ys.)54 b(In)34 b(particular,)i(man)m(y)f(lo)s(cales)h(do)f(case-insensitiv)m (e)i(matc)m(hing,)150 1592 y(ev)m(en)31 b(when)e(y)m(ou)i(ma)m(y)g(ha)m (v)m(e)h(sp)s(eci\014ed)d(c)m(haracters)j(of)f(only)f(one)h(particular) g(case.)275 1727 y(The)41 b(follo)m(wing)i(example)f(uses)f(the)h Fz(sub)f FB(function,)j(whic)m(h)e(do)s(es)f(text)i(replacemen)m(t)g (\(see)f(Sec-)150 1836 y(tion)27 b(8.1.3)h([String-Manipulation)g(F)-8 b(unctions],)28 b(page)f(129\).)42 b(Here,)28 b(the)e(in)m(ten)m(t)i (is)f(to)g(remo)m(v)m(e)h(trailing)150 1946 y(upp)s(ercase)h(c)m (haracters:)390 2081 y Fz($)47 b(echo)g(something1234abc)c(|)48 b(gawk)f('{)g(sub\("[A-Z]*$",)d(""\);)i(print)h(}')410 2194 y Fy(a)533 2190 y Fz(something1234)150 2325 y FB(This)36 b(output)h(is)g(unexp)s(ected,)h(since)f(the)h(`)p Fz(abc)p FB(')e(at)i(the)f(end)f(of)i(`)p Fz(something1234abc)p FB(')33 b(should)j(not)150 2434 y(normally)f(matc)m(h)i(`)p Fz([A-Z]*)p FB('.)54 b(This)34 b(result)i(is)f(due)f(to)i(the)g(lo)s (cale)h(setting)f(\(and)f(th)m(us)g(y)m(ou)h(ma)m(y)g(not)150 2544 y(see)44 b(it)g(on)f(y)m(our)g(system\).)80 b(There)43 b(are)g(t)m(w)m(o)i(\014xes.)79 b(The)43 b(\014rst)f(is)i(to)g(use)f (the)g(POSIX)f(c)m(haracter)150 2653 y(class)35 b(`)p Fz([[:upper:]])p FB(',)d(instead)i(of)h(`)p Fz([A-Z])p FB('.)50 b(The)34 b(second)g(is)g(to)g(c)m(hange)h(the)f(lo)s(cale)i (setting)f(in)f(the)150 2763 y(en)m(vironmen)m(t,)d(b)s(efore)f (running)f Fz(gawk)p FB(,)g(b)m(y)i(using)e(the)i(shell)g(statemen)m (ts:)390 2897 y Fz(LANG=C)46 b(LC_ALL=C)390 3007 y(export)g(LANG)h (LC_ALL)275 3142 y FB(The)35 b(setting)j(`)p Fz(C)p FB(')e(forces)h Fz(gawk)e FB(to)i(b)s(eha)m(v)m(e)g(in)f(the)h(traditional)g(Unix)g (manner,)g(where)f(case)h(dis-)150 3251 y(tinctions)28 b(do)f(matter.)41 b(Y)-8 b(ou)27 b(ma)m(y)h(wish)e(to)i(put)f(these)g (statemen)m(ts)i(in)m(to)f(y)m(our)f(shell)h(startup)e(\014le,)i(e.g.,) 150 3361 y(`)p Fz($HOME/.profile)p FB('.)275 3495 y(Similar)k (considerations)h(apply)e(to)i(other)g(ranges.)46 b(F)-8 b(or)33 b(example,)g(`)p Fz(["-/])p FB(')e(is)i(p)s(erfectly)f(v)-5 b(alid)32 b(in)150 3605 y(ASCI)s(I,)e(but)g(is)h(not)g(v)-5 b(alid)31 b(in)g(man)m(y)g(Unico)s(de)g(lo)s(cales,)i(suc)m(h)d(as)i(`) p Fz(en_US.UTF-8)p FB('.)39 b(\(In)31 b(general,)h(suc)m(h)150 3714 y(ranges)f(should)f(b)s(e)g(a)m(v)m(oided;)j(either)e(list)g(the)g (c)m(haracters)i(individually)-8 b(,)31 b(or)g(use)f(a)h(POSIX)f(c)m (haracter)150 3824 y(class)h(suc)m(h)f(as)h(`)p Fz([[:punct:]])p FB('.\))275 3958 y(F)-8 b(or)30 b(the)f(normal)g(case)i(of)e(`)p Fz(RS)h(=)g("\\n")p FB(',)f(the)h(lo)s(cale)h(is)e(largely)i(irrelev)-5 b(an)m(t.)42 b(F)-8 b(or)30 b(other)f(single)h(b)m(yte)150 4068 y(record)36 b(separators,)j(using)c(`)p Fz(LC_ALL=C)p FB(')g(will)h(giv)m(e)i(y)m(ou)f(m)m(uc)m(h)f(b)s(etter)g(p)s (erformance)g(when)f(reading)150 4178 y(records.)40 b(Otherwise,)28 b Fz(gawk)e FB(has)h(to)h(mak)m(e)h(sev)m(eral)g(function)e(calls,)i Fw(p)-5 b(er)31 b(input)f(char)-5 b(acter)40 b FB(to)28 b(\014nd)e(the)150 4287 y(record)k(terminator.)p eop end %%Page: 36 48 TeXDict begin 36 47 bop 150 -116 a FB(36)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fu(3)80 b(Reading)54 b(Input)e(Files)150 521 y FB(In)36 b(the)g(t)m(ypical)j Fz(awk)c FB(program,)j(all)g(input)d(is)i (read)f(either)h(from)f(the)h(standard)e(input)h(\(b)m(y)g(default,)150 631 y(this)k(is)g(the)g(k)m(eyb)s(oard,)j(but)c(often)h(it)h(is)f(a)h (pip)s(e)e(from)g(another)h(command\))h(or)f(from)f(\014les)h(whose)150 740 y(names)f(y)m(ou)g(sp)s(ecify)f(on)h(the)g Fz(awk)e FB(command)i(line.)66 b(If)38 b(y)m(ou)h(sp)s(ecify)g(input)f(\014les,) j Fz(awk)c FB(reads)i(them)150 850 y(in)d(order,)h(pro)s(cessing)f(all) i(the)e(data)h(from)f(one)g(b)s(efore)g(going)h(on)f(to)h(the)g(next.) 58 b(The)36 b(name)g(of)h(the)150 959 y(curren)m(t)32 b(input)g(\014le)h(can)g(b)s(e)f(found)f(in)h(the)h(built-in)f(v)-5 b(ariable)34 b Fz(FILENAME)c FB(\(see)k(Section)f(6.5)h([Built-in)150 1069 y(V)-8 b(ariables],)32 b(page)f(107\).)275 1201 y(The)e(input)h(is)g(read)h(in)f(units)f(called)j Fx(records)p FB(,)e(and)g(is)h(pro)s(cessed)e(b)m(y)i(the)f(rules)g(of)h(y)m(our)f (program)150 1311 y(one)e(record)g(at)g(a)h(time.)40 b(By)28 b(default,)h(eac)m(h)g(record)f(is)g(one)g(line.)40 b(Eac)m(h)28 b(record)g(is)g(automatically)j(split)150 1420 y(in)m(to)f(c)m(h)m(unks)f(called)h Fx(\014elds)p FB(.)40 b(This)28 b(mak)m(es)i(it)g(more)f(con)m(v)m(enien)m(t)i(for)e (programs)g(to)h(w)m(ork)f(on)g(the)g(parts)150 1530 y(of)i(a)f(record.)275 1662 y(On)c(rare)h(o)s(ccasions,)i(y)m(ou)e(ma)m (y)h(need)f(to)g(use)g(the)g Fz(getline)e FB(command.)40 b(The)26 b Fz(getline)f FB(command)150 1772 y(is)38 b(v)-5 b(aluable,)41 b(b)s(oth)c(b)s(ecause)h(it)h(can)f(do)g(explicit)h (input)e(from)g(an)m(y)i(n)m(um)m(b)s(er)d(of)j(\014les,)h(and)d(b)s (ecause)150 1881 y(the)e(\014les)f(used)f(with)h(it)h(do)g(not)f(ha)m (v)m(e)i(to)f(b)s(e)e(named)h(on)h(the)f Fz(awk)g FB(command)g(line)g (\(see)i(Section)f(3.8)150 1991 y([Explicit)c(Input)e(with)h Fz(getline)p FB(],)f(page)j(51\).)150 2219 y FA(3.1)68 b(Ho)l(w)46 b(Input)e(Is)h(Split)g(in)l(to)h(Records)150 2378 y FB(The)33 b Fz(awk)f FB(utilit)m(y)j(divides)d(the)i(input)e (for)h(y)m(our)g Fz(awk)g FB(program)g(in)m(to)h(records)f(and)f (\014elds.)49 b Fz(awk)32 b FB(k)m(eeps)150 2488 y(trac)m(k)f(of)g(the) f(n)m(um)m(b)s(er)f(of)h(records)g(that)g(ha)m(v)m(e)i(b)s(een)d(read)h (so)g(far)g(from)g(the)g(curren)m(t)g(input)f(\014le.)41 b(This)150 2597 y(v)-5 b(alue)27 b(is)g(stored)g(in)g(a)g(built-in)f(v) -5 b(ariable)28 b(called)g Fz(FNR)p FB(.)39 b(It)27 b(is)g(reset)g(to)g (zero)h(when)e(a)h(new)f(\014le)h(is)g(started.)150 2707 y(Another)i(built-in)f(v)-5 b(ariable,)31 b Fz(NR)p FB(,)d(is)h(the)g (total)i(n)m(um)m(b)s(er)c(of)i(input)f(records)h(read)g(so)g(far)f (from)h(all)g(data)150 2816 y(\014les.)41 b(It)30 b(starts)h(at)g (zero,)g(but)f(is)h(nev)m(er)f(automatically)j(reset)e(to)h(zero.)275 2948 y(Records)27 b(are)h(separated)g(b)m(y)f(a)h(c)m(haracter)h (called)f(the)g Fx(record)f(separator)p FB(.)40 b(By)28 b(default,)g(the)g(record)150 3058 y(separator)41 b(is)g(the)f(newline) h(c)m(haracter.)73 b(This)40 b(is)g(wh)m(y)g(records)g(are,)k(b)m(y)d (default,)i(single)e(lines.)72 b(A)150 3168 y(di\013eren)m(t)35 b(c)m(haracter)i(can)e(b)s(e)g(used)f(for)h(the)g(record)g(separator)h (b)m(y)f(assigning)g(the)g(c)m(haracter)i(to)f(the)150 3277 y(built-in)30 b(v)-5 b(ariable)31 b Fz(RS)p FB(.)275 3409 y(Lik)m(e)37 b(an)m(y)h(other)f(v)-5 b(ariable,)39 b(the)e(v)-5 b(alue)38 b(of)f Fz(RS)f FB(can)h(b)s(e)f(c)m(hanged)i(in) e(the)i Fz(awk)e FB(program)g(with)h(the)150 3519 y(assignmen)m(t)43 b(op)s(erator,)i(`)p Fz(=)p FB(')d(\(see)h(Section)f(5.7)h([Assignmen)m (t)g(Expressions],)h(page)f(81\).)76 b(The)41 b(new)150 3629 y(record-separator)34 b(c)m(haracter)h(should)d(b)s(e)h(enclosed)h (in)f(quotation)h(marks,)g(whic)m(h)f(indicate)h(a)g(string)150 3738 y(constan)m(t.)42 b(Often)28 b(the)h(righ)m(t)g(time)h(to)g(do)e (this)h(is)g(at)g(the)h(b)s(eginning)e(of)h(execution,)h(b)s(efore)f (an)m(y)g(input)150 3848 y(is)g(pro)s(cessed,)f(so)h(that)g(the)g(v)m (ery)g(\014rst)f(record)g(is)h(read)g(with)f(the)h(prop)s(er)e (separator.)41 b(T)-8 b(o)29 b(do)f(this,)h(use)150 3957 y(the)24 b(sp)s(ecial)h Fz(BEGIN)e FB(pattern)h(\(see)h(Section)g (6.1.4)h([The)d Fz(BEGIN)g FB(and)h Fz(END)f FB(Sp)s(ecial)h(P)m (atterns],)j(page)d(96\).)150 4067 y(F)-8 b(or)31 b(example:)390 4199 y Fz(awk)47 b('BEGIN)f({)h(RS)h(=)f("/")g(})629 4309 y({)g(print)f($0)i(}')f(BBS-list)150 4441 y FB(c)m(hanges)d(the)f (v)-5 b(alue)43 b(of)g Fz(RS)g FB(to)g Fz("/")p FB(,)j(b)s(efore)c (reading)h(an)m(y)g(input.)78 b(This)42 b(is)h(a)g(string)g(whose)g (\014rst)150 4550 y(c)m(haracter)c(is)f(a)h(slash;)i(as)e(a)f(result,)i (records)d(are)i(separated)f(b)m(y)g(slashes.)63 b(Then)37 b(the)h(input)f(\014le)h(is)150 4660 y(read,)45 b(and)c(the)g(second)h (rule)f(in)h(the)g Fz(awk)e FB(program)i(\(the)g(action)h(with)e(no)h (pattern\))g(prin)m(ts)f(eac)m(h)150 4769 y(record.)60 b(Because)39 b(eac)m(h)f Fz(print)d FB(statemen)m(t)k(adds)d(a)h (newline)g(at)h(the)f(end)f(of)h(its)h(output,)g(this)f Fz(awk)150 4879 y FB(program)i(copies)h(the)f(input)f(with)h(eac)m(h)h (slash)f(c)m(hanged)g(to)h(a)f(newline.)67 b(Here)39 b(are)h(the)f(results)g(of)150 4989 y(running)29 b(the)h(program)g(on)h (`)p Fz(BBS-list)p FB(':)390 5121 y Fz($)47 b(awk)g('BEGIN)f({)i(RS)f (=)h("/")e(})390 5230 y(>)286 b({)48 b(print)e($0)h(}')g(BBS-list)410 5344 y Fy(a)533 5340 y Fz(aardvark)237 b(555-5553)f(1200)p eop end %%Page: 37 49 TeXDict begin 37 48 bop 2302 -116 a Fr(Chapter)30 b(3:)41 b(Reading)31 b(Input)e(Files)92 b FB(37)410 303 y Fy(a)533 299 y Fz(300)477 b(B)410 412 y Fy(a)533 408 y Fz(alpo-net)237 b(555-3412)f(2400)410 522 y Fy(a)533 518 y Fz(1200)410 632 y Fy(a)533 628 y Fz(300)i(A)410 741 y Fy(a)533 737 y Fz(barfly)333 b(555-7685)236 b(1200)410 851 y Fy(a)533 847 y Fz(300)477 b(A)410 960 y Fy(a)533 956 y Fz(bites)381 b(555-1675)236 b(2400)410 1070 y Fy(a)533 1066 y Fz(1200)410 1180 y Fy(a)533 1176 y Fz(300)i(A)410 1289 y Fy(a)533 1285 y Fz(camelot)285 b(555-0542)236 b(300)715 b(C)410 1399 y Fy(a)533 1395 y Fz(core)429 b(555-2912)236 b(1200)410 1508 y Fy(a)533 1504 y Fz(300)477 b(C)410 1618 y Fy(a)533 1614 y Fz(fooey)381 b(555-1234)236 b(2400)410 1728 y Fy(a)533 1724 y Fz(1200)410 1837 y Fy(a)533 1833 y Fz(300)i(B)410 1947 y Fy(a)533 1943 y Fz(foot)429 b(555-6699)236 b(1200)410 2056 y Fy(a)533 2052 y Fz(300)477 b(B)410 2166 y Fy(a)533 2162 y Fz(macfoo)333 b(555-6480)236 b(1200)410 2275 y Fy(a)533 2271 y Fz(300)477 b(A)410 2385 y Fy(a)533 2381 y Fz(sdace)381 b(555-3430)236 b(2400)410 2495 y Fy(a)533 2491 y Fz(1200)410 2604 y Fy(a)533 2600 y Fz(300)i(A)410 2714 y Fy(a)533 2710 y Fz(sabafoo)285 b(555-2127)236 b(1200)410 2823 y Fy(a)533 2819 y Fz(300)477 b(C)410 2933 y Fy(a)150 3061 y FB(Note)36 b(that)f(the)g(en)m(try)g(for)g(the)f (`)p Fz(camelot)p FB(')g(BBS)h(is)f(not)h(split.)54 b(In)34 b(the)h(original)h(data)f(\014le)g(\(see)g(Sec-)150 3170 y(tion)c(1.2)g([Data)i(Files)e(for)f(the)h(Examples],)g(page)g(16\),)h (the)e(line)h(lo)s(oks)g(lik)m(e)g(this:)390 3302 y Fz(camelot)284 b(555-0542)237 b(300)715 b(C)150 3433 y FB(It)26 b(has)f(one)h(baud)e (rate)j(only)-8 b(,)27 b(so)f(there)g(are)g(no)f(slashes)h(in)f(the)h (record,)h(unlik)m(e)f(the)g(others)f(whic)m(h)h(ha)m(v)m(e)150 3543 y(t)m(w)m(o)34 b(or)e(more)h(baud)e(rates.)47 b(In)32 b(fact,)i(this)e(record)h(is)f(treated)i(as)e(part)g(of)h(the)g(record) f(for)g(the)h(`)p Fz(core)p FB(')150 3652 y(BBS;)c(the)g(newline)f (separating)h(them)g(in)f(the)g(output)g(is)h(the)g(original)g(newline) g(in)f(the)g(data)i(\014le,)f(not)150 3762 y(the)i(one)f(added)g(b)m(y) g Fz(awk)g FB(when)f(it)i(prin)m(ted)f(the)g(record!)275 3893 y(Another)d(w)m(a)m(y)i(to)g(c)m(hange)g(the)g(record)e(separator) i(is)f(on)g(the)g(command)g(line,)h(using)f(the)g(v)-5 b(ariable-)150 4003 y(assignmen)m(t)31 b(feature)g(\(see)g(Section)g (11.3)h([Other)f(Command-Line)e(Argumen)m(ts],)i(page)g(178\):)390 4134 y Fz(awk)47 b('{)g(print)f($0)i(}')f(RS="/")f(BBS-list)150 4266 y FB(This)30 b(sets)g Fz(RS)g FB(to)h(`)p Fz(/)p FB(')g(b)s(efore)f(pro)s(cessing)g(`)p Fz(BBS-list)p FB('.)275 4398 y(Using)24 b(an)f(un)m(usual)g(c)m(haracter)i(suc)m(h)f (as)g(`)p Fz(/)p FB(')g(for)f(the)h(record)g(separator)g(pro)s(duces)f (correct)i(b)s(eha)m(vior)150 4507 y(in)k(the)h(v)-5 b(ast)31 b(ma)5 b(jorit)m(y)30 b(of)g(cases.)42 b(Ho)m(w)m(ev)m(er,)32 b(the)e(follo)m(wing)h(\(extreme\))g(pip)s(eline)e(prin)m(ts)h(a)g (surprising)150 4617 y(`)p Fz(1)p FB(':)390 4748 y Fz($)47 b(echo)g(|)h(awk)e('BEGIN)h({)g(RS)g(=)h("a")f(})g(;)g({)h(print)e(NF)h (}')410 4862 y Fy(a)533 4858 y Fz(1)275 4989 y FB(There)34 b(is)h(one)g(\014eld,)g(consisting)h(of)f(a)g(newline.)54 b(The)34 b(v)-5 b(alue)35 b(of)g(the)g(built-in)f(v)-5 b(ariable)36 b Fz(NF)e FB(is)h(the)150 5099 y(n)m(um)m(b)s(er)29 b(of)i(\014elds)e(in)h(the)h(curren)m(t)f(record.)275 5230 y(Reac)m(hing)36 b(the)g(end)f(of)g(an)h(input)e(\014le)i (terminates)g(the)g(curren)m(t)f(input)g(record,)i(ev)m(en)f(if)f(the)h (last)150 5340 y(c)m(haracter)c(in)e(the)h(\014le)f(is)g(not)h(the)g(c) m(haracter)h(in)e Fz(RS)p FB(.)1996 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial eop end %%Page: 38 50 TeXDict begin 38 49 bop 150 -116 a FB(38)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(The)23 b(empt)m(y)i(string)f Fz("")g FB(\(a)h(string)f (without)h(an)m(y)f(c)m(haracters\))i(has)e(a)h(sp)s(ecial)g(meaning)f (as)h(the)f(v)-5 b(alue)150 408 y(of)27 b Fz(RS)p FB(.)39 b(It)27 b(means)g(that)h(records)f(are)g(separated)h(b)m(y)e(one)i(or)f (more)g(blank)g(lines)g(and)f(nothing)h(else.)41 b(See)150 518 y(Section)31 b(3.7)h([Multiple-Line)f(Records],)g(page)g(49,)h(for) e(more)h(details.)275 652 y(If)39 b(y)m(ou)h(c)m(hange)g(the)g(v)-5 b(alue)40 b(of)g Fz(RS)f FB(in)g(the)h(middle)f(of)h(an)f Fz(awk)g FB(run,)i(the)f(new)f(v)-5 b(alue)40 b(is)f(used)g(to)150 762 y(delimit)i(subsequen)m(t)f(records,)j(but)d(the)g(record)h(curren) m(tly)f(b)s(eing)g(pro)s(cessed,)j(as)e(w)m(ell)g(as)g(records)150 871 y(already)31 b(pro)s(cessed,)f(are)h(not)f(a\013ected.)275 1005 y(After)j(the)g(end)g(of)g(the)g(record)g(has)g(b)s(een)g (determined,)g Fz(gawk)f FB(sets)i(the)f(v)-5 b(ariable)34 b Fz(RT)f FB(to)h(the)f(text)150 1115 y(in)45 b(the)g(input)f(that)i (matc)m(hed)g Fz(RS)p FB(.)84 b(When)45 b(using)f Fz(gawk)p FB(,)k(the)d(v)-5 b(alue)46 b(of)f Fz(RS)g FB(is)g(not)g(limited)h(to)g (a)150 1224 y(one-c)m(haracter)28 b(string.)39 b(It)25 b(can)h(b)s(e)e(an)m(y)i(regular)f(expression)h(\(see)g(Chapter)f(2)g ([Regular)h(Expressions],)150 1334 y(page)c(24\).)39 b(In)21 b(general,)k(eac)m(h)e(record)e(ends)g(at)h(the)g(next)g (string)f(that)i(matc)m(hes)f(the)g(regular)g(expression;)150 1443 y(the)36 b(next)g(record)f(starts)i(at)f(the)g(end)f(of)h(the)g (matc)m(hing)g(string.)57 b(This)35 b(general)i(rule)e(is)h(actually)h (at)150 1553 y(w)m(ork)e(in)g(the)g(usual)f(case,)k(where)c Fz(RS)h FB(con)m(tains)h(just)e(a)i(newline:)49 b(a)36 b(record)f(ends)f(at)h(the)h(b)s(eginning)150 1663 y(of)29 b(the)f(next)h(matc)m(hing)g(string)g(\(the)g(next)f(newline)h(in)f (the)g(input\),)h(and)f(the)g(follo)m(wing)i(record)f(starts)150 1772 y(just)k(after)h(the)f(end)g(of)g(this)h(string)f(\(at)h(the)g (\014rst)f(c)m(haracter)i(of)e(the)h(follo)m(wing)h(line\).)50 b(The)33 b(newline,)150 1882 y(b)s(ecause)d(it)h(matc)m(hes)h Fz(RS)p FB(,)e(is)g(not)h(part)f(of)h(either)f(record.)275 2016 y(When)21 b Fz(RS)f FB(is)i(a)f(single)i(c)m(haracter,)i Fz(RT)20 b FB(con)m(tains)j(the)e(same)h(single)g(c)m(haracter.)39 b(Ho)m(w)m(ev)m(er,)26 b(when)20 b Fz(RS)h FB(is)150 2125 y(a)27 b(regular)f(expression,)h Fz(RT)f FB(con)m(tains)h(the)g (actual)g(input)f(text)h(that)g(matc)m(hed)g(the)f(regular)h (expression.)275 2259 y(The)35 b(follo)m(wing)j(example)f(illustrates)g (b)s(oth)f(of)g(these)h(features.)58 b(It)36 b(sets)h Fz(RS)e FB(equal)i(to)g(a)g(regular)150 2369 y(expression)32 b(that)i(matc)m(hes)f(either)g(a)g(newline)g(or)g(a)g(series)g(of)f (one)h(or)g(more)g(upp)s(ercase)e(letters)j(with)150 2478 y(optional)e(leading)f(and/or)f(trailing)h(whitespace:)390 2612 y Fz($)47 b(echo)g(record)f(1)i(AAAA)e(record)g(2)i(BBBB)e(record) h(3)g(|)390 2722 y(>)g(gawk)g('BEGIN)f({)i(RS)f(=)g("\\n|\()g (*[[:upper:]]+)d(*\)")j(})390 2832 y(>)620 b({)48 b(print)e("Record)g (=",)h($0,)g("and)f(RT)h(=",)g(RT)h(}')410 2945 y Fy(a)533 2941 y Fz(Record)e(=)i(record)e(1)h(and)g(RT)g(=)96 b(AAAA)410 3055 y Fy(a)533 3051 y Fz(Record)46 b(=)i(record)e(2)h(and)g(RT)g(=)96 b(BBBB)410 3164 y Fy(a)533 3160 y Fz(Record)46 b(=)i(record)e(3)h(and)g (RT)g(=)410 3274 y Fy(a)150 3404 y FB(The)25 b(\014nal)g(line)h(of)g (output)f(has)g(an)g(extra)i(blank)e(line.)39 b(This)25 b(is)h(b)s(ecause)f(the)h(v)-5 b(alue)26 b(of)f Fz(RT)g FB(is)h(a)g(newline,)150 3513 y(and)d(the)i Fz(print)d FB(statemen)m(t)k(supplies)d(its)i(o)m(wn)f(terminating)h(newline.)38 b(See)25 b(Section)g(13.3.8)h([A)e(Simple)150 3623 y(Stream)30 b(Editor],)h(page)g(243,)h(for)e(a)h(more)g(useful)e(example)i(of)g Fz(RS)f FB(as)g(a)h(regexp)g(and)e Fz(RT)p FB(.)275 3757 y(If)39 b(y)m(ou)h(set)g Fz(RS)f FB(to)h(a)h(regular)e(expression)h (that)g(allo)m(ws)h(optional)g(trailing)g(text,)i(suc)m(h)c(as)h(`)p Fz(RS)30 b(=)150 3867 y("abc\(XYZ\)?")p FB(')g(it)k(is)f(p)s(ossible,)g (due)g(to)g(implemen)m(tation)i(constrain)m(ts,)g(that)e Fz(gawk)f FB(ma)m(y)i(matc)m(h)g(the)150 3976 y(leading)j(part)f(of)h (the)f(regular)h(expression,)h(but)e(not)g(the)h(trailing)g(part,)h (particularly)f(if)f(the)h(input)150 4086 y(text)30 b(that)g(could)f (matc)m(h)g(the)h(trailing)g(part)e(is)h(fairly)h(long.)40 b Fz(gawk)28 b FB(attempts)i(to)g(a)m(v)m(oid)g(this)f(problem,)150 4195 y(but)h(curren)m(tly)-8 b(,)31 b(there's)f(no)h(guaran)m(tee)h (that)f(this)f(will)h(nev)m(er)f(happ)s(en.)390 4329 y Fr(NOTE:)24 b FB(Remem)m(b)s(er)g(that)h(in)f Fz(awk)p FB(,)h(the)f(`)p Fz(^)p FB(')h(and)e(`)p Fz($)p FB(')i(anc)m(hor)f (metac)m(haracters)j(matc)m(h)e(the)390 4439 y(b)s(eginning)33 b(and)h(end)f(of)h(a)g Fw(string)p FB(,)i(and)d(not)h(the)g(b)s (eginning)f(and)h(end)f(of)h(a)g Fw(line)p FB(.)52 b(As)34 b(a)390 4548 y(result,)c(something)g(lik)m(e)g(`)p Fz(RS)g(=)g ("^[[:upper:]]")p FB(')c(can)k(only)g(matc)m(h)g(at)g(the)g(b)s (eginning)390 4658 y(of)43 b(a)g(\014le.)78 b(This)42 b(is)h(b)s(ecause)g Fz(gawk)e FB(views)i(the)g(input)f(\014le)h(as)g (one)g(long)h(string)e(that)390 4768 y(happ)s(ens)c(to)i(con)m(tain)h (newline)e(c)m(haracters)i(in)e(it.)69 b(It)40 b(is)f(th)m(us)g(b)s (est)g(to)i(a)m(v)m(oid)g(anc)m(hor)390 4877 y(c)m(haracters)32 b(in)e(the)g(v)-5 b(alue)31 b(of)g Fz(RS)p FB(.)275 5011 y(The)f(use)g(of)h Fz(RS)f FB(as)h(a)g(regular)g(expression)g(and)f (the)h Fz(RT)f FB(v)-5 b(ariable)31 b(are)g Fz(gawk)f FB(extensions;)i(they)f(are)150 5121 y(not)f(a)m(v)-5 b(ailable)32 b(in)e(compatibilit)m(y)i(mo)s(de)d(\(see)i(Section)g (11.2)g([Command-Line)e(Options],)h(page)h(173\).)150 5230 y(In)h(compatibilit)m(y)i(mo)s(de,)f(only)g(the)g(\014rst)e(c)m (haracter)k(of)d(the)h(v)-5 b(alue)33 b(of)g Fz(RS)f FB(is)g(used)g(to)h(determine)g(the)150 5340 y(end)d(of)g(the)h (record.)p eop end %%Page: 39 51 TeXDict begin 39 50 bop 2302 -116 a Fr(Chapter)30 b(3:)41 b(Reading)31 b(Input)e(Files)92 b FB(39)150 299 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b Fh(RS)41 b(=)g("\\0")h Fj(Is)f(Not)g(P)m (ortable)150 446 y FB(There)34 b(are)g(times)h(when)e(y)m(ou)i(migh)m (t)f(w)m(an)m(t)h(to)g(treat)h(an)e(en)m(tire)h(data)g(\014le)f(as)g(a) h(single)f(record.)52 b(The)150 555 y(only)25 b(w)m(a)m(y)h(to)g(mak)m (e)h(this)e(happ)s(en)e(is)j(to)f(giv)m(e)i Fz(RS)e FB(a)g(v)-5 b(alue)26 b(that)g(y)m(ou)f(kno)m(w)h(do)s(esn't)f(o)s(ccur)g(in)f(the) i(input)150 665 y(\014le.)54 b(This)34 b(is)h(hard)f(to)h(do)g(in)f(a)i (general)f(w)m(a)m(y)-8 b(,)38 b(suc)m(h)c(that)i(a)f(program)g(alw)m (a)m(ys)h(w)m(orks)f(for)f(arbitrary)150 775 y(input)29 b(\014les.)275 902 y(Y)-8 b(ou)26 b(migh)m(t)h(think)f(that)h(for)f (text)h(\014les,)h(the)e Fg(nul)g FB(c)m(haracter,)i(whic)m(h)e (consists)h(of)g(a)f(c)m(haracter)i(with)150 1011 y(all)j(bits)g(equal) f(to)i(zero,)f(is)f(a)h(go)s(o)s(d)f(v)-5 b(alue)31 b(to)g(use)f(for)h Fz(RS)e FB(in)h(this)h(case:)390 1139 y Fz(BEGIN)46 b({)i(RS)f(=)g ("\\0")g(})95 b(#)48 b(whole)e(file)h(becomes)f(one)g(record?)275 1266 y(gawk)26 b FB(in)i(fact)g(accepts)h(this,)g(and)e(uses)g(the)h Fg(nul)f FB(c)m(haracter)i(for)f(the)g(record)f(separator.)41 b(Ho)m(w)m(ev)m(er,)150 1375 y(this)30 b(usage)h(is)g Fw(not)39 b FB(p)s(ortable)31 b(to)g(other)f Fz(awk)g FB(implemen)m(tations.)275 1502 y(All)h(other)f Fz(awk)g FB(implemen)m(tations)1488 1469 y Fo(1)1557 1502 y FB(store)h(strings)f (in)m(ternally)h(as)g(C-st)m(yle)h(strings.)40 b(C)30 b(strings)g(use)150 1612 y(the)38 b Fg(nul)e FB(c)m(haracter)k(as)d (the)h(string)g(terminator.)63 b(In)36 b(e\013ect,)41 b(this)d(means)f(that)h(`)p Fz(RS)30 b(=)h("\\0")p FB(')36 b(is)i(the)150 1722 y(same)31 b(as)f(`)p Fz(RS)g(=)g("")p FB('.)3122 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 275 1849 a(The)35 b(b)s(est)h(w)m(a)m(y)h(to)g(treat)g(a)g (whole)f(\014le)g(as)h(a)f(single)h(record)f(is)g(to)h(simply)f(read)g (the)g(\014le)g(in,)i(one)150 1958 y(record)30 b(at)h(a)g(time,)g (concatenating)i(eac)m(h)f(record)e(on)m(to)i(the)e(end)g(of)g(the)h (previous)f(ones.)150 2176 y FA(3.2)68 b(Examining)46 b(Fields)150 2336 y FB(When)36 b Fz(awk)g FB(reads)g(an)g(input)f (record,)k(the)d(record)g(is)h(automatically)i Fx(parsed)g FB(or)e(separated)f(b)m(y)h(the)150 2445 y(in)m(terpreter)i(in)m(to)h (c)m(h)m(unks)e(called)i Fx(\014elds)p FB(.)65 b(By)39 b(default,)i(\014elds)d(are)h(separated)g(b)m(y)g Fx(whitespace)p FB(,)j(lik)m(e)150 2555 y(w)m(ords)32 b(in)g(a)h(line.)47 b(Whitespace)34 b(in)e Fz(awk)g FB(means)g(an)m(y)h(string)f(of)h(one)g (or)f(more)h(spaces,)g(tabs,)h(or)e(new-)150 2664 y(lines;)352 2631 y Fo(2)421 2664 y FB(other)g(c)m(haracters,)h(suc)m(h)e(as)h (formfeed,)f(v)m(ertical)j(tab,)e(etc.)g(that)g(are)g(considered)f (whitespace)150 2774 y(b)m(y)f(other)h(languages,)h(are)f Fw(not)39 b FB(considered)30 b(whitespace)i(b)m(y)e Fz(awk)p FB(.)275 2901 y(The)c(purp)s(ose)f(of)i(\014elds)f(is)g(to)i(mak)m(e)g (it)f(more)g(con)m(v)m(enien)m(t)h(for)f(y)m(ou)g(to)g(refer)g(to)g (these)g(pieces)h(of)f(the)150 3011 y(record.)39 b(Y)-8 b(ou)26 b(don't)g(ha)m(v)m(e)h(to)g(use)e(them|y)m(ou)h(can)g(op)s (erate)h(on)e(the)h(whole)g(record)g(if)g(y)m(ou)g(w)m(an)m(t|but)150 3120 y(\014elds)k(are)h(what)f(mak)m(e)h(simple)g Fz(awk)e FB(programs)h(so)h(p)s(o)m(w)m(erful.)275 3248 y(A)f(dollar-sign)h(\(`) p Fz($)p FB('\))g(is)g(used)e(to)i(refer)f(to)h(a)g(\014eld)f(in)g(an)g Fz(awk)f FB(program,)i(follo)m(w)m(ed)h(b)m(y)e(the)g(n)m(um)m(b)s(er) 150 3357 y(of)e(the)g(\014eld)f(y)m(ou)i(w)m(an)m(t.)40 b(Th)m(us,)28 b Fz($1)f FB(refers)g(to)i(the)f(\014rst)f(\014eld,)h Fz($2)f FB(to)i(the)f(second,)h(and)e(so)h(on.)40 b(\(Unlik)m(e)150 3467 y(the)31 b(Unix)f(shells,)h(the)f(\014eld)g(n)m(um)m(b)s(ers)f (are)i(not)g(limited)g(to)g(single)g(digits.)42 b Fz($127)29 b FB(is)i(the)f(one)h(h)m(undred)150 3576 y(t)m(w)m(en)m(t)m(y-sev)m (en)m(th)j(\014eld)c(in)g(the)g(record.\))41 b(F)-8 b(or)31 b(example,)h(supp)s(ose)d(the)h(follo)m(wing)i(is)e(a)h(line)g(of)f (input:)390 3703 y Fz(This)47 b(seems)f(like)h(a)g(pretty)f(nice)h (example.)150 3831 y FB(Here)29 b(the)f(\014rst)f(\014eld,)i(or)f Fz($1)p FB(,)g(is)g(`)p Fz(This)p FB(',)g(the)g(second)h(\014eld,)f(or) g Fz($2)p FB(,)g(is)g(`)p Fz(seems)p FB(',)g(and)g(so)g(on.)40 b(Note)29 b(that)150 3940 y(the)i(last)i(\014eld,)e Fz($7)p FB(,)g(is)g(`)p Fz(example.)p FB('.)42 b(Because)33 b(there)e(is)h(no)f (space)h(b)s(et)m(w)m(een)g(the)f(`)p Fz(e)p FB(')h(and)e(the)i(`)p Fz(.)p FB(',)g(the)150 4050 y(p)s(erio)s(d)d(is)h(considered)h(part)f (of)g(the)h(sev)m(en)m(th)g(\014eld.)275 4177 y Fz(NF)i FB(is)h(a)g(built-in)g(v)-5 b(ariable)35 b(whose)e(v)-5 b(alue)35 b(is)f(the)g(n)m(um)m(b)s(er)f(of)h(\014elds)f(in)h(the)g (curren)m(t)f(record.)52 b Fz(awk)150 4287 y FB(automatically)38 b(up)s(dates)d(the)g(v)-5 b(alue)36 b(of)g Fz(NF)f FB(eac)m(h)h(time)g (it)g(reads)g(a)f(record.)56 b(No)36 b(matter)g(ho)m(w)g(man)m(y)150 4396 y(\014elds)29 b(there)g(are,)h(the)g(last)g(\014eld)f(in)g(a)h (record)f(can)g(b)s(e)g(represen)m(ted)g(b)m(y)h Fz($NF)p FB(.)39 b(So,)30 b Fz($NF)e FB(is)h(the)h(same)g(as)150 4506 y Fz($7)p FB(,)d(whic)m(h)e(is)h(`)p Fz(example.)p FB('.)38 b(If)26 b(y)m(ou)g(try)g(to)h(reference)f(a)h(\014eld)e(b)s (ey)m(ond)h(the)g(last)h(one)f(\(suc)m(h)g(as)g Fz($8)g FB(when)150 4615 y(the)h(record)h(has)f(only)g(sev)m(en)h(\014elds\),)g (y)m(ou)f(get)h(the)g(empt)m(y)f(string.)40 b(\(If)27 b(used)g(in)g(a)g(n)m(umeric)g(op)s(eration,)150 4725 y(y)m(ou)k(get)g(zero.\))275 4852 y(The)36 b(use)g(of)h Fz($0)p FB(,)h(whic)m(h)f(lo)s(oks)g(lik)m(e)h(a)g(reference)f(to)g (the)g(\\zero-th")i(\014eld,)f(is)f(a)g(sp)s(ecial)h(case:)54 b(it)150 4962 y(represen)m(ts)35 b(the)g(whole)g(input)e(record)i(when) f(y)m(ou)h(are)g(not)g(in)m(terested)h(in)e(sp)s(eci\014c)h(\014elds.) 53 b(Here)36 b(are)150 5071 y(some)31 b(more)f(examples:)p 150 5138 1200 4 v 199 5205 a Fo(1)275 5237 y Fn(A)n(t)24 b(least)j(that)e(w)n(e)i(kno)n(w)e(ab)r(out.)199 5308 y Fo(2)275 5340 y Fn(In)g(POSIX)f Fm(awk)p Fn(,)j(newlines)f(are)h(not) e(considered)h(whitespace)h(for)f(separating)h(\014elds.)p eop end %%Page: 40 52 TeXDict begin 40 51 bop 150 -116 a FB(40)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz($)47 b(awk)g('$1)g(~)h(/foo/)e({)i(print)e($0)h(}')g(BBS-list) 410 412 y Fy(a)533 408 y Fz(fooey)381 b(555-1234)236 b(2400/1200/300)f(B)410 522 y Fy(a)533 518 y Fz(foot)429 b(555-6699)236 b(1200/300)475 b(B)410 632 y Fy(a)533 628 y Fz(macfoo)333 b(555-6480)236 b(1200/300)475 b(A)410 741 y Fy(a)533 737 y Fz(sabafoo)285 b(555-2127)236 b(1200/300)475 b(C)150 866 y FB(This)32 b(example)g(prin)m(ts)g(eac)m(h)i(record)e(in) g(the)g(\014le)h(`)p Fz(BBS-list)p FB(')d(whose)j(\014rst)e(\014eld)h (con)m(tains)h(the)g(string)150 975 y(`)p Fz(foo)p FB('.)40 b(The)29 b(op)s(erator)h(`)p Fz(~)p FB(')g(is)g(called)g(a)g Fx(matc)m(hing)h(op)s(erator)37 b FB(\(see)30 b(Section)h(2.1)f([Ho)m (w)h(to)f(Use)g(Regular)150 1085 y(Expressions],)e(page)g(24\);)i(it)e (tests)g(whether)f(a)g(string)h(\(here,)g(the)g(\014eld)f Fz($1)p FB(\))g(matc)m(hes)h(a)g(giv)m(en)h(regular)150 1194 y(expression.)275 1323 y(By)38 b(con)m(trast,)k(the)c(follo)m (wing)i(example)e(lo)s(oks)h(for)f(`)p Fz(foo)p FB(')f(in)h Fw(the)i(entir)-5 b(e)41 b(r)-5 b(e)g(c)g(or)g(d)50 b FB(and)37 b(prin)m(ts)h(the)150 1432 y(\014rst)30 b(\014eld)g(and)f (the)i(last)g(\014eld)f(for)g(eac)m(h)i(matc)m(hing)f(input)f(record:) 390 1561 y Fz($)47 b(awk)g('/foo/)f({)i(print)e($1,)h($NF)g(}')g (BBS-list)410 1674 y Fy(a)533 1670 y Fz(fooey)g(B)410 1784 y Fy(a)533 1780 y Fz(foot)g(B)410 1893 y Fy(a)533 1889 y Fz(macfoo)f(A)410 2003 y Fy(a)533 1999 y Fz(sabafoo)g(C)150 2219 y FA(3.3)68 b(Nonconstan)l(t)46 b(Field)f(Num)l(b)t(ers)150 2378 y FB(The)30 b(n)m(um)m(b)s(er)f(of)h(a)h(\014eld)e(do)s(es)h(not)h (need)f(to)h(b)s(e)e(a)i(constan)m(t.)42 b(An)m(y)30 b(expression)g(in)g(the)g Fz(awk)g FB(language)150 2488 y(can)38 b(b)s(e)f(used)g(after)h(a)g(`)p Fz($)p FB(')g(to)h(refer)e (to)i(a)f(\014eld.)62 b(The)37 b(v)-5 b(alue)39 b(of)f(the)g (expression)f(sp)s(eci\014es)g(the)h(\014eld)150 2598 y(n)m(um)m(b)s(er.)f(If)22 b(the)i(v)-5 b(alue)23 b(is)g(a)g(string,)i (rather)e(than)f(a)i(n)m(um)m(b)s(er,)f(it)g(is)g(con)m(v)m(erted)i(to) f(a)f(n)m(um)m(b)s(er.)37 b(Consider)150 2707 y(this)30 b(example:)390 2835 y Fz(awk)47 b('{)g(print)f($NR)h(}')150 2964 y FB(Recall)42 b(that)f Fz(NR)f FB(is)g(the)h(n)m(um)m(b)s(er)e (of)i(records)f(read)g(so)h(far:)61 b(one)40 b(in)g(the)h(\014rst)f (record,)j(t)m(w)m(o)f(in)e(the)150 3073 y(second,)31 b(etc.)44 b(So)30 b(this)h(example)h(prin)m(ts)e(the)h(\014rst)f (\014eld)h(of)g(the)g(\014rst)f(record,)h(the)g(second)g(\014eld)g(of)g (the)150 3183 y(second)f(record,)h(and)e(so)h(on.)41 b(F)-8 b(or)31 b(the)f(t)m(w)m(en)m(tieth)i(record,)f(\014eld)e(n)m(um) m(b)s(er)g(20)i(is)f(prin)m(ted;)g(most)h(lik)m(ely)-8 b(,)150 3293 y(the)32 b(record)f(has)g(few)m(er)h(than)f(20)i (\014elds,)e(so)h(this)g(prin)m(ts)f(a)h(blank)f(line.)44 b(Here)32 b(is)g(another)g(example)g(of)150 3402 y(using)e(expressions) g(as)g(\014eld)g(n)m(um)m(b)s(ers:)390 3530 y Fz(awk)47 b('{)g(print)f($\(2*2\))h(}')g(BBS-list)275 3659 y(awk)38 b FB(ev)-5 b(aluates)40 b(the)f(expression)g(`)p Fz(\(2*2\))p FB(')f(and)g(uses)g(its)i(v)-5 b(alue)39 b(as)g(the)g(n)m(um)m(b)s(er)f (of)h(the)g(\014eld)f(to)150 3768 y(prin)m(t.)i(The)28 b(`)p Fz(*)p FB(')i(sign)f(represen)m(ts)g(m)m(ultiplication,)i(so)f (the)f(expression)g(`)p Fz(2*2)p FB(')f(ev)-5 b(aluates)31 b(to)f(four.)39 b(The)150 3878 y(paren)m(theses)d(are)g(used)f(so)h (that)h(the)f(m)m(ultiplication)i(is)d(done)h(b)s(efore)f(the)h(`)p Fz($)p FB(')g(op)s(eration;)k(they)c(are)150 3987 y(necessary)24 b(whenev)m(er)f(there)h(is)g(a)g(binary)f(op)s(erator)h(in)f(the)h (\014eld-n)m(um)m(b)s(er)e(expression.)38 b(This)23 b(example,)150 4097 y(then,)h(prin)m(ts)e(the)h(hours)e(of)i(op)s(eration)g(\(the)g (fourth)f(\014eld\))h(for)f(ev)m(ery)h(line)g(of)g(the)g(\014le)g(`)p Fz(BBS-list)p FB('.)36 b(\(All)150 4207 y(of)28 b(the)g Fz(awk)g FB(op)s(erators)g(are)g(listed,)h(in)f(order)g(of)g (decreasing)h(precedence,)g(in)f(Section)h(5.14)g([Op)s(erator)150 4316 y(Precedence)i(\(Ho)m(w)h(Op)s(erators)d(Nest\)],)j(page)f(90.\)) 275 4445 y(If)22 b(the)h(\014eld)g(n)m(um)m(b)s(er)f(y)m(ou)h(compute)h (is)f(zero,)i(y)m(ou)f(get)g(the)f(en)m(tire)h(record.)38 b(Th)m(us,)24 b(`)p Fz($\(2-2\))p FB(')e(has)h(the)150 4554 y(same)34 b(v)-5 b(alue)34 b(as)g Fz($0)p FB(.)49 b(Negativ)m(e)37 b(\014eld)c(n)m(um)m(b)s(ers)f(are)i(not)f(allo)m(w)m (ed;)38 b(trying)33 b(to)h(reference)g(one)g(usually)150 4664 y(terminates)j(the)g(program.)59 b(\(The)36 b(POSIX)g(standard)f (do)s(es)i(not)f(de\014ne)g(what)g(happ)s(ens)f(when)h(y)m(ou)150 4773 y(reference)e(a)g(negativ)m(e)i(\014eld)d(n)m(um)m(b)s(er.)49 b Fz(gawk)33 b FB(notices)i(this)e(and)g(terminates)i(y)m(our)e (program.)50 b(Other)150 4883 y Fz(awk)29 b FB(implemen)m(tations)j(ma) m(y)f(b)s(eha)m(v)m(e)g(di\013eren)m(tly)-8 b(.\))275 5011 y(As)26 b(men)m(tioned)i(in)e(Section)i(3.2)g([Examining)f (Fields],)h(page)g(39,)g Fz(awk)e FB(stores)h(the)g(curren)m(t)g (record's)150 5121 y(n)m(um)m(b)s(er)50 b(of)i(\014elds)e(in)i(the)f (built-in)g(v)-5 b(ariable)53 b Fz(NF)d FB(\(also)j(see)f(Section)g (6.5)h([Built-in)f(V)-8 b(ariables],)150 5230 y(page)42 b(107\).)76 b(The)41 b(expression)g Fz($NF)g FB(is)g(not)h(a)g(sp)s (ecial)g(feature|it)g(is)g(the)g(direct)g(consequence)g(of)150 5340 y(ev)-5 b(aluating)32 b Fz(NF)e FB(and)f(using)h(its)h(v)-5 b(alue)31 b(as)g(a)f(\014eld)g(n)m(um)m(b)s(er.)p eop end %%Page: 41 53 TeXDict begin 41 52 bop 2302 -116 a Fr(Chapter)30 b(3:)41 b(Reading)31 b(Input)e(Files)92 b FB(41)150 299 y FA(3.4)68 b(Changing)45 b(the)h(Con)l(ten)l(ts)g(of)f(a)g(Field)150 458 y FB(The)25 b(con)m(ten)m(ts)i(of)f(a)g(\014eld,)g(as)g(seen)g(b)m (y)f Fz(awk)p FB(,)h(can)g(b)s(e)f(c)m(hanged)h(within)f(an)h Fz(awk)e FB(program;)j(this)f(c)m(hanges)150 568 y(what)j Fz(awk)g FB(p)s(erceiv)m(es)i(as)e(the)h(curren)m(t)g(input)e(record.) 41 b(\(The)29 b(actual)i(input)e(is)g(un)m(touc)m(hed;)h Fz(awk)f Fw(never)150 677 y FB(mo)s(di\014es)h(the)g(input)g(\014le.\)) 41 b(Consider)29 b(the)i(follo)m(wing)h(example)f(and)f(its)g(output:) 390 815 y Fz($)47 b(awk)g('{)h(nboxes)e(=)h($3)g(;)h($3)f(=)g($3)h(-)f (10)390 925 y(>)382 b(print)46 b(nboxes,)g($3)h(}')g(inventory-shipped) 410 1038 y Fy(a)533 1034 y Fz(25)g(15)410 1148 y Fy(a)533 1144 y Fz(32)g(22)410 1257 y Fy(a)533 1253 y Fz(24)g(14)390 1363 y(...)150 1500 y FB(The)38 b(program)g(\014rst)g(sa)m(v)m(es)i (the)e(original)i(v)-5 b(alue)39 b(of)f(\014eld)g(three)h(in)f(the)h(v) -5 b(ariable)39 b Fz(nboxes)p FB(.)63 b(The)38 b(`)p Fz(-)p FB(')150 1610 y(sign)33 b(represen)m(ts)g(subtraction,)h(so)g (this)f(program)g(reassigns)g(\014eld)g(three,)h Fz($3)p FB(,)f(as)h(the)f(original)h(v)-5 b(alue)150 1720 y(of)26 b(\014eld)g(three)h(min)m(us)e(ten:)39 b(`)p Fz($3)30 b(-)g(10)p FB('.)39 b(\(See)27 b(Section)g(5.5)h([Arithmetic)f(Op)s (erators],)g(page)g(78.\))41 b(Then)150 1829 y(it)d(prin)m(ts)f(the)h (original)h(and)e(new)g(v)-5 b(alues)38 b(for)f(\014eld)g(three.)63 b(\(Someone)38 b(in)f(the)h(w)m(arehouse)g(made)g(a)150 1939 y(consisten)m(t)32 b(mistak)m(e)g(while)e(in)m(v)m(en)m(torying)i (the)e(red)g(b)s(o)m(xes.\))275 2076 y(F)-8 b(or)22 b(this)f(to)h(w)m (ork,)h(the)f(text)g(in)f(\014eld)g Fz($3)f FB(m)m(ust)h(mak)m(e)i (sense)e(as)g(a)h(n)m(um)m(b)s(er;)h(the)f(string)f(of)g(c)m(haracters) 150 2186 y(m)m(ust)42 b(b)s(e)g(con)m(v)m(erted)i(to)f(a)g(n)m(um)m(b)s (er)e(for)h(the)h(computer)f(to)h(do)f(arithmetic)i(on)e(it.)77 b(The)42 b(n)m(um)m(b)s(er)150 2295 y(resulting)26 b(from)g(the)g (subtraction)h(is)f(con)m(v)m(erted)i(bac)m(k)e(to)h(a)g(string)f(of)g (c)m(haracters)i(that)f(then)f(b)s(ecomes)150 2405 y(\014eld)k(three.) 41 b(See)31 b(Section)g(5.4)g([Con)m(v)m(ersion)g(of)g(Strings)f(and)f (Num)m(b)s(ers],)h(page)h(77.)275 2542 y(When)e(the)i(v)-5 b(alue)30 b(of)g(a)h(\014eld)e(is)i(c)m(hanged)f(\(as)h(p)s(erceiv)m (ed)f(b)m(y)g Fz(awk)p FB(\),)g(the)g(text)h(of)g(the)f(input)f(record) 150 2652 y(is)i(recalculated)i(to)f(con)m(tain)h(the)e(new)g(\014eld)f (where)h(the)g(old)h(one)f(w)m(as.)44 b(In)30 b(other)h(w)m(ords,)g Fz($0)g FB(c)m(hanges)150 2762 y(to)42 b(re\015ect)g(the)g(altered)g (\014eld.)74 b(Th)m(us,)44 b(this)d(program)g(prin)m(ts)g(a)h(cop)m(y)g (of)g(the)g(input)e(\014le,)45 b(with)c(10)150 2871 y(subtracted)30 b(from)g(the)h(second)f(\014eld)g(of)h(eac)m(h)g(line:)390 3009 y Fz($)47 b(awk)g('{)h($2)f(=)g($2)g(-)h(10;)f(print)f($0)h(}')g (inventory-shipped)410 3122 y Fy(a)533 3118 y Fz(Jan)g(3)h(25)f(15)g (115)410 3232 y Fy(a)533 3228 y Fz(Feb)g(5)h(32)f(24)g(226)410 3341 y Fy(a)533 3337 y Fz(Mar)g(5)h(24)f(34)g(228)390 3447 y(...)275 3585 y FB(It)30 b(is)g(also)i(p)s(ossible)e(to)h(also)g (assign)g(con)m(ten)m(ts)h(to)f(\014elds)f(that)h(are)g(out)f(of)h (range.)41 b(F)-8 b(or)31 b(example:)390 3722 y Fz($)47 b(awk)g('{)h($6)f(=)g(\($5)g(+)h($4)f(+)g($3)g(+)h($2\))390 3832 y(>)382 b(print)46 b($6)h(}')g(inventory-shipped)410 3945 y Fy(a)533 3941 y Fz(168)410 4055 y Fy(a)533 4051 y Fz(297)410 4164 y Fy(a)533 4160 y Fz(301)390 4270 y(...)150 4407 y FB(W)-8 b(e'v)m(e)39 b(just)e(created)h Fz($6)p FB(,)g(whose)f(v)-5 b(alue)38 b(is)f(the)g(sum)f(of)h(\014elds)g Fz($2)p FB(,)h Fz($3)p FB(,)g Fz($4)p FB(,)h(and)d Fz($5)p FB(.)60 b(The)37 b(`)p Fz(+)p FB(')g(sign)150 4517 y(represen)m(ts)e (addition.)55 b(F)-8 b(or)36 b(the)f(\014le)g(`)p Fz(inventory-shipped) p FB(',)d Fz($6)j FB(represen)m(ts)g(the)g(total)i(n)m(um)m(b)s(er)d (of)150 4627 y(parcels)d(shipp)s(ed)d(for)i(a)h(particular)g(mon)m(th.) 275 4764 y(Creating)36 b(a)g(new)g(\014eld)f(c)m(hanges)i Fz(awk)p FB('s)e(in)m(ternal)i(cop)m(y)g(of)f(the)g(curren)m(t)g(input) f(record,)i(whic)m(h)f(is)150 4874 y(the)29 b(v)-5 b(alue)30 b(of)f Fz($0)p FB(.)40 b(Th)m(us,)29 b(if)g(y)m(ou)g(do)g(`)p Fz(print)g($0)p FB(')g(after)h(adding)e(a)i(\014eld,)f(the)h(record)f (prin)m(ted)f(includes)150 4983 y(the)e(new)f(\014eld,)h(with)f(the)h (appropriate)f(n)m(um)m(b)s(er)g(of)g(\014eld)g(separators)h(b)s(et)m (w)m(een)h(it)f(and)f(the)g(previously)150 5093 y(existing)31 b(\014elds.)275 5230 y(This)i(recomputation)j(a\013ects)f(and)f(is)h (a\013ected)h(b)m(y)e Fz(NF)g FB(\(the)h(n)m(um)m(b)s(er)e(of)h (\014elds;)j(see)e(Section)g(3.2)150 5340 y([Examining)40 b(Fields],)i(page)f(39\).)69 b(F)-8 b(or)40 b(example,)j(the)c(v)-5 b(alue)40 b(of)g Fz(NF)f FB(is)g(set)h(to)g(the)g(n)m(um)m(b)s(er)e(of) i(the)p eop end %%Page: 42 54 TeXDict begin 42 53 bop 150 -116 a FB(42)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(highest)43 b(\014eld)f(y)m(ou)g(create.)79 b(The)42 b(exact)i(format)e(of)h Fz($0)f FB(is)g(also)h(a\013ected)h(b)m(y)f(a)f (feature)h(that)g(has)150 408 y(not)d(b)s(een)f(discussed)g(y)m(et:)61 b(the)40 b Fx(output)f(\014eld)h(separator)p FB(,)j Fz(OFS)p FB(,)e(used)e(to)i(separate)g(the)f(\014elds)f(\(see)150 518 y(Section)31 b(4.3)h([Output)d(Separators],)i(page)g(59\).)275 650 y(Note,)j(ho)m(w)m(ev)m(er,)g(that)e(merely)h Fw(r)-5 b(efer)g(encing)40 b FB(an)32 b(out-of-range)i(\014eld)e(do)s(es)g Fw(not)41 b FB(c)m(hange)33 b(the)f(v)-5 b(alue)150 759 y(of)36 b(either)g Fz($0)f FB(or)h Fz(NF)p FB(.)57 b(Referencing)36 b(an)g(out-of-range)h(\014eld)f(only)g(pro)s(duces)e(an)i(empt)m(y)g (string.)57 b(F)-8 b(or)150 869 y(example:)390 1000 y Fz(if)47 b(\($\(NF+1\))f(!=)h(""\))581 1110 y(print)f("can't)g(happen") 390 1219 y(else)581 1329 y(print)g("everything)f(is)i(normal")150 1461 y FB(should)41 b(prin)m(t)g(`)p Fz(everything)28 b(is)h(normal)p FB(',)43 b(b)s(ecause)f Fz(NF+1)e FB(is)i(certain)g(to) g(b)s(e)f(out)h(of)g(range.)74 b(\(See)150 1570 y(Section)29 b(6.4.1)g([The)f Fz(if)p FB(-)p Fz(else)f FB(Statemen)m(t],)j(page)f (99,)g(for)f(more)g(information)g(ab)s(out)g Fz(awk)p FB('s)f Fz(if-else)150 1680 y FB(statemen)m(ts.)52 b(See)33 b(Section)i(5.10)g([V)-8 b(ariable)35 b(T)m(yping)e(and)g(Comparison)g (Expressions],)h(page)g(85,)h(for)150 1789 y(more)c(information)f(ab)s (out)g(the)h(`)p Fz(!=)p FB(')f(op)s(erator.\))275 1921 y(It)e(is)f(imp)s(ortan)m(t)h(to)h(note)g(that)f(making)g(an)g (assignmen)m(t)h(to)f(an)g(existing)h(\014eld)f(c)m(hanges)g(the)g(v)-5 b(alue)150 2030 y(of)27 b Fz($0)f FB(but)h(do)s(es)f(not)h(c)m(hange)h (the)f(v)-5 b(alue)28 b(of)f Fz(NF)p FB(,)g(ev)m(en)h(when)d(y)m(ou)j (assign)f(the)g(empt)m(y)g(string)g(to)h(a)f(\014eld.)150 2140 y(F)-8 b(or)31 b(example:)390 2271 y Fz($)47 b(echo)g(a)h(b)f(c)g (d)h(|)f(awk)g('{)g(OFS)g(=)h(":";)e($2)i(=)f("")390 2381 y(>)1097 b(print)47 b($0;)g(print)f(NF)h(}')410 2495 y Fy(a)533 2491 y Fz(a::c:d)410 2604 y Fy(a)533 2600 y Fz(4)150 2732 y FB(The)34 b(\014eld)g(is)g(still)i(there;)h(it)e (just)f(has)g(an)g(empt)m(y)h(v)-5 b(alue,)36 b(denoted)f(b)m(y)f(the)h (t)m(w)m(o)g(colons)h(b)s(et)m(w)m(een)f(`)p Fz(a)p FB(')150 2841 y(and)30 b(`)p Fz(c)p FB('.)41 b(This)29 b(example)i(sho)m(ws)f (what)h(happ)s(ens)d(if)j(y)m(ou)f(create)i(a)f(new)f(\014eld:)390 2973 y Fz($)47 b(echo)g(a)h(b)f(c)g(d)h(|)f(awk)g('{)g(OFS)g(=)h(":";)e ($2)i(=)f("";)g($6)g(=)h("new")390 3082 y(>)1097 b(print)47 b($0;)g(print)f(NF)h(}')410 3196 y Fy(a)533 3192 y Fz(a::c:d::new)410 3306 y Fy(a)533 3302 y Fz(6)150 3433 y FB(The)33 b(in)m(terv)m(ening)h (\014eld,)g Fz($5)p FB(,)g(is)f(created)i(with)e(an)g(empt)m(y)h(v)-5 b(alue)33 b(\(indicated)i(b)m(y)e(the)g(second)h(pair)f(of)150 3543 y(adjacen)m(t)f(colons\),)f(and)f Fz(NF)g FB(is)g(up)s(dated)f (with)i(the)f(v)-5 b(alue)31 b(six.)275 3674 y(Decremen)m(ting)42 b Fz(NF)f FB(thro)m(ws)g(a)m(w)m(a)m(y)i(the)e(v)-5 b(alues)41 b(of)g(the)h(\014elds)e(after)i(the)f(new)f(v)-5 b(alue)42 b(of)f Fz(NF)g FB(and)150 3784 y(recomputes)31 b Fz($0)p FB(.)80 b(Here)31 b(is)f(an)h(example:)-1937 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: lflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: rflashlight.small.xpic (xpic) %%CreationDate: Tue Dec 12 09:51:27 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 80 32 m 64 24 l x 32 24 m 56 32 l x 32 8 m 56 0 l x 8 16 56 16 e 0 24 32 8 b 64 16 m 80 16 l x 64 8 m 80 0 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 390 3915 a Fz($)47 b(echo)g(a)h(b)f(c)g(d)h(e)f(f)h(|)f (awk)g('{)g(print)g("NF)g(=",)g(NF;)390 4025 y(>)1336 b(NF)47 b(=)h(3;)f(print)f($0)h(}')410 4138 y Fy(a)533 4134 y Fz(NF)g(=)h(6)410 4248 y Fy(a)533 4244 y Fz(a)g(b)f(c)275 4376 y Fr(Caution:)37 b FB(Some)24 b(v)m(ersions)h(of)f Fz(awk)f FB(don't)h(rebuild)f Fz($0)h FB(when)f Fz(NF)g FB(is)h(decremen)m(ted.)39 b(Ca)m(v)m(eat)27 b(emptor.)275 4507 y(Finally)-8 b(,)35 b(there)e(are)h(times)g(when)e(it)i(is)f(con)m (v)m(enien)m(t)i(to)f(force)g Fz(awk)e FB(to)i(rebuild)e(the)i(en)m (tire)g(record,)150 4617 y(using)41 b(the)g(curren)m(t)g(v)-5 b(alue)41 b(of)h(the)f(\014elds)g(and)f Fz(OFS)p FB(.)72 b(T)-8 b(o)42 b(do)f(this,)j(use)d(the)g(seemingly)h(inno)s(cuous)150 4726 y(assignmen)m(t:)390 4858 y Fz($1)47 b(=)h($1)142 b(#)48 b(force)e(record)g(to)h(be)h(reconstituted)390 4967 y(print)e($0)95 b(#)48 b(or)f(whatever)e(else)i(with)g($0)150 5099 y FB(This)30 b(forces)g Fz(awk)g FB(rebuild)f(the)i(record.)40 b(It)31 b(do)s(es)f(help)g(to)h(add)f(a)h(commen)m(t,)g(as)g(w)m(e'v)m (e)h(sho)m(wn)e(here.)275 5230 y(There)37 b(is)g(a)h(\015ip)f(side)g (to)h(the)g(relationship)g(b)s(et)m(w)m(een)g Fz($0)f FB(and)g(the)h(\014elds.)61 b(An)m(y)38 b(assignmen)m(t)g(to)150 5340 y Fz($0)h FB(causes)h(the)g(record)f(to)i(b)s(e)d(reparsed)h(in)m (to)i(\014elds)e(using)g(the)h Fw(curr)-5 b(ent)49 b FB(v)-5 b(alue)40 b(of)f Fz(FS)p FB(.)68 b(This)39 b(also)p eop end %%Page: 43 55 TeXDict begin 43 54 bop 2302 -116 a Fr(Chapter)30 b(3:)41 b(Reading)31 b(Input)e(Files)92 b FB(43)150 299 y(applies)35 b(to)h(an)m(y)f(built-in)g(function)f(that)i(up)s(dates)e Fz($0)p FB(,)i(suc)m(h)e(as)h Fz(sub)f FB(and)h Fz(gsub)f FB(\(see)h(Section)h(8.1.3)150 408 y([String-Manipulation)31 b(F)-8 b(unctions],)32 b(page)f(129\).)150 631 y FA(3.5)68 b(Sp)t(ecifying)45 b(Ho)l(w)h(Fields)f(Are)g(Separated)150 790 y FB(The)32 b Fx(\014eld)g(separator)p FB(,)i(whic)m(h)e(is)g (either)h(a)g(single)g(c)m(haracter)h(or)e(a)h(regular)f(expression,)h (con)m(trols)h(the)150 900 y(w)m(a)m(y)24 b Fz(awk)e FB(splits)i(an)f(input)f(record)h(in)m(to)h(\014elds.)38 b Fz(awk)22 b FB(scans)h(the)h(input)e(record)h(for)g(c)m(haracter)i (sequences)150 1009 y(that)31 b(matc)m(h)g(the)g(separator;)g(the)g (\014elds)e(themselv)m(es)j(are)f(the)f(text)i(b)s(et)m(w)m(een)f(the)f (matc)m(hes.)275 1138 y(In)39 b(the)i(examples)f(that)h(follo)m(w,)k(w) m(e)40 b(use)g(the)h(bullet)f(sym)m(b)s(ol)g(\()p Fy(\017)p FB(\))i(to)f(represen)m(t)f(spaces)h(in)f(the)150 1248 y(output.)g(If)30 b(the)h(\014eld)f(separator)h(is)f(`)p Fz(oo)p FB(',)h(then)f(the)g(follo)m(wing)i(line:)390 1377 y Fz(moo)47 b(goo)g(gai)g(pan)150 1507 y FB(is)32 b(split)f(in)m(to)i(three)f(\014elds:)42 b(`)p Fz(m)p FB(',)32 b(`)p Fy(\017)p Fz(g)p FB(',)h(and)e(`)p Fy(\017)p Fz(gai)p Fy(\017)p Fz(pan)p FB('.)44 b(Note)33 b(the)f(leading)g (spaces)g(in)f(the)h(v)-5 b(alues)32 b(of)150 1616 y(the)f(second)f (and)g(third)f(\014elds.)275 1746 y(The)34 b(\014eld)h(separator)h(is)f (represen)m(ted)g(b)m(y)g(the)h(built-in)f(v)-5 b(ariable)36 b Fz(FS)p FB(.)55 b(Shell)35 b(programmers)f(tak)m(e)150 1855 y(note:)42 b Fz(awk)30 b FB(do)s(es)h Fw(not)40 b FB(use)30 b(the)h(name)g Fz(IFS)f FB(that)i(is)f(used)f(b)m(y)g(the)h (POSIX-complian)m(t)h(shells)f(\(suc)m(h)g(as)150 1965 y(the)g(Unix)f(Bourne)g(shell,)h Fz(sh)p FB(,)f(or)g Fz(bash)p FB(\).)275 2094 y(The)j(v)-5 b(alue)35 b(of)g Fz(FS)e FB(can)i(b)s(e)f(c)m(hanged)h(in)f(the)g Fz(awk)g FB(program)g(with)g(the)h(assignmen)m(t)g(op)s(erator,)h(`)p Fz(=)p FB(')150 2204 y(\(see)25 b(Section)g(5.7)g([Assignmen)m(t)g (Expressions],)g(page)g(81\).)40 b(Often)23 b(the)i(righ)m(t)f(time)h (to)g(do)f(this)g(is)g(at)h(the)150 2313 y(b)s(eginning)k(of)g (execution)i(b)s(efore)e(an)m(y)g(input)g(has)g(b)s(een)f(pro)s (cessed,)h(so)h(that)g(the)f(v)m(ery)h(\014rst)f(record)g(is)150 2423 y(read)e(with)g(the)h(prop)s(er)d(separator.)41 b(T)-8 b(o)27 b(do)g(this,)h(use)f(the)h(sp)s(ecial)g Fz(BEGIN)e FB(pattern)h(\(see)h(Section)g(6.1.4)150 2532 y([The)k Fz(BEGIN)e FB(and)h Fz(END)g FB(Sp)s(ecial)h(P)m(atterns],)i (page)f(96\).)46 b(F)-8 b(or)33 b(example,)g(here)e(w)m(e)i(set)f(the)g (v)-5 b(alue)33 b(of)f Fz(FS)150 2642 y FB(to)f(the)g(string)f Fz(",")p FB(:)390 2771 y Fz(awk)47 b('BEGIN)f({)h(FS)h(=)f(",")g(})g(;) h({)f(print)g($2)g(}')150 2901 y FB(Giv)m(en)31 b(the)g(input)e(line:) 390 3030 y Fz(John)47 b(Q.)g(Smith,)f(29)h(Oak)g(St.,)g(Walamazoo,)e (MI)i(42139)150 3159 y FB(this)30 b Fz(awk)g FB(program)g(extracts)i (and)d(prin)m(ts)h(the)h(string)f(`)p Fy(\017)p Fz(29)p Fy(\017)p Fz(Oak)p Fy(\017)p Fz(St.)p FB('.)275 3289 y(Sometimes)37 b(the)g(input)f(data)i(con)m(tains)g(separator)g(c)m (haracters)g(that)g(don't)e(separate)i(\014elds)f(the)150 3398 y(w)m(a)m(y)31 b(y)m(ou)f(though)m(t)h(they)f(w)m(ould.)40 b(F)-8 b(or)31 b(instance,)g(the)f(p)s(erson's)f(name)h(in)g(the)g (example)h(w)m(e)f(just)g(used)150 3508 y(migh)m(t)h(ha)m(v)m(e)h(a)e (title)i(or)f(su\016x)e(attac)m(hed,)k(suc)m(h)d(as:)390 3637 y Fz(John)47 b(Q.)g(Smith,)f(LXIX,)g(29)h(Oak)g(St.,)g(Walamazoo,) e(MI)i(42139)150 3766 y FB(The)30 b(same)h(program)f(w)m(ould)g (extract)i(`)p Fy(\017)p Fz(LXIX)p FB(',)e(instead)h(of)f(`)p Fy(\017)p Fz(29)p Fy(\017)p Fz(Oak)p Fy(\017)p Fz(St.)p FB('.)41 b(If)30 b(y)m(ou)g(w)m(ere)h(exp)s(ecting)150 3876 y(the)26 b(program)g(to)g(prin)m(t)g(the)g(address,)g(y)m(ou)g(w)m (ould)f(b)s(e)h(surprised.)37 b(The)25 b(moral)h(is)g(to)h(c)m(ho)s (ose)f(y)m(our)g(data)150 3985 y(la)m(y)m(out)31 b(and)e(separator)h(c) m(haracters)h(carefully)e(to)h(prev)m(en)m(t)g(suc)m(h)f(problems.)40 b(\(If)29 b(the)h(data)g(is)f(not)h(in)f(a)150 4095 y(form)c(that)h(is) f(easy)h(to)g(pro)s(cess,)g(p)s(erhaps)e(y)m(ou)i(can)f(massage)i(it)f (\014rst)e(with)h(a)h(separate)g Fz(awk)f FB(program.\))275 4224 y(Fields)j(are)g(normally)g(separated)g(b)m(y)f(whitespace)i (sequences)e(\(spaces,)j(tabs,)e(and)f(newlines\),)i(not)150 4334 y(b)m(y)j(single)h(spaces.)46 b(Tw)m(o)32 b(spaces)g(in)g(a)g(ro)m (w)g(do)g(not)g(delimit)h(an)f(empt)m(y)g(\014eld.)46 b(The)31 b(default)h(v)-5 b(alue)33 b(of)150 4444 y(the)27 b(\014eld)g(separator)h Fz(FS)e FB(is)i(a)f(string)g(con)m(taining)i(a) e(single)h(space,)h Fz(")h(")o FB(.)40 b(If)27 b Fz(awk)f FB(in)m(terpreted)h(this)g(v)-5 b(alue)150 4553 y(in)31 b(the)h(usual)f(w)m(a)m(y)-8 b(,)33 b(eac)m(h)g(space)f(c)m(haracter)h (w)m(ould)e(separate)h(\014elds,)f(so)h(t)m(w)m(o)h(spaces)f(in)f(a)h (ro)m(w)f(w)m(ould)150 4663 y(mak)m(e)f(an)f(empt)m(y)g(\014eld)g(b)s (et)m(w)m(een)g(them.)40 b(The)29 b(reason)g(this)g(do)s(es)f(not)i (happ)s(en)d(is)i(that)g(a)h(single)f(space)150 4772 y(as)j(the)f(v)-5 b(alue)32 b(of)f Fz(FS)g FB(is)h(a)f(sp)s(ecial)h (case|it)h(is)e(tak)m(en)i(to)f(sp)s(ecify)f(the)g(default)h(manner)f (of)g(delimiting)150 4882 y(\014elds.)275 5011 y(If)h Fz(FS)g FB(is)h(an)m(y)g(other)g(single)g(c)m(haracter,)i(suc)m(h)d(as) h Fz(",")p FB(,)g(then)f(eac)m(h)i(o)s(ccurrence)f(of)g(that)g(c)m (haracter)150 5121 y(separates)g(t)m(w)m(o)h(\014elds.)46 b(Tw)m(o)33 b(consecutiv)m(e)h(o)s(ccurrences)f(delimit)g(an)f(empt)m (y)h(\014eld.)47 b(If)32 b(the)g(c)m(haracter)150 5230 y(o)s(ccurs)e(at)h(the)g(b)s(eginning)f(or)g(the)h(end)f(of)g(the)h (line,)g(that)g(to)s(o)g(delimits)h(an)e(empt)m(y)h(\014eld.)40 b(The)30 b(space)150 5340 y(c)m(haracter)i(is)e(the)h(only)f(single)h (c)m(haracter)h(that)f(do)s(es)f(not)h(follo)m(w)h(these)f(rules.)p eop end %%Page: 44 56 TeXDict begin 44 55 bop 150 -116 a FB(44)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fj(3.5.1)63 b(Using)42 b(Regular)f(Expressions)h(to)f(Separate)g (Fields)150 446 y FB(The)26 b(previous)h(subsection)g(discussed)f(the)h (use)f(of)h(single)h(c)m(haracters)g(or)f(simple)g(strings)f(as)h(the)g (v)-5 b(alue)150 555 y(of)26 b Fz(FS)p FB(.)39 b(More)27 b(generally)-8 b(,)29 b(the)e(v)-5 b(alue)27 b(of)f Fz(FS)g FB(ma)m(y)h(b)s(e)e(a)i(string)f(con)m(taining)i(an)m(y)f(regular)g (expression.)39 b(In)150 665 y(this)28 b(case,)h(eac)m(h)g(matc)m(h)f (in)g(the)g(record)f(for)h(the)g(regular)f(expression)h(separates)g (\014elds.)40 b(F)-8 b(or)28 b(example,)150 775 y(the)j(assignmen)m(t:) 390 907 y Fz(FS)47 b(=)h(",)f(\\t")150 1040 y FB(mak)m(es)30 b(ev)m(ery)g(area)h(of)e(an)g(input)g(line)h(that)g(consists)f(of)h(a)g (comma)g(follo)m(w)m(ed)h(b)m(y)e(a)h(space)g(and)f(a)g(T)-8 b(AB)150 1150 y(in)m(to)31 b(a)g(\014eld)f(separator.)275 1282 y(F)-8 b(or)40 b(a)g(less)g(trivial)h(example)f(of)g(a)g(regular)g (expression,)i(try)d(using)g(single)i(spaces)f(to)g(separate)150 1392 y(\014elds)35 b(the)g(w)m(a)m(y)i(single)f(commas)g(are)g(used.)55 b Fz(FS)34 b FB(can)i(b)s(e)f(set)h(to)g Fz("[)47 b(]")35 b FB(\(left)h(brac)m(k)m(et,)j(space,)e(righ)m(t)150 1502 y(brac)m(k)m(et\).)56 b(This)34 b(regular)h(expression)g(matc)m (hes)h(a)f(single)g(space)h(and)e(nothing)h(else)h(\(see)f(Chapter)g(2) 150 1611 y([Regular)c(Expressions],)f(page)h(24\).)275 1744 y(There)26 b(is)g(an)h(imp)s(ortan)m(t)g(di\013erence)g(b)s(et)m (w)m(een)g(the)g(t)m(w)m(o)h(cases)g(of)f(`)p Fz(FS)j(=)g(")g(")o FB(')d(\(a)h(single)f(space\))h(and)150 1853 y(`)p Fz(FS)i(=)g("[)g (\\t\\n]+")n FB(')36 b(\(a)h(regular)f(expression)f(matc)m(hing)i(one)f (or)g(more)g(spaces,)i(tabs,)g(or)e(newlines\).)150 1963 y(F)-8 b(or)25 b(b)s(oth)e(v)-5 b(alues)25 b(of)f Fz(FS)p FB(,)h(\014elds)f(are)g(separated)h(b)m(y)f Fx(runs)i FB(\(m)m(ultiple)f(adjacen)m(t)g(o)s(ccurrences\))g(of)f(spaces,)150 2073 y(tabs,)37 b(and/or)d(newlines.)55 b(Ho)m(w)m(ev)m(er,)38 b(when)c(the)i(v)-5 b(alue)35 b(of)g Fz(FS)g FB(is)g Fz(")30 b(")p FB(,)36 b Fz(awk)e FB(\014rst)g(strips)h(leading)h(and) 150 2182 y(trailing)29 b(whitespace)f(from)f(the)h(record)g(and)f(then) g(decides)h(where)f(the)h(\014elds)f(are.)40 b(F)-8 b(or)29 b(example,)g(the)150 2292 y(follo)m(wing)j(pip)s(eline)e(prin)m(ts)g(`) p Fz(b)p FB(':)390 2424 y Fz($)47 b(echo)g(')h(a)f(b)g(c)h(d)f(')h(|)f (awk)g('{)g(print)g($2)g(}')410 2538 y Fy(a)533 2534 y Fz(b)150 2667 y FB(Ho)m(w)m(ev)m(er,)33 b(this)d(pip)s(eline)g(prin)m (ts)g(`)p Fz(a)p FB(')g(\(note)i(the)e(extra)h(spaces)g(around)e(eac)m (h)j(letter\):)390 2800 y Fz($)47 b(echo)g(')h(a)95 b(b)g(c)g(d)48 b(')f(|)g(awk)g('BEGIN)f({)i(FS)f(=)h("[)f(\\t\\n]+")f(})390 2909 y(>)1622 b({)48 b(print)e($2)h(}')410 3023 y Fy(a)533 3019 y Fz(a)150 3151 y FB(In)30 b(this)g(case,)i(the)e(\014rst)g (\014eld)g(is)g Fx(n)m(ull)k FB(or)c(empt)m(y)-8 b(.)275 3284 y(The)38 b(stripping)h(of)g(leading)h(and)e(trailing)j(whitespace) e(also)i(comes)e(in)m(to)i(pla)m(y)e(whenev)m(er)g Fz($0)g FB(is)150 3394 y(recomputed.)i(F)-8 b(or)31 b(instance,)g(study)e(this) i(pip)s(eline:)390 3526 y Fz($)47 b(echo)g(')143 b(a)47 b(b)h(c)f(d')h(|)f(awk)g('{)g(print;)f($2)h(=)h($2;)f(print)f(}')410 3640 y Fy(a)676 3636 y Fz(a)i(b)f(c)h(d)410 3750 y Fy(a)533 3746 y Fz(a)g(b)f(c)h(d)150 3878 y FB(The)30 b(\014rst)f Fz(print)g FB(statemen)m(t)j(prin)m(ts)e(the)g(record)h(as)f(it)h(w)m (as)g(read,)f(with)g(leading)h(whitespace)g(in)m(tact.)150 3988 y(The)f(assignmen)m(t)h(to)g Fz($2)e FB(rebuilds)g Fz($0)h FB(b)m(y)g(concatenating)j Fz($1)c FB(through)h Fz($NF)f FB(together,)j(separated)f(b)m(y)150 4097 y(the)37 b(v)-5 b(alue)38 b(of)f Fz(OFS)p FB(.)60 b(Because)38 b(the)g(leading)f(whitespace)h(w)m(as)g(ignored)f(when)f(\014nding)g Fz($1)p FB(,)i(it)g(is)f(not)150 4207 y(part)30 b(of)h(the)f(new)g Fz($0)p FB(.)40 b(Finally)-8 b(,)32 b(the)f(last)g Fz(print)e FB(statemen)m(t)j(prin)m(ts)e(the)h(new)f Fz($0)p FB(.)150 4403 y Fj(3.5.2)63 b(Making)41 b(Eac)m(h)e(Character)h(a)h(Separate)f (Field)150 4550 y FB(There)26 b(are)i(times)f(when)f(y)m(ou)h(ma)m(y)h (w)m(an)m(t)g(to)f(examine)h(eac)m(h)g(c)m(haracter)g(of)f(a)h(record)f (separately)-8 b(.)41 b(This)150 4659 y(can)h(b)s(e)e(done)i(in)f Fz(gawk)f FB(b)m(y)h(simply)g(assigning)h(the)g(n)m(ull)f(string)g(\()p Fz("")p FB(\))h(to)g Fz(FS)p FB(.)73 b(In)41 b(this)g(case,)46 b(eac)m(h)150 4769 y(individual)30 b(c)m(haracter)i(in)e(the)g(record)h (b)s(ecomes)f(a)h(separate)g(\014eld.)41 b(F)-8 b(or)31 b(example:)390 4902 y Fz($)47 b(echo)g(a)h(b)f(|)g(gawk)g('BEGIN)f({)i (FS)f(=)g("")g(})390 5011 y(>)859 b({)390 5121 y(>)1050 b(for)47 b(\(i)g(=)g(1;)g(i)h(<=)f(NF;)g(i)g(=)h(i)f(+)h(1\))390 5230 y(>)1241 b(print)46 b("Field",)g(i,)h("is",)f($i)390 5340 y(>)859 b(}')p eop end %%Page: 45 57 TeXDict begin 45 56 bop 2302 -116 a Fr(Chapter)30 b(3:)41 b(Reading)31 b(Input)e(Files)92 b FB(45)410 303 y Fy(a)533 299 y Fz(Field)47 b(1)g(is)g(a)410 412 y Fy(a)533 408 y Fz(Field)g(2)g(is)410 522 y Fy(a)533 518 y Fz(Field)g(3)g(is)g(b)275 656 y FB(T)-8 b(raditionally)g(,)29 b(the)e(b)s(eha)m(vior)f(of)h Fz(FS)f FB(equal)h(to)h Fz("")e FB(w)m(as)h(not)f(de\014ned.)39 b(In)25 b(this)i(case,)i(most)e(v)m(ersions)150 765 y(of)h(Unix)h Fz(awk)e FB(simply)h(treat)h(the)g(en)m(tire)g(record)f(as)h(only)f(ha) m(ving)h(one)g(\014eld.)79 b(In)28 b(compatibilit)m(y)i(mo)s(de)236 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 875 a(\(see)37 b(Section)g(11.2)h([Command-Line)e (Options],)i(page)f(173\),)j(if)c Fz(FS)g FB(is)g(the)h(n)m(ull)f (string,)i(then)e Fz(gawk)150 984 y FB(also)31 b(b)s(eha)m(v)m(es)g (this)f(w)m(a)m(y)-8 b(.)150 1187 y Fj(3.5.3)63 b(Setting)41 b Fh(FS)g Fj(from)h(the)f(Command)g(Line)150 1334 y Fz(FS)30 b FB(can)g(b)s(e)g(set)h(on)f(the)h(command)f(line.)41 b(Use)31 b(the)f(`)p Fz(-F)p FB(')h(option)g(to)g(do)f(so.)41 b(F)-8 b(or)31 b(example:)390 1471 y Fz(awk)47 b(-F,)g(')p Fk(program)11 b Fz(')45 b Fk(input-files)150 1609 y FB(sets)e Fz(FS)e FB(to)i(the)g(`)p Fz(,)p FB(')f(c)m(haracter.)78 b(Notice)44 b(that)f(the)f(option)h(uses)f(an)g(upp)s(ercase)f(`)p Fz(F)p FB(')i(instead)f(of)h(a)150 1719 y(lo)m(w)m(ercase)37 b(`)p Fz(f)p FB('.)54 b(The)34 b(latter)i(option)f(\(`)p Fz(-f)p FB('\))h(sp)s(eci\014es)e(a)h(\014le)g(con)m(taining)h(an)f Fz(awk)e FB(program.)54 b(Case)35 b(is)150 1828 y(signi\014can)m(t)28 b(in)f(command-line)g(options:)40 b(the)27 b(`)p Fz(-F)p FB(')g(and)f(`)p Fz(-f)p FB(')h(options)h(ha)m(v)m(e)g(nothing)f(to)h (do)f(with)g(eac)m(h)150 1938 y(other.)56 b(Y)-8 b(ou)36 b(can)f(use)g(b)s(oth)g(options)h(at)g(the)f(same)h(time)g(to)g(set)g (the)g Fz(FS)e FB(v)-5 b(ariable)36 b Fw(and)46 b FB(get)37 b(an)e Fz(awk)150 2047 y FB(program)30 b(from)g(a)h(\014le.)275 2185 y(The)e(v)-5 b(alue)30 b(used)f(for)g(the)h(argumen)m(t)g(to)h(`)p Fz(-F)p FB(')e(is)h(pro)s(cessed)f(in)g(exactly)j(the)e(same)g(w)m(a)m (y)g(as)g(assign-)150 2295 y(men)m(ts)39 b(to)h(the)g(built-in)e(v)-5 b(ariable)40 b Fz(FS)p FB(.)67 b(An)m(y)39 b(sp)s(ecial)h(c)m (haracters)g(in)f(the)g(\014eld)g(separator)h(m)m(ust)f(b)s(e)150 2404 y(escap)s(ed)f(appropriately)-8 b(.)64 b(F)-8 b(or)39 b(example,)i(to)d(use)g(a)g(`)p Fz(\\)p FB(')h(as)f(the)g(\014eld)g (separator)g(on)g(the)g(command)150 2514 y(line,)31 b(y)m(ou)g(w)m (ould)f(ha)m(v)m(e)h(to)h(t)m(yp)s(e:)390 2651 y Fz(#)47 b(same)g(as)g(FS)g(=)h("\\\\")390 2761 y(awk)f(-F\\\\\\\\)f('...)o(')h (files)g(...)150 2899 y FB(Because)29 b(`)p Fz(\\)p FB(')e(is)g(used)g (for)g(quoting)h(in)f(the)g(shell,)i Fz(awk)d FB(sees)i(`)p Fz(-F\\\\)p FB('.)39 b(Then)26 b Fz(awk)g FB(pro)s(cesses)i(the)f(`)p Fz(\\\\)p FB(')g(for)150 3008 y(escap)s(e)j(c)m(haracters)h(\(see)f (Section)g(2.2)g([Escap)s(e)g(Sequences],)g(page)g(25\),)h(\014nally)e (yielding)h(a)g(single)g(`)p Fz(\\)p FB(')150 3118 y(to)h(use)f(for)g (the)h(\014eld)f(separator.)275 3255 y(As)41 b(a)g(sp)s(ecial)h(case,)j (in)c(compatibilit)m(y)i(mo)s(de)e(\(see)h(Section)g(11.2)g ([Command-Line)f(Options],)150 3365 y(page)34 b(173\),)h(if)e(the)h (argumen)m(t)f(to)h(`)p Fz(-F)p FB(')f(is)g(`)p Fz(t)p FB(',)h(then)f Fz(FS)f FB(is)h(set)h(to)g(the)f(T)-8 b(AB)33 b(c)m(haracter.)51 b(If)32 b(y)m(ou)i(t)m(yp)s(e)150 3474 y(`)p Fz(-F\\t)p FB(')e(at)h(the)f(shell,)i(without)e(an)m(y)h (quotes,)g(the)g(`)p Fz(\\)p FB(')f(gets)i(deleted,)g(so)e Fz(awk)g FB(\014gures)f(that)i(y)m(ou)g(really)150 3584 y(w)m(an)m(t)i(y)m(our)f(\014elds)f(to)i(b)s(e)e(separated)h(with)g (tabs)g(and)f(not)i(`)p Fz(t)p FB('s.)51 b(Use)34 b(`)p Fz(-v)c(FS="t")p FB(')j(or)h(`)p Fz(-F"[t]")p FB(')e(on)150 3694 y(the)f(command)f(line)g(if)h(y)m(ou)f(really)i(do)e(w)m(an)m(t)h (to)g(separate)h(y)m(our)e(\014elds)g(with)g(`)p Fz(t)p FB('s.)275 3831 y(F)-8 b(or)34 b(example,)i(let's)f(use)f(an)g Fz(awk)f FB(program)g(\014le)i(called)g(`)p Fz(baud.awk)p FB(')d(that)i(con)m(tains)i(the)e(pattern)150 3941 y Fz(/300/)29 b FB(and)h(the)g(action)i(`)p Fz(print)d($1)p FB(':)390 4078 y Fz(/300/)142 b({)47 b(print)g($1)g(})275 4216 y FB(Let's)27 b(also)g(set)g Fz(FS)f FB(to)h(b)s(e)f(the)h(`)p Fz(-)p FB(')f(c)m(haracter)i(and)e(run)f(the)i(program)f(on)h(the)f (\014le)h(`)p Fz(BBS-list)p FB('.)37 b(The)150 4326 y(follo)m(wing)i (command)f(prin)m(ts)g(a)g(list)h(of)f(the)g(names)g(of)g(the)h (bulletin)f(b)s(oards)f(that)h(op)s(erate)h(at)g(300)150 4435 y(baud)29 b(and)h(the)h(\014rst)e(three)i(digits)g(of)f(their)h (phone)e(n)m(um)m(b)s(ers:)390 4573 y Fz($)47 b(awk)g(-F-)g(-f)g (baud.awk)f(BBS-list)410 4686 y Fy(a)533 4682 y Fz(aardvark)237 b(555)410 4796 y Fy(a)533 4792 y Fz(alpo)410 4906 y Fy(a)533 4902 y Fz(barfly)333 b(555)410 5015 y Fy(a)533 5011 y Fz(bites)381 b(555)410 5125 y Fy(a)533 5121 y Fz(camelot)285 b(555)410 5234 y Fy(a)533 5230 y Fz(core)429 b(555)410 5344 y Fy(a)533 5340 y Fz(fooey)381 b(555)p eop end %%Page: 46 58 TeXDict begin 46 57 bop 150 -116 a FB(46)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)410 303 y Fy(a)533 299 y Fz(foot)429 b(555)410 412 y Fy(a)533 408 y Fz(macfoo)333 b(555)410 522 y Fy(a)533 518 y Fz(sdace)381 b(555)410 632 y Fy(a)533 628 y Fz(sabafoo)285 b(555)150 762 y FB(Note)32 b(the)e(second)h(line)f(of)h(output.)40 b(The)30 b(second)h(line)f(in)g(the)h(original)g(\014le)g(lo)s(ok)m(ed) g(lik)m(e)h(this:)390 897 y Fz(alpo-net)236 b(555-3412)h(2400/1200/300) e(A)275 1032 y FB(The)32 b(`)p Fz(-)p FB(')h(as)g(part)f(of)h(the)g (system's)g(name)g(w)m(as)g(used)f(as)h(the)g(\014eld)g(separator,)h (instead)f(of)g(the)g(`)p Fz(-)p FB(')150 1142 y(in)e(the)h(phone)e(n)m (um)m(b)s(er)g(that)i(w)m(as)g(originally)h(in)m(tended.)44 b(This)30 b(demonstrates)i(wh)m(y)f(y)m(ou)h(ha)m(v)m(e)g(to)h(b)s(e) 150 1251 y(careful)e(in)f(c)m(ho)s(osing)h(y)m(our)f(\014eld)g(and)g (record)g(separators.)275 1386 y(P)m(erhaps)j(the)g(most)h(common)g (use)g(of)f(a)h(single)g(c)m(haracter)i(as)e(the)f(\014eld)g(separator) i(o)s(ccurs)e(when)150 1496 y(pro)s(cessing)27 b(the)g(Unix)h(system)f (passw)m(ord)g(\014le.)39 b(On)27 b(man)m(y)g(Unix)g(systems,)h(eac)m (h)h(user)d(has)h(a)h(separate)150 1605 y(en)m(try)43 b(in)g(the)h(system)f(passw)m(ord)f(\014le,)47 b(one)d(line)f(p)s(er)f (user.)79 b(The)43 b(information)g(in)g(these)h(lines)f(is)150 1715 y(separated)36 b(b)m(y)g(colons.)58 b(The)36 b(\014rst)f(\014eld)g (is)h(the)g(user's)f(logon)i(name)f(and)g(the)g(second)g(is)f(the)i (user's)150 1825 y(\(encrypted)30 b(or)h(shado)m(w\))f(passw)m(ord.)40 b(A)31 b(passw)m(ord)e(\014le)i(en)m(try)g(migh)m(t)g(lo)s(ok)g(lik)m (e)g(this:)390 1959 y Fz(arnold:xyzzy:2076:10:Arn)o(old)41 b(Robbins:/home/arnold:/bin/)o(bas)o(h)275 2094 y FB(The)27 b(follo)m(wing)i(program)f(searc)m(hes)h(the)f(system)g(passw)m(ord)f (\014le)h(and)g(prin)m(ts)f(the)h(en)m(tries)h(for)f(users)150 2204 y(who)i(ha)m(v)m(e)i(no)e(passw)m(ord:)390 2339 y Fz(awk)47 b(-F:)g('$2)g(==)g(""')g(/etc/passwd)150 2538 y Fj(3.5.4)63 b(Field-Splitting)42 b(Summary)150 2685 y FB(It)d(is)h(imp)s(ortan)m(t)f(to)h(remem)m(b)s(er)f(that)g (when)g(y)m(ou)g(assign)h(a)g(string)f(constan)m(t)h(as)g(the)f(v)-5 b(alue)40 b(of)f Fz(FS)p FB(,)150 2795 y(it)j(undergo)s(es)f(normal)g Fz(awk)f FB(string)i(pro)s(cessing.)73 b(F)-8 b(or)43 b(example,)i(with)c(Unix)g Fz(awk)g FB(and)f Fz(gawk)p FB(,)k(the)150 2904 y(assignmen)m(t)28 b(`)p Fz(FS)i(=)g("\\..")p FB(')c(assigns)h(the)g(c)m(haracter)h(string)f Fz("..")f FB(to)i Fz(FS)e FB(\(the)h(bac)m(kslash)h(is)f(stripp)s(ed\).)150 3014 y(This)h(creates)j(a)e(regexp)h(meaning)f(\\\014elds)g(are)h (separated)f(b)m(y)g(o)s(ccurrences)h(of)f(an)m(y)g(t)m(w)m(o)i(c)m (haracters.")150 3124 y(If)23 b(instead)g(y)m(ou)g(w)m(an)m(t)h (\014elds)e(to)i(b)s(e)f(separated)g(b)m(y)g(a)g(literal)i(p)s(erio)s (d)d(follo)m(w)m(ed)i(b)m(y)f(an)m(y)g(single)h(c)m(haracter,)150 3233 y(use)30 b(`)p Fz(FS)g(=)g("\\\\..")p FB('.)275 3368 y(The)24 b(follo)m(wing)j(table)f(summarizes)f(ho)m(w)h(\014elds)e (are)i(split,)h(based)e(on)g(the)h(v)-5 b(alue)25 b(of)h Fz(FS)e FB(\(`)p Fz(==)p FB(')i(means)150 3478 y(\\is)31 b(equal)g(to"\):)150 3637 y Fz(FS)f(==)g(")g(")102 b FB(Fields)39 b(are)f(separated)h(b)m(y)f(runs)f(of)h(whitespace.)65 b(Leading)38 b(and)g(trailing)h(whitespace)630 3747 y(are)31 b(ignored.)41 b(This)29 b(is)i(the)f(default.)150 3907 y Fz(FS)g(==)g Fk(any)f(other)g(single)g(character)630 4016 y FB(Fields)36 b(are)g(separated)f(b)m(y)h(eac)m(h)g(o)s (ccurrence)f(of)h(the)f(c)m(haracter.)58 b(Multiple)36 b(successiv)m(e)630 4126 y(o)s(ccurrences)f(delimit)h(empt)m(y)g (\014elds,)h(as)e(do)g(leading)i(and)d(trailing)j(o)s(ccurrences.)55 b(The)630 4236 y(c)m(haracter)32 b(can)f(ev)m(en)g(b)s(e)e(a)i(regexp)g (metac)m(haracter;)i(it)e(do)s(es)f(not)h(need)f(to)h(b)s(e)f(escap)s (ed.)150 4395 y Fz(FS)g(==)g Fk(regexp)630 4505 y FB(Fields)j(are)g (separated)g(b)m(y)g(o)s(ccurrences)g(of)g(c)m(haracters)h(that)f(matc) m(h)h Fx(regexp)p FB(.)48 b(Leading)630 4615 y(and)30 b(trailing)h(matc)m(hes)h(of)e Fx(regexp)k FB(delimit)d(empt)m(y)g (\014elds.)150 4774 y Fz(FS)f(==)g("")132 b FB(Eac)m(h)40 b(individual)e(c)m(haracter)j(in)d(the)h(record)g(b)s(ecomes)h(a)f (separate)h(\014eld.)66 b(\(This)39 b(is)g(a)630 4884 y Fz(gawk)29 b FB(extension;)i(it)g(is)g(not)f(sp)s(eci\014ed)g(b)m(y)g (the)h(POSIX)e(standard.\))150 5083 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b(Changing)42 b Fh(FS)f Fj(Do)s(es)h(Not)f(A\013ect)e(the)i (Fields)150 5230 y FB(According)30 b(to)g(the)g(POSIX)e(standard,)h Fz(awk)f FB(is)i(supp)s(osed)d(to)j(b)s(eha)m(v)m(e)g(as)g(if)f(eac)m (h)i(record)e(is)g(split)h(in)m(to)150 5340 y(\014elds)36 b(at)g(the)h(time)f(it)h(is)f(read.)58 b(In)35 b(particular,)j(this)e (means)g(that)h(if)f(y)m(ou)g(c)m(hange)i(the)e(v)-5 b(alue)36 b(of)h Fz(FS)p eop end %%Page: 47 59 TeXDict begin 47 58 bop 2302 -116 a Fr(Chapter)30 b(3:)41 b(Reading)31 b(Input)e(Files)92 b FB(47)150 299 y(after)27 b(a)h(record)f(is)g(read,)g(the)h(v)-5 b(alue)27 b(of)g(the)g(\014elds) g(\(i.e.,)i(ho)m(w)e(they)g(w)m(ere)h(split\))f(should)f(re\015ect)i (the)f(old)150 408 y(v)-5 b(alue)31 b(of)f Fz(FS)p FB(,)g(not)h(the)g (new)e(one.)275 537 y(Ho)m(w)m(ev)m(er,)j(man)m(y)e(implemen)m(tations) i(of)e Fz(awk)f FB(do)h(not)g(w)m(ork)g(this)g(w)m(a)m(y)-8 b(.)42 b(Instead,)31 b(they)f(defer)f(split-)150 647 y(ting)41 b(the)g(\014elds)g(un)m(til)g(a)g(\014eld)f(is)h(actually)h (referenced.)72 b(The)41 b(\014elds)f(are)h(split)g(using)f(the)h Fw(curr)-5 b(ent)150 756 y FB(v)g(alue)32 b(of)g Fz(FS)p FB(!)88 b(This)31 b(b)s(eha)m(vior)g(can)h(b)s(e)f(di\016cult)h(to)g (diagnose.)45 b(The)31 b(follo)m(wing)j(example)e(illustrates)237 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 866 a(the)35 b(di\013erence)h(b)s(et)m(w)m(een)g(the)g (t)m(w)m(o)g(metho)s(ds.)55 b(\(The)35 b Fz(sed)2205 833 y Fo(3)2277 866 y FB(command)g(prin)m(ts)f(just)h(the)h(\014rst)e (line)i(of)150 975 y(`)p Fz(/etc/passwd)p FB('.\))390 1104 y Fz(sed)47 b(1q)g(/etc/passwd)e(|)i(awk)g('{)g(FS)h(=)f(":")g(;)g (print)g($1)g(}')150 1233 y FB(whic)m(h)30 b(usually)g(prin)m(ts:)390 1361 y Fz(root)150 1490 y FB(on)g(an)h(incorrect)g(implemen)m(tation)h (of)e Fz(awk)p FB(,)g(while)g Fz(gawk)g FB(prin)m(ts)g(something)g(lik) m(e:)390 1619 y Fz(root:nSijPlPhZZwgE:0:0:R)o(oot:)o(/:)150 1806 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b Fh(FS)41 b Fj(and)g Fh(IGNORECASE)150 1953 y FB(The)23 b Fz(IGNORECASE)e FB(v)-5 b(ariable)25 b(\(see)g(Section)g(6.5.1)g([Built-in)g(V)-8 b(ariables)25 b(That)f(Con)m(trol)h Fz(awk)p FB(],)g(page)f(107\))150 2063 y(a\013ects)36 b(\014eld)e(splitting)h Fw(only)43 b FB(when)33 b(the)h(v)-5 b(alue)35 b(of)g Fz(FS)e FB(is)i(a)f(regexp.) 53 b(It)34 b(has)g(no)h(e\013ect)g(when)f Fz(FS)f FB(is)i(a)150 2172 y(single)c(c)m(haracter,)h(ev)m(en)f(if)g(that)g(c)m(haracter)h (is)e(a)h(letter.)42 b(Th)m(us,)29 b(in)h(the)h(follo)m(wing)h(co)s (de:)390 2301 y Fz(FS)47 b(=)h("c")390 2411 y(IGNORECASE)d(=)i(1)390 2520 y($0)g(=)h("aCa")390 2630 y(print)e($1)150 2758 y FB(The)25 b(output)g(is)g(`)p Fz(aCa)p FB('.)39 b(If)24 b(y)m(ou)i(really)g(w)m(an)m(t)g(to)g(split)g(\014elds)e(on)h(an)h (alphab)s(etic)f(c)m(haracter)i(while)e(ignor-)150 2868 y(ing)31 b(case,)i(use)e(a)h(regexp)f(that)h(will)f(do)h(it)f(for)g(y)m (ou.)44 b(E.g.,)32 b(`)p Fz(FS)e(=)g("[c]")p FB('.)42 b(In)31 b(this)g(case,)i Fz(IGNORECASE)150 2978 y FB(will)e(tak)m(e)h (e\013ect.)150 3198 y FA(3.6)68 b(Reading)46 b(Fixed-Width)f(Data)390 3358 y Fr(NOTE:)29 b FB(This)g(section)h(discusses)e(an)h(adv)-5 b(anced)30 b(feature)f(of)g Fz(gawk)p FB(.)40 b(If)28 b(y)m(ou)i(are)f(a)h(no)m(vice)390 3467 y Fz(awk)f FB(user,)h(y)m(ou)h (migh)m(t)g(w)m(an)m(t)g(to)h(skip)d(it)i(on)g(the)f(\014rst)g (reading.)275 3596 y Fz(gawk)35 b FB(v)m(ersion)i(2.13)g(in)m(tro)s (duced)f(a)h(facilit)m(y)h(for)f(dealing)g(with)f(\014xed-width)f (\014elds)h(with)g(no)g(dis-)150 3706 y(tinctiv)m(e)30 b(\014eld)f(separator.)40 b(F)-8 b(or)30 b(example,)g(data)f(of)g(this) f(nature)h(arises)f(in)h(the)g(input)e(for)i(old)f(F)-8 b(ortran)150 3815 y(programs)33 b(where)h(n)m(um)m(b)s(ers)e(are)i(run) e(together,)k(or)e(in)f(the)h(output)f(of)h(programs)g(that)g(did)f (not)h(an-)150 3925 y(ticipate)e(the)f(use)f(of)g(their)h(output)f(as)g (input)g(for)g(other)h(programs.)275 4053 y(An)38 b(example)h(of)g(the) g(latter)h(is)f(a)g(table)h(where)e(all)h(the)g(columns)g(are)g(lined)f (up)g(b)m(y)g(the)h(use)g(of)150 4163 y(a)f(v)-5 b(ariable)38 b(n)m(um)m(b)s(er)e(of)h(spaces)h(and)e Fw(empty)k(\014elds)g(ar)-5 b(e)40 b(just)f(sp)-5 b(ac)g(es)p FB(.)62 b(Clearly)-8 b(,)41 b Fz(awk)p FB('s)36 b(normal)h(\014eld)150 4273 y(splitting)g(based)g(on)f Fz(FS)g FB(do)s(es)g(not)h(w)m(ork)g(w)m (ell)g(in)f(this)h(case.)60 b(Although)37 b(a)g(p)s(ortable)f Fz(awk)g FB(program)150 4382 y(can)g(use)f(a)h(series)g(of)f Fz(substr)f FB(calls)j(on)e Fz($0)g FB(\(see)i(Section)f(8.1.3)h ([String-Manipulation)g(F)-8 b(unctions],)150 4492 y(page)31 b(129\),)h(this)f(is)f(a)m(wkw)m(ard)h(and)e(ine\016cien)m(t)j(for)e(a) h(large)g(n)m(um)m(b)s(er)e(of)i(\014elds.)275 4620 y(The)f(splitting)h (of)g(an)g(input)f(record)h(in)m(to)h(\014xed-width)d(\014elds)i(is)g (sp)s(eci\014ed)f(b)m(y)g(assigning)i(a)f(string)150 4730 y(con)m(taining)40 b(space-separated)g(n)m(um)m(b)s(ers)d(to)i (the)g(built-in)f(v)-5 b(ariable)39 b Fz(FIELDWIDTHS)p FB(.)62 b(Eac)m(h)39 b(n)m(um)m(b)s(er)150 4840 y(sp)s(eci\014es)29 b(the)g(width)g(of)g(the)h(\014eld,)f Fw(including)38 b FB(columns)28 b(b)s(et)m(w)m(een)i(\014elds.)40 b(If)29 b(y)m(ou)h(w)m(an)m(t)g(to)g(ignore)g(the)150 4949 y(columns)j(b)s(et)m (w)m(een)h(\014elds,)g(y)m(ou)g(can)f(sp)s(ecify)g(the)h(width)e(as)i (a)g(separate)g(\014eld)f(that)h(is)f(subsequen)m(tly)150 5059 y(ignored.)38 b(It)21 b(is)g(a)g(fatal)h(error)e(to)i(supply)d(a)j (\014eld)e(width)g(that)i(is)f(not)g(a)g(p)s(ositiv)m(e)h(n)m(um)m(b)s (er.)36 b(The)20 b(follo)m(wing)150 5168 y(data)31 b(is)f(the)h(output) f(of)h(the)f(Unix)g Fz(w)g FB(utilit)m(y)-8 b(.)43 b(It)30 b(is)h(useful)e(to)j(illustrate)f(the)g(use)f(of)g Fz(FIELDWIDTHS)p FB(:)p 150 5241 1200 4 v 199 5308 a Fo(3)275 5340 y Fn(The)25 b Fm(sed)i Fn(utilit)n(y)e(is)h(a)g(\\stream)h(editor.")35 b(Its)26 b(b)r(eha)n(vior)g(is)g(also)h(de\014ned)d(b)n(y)h(the)g (POSIX)g(standard.)p eop end %%Page: 48 60 TeXDict begin 48 59 bop 150 -116 a FB(48)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)438 299 y Fz(10:06pm)93 b(up)47 b(21)h(days,)e(14:04,)94 b(23)47 b(users)390 408 y(User)238 b(tty)333 b(login)94 b(idle)142 b(JCPU)g(PCPU)94 b(what)390 518 y(hzuo)238 b(ttyV0)f(8:58pm)571 b(9)286 b(5)95 b(vi)47 b(p24.tex)390 628 y(hzang)190 b(ttyV3)237 b(6:37pm)189 b(50)763 b(-csh)390 737 y(eklye)190 b(ttyV5)237 b(9:53pm)571 b(7)286 b(1)95 b(em)47 b(thes.tex)390 847 y(dportein)f(ttyV6)237 b(8:17pm)94 b(1:47)762 b(-csh)390 956 y(gierd)190 b(ttyD3)f(10:00pm)237 b(1)763 b(elm)390 1066 y(dave)238 b(ttyD4)f(9:47pm)571 b(4)286 b(4)95 b(w)390 1176 y(brent)190 b(ttyp0)f(26Jun91)94 b(4:46)g(26:46)142 b(4:41)94 b(bash)390 1285 y(dave)238 b(ttyq4)189 b(26Jun9115days)235 b(46)j(46)95 b(wnewmail)275 1431 y FB(The)20 b(follo)m(wing)i(program)e(tak)m(es)i(the)e(ab)s(o)m (v)m(e)i(input,)g(con)m(v)m(erts)g(the)f(idle)f(time)i(to)f(n)m(um)m(b) s(er)e(of)i(seconds,)150 1541 y(and)30 b(prin)m(ts)g(out)g(the)h (\014rst)e(t)m(w)m(o)j(\014elds)e(and)g(the)g(calculated)j(idle)d (time:)390 1687 y Fr(NOTE:)36 b FB(This)e(program)h(uses)g(a)h(n)m(um)m (b)s(er)e(of)i Fz(awk)e FB(features)i(that)g(ha)m(v)m(en't)g(b)s(een)f (in)m(tro-)390 1797 y(duced)30 b(y)m(et.)390 1943 y Fz(BEGIN)94 b({)48 b(FIELDWIDTHS)c(=)k("9)f(6)g(10)h(6)f(7)g(7)h(35")f(})390 2052 y(NR)g(>)h(2)f({)581 2162 y(idle)g(=)g($4)581 2271 y(sub\(/^)94 b(*/,)47 b("",)g(idle\))141 b(#)48 b(strip)e(leading)g (spaces)581 2381 y(if)h(\(idle)f(==)i(""\))772 2491 y(idle)e(=)i(0)581 2600 y(if)f(\(idle)f(~)i(/:/\))f({)772 2710 y(split\(idle,)e(t,)i (":"\))772 2819 y(idle)f(=)i(t[1])f(*)g(60)g(+)h(t[2])581 2929 y(})581 3039 y(if)f(\(idle)f(~)i(/days/\))772 3148 y(idle)e(*=)i(24)f(*)g(60)g(*)h(60)581 3367 y(print)e($1,)h($2,)g(idle) 390 3477 y(})275 3623 y FB(Running)28 b(the)j(program)f(on)g(the)h (data)g(pro)s(duces)e(the)i(follo)m(wing)h(results:)390 3769 y Fz(hzuo)285 b(ttyV0)94 b(0)390 3879 y(hzang)237 b(ttyV3)94 b(50)390 3988 y(eklye)237 b(ttyV5)94 b(0)390 4098 y(dportein)f(ttyV6)h(107)390 4208 y(gierd)237 b(ttyD3)94 b(1)390 4317 y(dave)285 b(ttyD4)94 b(0)390 4427 y(brent)237 b(ttyp0)94 b(286)390 4536 y(dave)285 b(ttyq4)94 b(1296000)275 4682 y FB(Another)33 b(\(p)s(ossibly)g(more)g(practical\))j(example)e (of)f(\014xed-width)f(input)h(data)h(is)f(the)h(input)e(from)150 4792 y(a)f(dec)m(k)g(of)g(balloting)h(cards.)41 b(In)30 b(some)h(parts)g(of)g(the)f(United)h(States,)h(v)m(oters)g(mark)e (their)h(c)m(hoices)h(b)m(y)150 4902 y(punc)m(hing)i(holes)h(in)f (computer)h(cards.)54 b(These)34 b(cards)g(are)i(then)e(pro)s(cessed)g (to)i(coun)m(t)f(the)g(v)m(otes)h(for)150 5011 y(an)m(y)26 b(particular)g(candidate)g(or)g(on)f(an)m(y)h(particular)g(issue.)39 b(Because)27 b(a)f(v)m(oter)g(ma)m(y)h(c)m(ho)s(ose)f(not)g(to)g(v)m (ote)150 5121 y(on)i(some)g(issue,)h(an)m(y)f(column)g(on)f(the)h(card) g(ma)m(y)h(b)s(e)e(empt)m(y)-8 b(.)41 b(An)27 b Fz(awk)g FB(program)h(for)g(pro)s(cessing)f(suc)m(h)150 5230 y(data)35 b(could)e(use)h(the)g Fz(FIELDWIDTHS)d FB(feature)j(to)g(simplify)g (reading)g(the)g(data.)52 b(\(Of)33 b(course,)i(getting)150 5340 y Fz(gawk)29 b FB(to)i(run)e(on)i(a)f(system)h(with)f(card)g (readers)g(is)h(another)f(story!\))p eop end %%Page: 49 61 TeXDict begin 49 60 bop 2302 -116 a Fr(Chapter)30 b(3:)41 b(Reading)31 b(Input)e(Files)92 b FB(49)275 299 y(Assigning)31 b(a)g(v)-5 b(alue)32 b(to)g Fz(FS)e FB(causes)i Fz(gawk)e FB(to)h(use)g Fz(FS)g FB(for)g(\014eld)f(splitting)i(again.)44 b(Use)31 b(`)p Fz(FS)f(=)g(FS)p FB(')h(to)150 408 y(mak)m(e)i(this)g (happ)s(en,)e(without)i(ha)m(ving)g(to)g(kno)m(w)g(the)f(curren)m(t)h (v)-5 b(alue)33 b(of)f Fz(FS)p FB(.)47 b(In)31 b(order)h(to)i(tell)f (whic)m(h)150 518 y(kind)27 b(of)i(\014eld)f(splitting)h(is)f(in)g (e\013ect,)j(use)d Fz(PROCINFO["FS"])c FB(\(see)29 b(Section)g(6.5.2)h ([Built-in)g(V)-8 b(ariables)150 628 y(That)34 b(Con)m(v)m(ey)h (Information],)g(page)g(110\).)54 b(The)34 b(v)-5 b(alue)34 b(is)g Fz("FS")f FB(if)h(regular)h(\014eld)e(splitting)i(is)f(b)s(eing) 150 737 y(used,)c(or)g(it)h(is)g Fz("FIELDWIDTHS")26 b FB(if)31 b(\014xed-width)e(\014eld)h(splitting)h(is)f(b)s(eing)g (used:)390 865 y Fz(if)47 b(\(PROCINFO["FS"])d(==)j("FS"\))581 975 y Fk(regular)f(field)g(splitting)56 b Fz(...)390 1085 y(else)581 1194 y Fk(fixed-width)45 b(field)h(splitting)56 b Fz(...)275 1323 y FB(This)29 b(information)h(is)g(useful)f(when)g (writing)g(a)i(function)e(that)i(needs)e(to)i(temp)s(orarily)f(c)m (hange)h Fz(FS)150 1432 y FB(or)d Fz(FIELDWIDTHS)p FB(,)e(read)i(some)h (records,)g(and)f(then)g(restore)h(the)f(original)i(settings)f(\(see)g (Section)g(12.5)150 1542 y([Reading)i(the)g(User)f(Database],)j(page)e (201,)h(for)e(an)g(example)h(of)g(suc)m(h)f(a)h(function\).)150 1762 y FA(3.7)68 b(Multiple-Line)46 b(Records)150 1921 y FB(In)31 b(some)h(databases,)i(a)e(single)h(line)f(cannot)g(con)m(v)m (enien)m(tly)j(hold)c(all)i(the)f(information)g(in)g(one)g(en)m(try)-8 b(.)150 2031 y(In)31 b(suc)m(h)h(cases,)i(y)m(ou)f(can)f(use)g(m)m (ultiline)h(records.)47 b(The)31 b(\014rst)h(step)g(in)g(doing)g(this)g (is)h(to)g(c)m(ho)s(ose)g(y)m(our)150 2140 y(data)e(format.)275 2268 y(One)26 b(tec)m(hnique)h(is)g(to)h(use)e(an)h(un)m(usual)e(c)m (haracter)k(or)d(string)h(to)h(separate)f(records.)39 b(F)-8 b(or)28 b(example,)150 2378 y(y)m(ou)c(could)g(use)g(the)g (formfeed)f(c)m(haracter)j(\(written)e(`)p Fz(\\f)p FB(')g(in)g Fz(awk)p FB(,)g(as)g(in)g(C\))g(to)g(separate)h(them,)h(making)150 2488 y(eac)m(h)e(record)f(a)g(page)h(of)f(the)h(\014le.)38 b(T)-8 b(o)23 b(do)g(this,)i(just)d(set)i(the)f(v)-5 b(ariable)24 b Fz(RS)e FB(to)i Fz("\\f")e FB(\(a)h(string)g(con)m (taining)150 2597 y(the)k(formfeed)f(c)m(haracter\).)41 b(An)m(y)27 b(other)g(c)m(haracter)h(could)e(equally)i(w)m(ell)f(b)s(e) f(used,)h(as)f(long)h(as)g(it)g(w)m(on't)150 2707 y(b)s(e)j(part)g(of)g (the)h(data)g(in)f(a)h(record.)275 2835 y(Another)d(tec)m(hnique)g(is)g (to)h(ha)m(v)m(e)h(blank)d(lines)i(separate)g(records.)39 b(By)29 b(a)f(sp)s(ecial)h(disp)s(ensation,)f(an)150 2945 y(empt)m(y)33 b(string)f(as)g(the)g(v)-5 b(alue)33 b(of)f Fz(RS)g FB(indicates)h(that)f(records)g(are)h(separated)f(b)m(y) g(one)h(or)f(more)g(blank)150 3054 y(lines.)53 b(When)34 b Fz(RS)g FB(is)g(set)h(to)g(the)f(empt)m(y)h(string,)g(eac)m(h)h (record)e(alw)m(a)m(ys)i(ends)e(at)h(the)f(\014rst)g(blank)g(line)150 3164 y(encoun)m(tered.)56 b(The)35 b(next)g(record)h(do)s(esn't)f (start)h(un)m(til)f(the)h(\014rst)e(non)m(blank)h(line)h(that)g(follo)m (ws.)56 b(No)150 3273 y(matter)30 b(ho)m(w)f(man)m(y)g(blank)g(lines)h (app)s(ear)e(in)h(a)h(ro)m(w,)f(they)h(all)g(act)g(as)g(one)f(record)g (separator.)41 b(\(Blank)150 3383 y(lines)31 b(m)m(ust)f(b)s(e)g (completely)i(empt)m(y;)f(lines)f(that)h(con)m(tain)h(only)e (whitespace)i(do)e(not)g(coun)m(t.\))275 3511 y(Y)-8 b(ou)27 b(can)f(ac)m(hiev)m(e)j(the)e(same)g(e\013ect)h(as)f(`)p Fz(RS)j(=)g("")p FB(')c(b)m(y)h(assigning)g(the)f(string)h Fz("\\n\\n+")e FB(to)i Fz(RS)p FB(.)39 b(This)150 3621 y(regexp)31 b(matc)m(hes)i(the)e(newline)g(at)h(the)g(end)e(of)i(the)f (record)g(and)g(one)g(or)g(more)h(blank)f(lines)g(after)h(the)150 3730 y(record.)39 b(In)23 b(addition,)j(a)f(regular)g(expression)f(alw) m(a)m(ys)i(matc)m(hes)f(the)g(longest)g(p)s(ossible)f(sequence)h(when) 150 3840 y(there)30 b(is)g(a)h(c)m(hoice)g(\(see)g(Section)g(2.7)g([Ho) m(w)g(Muc)m(h)f(T)-8 b(ext)31 b(Matc)m(hes?],)h(page)f(33\).)42 b(So)30 b(the)g(next)g(record)150 3950 y(do)s(esn't)38 b(start)g(un)m(til)g(the)g(\014rst)f(non)m(blank)h(line)g(that)g(follo) m(ws|no)h(matter)g(ho)m(w)e(man)m(y)h(blank)g(lines)150 4059 y(app)s(ear)30 b(in)g(a)h(ro)m(w,)f(they)h(are)g(considered)f(one) h(record)f(separator.)275 4187 y(There)25 b(is)h(an)g(imp)s(ortan)m(t)h (di\013erence)f(b)s(et)m(w)m(een)h(`)p Fz(RS)j(=)g("")p FB(')c(and)f(`)p Fz(RS)30 b(=)g("\\n\\n+")p FB('.)38 b(In)25 b(the)h(\014rst)g(case,)150 4297 y(leading)36 b(newlines)f(in)g(the)h(input)e(data)i(\014le)g(are)f(ignored,)i(and)e (if)g(a)h(\014le)f(ends)g(without)g(extra)h(blank)150 4407 y(lines)29 b(after)f(the)h(last)g(record,)g(the)g(\014nal)f (newline)g(is)g(remo)m(v)m(ed)i(from)e(the)g(record.)40 b(In)28 b(the)g(second)h(case,)150 4516 y(this)h(sp)s(ecial)h(pro)s (cessing)f(is)h(not)f(done.)2460 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 275 4644 a(No)m(w)36 b(that)h(the)f(input)f(is)h (separated)g(in)m(to)h(records,)g(the)f(second)g(step)g(is)g(to)h (separate)f(the)g(\014elds)150 4754 y(in)g(the)h(record.)59 b(One)36 b(w)m(a)m(y)i(to)f(do)g(this)f(is)h(to)g(divide)f(eac)m(h)i (of)f(the)g(lines)f(in)m(to)i(\014elds)e(in)g(the)h(normal)150 4864 y(manner.)46 b(This)31 b(happ)s(ens)g(b)m(y)h(default)g(as)h(the)f (result)h(of)f(a)h(sp)s(ecial)g(feature.)47 b(When)32 b Fz(RS)f FB(is)i(set)g(to)g(the)150 4973 y(empt)m(y)g(string,)g Fw(and)43 b Fz(FS)32 b FB(is)g(a)h(set)g(to)g(a)g(single)g(c)m (haracter,)i(the)d(newline)h(c)m(haracter)h Fw(always)41 b FB(acts)34 b(as)f(a)150 5083 y(\014eld)d(separator.)41 b(This)30 b(is)g(in)g(addition)h(to)g(whatev)m(er)g(\014eld)f (separations)h(result)f(from)g Fz(FS)p FB(.)3308 5050 y Fo(4)p 150 5154 1200 4 v 199 5221 a(4)275 5253 y Fn(When)d Fm(FS)h Fn(is)g(the)g(n)n(ull)f(string)i(\()p Fm("")p Fn(\))e(or)i(a)f(regexp,)g(this)g(sp)r(ecial)h(feature)g(of)f Fm(RS)h Fn(do)r(es)f(not)g(apply)-6 b(.)40 b(It)27 b(do)r(es)h(apply)g (to)275 5340 y(the)d(default)h(\014eld)f(separator)i(of)g(a)f(single)g (space:)36 b(`)p Fm(FS)26 b(=)g(")g(")p Fn('.)p eop end %%Page: 50 62 TeXDict begin 50 61 bop 150 -116 a FB(50)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(The)20 b(original)j(motiv)-5 b(ation)23 b(for)e(this)g(sp)s (ecial)h(exception)h(w)m(as)e(probably)g(to)h(pro)m(vide)f(useful)g(b)s (eha)m(vior)150 408 y(in)j(the)h(default)f(case)i(\(i.e.,)h Fz(FS)d FB(is)g(equal)h(to)g Fz(")30 b(")p FB(\).)39 b(This)24 b(feature)g(can)h(b)s(e)f(a)h(problem)f(if)g(y)m(ou)h(really) g(don't)150 518 y(w)m(an)m(t)d(the)g(newline)f(c)m(haracter)i(to)f (separate)g(\014elds,)h(b)s(ecause)e(there)h(is)f(no)g(w)m(a)m(y)h(to)g (prev)m(en)m(t)g(it.)39 b(Ho)m(w)m(ev)m(er,)150 628 y(y)m(ou)27 b(can)f(w)m(ork)h(around)e(this)h(b)m(y)g(using)g(the)g Fz(split)f FB(function)h(to)h(break)f(up)g(the)g(record)g(man)m(ually)h (\(see)150 737 y(Section)d(8.1.3)h([String-Manipulation)g(F)-8 b(unctions],)26 b(page)e(129\).)40 b(If)23 b(y)m(ou)h(ha)m(v)m(e)g(a)g (single)g(c)m(haracter)h(\014eld)150 847 y(separator,)31 b(y)m(ou)g(can)g(w)m(ork)g(around)e(the)i(sp)s(ecial)g(feature)g(in)f (a)h(di\013eren)m(t)g(w)m(a)m(y)-8 b(,)32 b(b)m(y)e(making)h Fz(FS)f FB(in)m(to)i(a)150 956 y(regexp)g(for)g(that)g(single)h(c)m (haracter.)46 b(F)-8 b(or)33 b(example,)g(if)f(the)g(\014eld)g (separator)g(is)g(a)g(p)s(ercen)m(t)g(c)m(haracter,)150 1066 y(instead)f(of)f(`)p Fz(FS)g(=)g("\045")p FB(',)g(use)g(`)p Fz(FS)g(=)g("[\045]")p FB('.)275 1212 y(Another)35 b(w)m(a)m(y)i(to)g (separate)g(\014elds)f(is)g(to)h(put)e(eac)m(h)i(\014eld)f(on)g(a)g (separate)h(line:)52 b(to)37 b(do)f(this,)i(just)150 1322 y(set)g(the)f(v)-5 b(ariable)39 b Fz(FS)d FB(to)i(the)g(string)f Fz("\\n")p FB(.)61 b(\(This)37 b(single)h(c)m(haracter)h(sep)s(erator)e (matc)m(hes)i(a)e(single)150 1431 y(newline.\))h(A)23 b(practical)g(example)g(of)g(a)f(data)h(\014le)f(organized)h(this)f(w)m (a)m(y)i(migh)m(t)f(b)s(e)e(a)i(mailing)g(list,)h(where)150 1541 y(eac)m(h)30 b(en)m(try)f(is)g(separated)h(b)m(y)f(blank)f(lines.) 41 b(Consider)28 b(a)h(mailing)h(list)g(in)f(a)g(\014le)g(named)g(`)p Fz(addresses)p FB(',)150 1650 y(whic)m(h)h(lo)s(oks)h(lik)m(e)h(this:) 390 1797 y Fz(Jane)47 b(Doe)390 1906 y(123)g(Main)g(Street)390 2016 y(Anywhere,)e(SE)i(12345-6789)390 2235 y(John)g(Smith)390 2345 y(456)g(Tree-lined)e(Avenue)390 2454 y(Smallville,)g(MW)i (98765-4321)390 2564 y(...)150 2710 y FB(A)30 b(simple)h(program)f(to)h (pro)s(cess)f(this)g(\014le)h(is)f(as)h(follo)m(ws:)390 2856 y Fz(#)47 b(addrs.awk)f(---)h(simple)f(mailing)g(list)g(program) 390 3075 y(#)h(Records)f(are)h(separated)e(by)j(blank)e(lines.)390 3185 y(#)h(Each)g(line)g(is)g(one)g(field.)390 3294 y(BEGIN)f({)i(RS)f (=)g("")h(;)f(FS)g(=)h("\\n")e(})390 3513 y({)676 3623 y(print)h("Name)f(is:",)g($1)676 3733 y(print)h("Address)e(is:",)i($2) 676 3842 y(print)g("City)f(and)h(State)f(are:",)g($3)676 3952 y(print)h("")390 4061 y(})275 4208 y FB(Running)28 b(the)j(program)f(pro)s(duces)f(the)i(follo)m(wing)h(output:)390 4354 y Fz($)47 b(awk)g(-f)h(addrs.awk)d(addresses)410 4467 y Fy(a)533 4463 y Fz(Name)i(is:)g(Jane)f(Doe)410 4577 y Fy(a)533 4573 y Fz(Address)g(is:)h(123)g(Main)f(Street)410 4686 y Fy(a)533 4682 y Fz(City)h(and)g(State)f(are:)h(Anywhere,)e(SE)i (12345-6789)410 4796 y Fy(a)410 4906 y(a)533 4902 y Fz(Name)g(is:)g (John)f(Smith)410 5015 y Fy(a)533 5011 y Fz(Address)g(is:)h(456)g (Tree-lined)e(Avenue)410 5125 y Fy(a)533 5121 y Fz(City)i(and)g(State)f (are:)h(Smallville,)d(MW)k(98765-4321)410 5234 y Fy(a)390 5340 y Fz(...)p eop end %%Page: 51 63 TeXDict begin 51 62 bop 2302 -116 a Fr(Chapter)30 b(3:)41 b(Reading)31 b(Input)e(Files)92 b FB(51)275 299 y(See)27 b(Section)i(13.3.4)h([Prin)m(ting)e(Mailing)h(Lab)s(els],)f(page)h (235,)g(for)f(a)g(more)g(realistic)h(program)e(that)150 408 y(deals)37 b(with)f(address)g(lists.)60 b(The)37 b(follo)m(wing)h(table)f(summarizes)g(ho)m(w)g(records)f(are)h(split,)i (based)d(on)150 518 y(the)31 b(v)-5 b(alue)30 b(of)h Fz(RS)p FB(:)150 679 y Fz(RS)f(==)g("\\n")630 788 y FB(Records)k(are)h (separated)g(b)m(y)f(the)h(newline)f(c)m(haracter)i(\(`)p Fz(\\n)p FB('\).)53 b(In)33 b(e\013ect,)k(ev)m(ery)f(line)e(in)630 898 y(the)d(data)g(\014le)f(is)h(a)f(separate)i(record,)e(including)g (blank)g(lines.)41 b(This)30 b(is)g(the)h(default.)150 1058 y Fz(RS)f(==)g Fk(any)f(single)g(character)630 1167 y FB(Records)f(are)h(separated)g(b)m(y)f(eac)m(h)h(o)s(ccurrence)g(of)f (the)h(c)m(haracter.)42 b(Multiple)29 b(successiv)m(e)630 1277 y(o)s(ccurrences)h(delimit)h(empt)m(y)g(records.)150 1437 y Fz(RS)f(==)g("")132 b FB(Records)39 b(are)h(separated)g(b)m(y)f (runs)e(of)j(blank)e(lines.)68 b(The)38 b(newline)i(c)m(haracter)g(alw) m(a)m(ys)630 1547 y(serv)m(es)28 b(as)g(a)g(\014eld)f(separator,)i(in)e (addition)g(to)i(whatev)m(er)f(v)-5 b(alue)28 b Fz(FS)f FB(ma)m(y)h(ha)m(v)m(e.)41 b(Leading)630 1656 y(and)30 b(trailing)h(newlines)f(in)g(a)h(\014le)g(are)f(ignored.)150 1816 y Fz(RS)g(==)g Fk(regexp)630 1926 y FB(Records)25 b(are)g(separated)h(b)m(y)f(o)s(ccurrences)g(of)g(c)m(haracters)h(that) g(matc)m(h)f Fx(regexp)p FB(.)40 b(Leading)630 2036 y(and)22 b(trailing)i(matc)m(hes)g(of)e Fx(regexp)k FB(delimit)e(empt)m(y)f (records.)38 b(\(This)22 b(is)g(a)i Fz(gawk)d FB(extension;)630 2145 y(it)31 b(is)f(not)h(sp)s(eci\014ed)f(b)m(y)g(the)g(POSIX)g (standard.\))275 2306 y(In)f(all)i(cases,)h Fz(gawk)d FB(sets)i Fz(RT)f FB(to)h(the)f(input)g(text)h(that)g(matc)m(hed)g(the) g(v)-5 b(alue)31 b(sp)s(eci\014ed)e(b)m(y)i Fz(RS)p FB(.)150 2539 y FA(3.8)68 b(Explicit)46 b(Input)e(with)i Fq(getline)150 2699 y FB(So)e(far)g(w)m(e)h(ha)m(v)m(e)g(b)s(een)f(getting)i(our)e (input)f(data)i(from)f Fz(awk)p FB('s)f(main)h(input)g(stream|either)h (the)150 2808 y(standard)39 b(input)h(\(usually)g(y)m(our)g(terminal,)k (sometimes)d(the)f(output)g(from)g(another)h(program\))f(or)150 2918 y(from)j(the)h(\014les)f(sp)s(eci\014ed)g(on)g(the)h(command)f (line.)80 b(The)43 b Fz(awk)g FB(language)i(has)e(a)h(sp)s(ecial)g (built-in)150 3027 y(command)30 b(called)i Fz(getline)c FB(that)j(can)g(b)s(e)e(used)h(to)h(read)f(input)g(under)f(y)m(our)h (explicit)i(con)m(trol.)275 3163 y(The)41 b Fz(getline)g FB(command)h(is)g(used)g(in)g(sev)m(eral)i(di\013eren)m(t)f(w)m(a)m(ys) g(and)f(should)f Fw(not)52 b FB(b)s(e)41 b(used)h(b)m(y)150 3272 y(b)s(eginners.)74 b(The)41 b(examples)i(that)f(follo)m(w)h(the)f (explanation)h(of)f(the)g Fz(getline)e FB(command)h(include)150 3382 y(material)k(that)e(has)g(not)g(b)s(een)g(co)m(v)m(ered)h(y)m(et.) 80 b(Therefore,)46 b(come)e(bac)m(k)g(and)f(study)f(the)h Fz(getline)150 3491 y FB(command)29 b Fw(after)39 b FB(y)m(ou)30 b(ha)m(v)m(e)g(review)m(ed)g(the)f(rest)g(of)h(this)f(b)s(o)s(ok)f(and) h(ha)m(v)m(e)h(a)g(go)s(o)s(d)f(kno)m(wledge)h(of)f(ho)m(w)150 3601 y Fz(awk)g FB(w)m(orks.)275 3736 y(The)g Fz(getline)e FB(command)j(returns)e(one)i(if)g(it)g(\014nds)e(a)i(record)g(and)f (zero)i(if)e(it)i(encoun)m(ters)f(the)g(end)150 3846 y(of)i(the)g(\014le.)46 b(If)32 b(there)g(is)g(some)h(error)e(in)h (getting)i(a)e(record,)h(suc)m(h)f(as)g(a)h(\014le)f(that)g(cannot)h(b) s(e)e(op)s(ened,)150 3955 y(then)g Fz(getline)e FB(returns)h Fy(\000)p FB(1.)43 b(In)30 b(this)i(case,)g Fz(gawk)e FB(sets)i(the)f(v)-5 b(ariable)32 b Fz(ERRNO)e FB(to)i(a)f(string)g (describing)150 4065 y(the)g(error)f(that)h(o)s(ccurred.)275 4200 y(In)38 b(the)h(follo)m(wing)i(examples,)h Fx(command)h FB(stands)38 b(for)h(a)h(string)f(v)-5 b(alue)39 b(that)h(represen)m (ts)f(a)h(shell)150 4310 y(command.)150 4510 y Fj(3.8.1)63 b(Using)42 b Fh(getline)g Fj(with)e(No)i(Argumen)m(ts)150 4657 y FB(The)f Fz(getline)e FB(command)i(can)h(b)s(e)f(used)f(without) h(argumen)m(ts)h(to)g(read)f(input)g(from)g(the)g(curren)m(t)150 4766 y(input)33 b(\014le.)50 b(All)34 b(it)g(do)s(es)f(in)g(this)h (case)g(is)g(read)f(the)h(next)g(input)e(record)i(and)f(split)g(it)h (up)f(in)m(to)h(\014elds.)150 4876 y(This)c(is)h(useful)f(if)h(y)m (ou'v)m(e)h(\014nished)d(pro)s(cessing)i(the)g(curren)m(t)f(record,)h (but)f(w)m(an)m(t)i(to)f(do)g(some)g(sp)s(ecial)150 4986 y(pro)s(cessing)f(on)g(the)h(next)g(record)f Fw(right)j(now)p FB(.)42 b(F)-8 b(or)31 b(example:)390 5121 y Fz({)629 5230 y(if)47 b(\(\(t)g(=)g(index\($0,)e("/*"\)\))i(!=)g(0\))g({)867 5340 y(#)h(value)e(of)h(`tmp')g(will)f(be)h("")h(if)f(t)g(is)g(1)p eop end %%Page: 52 64 TeXDict begin 52 63 bop 150 -116 a FB(52)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)867 299 y Fz(tmp)47 b(=)h(substr\($0,)d(1,)i(t)g(-)h(1\))867 408 y(u)g(=)f(index\(substr\($0,)d(t)j(+)g(2\),)g("*/"\))867 518 y(while)g(\(u)g(==)g(0\))g({)1106 628 y(if)g(\(getline)f(<=)h(0\))g ({)1345 737 y(m)g(=)g("unexpected)e(EOF)i(or)g(error")1345 847 y(m)g(=)g(\(m)h(":)f(")g(ERRNO\))1345 956 y(print)f(m)h(>)h ("/dev/stderr")1345 1066 y(exit)1106 1176 y(})1106 1285 y(t)f(=)h(-1)1106 1395 y(u)f(=)h(index\($0,)d("*/"\))867 1504 y(})867 1614 y(#)j(substr)e(expression)f(will)h(be)i("")f(if)g(*/) 867 1724 y(#)h(occurred)d(at)i(end)g(of)h(line)867 1833 y($0)f(=)h(tmp)f(substr\($0,)e(u)i(+)h(2\))629 1943 y(})629 2052 y(print)e($0)390 2162 y(})275 2304 y FB(This)26 b Fz(awk)g FB(program)h(deletes)h(all)g(C-st)m(yle)h(commen)m(ts)f(\(`) p Fz(/*)i(...)g(*/)p FB('\))d(from)g(the)g(input.)39 b(By)27 b(replac-)150 2413 y(ing)32 b(the)h(`)p Fz(print)c($0)p FB(')j(with)g(other)g(statemen)m(ts,)j(y)m(ou)d(could)g(p)s(erform)f (more)h(complicated)i(pro)s(cessing)150 2523 y(on)j(the)g(decommen)m (ted)g(input,)h(suc)m(h)e(as)h(searc)m(hing)h(for)f(matc)m(hes)h(of)f (a)g(regular)g(expression.)59 b(\(This)150 2633 y(program)32 b(has)g(a)g(subtle)g(problem|it)h(do)s(es)e(not)i(w)m(ork)f(if)g(one)h (commen)m(t)g(ends)e(and)h(another)g(b)s(egins)150 2742 y(on)e(the)h(same)g(line.\))275 2884 y(This)e(form)h(of)h(the)f Fz(getline)e FB(command)j(sets)f Fz(NF)p FB(,)g Fz(NR)p FB(,)g Fz(FNR)p FB(,)g(and)g(the)h(v)-5 b(alue)30 b(of)h Fz($0)p FB(.)390 3026 y Fr(NOTE:)41 b FB(The)g(new)g(v)-5 b(alue)41 b(of)h Fz($0)e FB(is)h(used)g(to)g(test)h(the)g(patterns)f (of)g(an)m(y)h(subsequen)m(t)390 3136 y(rules.)53 b(The)34 b(original)i(v)-5 b(alue)35 b(of)g Fz($0)f FB(that)h(triggered)h(the)f (rule)f(that)h(executed)h Fz(getline)390 3245 y FB(is)f(lost.)56 b(By)36 b(con)m(trast,)i(the)d Fz(next)f FB(statemen)m(t)j(reads)e(a)g (new)g(record)g(but)g(immediately)390 3355 y(b)s(egins)e(pro)s(cessing) g(it)h(normally)-8 b(,)36 b(starting)e(with)f(the)h(\014rst)f(rule)g (in)g(the)h(program.)50 b(See)390 3465 y(Section)31 b(6.4.8)h([The)e Fz(next)g FB(Statemen)m(t],)i(page)f(105.)150 3671 y Fj(3.8.2)63 b(Using)42 b Fh(getline)g Fj(in)m(to)f(a)f(V)-10 b(ariable)150 3818 y FB(Y)i(ou)32 b(can)f(use)h(`)p Fz(getline)c Fk(var)11 b FB(')30 b(to)i(read)g(the)f(next)h(record)f(from)g Fz(awk)p FB('s)f(input)h(in)m(to)h(the)g(v)-5 b(ariable)32 b Fx(v)-5 b(ar)p FB(.)150 3928 y(No)31 b(other)g(pro)s(cessing)g(is)f (done.)42 b(F)-8 b(or)31 b(example,)h(supp)s(ose)d(the)i(next)g(line)g (is)g(a)g(commen)m(t)h(or)e(a)h(sp)s(ecial)150 4037 y(string,)23 b(and)e(y)m(ou)g(w)m(an)m(t)h(to)g(read)f(it)h(without)f(triggering)i (an)m(y)e(rules.)37 b(This)21 b(form)g(of)g Fz(getline)e FB(allo)m(ws)k(y)m(ou)150 4147 y(to)30 b(read)f(that)h(line)g(and)e (store)i(it)g(in)f(a)g(v)-5 b(ariable)30 b(so)g(that)g(the)f(main)g (read-a-line-and-c)m(hec)m(k-eac)m(h-rule)150 4257 y(lo)s(op)h(of)h Fz(awk)f FB(nev)m(er)g(sees)h(it.)41 b(The)30 b(follo)m(wing)i(example) f(sw)m(aps)f(ev)m(ery)h(t)m(w)m(o)h(lines)f(of)f(input:)390 4399 y Fz({)629 4508 y(if)47 b(\(\(getline)e(tmp\))i(>)g(0\))g({)867 4618 y(print)g(tmp)867 4727 y(print)g($0)629 4837 y(})g(else)867 4946 y(print)g($0)390 5056 y(})150 5198 y FB(It)30 b(tak)m(es)i(the)f (follo)m(wing)h(list:)390 5340 y Fz(wan)p eop end %%Page: 53 65 TeXDict begin 53 64 bop 2302 -116 a Fr(Chapter)30 b(3:)41 b(Reading)31 b(Input)e(Files)92 b FB(53)390 299 y Fz(tew)390 408 y(free)390 518 y(phore)150 651 y FB(and)30 b(pro)s(duces)f(these)i (results:)390 785 y Fz(tew)390 894 y(wan)390 1004 y(phore)390 1113 y(free)275 1247 y FB(The)40 b Fz(getline)f FB(command)i(used)g(in) g(this)g(w)m(a)m(y)h(sets)g(only)f(the)g(v)-5 b(ariables)42 b Fz(NR)f FB(and)f Fz(FNR)h FB(\(and)g(of)150 1356 y(course,)d Fx(v)-5 b(ar)7 b FB(\).)58 b(The)36 b(record)h(is)f(not)g(split)h(in)m (to)g(\014elds,)h(so)e(the)h(v)-5 b(alues)36 b(of)h(the)f(\014elds)g (\(including)g Fz($0)p FB(\))150 1466 y(and)30 b(the)g(v)-5 b(alue)31 b(of)g Fz(NF)e FB(do)i(not)f(c)m(hange.)150 1663 y Fj(3.8.3)63 b(Using)42 b Fh(getline)g Fj(from)g(a)e(File)150 1809 y FB(Use)21 b(`)p Fz(getline)28 b(<)i Fk(file)11 b FB(')19 b(to)i(read)g(the)f(next)h(record)f(from)g Fx(\014le)p FB(.)37 b(Here)21 b Fx(\014le)k FB(is)c(a)g(string-v)-5 b(alued)20 b(expression)150 1919 y(that)28 b(sp)s(eci\014es)f(the)g (\014le)g(name.)40 b(`)p Fz(<)30 b Fk(file)11 b FB(')26 b(is)h(called)h(a)g Fx(redirection)g FB(b)s(ecause)f(it)g(directs)h (input)e(to)i(come)150 2029 y(from)41 b(a)g(di\013eren)m(t)h(place.)74 b(F)-8 b(or)41 b(example,)k(the)c(follo)m(wing)i(program)e(reads)g(its) g(input)f(record)h(from)150 2138 y(the)33 b(\014le)g(`)p Fz(secondary.input)p FB(')c(when)i(it)i(encoun)m(ters)h(a)f(\014rst)e (\014eld)i(with)f(a)h(v)-5 b(alue)33 b(equal)g(to)h(10)f(in)g(the)150 2248 y(curren)m(t)d(input)g(\014le:)390 2381 y Fz({)581 2491 y(if)47 b(\($1)g(==)g(10\))g({)820 2600 y(getline)e(<)j ("secondary.input")820 2710 y(print)581 2819 y(})f(else)820 2929 y(print)390 3039 y(})275 3172 y FB(Because)34 b(the)g(main)f (input)g(stream)h(is)f(not)h(used,)g(the)g(v)-5 b(alues)33 b(of)h Fz(NR)f FB(and)g Fz(FNR)f FB(are)i(not)g(c)m(hanged.)150 3281 y(Ho)m(w)m(ev)m(er,)k(the)c(record)h(it)g(reads)f(is)g(split)h(in) m(to)g(\014elds)f(in)g(the)h(normal)f(manner,)h(so)g(the)f(v)-5 b(alues)35 b(of)g Fz($0)150 3391 y FB(and)30 b(the)g(other)h(\014elds)f (are)h(c)m(hanged,)g(resulting)f(in)g(a)h(new)f(v)-5 b(alue)31 b(of)f Fz(NF)p FB(.)275 3524 y(According)k(to)g(POSIX,)f(`)p Fz(getline)28 b(<)i Fk(expression)11 b FB(')31 b(is)j(am)m(biguous)f (if)h Fx(expression)f FB(con)m(tains)i(un-)150 3634 y(paren)m(thesized) 23 b(op)s(erators)f(other)g(than)g(`)p Fz($)p FB(';)j(for)d(example,)j (`)p Fz(getline)j(<)j(dir)e("/")g(file)p FB(')22 b(is)g(am)m(biguous) 150 3743 y(b)s(ecause)33 b(the)g(concatenation)i(op)s(erator)e(is)f (not)h(paren)m(thesized.)49 b(Y)-8 b(ou)33 b(should)f(write)g(it)i(as)f (`)p Fz(getline)150 3853 y(<)d(\(dir)f("/")h(file\))p FB(')e(if)h(y)m(ou)g(w)m(an)m(t)i(y)m(our)e(program)g(to)h(b)s(e)e(p)s (ortable)h(to)h(other)g Fz(awk)e FB(implemen)m(tations.)150 4050 y Fj(3.8.4)63 b(Using)42 b Fh(getline)g Fj(in)m(to)f(a)f(V)-10 b(ariable)40 b(from)j(a)d(File)150 4197 y FB(Use)c(`)p Fz(getline)29 b Fk(var)40 b Fz(<)30 b Fk(file)11 b FB(')34 b(to)j(read)f(input)f(from)g(the)h(\014le)g Fx(\014le)p FB(,)i(and)d(put)g(it)h(in)g(the)g(v)-5 b(ariable)37 b Fx(v)-5 b(ar)p FB(.)150 4306 y(As)30 b(ab)s(o)m(v)m(e,)i Fx(\014le)k FB(is)30 b(a)h(string-v)-5 b(alued)31 b(expression)f(that)h (sp)s(eci\014es)f(the)g(\014le)h(from)f(whic)m(h)g(to)h(read.)275 4440 y(In)g(this)h(v)m(ersion)h(of)g Fz(getline)p FB(,)e(none)h(of)g (the)h(built-in)f(v)-5 b(ariables)33 b(are)g(c)m(hanged)f(and)g(the)h (record)f(is)150 4549 y(not)f(split)g(in)m(to)g(\014elds.)41 b(The)30 b(only)h(v)-5 b(ariable)32 b(c)m(hanged)f(is)g Fx(v)-5 b(ar)p FB(.)41 b(F)-8 b(or)32 b(example,)f(the)g(follo)m(wing)h (program)150 4659 y(copies)k(all)g(the)f(input)f(\014les)h(to)g(the)g (output,)h(except)g(for)f(records)g(that)g(sa)m(y)h(`)p Fz(@include)28 b Fk(filename)11 b FB(')n(.)150 4768 y(Suc)m(h)30 b(a)g(record)h(is)f(replaced)h(b)m(y)f(the)h(con)m(ten)m(ts)h(of)e(the) h(\014le)f Fx(\014lename)5 b FB(:)390 4902 y Fz({)629 5011 y(if)47 b(\(NF)g(==)g(2)g(&&)h($1)f(==)g("@include"\))e({)867 5121 y(while)i(\(\(getline)e(line)i(<)g($2\))g(>)g(0\))1106 5230 y(print)f(line)867 5340 y(close\($2\))p eop end %%Page: 54 66 TeXDict begin 54 65 bop 150 -116 a FB(54)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)629 299 y Fz(})47 b(else)867 408 y(print)390 518 y(})275 665 y FB(Note)30 b(here)g(ho)m(w)f(the)h(name)g(of)g(the)f(extra)i (input)d(\014le)i(is)g(not)f(built)h(in)m(to)g(the)g(program;)g(it)g (is)g(tak)m(en)150 775 y(directly)h(from)f(the)h(data,)g(sp)s (eci\014cally)g(from)f(the)g(second)h(\014eld)f(on)g(the)h(`)p Fz(@include)p FB(')d(line.)275 922 y(The)33 b Fz(close)g FB(function)h(is)h(called)g(to)g(ensure)f(that)g(if)h(t)m(w)m(o)g(iden) m(tical)h(`)p Fz(@include)p FB(')d(lines)i(app)s(ear)e(in)150 1031 y(the)40 b(input,)i(the)e(en)m(tire)g(sp)s(eci\014ed)f(\014le)h (is)g(included)f(t)m(wice.)71 b(See)40 b(Section)h(4.8)g([Closing)f (Input)f(and)150 1141 y(Output)29 b(Redirections],)j(page)f(70.)275 1288 y(One)d(de\014ciency)i(of)f(this)g(program)g(is)h(that)g(it)f(do)s (es)g(not)h(pro)s(cess)f(nested)g(`)p Fz(@include)p FB(')e(statemen)m (ts)150 1397 y(\(i.e.,)i(`)p Fz(@include)p FB(')24 b(statemen)m(ts)j (in)f(included)f(\014les\))i(the)f(w)m(a)m(y)h(a)f(true)g(macro)h (prepro)s(cessor)e(w)m(ould.)39 b(See)150 1507 y(Section)30 b(13.3.9)h([An)e(Easy)h(W)-8 b(a)m(y)30 b(to)g(Use)g(Library)e(F)-8 b(unctions],)30 b(page)g(244,)h(for)e(a)h(program)f(that)g(do)s(es)150 1616 y(handle)h(nested)g(`)p Fz(@include)p FB(')f(statemen)m(ts.)150 1828 y Fj(3.8.5)63 b(Using)42 b Fh(getline)g Fj(from)g(a)e(Pip)s(e)150 1975 y FB(The)30 b(output)g(of)h(a)f(command)g(can)h(also)h(b)s(e)d (pip)s(ed)g(in)m(to)j Fz(getline)p FB(,)c(using)i(`)p Fk(command)40 b Fz(|)30 b(getline)p FB('.)39 b(In)150 2085 y(this)32 b(case,)i(the)f(string)f Fx(command)k FB(is)d(run)d(as)j(a)g(shell)f(command)h(and)e(its)i(output)f(is)g(pip) s(ed)f(in)m(to)j Fz(awk)150 2194 y FB(to)g(b)s(e)e(used)h(as)g(input.) 48 b(This)33 b(form)g(of)g Fz(getline)e FB(reads)i(one)g(record)h(at)f (a)h(time)g(from)f(the)g(pip)s(e.)48 b(F)-8 b(or)150 2304 y(example,)38 b(the)d(follo)m(wing)i(program)e(copies)h(its)g (input)e(to)i(its)g(output,)g(except)h(for)e(lines)g(that)h(b)s(egin) 150 2413 y(with)27 b(`)p Fz(@execute)p FB(',)g(whic)m(h)g(are)h (replaced)f(b)m(y)h(the)f(output)g(pro)s(duced)f(b)m(y)i(running)d(the) j(rest)f(of)h(the)g(line)150 2523 y(as)j(a)f(shell)h(command:)390 2670 y Fz({)629 2780 y(if)47 b(\($1)g(==)g("@execute"\))e({)867 2889 y(tmp)i(=)h(substr\($0,)d(10\))867 2999 y(while)i(\(\(tmp)f(|)h (getline\))f(>)h(0\))1106 3108 y(print)867 3218 y(close\(tmp\))629 3328 y(})g(else)867 3437 y(print)390 3547 y(})150 3694 y FB(The)31 b Fz(close)g FB(function)g(is)h(called)i(to)e(ensure)f (that)i(if)f(t)m(w)m(o)h(iden)m(tical)h(`)p Fz(@execute)p FB(')c(lines)i(app)s(ear)f(in)h(the)150 3803 y(input,)e(the)g(command)g (is)h(run)e(for)h(eac)m(h)h(one.)41 b(Giv)m(en)32 b(the)e(input:)390 3950 y Fz(foo)390 4060 y(bar)390 4169 y(baz)390 4279 y(@execute)46 b(who)390 4389 y(bletch)150 4535 y FB(the)31 b(program)f(migh)m(t)h(pro)s(duce:)390 4682 y Fz(foo)390 4792 y(bar)390 4902 y(baz)390 5011 y(arnold)237 b(ttyv0)142 b(Jul)47 b(13)g(14:22)390 5121 y(miriam)237 b(ttyp0)142 b(Jul)47 b(13)g(14:23)237 b(\(murphy:0\))390 5230 y(bill)333 b(ttyp1)142 b(Jul)47 b(13)g(14:23)237 b(\(murphy:0\))390 5340 y(bletch)p eop end %%Page: 55 67 TeXDict begin 55 66 bop 2302 -116 a Fr(Chapter)30 b(3:)41 b(Reading)31 b(Input)e(Files)92 b FB(55)150 299 y(Notice)29 b(that)f(this)f(program)g(ran)f(the)i(command)f Fz(who)f FB(and)g(prin)m(ted)h(the)g(previous)g(result.)40 b(\(If)27 b(y)m(ou)g(try)150 408 y(this)f(program)g(y)m(ourself,)i(y)m(ou)e(will) h(of)f(course)h(get)g(di\013eren)m(t)g(results,)g(dep)s(ending)e(up)s (on)f(who)i(is)g(logged)150 518 y(in)k(on)g(y)m(our)h(system.\))275 647 y(This)g(v)-5 b(ariation)34 b(of)f Fz(getline)d FB(splits)j(the)g (record)f(in)m(to)i(\014elds,)f(sets)g(the)g(v)-5 b(alue)33 b(of)f Fz(NF)p FB(,)h(and)f(recom-)150 757 y(putes)e(the)g(v)-5 b(alue)31 b(of)g Fz($0)p FB(.)40 b(The)30 b(v)-5 b(alues)31 b(of)f Fz(NR)g FB(and)g Fz(FNR)f FB(are)i(not)f(c)m(hanged.)275 886 y(According)k(to)g(POSIX,)f(`)p Fk(expression)38 b Fz(|)30 b(getline)p FB(')i(is)i(am)m(biguous)f(if)h Fx(expression)f FB(con)m(tains)i(un-)150 996 y(paren)m(thesized)k(op)s (erators)g(other)g(than)g(`)p Fz($)p FB('|for)g(example,)j(`)p Fz("echo)29 b(")h("date")e(|)j(getline)p FB(')37 b(is)h(am-)150 1106 y(biguous)e(b)s(ecause)h(the)g(concatenation)i(op)s(erator)e(is)g (not)f(paren)m(thesized.)61 b(Y)-8 b(ou)37 b(should)f(write)g(it)i(as) 150 1215 y(`)p Fz(\("echo)29 b(")h("date"\))e(|)i(getline)p FB(')j(if)i(y)m(ou)f(w)m(an)m(t)i(y)m(our)e(program)g(to)i(b)s(e)e(p)s (ortable)g(to)h(other)g Fz(awk)f FB(im-)150 1325 y(plemen)m(tations.) 150 1514 y Fj(3.8.6)63 b(Using)42 b Fh(getline)g Fj(in)m(to)f(a)f(V)-10 b(ariable)40 b(from)j(a)d(Pip)s(e)150 1661 y FB(When)28 b(y)m(ou)h(use)e(`)p Fk(command)40 b Fz(|)30 b(getline)e Fk(var)11 b FB(',)28 b(the)g(output)g(of)g Fx(command)k FB(is)c(sen)m(t)h(through)e(a)i(pip)s(e)e(to)150 1770 y Fz(getline)32 b FB(and)i(in)m(to)h(the)f(v)-5 b(ariable)35 b Fx(v)-5 b(ar)p FB(.)52 b(F)-8 b(or)35 b(example,)h(the)e(follo)m (wing)i(program)e(reads)g(the)g(curren)m(t)150 1880 y(date)d(and)f (time)h(in)m(to)g(the)g(v)-5 b(ariable)31 b Fz(current_time)p FB(,)c(using)j(the)h Fz(date)e FB(utilit)m(y)-8 b(,)32 b(and)e(then)g(prin)m(ts)g(it:)390 2009 y Fz(BEGIN)46 b({)629 2119 y("date")g(|)h(getline)f(current_time)629 2228 y(close\("date"\))629 2338 y(print)g("Report)g(printed)g(on)h(")g (current_time)390 2448 y(})275 2577 y FB(In)31 b(this)h(v)m(ersion)h (of)g Fz(getline)p FB(,)e(none)h(of)g(the)h(built-in)f(v)-5 b(ariables)33 b(are)g(c)m(hanged)f(and)g(the)h(record)f(is)150 2686 y(not)f(split)f(in)m(to)h(\014elds.)150 2875 y Fj(3.8.7)63 b(Using)42 b Fh(getline)g Fj(from)g(a)e(Copro)s(cess)150 3022 y FB(Input)27 b(in)m(to)j Fz(getline)d FB(from)h(a)h(pip)s(e)f(is) g(a)i(one-w)m(a)m(y)g(op)s(eration.)40 b(The)29 b(command)f(that)h(is)g (started)g(with)150 3132 y(`)p Fk(command)39 b Fz(|)30 b(getline)p FB(')f(only)h(sends)g(data)h Fw(to)37 b FB(y)m(our)30 b Fz(awk)f FB(program.)275 3261 y(On)h(o)s(ccasion,)k(y)m(ou)e(migh)m (t)g(w)m(an)m(t)g(to)h(send)e(data)h(to)g(another)g(program)f(for)h (pro)s(cessing)f(and)g(then)150 3371 y(read)g(the)h(results)g(bac)m(k.) 45 b Fz(gawk)30 b FB(allo)m(ws)j(y)m(ou)f(start)g(a)g Fx(copro)s(cess)p FB(,)h(with)e(whic)m(h)g(t)m(w)m(o-w)m(a)m(y)k(comm)m (unica-)150 3481 y(tions)i(are)g(p)s(ossible.)60 b(This)35 b(is)i(done)g(with)f(the)h(`)p Fz(|&)p FB(')g(op)s(erator.)60 b(T)m(ypically)-8 b(,)40 b(y)m(ou)d(write)g(data)g(to)h(the)150 3590 y(copro)s(cess)31 b(\014rst)e(and)h(then)g(read)h(results)f(bac)m (k,)h(as)g(sho)m(wn)e(in)h(the)h(follo)m(wing:)390 3719 y Fz(print)46 b(")p Fk(some)h(query)11 b Fz(")45 b(|&)j("db_server")390 3829 y("db_server")d(|&)i(getline)150 3958 y FB(whic)m(h)30 b(sends)g(a)g(query)g(to)h Fz(db_server)d FB(and)i(then)g(reads)g(the)h (results.)275 4088 y(The)g(v)-5 b(alues)33 b(of)g Fz(NR)e FB(and)h Fz(FNR)f FB(are)i(not)g(c)m(hanged,)g(b)s(ecause)g(the)f(main) g(input)g(stream)h(is)f(not)g(used.)150 4197 y(Ho)m(w)m(ev)m(er,)37 b(the)d(record)g(is)g(split)g(in)m(to)h(\014elds)f(in)f(the)i(normal)e (manner,)i(th)m(us)e(c)m(hanging)i(the)f(v)-5 b(alues)35 b(of)150 4307 y Fz($0)p FB(,)30 b(of)h(the)f(other)h(\014elds,)f(and)g (of)g Fz(NF)p FB(.)275 4436 y(Copro)s(cesses)j(are)h(an)f(adv)-5 b(anced)33 b(feature.)51 b(They)33 b(are)g(discussed)g(here)g(only)h(b) s(ecause)f(this)g(is)h(the)150 4546 y(section)i(on)f Fz(getline)p FB(.)52 b(See)36 b(Section)f(10.2)i([Tw)m(o-W)-8 b(a)m(y)37 b(Comm)m(unications)f(with)f(Another)g(Pro)s(cess],)150 4656 y(page)c(166,)h(where)e(copro)s(cesses)h(are)g(discussed)e(in)h (more)h(detail.)150 4844 y Fj(3.8.8)63 b(Using)42 b Fh(getline)g Fj(in)m(to)f(a)f(V)-10 b(ariable)40 b(from)j(a)d(Copro)s(cess)150 4991 y FB(When)29 b(y)m(ou)g(use)f(`)p Fk(command)40 b Fz(|&)29 b(getline)g Fk(var)11 b FB(',)28 b(the)h(output)g(from)f (the)h(copro)s(cess)g Fx(command)j FB(is)d(sen)m(t)150 5101 y(through)h(a)g(t)m(w)m(o-w)m(a)m(y)k(pip)s(e)29 b(to)i Fz(getline)e FB(and)g(in)m(to)j(the)e(v)-5 b(ariable)31 b Fx(v)-5 b(ar)p FB(.)275 5230 y(In)31 b(this)h(v)m(ersion)h(of)g Fz(getline)p FB(,)e(none)h(of)g(the)h(built-in)f(v)-5 b(ariables)33 b(are)g(c)m(hanged)f(and)g(the)h(record)f(is)150 5340 y(not)f(split)f(in)m(to)h(\014elds.)41 b(The)30 b(only)g(v)-5 b(ariable)31 b(c)m(hanged)g(is)g Fx(v)-5 b(ar)p FB(.)p eop end %%Page: 56 68 TeXDict begin 56 67 bop 150 -116 a FB(56)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fj(3.8.9)63 b(P)m(oin)m(ts)40 b(to)h(Remem)m(b)s(er)h(Ab)s(out)f Fh(getline)150 446 y FB(Here)31 b(are)g(some)f(miscellaneous)i(p)s(oin) m(ts)e(ab)s(out)g Fz(getline)f FB(that)i(y)m(ou)g(should)e(b)s(ear)h (in)g(mind:)225 580 y Fy(\017)60 b FB(When)24 b Fz(getline)f FB(c)m(hanges)j(the)e(v)-5 b(alue)26 b(of)e Fz($0)g FB(and)g Fz(NF)p FB(,)i Fz(awk)e FB(do)s(es)g Fw(not)34 b FB(automatically)27 b(jump)c(to)j(the)330 690 y(start)k(of)g(the)f(program)h(and)e(start)i (testing)h(the)f(new)f(record)g(against)i(ev)m(ery)f(pattern.)41 b(Ho)m(w)m(ev)m(er,)330 800 y(the)31 b(new)e(record)i(is)f(tested)h (against)h(an)m(y)f(subsequen)m(t)e(rules.)225 934 y Fy(\017)60 b FB(Man)m(y)39 b Fz(awk)e FB(implemen)m(tations)j(limit)f (the)f(n)m(um)m(b)s(er)f(of)i(pip)s(elines)e(that)i(an)f Fz(awk)f FB(program)h(ma)m(y)330 1044 y(ha)m(v)m(e)28 b(op)s(en)f(to)h(just)f(one.)40 b(In)26 b Fz(gawk)p FB(,)h(there)g(is)h (no)f(suc)m(h)g(limit.)40 b(Y)-8 b(ou)28 b(can)f(op)s(en)g(as)g(man)m (y)h(pip)s(elines)330 1153 y(\(and)i(copro)s(cesses\))i(as)e(the)h (underlying)e(op)s(erating)i(system)f(p)s(ermits.)225 1288 y Fy(\017)60 b FB(An)23 b(in)m(teresting)i(side)e(e\013ect)i(o)s (ccurs)e(if)g(y)m(ou)h(use)f Fz(getline)e FB(without)j(a)g(redirection) g(inside)f(a)g Fz(BEGIN)330 1397 y FB(rule.)38 b(Because)24 b(an)e(unredirected)h Fz(getline)d FB(reads)j(from)f(the)h (command-line)g(data)g(\014les,)i(the)e(\014rst)330 1507 y Fz(getline)k FB(command)j(causes)g Fz(awk)e FB(to)i(set)g(the)g(v)-5 b(alue)30 b(of)g Fz(FILENAME)p FB(.)38 b(Normally)-8 b(,)31 b Fz(FILENAME)c FB(do)s(es)330 1616 y(not)35 b(ha)m(v)m(e)i(a)f (v)-5 b(alue)35 b(inside)g Fz(BEGIN)f FB(rules,)i(b)s(ecause)f(y)m(ou)h (ha)m(v)m(e)g(not)g(y)m(et)g(started)g(to)g(pro)s(cess)f(the)330 1726 y(command-line)j(data)f(\014les.)121 b(\(See)38 b(Section)g(6.1.4)g([The)f Fz(BEGIN)f FB(and)g Fz(END)g FB(Sp)s(ecial)i(P)m(atterns],)-4071 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: lflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: rflashlight.small.xpic (xpic) %%CreationDate: Tue Dec 12 09:51:27 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 80 32 m 64 24 l x 32 24 m 56 32 l x 32 8 m 56 0 l x 8 16 56 16 e 0 24 32 8 b 64 16 m 80 16 l x 64 8 m 80 0 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 330 1836 a(page)25 b(96,)i(also)e(see)g(Section)g(6.5.2)h ([Built-in)f(V)-8 b(ariables)26 b(That)e(Con)m(v)m(ey)h(Information],)h (page)f(110.\))225 1970 y Fy(\017)60 b FB(Using)29 b Fz(FILENAME)d FB(with)i Fz(getline)f FB(\(`)p Fz(getline)i(<)h (FILENAME)p FB('\))d(is)i(lik)m(ely)h(to)f(b)s(e)f(a)h(source)g(for)f (con-)330 2080 y(fusion.)60 b Fz(awk)36 b FB(op)s(ens)g(a)i(separate)f (input)g(stream)g(from)f(the)i(curren)m(t)e(input)g(\014le.)61 b(Ho)m(w)m(ev)m(er,)41 b(b)m(y)330 2189 y(not)30 b(using)f(a)g(v)-5 b(ariable,)31 b Fz($0)e FB(and)g Fz(NR)g FB(are)g(still)i(up)s(dated.) 39 b(If)29 b(y)m(ou're)h(doing)g(this,)f(it's)h(probably)f(b)m(y)330 2299 y(acciden)m(t,)j(and)e(y)m(ou)h(should)e(reconsider)h(what)h(it)g (is)f(y)m(ou're)h(trying)g(to)g(accomplish.)150 2498 y Fj(3.8.10)63 b(Summary)41 b(of)h Fh(getline)g Fj(V)-10 b(arian)m(ts)150 2645 y FB(T)i(able)31 b(3.1)g(summarizes)f(the)g(eigh) m(t)i(v)-5 b(arian)m(ts)31 b(of)f Fz(getline)p FB(,)e(listing)j(whic)m (h)f(built-in)g(v)-5 b(ariables)31 b(are)f(set)150 2755 y(b)m(y)g(eac)m(h)i(one.)150 3101 y Fr(V)-8 b(arian)m(t)1064 b(E\013ect)150 3211 y Fz(getline)1024 b FB(Sets)30 b Fz($0)p FB(,)g Fz(NF)p FB(,)g Fz(FNR)p FB(,)g(and)g Fz(NR)150 3320 y(getline)e Fx(v)-5 b(ar)872 b FB(Sets)30 b Fx(v)-5 b(ar)p FB(,)31 b Fz(FNR)p FB(,)e(and)h Fz(NR)150 3430 y(getline)e(<)i Fx(\014le)802 b FB(Sets)30 b Fz($0)g FB(and)g Fz(NF)150 3540 y(getline)e Fk(var)40 b Fz(<)30 b Fk(file)542 b FB(Sets)30 b Fx(v)-5 b(ar)150 3649 y(command)34 b Fz(|)c(getline)528 b FB(Sets)30 b Fz($0)g FB(and)g Fz(NF)150 3759 y Fx(command)k Fz(|)c(getline)e Fx(v)-5 b(ar)376 b FB(Sets)30 b Fx(v)-5 b(ar)150 3868 y(command)34 b Fz(|&)29 b(getline)481 b FB(Sets)30 b Fz($0)g FB(and)g Fz(NF)p FB(.)40 b(This)29 b(is)i(a)f Fz(gawk)g FB(extension)150 3978 y Fx(command)k Fz(|&)29 b(getline)g Fx(v)-5 b(ar)328 b FB(Sets)30 b Fx(v)-5 b(ar)p FB(.)41 b(This)29 b(is)i(a)f Fz(gawk)g FB(extension)275 4125 y(T)-8 b(able)31 b(3.1:)41 b(getline)32 b(V)-8 b(arian)m(ts)32 b(and)e(What)h(They)f(Set)p eop end %%Page: 57 69 TeXDict begin 57 68 bop 2447 -116 a Fr(Chapter)30 b(4:)41 b(Prin)m(ting)32 b(Output)90 b FB(57)150 299 y Fu(4)80 b(Prin)l(ting)52 b(Output)150 536 y FB(One)37 b(of)g(the)g(most)g (common)h(programming)e(actions)i(is)g(to)f Fx(prin)m(t)p FB(,)i(or)e(output,)h(some)g(or)f(all)h(of)f(the)150 646 y(input.)55 b(Use)36 b(the)f Fz(print)f FB(statemen)m(t)k(for)d (simple)g(output,)i(and)e(the)g Fz(printf)f FB(statemen)m(t)j(for)f (fancier)150 755 y(formatting.)68 b(The)39 b Fz(print)f FB(statemen)m(t)j(is)e(not)h(limited)g(when)e(computing)h Fw(which)47 b FB(v)-5 b(alues)40 b(to)g(prin)m(t.)150 865 y(Ho)m(w)m(ev)m(er,)31 b(with)e(t)m(w)m(o)h(exceptions,)h(y)m(ou)e (cannot)h(sp)s(ecify)e Fw(how)40 b FB(to)30 b(prin)m(t)e(them|ho)m(w)h (man)m(y)g(columns,)150 974 y(whether)f(to)i(use)f(exp)s(onen)m(tial)g (notation)i(or)e(not,)g(and)g(so)g(on.)40 b(\(F)-8 b(or)30 b(the)f(exceptions,)i(see)e(Section)h(4.3)150 1084 y([Output)35 b(Separators],)j(page)e(59,)i(and)d(Section)i(4.4)g([Con)m(trolling)g (Numeric)f(Output)e(with)i Fz(print)p FB(],)150 1194 y(page)31 b(59.\))43 b(F)-8 b(or)32 b(prin)m(ting)e(with)g(sp)s (eci\014cations,)i(y)m(ou)f(need)f(the)h Fz(printf)e FB(statemen)m(t)k(\(see)e(Section)h(4.5)150 1303 y([Using)f Fz(printf)d FB(Statemen)m(ts)k(for)e(F)-8 b(ancier)32 b(Prin)m(ting],)f(page)g(60\).)275 1439 y(Besides)36 b(basic)g(and)f(formatted)h(prin)m(ting,)h(this)f(c)m(hapter)g(also)h (co)m(v)m(ers)g(I/O)e(redirections)i(to)f(\014les)150 1548 y(and)g(pip)s(es,)i(in)m(tro)s(duces)e(the)h(sp)s(ecial)g(\014le)g (names)g(that)g Fz(gawk)f FB(pro)s(cesses)g(in)m(ternally)-8 b(,)40 b(and)c(discusses)150 1658 y(the)31 b Fz(close)e FB(built-in)h(function.)150 1892 y FA(4.1)68 b(The)45 b Fq(print)d FA(Statemen)l(t)150 2051 y FB(The)j Fz(print)f FB(statemen)m(t)j(is)e(used)g(to)h(pro)s(duce)e(output)h(with)g (simple,)50 b(standardized)45 b(formatting.)150 2161 y(Sp)s(ecify)40 b(only)h(the)h(strings)f(or)g(n)m(um)m(b)s(ers)e(to)j (prin)m(t,)h(in)e(a)h(list)f(separated)h(b)m(y)f(commas.)73 b(They)41 b(are)150 2270 y(output,)30 b(separated)h(b)m(y)f(single)h (spaces,)g(follo)m(w)m(ed)h(b)m(y)f(a)f(newline.)41 b(The)30 b(statemen)m(t)i(lo)s(oks)f(lik)m(e)h(this:)390 2406 y Fz(print)46 b Fk(item1)p Fz(,)g Fk(item2)p Fz(,)h(...)150 2541 y FB(The)38 b(en)m(tire)i(list)f(of)g(items)h(ma)m(y)f(b)s(e)f (optionally)i(enclosed)g(in)e(paren)m(theses.)66 b(The)39 b(paren)m(theses)g(are)150 2651 y(necessary)32 b(if)g(an)m(y)g(of)g (the)f(item)i(expressions)e(uses)g(the)h(`)p Fz(>)p FB(')g(relational)i (op)s(erator;)f(otherwise)f(it)g(could)150 2761 y(b)s(e)e(confused)f (with)h(a)h(redirection)g(\(see)g(Section)g(4.6)h([Redirecting)f (Output)e(of)i Fz(print)d FB(and)i Fz(printf)p FB(],)150 2870 y(page)h(65\).)275 3006 y(The)c(items)h(to)g(prin)m(t)f(can)h(b)s (e)f(constan)m(t)h(strings)g(or)f(n)m(um)m(b)s(ers,)g(\014elds)g(of)h (the)f(curren)m(t)h(record)f(\(suc)m(h)150 3115 y(as)k Fz($1)p FB(\),)g(v)-5 b(ariables,)32 b(or)f(an)m(y)h Fz(awk)e FB(expression.)42 b(Numeric)31 b(v)-5 b(alues)31 b(are)h(con)m(v)m(erted)g(to)g(strings)f(and)f(then)150 3225 y(prin)m(ted.)275 3360 y(The)36 b(simple)h(statemen)m(t)i(`)p Fz(print)p FB(')d(with)h(no)g(items)h(is)f(equiv)-5 b(alen)m(t)39 b(to)e(`)p Fz(print)30 b($0)p FB(':)53 b(it)38 b(prin)m(ts)f(the)150 3470 y(en)m(tire)c(curren)m(t)g(record.)47 b(T)-8 b(o)33 b(prin)m(t)f(a)h(blank)f(line,)i(use)e(`)p Fz(print)d("")p FB(',)k(where)f Fz("")g FB(is)h(the)g(empt)m(y)g(string.)150 3580 y(T)-8 b(o)35 b(prin)m(t)e(a)i(\014xed)e(piece)i(of)f(text,)i(use) e(a)h(string)f(constan)m(t,)i(suc)m(h)e(as)g Fz("Don't)29 b(Panic")n FB(,)35 b(as)g(one)f(item.)150 3689 y(If)h(y)m(ou)g(forget)h (to)g(use)f(the)g(double-quote)g(c)m(haracters,)j(y)m(our)d(text)h(is)f (tak)m(en)i(as)e(an)g Fz(awk)f FB(expression,)150 3799 y(and)c(y)m(ou)h(will)g(probably)f(get)h(an)g(error.)41 b(Keep)30 b(in)h(mind)e(that)i(a)g(space)h(is)e(prin)m(ted)g(b)s(et)m (w)m(een)i(an)m(y)f(t)m(w)m(o)150 3908 y(items.)150 4142 y FA(4.2)68 b(Examples)46 b(of)f Fq(print)e FA(Statemen)l(ts)150 4302 y FB(Eac)m(h)33 b Fz(print)e FB(statemen)m(t)k(mak)m(es)e(at)g (least)h(one)f(line)g(of)f(output.)47 b(Ho)m(w)m(ev)m(er,)36 b(it)d(isn't)f(limited)i(to)f(only)150 4411 y(one)h(line.)53 b(If)33 b(an)h(item)h(v)-5 b(alue)35 b(is)f(a)h(string)f(that)g(con)m (tains)i(a)e(newline,)i(the)e(newline)g(is)g(output)g(along)150 4521 y(with)h(the)h(rest)g(of)g(the)g(string.)57 b(A)36 b(single)h Fz(print)d FB(statemen)m(t)k(can)e(mak)m(e)g(an)m(y)h(n)m (um)m(b)s(er)d(of)i(lines)g(this)150 4631 y(w)m(a)m(y)-8 b(.)275 4766 y(The)32 b(follo)m(wing)j(is)f(an)f(example)h(of)f(prin)m (ting)h(a)f(string)h(that)f(con)m(tains)i(em)m(b)s(edded)d(newlines)h (\(the)150 4876 y(`)p Fz(\\n)p FB(')c(is)h(an)f(escap)s(e)h(sequence,)g (used)e(to)i(represen)m(t)g(the)f(newline)h(c)m(haracter;)h(see)f (Section)g(2.2)h([Escap)s(e)150 4985 y(Sequences],)g(page)g(25\):)390 5121 y Fz($)47 b(awk)g('BEGIN)f({)i(print)e("line)h(one\\nline)e (two\\nline)g(three")h(}')410 5234 y Fy(a)533 5230 y Fz(line)h(one)410 5344 y Fy(a)533 5340 y Fz(line)g(two)p eop end %%Page: 58 70 TeXDict begin 58 69 bop 150 -116 a FB(58)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)410 303 y Fy(a)533 299 y Fz(line)47 b(three)275 427 y FB(The)36 b(next)h(example,)j(whic)m(h)d(is)g(run)f(on)h(the)g(`)p Fz(inventory-shipped)p FB(')c(\014le,)39 b(prin)m(ts)e(the)g(\014rst)g (t)m(w)m(o)150 536 y(\014elds)30 b(of)g(eac)m(h)i(input)d(record,)i (with)f(a)h(space)g(b)s(et)m(w)m(een)g(them:)390 664 y Fz($)47 b(awk)g('{)h(print)e($1,)h($2)g(}')g(inventory-shipped)410 778 y Fy(a)533 774 y Fz(Jan)g(13)410 887 y Fy(a)533 883 y Fz(Feb)g(15)410 997 y Fy(a)533 993 y Fz(Mar)g(15)390 1103 y(...)275 1230 y FB(A)38 b(common)h(mistak)m(e)g(in)f(using)g(the) h Fz(print)d FB(statemen)m(t)41 b(is)d(to)h(omit)g(the)g(comma)g(b)s (et)m(w)m(een)g(t)m(w)m(o)150 1340 y(items.)78 b(This)42 b(often)i(has)e(the)h(e\013ect)h(of)f(making)g(the)g(items)h(run)d (together)j(in)f(the)g(output,)i(with)150 1450 y(no)35 b(space.)56 b(The)35 b(reason)h(for)f(this)g(is)h(that)g(juxtap)s (osing)e(t)m(w)m(o)j(string)e(expressions)g(in)g Fz(awk)g FB(means)g(to)150 1559 y(concatenate)e(them.)41 b(Here)31 b(is)f(the)h(same)f(program,)h(without)f(the)h(comma:)390 1687 y Fz($)47 b(awk)g('{)h(print)e($1)h($2)g(}')g(inventory-shipped) 410 1801 y Fy(a)533 1797 y Fz(Jan13)410 1910 y Fy(a)533 1906 y Fz(Feb15)410 2020 y Fy(a)533 2016 y Fz(Mar15)390 2125 y(...)275 2253 y FB(T)-8 b(o)43 b(someone)h(unfamiliar)f(with)g (the)h(`)p Fz(inventory-shipped)p FB(')39 b(\014le,)47 b(neither)c(example's)h(output)150 2363 y(mak)m(es)31 b(m)m(uc)m(h)g(sense.)41 b(A)31 b(heading)f(line)h(at)g(the)g(b)s (eginning)f(w)m(ould)g(mak)m(e)h(it)g(clearer.)43 b(Let's)31 b(add)f(some)150 2472 y(headings)i(to)h(our)e(table)i(of)f(mon)m(ths)g (\()p Fz($1)p FB(\))g(and)f(green)i(crates)g(shipp)s(ed)d(\()p Fz($2)p FB(\).)45 b(W)-8 b(e)33 b(do)f(this)g(using)g(the)150 2582 y Fz(BEGIN)j FB(pattern)h(\(see)h(Section)g(6.1.4)h([The)e Fz(BEGIN)f FB(and)g Fz(END)g FB(Sp)s(ecial)i(P)m(atterns],)i(page)e (96\))g(so)f(that)150 2692 y(the)31 b(headings)f(are)h(only)f(prin)m (ted)g(once:)390 2819 y Fz(awk)47 b('BEGIN)f({)95 b(print)47 b("Month)f(Crates")1058 2929 y(print)h("-----)f(------")f(})915 3039 y({)95 b(print)47 b($1,)f($2)i(}')f(inventory-shipped)150 3166 y FB(When)30 b(run,)f(the)i(program)f(prin)m(ts)g(the)g(follo)m (wing:)390 3294 y Fz(Month)46 b(Crates)390 3404 y(-----)g(------)390 3513 y(Jan)h(13)390 3623 y(Feb)g(15)390 3733 y(Mar)g(15)390 3842 y(...)150 3970 y FB(The)30 b(only)h(problem,)f(ho)m(w)m(ev)m(er,)j (is)d(that)i(the)e(headings)h(and)f(the)h(table)g(data)h(don't)e(line)h (up!)41 b(W)-8 b(e)32 b(can)150 4080 y(\014x)e(this)g(b)m(y)g(prin)m (ting)h(some)f(spaces)h(b)s(et)m(w)m(een)g(the)g(t)m(w)m(o)g(\014elds:) 390 4208 y Fz(awk)47 b('BEGIN)f({)h(print)g("Month)f(Crates")1010 4317 y(print)h("-----)f(------")g(})915 4427 y({)h(print)g($1,)g(")238 b(",)47 b($2)g(}')h(inventory-shipped)275 4555 y FB(Lining)34 b(up)f(columns)i(this)f(w)m(a)m(y)i(can)f(get)h(prett)m(y)f (complicated)h(when)e(there)h(are)g(man)m(y)f(columns)150 4664 y(to)28 b(\014x.)39 b(Coun)m(ting)28 b(spaces)g(for)f(t)m(w)m(o)i (or)e(three)g(columns)h(is)f(simple,)h(but)f(an)m(y)h(more)f(than)g (this)h(can)f(tak)m(e)150 4774 y(up)37 b(a)h(lot)h(of)f(time.)63 b(This)37 b(is)h(wh)m(y)g(the)g Fz(printf)e FB(statemen)m(t)j(w)m(as)f (created)h(\(see)g(Section)g(4.5)f([Using)150 4883 y Fz(printf)23 b FB(Statemen)m(ts)j(for)e(F)-8 b(ancier)26 b(Prin)m(ting],)g(page)f(60\);)j(one)d(of)g(its)g(sp)s(ecialties)h(is)e (lining)h(up)e(columns)150 4993 y(of)31 b(data.)390 5121 y Fr(NOTE:)24 b FB(Y)-8 b(ou)25 b(can)f(con)m(tin)m(ue)h(either)f(a)h Fz(print)d FB(or)i Fz(printf)e FB(statemen)m(t)k(simply)d(b)m(y)h (putting)390 5230 y(a)44 b(newline)g(after)h(an)m(y)f(comma)h(\(see)g (Section)f(1.6)h([)p Fz(awk)f FB(Statemen)m(ts)h(V)-8 b(ersus)44 b(Lines],)390 5340 y(page)31 b(20\).)p eop end %%Page: 59 71 TeXDict begin 59 70 bop 2447 -116 a Fr(Chapter)30 b(4:)41 b(Prin)m(ting)32 b(Output)90 b FB(59)150 299 y FA(4.3)68 b(Output)45 b(Separators)150 458 y FB(As)30 b(men)m(tioned)g (previously)-8 b(,)31 b(a)f Fz(print)e FB(statemen)m(t)k(con)m(tains)f (a)f(list)h(of)f(items)g(separated)g(b)m(y)g(commas.)150 568 y(In)37 b(the)h(output,)i(the)e(items)g(are)g(normally)g(separated) h(b)m(y)e(single)i(spaces.)63 b(Ho)m(w)m(ev)m(er,)42 b(this)c(do)s(esn't)150 677 y(need)26 b(to)h(b)s(e)f(the)g(case;)j(a)e (single)g(space)g(is)f(only)h(the)f(default.)40 b(An)m(y)26 b(string)h(of)f(c)m(haracters)i(ma)m(y)f(b)s(e)f(used)150 787 y(as)33 b(the)g Fx(output)f(\014eld)h(separator)40 b FB(b)m(y)32 b(setting)i(the)f(built-in)g(v)-5 b(ariable)33 b Fz(OFS)p FB(.)48 b(The)32 b(initial)i(v)-5 b(alue)33 b(of)g(this)150 897 y(v)-5 b(ariable)31 b(is)g(the)f(string)g Fz(")h(")o FB(|that)g(is,)g(a)g(single)g(space.)275 1040 y(The)40 b(output)g(from)g(an)g(en)m(tire)h Fz(print)e FB(statemen)m(t)k(is)d(called)i(an)e Fx(output)g(record)p FB(.)71 b(Eac)m(h)41 b Fz(print)150 1150 y FB(statemen)m(t)c(outputs)e (one)g(output)g(record,)i(and)d(then)h(outputs)g(a)g(string)g(called)i (the)e Fx(output)g(record)150 1259 y(separator)44 b FB(\(or)38 b Fz(ORS)p FB(\).)60 b(The)37 b(initial)i(v)-5 b(alue)37 b(of)h Fz(ORS)e FB(is)h(the)g(string)h Fz("\\n")p FB(;)h(i.e.,)h(a)e (newline)f(c)m(haracter.)150 1369 y(Th)m(us,)30 b(eac)m(h)h Fz(print)e FB(statemen)m(t)j(normally)f(mak)m(es)g(a)g(separate)g (line.)275 1512 y(In)26 b(order)g(to)i(c)m(hange)g(ho)m(w)f(output)g (\014elds)g(and)f(records)h(are)g(separated,)i(assign)e(new)g(v)-5 b(alues)27 b(to)h(the)150 1622 y(v)-5 b(ariables)36 b Fz(OFS)f FB(and)g Fz(ORS)p FB(.)56 b(The)35 b(usual)g(place)h(to)h(do)e (this)h(is)f(in)h(the)g Fz(BEGIN)e FB(rule)h(\(see)i(Section)f(6.1.4) 150 1731 y([The)j Fz(BEGIN)f FB(and)h Fz(END)g FB(Sp)s(ecial)g(P)m (atterns],)44 b(page)c(96\),)j(so)d(that)g(it)g(happ)s(ens)d(b)s(efore) j(an)m(y)f(input)g(is)150 1841 y(pro)s(cessed.)56 b(It)36 b(can)g(also)g(b)s(e)f(done)h(with)f(assignmen)m(ts)i(on)e(the)h (command)f(line,)j(b)s(efore)d(the)h(names)150 1950 y(of)31 b(the)g(input)g(\014les,)g(or)g(using)g(the)g(`)p Fz(-v)p FB(')g(command-line)g(option)h(\(see)g(Section)g(11.2)g([Command-Line) 150 2060 y(Options],)f(page)g(173\).)42 b(The)30 b(follo)m(wing)i (example)f(prin)m(ts)f(the)h(\014rst)e(and)h(second)h(\014elds)f(of)g (eac)m(h)i(input)150 2170 y(record,)f(separated)f(b)m(y)h(a)f (semicolon,)i(with)e(a)h(blank)f(line)h(added)f(after)g(eac)m(h)i (newline:)390 2313 y Fz($)47 b(awk)g('BEGIN)f({)i(OFS)f(=)g(";";)g(ORS) g(=)g("\\n\\n")f(})390 2423 y(>)572 b({)48 b(print)e($1,)h($2)g(}')h (BBS-list)410 2536 y Fy(a)533 2532 y Fz(aardvark;555-5553)410 2646 y Fy(a)410 2755 y(a)533 2751 y Fz(alpo-net;555-3412)410 2865 y Fy(a)410 2975 y(a)533 2971 y Fz(barfly;555-7685)390 3080 y(...)275 3223 y FB(If)30 b(the)h(v)-5 b(alue)31 b(of)g Fz(ORS)f FB(do)s(es)g(not)h(con)m(tain)h(a)g(newline,)f(the)g (program's)f(output)h(is)f(run)g(together)i(on)150 3333 y(a)f(single)g(line.)150 3579 y FA(4.4)68 b(Con)l(trolling)47 b(Numeric)e(Output)g(with)g Fq(print)150 3738 y FB(When)c(the)g Fz(print)f FB(statemen)m(t)j(is)f(used)e(to)i(prin)m(t)f(n)m(umeric)g (v)-5 b(alues,)45 b Fz(awk)40 b FB(in)m(ternally)i(con)m(v)m(erts)h (the)150 3848 y(n)m(um)m(b)s(er)31 b(to)i(a)g(string)f(of)h(c)m (haracters)h(and)e(prin)m(ts)g(that)h(string.)47 b Fz(awk)31 b FB(uses)h(the)h Fz(sprintf)d FB(function)i(to)150 3957 y(do)f(this)g(con)m(v)m(ersion)i(\(see)f(Section)g(8.1.3)h ([String-Manipulation)f(F)-8 b(unctions],)33 b(page)f(129\).)45 b(F)-8 b(or)32 b(no)m(w,)150 4067 y(it)g(su\016ces)e(to)i(sa)m(y)g (that)g(the)f Fz(sprintf)e FB(function)i(accepts)h(a)f Fx(format)h(sp)s(eci\014cation)g FB(that)f(tells)h(it)g(ho)m(w)150 4177 y(to)40 b(format)g(n)m(um)m(b)s(ers)f(\(or)h(strings\),)i(and)d (that)h(there)g(are)g(a)g(n)m(um)m(b)s(er)e(of)i(di\013eren)m(t)g(w)m (a)m(ys)h(in)e(whic)m(h)150 4286 y(n)m(um)m(b)s(ers)31 b(can)i(b)s(e)f(formatted.)48 b(The)33 b(di\013eren)m(t)g(format)g(sp)s (eci\014cations)g(are)g(discussed)f(more)h(fully)f(in)150 4396 y(Section)f(4.5.2)h([F)-8 b(ormat-Con)m(trol)33 b(Letters],)f(page)f(60.)275 4539 y(The)24 b(built-in)h(v)-5 b(ariable)25 b Fz(OFMT)f FB(con)m(tains)i(the)g(default)f(format)g(sp)s (eci\014cation)h(that)f Fz(print)f FB(uses)g(with)150 4649 y Fz(sprintf)31 b FB(when)h(it)h(w)m(an)m(ts)h(to)f(con)m(v)m(ert) h(a)g(n)m(um)m(b)s(er)d(to)j(a)f(string)g(for)f(prin)m(ting.)48 b(The)32 b(default)h(v)-5 b(alue)34 b(of)150 4758 y Fz(OFMT)40 b FB(is)h Fz("\045.6g")p FB(.)71 b(The)40 b(w)m(a)m(y)i Fz(print)e FB(prin)m(ts)g(n)m(um)m(b)s(ers)g(can)h(b)s(e)f(c)m(hanged)i (b)m(y)f(supplying)e(di\013eren)m(t)150 4868 y(format)31 b(sp)s(eci\014cations)g(as)f(the)h(v)-5 b(alue)31 b(of)f Fz(OFMT)p FB(,)g(as)g(sho)m(wn)g(in)g(the)h(follo)m(wing)h(example:)390 5011 y Fz($)47 b(awk)g('BEGIN)f({)390 5121 y(>)143 b(OFMT)47 b(=)g("\045.0f")94 b(#)47 b(print)g(numbers)e(as)j(integers)d (\(rounds\))390 5230 y(>)143 b(print)46 b(17.23,)g(17.54)h(}')410 5344 y Fy(a)533 5340 y Fz(17)g(18)p eop end %%Page: 60 72 TeXDict begin 60 71 bop 150 -116 a FB(60)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(According)36 b(to)g(the)f(POSIX)g(standard,)h Fz(awk)p FB('s)e(b)s(eha)m(vior)h(is)h(unde\014ned)d(if)i Fz(OFMT)f FB(con)m(tains)j(an)m(ything)150 408 y(but)30 b(a)g(\015oating-p)s(oin)m(t)i(con)m(v)m(ersion)g(sp)s(eci\014cation.) 2073 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 627 a FA(4.5)68 b(Using)46 b Fq(printf)c FA(Statemen)l(ts)k(for)f(F)-11 b(ancier)45 b(Prin)l(ting)150 787 y FB(F)-8 b(or)30 b(more)f(precise)h(con)m(trol)g(o)m(v)m(er)h(the) e(output)g(format)h(than)f(what)g(is)g(normally)g(pro)m(vided)g(b)m(y)g Fz(print)p FB(,)150 896 y(use)42 b Fz(printf)p FB(.)75 b Fz(printf)40 b FB(can)j(b)s(e)e(used)h(to)h(sp)s(ecify)f(the)g(width) f(to)i(use)f(for)g(eac)m(h)i(item,)i(as)c(w)m(ell)i(as)150 1006 y(v)-5 b(arious)30 b(formatting)h(c)m(hoices)h(for)e(n)m(um)m(b)s (ers)e(\(suc)m(h)j(as)f(what)g(output)g(base)g(to)h(use,)f(whether)f (to)i(prin)m(t)150 1115 y(an)25 b(exp)s(onen)m(t,)h(whether)e(to)i (prin)m(t)e(a)h(sign,)i(and)d(ho)m(w)h(man)m(y)g(digits)g(to)h(prin)m (t)e(after)h(the)h(decimal)f(p)s(oin)m(t\).)150 1225 y(This)33 b(is)h(done)g(b)m(y)g(supplying)e(a)j(string,)g(called)g(the) f Fx(format)g(string)p FB(,)h(that)g(con)m(trols)g(ho)m(w)f(and)f (where)150 1335 y(to)e(prin)m(t)f(the)h(other)f(argumen)m(ts.)150 1520 y Fj(4.5.1)63 b(In)m(tro)s(duction)41 b(to)g(the)g Fh(printf)g Fj(Statemen)m(t)150 1667 y FB(A)30 b(simple)h Fz(printf)d FB(statemen)m(t)33 b(lo)s(oks)e(lik)m(e)g(this:)390 1795 y Fz(printf)46 b Fk(format)p Fz(,)g Fk(item1)p Fz(,)g Fk(item2)p Fz(,)g(...)150 1922 y FB(The)35 b(en)m(tire)i(list)g(of)f (argumen)m(ts)g(ma)m(y)h(optionally)g(b)s(e)e(enclosed)i(in)f(paren)m (theses.)57 b(The)36 b(paren)m(theses)150 2032 y(are)28 b(necessary)f(if)g(an)m(y)h(of)f(the)g(item)h(expressions)f(use)g(the)g (`)p Fz(>)p FB(')h(relational)h(op)s(erator;)f(otherwise,)h(it)f(can) 150 2141 y(b)s(e)i(confused)f(with)h(a)h(redirection)g(\(see)g(Section) g(4.6)h([Redirecting)f(Output)e(of)i Fz(print)d FB(and)i Fz(printf)p FB(],)150 2251 y(page)h(65\).)275 2379 y(The)25 b(di\013erence)i(b)s(et)m(w)m(een)f Fz(printf)f FB(and)g Fz(print)g FB(is)h(the)h Fx(format)h FB(argumen)m(t.)40 b(This)25 b(is)h(an)g(expression)150 2488 y(whose)k(v)-5 b(alue)31 b(is)f(tak)m(en)h(as)g(a)f(string;)h(it)f(sp)s(eci\014es)g (ho)m(w)h(to)f(output)g(eac)m(h)i(of)e(the)g(other)h(argumen)m(ts.)41 b(It)150 2598 y(is)30 b(called)i(the)f Fx(format)f(string)p FB(.)275 2726 y(The)35 b(format)h(string)f(is)h(v)m(ery)g(similar)g(to) g(that)h(in)e(the)h(ISO)e(C)i(library)f(function)g Fz(printf)p FB(.)55 b(Most)150 2835 y(of)30 b Fx(format)i FB(is)e(text)h(to)f (output)g(v)m(erbatim.)41 b(Scattered)31 b(among)f(this)g(text)h(are)f Fx(format)g(sp)s(eci\014ers)p FB(|one)150 2945 y(p)s(er)i(item.)51 b(Eac)m(h)34 b(format)g(sp)s(eci\014er)f(sa)m(ys)h(to)g(output)f(the)h (next)f(item)h(in)g(the)f(argumen)m(t)h(list)g(at)g(that)150 3054 y(place)d(in)f(the)h(format.)275 3182 y(The)22 b Fz(printf)g FB(statemen)m(t)j(do)s(es)e(not)g(automatically)j(app)s (end)c(a)h(newline)h(to)g(its)f(output.)38 b(It)23 b(outputs)150 3291 y(only)35 b(what)h(the)f(format)h(string)f(sp)s(eci\014es.)55 b(So)35 b(if)g(a)h(newline)f(is)g(needed,)i(y)m(ou)e(m)m(ust)h(include) f(one)g(in)150 3401 y(the)h(format)f(string.)56 b(The)35 b(output)g(separator)h(v)-5 b(ariables)36 b Fz(OFS)e FB(and)h Fz(ORS)g FB(ha)m(v)m(e)h(no)f(e\013ect)i(on)f Fz(printf)150 3511 y FB(statemen)m(ts.)42 b(F)-8 b(or)32 b(example:)390 3638 y Fz($)47 b(awk)g('BEGIN)f({)390 3748 y(>)191 b(ORS)47 b(=)g("\\nOUCH!\\n";)d(OFS)j(=)h("+")390 3857 y(>)191 b(msg)47 b(=)g("Dont)f(Panic!")390 3967 y(>)191 b(printf)46 b("\045s\\n",)g(msg)390 4077 y(>)h(}')410 4190 y Fy(a)533 4186 y Fz(Dont)g(Panic!)150 4314 y FB(Here,)31 b(neither)f(the)h(`)p Fz(+)p FB(')g(nor)e(the)i(`)p Fz(OUCH)p FB(')f(app)s(ear)f(when)h(the)g(message)i(is)e(prin)m(ted.)150 4499 y Fj(4.5.2)63 b(F)-10 b(ormat-Con)m(trol)41 b(Letters)150 4646 y FB(A)c(format)f(sp)s(eci\014er)g(starts)h(with)f(the)h(c)m (haracter)h(`)p Fz(\045)p FB(')e(and)g(ends)g(with)g(a)h Fx(format-con)m(trol)h(letter)p FB(|it)150 4756 y(tells)25 b(the)g Fz(printf)d FB(statemen)m(t)k(ho)m(w)f(to)g(output)f(one)g (item.)39 b(The)24 b(format-con)m(trol)j(letter)e(sp)s(eci\014es)f (what)150 4866 y Fw(kind)35 b FB(of)26 b(v)-5 b(alue)27 b(to)f(prin)m(t.)39 b(The)26 b(rest)g(of)g(the)g(format)g(sp)s (eci\014er)f(is)h(made)g(up)f(of)h(optional)h Fx(mo)s(di\014ers)h FB(that)150 4975 y(con)m(trol)33 b Fw(how)42 b FB(to)32 b(prin)m(t)f(the)h(v)-5 b(alue,)32 b(suc)m(h)f(as)h(the)g(\014eld)f (width.)43 b(Here)31 b(is)h(a)g(list)g(of)f(the)h(format-con)m(trol)150 5085 y(letters:)150 5230 y Fz(\045c)384 b FB(This)31 b(prin)m(ts)g(a)g(n)m(um)m(b)s(er)f(as)i(an)f(ASCI)s(I)f(c)m(haracter;) k(th)m(us,)e(`)p Fz(printf)c("\045c",)h(65)p FB(')i(outputs)630 5340 y(the)c(letter)h(`)p Fz(A)p FB('.)40 b(\(The)26 b(output)g(for)h(a)g(string)g(v)-5 b(alue)27 b(is)f(the)h(\014rst)f(c)m (haracter)j(of)d(the)h(string.\))p eop end %%Page: 61 73 TeXDict begin 61 72 bop 2447 -116 a Fr(Chapter)30 b(4:)41 b(Prin)m(ting)32 b(Output)90 b FB(61)150 299 y Fz(\045d)p FB(,)30 b Fz(\045i)233 b FB(These)27 b(are)h(equiv)-5 b(alen)m(t;)31 b(they)c(b)s(oth)g(prin)m(t)g(a)h(decimal)h(in)m(teger.) 41 b(\(The)28 b(`)p Fz(\045i)p FB(')f(sp)s(eci\014cation)630 408 y(is)j(for)h(compatibilit)m(y)h(with)e(ISO)g(C.\))150 567 y Fz(\045e)p FB(,)g Fz(\045E)233 b FB(These)30 b(prin)m(t)g(a)h(n)m (um)m(b)s(er)e(in)h(scien)m(ti\014c)i(\(exp)s(onen)m(tial\))g (notation;)g(for)e(example:)870 702 y Fz(printf)46 b("\0454.3e\\n",)f (1950)630 836 y FB(prin)m(ts)26 b(`)p Fz(1.950e+03)p FB(',)g(with)g(a)h(total)h(of)f(four)f(signi\014can)m(t)h(\014gures,)g (three)g(of)f(whic)m(h)h(follo)m(w)630 945 y(the)35 b(decimal)h(p)s (oin)m(t.)55 b(\(The)35 b(`)p Fz(4.3)p FB(')f(represen)m(ts)h(t)m(w)m (o)i(mo)s(di\014ers,)e(discussed)f(in)h(the)g(next)630 1055 y(subsection.\))41 b(`)p Fz(\045E)p FB(')30 b(uses)g(`)p Fz(E)p FB(')h(instead)f(of)h(`)p Fz(e)p FB(')g(in)f(the)g(output.)150 1214 y Fz(\045f)384 b FB(This)30 b(prin)m(ts)f(a)i(n)m(um)m(b)s(er)e (in)h(\015oating-p)s(oin)m(t)i(notation.)42 b(F)-8 b(or)31 b(example:)870 1348 y Fz(printf)46 b("\0454.3f",)g(1950)630 1482 y FB(prin)m(ts)30 b(`)p Fz(1950.000)p FB(',)f(with)i(a)g(total)h (of)f(four)f(signi\014can)m(t)h(\014gures,)g(three)g(of)f(whic)m(h)h (follo)m(w)630 1592 y(the)k(decimal)h(p)s(oin)m(t.)55 b(\(The)35 b(`)p Fz(4.3)p FB(')f(represen)m(ts)h(t)m(w)m(o)i(mo)s (di\014ers,)e(discussed)f(in)h(the)g(next)630 1701 y(subsection.\))630 1836 y(On)42 b(systems)h(supp)s(orting)f(IEEE)g(754)i(\015oating)g(p)s (oin)m(t)f(format,)k(v)-5 b(alues)44 b(represen)m(ting)630 1945 y(negativ)m(e)37 b(in\014nit)m(y)e(are)h(formatted)f(as)h(`)p Fz(-inf)p FB(')e(or)h(`)p Fz(-infinity)p FB(',)g(and)f(p)s(ositiv)m(e)i (in\014nit)m(y)630 2055 y(as)31 b(`)p Fz(inf)p FB(')f(and)f(`)p Fz(-infinity)p FB('.)39 b(The)30 b(sp)s(ecial)h(\\not)g(a)g(n)m(um)m(b) s(er")e(v)-5 b(alue)31 b(formats)g(as)g(`)p Fz(-nan)p FB(')630 2164 y(or)f(`)p Fz(nan)p FB('.)150 2323 y Fz(\045F)384 b FB(Lik)m(e)29 b Fz(\045f)e FB(but)h(the)g(in\014nit)m(y)g(and)f (\\not)i(a)f(n)m(um)m(b)s(er")g(v)-5 b(alues)28 b(are)h(sp)s(elled)e (using)h(upp)s(ercase)630 2433 y(letters.)630 2567 y(The)36 b Fz(\045F)f FB(format)i(is)f(a)h(POSIX)e(extension)i(to)g(ISO)e(C;)h (not)g(all)h(systems)f(supp)s(ort.)57 b(On)630 2677 y(those)31 b(that)g(don't,)f Fz(gawk)g FB(uses)g Fz(\045f)f FB(instead.)150 2836 y Fz(\045g)p FB(,)h Fz(\045G)233 b FB(These)29 b(prin)m(t)f(a)i(n) m(um)m(b)s(er)d(in)i(either)g(scien)m(ti\014c)h(notation)h(or)e(in)f (\015oating-p)s(oin)m(t)i(notation,)630 2945 y(whic)m(hev)m(er)37 b(uses)g(few)m(er)f(c)m(haracters;)42 b(if)37 b(the)f(result)h(is)g (prin)m(ted)f(in)g(scien)m(ti\014c)i(notation,)630 3055 y(`)p Fz(\045G)p FB(')30 b(uses)g(`)p Fz(E)p FB(')h(instead)f(of)h(`)p Fz(e)p FB('.)150 3214 y Fz(\045o)384 b FB(This)30 b(prin)m(ts)f(an)i (unsigned)e(o)s(ctal)j(in)m(teger.)150 3373 y Fz(\045s)384 b FB(This)30 b(prin)m(ts)f(a)i(string.)150 3531 y Fz(\045u)384 b FB(This)34 b(prin)m(ts)g(an)g(unsigned)f(decimal)j(in)m(teger.)54 b(\(This)34 b(format)h(is)f(of)h(marginal)g(use,)g(b)s(e-)630 3641 y(cause)i(all)h(n)m(um)m(b)s(ers)d(in)h Fz(awk)g FB(are)h(\015oating-p)s(oin)m(t;)k(it)c(is)f(pro)m(vided)h(primarily)f (for)g(com-)630 3751 y(patibilit)m(y)c(with)e(C.\))150 3909 y Fz(\045x)p FB(,)g Fz(\045X)233 b FB(These)33 b(prin)m(t)g(an)h (unsigned)e(hexadecimal)j(in)m(teger;)i(`)p Fz(\045X)p FB(')c(uses)g(the)h(letters)h(`)p Fz(A)p FB(')f(through)630 4019 y(`)p Fz(F)p FB(')d(instead)f(of)h(`)p Fz(a)p FB(')f(through)g(`)p Fz(f)p FB('.)150 4178 y Fz(\045\045)384 b FB(This)29 b(isn't)g(a)h(format-con)m(trol)h(letter,)g(but)e(it)h(do)s(es)f(ha)m (v)m(e)i(meaning|the)e(sequence)h(`)p Fz(\045\045)p FB(')630 4287 y(outputs)e(one)g(`)p Fz(\045)p FB(';)h(it)g(do)s(es)e(not)i (consume)f(an)f(argumen)m(t)i(and)e(it)i(ignores)f(an)m(y)h(mo)s (di\014ers.)390 4446 y Fr(NOTE:)34 b FB(When)g(using)g(the)g(in)m (teger)i(format-con)m(trol)g(letters)g(for)e(v)-5 b(alues)34 b(that)h(are)f(out-)390 4556 y(side)45 b(the)h(range)g(of)f(the)h (widest)g(C)f(in)m(teger)h(t)m(yp)s(e,)k Fz(gawk)44 b FB(switc)m(hes)j(to)f(the)f(the)h(`)p Fz(\045g)p FB(')390 4666 y(format)29 b(sp)s(eci\014er.)40 b(If)28 b(`)p Fz(--lint)p FB(')g(is)h(pro)m(vided)f(on)h(the)g(command)g(line)g(\(see)h(Section)f (11.2)390 4775 y([Command-Line)f(Options],)h(page)g(173\),)i Fz(gawk)c FB(w)m(arns)h(ab)s(out)g(this.)40 b(Other)28 b(v)m(ersions)h(of)390 4885 y Fz(awk)g FB(ma)m(y)i(prin)m(t)f(in)m(v)-5 b(alid)31 b(v)-5 b(alues)31 b(or)f(do)h(something)g(else)g(en)m(tirely) -8 b(.)1278 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 5083 a Fj(4.5.3)63 b(Mo)s(di\014ers)43 b(for)f Fh(printf)f Fj(F)-10 b(ormats)150 5230 y FB(A)33 b(format)g(sp)s(eci\014cation)g(can)g(also)g(include)f Fx(mo)s(di\014ers)k FB(that)d(can)g(con)m(trol)h(ho)m(w)e(m)m(uc)m(h)h (of)f(the)h(item's)150 5340 y(v)-5 b(alue)27 b(is)g(prin)m(ted,)g(as)h (w)m(ell)f(as)g(ho)m(w)g(m)m(uc)m(h)g(space)g(it)h(gets.)40 b(The)27 b(mo)s(di\014ers)e(come)j(b)s(et)m(w)m(een)g(the)f(`)p Fz(\045)p FB(')g(and)p eop end %%Page: 62 74 TeXDict begin 62 73 bop 150 -116 a FB(62)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(the)35 b(format-con)m(trol)i(letter.)54 b(W)-8 b(e)36 b(will)f(use)f(the)h(bullet)g(sym)m(b)s(ol)f(\\)p Fy(\017)p FB(")i(in)e(the)h(follo)m(wing)h(examples)f(to)150 408 y(represen)m(t)c(spaces)g(in)g(the)g(output.)42 b(Here)31 b(are)h(the)f(p)s(ossible)f(mo)s(di\014ers,)g(in)h(the)g(order)g(in)f (whic)m(h)h(they)150 518 y(ma)m(y)g(app)s(ear:)150 685 y Fk(N)11 b Fz($)373 b FB(An)27 b(in)m(teger)i(constan)m(t)g(follo)m(w) m(ed)g(b)m(y)e(a)h(`)p Fz($)p FB(')g(is)g(a)f Fx(p)s(ositional)i(sp)s (eci\014er)p FB(.)39 b(Normally)-8 b(,)30 b(format)630 794 y(sp)s(eci\014cations)g(are)h(applied)e(to)i(argumen)m(ts)f(in)f (the)h(order)f(giv)m(en)i(in)f(the)g(format)g(string.)630 904 y(With)45 b(a)g(p)s(ositional)h(sp)s(eci\014er,)i(the)d(format)g (sp)s(eci\014cation)h(is)f(applied)f(to)i(a)f(sp)s(eci\014c)630 1013 y(argumen)m(t,)35 b(instead)f(of)f(what)g(w)m(ould)h(b)s(e)e(the)i (next)g(argumen)m(t)g(in)f(the)g(list.)51 b(P)m(ositional)630 1123 y(sp)s(eci\014ers)30 b(b)s(egin)g(coun)m(ting)h(with)f(one.)41 b(Th)m(us:)870 1260 y Fz(printf)46 b("\045s)h(\045s\\n",)f("don't",)g ("panic")870 1369 y(printf)g("\0452$s)g(\0451$s\\n",)g("panic",)g ("don't")630 1506 y FB(prin)m(ts)30 b(the)g(famous)h(friendly)e (message)j(t)m(wice.)630 1643 y(A)m(t)d(\014rst)e(glance,)j(this)e (feature)g(do)s(esn't)g(seem)g(to)h(b)s(e)e(of)i(m)m(uc)m(h)f(use.)39 b(It)28 b(is)g(in)g(fact)h(a)f Fz(gawk)630 1753 y FB(extension,)d(in)m (tended)d(for)g(use)g(in)h(translating)g(messages)g(at)g(run)m(time.)38 b(See)23 b(Section)g(9.4.2)630 1862 y([Rearranging)36 b Fz(printf)e FB(Argumen)m(ts],)k(page)e(160,)i(whic)m(h)e(describ)s (es)f(ho)m(w)g(and)g(wh)m(y)g(to)630 1972 y(use)30 b(p)s(ositional)h (sp)s(eci\014ers.)40 b(F)-8 b(or)31 b(no)m(w,)g(w)m(e)g(will)g(not)f (use)g(them.)150 2136 y Fz(-)432 b FB(The)26 b(min)m(us)g(sign,)i(used) d(b)s(efore)i(the)g(width)e(mo)s(di\014er)h(\(see)i(later)f(on)g(in)f (this)g(table\),)j(sa)m(ys)630 2246 y(to)h(left-justify)f(the)g (argumen)m(t)g(within)g(its)g(sp)s(eci\014ed)f(width.)40 b(Normally)-8 b(,)30 b(the)f(argumen)m(t)630 2355 y(is)h(prin)m(ted)g (righ)m(t-justi\014ed)h(in)f(the)g(sp)s(eci\014ed)g(width.)40 b(Th)m(us:)870 2492 y Fz(printf)46 b("\045-4s",)g("foo")630 2629 y FB(prin)m(ts)30 b(`)p Fz(foo)p Fy(\017)p FB('.)150 2793 y Fk(space)240 b FB(F)-8 b(or)26 b(n)m(umeric)f(con)m(v)m (ersions,)i(pre\014x)d(p)s(ositiv)m(e)i(v)-5 b(alues)26 b(with)f(a)g(space)h(and)e(negativ)m(e)k(v)-5 b(alues)630 2903 y(with)30 b(a)h(min)m(us)e(sign.)150 3067 y Fz(+)432 b FB(The)31 b(plus)g(sign,)i(used)e(b)s(efore)h(the)g(width)f(mo)s (di\014er)g(\(see)h(later)h(on)f(in)g(this)g(table\),)h(sa)m(ys)630 3176 y(to)i(alw)m(a)m(ys)g(supply)e(a)i(sign)f(for)f(n)m(umeric)h(con)m (v)m(ersions,)j(ev)m(en)e(if)f(the)g(data)h(to)f(format)h(is)630 3286 y(p)s(ositiv)m(e.)42 b(The)30 b(`)p Fz(+)p FB(')g(o)m(v)m(errides) h(the)g(space)g(mo)s(di\014er.)150 3450 y Fz(#)432 b FB(Use)34 b(an)g(\\alternate)j(form")d(for)g(certain)h(con)m(trol)g (letters.)53 b(F)-8 b(or)35 b(`)p Fz(\045o)p FB(',)g(supply)e(a)h (leading)630 3560 y(zero.)50 b(F)-8 b(or)34 b(`)p Fz(\045x)p FB(')f(and)g(`)p Fz(\045X)p FB(',)h(supply)e(a)i(leading)g(`)p Fz(0x)p FB(')f(or)g(`)p Fz(0X)p FB(')h(for)f(a)g(nonzero)h(result.)49 b(F)-8 b(or)630 3669 y(`)p Fz(\045e)p FB(',)40 b(`)p Fz(\045E)p FB(',)f(and)e(`)p Fz(\045f)p FB(',)j(the)d(result)h(alw)m(a) m(ys)h(con)m(tains)g(a)f(decimal)g(p)s(oin)m(t.)63 b(F)-8 b(or)38 b(`)p Fz(\045g)p FB(')g(and)630 3779 y(`)p Fz(\045G)p FB(',)31 b(trailing)g(zeros)g(are)g(not)f(remo)m(v)m(ed)i(from)e(the)g (result.)150 3943 y Fz(0)432 b FB(A)30 b(leading)i(`)p Fz(0)p FB(')e(\(zero\))i(acts)f(as)g(a)f(\015ag)h(that)g(indicates)g (that)g(output)f(should)f(b)s(e)h(padded)630 4053 y(with)e(zeros)h (instead)f(of)g(spaces.)41 b(This)27 b(applies)h(ev)m(en)h(to)g(non-n)m (umeric)f(output)f(formats.)687 4162 y(This)35 b(\015ag)i(only)f(has)f (an)h(e\013ect)i(when)d(the)h(\014eld)f(width)h(is)g(wider)f(than)h (the)g(v)-5 b(alue)36 b(to)-4071 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: lflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: rflashlight.small.xpic (xpic) %%CreationDate: Tue Dec 12 09:51:27 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 80 32 m 64 24 l x 32 24 m 56 32 l x 32 8 m 56 0 l x 8 16 56 16 e 0 24 32 8 b 64 16 m 80 16 l x 64 8 m 80 0 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 630 4272 a(prin)m(t.)150 4436 y Fz(')432 b FB(A)37 b(single)g(quote)g(or)g(ap)s(ostrohe)g(c)m(haracter)h(is)f(a) g(POSIX)e(extension)j(to)f(ISO)f(C.)g(It)h(in-)630 4546 y(dicates)d(that)g(the)f(in)m(teger)h(part)f(of)g(a)h(\015oating)g(p)s (oin)m(t)f(v)-5 b(alue,)34 b(or)f(the)g(en)m(tire)h(part)f(of)g(an)630 4655 y(in)m(teger)g(decimal)g(v)-5 b(alue,)32 b(should)f(ha)m(v)m(e)i (a)f(thousands-separator)f(c)m(haracter)i(in)f(it.)45 b(This)630 4765 y(only)30 b(w)m(orks)h(in)f(lo)s(cales)i(that)f(supp)s (ort)d(suc)m(h)i(c)m(haracters.)43 b(F)-8 b(or)31 b(example:)870 4902 y Fz($)47 b Fk(cat)g(thousands.awk)1763 b(Show)46 b(source)g(pro-)870 5011 y(gram)890 5125 y Fy(a)1013 5121 y Fz(BEGIN)h({)g(printf)f("\045'd\\n",)g(1234567)f(})870 5230 y($)i Fk(LC_ALL=C)f(gawk)h(-f)g(thousands.awk)1142 b(Run)47 b(it)g(in)g Fz(")p Fk(C)p Fz(")g Fk(lo-)870 5340 y(cale)p eop end %%Page: 63 75 TeXDict begin 63 74 bop 2447 -116 a Fr(Chapter)30 b(4:)41 b(Prin)m(ting)32 b(Output)90 b FB(63)890 303 y Fy(a)1013 299 y Fz(1234567)870 408 y($)47 b Fk(LC_ALL=en_US.UTF-8)c(gawk)k(-f)g (thousands.awk)665 b(Run)47 b(in)g(US)g(En-)870 518 y(glish)f(UTF)h (locale)890 632 y Fy(a)1013 628 y Fz(1,234,567)630 761 y FB(F)-8 b(or)44 b(more)f(information)g(ab)s(out)f(lo)s(cales)j(and)d (in)m(ternationalization)k(issues,)g(see)d(Sec-)630 870 y(tion)31 b(2.9)g([Where)g(Y)-8 b(ou)31 b(Are)g(Mak)m(es)g(A)g (Di\013erence],)h(page)f(35.)870 1003 y Fr(NOTE:)26 b FB(The)f(`)p Fz(')p FB(')g(\015ag)h(is)f(a)h(nice)g(feature,)h(but)e (its)g(use)g(complicates)j(things:)870 1113 y(it)35 b(no)m(w)f(b)s (ecomes)g(di\016cult)g(to)h(use)f(it)h(in)f(command-line)g(programs.)52 b(F)-8 b(or)870 1223 y(information)30 b(on)g(appropriate)g(quoting)g (tric)m(ks,)i(see)e(Section)h(1.1.6)h([Shell-)870 1332 y(Quoting)f(Issues],)f(page)h(14.)150 1489 y Fk(width)240 b FB(This)37 b(is)g(a)h(n)m(um)m(b)s(er)e(sp)s(ecifying)h(the)h (desired)f(minim)m(um)g(width)f(of)i(a)g(\014eld.)61 b(Inserting)630 1598 y(an)m(y)38 b(n)m(um)m(b)s(er)e(b)s(et)m(w)m(een)j (the)e(`)p Fz(\045)p FB(')h(sign)g(and)f(the)h(format-con)m(trol)h(c)m (haracter)h(forces)e(the)630 1708 y(\014eld)29 b(to)i(expand)e(to)h (this)f(width.)40 b(The)29 b(default)h(w)m(a)m(y)h(to)f(do)g(this)f(is) h(to)g(pad)f(with)h(spaces)630 1817 y(on)g(the)h(left.)41 b(F)-8 b(or)31 b(example:)870 1951 y Fz(printf)46 b("\0454s",)g("foo") 630 2084 y FB(prin)m(ts)30 b(`)p Fy(\017)p Fz(foo)p FB('.)630 2217 y(The)38 b(v)-5 b(alue)38 b(of)g Fx(width)f FB(is)i(a)f(minim)m (um)f(width,)j(not)e(a)g(maxim)m(um.)64 b(If)37 b(the)i(item)f(v)-5 b(alue)630 2326 y(requires)29 b(more)h(than)g Fx(width)f FB(c)m(haracters,)j(it)e(can)g(b)s(e)f(as)i(wide)e(as)h(necessary)-8 b(.)42 b(Th)m(us,)29 b(the)630 2436 y(follo)m(wing:)870 2569 y Fz(printf)46 b("\0454s",)g("foobar")630 2702 y FB(prin)m(ts)30 b(`)p Fz(foobar)p FB('.)630 2835 y(Preceding)37 b(the)h Fx(width)e FB(with)g(a)i(min)m(us)e(sign)h(causes)h(the)f (output)f(to)i(b)s(e)e(padded)g(with)630 2945 y(spaces)31 b(on)f(the)h(righ)m(t,)g(instead)f(of)h(on)f(the)h(left.)150 3101 y Fz(.)p Fk(prec)240 b FB(A)39 b(p)s(erio)s(d)f(follo)m(w)m(ed)j (b)m(y)e(an)f(in)m(teger)j(constan)m(t)f(sp)s(eci\014es)f(the)g (precision)g(to)h(use)f(when)630 3211 y(prin)m(ting.)i(The)29 b(meaning)i(of)g(the)f(precision)h(v)-5 b(aries)31 b(b)m(y)f(con)m (trol)i(letter:)630 3367 y Fz(\045e)p FB(,)e Fz(\045E)p FB(,)g Fz(\045f)82 b FB(Num)m(b)s(er)29 b(of)i(digits)g(to)g(the)f (righ)m(t)h(of)g(the)g(decimal)g(p)s(oin)m(t.)630 3524 y Fz(\045g)p FB(,)f Fz(\045G)233 b FB(Maxim)m(um)31 b(n)m(um)m(b)s(er)e (of)h(signi\014can)m(t)i(digits.)630 3680 y Fz(\045d)p FB(,)e Fz(\045i)p FB(,)g Fz(\045o)p FB(,)g Fz(\045u)p FB(,)g Fz(\045x)p FB(,)g Fz(\045X)1110 3790 y FB(Minim)m(um)g(n)m(um)m (b)s(er)f(of)i(digits)g(to)g(prin)m(t.)630 3947 y Fz(\045s)384 b FB(Maxim)m(um)31 b(n)m(um)m(b)s(er)e(of)h(c)m(haracters)i(from)e(the) h(string)f(that)h(should)e(prin)m(t.)630 4103 y(Th)m(us,)h(the)g(follo) m(wing:)870 4236 y Fz(printf)46 b("\045.4s",)g("foobar")630 4369 y FB(prin)m(ts)30 b(`)p Fz(foob)p FB('.)275 4526 y(The)36 b(C)g(library)h Fz(printf)p FB('s)e(dynamic)i Fx(width)f FB(and)g Fx(prec)42 b FB(capabilit)m(y)d(\(for)e(example,)j Fz("\045*.*s")p FB(\))35 b(is)150 4635 y(supp)s(orted.)i(Instead)24 b(of)h(supplying)e(explicit)j Fx(width)e FB(and/or)g Fx(prec)30 b FB(v)-5 b(alues)25 b(in)f(the)h(format)g(string,)h(they) 150 4745 y(are)31 b(passed)f(in)g(the)g(argumen)m(t)h(list.)41 b(F)-8 b(or)32 b(example:)390 4878 y Fz(w)47 b(=)h(5)390 4988 y(p)f(=)h(3)390 5097 y(s)f(=)h("abcdefg")390 5207 y(printf)e("\045*.*s\\n",)f(w,)i(p,)g(s)150 5340 y FB(is)30 b(exactly)j(equiv)-5 b(alen)m(t)31 b(to:)p eop end %%Page: 64 76 TeXDict begin 64 75 bop 150 -116 a FB(64)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(s)47 b(=)h("abcdefg")390 408 y(printf)e("\0455.3s\\n",)f(s)150 549 y FB(Both)35 b(programs)f(output)f(`)p Fy(\017\017)p Fz(abc)q FB('.)52 b(Earlier)35 b(v)m(ersions)f(of)g Fz(awk)g FB(did)f(not)i(supp)s(ort)d(this)i(capabilit)m(y)-8 b(.)54 b(If)150 658 y(y)m(ou)28 b(m)m(ust)g(use)f(suc)m(h)g(a)h(v)m(ersion,)h (y)m(ou)f(ma)m(y)g(sim)m(ulate)h(this)f(feature)g(b)m(y)f(using)h (concatenation)i(to)e(build)150 768 y(up)h(the)i(format)g(string,)f (lik)m(e)i(so:)390 908 y Fz(w)47 b(=)h(5)390 1018 y(p)f(=)h(3)390 1127 y(s)f(=)h("abcdefg")390 1237 y(printf)e("\045")h(w)g(".")g(p)h ("s\\n",)e(s)150 1377 y FB(This)30 b(is)g(not)h(particularly)g(easy)g (to)g(read)f(but)g(it)g(do)s(es)h(w)m(ork.)275 1517 y(C)26 b(programmers)g(ma)m(y)h(b)s(e)f(used)g(to)h(supplying)f(additional)h (`)p Fz(l)p FB(',)h(`)p Fz(L)p FB(',)g(and)e(`)p Fz(h)p FB(')h(mo)s(di\014ers)e(in)i Fz(printf)150 1627 y FB(format)i(strings.) 41 b(These)29 b(are)g(not)h(v)-5 b(alid)29 b(in)g Fz(awk)p FB(.)39 b(Most)30 b Fz(awk)f FB(implemen)m(tations)h(silen)m(tly)h (ignore)e(these)150 1736 y(mo)s(di\014ers.)50 b(If)34 b(`)p Fz(--lint)p FB(')f(is)h(pro)m(vided)f(on)h(the)g(command)g(line)g (\(see)h(Section)g(11.2)g([Command-Line)150 1846 y(Options],)k(page)f (173\),)j Fz(gawk)36 b FB(w)m(arns)g(ab)s(out)h(their)h(use.)61 b(If)36 b(`)p Fz(--posix)p FB(')g(is)h(supplied,)h(their)f(use)g(is)h (a)150 1955 y(fatal)32 b(error.)150 2160 y Fj(4.5.4)63 b(Examples)40 b(Using)j Fh(printf)150 2307 y FB(The)30 b(follo)m(wing)i(is)e(a)h(simple)f(example)h(of)g(ho)m(w)f(to)h(use)f Fz(printf)f FB(to)i(mak)m(e)h(an)e(aligned)h(table:)390 2447 y Fz(awk)47 b('{)g(printf)f("\045-10s)g(\045s\\n",)g($1,)h($2)g (}')h(BBS-list)150 2588 y FB(This)24 b(command)g(prin)m(ts)h(the)f (names)h(of)g(the)g(bulletin)g(b)s(oards)e(\()p Fz($1)p FB(\))i(in)f(the)h(\014le)g(`)p Fz(BBS-list)p FB(')e(as)i(a)g(string) 150 2697 y(of)34 b(10)i(c)m(haracters)f(that)g(are)g(left-justi\014ed.) 52 b(It)35 b(also)g(prin)m(ts)f(the)g(phone)g(n)m(um)m(b)s(ers)f(\()p Fz($2)p FB(\))h(next)h(on)f(the)150 2807 y(line.)55 b(This)34 b(pro)s(duces)g(an)h(aligned)h(t)m(w)m(o-column)g(table)g(of)g(names)e (and)h(phone)f(n)m(um)m(b)s(ers,)h(as)h(sho)m(wn)150 2916 y(here:)390 3056 y Fz($)47 b(awk)g('{)h(printf)e("\045-10s)g (\045s\\n",)g($1,)h($2)g(}')g(BBS-list)410 3170 y Fy(a)533 3166 y Fz(aardvark)141 b(555-5553)410 3280 y Fy(a)533 3276 y Fz(alpo-net)g(555-3412)410 3389 y Fy(a)533 3385 y Fz(barfly)237 b(555-7685)410 3499 y Fy(a)533 3495 y Fz(bites)285 b(555-1675)410 3608 y Fy(a)533 3604 y Fz(camelot)189 b(555-0542)410 3718 y Fy(a)533 3714 y Fz(core)333 b(555-2912)410 3828 y Fy(a)533 3824 y Fz(fooey)285 b(555-1234)410 3937 y Fy(a)533 3933 y Fz(foot)333 b(555-6699)410 4047 y Fy(a)533 4043 y Fz(macfoo)237 b(555-6480)410 4156 y Fy(a)533 4152 y Fz(sdace)285 b(555-3430)410 4266 y Fy(a)533 4262 y Fz(sabafoo)189 b(555-2127)275 4402 y FB(In)33 b(this)h(case,)j(the)e (phone)e(n)m(um)m(b)s(ers)g(had)h(to)h(b)s(e)f(prin)m(ted)g(as)g (strings)h(b)s(ecause)f(the)h(n)m(um)m(b)s(ers)e(are)150 4512 y(separated)k(b)m(y)f(a)h(dash.)59 b(Prin)m(ting)36 b(the)h(phone)f(n)m(um)m(b)s(ers)f(as)i(n)m(um)m(b)s(ers)e(w)m(ould)h (ha)m(v)m(e)i(pro)s(duced)d(just)150 4621 y(the)c(\014rst)e(three)i (digits:)41 b(`)p Fz(555)p FB('.)f(This)30 b(w)m(ould)g(ha)m(v)m(e)i(b) s(een)d(prett)m(y)i(confusing.)275 4761 y(It)i(w)m(asn't)i(necessary)f (to)h(sp)s(ecify)e(a)h(width)f(for)h(the)g(phone)f(n)m(um)m(b)s(ers)f (b)s(ecause)i(they)g(are)g(last)h(on)150 4871 y(their)30 b(lines.)41 b(They)30 b(don't)h(need)f(to)h(ha)m(v)m(e)g(spaces)g (after)g(them.)275 5011 y(The)43 b(table)i(could)g(b)s(e)e(made)i(to)g (lo)s(ok)f(ev)m(en)h(nicer)g(b)m(y)f(adding)g(headings)g(to)h(the)f (tops)g(of)h(the)150 5121 y(columns.)76 b(This)41 b(is)h(done)g(using)g (the)g Fz(BEGIN)f FB(pattern)h(\(see)i(Section)f(6.1.4)h([The)e Fz(BEGIN)e FB(and)i Fz(END)150 5230 y FB(Sp)s(ecial)34 b(P)m(atterns],)i(page)e(96\))h(so)f(that)g(the)g(headers)f(are)h(only) g(prin)m(ted)f(once,)j(at)e(the)g(b)s(eginning)f(of)150 5340 y(the)e Fz(awk)e FB(program:)p eop end %%Page: 65 77 TeXDict begin 65 76 bop 2447 -116 a Fr(Chapter)30 b(4:)41 b(Prin)m(ting)32 b(Output)90 b FB(65)390 299 y Fz(awk)47 b('BEGIN)f({)h(print)g("Name)285 b(Number")1010 408 y(print)47 b("----)285 b(------")46 b(})629 518 y({)h(printf)f("\045-10s)g (\045s\\n",)g($1,)h($2)g(}')h(BBS-list)275 650 y FB(The)34 b(ab)s(o)m(v)m(e)j(example)f(mixed)f Fz(print)f FB(and)h Fz(printf)e FB(statemen)m(ts)k(in)e(the)h(same)f(program.)56 b(Using)150 760 y(just)30 b Fz(printf)e FB(statemen)m(ts)33 b(can)d(pro)s(duce)f(the)i(same)g(results:)390 892 y Fz(awk)47 b('BEGIN)f({)h(printf)g("\045-10s)f(\045s\\n",)g("Name",)g ("Number")1010 1001 y(printf)h("\045-10s)f(\045s\\n",)g("----",)g ("------")f(})629 1111 y({)i(printf)f("\045-10s)g(\045s\\n",)g($1,)h ($2)g(}')h(BBS-list)150 1243 y FB(Prin)m(ting)32 b(eac)m(h)h(column)e (heading)h(with)g(the)g(same)g(format)g(sp)s(eci\014cation)h(used)e (for)g(the)h(column)g(ele-)150 1353 y(men)m(ts)f(ensures)e(that)i(the)g (headings)f(are)h(aligned)g(just)f(lik)m(e)h(the)g(columns.)275 1485 y(The)j(fact)i(that)g(the)g(same)f(format)h(sp)s(eci\014cation)g (is)f(used)g(three)g(times)h(can)f(b)s(e)g(emphasized)g(b)m(y)150 1594 y(storing)c(it)g(in)f(a)h(v)-5 b(ariable,)31 b(lik)m(e)h(this:)390 1727 y Fz(awk)47 b('BEGIN)f({)h(format)g(=)g("\045-10s)f(\045s\\n")1010 1836 y(printf)h(format,)e("Name",)h("Number")1010 1946 y(printf)h(format,)e("----",)h("------")g(})629 2055 y({)h(printf)f(format,)g($1,)h($2)g(}')g(BBS-list)275 2188 y FB(A)m(t)31 b(this)f(p)s(oin)m(t,)h(it)g(w)m(ould)f(b)s(e)f(a)i (w)m(orth)m(while)g(exercise)h(to)f(use)f(the)g Fz(printf)f FB(statemen)m(t)j(to)f(line)g(up)150 2297 y(the)d(headings)g(and)f (table)h(data)h(for)e(the)h(`)p Fz(inventory-shipped)p FB(')c(example)k(that)h(w)m(as)f(co)m(v)m(ered)h(earlier)150 2407 y(in)h(the)h(section)g(on)f(the)h Fz(print)e FB(statemen)m(t)j (\(see)f(Section)h(4.1)f([The)f Fz(print)f FB(Statemen)m(t],)k(page)e (57\).)150 2634 y FA(4.6)68 b(Redirecting)46 b(Output)f(of)g Fq(print)e FA(and)h Fq(printf)150 2794 y FB(So)36 b(far,)j(the)d (output)g(from)g Fz(print)g FB(and)f Fz(printf)g FB(has)i(gone)g(to)g (the)g(standard)f(output,)h(usually)g(the)150 2903 y(terminal.)j(Both) 29 b Fz(print)d FB(and)h Fz(printf)f FB(can)h(also)i(send)e(their)g (output)h(to)g(other)g(places.)40 b(This)27 b(is)h(called)150 3013 y Fx(redirection)p FB(.)275 3145 y(A)40 b(redirection)h(app)s (ears)e(after)h(the)h Fz(print)d FB(or)i Fz(printf)f FB(statemen)m(t.)72 b(Redirections)41 b(in)e Fz(awk)h FB(are)150 3255 y(written)26 b(just)g(lik)m(e)h(redirections)g(in)e (shell)i(commands,)f(except)h(that)g(they)f(are)h(written)f(inside)g (the)g Fz(awk)150 3364 y FB(program.)275 3496 y(There)32 b(are)g(four)g(forms)g(of)h(output)f(redirection:)45 b(output)32 b(to)i(a)e(\014le,)i(output)e(app)s(ended)f(to)i(a)g (\014le,)150 3606 y(output)26 b(through)f(a)i(pip)s(e)e(to)i(another)g (command,)g(and)e(output)h(to)h(a)f(copro)s(cess.)40 b(They)26 b(are)g(all)i(sho)m(wn)150 3716 y(for)i(the)h Fz(print)e FB(statemen)m(t,)j(but)e(they)g(w)m(ork)h(iden)m(tically)h (for)e Fz(printf)p FB(:)150 3870 y Fz(print)f Fk(items)39 b Fz(>)30 b Fk(output-file)630 3980 y FB(This)d(t)m(yp)s(e)h(of)g (redirection)h(prin)m(ts)f(the)g(items)g(in)m(to)h(the)f(output)g (\014le)g(named)g Fx(output-\014le)p FB(.)630 4089 y(The)d(\014le)g (name)h Fx(output-\014le)k FB(can)c(b)s(e)e(an)m(y)i(expression.)39 b(Its)25 b(v)-5 b(alue)26 b(is)f(c)m(hanged)h(to)g(a)g(string)630 4199 y(and)k(then)g(used)f(as)i(a)g(\014le)f(name)h(\(see)g(Chapter)f (5)h([Expressions],)f(page)h(73\).)630 4331 y(When)h(this)h(t)m(yp)s(e) f(of)h(redirection)g(is)f(used,)h(the)f Fx(output-\014le)38 b FB(is)32 b(erased)h(b)s(efore)f(the)h(\014rst)630 4441 y(output)d(is)g(written)g(to)g(it.)42 b(Subsequen)m(t)29 b(writes)h(to)g(the)h(same)f Fx(output-\014le)35 b FB(do)30 b(not)g(erase)630 4550 y Fx(output-\014le)p FB(,)c(but)e(app)s(end)g (to)h(it.)39 b(\(This)25 b(is)g(di\013eren)m(t)g(from)f(ho)m(w)h(y)m (ou)g(use)g(redirections)g(in)630 4660 y(shell)c(scripts.\))37 b(If)20 b Fx(output-\014le)25 b FB(do)s(es)20 b(not)h(exist,)i(it)e(is) g(created.)38 b(F)-8 b(or)21 b(example,)i(here)e(is)f(ho)m(w)630 4769 y(an)31 b Fz(awk)g FB(program)g(can)h(write)g(a)f(list)i(of)e(BBS) h(names)f(to)h(one)g(\014le)g(named)f(`)p Fz(name-list)p FB(',)630 4879 y(and)f(a)h(list)g(of)f(phone)g(n)m(um)m(b)s(ers)f(to)i (another)f(\014le)h(named)f(`)p Fz(phone-list)p FB(':)870 5011 y Fz($)47 b(awk)g('{)h(print)e($2)h(>)h("phone-list")870 5121 y(>)382 b(print)46 b($1)h(>)h("name-list")c(}')j(BBS-list)870 5230 y($)g(cat)g(phone-list)890 5344 y Fy(a)1013 5340 y Fz(555-5553)p eop end %%Page: 66 78 TeXDict begin 66 77 bop 150 -116 a FB(66)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)890 303 y Fy(a)1013 299 y Fz(555-3412)870 408 y(...)870 518 y($)47 b(cat)g(name-list)890 632 y Fy(a)1013 628 y Fz(aardvark)890 741 y Fy(a)1013 737 y Fz(alpo-net)870 847 y(...)630 982 y FB(Eac)m(h)31 b(output)f(\014le)g(con)m(tains)i(one)f(name)f(or)g(n)m (um)m(b)s(er)g(p)s(er)f(line.)150 1142 y Fz(print)g Fk(items)39 b Fz(>>)30 b Fk(output-file)630 1251 y FB(This)25 b(t)m(yp)s(e)h(of)h (redirection)f(prin)m(ts)g(the)g(items)h(in)m(to)g(the)f(pre-existing)h (output)e(\014le)h(named)630 1361 y Fx(output-\014le)p FB(.)63 b(The)38 b(di\013erence)g(b)s(et)m(w)m(een)h(this)e(and)h(the)g (single-`)p Fz(>)p FB(')h(redirection)f(is)g(that)630 1471 y(the)31 b(old)f(con)m(ten)m(ts)j(\(if)e(an)m(y\))g(of)f Fx(output-\014le)36 b FB(are)31 b(not)g(erased.)41 b(Instead,)31 b(the)g Fz(awk)e FB(output)630 1580 y(is)h(app)s(ended)f(to)i(the)g (\014le.)41 b(If)29 b Fx(output-\014le)36 b FB(do)s(es)30 b(not)h(exist,)g(then)f(it)h(is)f(created.)150 1740 y Fz(print)f Fk(items)39 b Fz(|)30 b Fk(command)630 1850 y FB(It)36 b(is)h(also)g(p)s(ossible)f(to)h(send)f(output)g(to)h (another)g(program)f(through)f(a)i(pip)s(e)f(instead)630 1960 y(of)h(in)m(to)h(a)g(\014le.)60 b(This)36 b(t)m(yp)s(e)i(of)f (redirection)g(op)s(ens)g(a)g(pip)s(e)f(to)i Fx(command)p FB(,)g(and)f(writes)630 2069 y(the)42 b(v)-5 b(alues)42 b(of)g Fx(items)k FB(through)41 b(this)g(pip)s(e)g(to)h(another)g(pro)s (cess)f(created)i(to)g(execute)630 2179 y Fx(command)p FB(.)630 2314 y(The)31 b(redirection)h(argumen)m(t)g Fx(command)i FB(is)e(actually)h(an)e Fz(awk)f FB(expression.)44 b(Its)31 b(v)-5 b(alue)32 b(is)630 2423 y(con)m(v)m(erted)39 b(to)e(a)h(string)f(whose)g(con)m(ten)m(ts)i(giv)m(e)f(the)f(shell)h (command)f(to)g(b)s(e)g(run.)59 b(F)-8 b(or)630 2533 y(example,)30 b(the)f(follo)m(wing)h(pro)s(duces)d(t)m(w)m(o)j (\014les,)g(one)f(unsorted)e(list)j(of)e(BBS)h(names,)h(and)630 2642 y(one)h(list)g(sorted)f(in)g(rev)m(erse)h(alphab)s(etical)h (order:)870 2777 y Fz(awk)47 b('{)g(print)f($1)i(>)f("names.unsorted") 1204 2887 y(command)f(=)h("sort)g(-r)g(>)g(names.sorted")1204 2996 y(print)f($1)i(|)f(command)f(}')h(BBS-list)630 3131 y FB(The)32 b(unsorted)g(list)h(is)g(written)f(with)h(an)f(ordinary)g (redirection,)i(while)f(the)g(sorted)f(list)630 3241 y(is)e(written)h(b)m(y)f(piping)g(through)g(the)g Fz(sort)f FB(utilit)m(y)-8 b(.)630 3376 y(The)53 b(next)g(example)h(uses)f (redirection)g(to)h(mail)g(a)g(message)g(to)g(the)f(mailing)h(list)630 3485 y(`)p Fz(bug-system)p FB('.)73 b(This)41 b(migh)m(t)h(b)s(e)g (useful)f(when)g(trouble)g(is)h(encoun)m(tered)h(in)e(an)h Fz(awk)630 3595 y FB(script)30 b(run)f(p)s(erio)s(dically)i(for)f (system)h(main)m(tenance:)870 3730 y Fz(report)46 b(=)i("mail)e (bug-system")870 3839 y(print)g("Awk)h(script)f(failed:",)f($0)j(|)f (report)870 3949 y(m)g(=)h(\("at)f(record)f(number)g(")h(FNR)g(")h(of)f (")g(FILENAME\))870 4059 y(print)f(m)i(|)f(report)870 4168 y(close\(report\))630 4303 y FB(The)38 b(message)i(is)f(built)f (using)g(string)h(concatenation)i(and)d(sa)m(v)m(ed)h(in)g(the)g(v)-5 b(ariable)39 b Fz(m)p FB(.)630 4413 y(It's)31 b(then)f(sen)m(t)g(do)m (wn)g(the)h(pip)s(eline)f(to)h(the)f Fz(mail)f FB(program.)41 b(\(The)30 b(paren)m(theses)g(group)630 4522 y(the)h(items)f(to)i (concatenate|see)h(Section)e(5.6)h([String)e(Concatenation],)j(page)e (80.\))630 4657 y(The)g Fz(close)f FB(function)h(is)h(called)h(here)e (b)s(ecause)h(it's)g(a)g(go)s(o)s(d)f(idea)h(to)g(close)h(the)f(pip)s (e)f(as)630 4767 y(so)s(on)36 b(as)h(all)g(the)g(in)m(tended)f(output)g (has)g(b)s(een)g(sen)m(t)h(to)g(it.)60 b(See)37 b(Section)g(4.8)g ([Closing)630 4876 y(Input)29 b(and)h(Output)f(Redirections],)j(page)f (70,)g(for)f(more)h(information.)630 5011 y(This)53 b(example)i(also)g (illustrates)g(the)f(use)g(of)g(a)h(v)-5 b(ariable)54 b(to)h(represen)m(t)f(a)h Fx(\014le)k FB(or)630 5121 y Fx(command)p FB(|it)27 b(is)g(not)g(necessary)h(to)f(alw)m(a)m(ys)i (use)e(a)g(string)g(constan)m(t.)41 b(Using)27 b(a)g(v)-5 b(ariable)630 5230 y(is)33 b(generally)h(a)f(go)s(o)s(d)g(idea,)i(b)s (ecause)e Fz(awk)f FB(requires)g(that)i(the)f(string)g(v)-5 b(alue)33 b(b)s(e)f(sp)s(elled)630 5340 y(iden)m(tically)g(ev)m(ery)g (time.)p eop end %%Page: 67 79 TeXDict begin 67 78 bop 2447 -116 a Fr(Chapter)30 b(4:)41 b(Prin)m(ting)32 b(Output)90 b FB(67)150 299 y Fz(print)29 b Fk(items)39 b Fz(|&)30 b Fk(command)630 408 y FB(This)g(t)m(yp)s(e)h (of)f(redirection)i(prin)m(ts)e(the)h(items)g(to)g(the)g(input)f(of)h Fx(command)p FB(.)41 b(The)30 b(di\013er-)630 518 y(ence)37 b(b)s(et)m(w)m(een)g(this)f(and)f(the)i(single-`)p Fz(|)p FB(')g(redirection)g(is)f(that)h(the)g(output)e(from)h Fx(com-)630 628 y(mand)f FB(can)e(b)s(e)f(read)h(with)f Fz(getline)p FB(.)46 b(Th)m(us)32 b Fx(command)k FB(is)d(a)g Fx(copro)s(cess)p FB(,)h(whic)m(h)e(w)m(orks)630 737 y(together)g(with,)e(but)g(subsidiary)f(to,)i(the)g Fz(awk)e FB(program.)630 878 y(This)44 b(feature)i(is)f(a)h Fz(gawk)e FB(extension,)50 b(and)45 b(is)g(not)g(a)m(v)-5 b(ailable)48 b(in)d(POSIX)f Fz(awk)p FB(.)85 b(See)630 988 y(Section)34 b(10.2)g([Tw)m(o-W)-8 b(a)m(y)35 b(Comm)m(unications)f(with)e(Another)h (Pro)s(cess],)h(page)f(166,)i(for)630 1097 y(a)c(more)f(complete)i (discussion.)275 1276 y(Redirecting)38 b(output)f(using)f(`)p Fz(>)p FB(',)k(`)p Fz(>>)p FB(',)f(`)p Fz(|)p FB(',)g(or)f(`)p Fz(|&)p FB(')f(asks)g(the)h(system)f(to)h(op)s(en)f(a)g(\014le,)j(pip)s (e,)e(or)150 1385 y(copro)s(cess)33 b(only)h(if)f(the)g(particular)g Fx(\014le)38 b FB(or)33 b Fx(command)k FB(y)m(ou)c(sp)s(ecify)g(has)g (not)g(already)h(b)s(een)e(written)150 1495 y(to)f(b)m(y)f(y)m(our)h (program)f(or)g(if)h(it)f(has)h(b)s(een)e(closed)i(since)g(it)g(w)m(as) g(last)g(written)f(to.)275 1642 y(It)i(is)g(a)h(common)g(error)f(to)h (use)f(`)p Fz(>)p FB(')h(redirection)g(for)f(the)g(\014rst)g Fz(print)f FB(to)i(a)g(\014le,)g(and)f(then)g(to)h(use)150 1752 y(`)p Fz(>>)p FB(')d(for)g(subsequen)m(t)g(output:)390 1899 y Fz(#)47 b(clear)g(the)g(file)390 2009 y(print)f("Don't)g(panic") h(>)g("guide.txt")390 2118 y(...)390 2228 y(#)g(append)390 2337 y(print)f("Avoid)g(improbability)f(generators")f(>>)k("guide.txt") 150 2485 y FB(This)29 b(is)h(indeed)f(ho)m(w)h(redirections)h(m)m(ust)f (b)s(e)f(used)g(from)g(the)i(shell.)40 b(But)30 b(in)g Fz(awk)p FB(,)f(it)i(isn't)f(necessary)-8 b(.)150 2594 y(In)27 b(this)g(kind)f(of)i(case,)h(a)e(program)g(should)g(use)g(`)p Fz(>)p FB(')g(for)g(all)h(the)g Fz(print)d FB(statemen)m(ts,)30 b(since)e(the)f(output)150 2704 y(\014le)j(is)h(only)f(op)s(ened)g (once.)275 2851 y(As)d(men)m(tioned)i(earlier)f(\(see)h(Section)g (3.8.9)g([P)m(oin)m(ts)h(to)e(Remem)m(b)s(er)g(Ab)s(out)f Fz(getline)p FB(],)g(page)h(56\),)150 2961 y(man)m(y)36 b Fz(awk)f FB(implemen)m(tations)i(limit)g(the)f(n)m(um)m(b)s(er)f(of)h (pip)s(elines)f(that)i(an)f Fz(awk)f FB(program)g(ma)m(y)i(ha)m(v)m(e) 150 3070 y(op)s(en)31 b(to)h(just)f(one!)45 b(In)31 b Fz(gawk)p FB(,)g(there)h(is)g(no)f(suc)m(h)g(limit.)46 b Fz(gawk)30 b FB(allo)m(ws)j(a)f(program)g(to)g(op)s(en)f(as)h(man)m (y)150 3180 y(pip)s(elines)e(as)g(the)h(underlying)e(op)s(erating)i (system)g(p)s(ermits.)150 3392 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b(Piping)42 b(in)m(to)f Fh(sh)150 3539 y FB(A)c(particularly)h(p)s(o)m(w)m(erful)f(w)m(a)m(y)h(to)h(use)e (redirection)h(is)f(to)h(build)e(command)h(lines)h(and)f(pip)s(e)f (them)150 3648 y(in)m(to)30 b(the)g(shell,)g Fz(sh)p FB(.)40 b(F)-8 b(or)30 b(example,)h(supp)s(ose)d(y)m(ou)i(ha)m(v)m(e)h (a)e(list)i(of)e(\014les)h(brough)m(t)f(o)m(v)m(er)i(from)e(a)h(system) 150 3758 y(where)39 b(all)h(the)f(\014le)g(names)g(are)h(stored)f(in)g (upp)s(ercase,)h(and)f(y)m(ou)g(wish)g(to)h(rename)f(them)g(to)h(ha)m (v)m(e)150 3867 y(names)30 b(in)g(all)i(lo)m(w)m(ercase.)43 b(The)30 b(follo)m(wing)h(program)g(is)f(b)s(oth)g(simple)g(and)g (e\016cien)m(t:)390 4015 y Fz({)47 b(printf\("mv)e(\045s)j(\045s\\n",)e ($0,)h(tolower\($0\)\))d(|)k("sh")e(})390 4234 y(END)h({)g (close\("sh"\))e(})275 4381 y FB(The)20 b Fz(tolower)e FB(function)i(returns)g(its)h(argumen)m(t)g(string)f(with)g(all)i(upp)s (ercase)d(c)m(haracters)j(con)m(v)m(erted)150 4491 y(to)37 b(lo)m(w)m(ercase)i(\(see)e(Section)g(8.1.3)i([String-Manipulation)e(F) -8 b(unctions],)39 b(page)e(129\).)60 b(The)36 b(program)150 4600 y(builds)26 b(up)h(a)h(list)g(of)f(command)h(lines,)g(using)f(the) h Fz(mv)f FB(utilit)m(y)h(to)h(rename)e(the)h(\014les.)39 b(It)28 b(then)f(sends)g(the)150 4710 y(list)k(to)g(the)g(shell)f(for)g (execution.)150 4961 y FA(4.7)68 b(Sp)t(ecial)45 b(File)h(Names)g(in)f Fq(gawk)150 5121 y Fz(gawk)29 b FB(pro)m(vides)h(a)g(n)m(um)m(b)s(er)e (of)i(sp)s(ecial)h(\014le)f(names)g(that)g(it)g(in)m(terprets)g(in)m (ternally)-8 b(.)42 b(These)30 b(\014le)g(names)150 5230 y(pro)m(vide)35 b(access)i(to)e(standard)g(\014le)g(descriptors,)h(pro) s(cess-related)g(information,)h(and)d(TCP/IP)g(net-)150 5340 y(w)m(orking.)p eop end %%Page: 68 80 TeXDict begin 68 79 bop 150 -116 a FB(68)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fj(4.7.1)63 b(Sp)s(ecial)41 b(Files)g(for)h(Standard)f (Descriptors)150 446 y FB(Running)26 b(programs)g(con)m(v)m(en)m (tionally)k(ha)m(v)m(e)e(three)f(input)f(and)h(output)f(streams)h (already)h(a)m(v)-5 b(ailable)29 b(to)150 555 y(them)36 b(for)g(reading)g(and)g(writing.)58 b(These)36 b(are)h(kno)m(wn)f(as)g (the)g Fx(standard)g(input)p FB(,)h Fx(standard)e(output)p FB(,)150 665 y(and)29 b Fx(standard)f(error)h(output)p FB(.)40 b(These)29 b(streams)h(are,)g(b)m(y)f(default,)h(connected)g (to)g(y)m(our)f(terminal,)i(but)150 775 y(they)k(are)g(often)f (redirected)h(with)g(the)f(shell,)i(via)f(the)g(`)p Fz(<)p FB(',)h(`)p Fz(<<)p FB(',)g(`)p Fz(>)p FB(',)g(`)p Fz(>>)p FB(',)f(`)p Fz(>&)p FB(',)h(and)e(`)p Fz(|)p FB(')h(op)s(erators.)150 884 y(Standard)22 b(error)h(is)g(t)m(ypically)i(used)d(for)h(writing)g (error)g(messages;)k(the)c(reason)h(there)f(are)g(t)m(w)m(o)i(separate) 150 994 y(streams,)31 b(standard)e(output)h(and)g(standard)g(error,)g (is)g(so)h(that)g(they)f(can)h(b)s(e)f(redirected)h(separately)-8 b(.)275 1133 y(In)36 b(other)h(implemen)m(tations)h(of)g Fz(awk)p FB(,)g(the)f(only)g(w)m(a)m(y)h(to)f(write)h(an)e(error)h (message)h(to)g(standard)150 1242 y(error)30 b(in)g(an)g Fz(awk)g FB(program)g(is)g(as)h(follo)m(ws:)390 1381 y Fz(print)46 b("Serious)g(error)g(detected!")f(|)j("cat)e(1>&2")150 1520 y FB(This)35 b(w)m(orks)h(b)m(y)f(op)s(ening)h(a)g(pip)s(eline)f (to)h(a)h(shell)f(command)f(that)h(can)g(access)h(the)f(standard)f (error)150 1630 y(stream)21 b(that)h(it)g(inherits)f(from)f(the)h Fz(awk)g FB(pro)s(cess.)37 b(This)20 b(is)h(far)g(from)g(elegan)m(t,)k (and)c(it)g(is)g(also)h(ine\016cien)m(t,)150 1739 y(b)s(ecause)29 b(it)g(requires)g(a)g(separate)h(pro)s(cess.)39 b(So)29 b(p)s(eople)g(writing)g Fz(awk)f FB(programs)g(often)h(don't)g(do)g (this.)150 1849 y(Instead,)h(they)h(send)f(the)g(error)g(messages)h(to) h(the)e(terminal,)h(lik)m(e)h(this:)390 1988 y Fz(print)46 b("Serious)g(error)g(detected!")f(>)j("/dev/tty")150 2127 y FB(This)39 b(usually)h(has)f(the)h(same)h(e\013ect)g(but)e(not)h (alw)m(a)m(ys:)62 b(although)40 b(the)g(standard)f(error)h(stream)g(is) 150 2236 y(usually)c(the)h(terminal,)h(it)f(can)g(b)s(e)e(redirected;) 40 b(when)c(that)h(happ)s(ens,)f(writing)g(to)h(the)g(terminal)g(is)150 2346 y(not)29 b(correct.)42 b(In)28 b(fact,)i(if)f Fz(awk)f FB(is)h(run)f(from)g(a)i(bac)m(kground)f(job,)g(it)g(ma)m(y)h(not)f(ha) m(v)m(e)h(a)g(terminal)f(at)h(all.)150 2456 y(Then)f(op)s(ening)h(`)p Fz(/dev/tty)p FB(')f(fails.)275 2595 y Fz(gawk)d FB(pro)m(vides)i(sp)s (ecial)h(\014le)f(names)g(for)g(accessing)h(the)g(three)f(standard)f (streams,)i(as)f(w)m(ell)h(as)g(an)m(y)150 2704 y(other)k(inherited)g (op)s(en)g(\014les.)49 b(If)33 b(the)g(\014le)g(name)g(matc)m(hes)i (one)e(of)g(these)h(sp)s(ecial)g(names)f(when)f Fz(gawk)150 2814 y FB(redirects)38 b(input)f(or)h(output,)i(then)e(it)g(directly)h (uses)e(the)h(stream)h(that)f(the)g(\014le)g(name)g(stands)g(for.)150 2923 y(These)32 b(sp)s(ecial)h(\014le)g(names)f(w)m(ork)g(for)h(all)g (op)s(erating)g(systems)f(that)h Fz(gawk)e FB(has)h(b)s(een)g(p)s (orted)g(to,)i(not)150 3033 y(just)c(those)h(that)g(are)f (POSIX-complian)m(t:)150 3199 y(`)p Fz(/dev/stdin)p FB(')630 3309 y(The)g(standard)f(input)h(\(\014le)h(descriptor)f(0\).)150 3472 y(`)p Fz(/dev/stdout)p FB(')630 3582 y(The)g(standard)f(output)h (\(\014le)h(descriptor)f(1\).)150 3746 y(`)p Fz(/dev/stderr)p FB(')630 3855 y(The)g(standard)f(error)h(output)g(\(\014le)h (descriptor)f(2\).)150 4019 y(`)p Fz(/dev/fd/)p Fk(N)11 b FB(')630 4129 y(The)37 b(\014le)g(asso)s(ciated)i(with)e(\014le)g (descriptor)h Fx(N)p FB(.)f(Suc)m(h)g(a)h(\014le)f(m)m(ust)g(b)s(e)g (op)s(ened)g(b)m(y)g(the)630 4238 y(program)29 b(initiating)j(the)e Fz(awk)f FB(execution)h(\(t)m(ypically)i(the)e(shell\).)41 b(Unless)30 b(sp)s(ecial)g(pains)630 4348 y(are)i(tak)m(en)h(in)e(the)h (shell)g(from)g(whic)m(h)f Fz(gawk)g FB(is)h(in)m(v)m(ok)m(ed,)h(only)f (descriptors)g(0,)h(1,)f(and)g(2)630 4458 y(are)f(a)m(v)-5 b(ailable.)275 4624 y(The)63 b(\014le)i(names)f(`)p Fz(/dev/stdin)p FB(',)71 b(`)p Fz(/dev/stdout)p FB(',)f(and)64 b(`)p Fz(/dev/stderr)p FB(')e(are)i(aliases)i(for)150 4733 y(`)p Fz(/dev/fd/0)p FB(',)i(`)p Fz(/dev/fd/1)p FB(',)g(and)62 b(`)p Fz(/dev/fd/2)p FB(',)68 b(resp)s(ectiv)m(ely)-8 b(.)137 b(Ho)m(w)m(ev)m(er,)72 b(they)62 b(are)h(more)150 4843 y(self-explanatory)-8 b(.)62 b(The)37 b(prop)s(er)e(w)m(a)m(y)j (to)g(write)f(an)g(error)f(message)i(in)f(a)g Fz(gawk)f FB(program)h(is)g(to)g(use)150 4952 y(`)p Fz(/dev/stderr)p FB(',)28 b(lik)m(e)k(this:)390 5091 y Fz(print)46 b("Serious)g(error)g (detected!")f(>)j("/dev/stderr")275 5230 y FB(Note)30 b(the)g(use)g(of)f(quotes)h(around)f(the)h(\014le)g(name.)40 b(Lik)m(e)31 b(an)m(y)f(other)f(redirection,)i(the)f(v)-5 b(alue)30 b(m)m(ust)150 5340 y(b)s(e)g(a)g(string.)41 b(It)31 b(is)f(a)h(common)f(error)g(to)i(omit)f(the)f(quotes,)h(whic)m (h)f(leads)h(to)g(confusing)f(results.)p eop end %%Page: 69 81 TeXDict begin 69 80 bop 2447 -116 a Fr(Chapter)30 b(4:)41 b(Prin)m(ting)32 b(Output)90 b FB(69)150 299 y Fj(4.7.2)63 b(Sp)s(ecial)41 b(Files)g(for)h(Pro)s(cess-Related)f(Information)150 446 y Fz(gawk)23 b FB(also)i(pro)m(vides)f(sp)s(ecial)h(\014le)g(names) f(that)g(giv)m(e)i(access)g(to)f(information)f(ab)s(out)g(the)h (running)d Fz(gawk)150 555 y FB(pro)s(cess.)48 b(Eac)m(h)34 b(of)f(these)h(\\\014les")g(pro)m(vides)f(a)g(single)h(record)f(of)g (information.)49 b(T)-8 b(o)34 b(read)f(them)g(more)150 665 y(than)26 b(once,)i(they)f(m)m(ust)f(\014rst)g(b)s(e)g(closed)h (with)f(the)h Fz(close)e FB(function)h(\(see)h(Section)h(4.8)f ([Closing)g(Input)150 775 y(and)j(Output)f(Redirections],)j(page)f (70\).)42 b(The)30 b(\014le)g(names)g(are:)150 940 y(`)p Fz(/dev/pid)p FB(')630 1049 y(Reading)d(this)g(\014le)g(returns)e(the)i (pro)s(cess)f(ID)h(of)g(the)g(curren)m(t)g(pro)s(cess,)g(in)f(decimal)i (form,)630 1159 y(terminated)j(with)f(a)h(newline.)150 1322 y(`)p Fz(/dev/ppid)p FB(')630 1432 y(Reading)24 b(this)f(\014le)g(returns)f(the)h(paren)m(t)h(pro)s(cess)f(ID)g(of)g (the)h(curren)m(t)f(pro)s(cess,)h(in)f(decimal)630 1542 y(form,)30 b(terminated)h(with)f(a)h(newline.)150 1705 y(`)p Fz(/dev/pgrpid)p FB(')630 1814 y(Reading)26 b(this)f(\014le)h (returns)e(the)h(pro)s(cess)g(group)g(ID)h(of)f(the)h(curren)m(t)f(pro) s(cess,)h(in)f(decimal)630 1924 y(form,)30 b(terminated)h(with)f(a)h (newline.)150 2087 y(`)p Fz(/dev/user)p FB(')630 2197 y(Reading)h(this)g(\014le)g(returns)e(a)i(single)h(record)e(terminated) i(with)e(a)h(newline.)45 b(The)31 b(\014elds)630 2307 y(are)g(separated)g(with)f(spaces.)41 b(The)30 b(\014elds)g(represen)m (t)g(the)h(follo)m(wing)g(information:)630 2470 y Fz($1)384 b FB(The)30 b(return)f(v)-5 b(alue)30 b(of)g(the)h Fz(getuid)d FB(system)i(call)h(\(the)g(real)g(user)e(ID)h(n)m(um-)1110 2579 y(b)s(er\).)630 2743 y Fz($2)384 b FB(The)31 b(return)f(v)-5 b(alue)32 b(of)f(the)g Fz(geteuid)f FB(system)h(call)i(\(the)e (e\013ectiv)m(e)j(user)d(ID)1110 2852 y(n)m(um)m(b)s(er\).)630 3016 y Fz($3)384 b FB(The)45 b(return)f(v)-5 b(alue)46 b(of)g(the)g Fz(getgid)d FB(system)j(call)h(\(the)f(real)g(group)f(ID) 1110 3125 y(n)m(um)m(b)s(er\).)630 3289 y Fz($4)384 b FB(The)25 b(return)f(v)-5 b(alue)26 b(of)f(the)h Fz(getegid)d FB(system)j(call)g(\(the)g(e\013ectiv)m(e)i(group)d(ID)1110 3398 y(n)m(um)m(b)s(er\).)630 3561 y(If)47 b(there)g(are)h(an)m(y)g (additional)g(\014elds,)j(they)d(are)g(the)f(group)g(IDs)g(returned)g (b)m(y)g(the)630 3671 y Fz(getgroups)39 b FB(system)j(call.)77 b(\(Multiple)43 b(groups)e(ma)m(y)h(not)g(b)s(e)g(supp)s(orted)e(on)h (all)i(sys-)630 3781 y(tems.\))275 3946 y(These)33 b(sp)s(ecial)h (\014le)f(names)g(ma)m(y)h(b)s(e)f(used)g(on)g(the)h(command)f(line)g (as)h(data)g(\014les,)h(as)e(w)m(ell)i(as)e(for)150 4056 y(I/O)26 b(redirections)h(within)f(an)h Fz(awk)f FB(program.)39 b(They)26 b(ma)m(y)h(not)g(b)s(e)e(used)h(as)h(source)g(\014les)f(with) g(the)h(`)p Fz(-f)p FB(')150 4165 y(option.)390 4304 y Fr(NOTE:)j FB(The)g(sp)s(ecial)g(\014les)g(that)h(pro)m(vide)f(pro)s (cess-related)h(information)f(are)g(no)m(w)g(con-)390 4413 y(sidered)k(obsolete)j(and)d(will)h(disapp)s(ear)e(en)m(tirely)j (in)f(the)g(next)g(release)h(of)e Fz(gawk)p FB(.)53 b Fz(gawk)390 4523 y FB(prin)m(ts)43 b(a)i(w)m(arning)f(message)h(ev)m (ery)g(time)f(y)m(ou)h(use)e(one)i(of)f(these)g(\014les.)82 b(T)-8 b(o)44 b(obtain)390 4632 y(pro)s(cess-related)26 b(information,)i(use)d(the)h Fz(PROCINFO)d FB(arra)m(y)-8 b(.)40 b(See)26 b(Section)h(6.5.2)g([Built-in)390 4742 y(V)-8 b(ariables)32 b(That)e(Con)m(v)m(ey)h(Information],)g(page)g (110.)150 4945 y Fj(4.7.3)63 b(Sp)s(ecial)41 b(Files)g(for)h(Net)m(w)m (ork)e(Comm)m(unications)150 5092 y FB(Starting)33 b(with)f(v)m(ersion) h(3.1)h(of)f Fz(gawk)p FB(,)f Fz(awk)g FB(programs)g(can)h(op)s(en)e(a) i(t)m(w)m(o-w)m(a)m(y)j(TCP/IP)c(connection,)150 5202 y(acting)g(as)e(either)h(a)g(clien)m(t)h(or)e(a)h(serv)m(er.)41 b(This)30 b(is)g(done)g(using)g(a)h(sp)s(ecial)g(\014le)f(name)h(of)f (the)h(form:)390 5340 y Fz(`/inet/)p Fk(protocol)11 b Fz(/)p Fk(local-p)o(ort)f Fz(/)p Fk(r)o(emot)o(e-h)o(ost)g Fz(/)p Fk(re)o(mote)o(-po)o(rt)g Fz(')p eop end %%Page: 70 82 TeXDict begin 70 81 bop 150 -116 a FB(70)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(The)39 b Fx(proto)s(col)44 b FB(is)c(one)g(of)g(`)p Fz(tcp)p FB(',)i(`)p Fz(udp)p FB(',)g(or)e(`)p Fz(raw)p FB(',)i(and)d(the)h(other)g(\014elds)f(represen)m(t)h(the)g(other)150 408 y(essen)m(tial)e(pieces)e(of)g(information)g(for)g(making)g(a)g (net)m(w)m(orking)h(connection.)58 b(These)36 b(\014le)g(names)g(are) 150 518 y(used)i(with)g(the)g(`)p Fz(|&)p FB(')h(op)s(erator)g(for)f (comm)m(unicating)i(with)e(a)h(copro)s(cess)g(\(see)g(Section)g(10.2)h ([Tw)m(o-)150 628 y(W)-8 b(a)m(y)46 b(Comm)m(unications)f(with)f (Another)g(Pro)s(cess],)k(page)d(166\).)84 b(This)43 b(is)i(an)f(adv)-5 b(anced)44 b(feature,)150 737 y(men)m(tioned)34 b(here)f(only)g(for)g(completeness.)50 b(F)-8 b(ull)34 b(discussion)f(is)g(dela)m(y)m(ed)h(un)m(til)g(Section)g(10.3)g([Using) 150 847 y Fz(gawk)29 b FB(for)h(Net)m(w)m(ork)i(Programming],)f(page)g (168.)150 1041 y Fj(4.7.4)63 b(Sp)s(ecial)41 b(File)g(Name)g(Ca)m(v)m (eats)150 1188 y FB(Here)26 b(is)f(a)h(list)g(of)g(things)f(to)h(b)s (ear)f(in)g(mind)f(when)g(using)h(the)h(sp)s(ecial)g(\014le)f(names)h (that)g Fz(gawk)e FB(pro)m(vides:)225 1321 y Fy(\017)60 b FB(Recognition)30 b(of)d(these)h(sp)s(ecial)h(\014le)e(names)h(is)g (disabled)f(if)g Fz(gawk)g FB(is)h(in)f(compatibilit)m(y)j(mo)s(de)d (\(see)330 1430 y(Section)k(11.2)h([Command-Line)e(Options],)g(page)i (173\).)225 1562 y Fy(\017)60 b FB(As)27 b(men)m(tioned)g(earlier,)i (the)e(sp)s(ecial)g(\014les)g(that)g(pro)m(vide)g(pro)s(cess-related)h (information)f(are)g(no)m(w)330 1672 y(considered)g(obsolete)i(and)e (will)h(disapp)s(ear)e(en)m(tirely)j(in)e(the)h(next)f(release)i(of)f Fz(gawk)p FB(.)38 b Fz(gawk)26 b FB(prin)m(ts)330 1782 y(a)31 b(w)m(arning)f(message)h(ev)m(ery)h(time)f(y)m(ou)f(use)g(one)h (of)g(these)g(\014les.)225 1914 y Fy(\017)60 b FB(Starting)23 b(with)e(v)m(ersion)i(3.1,)i Fz(gawk)c Fw(always)32 b FB(in)m(terprets)22 b(these)h(sp)s(ecial)g(\014le)f(names.)3169 1881 y Fo(1)3244 1914 y FB(F)-8 b(or)23 b(example,)330 2023 y(using)28 b(`)p Fz(/dev/fd/4)p FB(')f(for)i(output)f(actually)j (writes)e(on)g(\014le)f(descriptor)h(4,)h(and)e(not)h(on)g(a)g(new)g (\014le)330 2133 y(descriptor)g(that)h(is)f Fz(dup)p FB('ed)g(from)g(\014le)g(descriptor)g(4.)41 b(Most)30 b(of)g(the)f(time)h(this)f(do)s(es)g(not)h(matter;)330 2243 y(ho)m(w)m(ev)m(er,)g(it)e(is)f(imp)s(ortan)m(t)h(to)h Fw(not)36 b FB(close)29 b(an)m(y)f(of)g(the)g(\014les)f(related)i(to)f (\014le)g(descriptors)f(0,)i(1,)g(and)330 2352 y(2.)41 b(Doing)32 b(so)e(results)g(in)g(unpredictable)g(b)s(eha)m(vior.)150 2580 y FA(4.8)68 b(Closing)46 b(Input)e(and)h(Output)g(Redirections)150 2739 y FB(If)38 b(the)h(same)g(\014le)g(name)f(or)h(the)g(same)g(shell) f(command)h(is)f(used)g(with)h Fz(getline)d FB(more)j(than)f(once)150 2849 y(during)h(the)h(execution)h(of)f(an)g Fz(awk)f FB(program)h(\(see)h(Section)g(3.8)g([Explicit)g(Input)e(with)g Fz(getline)p FB(],)150 2959 y(page)29 b(51\),)i(the)e(\014le)f(is)h(op) s(ened)f(\(or)h(the)g(command)f(is)h(executed\))h(the)e(\014rst)g(time) i(only)-8 b(.)40 b(A)m(t)30 b(that)f(time,)150 3068 y(the)i(\014rst)f (record)h(of)g(input)f(is)g(read)h(from)f(that)i(\014le)f(or)f (command.)42 b(The)30 b(next)h(time)h(the)f(same)g(\014le)g(or)150 3178 y(command)f(is)h(used)e(with)h Fz(getline)p FB(,)f(another)h (record)h(is)f(read)g(from)g(it,)h(and)f(so)h(on.)275 3310 y(Similarly)-8 b(,)29 b(when)e(a)h(\014le)g(or)g(pip)s(e)f(is)g (op)s(ened)g(for)h(output,)g(the)g(\014le)g(name)g(or)g(command)f(asso) s(ciated)150 3419 y(with)41 b(it)h(is)g(remem)m(b)s(ered)f(b)m(y)g Fz(awk)p FB(,)j(and)d(subsequen)m(t)g(writes)g(to)h(the)g(same)g (\014le)g(or)f(command)h(are)150 3529 y(app)s(ended)29 b(to)i(the)f(previous)g(writes.)41 b(The)30 b(\014le)g(or)h(pip)s(e)e (sta)m(ys)i(op)s(en)f(un)m(til)h Fz(awk)e FB(exits.)275 3661 y(This)24 b(implies)h(that)g(sp)s(ecial)h(steps)e(are)i(necessary) f(in)f(order)h(to)g(read)g(the)g(same)g(\014le)g(again)h(from)f(the)150 3771 y(b)s(eginning,)35 b(or)f(to)h(rerun)e(a)i(shell)f(command)h (\(rather)f(than)g(reading)h(more)f(output)g(from)g(the)h(same)150 3880 y(command\).)41 b(The)30 b Fz(close)f FB(function)h(mak)m(es)h (these)g(things)f(p)s(ossible:)390 4013 y Fz(close\()p Fk(filename)11 b Fz(\))150 4145 y FB(or:)390 4277 y Fz(close\()p Fk(command)g Fz(\))275 4409 y FB(The)22 b(argumen)m(t)h Fx(\014lename)28 b FB(or)23 b Fx(command)j FB(can)d(b)s(e)f(an)m(y)h (expression.)38 b(Its)23 b(v)-5 b(alue)23 b(m)m(ust)f Fw(exactly)32 b FB(matc)m(h)150 4519 y(the)23 b(string)g(that)g(w)m(as) g(used)f(to)i(op)s(en)e(the)h(\014le)g(or)f(start)i(the)f(command)f (\(spaces)i(and)e(other)h(\\irrelev)-5 b(an)m(t")150 4628 y(c)m(haracters)32 b(included\).)40 b(F)-8 b(or)31 b(example,)h(if)e(y)m(ou)h(op)s(en)e(a)i(pip)s(e)f(with)g(this:)390 4761 y Fz("sort)46 b(-r)i(names")e(|)h(getline)f(foo)150 4893 y FB(then)30 b(y)m(ou)h(m)m(ust)f(close)i(it)f(with)f(this:)p 150 4979 1200 4 v 199 5047 a Fo(1)275 5078 y Fn(Older)24 b(v)n(ersions)h(of)g Fm(gawk)g Fn(w)n(ould)g(in)n(terpret)f(these)g (names)h(in)n(ternally)g(only)f(if)h(the)f(system)h(did)f(not)g (actually)h(ha)n(v)n(e)f(a)275 5166 y(`)p Fm(/dev/fd)p Fn(')k(directory)f(or)g(an)n(y)e(of)j(the)e(other)g(sp)r(ecial)i (\014les)f(listed)g(earlier.)38 b(Usually)27 b(this)f(didn't)g(mak)n(e) h(a)g(di\013erence,)275 5253 y(but)21 b(sometimes)j(it)f(did;)h(th)n (us,)f(it)f(w)n(as)i(decided)e(to)h(mak)n(e)g Fm(gawk)p Fn('s)h(b)r(eha)n(vior)f(consisten)n(t)g(on)g(all)g(systems)g(and)g(to) g(ha)n(v)n(e)275 5340 y(it)i(alw)n(a)n(ys)i(in)n(terpret)e(the)h(sp)r (ecial)h(\014le)e(names)i(itself.)p eop end %%Page: 71 83 TeXDict begin 71 82 bop 2457 -116 a Fr(Chapter)30 b(4:)h(Prin)m(ting)h (Output)90 b FB(71)390 299 y Fz(close\("sort)45 b(-r)i(names"\))275 427 y FB(Once)28 b(this)h(function)g(call)h(is)f(executed,)h(the)f (next)g Fz(getline)e FB(from)h(that)i(\014le)f(or)g(command,)g(or)g (the)150 536 y(next)37 b Fz(print)f FB(or)h Fz(printf)e FB(to)j(that)g(\014le)f(or)g(command,)i(reop)s(ens)d(the)i(\014le)f(or) g(reruns)f(the)h(command.)150 646 y(Because)44 b(the)f(expression)g (that)h(y)m(ou)f(use)g(to)g(close)i(a)e(\014le)g(or)g(pip)s(eline)f(m)m (ust)h(exactly)i(matc)m(h)f(the)150 756 y(expression)33 b(used)f(to)h(op)s(en)g(the)g(\014le)g(or)f(run)g(the)h(command,)g(it)h (is)f(go)s(o)s(d)g(practice)h(to)f(use)g(a)g(v)-5 b(ariable)150 865 y(to)31 b(store)g(the)g(\014le)f(name)h(or)f(command.)40 b(The)30 b(previous)g(example)h(b)s(ecomes)g(the)f(follo)m(wing:)390 993 y Fz(sortcom)46 b(=)h("sort)g(-r)g(names")390 1103 y(sortcom)f(|)h(getline)f(foo)390 1212 y(...)390 1322 y(close\(sortcom\))150 1450 y FB(This)29 b(helps)g(a)m(v)m(oid)i (hard-to-\014nd)e(t)m(yp)s(ographical)i(errors)e(in)h(y)m(our)f Fz(awk)g FB(programs.)40 b(Here)30 b(are)h(some)f(of)150 1559 y(the)h(reasons)f(for)g(closing)i(an)e(output)g(\014le:)225 1687 y Fy(\017)60 b FB(T)-8 b(o)32 b(write)f(a)h(\014le)f(and)g(read)g (it)g(bac)m(k)h(later)h(on)e(in)g(the)g(same)h Fz(awk)e FB(program.)43 b(Close)32 b(the)f(\014le)g(after)330 1797 y(writing)f(it,)i(then)e(b)s(egin)g(reading)g(it)h(with)f Fz(getline)p FB(.)225 1924 y Fy(\017)60 b FB(T)-8 b(o)23 b(write)g(n)m(umerous)f(\014les,)j(successiv)m(ely)-8 b(,)26 b(in)d(the)g(same)g Fz(awk)f FB(program.)38 b(If)23 b(the)g(\014les)g(aren't)g(closed,)330 2034 y(ev)m(en)m(tually)34 b Fz(awk)d FB(ma)m(y)i(exceed)g(a)g(system)f(limit)h(on)f(the)g(n)m(um) m(b)s(er)f(of)h(op)s(en)g(\014les)g(in)g(one)g(pro)s(cess.)330 2144 y(It)e(is)h(b)s(est)f(to)h(close)h(eac)m(h)f(one)g(when)e(the)i (program)f(has)g(\014nished)f(writing)h(it.)225 2271 y Fy(\017)60 b FB(T)-8 b(o)32 b(mak)m(e)g(a)g(command)f(\014nish.)43 b(When)31 b(output)g(is)h(redirected)g(through)f(a)g(pip)s(e,)g(the)h (command)330 2381 y(reading)i(the)h(pip)s(e)e(normally)h(con)m(tin)m (ues)i(to)f(try)f(to)h(read)f(input)f(as)h(long)h(as)f(the)h(pip)s(e)e (is)h(op)s(en.)330 2491 y(Often)d(this)g(means)h(the)f(command)g (cannot)h(really)g(do)g(its)f(w)m(ork)h(un)m(til)f(the)h(pip)s(e)e(is)i (closed.)44 b(F)-8 b(or)330 2600 y(example,)31 b(if)f(output)g(is)h (redirected)f(to)h(the)g Fz(mail)e FB(program,)h(the)g(message)i(is)e (not)h(actually)g(sen)m(t)330 2710 y(un)m(til)g(the)f(pip)s(e)g(is)g (closed.)225 2838 y Fy(\017)60 b FB(T)-8 b(o)37 b(run)f(the)h(same)g (program)g(a)g(second)g(time,)j(with)c(the)h(same)h(argumen)m(ts.)60 b(This)37 b(is)g(not)g(the)330 2947 y(same)31 b(thing)f(as)h(giving)g (more)f(input)g(to)h(the)g(\014rst)e(run!)330 3075 y(F)-8 b(or)43 b(example,)k(supp)s(ose)41 b(a)i(program)g(pip)s(es)e(output)h (to)i(the)e Fz(mail)g FB(program.)77 b(If)42 b(it)h(outputs)330 3185 y(sev)m(eral)36 b(lines)e(redirected)h(to)f(this)h(pip)s(e)e (without)h(closing)h(it,)h(they)f(mak)m(e)g(a)g(single)f(message)i(of) 330 3294 y(sev)m(eral)28 b(lines.)40 b(By)27 b(con)m(trast,)i(if)e(the) g(program)g(closes)g(the)g(pip)s(e)f(after)i(eac)m(h)g(line)f(of)g (output,)g(then)330 3404 y(eac)m(h)32 b(line)e(mak)m(es)h(a)g(separate) h(message.)275 3550 y(If)22 b(y)m(ou)h(use)f(more)h(\014les)f(than)h (the)f(system)h(allo)m(ws)h(y)m(ou)f(to)g(ha)m(v)m(e)h(op)s(en,)g Fz(gawk)d FB(attempts)j(to)f(m)m(ultiplex)150 3660 y(the)34 b(a)m(v)-5 b(ailable)36 b(op)s(en)d(\014les)g(among)i(y)m(our)e(data)h (\014les.)51 b Fz(gawk)p FB('s)32 b(abilit)m(y)k(to)e(do)f(this)h(dep)s (ends)e(up)s(on)g(the)150 3769 y(facilities)39 b(of)e(y)m(our)g(op)s (erating)g(system,)i(so)e(it)g(ma)m(y)h(not)f(alw)m(a)m(ys)h(w)m(ork.) 60 b(It)37 b(is)g(therefore)g(b)s(oth)f(go)s(o)s(d)150 3879 y(practice)e(and)e(go)s(o)s(d)g(p)s(ortabilit)m(y)i(advice)f(to)h (alw)m(a)m(ys)g(use)e Fz(close)f FB(on)i(y)m(our)f(\014les)h(when)e(y)m (ou)i(are)g(done)150 3988 y(with)f(them.)46 b(In)31 b(fact,)j(if)e(y)m (ou)g(are)h(using)e(a)i(lot)g(of)f(pip)s(es,)g(it)h(is)f(essen)m(tial)i (that)e(y)m(ou)h(close)g(commands)150 4098 y(when)c(done.)41 b(F)-8 b(or)31 b(example,)g(consider)g(something)f(lik)m(e)i(this:)390 4226 y Fz({)581 4335 y(...)581 4445 y(command)46 b(=)h(\("grep)f(")i ($1)f(")g(/some/file)e(|)j(my_prog)e(-q)h(")g($3\))581 4555 y(while)f(\(\(command)g(|)h(getline\))f(>)h(0\))g({)772 4664 y Fk(process)f(output)g(of)57 b Fz(command)581 4774 y(})581 4883 y(#)47 b(need)g(close\(command\))d(here)390 4993 y(})275 5121 y FB(This)30 b(example)i(creates)h(a)f(new)f(pip)s (eline)g(based)g(on)h(data)g(in)f Fw(e)-5 b(ach)39 b FB(record.)44 b(Without)33 b(the)e(call)i(to)150 5230 y Fz(close)28 b FB(indicated)h(in)g(the)g(commen)m(t,)i Fz(awk)d FB(creates)j(c)m(hild)e(pro)s(cesses)g(to)h(run)e(the)h (commands,)g(un)m(til)g(it)150 5340 y(ev)m(en)m(tually)j(runs)d(out)i (of)f(\014le)h(descriptors)f(for)g(more)h(pip)s(elines.)p eop end %%Page: 72 84 TeXDict begin 72 83 bop 150 -116 a FB(72)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(Ev)m(en)35 b(though)g(eac)m(h)i(command)f(has)f(\014nished)f (\(as)i(indicated)g(b)m(y)g(the)f(end-of-\014le)h(return)f(status)150 408 y(from)e Fz(getline)p FB(\),)g(the)h(c)m(hild)f(pro)s(cess)g(is)h (not)g(terminated;)2218 375 y Fo(2)2291 408 y FB(more)f(imp)s(ortan)m (tly)-8 b(,)36 b(the)d(\014le)h(descriptor)150 518 y(for)c(the)h(pip)s (e)e(is)i(not)f(closed)h(and)f(released)h(un)m(til)g Fz(close)e FB(is)h(called)i(or)e Fz(awk)g FB(exits.)275 653 y Fz(close)h FB(will)i(silen)m(tly)h(do)e(nothing)h(if)g(giv)m(en)g (an)g(argumen)m(t)g(that)g(do)s(es)g(not)f(represen)m(t)h(a)g(\014le,)h (pip)s(e)150 762 y(or)c(copro)s(cess)h(that)g(w)m(as)g(op)s(ened)e (with)i(a)f(redirection.)275 897 y(Note)d(also)g(that)f(`)p Fz(close\(FILENAME\))p FB(')c(has)k(no)g(\\magic")i(e\013ects)f(on)f (the)g(implicit)h(lo)s(op)f(that)g(reads)150 1006 y(through)33 b(the)g(\014les)g(named)g(on)g(the)h(command)f(line.)50 b(It)33 b(is,)h(more)g(lik)m(ely)-8 b(,)36 b(a)e(close)g(of)g(a)f (\014le)h(that)g(w)m(as)150 1116 y(nev)m(er)d(op)s(ened,)f(so)g Fz(awk)g FB(silen)m(tly)h(do)s(es)f(nothing.)275 1250 y(When)e(using)g(the)h(`)p Fz(|&)p FB(')g(op)s(erator)g(to)h(comm)m (unicate)g(with)f(a)g(copro)s(cess,)h(it)f(is)g(o)s(ccasionally)i (useful)150 1360 y(to)h(b)s(e)e(able)i(to)f(close)i(one)e(end)f(of)h (the)g(t)m(w)m(o-w)m(a)m(y)j(pip)s(e)c(without)h(closing)h(the)f (other.)43 b(This)30 b(is)h(done)g(b)m(y)150 1469 y(supplying)c(a)h (second)g(argumen)m(t)g(to)h Fz(close)p FB(.)38 b(As)28 b(in)g(an)m(y)g(other)g(call)h(to)g Fz(close)p FB(,)e(the)h(\014rst)g (argumen)m(t)g(is)150 1579 y(the)i(name)f(of)g(the)h(command)f(or)g(sp) s(ecial)h(\014le)g(used)e(to)i(start)g(the)g(copro)s(cess.)40 b(The)29 b(second)g(argumen)m(t)150 1689 y(should)d(b)s(e)h(a)g (string,)h(with)f(either)g(of)g(the)h(v)-5 b(alues)27 b Fz("to")f FB(or)h Fz("from")p FB(.)38 b(Case)27 b(do)s(es)g(not)g (matter.)41 b(As)27 b(this)150 1798 y(is)j(an)g(adv)-5 b(anced)30 b(feature,)g(a)g(more)h(complete)g(discussion)e(is)h(dela)m (y)m(ed)h(un)m(til)f(Section)h(10.2)g([Tw)m(o-W)-8 b(a)m(y)150 1908 y(Comm)m(unications)39 b(with)e(Another)h(Pro)s(cess],)i(page)f (166,)i(whic)m(h)d(discusses)f(it)i(in)e(more)h(detail)i(and)150 2017 y(giv)m(es)32 b(an)e(example.)150 2217 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b(Using)42 b Fh(close)p Fj('s)h(Return)d(V)-10 b(alue)150 2364 y FB(In)35 b(man)m(y)g(v)m(ersions)h(of)f(Unix)h Fz(awk)p FB(,)g(the)f Fz(close)f FB(function)h(is)g(actually)i(a)f (statemen)m(t.)58 b(It)35 b(is)h(a)f(syn)m(tax)150 2473 y(error)30 b(to)h(try)f(and)g(use)g(the)h(return)e(v)-5 b(alue)31 b(from)f Fz(close)p FB(:)-2439 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: lflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: rflashlight.small.xpic (xpic) %%CreationDate: Tue Dec 12 09:51:27 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 80 32 m 64 24 l x 32 24 m 56 32 l x 32 8 m 56 0 l x 8 16 56 16 e 0 24 32 8 b 64 16 m 80 16 l x 64 8 m 80 0 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 390 2608 a Fz(command)46 b(=)h("...)o(")390 2717 y(command)f(|)h(getline)f(info)390 2827 y(retval)g(=)i (close\(command\))91 b(#)48 b(syntax)e(error)g(in)h(most)g(Unix)g(awks) 275 2961 y(gawk)20 b FB(treats)j Fz(close)e FB(as)h(a)h(function.)37 b(The)22 b(return)f(v)-5 b(alue)22 b(is)h Fy(\000)p FB(1)f(if)g(the)g (argumen)m(t)g(names)g(something)150 3071 y(that)37 b(w)m(as)f(nev)m (er)g(op)s(ened)f(with)h(a)g(redirection,)j(or)d(if)g(there)g(is)g(a)g (system)g(problem)g(closing)h(the)f(\014le)150 3181 y(or)d(pro)s(cess.) 48 b(In)33 b(these)g(cases,)i Fz(gawk)d FB(sets)h(the)h(built-in)e(v)-5 b(ariable)34 b Fz(ERRNO)e FB(to)i(a)f(string)g(describing)g(the)150 3290 y(problem.)275 3425 y(In)39 b Fz(gawk)p FB(,)j(when)e(closing)h(a) g(pip)s(e)e(or)i(copro)s(cess)f(\(input)g(or)h(output\),)i(the)d (return)f(v)-5 b(alue)41 b(is)g(the)150 3534 y(exit)32 b(status)g(of)f(the)g(command.)1270 3501 y Fo(3)1350 3534 y FB(Otherwise,)h(it)f(is)h(the)f(return)f(v)-5 b(alue)32 b(from)e(the)i(system's)f Fz(close)f FB(or)150 3644 y Fz(fclose)35 b FB(C)h(functions)g(when)f(closing)i(input)f(or)g (output)g(\014les,)i(resp)s(ectiv)m(ely)-8 b(.)61 b(This)35 b(v)-5 b(alue)37 b(is)g(zero)g(if)150 3753 y(the)31 b(close)g (succeeds,)g(or)g Fy(\000)p FB(1)f(if)g(it)h(fails.)275 3888 y(The)d(POSIX)g(standard)g(is)h(v)m(ery)g(v)-5 b(ague;)30 b(it)g(sa)m(ys)f(that)g Fz(close)f FB(returns)g(zero)h(on)g(success)g (and)f(non-)150 3998 y(zero)f(otherwise.)39 b(In)26 b(general,)i (di\013eren)m(t)e(implemen)m(tations)h(v)-5 b(ary)26 b(in)g(what)g(they)g(rep)s(ort)f(when)g(closing)150 4107 y(pip)s(es;)30 b(th)m(us)g(the)g(return)f(v)-5 b(alue)31 b(cannot)g(b)s(e)f(used)g(p)s(ortably)-8 b(.)-2588 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: lflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: rflashlight.small.xpic (xpic) %%CreationDate: Tue Dec 12 09:51:27 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 80 32 m 64 24 l x 32 24 m 56 32 l x 32 8 m 56 0 l x 8 16 56 16 e 0 24 32 8 b 64 16 m 80 16 l x 64 8 m 80 0 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 4963 1200 4 v 199 5031 a Fo(2)275 5063 y Fn(The)31 b(tec)n(hnical)g(terminology)i(is)e(rather)h(morbid.)51 b(The)31 b(\014nished)f(c)n(hild)h(is)h(called)g(a)g(\\zom)n(bie,")i (and)d(cleaning)h(up)275 5150 y(after)26 b(it)g(is)g(referred)g(to)g (as)h(\\reaping.")199 5221 y Fo(3)311 5253 y Fn(This)37 b(is)h(a)e(full)i(16-bit)f(v)l(alue)f(as)h(returned)f(b)n(y)g(the)g Fm(wait)h Fn(system)g(call.)68 b(See)37 b(the)f(system)h(man)n(ual)g (pages)g(for)275 5340 y(information)27 b(on)e(ho)n(w)h(to)g(deco)r(de)g (this)g(v)l(alue.)p eop end %%Page: 73 85 TeXDict begin 73 84 bop 2631 -116 a Fr(Chapter)30 b(5:)41 b(Expressions)90 b FB(73)150 299 y Fu(5)80 b(Expressions)150 503 y FB(Expressions)30 b(are)i(the)f(basic)g(building)g(blo)s(c)m(ks)g (of)g Fz(awk)g FB(patterns)g(and)f(actions.)44 b(An)31 b(expression)g(ev)-5 b(al-)150 613 y(uates)30 b(to)g(a)g(v)-5 b(alue)30 b(that)g(y)m(ou)g(can)g(prin)m(t,)g(test,)h(or)e(pass)g(to)h (a)g(function.)40 b(Additionally)-8 b(,)32 b(an)d(expression)150 722 y(can)i(assign)f(a)h(new)f(v)-5 b(alue)31 b(to)g(a)g(v)-5 b(ariable)31 b(or)f(a)h(\014eld)f(b)m(y)g(using)g(an)g(assignmen)m(t)i (op)s(erator.)275 851 y(An)f(expression)g(can)h(serv)m(e)g(as)g(a)g (pattern)g(or)f(action)i(statemen)m(t)h(on)d(its)h(o)m(wn.)45 b(Most)32 b(other)g(kinds)150 961 y(of)j(statemen)m(ts)h(con)m(tain)g (one)f(or)f(more)h(expressions)f(that)h(sp)s(ecify)f(the)h(data)g(on)g (whic)m(h)f(to)h(op)s(erate.)150 1070 y(As)27 b(in)f(other)h (languages,)i(expressions)d(in)g Fz(awk)g FB(include)g(v)-5 b(ariables,)29 b(arra)m(y)e(references,)h(constan)m(ts,)h(and)150 1180 y(function)h(calls,)i(as)e(w)m(ell)i(as)e(com)m(binations)i(of)e (these)h(with)f(v)-5 b(arious)31 b(op)s(erators.)150 1400 y FA(5.1)68 b(Constan)l(t)46 b(Expressions)150 1560 y FB(The)34 b(simplest)h(t)m(yp)s(e)g(of)g(expression)g(is)g(the)g Fx(constan)m(t)p FB(,)i(whic)m(h)e(alw)m(a)m(ys)h(has)f(the)g(same)g(v) -5 b(alue.)54 b(There)150 1669 y(are)31 b(three)f(t)m(yp)s(es)h(of)f (constan)m(ts:)42 b(n)m(umeric,)31 b(string,)f(and)g(regular)h (expression.)275 1798 y(Eac)m(h)g(is)h(used)e(in)h(the)g(appropriate)g (con)m(text)i(when)d(y)m(ou)i(need)f(a)g(data)h(v)-5 b(alue)32 b(that)g(isn't)f(going)h(to)150 1907 y(c)m(hange.)42 b(Numeric)30 b(constan)m(ts)i(can)e(ha)m(v)m(e)i(di\013eren)m(t)f (forms,)f(but)g(are)g(stored)h(iden)m(tically)h(in)m(ternally)-8 b(.)150 2095 y Fj(5.1.1)63 b(Numeric)41 b(and)g(String)g(Constan)m(ts) 150 2242 y FB(A)23 b Fx(n)m(umeric)h(constan)m(t)i FB(stands)d(for)g(a) h(n)m(um)m(b)s(er.)37 b(This)22 b(n)m(um)m(b)s(er)g(can)i(b)s(e)e(an)i (in)m(teger,)i(a)e(decimal)g(fraction,)150 2351 y(or)45 b(a)g(n)m(um)m(b)s(er)f(in)h(scien)m(ti\014c)h(\(exp)s(onen)m(tial\))g (notation.)2148 2318 y Fo(1)2271 2351 y FB(Here)g(are)f(some)h (examples)f(of)g(n)m(umeric)150 2461 y(constan)m(ts)32 b(that)e(all)i(ha)m(v)m(e)f(the)g(same)g(v)-5 b(alue:)390 2589 y Fz(105)390 2699 y(1.05e+2)390 2809 y(1050e-1)275 2937 y FB(A)21 b(string)g(constan)m(t)h(consists)g(of)f(a)h(sequence)f (of)h(c)m(haracters)g(enclosed)g(in)f(double-quotation)h(marks.)150 3047 y(F)-8 b(or)31 b(example:)390 3175 y Fz("parrot")150 3304 y FB(represen)m(ts)37 b(the)f(string)h(whose)g(con)m(ten)m(ts)h (are)f(`)p Fz(parrot)p FB('.)58 b(Strings)37 b(in)f Fz(gawk)f FB(can)i(b)s(e)f(of)h(an)m(y)g(length,)150 3413 y(and)c(they)h(can)f (con)m(tain)i(an)m(y)f(of)g(the)f(p)s(ossible)h(eigh)m(t-bit)h(ASCI)s (I)d(c)m(haracters)j(including)e(ASCI)s(I)f Fg(nul)150 3523 y FB(\(c)m(haracter)f(co)s(de)e(zero\).)42 b(Other)29 b Fz(awk)f FB(implemen)m(tations)i(ma)m(y)g(ha)m(v)m(e)g(di\016cult)m (y)g(with)f(some)g(c)m(haracter)150 3633 y(co)s(des.)150 3820 y Fj(5.1.2)63 b(Octal)40 b(and)h(Hexadecimal)f(Num)m(b)s(ers)150 3967 y FB(In)28 b Fz(awk)p FB(,)g(all)h(n)m(um)m(b)s(ers)e(are)i(in)f (decimal;)i(i.e.,)g(base)e(10.)41 b(Man)m(y)29 b(other)g(programming)f (languages)h(allo)m(w)150 4076 y(y)m(ou)k(to)f(sp)s(ecify)g(n)m(um)m(b) s(ers)f(in)h(other)g(bases,)h(often)g(o)s(ctal)g(\(base)g(8\))g(and)e (hexadecimal)j(\(base)e(16\).)48 b(In)150 4186 y(o)s(ctal,)29 b(the)d(n)m(um)m(b)s(ers)f(go)i(0,)h(1,)g(2,)f(3,)h(4,)g(5,)f(6,)h(7,)g (10,)g(11,)g(12,)g(etc.)41 b(Just)25 b(as)i(`)p Fz(11)p FB(',)g(in)f(decimal,)i(is)f(1)f(times)150 4296 y(10)33 b(plus)e(1,)i(so)g(`)p Fz(11)p FB(',)f(in)g(o)s(ctal,)i(is)e(1)h(times) f(8,)i(plus)d(1.)46 b(This)31 b(equals)i(9)f(in)g(decimal.)47 b(In)31 b(hexadecimal,)150 4405 y(there)d(are)g(16)h(digits.)40 b(Since)28 b(the)g(ev)m(eryda)m(y)h(decimal)g(n)m(um)m(b)s(er)d(system) i(only)g(has)g(ten)g(digits)g(\(`)p Fz(0)p FB('{`)p Fz(9)p FB('\),)150 4515 y(the)40 b(letters)g(`)p Fz(a)p FB(')g(through)f(`)p Fz(f)p FB(')h(are)g(used)f(to)h(represen)m(t)f(the)h(rest.)69 b(\(Case)40 b(in)f(the)h(letters)h(is)e(usually)150 4624 y(irrelev)-5 b(an)m(t;)38 b(hexadecimal)f(`)p Fz(a)p FB(')d(and)h(`)p Fz(A)p FB(')g(ha)m(v)m(e)h(the)f(same)g(v)-5 b(alue.\))55 b(Th)m(us,)35 b(`)p Fz(11)p FB(',)h(in)e(hexadecimal,)k (is)d(1)150 4734 y(times)c(16)g(plus)f(1,)h(whic)m(h)f(equals)g(17)i (in)e(decimal.)275 4863 y(Just)h(b)m(y)h(lo)s(oking)h(at)f(plain)g(`)p Fz(11)p FB(',)h(y)m(ou)f(can't)h(tell)g(what)f(base)g(it's)h(in.)45 b(So,)33 b(in)f(C,)g(C)p Fz(++)p FB(,)f(and)h(other)150 4972 y(languages)24 b(deriv)m(ed)g(from)e(C,)h(there)h(is)f(a)g(sp)s (ecial)h(notation)h(to)e(help)g(signify)g(the)h(base.)38 b(Octal)24 b(n)m(um)m(b)s(ers)150 5082 y(start)31 b(with)f(a)h(leading) g(`)p Fz(0)p FB(',)g(and)e(hexadecimal)j(n)m(um)m(b)s(ers)d(start)i (with)f(a)h(leading)g(`)p Fz(0x)p FB(')f(or)h(`)p Fz(0X)p FB(':)p 150 5154 1200 4 v 199 5221 a Fo(1)275 5253 y Fn(The)24 b(in)n(ternal)h(represen)n(tation)g(of)g(all)g(n)n(um)n(b)r (ers,)f(including)h(in)n(tegers,)g(uses)g(double-precision)g (\015oating-p)r(oin)n(t)f(n)n(um-)275 5340 y(b)r(ers.)34 b(On)25 b(most)h(mo)r(dern)g(systems,)g(these)g(are)g(in)g(IEEE)g(754)h (standard)e(format.)p eop end %%Page: 74 86 TeXDict begin 74 85 bop 150 -116 a FB(74)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz(11)384 b FB(Decimal)32 b(v)-5 b(alue)31 b(11.)150 459 y Fz(011)336 b FB(Octal)31 b(11,)h(decimal)f(v)-5 b(alue)31 b(9.)150 620 y Fz(0x11)288 b FB(Hexadecimal)32 b(11,)g(decimal)f(v)-5 b(alue)31 b(17.)275 781 y(This)e(example)i(sho)m (ws)f(the)h(di\013erence:)390 917 y Fz($)47 b(gawk)g('BEGIN)f({)i (printf)e("\045d,)g(\045d,)h(\045d\\n",)f(011,)h(11,)g(0x11)g(}')410 1031 y Fy(a)533 1027 y Fz(9,)g(11,)g(17)275 1162 y FB(Being)e(able)f (to)h(use)f(o)s(ctal)i(and)d(hexadecimal)j(constan)m(ts)f(in)f(y)m(our) g(programs)g(is)g(most)h(useful)150 1272 y(when)24 b(w)m(orking)i(with) f(data)h(that)g(cannot)g(b)s(e)f(represen)m(ted)g(con)m(v)m(enien)m (tly)i(as)f(c)m(haracters)h(or)e(as)h(regular)150 1381 y(n)m(um)m(b)s(ers,)j(suc)m(h)h(as)h(binary)e(data)j(of)e(v)-5 b(arious)30 b(sorts.)275 1517 y Fz(gawk)d FB(allo)m(ws)j(the)f(use)g (of)g(o)s(ctal)h(and)e(hexadecimal)j(constan)m(ts)e(in)g(y)m(our)g (program)f(text.)42 b(Ho)m(w)m(ev)m(er,)150 1627 y(suc)m(h)27 b(n)m(um)m(b)s(ers)f(in)h(the)h(input)e(data)i(are)g(not)f(treated)i (di\013eren)m(tly;)g(doing)f(so)f(b)m(y)g(default)h(w)m(ould)f(break) 150 1736 y(old)41 b(programs.)71 b(\(If)40 b(y)m(ou)h(really)g(need)g (to)g(do)f(this,)k(use)c(the)h(`)p Fz(--non-decimal-data)p FB(')36 b(command-)150 1846 y(line)k(option;)45 b(see)40 b(Section)g(10.1)h([Allo)m(wing)g(Nondecimal)g(Input)d(Data],)44 b(page)c(165.\))70 b(If)39 b(y)m(ou)h(ha)m(v)m(e)150 1955 y(o)s(ctal)e(or)e(hexadecimal)h(data,)i(y)m(ou)e(can)f(use)g(the)h Fz(strtonum)d FB(function)h(\(see)j(Section)f(8.1.3)h([String-)150 2065 y(Manipulation)c(F)-8 b(unctions],)34 b(page)g(129\))h(to)e(con)m (v)m(ert)i(the)e(data)h(in)m(to)f(a)h(n)m(um)m(b)s(er.)47 b(Most)34 b(of)f(the)g(time,)150 2175 y(y)m(ou)40 b(will)g(w)m(an)m(t)h (to)f(use)g(o)s(ctal)h(or)e(hexadecimal)i(constan)m(ts)g(when)e(w)m (orking)h(with)f(the)h(built-in)g(bit)150 2284 y(manipulation)34 b(functions;)h(see)g(Section)f(8.1.6)i([Bit-Manipulation)g(F)-8 b(unctions)34 b(of)g Fz(gawk)p FB(],)g(page)g(147,)150 2394 y(for)c(more)h(information.)275 2529 y(Unlik)m(e)j(some)g(early)g (C)f(implemen)m(tations,)i(`)p Fz(8)p FB(')f(and)f(`)p Fz(9)p FB(')g(are)h(not)g(v)-5 b(alid)33 b(in)g(o)s(ctal)i(constan)m (ts;)h(e.g.,)150 2639 y Fz(gawk)29 b FB(treats)j(`)p Fz(018)p FB(')e(as)g(decimal)h(18:)390 2775 y Fz($)47 b(gawk)g('BEGIN)f({)i(print)e("021)h(is",)f(021)h(;)h(print)e(018)h(}') 410 2888 y Fy(a)533 2884 y Fz(021)g(is)g(17)410 2998 y Fy(a)533 2994 y Fz(18)275 3130 y FB(Octal)25 b(and)f(hexadecimal)i (source)f(co)s(de)g(constan)m(ts)h(are)f(a)g Fz(gawk)f FB(extension.)39 b(If)24 b Fz(gawk)g FB(is)g(in)h(compat-)150 3239 y(ibilit)m(y)32 b(mo)s(de)e(\(see)h(Section)g(11.2)h ([Command-Line)e(Options],)g(page)h(173\),)i(they)d(are)h(not)g(a)m(v) -5 b(ailable.)150 3440 y Fj(Adv)e(anced)40 b(Notes:)62 b(A)41 b(Constan)m(t's)g(Base)g(Do)s(es)h(Not)f(A\013ect)e(Its)i(V)-10 b(alue)150 3587 y FB(Once)43 b(a)h(n)m(umeric)g(constan)m(t)h(has)e(b)s (een)g(con)m(v)m(erted)i(in)m(ternally)f(in)m(to)h(a)f(n)m(um)m(b)s (er,)i Fz(gawk)c FB(no)h(longer)150 3696 y(remem)m(b)s(ers)35 b(what)g(the)h(original)g(form)f(of)h(the)f(constan)m(t)i(w)m(as;)h (the)e(in)m(ternal)g(v)-5 b(alue)36 b(is)g(alw)m(a)m(ys)g(used.)150 3806 y(This)30 b(has)g(particular)g(consequences)h(for)g(con)m(v)m (ersion)g(of)g(n)m(um)m(b)s(ers)e(to)i(strings:)390 3941 y Fz($)47 b(gawk)g('BEGIN)f({)i(printf)e("0x11)g(is)h(<\045s>\\n",)f (0x11)g(}')410 4055 y Fy(a)533 4051 y Fz(0x11)h(is)g(<17>)150 4251 y Fj(5.1.3)63 b(Regular)40 b(Expression)i(Constan)m(ts)150 4398 y FB(A)62 b(regexp)h(constan)m(t)g(is)f(a)h(regular)f(expression)g (description)g(enclosed)h(in)f(slashes,)70 b(suc)m(h)62 b(as)150 4508 y Fz(/^beginning)27 b(and)j(end$/)n FB(.)41 b(Most)29 b(regexps)g(used)f(in)g Fz(awk)g FB(programs)g(are)h(constan) m(t,)i(but)d(the)h(`)p Fz(~)p FB(')g(and)150 4618 y(`)p Fz(!~)p FB(')38 b(matc)m(hing)h(op)s(erators)f(can)g(also)h(matc)m(h)f (computed)g(or)g(\\dynamic")g(regexps)g(\(whic)m(h)g(are)h(just)150 4727 y(ordinary)30 b(strings)g(or)g(v)-5 b(ariables)31 b(that)g(con)m(tain)h(a)f(regexp\).)150 4961 y FA(5.2)68 b(Using)46 b(Regular)g(Expression)f(Constan)l(ts)150 5121 y FB(When)40 b(used)e(on)i(the)g(righ)m(thand)f(side)h(of)g(the)g (`)p Fz(~)p FB(')g(or)f(`)p Fz(!~)p FB(')h(op)s(erators,)i(a)f(regexp)f (constan)m(t)h(merely)150 5230 y(stands)36 b(for)g(the)g(regexp)g(that) h(is)f(to)h(b)s(e)f(matc)m(hed.)59 b(Ho)m(w)m(ev)m(er,)40 b(regexp)c(constan)m(ts)h(\(suc)m(h)g(as)f Fz(/foo/)p FB(\))150 5340 y(ma)m(y)42 b(b)s(e)f(used)g(lik)m(e)i(simple)f (expressions.)74 b(When)41 b(a)h(regexp)g(constan)m(t)h(app)s(ears)e(b) m(y)g(itself,)46 b(it)c(has)p eop end %%Page: 75 87 TeXDict begin 75 86 bop 2631 -116 a Fr(Chapter)30 b(5:)41 b(Expressions)90 b FB(75)150 299 y(the)41 b(same)g(meaning)f(as)h(if)f (it)h(app)s(eared)f(in)g(a)h(pattern,)j(i.e.,)g(`)p Fz(\($0)30 b(~)g(/foo/\))p FB(')79 b(See)41 b(Section)g(6.1.2)-4070 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: lflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: rflashlight.small.xpic (xpic) %%CreationDate: Tue Dec 12 09:51:27 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 80 32 m 64 24 l x 32 24 m 56 32 l x 32 8 m 56 0 l x 8 16 56 16 e 0 24 32 8 b 64 16 m 80 16 l x 64 8 m 80 0 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 408 a([Expressions)30 b(as)g(P)m(atterns],)i(page)f (93.)42 b(This)29 b(means)i(that)g(the)f(follo)m(wing)i(t)m(w)m(o)g(co) s(de)e(segmen)m(ts:)390 538 y Fz(if)47 b(\($0)g(~)h(/barfly/)d(||)i($0) g(~)h(/camelot/\))581 648 y(print)e("found")150 777 y FB(and:)390 907 y Fz(if)h(\(/barfly/)e(||)j(/camelot/\))581 1016 y(print)e("found")150 1146 y FB(are)39 b(exactly)i(equiv)-5 b(alen)m(t.)67 b(One)38 b(rather)g(bizarre)h(consequence)h(of)f(this)f (rule)h(is)f(that)i(the)e(follo)m(wing)150 1255 y(Bo)s(olean)32 b(expression)e(is)g(v)-5 b(alid,)31 b(but)f(do)s(es)g(not)h(do)f(what)g (the)h(user)e(probably)h(in)m(tended:)390 1385 y Fz(#)47 b(note)g(that)g(/foo/)f(is)h(on)g(the)g(left)g(of)g(the)g(~)390 1494 y(if)g(\(/foo/)f(~)i($1\))f(print)f("found)g(foo")150 1624 y FB(This)30 b(co)s(de)g(is)h(\\ob)m(viously")h(testing)f Fz($1)f FB(for)g(a)h(matc)m(h)h(against)f(the)g(regexp)g Fz(/foo/)p FB(.)39 b(But)31 b(in)f(fact,)i(the)150 1733 y(expression)38 b(`)p Fz(/foo/)29 b(~)h($1)p FB(')38 b(actually)h(means)f(`)p Fz(\($0)30 b(~)g(/foo/\))f(~)h($1)p FB('.)63 b(In)38 b(other)g(w)m(ords,)i(\014rst)d(matc)m(h)150 1843 y(the)26 b(input)f(record)h(against)h(the)f(regexp)g Fz(/foo/)p FB(.)38 b(The)25 b(result)h(is)g(either)g(zero)h(or)f(one,)h (dep)s(ending)e(up)s(on)150 1953 y(the)36 b(success)g(or)f(failure)h (of)g(the)g(matc)m(h.)58 b(That)35 b(result)h(is)f(then)h(matc)m(hed)g (against)h(the)f(\014rst)f(\014eld)g(in)150 2062 y(the)28 b(record.)39 b(Because)29 b(it)g(is)e(unlik)m(ely)h(that)g(y)m(ou)g(w)m (ould)g(ev)m(er)g(really)h(w)m(an)m(t)f(to)g(mak)m(e)h(this)e(kind)g (of)h(test,)150 2172 y Fz(gawk)35 b FB(issues)h(a)g(w)m(arning)g(when)f (it)h(sees)h(this)f(construct)g(in)g(a)g(program.)58 b(Another)36 b(consequence)h(of)150 2281 y(this)30 b(rule)g(is)h(that)g (the)f(assignmen)m(t)h(statemen)m(t:)390 2411 y Fz(matches)46 b(=)h(/foo/)150 2540 y FB(assigns)42 b(either)f(zero)i(or)e(one)h(to)g (the)f(v)-5 b(ariable)42 b Fz(matches)p FB(,)h(dep)s(ending)d(up)s(on)g (the)h(con)m(ten)m(ts)i(of)f(the)150 2650 y(curren)m(t)35 b(input)g(record.)56 b(This)35 b(feature)h(of)f(the)h(language)h(has)e (nev)m(er)h(b)s(een)f(w)m(ell)h(do)s(cumen)m(ted)g(un)m(til)150 2760 y(the)31 b(POSIX)e(sp)s(eci\014cation.)275 2889 y(Constan)m(t)24 b(regular)g(expressions)g(are)g(also)h(used)f(as)g (the)g(\014rst)f(argumen)m(t)i(for)f(the)g Fz(gensub)p FB(,)g Fz(sub)p FB(,)h(and)150 2999 y Fz(gsub)e FB(functions,)i(and)f (as)g(the)h(second)f(argumen)m(t)h(of)f(the)h Fz(match)e FB(function)g(\(see)j(Section)f(8.1.3)h([String-)150 3108 y(Manipulation)f(F)-8 b(unctions],)27 b(page)f(129\).)40 b(Mo)s(dern)24 b(implemen)m(tations)i(of)f Fz(awk)p FB(,)g(including)g Fz(gawk)p FB(,)f(allo)m(w)150 3218 y(the)33 b(third)g(argumen)m(t)g(of) h Fz(split)e FB(to)i(b)s(e)e(a)i(regexp)f(constan)m(t,)j(but)c(some)i (older)f(implemen)m(tations)i(do)150 3328 y(not.)80 b(This)28 b(can)i(lead)f(to)h(confusion)e(when)g(attempting)i(to)g(use)f(regexp)g (constan)m(ts)h(as)f(argumen)m(ts)g(to)237 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 3437 a(user-de\014ned)29 b(functions)h(\(see)h (Section)g(8.2)h([User-De\014ned)e(F)-8 b(unctions],)32 b(page)f(149\).)42 b(F)-8 b(or)31 b(example:)390 3567 y Fz(function)46 b(mysub\(pat,)f(repl,)h(str,)h(global\))390 3676 y({)581 3786 y(if)g(\(global\))772 3895 y(gsub\(pat,)e(repl,)h (str\))581 4005 y(else)772 4115 y(sub\(pat,)f(repl,)i(str\))581 4224 y(return)f(str)390 4334 y(})390 4553 y({)581 4663 y(...)581 4772 y(text)h(=)g("hi!)g(hi)g(yourself!")581 4882 y(mysub\(/hi/,)e("howdy",)g(text,)i(1\))581 4991 y(...)390 5101 y(})275 5230 y FB(In)36 b(this)h(example,)i(the)e (programmer)g(w)m(an)m(ts)h(to)f(pass)g(a)g(regexp)g(constan)m(t)i(to)e (the)g(user-de\014ned)150 5340 y(function)h Fz(mysub)p FB(,)h(whic)m(h)f(in)h(turn)e(passes)h(it)h(on)f(to)i(either)e Fz(sub)g FB(or)g Fz(gsub)p FB(.)64 b(Ho)m(w)m(ev)m(er,)43 b(what)38 b(really)p eop end %%Page: 76 88 TeXDict begin 76 87 bop 150 -116 a FB(76)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(happ)s(ens)c(is)i(that)h(the)f Fz(pat)f FB(parameter)h(is)g (either)h(one)f(or)g(zero,)h(dep)s(ending)e(up)s(on)f(whether)h(or)h (not)h Fz($0)150 408 y FB(matc)m(hes)35 b Fz(/hi/)p FB(.)48 b Fz(gawk)32 b FB(issues)h(a)h(w)m(arning)f(when)g(it)h(sees)f(a)h (regexp)g(constan)m(t)h(used)d(as)i(a)f(parameter)150 518 y(to)c(a)f(user-de\014ned)e(function,)j(since)f(passing)g(a)g (truth)f(v)-5 b(alue)29 b(in)f(this)f(w)m(a)m(y)i(is)f(probably)f(not)i (what)f(w)m(as)150 628 y(in)m(tended.)150 864 y FA(5.3)68 b(V)-11 b(ariables)150 1024 y FB(V)j(ariables)34 b(are)g(w)m(a)m(ys)g (of)f(storing)h(v)-5 b(alues)33 b(at)h(one)g(p)s(oin)m(t)f(in)g(y)m (our)g(program)g(for)g(use)g(later)h(in)f(another)150 1133 y(part)26 b(of)g(y)m(our)g(program.)39 b(They)26 b(can)g(b)s(e)g(manipulated)g(en)m(tirely)h(within)f(the)g(program)g (text,)i(and)e(they)150 1243 y(can)31 b(also)g(b)s(e)f(assigned)g(v)-5 b(alues)31 b(on)f(the)h Fz(awk)e FB(command)h(line.)150 1445 y Fj(5.3.1)63 b(Using)42 b(V)-10 b(ariables)40 b(in)i(a)e(Program) 150 1592 y FB(V)-8 b(ariables)29 b(let)g(y)m(ou)g(giv)m(e)h(names)e(to) g(v)-5 b(alues)29 b(and)e(refer)h(to)h(them)f(later.)41 b(V)-8 b(ariables)30 b(ha)m(v)m(e)f(already)g(b)s(een)150 1701 y(used)d(in)h(man)m(y)h(of)f(the)h(examples.)40 b(The)27 b(name)g(of)g(a)h(v)-5 b(ariable)28 b(m)m(ust)f(b)s(e)g(a)h (sequence)f(of)h(letters,)h(digits,)150 1811 y(or)j(underscores,)g(and) f(it)i(ma)m(y)f(not)g(b)s(egin)g(with)g(a)g(digit.)47 b(Case)32 b(is)g(signi\014can)m(t)h(in)f(v)-5 b(ariable)32 b(names;)h Fz(a)150 1921 y FB(and)d Fz(A)g FB(are)h(distinct)f(v)-5 b(ariables.)275 2058 y(A)28 b(v)-5 b(ariable)29 b(name)g(is)f(a)h(v)-5 b(alid)28 b(expression)h(b)m(y)f(itself;)i(it)f(represen)m(ts)f(the)h (v)-5 b(ariable's)29 b(curren)m(t)f(v)-5 b(alue.)150 2167 y(V)d(ariables)31 b(are)f(giv)m(en)g(new)f(v)-5 b(alues)30 b(with)g Fx(assignmen)m(t)g(op)s(erators)p FB(,)g Fx(incremen)m(t)g(op)s(erators)p FB(,)g(and)f Fx(decre-)150 2277 y(men)m(t)i(op)s(erators)p FB(.)41 b(See)30 b(Section)h(5.7)h([Assignmen)m(t)f(Expressions],)f(page)h(81.) 275 2414 y(A)41 b(few)f(v)-5 b(ariables)42 b(ha)m(v)m(e)g(sp)s(ecial)g (built-in)f(meanings,)j(suc)m(h)d(as)g Fz(FS)f FB(\(the)i(\014eld)f (separator\),)k(and)150 2524 y Fz(NF)32 b FB(\(the)i(n)m(um)m(b)s(er)d (of)j(\014elds)e(in)h(the)g(curren)m(t)f(input)g(record\).)49 b(See)33 b(Section)h(6.5)g([Built-in)g(V)-8 b(ariables],)150 2633 y(page)22 b(107,)j(for)c(a)h(list)g(of)g(the)g(built-in)f(v)-5 b(ariables.)39 b(These)21 b(built-in)g(v)-5 b(ariables)22 b(can)g(b)s(e)f(used)g(and)g(assigned)150 2743 y(just)27 b(lik)m(e)i(all)g(other)f(v)-5 b(ariables,)29 b(but)e(their)h(v)-5 b(alues)28 b(are)g(also)g(used)f(or)h(c)m(hanged)g(automatically)j(b)m (y)d Fz(awk)p FB(.)150 2853 y(All)j(built-in)f(v)-5 b(ariables')31 b(names)g(are)g(en)m(tirely)g(upp)s(ercase.)275 2990 y(V)-8 b(ariables)37 b(in)f Fz(awk)f FB(can)h(b)s(e)f(assigned)i (either)f(n)m(umeric)g(or)g(string)g(v)-5 b(alues.)58 b(The)36 b(kind)f(of)h(v)-5 b(alue)37 b(a)150 3099 y(v)-5 b(ariable)29 b(holds)f(can)h(c)m(hange)g(o)m(v)m(er)h(the)f(life)g(of)f (a)h(program.)40 b(By)29 b(default,)g(v)-5 b(ariables)29 b(are)g(initialized)h(to)150 3209 y(the)k(empt)m(y)g(string,)g(whic)m (h)f(is)h(zero)g(if)g(con)m(v)m(erted)h(to)f(a)g(n)m(um)m(b)s(er.)48 b(There)33 b(is)h(no)f(need)g(to)i(\\initialize")150 3319 y(eac)m(h)23 b(v)-5 b(ariable)22 b(explicitly)h(in)e Fz(awk)p FB(,)h(whic)m(h)f(is)h(what)f(y)m(ou)h(w)m(ould)f(do)g(in)g(C) g(and)g(in)g(most)h(other)g(traditional)150 3428 y(languages.)150 3630 y Fj(5.3.2)63 b(Assigning)42 b(V)-10 b(ariables)41 b(on)g(the)g(Command)h(Line)150 3777 y FB(An)m(y)24 b Fz(awk)f FB(v)-5 b(ariable)25 b(can)g(b)s(e)e(set)i(b)m(y)f(including)g (a)g Fx(v)-5 b(ariable)25 b(assignmen)m(t)i FB(among)e(the)f(argumen)m (ts)h(on)f(the)150 3887 y(command)37 b(line)g(when)f Fz(awk)g FB(is)h(in)m(v)m(ok)m(ed)h(\(see)g(Section)g(11.3)g([Other)f (Command-Line)f(Argumen)m(ts],)150 3996 y(page)31 b(178\).)42 b(Suc)m(h)30 b(an)g(assignmen)m(t)i(has)e(the)g(follo)m(wing)i(form:) 390 4133 y Fk(variable)11 b Fz(=)p Fk(text)150 4271 y FB(With)35 b(it,)g(a)g(v)-5 b(ariable)35 b(is)f(set)h(either)f(at)h (the)f(b)s(eginning)g(of)g(the)g Fz(awk)f FB(run)g(or)h(in)g(b)s(et)m (w)m(een)h(input)e(\014les.)150 4380 y(When)d(the)h(assignmen)m(t)g(is) f(preceded)g(with)g(the)h(`)p Fz(-v)p FB(')f(option,)h(as)g(in)f(the)h (follo)m(wing:)390 4518 y Fz(-v)47 b Fk(variable)11 b Fz(=)p Fk(text)150 4655 y FB(the)39 b(v)-5 b(ariable)39 b(is)g(set)g(at)g(the)g(v)m(ery)g(b)s(eginning,)h(ev)m(en)f(b)s(efore)f (the)h Fz(BEGIN)e FB(rules)h(are)h(run.)64 b(The)38 b(`)p Fz(-v)p FB(')150 4764 y(option)28 b(and)e(its)i(assignmen)m(t)g(m)m (ust)f(precede)h(all)g(the)f(\014le)h(name)f(argumen)m(ts,)h(as)g(w)m (ell)g(as)g(the)f(program)150 4874 y(text.)40 b(\(See)27 b(Section)h(11.2)f([Command-Line)f(Options],)i(page)f(173,)h(for)e (more)h(information)g(ab)s(out)f(the)150 4984 y(`)p Fz(-v)p FB(')32 b(option.\))48 b(Otherwise,)33 b(the)f(v)-5 b(ariable)34 b(assignmen)m(t)f(is)f(p)s(erformed)f(at)i(a)g(time)g(determined)f(b)m (y)h(its)150 5093 y(p)s(osition)k(among)g(the)g(input)e(\014le)i (argumen)m(ts|after)g(the)g(pro)s(cessing)f(of)h(the)g(preceding)f (input)g(\014le)150 5203 y(argumen)m(t.)41 b(F)-8 b(or)31 b(example:)390 5340 y Fz(awk)47 b('{)g(print)f($n)i(}')f(n=4)g (inventory-shipped)c(n=2)k(BBS-list)p eop end %%Page: 77 89 TeXDict begin 77 88 bop 2631 -116 a Fr(Chapter)30 b(5:)41 b(Expressions)90 b FB(77)150 299 y(prin)m(ts)38 b(the)h(v)-5 b(alue)39 b(of)g(\014eld)f(n)m(um)m(b)s(er)g Fz(n)g FB(for)h(all)g (input)f(records.)66 b(Before)39 b(the)g(\014rst)f(\014le)h(is)g(read,) i(the)150 408 y(command)33 b(line)g(sets)h(the)f(v)-5 b(ariable)34 b Fz(n)f FB(equal)g(to)h(four.)48 b(This)32 b(causes)i(the)f(fourth)f(\014eld)h(to)h(b)s(e)e(prin)m(ted)150 518 y(in)42 b(lines)h(from)e(the)i(\014le)f(`)p Fz(inventory-shipped)p FB('.)73 b(After)42 b(the)h(\014rst)e(\014le)i(has)f(\014nished,)i(but) d(b)s(efore)150 628 y(the)36 b(second)f(\014le)g(is)h(started,)h Fz(n)e FB(is)h(set)g(to)g(t)m(w)m(o,)i(so)e(that)f(the)h(second)f (\014eld)g(is)h(prin)m(ted)f(in)g(lines)g(from)150 737 y(`)p Fz(BBS-list)p FB(':)390 870 y Fz($)47 b(awk)g('{)h(print)e($n)h (}')g(n=4)g(inventory-shipped)c(n=2)k(BBS-list)410 984 y Fy(a)533 980 y Fz(15)410 1094 y Fy(a)533 1090 y Fz(24)390 1199 y(...)410 1313 y Fy(a)533 1309 y Fz(555-5553)410 1422 y Fy(a)533 1418 y Fz(555-3412)390 1528 y(...)275 1661 y FB(Command-line)35 b(argumen)m(ts)h(are)g(made)g(a)m(v)-5 b(ailable)38 b(for)d(explicit)i(examination)g(b)m(y)f(the)f Fz(awk)g FB(pro-)150 1771 y(gram)30 b(in)f(the)h Fz(ARGV)f FB(arra)m(y)h(\(see)h(Section)g(6.5.3)g([Using)f Fz(ARGC)f FB(and)g Fz(ARGV)p FB(],)h(page)g(113\).)42 b Fz(awk)29 b FB(pro)s(cesses)150 1880 y(the)34 b(v)-5 b(alues)34 b(of)g(command-line)g(assignmen)m(ts)h(for)e(escap)s(e)i(sequences)f (\(see)g(Section)h(2.2)g([Escap)s(e)f(Se-)150 1990 y(quences],)d(page)g (25\).)3087 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 2220 a FA(5.4)68 b(Con)l(v)l(ersion)46 b(of)f(Strings)h(and)e(Num)l(b)t(ers)150 2379 y FB(Strings)24 b(are)i(con)m(v)m(erted)g(to)g(n)m(um)m(b)s(ers)d(and)h(n)m(um)m(b)s (ers)g(are)h(con)m(v)m(erted)h(to)g(strings,)g(if)f(the)g(con)m(text)i (of)e(the)150 2489 y Fz(awk)32 b FB(program)h(demands)f(it.)49 b(F)-8 b(or)34 b(example,)g(if)f(the)g(v)-5 b(alue)34 b(of)f(either)g Fz(foo)f FB(or)h Fz(bar)f FB(in)h(the)g(expression)150 2598 y(`)p Fz(foo)d(+)g(bar)p FB(')43 b(happ)s(ens)g(to)i(b)s(e)f(a)g (string,)k(it)d(is)f(con)m(v)m(erted)i(to)f(a)g(n)m(um)m(b)s(er)e(b)s (efore)h(the)g(addition)h(is)150 2708 y(p)s(erformed.)39 b(If)28 b(n)m(umeric)h(v)-5 b(alues)29 b(app)s(ear)f(in)g(string)h (concatenation,)j(they)d(are)g(con)m(v)m(erted)h(to)g(strings.)150 2817 y(Consider)g(the)g(follo)m(wing:)390 2950 y Fz(two)47 b(=)g(2;)h(three)e(=)h(3)390 3060 y(print)f(\(two)h(three\))f(+)i(4)150 3193 y FB(This)29 b(prin)m(ts)f(the)i(\(n)m(umeric\))g(v)-5 b(alue)30 b(27.)41 b(The)29 b(n)m(umeric)g(v)-5 b(alues)29 b(of)h(the)f(v)-5 b(ariables)30 b Fz(two)f FB(and)g Fz(three)f FB(are)150 3303 y(con)m(v)m(erted)35 b(to)f(strings)g(and)f (concatenated)j(together.)52 b(The)33 b(resulting)g(string)h(is)g(con)m (v)m(erted)h(bac)m(k)f(to)150 3412 y(the)d(n)m(um)m(b)s(er)e(23,)i(to)g (whic)m(h)f(4)h(is)f(then)h(added.)275 3546 y(If,)d(for)h(some)g (reason,)h(y)m(ou)f(need)f(to)i(force)f(a)g(n)m(um)m(b)s(er)f(to)h(b)s (e)f(con)m(v)m(erted)i(to)g(a)f(string,)g(concatenate)150 3655 y(the)e(empt)m(y)f(string,)i Fz("")p FB(,)e(with)g(that)h(n)m(um)m (b)s(er.)38 b(T)-8 b(o)27 b(force)g(a)g(string)f(to)h(b)s(e)f(con)m(v)m (erted)i(to)f(a)f(n)m(um)m(b)s(er,)h(add)150 3765 y(zero)35 b(to)f(that)h(string.)51 b(A)34 b(string)g(is)g(con)m(v)m(erted)i(to)f (a)f(n)m(um)m(b)s(er)f(b)m(y)g(in)m(terpreting)i(an)m(y)f(n)m(umeric)g (pre\014x)150 3874 y(of)c(the)g(string)g(as)g(n)m(umerals:)40 b Fz("2.5")28 b FB(con)m(v)m(erts)j(to)g(2.5,)g Fz("1e3")e FB(con)m(v)m(erts)i(to)f(1000,)i(and)d Fz("25fix")f FB(has)150 3984 y(a)j(n)m(umeric)f(v)-5 b(alue)31 b(of)f(25.)42 b(Strings)30 b(that)h(can't)g(b)s(e)f(in)m(terpreted)g(as)h(v)-5 b(alid)31 b(n)m(um)m(b)s(ers)e(con)m(v)m(ert)j(to)f(zero.)275 4117 y(The)43 b(exact)j(manner)d(in)h(whic)m(h)g(n)m(um)m(b)s(ers)f (are)h(con)m(v)m(erted)i(in)m(to)f(strings)f(is)g(con)m(trolled)i(b)m (y)e(the)150 4227 y Fz(awk)28 b FB(built-in)h(v)-5 b(ariable)30 b Fz(CONVFMT)d FB(\(see)j(Section)g(6.5)g([Built-in)g(V)-8 b(ariables],)31 b(page)f(107\).)42 b(Num)m(b)s(ers)28 b(are)150 4336 y(con)m(v)m(erted)c(using)e(the)h Fz(sprintf)e FB(function)h(with)g Fz(CONVFMT)f FB(as)i(the)f(format)h(sp)s (eci\014er)f(\(see)i(Section)f(8.1.3)150 4446 y([String-Manipulation)31 b(F)-8 b(unctions],)32 b(page)f(129\).)275 4579 y Fz(CONVFMT)p FB('s)21 b(default)i(v)-5 b(alue)24 b(is)f Fz("\045.6g")p FB(,)g(whic)m(h)g(prin)m(ts)f(a)i(v)-5 b(alue)23 b(with)g(at)h(least)g (six)f(signi\014can)m(t)h(digits.)150 4689 y(F)-8 b(or)39 b(some)f(applications,)j(y)m(ou)e(migh)m(t)f(w)m(an)m(t)h(to)g(c)m (hange)g(it)f(to)h(sp)s(ecify)f(more)g(precision.)63 b(On)38 b(most)150 4798 y(mo)s(dern)d(mac)m(hines,)j(17)f(digits)g(is)f (enough)f(to)i(capture)f(a)h(\015oating-p)s(oin)m(t)g(n)m(um)m(b)s (er's)e(v)-5 b(alue)36 b(exactly)-8 b(,)150 4908 y(most)31 b(of)f(the)h(time.)834 4875 y Fo(2)275 5041 y FB(Strange)i(results)g (can)g(o)s(ccur)g(if)g(y)m(ou)h(set)f Fz(CONVFMT)e FB(to)j(a)g(string)f (that)h(do)s(esn't)e(tell)j Fz(sprintf)c FB(ho)m(w)150 5150 y(to)i(format)f(\015oating-p)s(oin)m(t)h(n)m(um)m(b)s(ers)e(in)g (a)i(useful)e(w)m(a)m(y)-8 b(.)47 b(F)-8 b(or)32 b(example,)i(if)e(y)m (ou)g(forget)h(the)f(`)p Fz(\045)p FB(')g(in)g(the)p 150 5241 1200 4 v 199 5308 a Fo(2)275 5340 y Fn(P)n(athological)c (cases)f(can)f(require)f(up)g(to)h(752)h(digits)f(\(!\),)g(but)f(w)n(e) h(doubt)f(that)g(y)n(ou)g(need)h(to)f(w)n(orry)h(ab)r(out)g(this.)p eop end %%Page: 78 90 TeXDict begin 78 89 bop 150 -116 a FB(78)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(format,)c Fz(awk)e FB(con)m(v)m(erts)j(all)e(n)m(um)m(b)s(ers) e(to)j(the)f(same)g(constan)m(t)h(string.)39 b(As)25 b(a)g(sp)s(ecial)g(case,)i(if)e(a)g(n)m(um)m(b)s(er)150 408 y(is)38 b(an)f(in)m(teger,)k(then)c(the)h(result)f(of)h(con)m(v)m (erting)h(it)f(to)g(a)g(string)f(is)h Fw(always)46 b FB(an)38 b(in)m(teger,)j(no)c(matter)150 518 y(what)30 b(the)h(v)-5 b(alue)31 b(of)f Fz(CONVFMT)f FB(ma)m(y)i(b)s(e.)40 b(Giv)m(en)31 b(the)f(follo)m(wing)i(co)s(de)f(fragmen)m(t:)390 696 y Fz(CONVFMT)46 b(=)h("\0452.2f")390 805 y(a)g(=)h(12)390 915 y(b)f(=)h(a)f("")150 1092 y(b)30 b FB(has)g(the)h(v)-5 b(alue)31 b Fz("12")p FB(,)e(not)i Fz("12.00")p FB(.)-1873 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: lflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: rflashlight.small.xpic (xpic) %%CreationDate: Tue Dec 12 09:51:27 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 80 32 m 64 24 l x 32 24 m 56 32 l x 32 8 m 56 0 l x 8 16 56 16 e 0 24 32 8 b 64 16 m 80 16 l x 64 8 m 80 0 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 275 1270 a(Prior)39 b(to)h(the)f(POSIX)g(standard,)i Fz(awk)d FB(used)h(the)g(v)-5 b(alue)40 b(of)g Fz(OFMT)e FB(for)h(con)m(v)m(erting)i(n)m(um)m(b)s(ers)d(to)150 1379 y(strings.)f Fz(OFMT)19 b FB(sp)s(eci\014es)h(the)h(output)f (format)g(to)i(use)e(when)f(prin)m(ting)h(n)m(um)m(b)s(ers)f(with)h Fz(print)p FB(.)36 b Fz(CONVFMT)150 1489 y FB(w)m(as)45 b(in)m(tro)s(duced)f(in)g(order)g(to)h(separate)h(the)e(seman)m(tics)i (of)f(con)m(v)m(ersion)g(from)f(the)h(seman)m(tics)h(of)150 1599 y(prin)m(ting.)38 b(Both)23 b Fz(CONVFMT)e FB(and)h Fz(OFMT)g FB(ha)m(v)m(e)i(the)f(same)g(default)g(v)-5 b(alue:)37 b Fz("\045.6g")p FB(.)g(In)22 b(the)h(v)-5 b(ast)23 b(ma)5 b(jorit)m(y)150 1708 y(of)41 b(cases,)j(old)d Fz(awk)f FB(programs)g(do)h(not)f(c)m(hange)i(their)f(b)s(eha)m(vior.) 72 b(Ho)m(w)m(ev)m(er,)45 b(these)c(seman)m(tics)h(for)150 1818 y Fz(OFMT)e FB(are)i(something)g(to)g(k)m(eep)g(in)f(mind)g(if)g (y)m(ou)h(m)m(ust)f(p)s(ort)g(y)m(our)g(new)g(st)m(yle)h(program)g(to)g (older)150 1927 y(implemen)m(tations)30 b(of)f Fz(awk)p FB(.)40 b(W)-8 b(e)30 b(recommend)f(that)g(instead)g(of)g(c)m(hanging)h (y)m(our)f(programs,)g(just)g(p)s(ort)150 2037 y Fz(gawk)k FB(itself.)52 b(See)34 b(Section)h(4.1)g([The)e Fz(print)g FB(Statemen)m(t],)k(page)d(57,)i(for)e(more)g(information)g(on)g(the) 150 2147 y Fz(print)29 b FB(statemen)m(t.)275 2324 y(Finally)-8 b(,)46 b(once)c(again,)k(where)41 b(y)m(ou)h(are)g(can)g(matter)g(when) f(it)h(comes)g(to)h(con)m(v)m(erting)g(b)s(et)m(w)m(een)150 2434 y(n)m(um)m(b)s(ers)38 b(and)h(strings.)69 b(In)39 b(Section)h(2.9)h([Where)f(Y)-8 b(ou)40 b(Are)g(Mak)m(es)h(A)f (Di\013erence],)k(page)c(35,)j(w)m(e)150 2543 y(men)m(tioned)22 b(that)f(the)h(lo)s(cal)g(c)m(haracter)h(set)e(and)g(language)h(\(the)g (lo)s(cale\))h(can)e(a\013ect)i(ho)m(w)e Fz(gawk)f FB(matc)m(hes)150 2653 y(c)m(haracters.)71 b(The)39 b(lo)s(cale)j(also)e(a\013ects)i(n)m (umeric)d(formats.)70 b(In)39 b(particular,)k(for)c Fz(awk)g FB(programs,)j(it)150 2762 y(a\013ects)29 b(the)f(decimal)h(p)s(oin)m (t)f(c)m(haracter.)42 b(The)27 b Fz("C")g FB(lo)s(cale,)j(and)e(most)g (English-language)h(lo)s(cales,)h(use)150 2872 y(the)d(p)s(erio)s(d)e (c)m(haracter)k(\(`)p Fz(.)p FB('\))e(as)g(the)g(decimal)h(p)s(oin)m (t.)40 b(Ho)m(w)m(ev)m(er,)30 b(man)m(y)c(\(if)h(not)h(most\))f(Europ)s (ean)f(and)150 2982 y(non-English)k(lo)s(cales)i(use)e(the)g(comma)h (\(`)p Fz(,)p FB('\))h(as)e(the)h(decimal)g(p)s(oin)m(t)g(c)m (haracter.)275 3159 y(The)j(POSIX)g(standard)g(sa)m(ys)h(that)g Fz(awk)f FB(alw)m(a)m(ys)j(uses)d(the)h(p)s(erio)s(d)e(as)i(the)g (decimal)h(p)s(oin)m(t)f(when)150 3269 y(reading)29 b(the)f Fz(awk)g FB(program)g(source)h(co)s(de,)g(and)f(for)g(command-line)h(v) -5 b(ariable)30 b(assignmen)m(ts)f(\(see)g(Sec-)150 3378 y(tion)g(11.3)i([Other)d(Command-Line)g(Argumen)m(ts],)i(page)f(178\).) 42 b(Ho)m(w)m(ev)m(er,)32 b(when)27 b(in)m(terpreting)j(input)150 3488 y(data,)g(for)f Fz(print)f FB(and)h Fz(printf)e FB(output,)j(and)e(for)h(n)m(um)m(b)s(er)f(to)i(string)f(con)m(v)m (ersion,)i(the)e(lo)s(cal)i(decimal)150 3598 y(p)s(oin)m(t)39 b(c)m(haracter)i(is)e(used.)66 b(As)39 b(of)g(v)m(ersion)h(3.1.3,)j Fz(gawk)38 b FB(fully)g(complies)i(with)f(this)g(asp)s(ect)h(of)f(the) 150 3707 y(standard.)45 b(Here)33 b(are)f(some)h(examples)f(indicating) h(the)g(di\013erence)f(in)g(b)s(eha)m(vior,)h(on)f(a)g(GNU/Lin)m(ux)150 3817 y(system:)390 3994 y Fz($)47 b(gawk)g('BEGIN)f({)i(printf)e ("\045g\\n",)g(3.1415927)f(}')410 4108 y Fy(a)533 4104 y Fz(3.14159)390 4213 y($)95 b(LC_ALL=en_DK)45 b(gawk)h('BEGIN)g({)i (printf)e("\045g\\n",)g(3.1415927)f(}')410 4327 y Fy(a)533 4323 y Fz(3,14159)390 4433 y($)i(echo)g(4,321)f(|)i(gawk)f('{)g(print)f ($1)h(+)h(1)f(}')410 4546 y Fy(a)533 4542 y Fz(5)390 4652 y($)g(echo)g(4,321)f(|)i(LC_ALL=en_DK)c(gawk)j('{)g(print)g($1)g (+)g(1)h(}')410 4765 y Fy(a)533 4761 y Fz(5,321)150 4939 y FB(The)32 b(`)p Fz(en_DK)p FB(')f(lo)s(cale)j(is)e(for)g(English)g (in)g(Denmark,)h(where)e(the)i(comma)g(acts)g(as)f(the)h(decimal)g(p)s (oin)m(t)150 5049 y(separator.)43 b(In)30 b(the)i(normal)f Fz("C")f FB(lo)s(cale,)j Fz(gawk)c FB(treats)j(`)p Fz(4,321)p FB(')e(as)i(`)p Fz(4)p FB(',)f(while)g(in)g(the)g(Danish)g(lo)s(cale,) 150 5158 y(it's)g(treated)g(as)g(the)g(full)f(n)m(um)m(b)s(er,)f(`)p Fz(4.321)p FB('.)p eop end %%Page: 79 91 TeXDict begin 79 90 bop 2631 -116 a Fr(Chapter)30 b(5:)41 b(Expressions)90 b FB(79)150 299 y FA(5.5)68 b(Arithmetic)46 b(Op)t(erators)150 458 y FB(The)30 b Fz(awk)g FB(language)i(uses)e(the) h(common)g(arithmetic)h(op)s(erators)e(when)g(ev)-5 b(aluating)32 b(expressions.)41 b(All)150 568 y(of)28 b(these)g(arithmetic)h(op)s (erators)g(follo)m(w)g(normal)e(precedence)i(rules)e(and)g(w)m(ork)h (as)h(y)m(ou)f(w)m(ould)f(exp)s(ect)150 677 y(them)j(to.)275 822 y(The)24 b(follo)m(wing)j(example)e(uses)g(a)g(\014le)g(named)g(`)p Fz(grades)p FB(',)g(whic)m(h)g(con)m(tains)h(a)f(list)h(of)f(studen)m (t)g(names)150 932 y(as)31 b(w)m(ell)g(as)g(three)f(test)h(scores)g(p)s (er)f(studen)m(t)g(\(it's)h(a)g(small)g(class\):)390 1076 y Fz(Pat)142 b(100)47 b(97)g(58)390 1186 y(Sandy)94 b(84)47 b(72)g(93)390 1295 y(Chris)94 b(72)47 b(92)g(89)150 1440 y FB(This)30 b(programs)g(tak)m(es)h(the)g(\014le)f(`)p Fz(grades)p FB(')g(and)f(prin)m(ts)h(the)h(a)m(v)m(erage)i(of)d(the)h (scores:)390 1584 y Fz($)47 b(awk)g('{)h(sum)e(=)i($2)f(+)h($3)f(+)g ($4)g(;)h(avg)f(=)g(sum)g(/)h(3)390 1694 y(>)382 b(print)46 b($1,)h(avg)g(}')g(grades)410 1807 y Fy(a)533 1803 y Fz(Pat)g(85)410 1917 y Fy(a)533 1913 y Fz(Sandy)g(83)410 2026 y Fy(a)533 2022 y Fz(Chris)g(84.3333)275 2167 y FB(The)36 b(follo)m(wing)j(list)f(pro)m(vides)f(the)h(arithmetic)g(op)s (erators)f(in)g Fz(awk)p FB(,)i(in)e(order)f(from)h(the)h(highest)150 2276 y(precedence)31 b(to)g(the)g(lo)m(w)m(est:)150 2451 y Fz(-)f Fk(x)354 b FB(Negation.)150 2620 y Fz(+)30 b Fk(x)354 b FB(Unary)30 b(plus;)g(the)g(expression)g(is)h(con)m(v)m (erted)h(to)f(a)g(n)m(um)m(b)s(er.)150 2790 y Fk(x)41 b Fz(^)30 b Fk(y)150 2899 y(x)41 b Fz(**)29 b Fk(y)218 b FB(Exp)s(onen)m(tiation;)32 b Fx(x)37 b FB(raised)31 b(to)h(the)f Fx(y)38 b FB(p)s(o)m(w)m(er.)k(`)p Fz(2)31 b(^)f(3)p FB(')h(has)f(the)h(v)-5 b(alue)31 b(eigh)m(t;)i(the)e(c)m (har-)630 3009 y(acter)h(sequence)e(`)p Fz(**)p FB(')h(is)f(equiv)-5 b(alen)m(t)32 b(to)f(`)p Fz(^)p FB('.)150 3178 y Fk(x)41 b Fz(*)30 b Fk(y)265 b FB(Multiplication.)150 3347 y Fk(x)41 b Fz(/)30 b Fk(y)265 b FB(Division;)38 b(b)s(ecause)d(all)g(n)m (um)m(b)s(ers)e(in)h Fz(awk)g FB(are)h(\015oating-p)s(oin)m(t)h(n)m(um) m(b)s(ers,)f(the)f(result)h(is)630 3457 y Fw(not)g FB(rounded)24 b(to)i(an)g(in)m(teger|`)p Fz(3)32 b(/)e(4)p FB(')25 b(has)h(the)g(v)-5 b(alue)26 b(0.75.)40 b(\(It)27 b(is)e(a)h(common)g (mistak)m(e,)630 3567 y(esp)s(ecially)37 b(for)f(C)f(programmers,)i(to) f(forget)h(that)f Fw(al)5 b(l)46 b FB(n)m(um)m(b)s(ers)34 b(in)i Fz(awk)f FB(are)h(\015oating-)630 3676 y(p)s(oin)m(t,)i(and)e (that)h(division)f(of)h(in)m(teger-lo)s(oking)i(constan)m(ts)e(pro)s (duces)e(a)i(real)g(n)m(um)m(b)s(er,)630 3786 y(not)31 b(an)f(in)m(teger.\))150 3955 y Fk(x)41 b Fz(\045)30 b Fk(y)265 b FB(Remainder;)30 b(further)f(discussion)h(is)h(pro)m (vided)f(in)g(the)g(text,)i(just)e(after)h(this)f(list.)150 4125 y Fk(x)41 b Fz(+)30 b Fk(y)265 b FB(Addition.)150 4294 y Fk(x)41 b Fz(-)30 b Fk(y)265 b FB(Subtraction.)275 4468 y(Unary)32 b(plus)h(and)f(min)m(us)h(ha)m(v)m(e)i(the)e(same)h (precedence,)g(the)g(m)m(ultiplication)h(op)s(erators)f(all)g(ha)m(v)m (e)150 4578 y(the)d(same)f(precedence,)h(and)f(addition)h(and)f (subtraction)g(ha)m(v)m(e)i(the)e(same)h(precedence.)275 4722 y(When)39 b(computing)h(the)h(remainder)e(of)h Fk(x)h Fz(\045)30 b Fk(y)11 b FB(,)42 b(the)e(quotien)m(t)h(is)f(rounded)f(to) m(w)m(ard)h(zero)h(to)g(an)150 4832 y(in)m(teger)34 b(and)e(m)m (ultiplied)h(b)m(y)g Fx(y)p FB(.)47 b(This)32 b(result)h(is)f (subtracted)h(from)f Fx(x)6 b FB(;)34 b(this)f(op)s(eration)g(is)g (sometimes)150 4941 y(kno)m(wn)d(as)g(\\trunc-mo)s(d.")41 b(The)30 b(follo)m(wing)i(relation)f(alw)m(a)m(ys)h(holds:)390 5086 y Fz(b)47 b(*)h(int\(a)e(/)i(b\))f(+)g(\(a)h(\045)f(b\))g(==)g(a) 275 5230 y FB(One)32 b(p)s(ossibly)g(undesirable)g(e\013ect)i(of)f (this)g(de\014nition)g(of)g(remainder)f(is)h(that)g Fk(x)41 b Fz(\045)30 b Fk(y)43 b FB(is)33 b(negativ)m(e)150 5340 y(if)d Fx(x)37 b FB(is)30 b(negativ)m(e.)43 b(Th)m(us:)p eop end %%Page: 80 92 TeXDict begin 80 91 bop 150 -116 a FB(80)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(-17)47 b(\045)g(8)h(=)f(-1)275 437 y FB(In)54 b(other)h Fz(awk)f FB(implemen)m(tations,)63 b(the)55 b(signedness)f(of)i(the)f(remainder)f(ma)m(y)i(b)s(e)e(mac)m(hine-)150 547 y(dep)s(enden)m(t.)390 685 y Fr(NOTE:)37 b FB(The)g(POSIX)e (standard)h(only)h(sp)s(eci\014es)g(the)g(use)g(of)g(`)p Fz(^)p FB(')g(for)f(exp)s(onen)m(tiation.)390 794 y(F)-8 b(or)31 b(maxim)m(um)f(p)s(ortabilit)m(y)-8 b(,)32 b(do)f(not)f(use)g (the)h(`)p Fz(**)p FB(')f(op)s(erator.)150 1032 y FA(5.6)68 b(String)45 b(Concatenation)390 1191 y Fw(It)33 b(se)-5 b(eme)g(d)33 b(like)g(a)g(go)-5 b(o)g(d)34 b(ide)-5 b(a)34 b(at)f(the)g(time.)390 1301 y FB(Brian)e(Kernighan)275 1439 y(There)h(is)g(only)h(one)g(string)f(op)s(eration:)46 b(concatenation.)k(It)32 b(do)s(es)h(not)f(ha)m(v)m(e)i(a)f(sp)s (eci\014c)g(op)s(erator)150 1549 y(to)42 b(represen)m(t)f(it.)73 b(Instead,)43 b(concatenation)h(is)d(p)s(erformed)e(b)m(y)i(writing)g (expressions)g(next)g(to)h(one)150 1658 y(another,)31 b(with)f(no)g(op)s(erator.)41 b(F)-8 b(or)31 b(example:)390 1796 y Fz($)47 b(awk)g('{)h(print)e("Field)g(number)g(one:)h(")g($1)g (}')h(BBS-list)410 1910 y Fy(a)533 1906 y Fz(Field)f(number)f(one:)g (aardvark)410 2019 y Fy(a)533 2015 y Fz(Field)h(number)f(one:)g (alpo-net)390 2125 y(...)275 2263 y FB(Without)f(the)h(space)f(in)g (the)g(string)g(constan)m(t)i(after)e(the)h(`)p Fz(:)p FB(',)j(the)c(line)g(runs)f(together.)86 b(F)-8 b(or)150 2373 y(example:)390 2511 y Fz($)47 b(awk)g('{)h(print)e("Field)g (number)g(one:")g($1)i(}')f(BBS-list)410 2624 y Fy(a)533 2620 y Fz(Field)g(number)f(one:aardvark)410 2734 y Fy(a)533 2730 y Fz(Field)h(number)f(one:alpo-net)390 2839 y(...)275 2977 y FB(Because)39 b(string)e(concatenation)j(do)s(es)d(not)h(ha)m(v) m(e)h(an)f(explicit)h(op)s(erator,)h(it)e(is)f(often)i(necessary)150 3087 y(to)g(insure)f(that)h(it)g(happ)s(ens)d(at)j(the)g(righ)m(t)g (time)g(b)m(y)f(using)g(paren)m(theses)h(to)g(enclose)h(the)e(items)h (to)150 3197 y(concatenate.)78 b(F)-8 b(or)42 b(example,)k(the)c(follo) m(wing)h(co)s(de)f(fragmen)m(t)h(do)s(es)e(not)h(concatenate)j Fz(file)c FB(and)150 3306 y Fz(name)29 b FB(as)i(y)m(ou)g(migh)m(t)g (exp)s(ect:)390 3444 y Fz(file)47 b(=)g("file")390 3554 y(name)g(=)g("name")390 3663 y(print)f("something)f(meaningful")g(>)j (file)e(name)150 3801 y FB(It)30 b(is)h(necessary)g(to)g(use)f(the)g (follo)m(wing:)390 3940 y Fz(print)46 b("something)f(meaningful")g(>)j (\(file)e(name\))275 4078 y FB(P)m(aren)m(theses)29 b(should)e(b)s(e)g (used)h(around)f(concatenation)j(in)e(all)h(but)f(the)g(most)h(common)f (con)m(texts,)150 4187 y(suc)m(h)e(as)g(on)f(the)i(righ)m(thand)e(side) h(of)g(`)p Fz(=)p FB('.)39 b(Be)27 b(careful)f(ab)s(out)g(the)g(kinds)f (of)h(expressions)f(used)g(in)h(string)150 4297 y(concatenation.)47 b(In)31 b(particular,)h(the)g(order)f(of)g(ev)-5 b(aluation)34 b(of)d(expressions)g(used)g(for)g(concatenation)150 4406 y(is)f(unde\014ned)f(in)h(the)g Fz(awk)g FB(language.)42 b(Consider)29 b(this)i(example:)390 4544 y Fz(BEGIN)46 b({)581 4654 y(a)h(=)h("don't")581 4764 y(print)e(\(a)h(")h(")f(\(a)h (=)f("panic"\)\))390 4873 y(})150 5011 y FB(It)41 b(is)g(not)h (de\014ned)e(whether)g(the)h(assignmen)m(t)h(to)g Fz(a)f FB(happ)s(ens)e(b)s(efore)i(or)g(after)h(the)f(v)-5 b(alue)42 b(of)f Fz(a)g FB(is)150 5121 y(retriev)m(ed)34 b(for)e(pro)s(ducing)f (the)i(concatenated)i(v)-5 b(alue.)48 b(The)32 b(result)h(could)g(b)s (e)f(either)h(`)p Fz(don't)c(panic)p FB(',)150 5230 y(or)35 b(`)p Fz(panic)30 b(panic)p FB('.)54 b(The)35 b(precedence)h(of)f (concatenation,)40 b(when)34 b(mixed)h(with)g(other)h(op)s(erators,)h (is)150 5340 y(often)31 b(coun)m(ter-in)m(tuitiv)m(e.)43 b(Consider)30 b(this)g(example:)p eop end %%Page: 81 93 TeXDict begin 81 92 bop 2631 -116 a Fr(Chapter)30 b(5:)41 b(Expressions)90 b FB(81)390 299 y Fz($)47 b(awk)g('BEGIN)f({)i(print)e (-12)h(")h(")f(-24)g(}')410 412 y Fy(a)533 408 y Fz(-12-24)275 547 y FB(This)29 b(\\ob)m(viously")i(is)g(concatenating)h Fy(\000)p FB(12,)f(a)f(space,)h(and)f Fy(\000)p FB(24.)41 b(But)30 b(where)g(did)f(the)h(space)h(dis-)150 656 y(app)s(ear)24 b(to?)40 b(The)24 b(answ)m(er)h(lies)h(in)e(the)h(com)m(bination)i(of)e (op)s(erator)g(precedences)g(and)g Fz(awk)p FB('s)f(automatic)150 766 y(con)m(v)m(ersion)32 b(rules.)40 b(T)-8 b(o)31 b(get)g(the)g (desired)f(result,)g(write)h(the)f(program)h(in)f(the)g(follo)m(wing)i (manner:)390 904 y Fz($)47 b(awk)g('BEGIN)f({)i(print)e(-12)h(")h(")f (\(-24\))f(}')410 1017 y Fy(a)533 1013 y Fz(-12)h(-24)275 1151 y FB(This)29 b(forces)i Fz(awk)e FB(to)j(treat)f(the)g(`)p Fz(-)p FB(')f(on)g(the)h(`)p Fz(-24)p FB(')f(as)h(unary)-8 b(.)40 b(Otherwise,)30 b(it's)h(parsed)f(as)g(follo)m(ws:)511 1289 y Fy(\000)p FB(12)h(\()p Fz(")48 b(")30 b Fy(\000)g FB(24\))390 1393 y Fy(\))511 1399 y(\000)p FB(12)h(\(0)g Fy(\000)f FB(24\))390 1503 y Fy(\))511 1509 y(\000)p FB(12)h(\()p Fy(\000)p FB(24\))390 1612 y Fy(\))511 1618 y(\000)p FB(12)p Fy(\000)p FB(24)275 1756 y(As)h(men)m(tioned)g (earlier,)i(when)d(doing)i(concatenation,)i Fw(p)-5 b(ar)g(enthesize)p FB(.)48 b(Otherwise,)33 b(y)m(ou're)g(nev)m(er)150 1866 y(quite)e(sure)e(what)i(y)m(ou'll)g(get.)150 2104 y FA(5.7)68 b(Assignmen)l(t)46 b(Expressions)150 2263 y FB(An)33 b Fx(assignmen)m(t)j FB(is)e(an)f(expression)g(that)h(stores)g(a)g (\(usually)f(di\013eren)m(t\))i(v)-5 b(alue)33 b(in)m(to)i(a)f(v)-5 b(ariable.)50 b(F)-8 b(or)150 2373 y(example,)31 b(let's)h(assign)e (the)h(v)-5 b(alue)31 b(one)g(to)g(the)f(v)-5 b(ariable)31 b Fz(z)p FB(:)390 2511 y Fz(z)47 b(=)h(1)275 2649 y FB(After)32 b(this)g(expression)f(is)h(executed,)i(the)e(v)-5 b(ariable)32 b Fz(z)g FB(has)g(the)g(v)-5 b(alue)32 b(one.)46 b(Whatev)m(er)33 b(old)f(v)-5 b(alue)150 2758 y Fz(z)30 b FB(had)g(b)s(efore)g(the)g (assignmen)m(t)i(is)e(forgotten.)275 2896 y(Assignmen)m(ts)38 b(can)g(also)h(store)f(string)g(v)-5 b(alues.)64 b(F)-8 b(or)39 b(example,)h(the)f(follo)m(wing)g(stores)f(the)g(v)-5 b(alue)150 3006 y Fz("this)29 b(food)g(is)h(good")f FB(in)h(the)g(v)-5 b(ariable)32 b Fz(message)p FB(:)390 3144 y Fz(thing)46 b(=)i("food")390 3254 y(predicate)d(=)j("good")390 3363 y(message)e(=)h("this)g(")g(thing)f(")i(is)f(")h(predicate)150 3501 y FB(This)29 b(also)j(illustrates)f(string)f(concatenation.)43 b(The)30 b(`)p Fz(=)p FB(')h(sign)f(is)g(called)i(an)e Fx(assignmen)m(t)h(op)s(erator)p FB(.)41 b(It)150 3611 y(is)36 b(the)g(simplest)g(assignmen)m(t)h(op)s(erator)f(b)s(ecause)g (the)g(v)-5 b(alue)36 b(of)h(the)f(righ)m(thand)f(op)s(erand)g(is)h (stored)150 3720 y(unc)m(hanged.)79 b(Most)44 b(op)s(erators)g (\(addition,)j(concatenation,)i(and)43 b(so)g(on\))h(ha)m(v)m(e)g(no)f (e\013ect)i(except)150 3830 y(to)c(compute)g(a)g(v)-5 b(alue.)72 b(If)40 b(the)h(v)-5 b(alue)41 b(isn't)g(used,)i(there's)e (no)f(reason)h(to)g(use)g(the)g(op)s(erator.)71 b(An)150 3940 y(assignmen)m(t)42 b(op)s(erator)f(is)g(di\013eren)m(t;)46 b(it)c(do)s(es)e(pro)s(duce)g(a)h(v)-5 b(alue,)44 b(but)d(ev)m(en)g(if) g(y)m(ou)g(ignore)g(it,)k(the)150 4049 y(assignmen)m(t)33 b(still)f(mak)m(es)h(itself)f(felt)h(through)e(the)g(alteration)j(of)e (the)g(v)-5 b(ariable.)45 b(W)-8 b(e)33 b(call)g(this)f(a)g Fx(side)150 4159 y(e\013ect)p FB(.)275 4297 y(The)21 b(lefthand)h(op)s(erand)e(of)i(an)g(assignmen)m(t)h(need)f(not)g(b)s(e) f(a)h(v)-5 b(ariable)23 b(\(see)g(Section)g(5.3)g([V)-8 b(ariables],)150 4406 y(page)28 b(76\);)i(it)e(can)g(also)g(b)s(e)f(a)h (\014eld)f(\(see)h(Section)g(3.4)h([Changing)e(the)h(Con)m(ten)m(ts)g (of)g(a)f(Field],)j(page)e(41\))150 4516 y(or)h(an)h(arra)m(y)g(elemen) m(t)h(\(see)f(Chapter)f(7)h([Arra)m(ys)f(in)h Fz(awk)p FB(],)f(page)h(116\).)42 b(These)29 b(are)h(all)g(called)h Fx(lv)-5 b(alues)p FB(,)150 4626 y(whic)m(h)22 b(means)h(they)f(can)h (app)s(ear)f(on)g(the)h(lefthand)f(side)h(of)f(an)h(assignmen)m(t)g(op) s(erator.)38 b(The)22 b(righ)m(thand)150 4735 y(op)s(erand)35 b(ma)m(y)i(b)s(e)f(an)m(y)g(expression;)j(it)e(pro)s(duces)e(the)i(new) e(v)-5 b(alue)37 b(that)g(the)f(assignmen)m(t)i(stores)e(in)150 4845 y(the)31 b(sp)s(eci\014ed)e(v)-5 b(ariable,)32 b(\014eld,)e(or)g (arra)m(y)h(elemen)m(t.)42 b(\(Suc)m(h)30 b(v)-5 b(alues)31 b(are)g(called)g Fx(rv)-5 b(alues)p FB(.\))275 4983 y(It)34 b(is)g(imp)s(ortan)m(t)g(to)h(note)g(that)g(v)-5 b(ariables)35 b(do)f Fw(not)43 b FB(ha)m(v)m(e)36 b(p)s(ermanen)m(t)d(t)m(yp)s(es.)52 b(A)35 b(v)-5 b(ariable's)35 b(t)m(yp)s(e)150 5092 y(is)g(simply)g(the) h(t)m(yp)s(e)g(of)f(whatev)m(er)h(v)-5 b(alue)36 b(it)g(happ)s(ens)e (to)i(hold)f(at)h(the)g(momen)m(t.)56 b(In)35 b(the)g(follo)m(wing)150 5202 y(program)26 b(fragmen)m(t,)i(the)e(v)-5 b(ariable)27 b Fz(foo)e FB(has)h(a)g(n)m(umeric)g(v)-5 b(alue)27 b(at)g(\014rst,)f (and)g(a)g(string)g(v)-5 b(alue)27 b(later)g(on:)390 5340 y Fz(foo)47 b(=)g(1)p eop end %%Page: 82 94 TeXDict begin 82 93 bop 150 -116 a FB(82)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(print)46 b(foo)390 408 y(foo)h(=)g("bar")390 518 y(print)f(foo)150 657 y FB(When)40 b(the)g(second)g(assignmen)m(t)g (giv)m(es)i Fz(foo)d FB(a)h(string)g(v)-5 b(alue,)43 b(the)d(fact)h(that)f(it)h(previously)e(had)h(a)150 766 y(n)m(umeric)30 b(v)-5 b(alue)31 b(is)f(forgotten.)275 905 y(String)23 b(v)-5 b(alues)24 b(that)g(do)f(not)h(b)s(egin)f(with)g (a)h(digit)h(ha)m(v)m(e)g(a)e(n)m(umeric)h(v)-5 b(alue)24 b(of)g(zero.)39 b(After)24 b(executing)150 1015 y(the)31 b(follo)m(wing)g(co)s(de,)g(the)g(v)-5 b(alue)31 b(of)f Fz(foo)g FB(is)g(\014v)m(e:)390 1154 y Fz(foo)47 b(=)g("a)h(string")390 1263 y(foo)f(=)g(foo)g(+)h(5)390 1402 y Fr(NOTE:)24 b FB(Using)h(a)f(v)-5 b(ariable)25 b(as)g(a)f(n)m(um)m(b)s(er)f(and)h (then)g(later)h(as)f(a)h(string)f(can)h(b)s(e)e(confusing)390 1512 y(and)30 b(is)g(p)s(o)s(or)g(programming)g(st)m(yle.)42 b(The)30 b(previous)g(t)m(w)m(o)i(examples)f(illustrate)g(ho)m(w)g Fz(awk)390 1621 y FB(w)m(orks,)g Fw(not)39 b FB(ho)m(w)31 b(y)m(ou)f(should)g(write)g(y)m(our)h(programs!)275 1760 y(An)23 b(assignmen)m(t)i(is)g(an)f(expression,)h(so)g(it)g(has)f(a)g (v)-5 b(alue|the)25 b(same)g(v)-5 b(alue)25 b(that)g(is)f(assigned.)39 b(Th)m(us,)150 1870 y(`)p Fz(z)30 b(=)g(1)p FB(')j(is)g(an)g (expression)f(with)h(the)g(v)-5 b(alue)33 b(one.)48 b(One)33 b(consequence)g(of)g(this)g(is)g(that)g(y)m(ou)h(can)f(write)150 1979 y(m)m(ultiple)e(assignmen)m(ts)g(together,)h(suc)m(h)e(as:)390 2118 y Fz(x)47 b(=)h(y)f(=)h(z)f(=)h(5)150 2257 y FB(This)34 b(example)i(stores)f(the)g(v)-5 b(alue)36 b(\014v)m(e)f(in)g(all)g (three)g(v)-5 b(ariables)36 b(\()p Fz(x)p FB(,)g Fz(y)p FB(,)g(and)f Fz(z)p FB(\).)54 b(It)35 b(do)s(es)g(so)g(b)s(ecause)150 2366 y(the)28 b(v)-5 b(alue)29 b(of)f(`)p Fz(z)i(=)g(5)p FB(',)f(whic)m(h)e(is)i(\014v)m(e,)g(is)f(stored)g(in)m(to)h Fz(y)e FB(and)h(then)f(the)i(v)-5 b(alue)28 b(of)g(`)p Fz(y)i(=)g(z)h(=)f(5)p FB(',)e(whic)m(h)g(is)150 2476 y(\014v)m(e,)j(is)f(stored)h(in)m(to)g Fz(x)p FB(.)275 2615 y(Assignmen)m(ts)g(ma)m(y)h(b)s(e)e(used)h(an)m(ywhere)g(an)g (expression)f(is)i(called)g(for.)43 b(F)-8 b(or)32 b(example,)g(it)f (is)h(v)-5 b(alid)150 2724 y(to)33 b(write)f(`)p Fz(x)e(!=)g(\(y)g(=)g (1\))p FB(')i(to)g(set)h Fz(y)f FB(to)h(one,)g(and)e(then)h(test)h (whether)e Fz(x)h FB(equals)g(one.)46 b(But)33 b(this)f(st)m(yle)150 2834 y(tends)23 b(to)h(mak)m(e)h(programs)e(hard)g(to)h(read;)i(suc)m (h)d(nesting)h(of)g(assignmen)m(ts)g(should)e(b)s(e)h(a)m(v)m(oided,)k (except)150 2944 y(p)s(erhaps)i(in)h(a)g(one-shot)i(program.)275 3082 y(Aside)c(from)f(`)p Fz(=)p FB(',)i(there)f(are)g(sev)m(eral)i (other)e(assignmen)m(t)h(op)s(erators)f(that)g(do)g(arithmetic)h(with)f (the)150 3192 y(old)33 b(v)-5 b(alue)33 b(of)f(the)h(v)-5 b(ariable.)48 b(F)-8 b(or)33 b(example,)h(the)f(op)s(erator)g(`)p Fz(+=)p FB(')f(computes)h(a)g(new)f(v)-5 b(alue)33 b(b)m(y)f(adding)150 3302 y(the)i(righ)m(thand)f(v)-5 b(alue)34 b(to)h(the)f(old)g(v)-5 b(alue)34 b(of)g(the)g(v)-5 b(ariable.)51 b(Th)m(us,)34 b(the)g(follo)m(wing)h(assignmen)m(t)g(adds)150 3411 y(\014v)m(e)c(to)g(the)f(v)-5 b(alue)31 b(of)g Fz(foo)p FB(:)390 3550 y Fz(foo)47 b(+=)g(5)150 3689 y FB(This)30 b(is)g(equiv)-5 b(alen)m(t)32 b(to)f(the)f(follo)m(wing:)390 3828 y Fz(foo)47 b(=)g(foo)g(+)h(5)150 3966 y FB(Use)31 b(whic)m(hev)m(er)g(mak)m(es)g(the)g(meaning)f(of)h(y)m(our)f(program)g (clearer.)275 4105 y(There)j(are)i(situations)g(where)f(using)g(`)p Fz(+=)p FB(')g(\(or)h(an)m(y)g(assignmen)m(t)g(op)s(erator\))g(is)g Fw(not)43 b FB(the)35 b(same)g(as)150 4215 y(simply)30 b(rep)s(eating)h(the)f(lefthand)g(op)s(erand)g(in)g(the)g(righ)m(thand) g(expression.)41 b(F)-8 b(or)31 b(example:)390 4354 y Fz(#)47 b(Thanks)g(to)g(Pat)g(Rankin)f(for)h(this)f(example)390 4463 y(BEGIN)94 b({)581 4573 y(foo[rand\(\)])45 b(+=)i(5)581 4682 y(for)g(\(x)g(in)g(foo\))724 4792 y(print)f(x,)i(foo[x])581 5011 y(bar[rand\(\)])d(=)i(bar[rand\(\)])e(+)i(5)581 5121 y(for)g(\(x)g(in)g(bar\))724 5230 y(print)f(x,)i(bar[x])390 5340 y(})p eop end %%Page: 83 95 TeXDict begin 83 94 bop 2631 -116 a Fr(Chapter)30 b(5:)41 b(Expressions)90 b FB(83)150 299 y(The)26 b(indices)h(of)g Fz(bar)e FB(are)i(practically)i(guaran)m(teed)f(to)f(b)s(e)f (di\013eren)m(t,)i(b)s(ecause)f Fz(rand)e FB(returns)g(di\013eren)m(t) 150 408 y(v)-5 b(alues)32 b(eac)m(h)g(time)h(it)f(is)f(called.)45 b(\(Arra)m(ys)32 b(and)f(the)h Fz(rand)e FB(function)h(ha)m(v)m(en't)i (b)s(een)e(co)m(v)m(ered)i(y)m(et.)45 b(See)150 518 y(Chapter)22 b(7)g([Arra)m(ys)h(in)f Fz(awk)p FB(],)h(page)g(116,)j(and)21 b(see)i(Section)g(8.1.2)h([Numeric)f(F)-8 b(unctions],)25 b(page)e(127,)i(for)150 628 y(more)i(information\).)40 b(This)26 b(example)h(illustrates)g(an)g(imp)s(ortan)m(t)f(fact)i(ab)s (out)e(assignmen)m(t)i(op)s(erators:)150 737 y(the)k(lefthand)f (expression)g(is)h(only)f(ev)-5 b(aluated)33 b Fw(onc)-5 b(e)p FB(.)45 b(It)31 b(is)h(up)e(to)i(the)g(implemen)m(tation)h(as)f (to)g(whic)m(h)150 847 y(expression)e(is)h(ev)-5 b(aluated)31 b(\014rst,)f(the)h(lefthand)f(or)g(the)h(righ)m(thand.)40 b(Consider)29 b(this)i(example:)390 981 y Fz(i)47 b(=)h(1)390 1090 y(a[i)f(+=)g(2])g(=)h(i)f(+)h(1)150 1224 y FB(The)30 b(v)-5 b(alue)31 b(of)f Fz(a[3])f FB(could)i(b)s(e)f(either)g(t)m(w)m (o)i(or)f(four.)275 1358 y(T)-8 b(able)27 b(5.1)h(lists)f(the)g (arithmetic)g(assignmen)m(t)h(op)s(erators.)40 b(In)25 b(eac)m(h)j(case,)h(the)e(righ)m(thand)f(op)s(erand)150 1468 y(is)k(an)h(expression)f(whose)g(v)-5 b(alue)31 b(is)f(con)m(v)m(erted)i(to)f(a)g(n)m(um)m(b)s(er.)150 1815 y Fr(Op)s(erator)814 b(E\013ect)150 1924 y Fx(lv)-5 b(alue)36 b Fz(+=)30 b Fx(incremen)m(t)398 b FB(Adds)29 b Fx(incremen)m(t)k FB(to)e(the)g(v)-5 b(alue)30 b(of)h Fx(lv)-5 b(alue)p FB(.)150 2034 y Fx(lv)g(alue)36 b Fz(-=)30 b Fx(decremen)m(t)383 b FB(Subtracts)29 b Fx(decremen)m(t)34 b FB(from)29 b(the)i(v)-5 b(alue)31 b(of)f Fx(lv)-5 b(alue)p FB(.)150 2143 y Fx(lv)g(alue)36 b Fz(*=)30 b Fx(co)s(e\016cien)m(t)397 b FB(Multiplies)31 b(the)f(v)-5 b(alue)31 b(of)g Fx(lv)-5 b(alue)36 b FB(b)m(y)30 b Fx(co)s(e\016cien)m(t)p FB(.)150 2253 y Fx(lv)-5 b(alue)36 b Fz(/=)30 b Fx(divisor)523 b FB(Divides)31 b(the)f(v)-5 b(alue)31 b(of)g Fx(lv)-5 b(alue)36 b FB(b)m(y)30 b Fx(divisor)p FB(.)150 2363 y Fx(lv)-5 b(alue)36 b Fz(\045=)30 b Fx(mo)s(dulus)451 b FB(Sets)30 b Fx(lv)-5 b(alue)36 b FB(to)31 b(its)g(remainder)f(b)m(y) g Fx(mo)s(dulus)p FB(.)150 2472 y Fx(lv)-5 b(alue)36 b Fz(^=)30 b Fx(p)s(o)m(w)m(er)150 2582 y(lv)-5 b(alue)36 b Fz(**=)30 b Fx(p)s(o)m(w)m(er)506 b FB(Raises)31 b Fx(lv)-5 b(alue)36 b FB(to)31 b(the)g(p)s(o)m(w)m(er)f Fx(p)s(o)m(w)m(er)p FB(.)275 2729 y(T)-8 b(able)31 b(5.1:)41 b(Arithmetic)32 b(Assignmen)m(t)f(Op)s(erators)390 2868 y Fr(NOTE:)24 b FB(Only)f(the)h(`)p Fz(^=)p FB(')g(op)s(erator)g(is)g (sp)s(eci\014ed)f(b)m(y)g(POSIX.)g(F)-8 b(or)25 b(maxim)m(um)e(p)s (ortabilit)m(y)-8 b(,)390 2978 y(do)30 b(not)h(use)f(the)h(`)p Fz(**=)p FB(')f(op)s(erator.)150 3155 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b(Syn)m(tactic)39 b(Am)m(biguities)j(Bet)m(w)m(een)e(`)p Fh(/=)p Fj(')h(and)g(Regular)150 3280 y(Expressions)150 3427 y FB(There)30 b(is)g(a)h(syn)m(tactic)i(am)m(biguit)m(y)e(b)s(et)m (w)m(een)g(the)g(`)p Fz(/=)p FB(')f(assignmen)m(t)i(op)s(erator)e(and)g (regexp)h(constan)m(ts)150 3536 y(whose)40 b(\014rst)g(c)m(haracter)h (is)g(an)f(`)p Fz(=)p FB('.)141 b(This)39 b(is)h(most)h(notable)g(in)f (commercial)i Fz(awk)d FB(v)m(ersions.)71 b(F)-8 b(or)237 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 3646 a(example:)390 3780 y Fz($)47 b(awk)g(/==/)g (/dev/null)p 410 3832 217 5 v 410 3912 5 81 v 433 3892 a Fl(erro)m(r)p 622 3912 V 410 3917 217 5 v 724 3889 a Fz(awk:)g(syntax)f(error)g(at)h(source)f(line)h(1)p 410 3942 V 410 4022 5 81 v 433 4002 a Fl(erro)m(r)p 622 4022 V 410 4026 217 5 v 772 3999 a Fz(context)f(is)p 410 4051 V 410 4131 5 81 v 433 4112 a Fl(erro)m(r)p 622 4131 V 410 4136 217 5 v 1106 4109 a Fz(>>>)h(/=)g(<<<)p 410 4161 V 410 4241 5 81 v 433 4221 a Fl(erro)m(r)p 622 4241 V 410 4246 217 5 v 724 4218 a Fz(awk:)g(bailing)f(out)g(at)i (source)e(line)g(1)150 4352 y FB(A)30 b(w)m(ork)-5 b(around)30 b(is:)390 4486 y Fz(awk)47 b('/[=]=/')e(/dev/null)275 4620 y(gawk)28 b FB(do)s(es)i(not)g(ha)m(v)m(e)i(this)e(problem,)f(nor) h(do)g(the)g(other)g(freely)h(a)m(v)-5 b(ailable)32 b(v)m(ersions)e (describ)s(ed)f(in)150 4730 y(Section)i(B.6)h([Other)e(F)-8 b(reely)31 b(Av)-5 b(ailable)32 b Fz(awk)e FB(Implemen)m(tations],)i (page)f(277.)150 4961 y FA(5.8)68 b(Incremen)l(t)46 b(and)e(Decremen)l (t)i(Op)t(erators)150 5121 y Fx(Incremen)m(t)31 b FB(and)c Fx(decremen)m(t)j(op)s(erators)i FB(increase)d(or)g(decrease)g(the)g(v) -5 b(alue)29 b(of)f(a)h(v)-5 b(ariable)30 b(b)m(y)e(one.)40 b(An)150 5230 y(assignmen)m(t)d(op)s(erator)g(can)f(do)g(the)h(same)f (thing,)i(so)f(the)f(incremen)m(t)h(op)s(erators)f(add)g(no)g(p)s(o)m (w)m(er)g(to)150 5340 y(the)29 b Fz(awk)f FB(language;)j(ho)m(w)m(ev)m (er,)f(they)f(are)g(con)m(v)m(enien)m(t)i(abbreviations)e(for)f(v)m (ery)h(common)g(op)s(erations.)p eop end %%Page: 84 96 TeXDict begin 84 95 bop 150 -116 a FB(84)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(The)e(op)s(erator)h(used)e(for)i(adding)f(one)h(is)f(written)h (`)p Fz(++)p FB('.)40 b(It)29 b(can)g(b)s(e)f(used)g(to)h(incremen)m(t) g(a)g(v)-5 b(ariable)150 408 y(either)27 b(b)s(efore)g(or)f(after)i (taking)f(its)g(v)-5 b(alue.)40 b(T)-8 b(o)28 b(pre-incremen)m(t)f(a)g (v)-5 b(ariable)27 b Fz(v)p FB(,)h(write)f(`)p Fz(++v)p FB('.)39 b(This)26 b(adds)150 518 y(one)31 b(to)h(the)f(v)-5 b(alue)32 b(of)f Fz(v)p FB(|that)g(new)g(v)-5 b(alue)31 b(is)g(also)h(the)f(v)-5 b(alue)32 b(of)f(the)g(expression.)42 b(\(The)31 b(assignmen)m(t)150 628 y(expression)36 b(`)p Fz(v)30 b(+=)g(1)p FB(')36 b(is)h(completely)h(equiv)-5 b(alen)m(t.\))60 b(W)-8 b(riting)38 b(the)e(`)p Fz(++)p FB(')h(after)g(the)f(v)-5 b(ariable)37 b(sp)s(eci\014es)150 737 y(p)s(ost-incremen)m(t.)k(This)27 b(incremen)m(ts)i(the)g(v)-5 b(ariable)29 b(v)-5 b(alue)29 b(just)f(the)h(same;)h(the)e (di\013erence)h(is)g(that)g(the)150 847 y(v)-5 b(alue)25 b(of)g(the)g(incremen)m(t)g(expression)f(itself)i(is)e(the)h(v)-5 b(ariable's)26 b Fw(old)35 b FB(v)-5 b(alue.)39 b(Th)m(us,)25 b(if)g Fz(foo)e FB(has)i(the)f(v)-5 b(alue)150 956 y(four,)28 b(then)g(the)g(expression)g(`)p Fz(foo++)p FB(')f(has)g(the)i(v)-5 b(alue)28 b(four,)g(but)f(it)i(c)m(hanges)g(the)f(v)-5 b(alue)28 b(of)h Fz(foo)e FB(to)h(\014v)m(e.)150 1066 y(In)k(other)g(w)m(ords,)h(the)g(op)s(erator)f(returns)f(the)i(old)g(v) -5 b(alue)33 b(of)f(the)h(v)-5 b(ariable,)34 b(but)d(with)h(the)h(side) f(e\013ect)150 1176 y(of)f(incremen)m(ting)g(it.)275 1312 y(The)39 b(p)s(ost-incremen)m(t)i(`)p Fz(foo++)p FB(')e(is)h(nearly)g(the)g(same)h(as)f(writing)g(`)p Fz(\(foo)29 b(+=)h(1\))g(-)g(1)p FB('.)69 b(It)41 b(is)f(not)150 1421 y(p)s(erfectly)34 b(equiv)-5 b(alen)m(t)36 b(b)s(ecause)e(all)h(n) m(um)m(b)s(ers)e(in)h Fz(awk)f FB(are)i(\015oating-p)s(oin)m(t|in)g (\015oating-p)s(oin)m(t,)i(`)p Fz(foo)150 1531 y(+)30 b(1)g(-)g(1)p FB(')e(do)s(es)g(not)h(necessarily)g(equal)g Fz(foo)p FB(.)39 b(But)28 b(the)h(di\013erence)f(is)h(min)m(ute)f(as)h (long)g(as)f(y)m(ou)h(stic)m(k)g(to)150 1641 y(n)m(um)m(b)s(ers)g(that) i(are)g(fairly)f(small)h(\(less)g(than)f(10e12\).)275 1777 y(Fields)j(and)g(arra)m(y)h(elemen)m(ts)h(are)f(incremen)m(ted)g (just)f(lik)m(e)h(v)-5 b(ariables.)51 b(\(Use)34 b(`)p Fz($\(i++\))p FB(')e(when)h(y)m(ou)150 1886 y(w)m(an)m(t)j(to)h(do)e(a) h(\014eld)f(reference)h(and)f(a)h(v)-5 b(ariable)36 b(incremen)m(t)g (at)g(the)g(same)g(time.)57 b(The)35 b(paren)m(theses)150 1996 y(are)c(necessary)g(b)s(ecause)f(of)g(the)h(precedence)g(of)f(the) h(\014eld)f(reference)h(op)s(erator)f(`)p Fz($)p FB('.\))275 2132 y(The)36 b(decremen)m(t)h(op)s(erator)g(`)p Fz(--)p FB(')g(w)m(orks)f(just)h(lik)m(e)h(`)p Fz(++)p FB(',)g(except)g(that)f (it)g(subtracts)g(one)g(instead)150 2242 y(of)c(adding)f(it.)49 b(As)32 b(with)h(`)p Fz(++)p FB(',)g(it)g(can)g(b)s(e)g(used)e(b)s (efore)i(the)g(lv)-5 b(alue)33 b(to)h(pre-decremen)m(t)f(or)g(after)g (it)g(to)150 2351 y(p)s(ost-decremen)m(t.)41 b(F)-8 b(ollo)m(wing)33 b(is)e(a)f(summary)g(of)g(incremen)m(t)h(and)f(decremen)m(t)h (expressions:)150 2513 y Fz(++)p Fk(lvalue)96 b FB(This)29 b(expression)h(incremen)m(ts)g Fx(lv)-5 b(alue)p FB(,)31 b(and)e(the)h(new)f(v)-5 b(alue)30 b(b)s(ecomes)h(the)f(v)-5 b(alue)30 b(of)g(the)630 2623 y(expression.)150 2784 y Fk(lvalue)11 b Fz(++)85 b FB(This)39 b(expression)g(incremen)m(ts)h Fx(lv)-5 b(alue)p FB(,)42 b(but)d(the)h(v)-5 b(alue)39 b(of)h(the)g(expression)f(is)g(the)h Fw(old)630 2893 y FB(v)-5 b(alue)31 b(of)f Fx(lv)-5 b(alue)p FB(.)150 3054 y Fz(--)p Fk(lvalue)96 b FB(This)25 b(expression)h(is)g(lik)m(e)i (`)p Fz(++)p Fk(lvalue)11 b FB(',)25 b(but)g(instead)h(of)h(adding,)f (it)h(subtracts.)39 b(It)26 b(decre-)630 3164 y(men)m(ts)31 b Fx(lv)-5 b(alue)36 b FB(and)30 b(deliv)m(ers)h(the)f(v)-5 b(alue)31 b(that)g(is)f(the)h(result.)150 3325 y Fk(lvalue)p Fz(--)96 b FB(This)25 b(expression)h(is)g(lik)m(e)i(`)p Fk(lvalue)11 b Fz(++)p FB(',)25 b(but)g(instead)h(of)h(adding,)f(it)h (subtracts.)39 b(It)26 b(decre-)630 3435 y(men)m(ts)31 b Fx(lv)-5 b(alue)p FB(.)41 b(The)30 b(v)-5 b(alue)31 b(of)f(the)h(expression)f(is)g(the)h Fw(old)41 b FB(v)-5 b(alue)31 b(of)f Fx(lv)-5 b(alue)p FB(.)150 3636 y Fj(Adv)e(anced)40 b(Notes:)62 b(Op)s(erator)42 b(Ev)-7 b(aluation)40 b(Order)390 3782 y Fw(Do)-5 b(ctor,)34 b(do)-5 b(ctor!)43 b(It)33 b(hurts)h(when)f(I)g(do)g(this!)390 3892 y(So)g(don)-9 b('t)33 b(do)h(that!)390 4002 y FB(Grouc)m(ho)d(Marx)150 4138 y(What)g(happ)s(ens)e(for)h(something)h(lik)m(e)g(the)g(follo)m (wing?)390 4274 y Fz(b)47 b(=)h(6)390 4384 y(print)e(b)i(+=)f(b++)150 4520 y FB(Or)30 b(something)g(ev)m(en)i(stranger?)390 4656 y Fz(b)47 b(=)h(6)390 4765 y(b)f(+=)h(++b)f(+)g(b++)390 4875 y(print)f(b)275 5011 y FB(In)41 b(other)h(w)m(ords,)j(when)d(do)g (the)g(v)-5 b(arious)42 b(side)h(e\013ects)g(prescrib)s(ed)e(b)m(y)h (the)g(p)s(ost\014x)g(op)s(erators)150 5121 y(\(`)p Fz(b++)p FB('\))29 b(tak)m(e)i(e\013ect?)41 b(When)29 b(side)g(e\013ects)i(happ) s(en)c(is)i Fx(implemen)m(tation)i(de\014ned)p FB(.)39 b(In)28 b(other)h(w)m(ords,)g(it)150 5230 y(is)e(up)f(to)i(the)g (particular)f(v)m(ersion)h(of)f Fz(awk)p FB(.)39 b(The)27 b(result)g(for)g(the)h(\014rst)e(example)i(ma)m(y)g(b)s(e)e(12)i(or)g (13,)h(and)150 5340 y(for)h(the)h(second,)f(it)h(ma)m(y)g(b)s(e)f(22)h (or)g(23.)p eop end %%Page: 85 97 TeXDict begin 85 96 bop 2631 -116 a Fr(Chapter)30 b(5:)41 b(Expressions)90 b FB(85)275 299 y(In)26 b(short,)i(doing)f(things)h (lik)m(e)g(this)f(is)h(not)f(recommended)g(and)g(de\014nitely)g(not)h (an)m(ything)g(that)g(y)m(ou)150 408 y(can)j(rely)f(up)s(on)f(for)h(p)s (ortabilit)m(y)-8 b(.)42 b(Y)-8 b(ou)31 b(should)e(a)m(v)m(oid)j(suc)m (h)e(things)h(in)f(y)m(our)g(o)m(wn)g(programs.)150 646 y FA(5.9)68 b(T)-11 b(rue)44 b(and)h(F)-11 b(alse)45 b(in)g Fq(awk)150 805 y FB(Man)m(y)31 b(programming)e(languages)j(ha)m (v)m(e)f(a)f(sp)s(ecial)h(represen)m(tation)g(for)f(the)g(concepts)h (of)f(\\true")h(and)150 915 y(\\false.")42 b(Suc)m(h)28 b(languages)i(usually)e(use)g(the)h(sp)s(ecial)g(constan)m(ts)h Fz(true)e FB(and)g Fz(false)p FB(,)f(or)i(p)s(erhaps)e(their)150 1024 y(upp)s(ercase)k(equiv)-5 b(alen)m(ts.)46 b(Ho)m(w)m(ev)m(er,)34 b Fz(awk)d FB(is)h(di\013eren)m(t.)45 b(It)32 b(b)s(orro)m(ws)f(a)h(v)m (ery)g(simple)g(concept)g(of)g(true)150 1134 y(and)d(false)h(from)f(C.) g(In)g Fz(awk)p FB(,)g(an)m(y)h(nonzero)g(n)m(umeric)f(v)-5 b(alue)30 b Fw(or)40 b FB(an)m(y)30 b(nonempt)m(y)f(string)g(v)-5 b(alue)30 b(is)g(true.)150 1243 y(An)m(y)22 b(other)f(v)-5 b(alue)23 b(\(zero)f(or)g(the)g(n)m(ull)f(string)h Fz("")p FB(\))f(is)h(false.)38 b(The)21 b(follo)m(wing)i(program)f(prin)m(ts)f (`)p Fz(A)30 b(strange)150 1353 y(truth)f(value)p FB(')g(three)i (times:)390 1491 y Fz(BEGIN)46 b({)533 1600 y(if)h(\(3.1415927\))724 1710 y(print)f("A)i(strange)d(truth)i(value")533 1819 y(if)g(\("Four)f(Score)h(And)g(Seven)f(Years)g(Ago"\))724 1929 y(print)g("A)i(strange)d(truth)i(value")533 2039 y(if)g(\(j)h(=)f(57\))724 2148 y(print)f("A)i(strange)d(truth)i(value") 390 2258 y(})275 2396 y FB(There)28 b(is)i(a)f(surprising)f (consequence)i(of)f(the)h(\\nonzero)g(or)f(non-n)m(ull")g(rule:)40 b(the)29 b(string)h(constan)m(t)150 2505 y Fz("0")f FB(is)i(actually)h (true,)e(b)s(ecause)h(it)g(is)f(non-n)m(ull.)2138 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 2742 a FA(5.10)68 b(V)-11 b(ariable)46 b(T)l(yping)f(and)f(Comparison)i(Expressions)390 2902 y Fw(The)33 b(Guide)g(is)f(de\014nitive.)42 b(R)-5 b(e)g(ality)34 b(is)f(fr)-5 b(e)g(quently)33 b(inac)-5 b(cur)g(ate.)390 3011 y FB(The)30 b(Hitc)m(hhik)m(er's)i(Guide)e(to)h(the)g(Galaxy)275 3149 y(Unlik)m(e)k(other)f(programming)g(languages,)i Fz(awk)d FB(v)-5 b(ariables)35 b(do)f(not)g(ha)m(v)m(e)h(a)g(\014xed)e (t)m(yp)s(e.)52 b(Instead,)150 3259 y(they)26 b(can)g(b)s(e)g(either)g (a)g(n)m(um)m(b)s(er)f(or)h(a)g(string,)h(dep)s(ending)e(up)s(on)f(the) i(v)-5 b(alue)26 b(that)h(is)f(assigned)g(to)h(them.)275 3396 y(The)e(1992)j(POSIX)d(standard)g(in)m(tro)s(duced)h(the)g (concept)h(of)f(a)h Fx(n)m(umeric)f(string)p FB(,)h(whic)m(h)f(is)g (simply)g(a)150 3506 y(string)31 b(that)h(lo)s(oks)g(lik)m(e)h(a)f(n)m (um)m(b)s(er|for)e(example,)i Fz(")f(+2")o FB(.)44 b(This)30 b(concept)j(is)e(used)g(for)g(determining)150 3615 y(the)41 b(t)m(yp)s(e)g(of)h(a)f(v)-5 b(ariable.)73 b(The)41 b(t)m(yp)s(e)g(of)g (the)g(v)-5 b(ariable)42 b(is)f(imp)s(ortan)m(t)g(b)s(ecause)g(the)g(t) m(yp)s(es)g(of)h(t)m(w)m(o)150 3725 y(v)-5 b(ariables)31 b(determine)g(ho)m(w)f(they)g(are)h(compared.)41 b(In)30 b Fz(gawk)p FB(,)f(v)-5 b(ariable)31 b(t)m(yping)g(follo)m(ws)h(these)e (rules:)225 3863 y Fy(\017)60 b FB(A)30 b(n)m(umeric)h(constan)m(t)g (or)g(the)f(result)h(of)f(a)h(n)m(umeric)f(op)s(eration)h(has)f(the)h Fx(n)m(umeric)k FB(attribute.)225 3999 y Fy(\017)60 b FB(A)30 b(string)h(constan)m(t)g(or)g(the)f(result)h(of)f(a)h(string)f (op)s(eration)h(has)f(the)h Fx(string)38 b FB(attribute.)225 4135 y Fy(\017)60 b FB(Fields,)32 b Fz(getline)c FB(input,)j Fz(FILENAME)p FB(,)d Fz(ARGV)i FB(elemen)m(ts,)i Fz(ENVIRON)d FB(elemen)m(ts,)k(and)d(the)h(elemen)m(ts)330 4244 y(of)45 b(an)g(arra)m(y)h(created)g(b)m(y)g Fz(split)d FB(that)j(are)g(n)m (umeric)f(strings)g(ha)m(v)m(e)h(the)g Fx(strn)m(um)e FB(attribute.)330 4354 y(Otherwise,)27 b(they)g(ha)m(v)m(e)h(the)g Fx(string)34 b FB(attribute.)40 b(Uninitialized)29 b(v)-5 b(ariables)27 b(also)h(ha)m(v)m(e)g(the)f Fx(strn)m(um)330 4464 y FB(attribute.)225 4600 y Fy(\017)60 b FB(A)m(ttributes)31 b(propagate)h(across)f(assignmen)m(ts)g(but)e(are)i(not)g(c)m(hanged)g (b)m(y)f(an)m(y)h(use.)275 4764 y(The)i(last)i(rule)f(is)g (particularly)g(imp)s(ortan)m(t.)52 b(In)33 b(the)i(follo)m(wing)g (program,)g Fz(a)f FB(has)g(n)m(umeric)g(t)m(yp)s(e,)150 4874 y(ev)m(en)d(though)f(it)h(is)f(later)i(used)d(in)h(a)h(string)g (op)s(eration:)390 5011 y Fz(BEGIN)46 b({)820 5121 y(a)h(=)g(12.345)820 5230 y(b)g(=)g(a)h(")f(is)h(a)f(cute)g(number")820 5340 y(print)f(b)p eop end %%Page: 86 98 TeXDict begin 86 97 bop 150 -116 a FB(86)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(})275 432 y FB(When)c(t)m(w)m(o)i(op)s(erands)d(are)i (compared,)h(either)f(string)f(comparison)h(or)f(n)m(umeric)h (comparison)f(ma)m(y)150 542 y(b)s(e)41 b(used.)72 b(This)40 b(dep)s(ends)g(up)s(on)f(the)j(attributes)f(of)h(the)f(op)s(erands,)i (according)f(to)g(the)f(follo)m(wing)150 651 y(symmetric)31 b(matrix:)p 1478 887 4 110 v 1573 855 a(STRING)120 b(NUMERIC)h(STRNUM)p 1478 904 4 17 v 910 907 2111 4 v 1478 941 4 34 v 1002 1018 a(STRING)p 1478 1050 4 110 v 215 w(string)248 b(string)340 b(string)910 1128 y(NUMERIC)p 1478 1160 V 216 w(string)248 b(n)m(umeric)k(n)m(umeric)954 1237 y(STRNUM)p 1478 1269 V 216 w(string)c(n)m(umeric)k(n)m(umeric)275 1371 y(The)33 b(basic)i(idea)g(is)f(that)h(user)f(input)f(that)i(lo)s(oks)g(n)m (umeric|and)e Fw(only)44 b FB(user)33 b(input|should)g(b)s(e)150 1480 y(treated)38 b(as)g(n)m(umeric,)h(ev)m(en)e(though)g(it)h(is)f (actually)i(made)e(of)g(c)m(haracters)i(and)e(is)g(therefore)g(also)i (a)150 1590 y(string.)58 b(Th)m(us,)36 b(for)g(example,)i(the)f(string) f(constan)m(t)h Fz(")30 b(+3.14")k FB(is)i(a)h(string,)g(ev)m(en)g (though)f(it)g(lo)s(oks)150 1699 y(n)m(umeric,)30 b(and)g(is)h Fw(never)40 b FB(treated)31 b(as)g(n)m(um)m(b)s(er)e(for)h(comparison)g (purp)s(oses.)275 1833 y(In)i(short,)i(when)e(one)h(op)s(erand)f(is)h (a)h(\\pure")f(string,)h(suc)m(h)e(as)i(a)f(string)g(constan)m(t,)j (then)c(a)i(string)150 1942 y(comparison)d(is)f(p)s(erformed.)39 b(Otherwise,)30 b(a)h(n)m(umeric)f(comparison)h(is)f(p)s(erformed.)3072 1909 y Fo(3)275 2076 y Fx(Comparison)j(expressions)k FB(compare)d(strings)g(or)g(n)m(um)m(b)s(ers)e(for)i(relationships)g (suc)m(h)g(as)g(equalit)m(y)-8 b(.)150 2185 y(They)33 b(are)h(written)f(using)g Fx(relational)i(op)s(erators)p FB(,)g(whic)m(h)e(are)g(a)h(sup)s(erset)e(of)i(those)g(in)f(C.)g(T)-8 b(able)34 b(5.2)150 2295 y(describ)s(es)c(them.)150 2641 y Fr(Expression)567 b(Result)150 2751 y Fx(x)37 b Fz(<)30 b Fx(y)789 b FB(T)-8 b(rue)30 b(if)g Fx(x)36 b FB(is)31 b(less)g(than)f Fx(y)p FB(.)150 2861 y Fx(x)37 b Fz(<=)29 b Fx(y)742 b FB(T)-8 b(rue)30 b(if)g Fx(x)36 b FB(is)31 b(less)g(than)f(or)g(equal)h(to)g Fx(y)p FB(.)150 2970 y Fx(x)37 b Fz(>)30 b Fx(y)789 b FB(T)-8 b(rue)30 b(if)g Fx(x)36 b FB(is)31 b(greater)g(than)g Fx(y)p FB(.)150 3080 y Fx(x)37 b Fz(>=)29 b Fx(y)742 b FB(T)-8 b(rue)30 b(if)g Fx(x)36 b FB(is)31 b(greater)g(than)g(or)f(equal)h(to)g Fx(y)p FB(.)150 3189 y Fx(x)37 b Fz(==)29 b Fx(y)742 b FB(T)-8 b(rue)30 b(if)g Fx(x)36 b FB(is)31 b(equal)g(to)g Fx(y)p FB(.)150 3299 y Fx(x)37 b Fz(!=)29 b Fx(y)742 b FB(T)-8 b(rue)30 b(if)g Fx(x)36 b FB(is)31 b(not)f(equal)h(to)g Fx(y)p FB(.)150 3409 y Fx(x)37 b Fz(~)30 b Fx(y)789 b FB(T)-8 b(rue)30 b(if)g(the)g(string)h Fx(x)36 b FB(matc)m(hes)c(the)e (regexp)h(denoted)f(b)m(y)h Fx(y)p FB(.)150 3518 y Fx(x)37 b Fz(!~)29 b Fx(y)742 b FB(T)-8 b(rue)30 b(if)g(the)g(string)h Fx(x)36 b FB(do)s(es)30 b(not)h(matc)m(h)g(the)g(regexp)f(denoted)h(b)m (y)f Fx(y)p FB(.)150 3628 y Fx(subscript)h Fz(in)f Fx(arra)m(y)275 b FB(T)-8 b(rue)20 b(if)h(the)h(arra)m(y)g Fx(arra)m(y)29 b FB(has)21 b(an)g(elemen)m(t)i(with)e(the)g(subscript)f Fx(subscript)p FB(.)275 3775 y(T)-8 b(able)31 b(5.2:)41 b(Relational)33 b(Op)s(erators)275 3913 y(Comparison)i(expressions)g (ha)m(v)m(e)i(the)f(v)-5 b(alue)36 b(one)g(if)g(true)f(and)g(zero)i(if) f(false.)57 b(When)36 b(comparing)150 4023 y(op)s(erands)42 b(of)h(mixed)g(t)m(yp)s(es,)k(n)m(umeric)c(op)s(erands)e(are)j(con)m(v) m(erted)h(to)e(strings)g(using)g(the)g(v)-5 b(alue)44 b(of)150 4132 y Fz(CONVFMT)28 b FB(\(see)k(Section)f(5.4)g([Con)m(v)m (ersion)h(of)e(Strings)g(and)g(Num)m(b)s(ers],)f(page)i(77\).)275 4266 y(Strings)24 b(are)h(compared)g(b)m(y)g(comparing)h(the)f(\014rst) f(c)m(haracter)j(of)e(eac)m(h,)i(then)e(the)g(second)g(c)m(haracter)150 4375 y(of)37 b(eac)m(h,)j(and)c(so)h(on.)60 b(Th)m(us,)38 b Fz("10")e FB(is)h(less)g(than)f Fz("9")p FB(.)60 b(If)36 b(there)h(are)g(t)m(w)m(o)h(strings)f(where)g(one)g(is)g(a)150 4485 y(pre\014x)31 b(of)h(the)g(other,)h(the)f(shorter)f(string)h(is)g (less)g(than)g(the)g(longer)h(one.)45 b(Th)m(us,)32 b Fz("abc")e FB(is)i(less)g(than)150 4594 y Fz("abcd")p FB(.)275 4728 y(It)41 b(is)h(v)m(ery)g(easy)g(to)g(acciden)m(tally)i (mist)m(yp)s(e)e(the)g(`)p Fz(==)p FB(')f(op)s(erator)h(and)f(lea)m(v)m (e)j(o\013)e(one)f(of)h(the)g(`)p Fz(=)p FB(')150 4837 y(c)m(haracters.)f(The)25 b(result)h(is)f(still)i(v)-5 b(alid)26 b Fz(awk)f FB(co)s(de,)i(but)e(the)h(program)f(do)s(es)h(not) g(do)f(what)h(is)g(in)m(tended:)390 4971 y Fz(if)47 b(\(a)g(=)h(b\))142 b(#)48 b(oops!)e(should)g(be)i(a)f(==)g(b)533 5080 y(...)p 150 5154 1200 4 v 199 5221 a Fo(3)275 5253 y Fn(The)26 b(POSIX)e(standard)i(is)g(under)f(revision.)36 b(The)26 b(revised)g(standard's)g(rules)h(for)f(t)n(yping)f(and)h(comparison)h (are)f(the)275 5340 y(same)g(as)g(just)g(describ)r(ed)g(for)g Fm(gawk)p Fn(.)p eop end %%Page: 87 99 TeXDict begin 87 98 bop 2631 -116 a Fr(Chapter)30 b(5:)41 b(Expressions)90 b FB(87)390 299 y Fz(else)533 408 y(...)150 539 y FB(Unless)39 b Fz(b)g FB(happ)s(ens)f(to)i(b)s(e)e(zero)i(or)g (the)f(n)m(ull)g(string,)j(the)e Fz(if)e FB(part)h(of)h(the)f(test)i (alw)m(a)m(ys)f(succeeds.)150 649 y(Because)24 b(the)f(op)s(erators)g (are)g(so)g(similar,)i(this)e(kind)f(of)h(error)f(is)h(v)m(ery)g (di\016cult)g(to)h(sp)s(ot)e(when)g(scanning)150 758 y(the)31 b(source)f(co)s(de.)275 889 y(The)i(follo)m(wing)i(table)f(of) g(expressions)f(illustrates)i(the)e(kind)g(of)h(comparison)g Fz(gawk)e FB(p)s(erforms,)h(as)150 999 y(w)m(ell)f(as)g(what)f(the)h (result)f(of)h(the)f(comparison)h(is:)150 1150 y Fz(1.5)e(<=)h(2.0)630 1260 y FB(n)m(umeric)g(comparison)h(\(true\))150 1412 y Fz("abc")e(>=)h("xyz")630 1521 y FB(string)g(comparison)h(\(false\)) 150 1673 y Fz(1.5)e(!=)h(")g(+2")630 1783 y FB(string)g(comparison)h (\(true\))150 1934 y Fz("1e2")e(<)h("3")630 2044 y FB(string)g (comparison)h(\(true\))150 2196 y Fz(a)f(=)g(2;)g(b)g(=)g("2")150 2305 y(a)g(==)g(b)228 b FB(string)30 b(comparison)h(\(true\))150 2457 y Fz(a)f(=)g(2;)g(b)g(=)g(")g(+2")150 2567 y(a)g(==)g(b)228 b FB(string)30 b(comparison)h(\(false\))275 2718 y(In)e(the)i(next)f (example:)390 2849 y Fz($)47 b(echo)g(1e2)g(3)g(|)h(awk)f('{)g(print)f (\($1)h(<)h($2\))f(?)g("true")f(:)i("false")d(}')410 2963 y Fy(a)533 2959 y Fz(false)150 3089 y FB(the)36 b(result)f(is)h(`)p Fz(false)p FB(')f(b)s(ecause)h(b)s(oth)f Fz($1)g FB(and)g Fz($2)g FB(are)h(user)f(input.)55 b(They)36 b(are)g(n)m(umeric)f(strings|)150 3199 y(therefore)30 b(b)s(oth)f(ha)m(v)m(e)i(the)f Fx(strn)m(um)f FB(attribute,)i (dictating)g(a)f(n)m(umeric)g(comparison.)40 b(The)30 b(purp)s(ose)e(of)150 3308 y(the)j(comparison)g(rules)f(and)g(the)h (use)f(of)h(n)m(umeric)g(strings)f(is)h(to)g(attempt)h(to)f(pro)s(duce) f(the)h(b)s(eha)m(vior)150 3418 y(that)24 b(is)f(\\least)j (surprising,")d(while)h(still)g(\\doing)g(the)g(righ)m(t)g(thing.")38 b(String)23 b(comparisons)h(and)f(regular)150 3528 y(expression)30 b(comparisons)h(are)f(v)m(ery)h(di\013eren)m(t.)41 b(F)-8 b(or)31 b(example:)390 3658 y Fz(x)47 b(==)h("foo")150 3789 y FB(has)30 b(the)h(v)-5 b(alue)31 b(one,)f(or)h(is)f(true)g(if)h (the)f(v)-5 b(ariable)31 b Fz(x)f FB(is)h(precisely)g(`)p Fz(foo)p FB('.)40 b(By)31 b(con)m(trast:)390 3920 y Fz(x)47 b(~)h(/foo/)150 4050 y FB(has)30 b(the)h(v)-5 b(alue)31 b(one)f(if)h Fz(x)f FB(con)m(tains)h(`)p Fz(foo)p FB(',)f(suc)m(h)g(as) h Fz("Oh,)e(what)g(a)h(fool)g(am)f(I!")p FB(.)275 4181 y(The)36 b(righ)m(thand)h(op)s(erand)f(of)h(the)h(`)p Fz(~)p FB(')f(and)f(`)p Fz(!~)p FB(')h(op)s(erators)h(ma)m(y)g(b)s(e)e (either)i(a)f(regexp)h(constan)m(t)150 4290 y(\()p Fz(/...)o(/)p FB(\))27 b(or)f(an)h(ordinary)f(expression.)39 b(In)26 b(the)g(latter)i(case,)h(the)e(v)-5 b(alue)27 b(of)f(the)h(expression)f (as)h(a)g(string)150 4400 y(is)35 b(used)g(as)h(a)g(dynamic)f(regexp)h (\(see)g(Section)g(2.1)h([Ho)m(w)f(to)h(Use)e(Regular)h(Expressions],)h (page)f(24;)150 4510 y(also)31 b(see)g(Section)g(2.8)h([Using)f (Dynamic)g(Regexps],)g(page)g(34\).)275 4640 y(In)h(mo)s(dern)g (implemen)m(tations)j(of)f Fz(awk)p FB(,)g(a)g(constan)m(t)g(regular)g (expression)f(in)h(slashes)f(b)m(y)h(itself)g(is)150 4750 y(also)g(an)g(expression.)49 b(The)33 b(regexp)h Fz(/)p Fk(regexp)11 b Fz(/)30 b FB(is)k(an)f(abbreviation)h(for)f(the)h (follo)m(wing)h(comparison)150 4859 y(expression:)390 4990 y Fz($0)47 b(~)h(/)p Fk(regexp)11 b Fz(/)275 5121 y FB(One)30 b(sp)s(ecial)i(place)g(where)f Fz(/foo/)e FB(is)i Fw(not)41 b FB(an)31 b(abbreviation)h(for)f(`)p Fz($0)f(~)g(/foo/)p FB(')g(is)h(when)f(it)i(is)f(the)150 5230 y(righ)m(thand)39 b(op)s(erand)f(of)h(`)p Fz(~)p FB(')g(or)g(`)p Fz(!~)p FB('.)67 b(See)39 b(Section)h(5.2)h([Using)e (Regular)h(Expression)e(Constan)m(ts],)150 5340 y(page)31 b(74,)h(where)d(this)i(is)f(discussed)g(in)g(more)g(detail.)p eop end %%Page: 88 100 TeXDict begin 88 99 bop 150 -116 a FB(88)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FA(5.11)68 b(Bo)t(olean)46 b(Expressions)150 458 y FB(A)30 b Fx(Bo)s(olean)h(expression)f FB(is)g(a)g(com)m(bination)h (of)f(comparison)g(expressions)f(or)h(matc)m(hing)h(expressions,)150 568 y(using)20 b(the)h(Bo)s(olean)h(op)s(erators)e(\\or")i(\(`)p Fz(||)p FB('\),)h(\\and")e(\(`)p Fz(&&)p FB('\),)i(and)d(\\not")h(\(`)p Fz(!)p FB('\),)j(along)d(with)g(paren)m(theses)150 677 y(to)37 b(con)m(trol)g(nesting.)58 b(The)35 b(truth)g(v)-5 b(alue)37 b(of)f(the)g(Bo)s(olean)h(expression)f(is)g(computed)g(b)m(y) f(com)m(bining)150 787 y(the)d(truth)e(v)-5 b(alues)32 b(of)f(the)h(comp)s(onen)m(t)f(expressions.)43 b(Bo)s(olean)33 b(expressions)e(are)h(also)g(referred)f(to)h(as)150 897 y Fx(logical)h(expressions)p FB(.)40 b(The)30 b(terms)g(are)h(equiv)-5 b(alen)m(t.)275 1028 y(Bo)s(olean)30 b(expressions)e(can)h(b)s(e)f (used)g(wherev)m(er)h(comparison)f(and)g(matc)m(hing)i(expressions)f (can)g(b)s(e)150 1137 y(used.)64 b(They)37 b(can)i(b)s(e)f(used)f(in)h Fz(if)p FB(,)i Fz(while)p FB(,)f Fz(do)p FB(,)h(and)e Fz(for)f FB(statemen)m(ts)j(\(see)f(Section)h(6.4)f([Con)m(trol)150 1247 y(Statemen)m(ts)31 b(in)e(Actions],)i(page)g(99\).)41 b(They)29 b(ha)m(v)m(e)i(n)m(umeric)e(v)-5 b(alues)30 b(\(one)h(if)e(true,)h(zero)g(if)g(false\))g(that)150 1357 y(come)41 b(in)m(to)g(pla)m(y)f(if)g(the)g(result)g(of)g(the)g(Bo) s(olean)i(expression)d(is)h(stored)g(in)g(a)g(v)-5 b(ariable)41 b(or)f(used)f(in)150 1466 y(arithmetic.)275 1597 y(In)c(addition,)k(ev) m(ery)e(Bo)s(olean)h(expression)e(is)h(also)g(a)g(v)-5 b(alid)37 b(pattern,)h(so)f(y)m(ou)g(can)g(use)f(one)h(as)g(a)150 1707 y(pattern)30 b(to)i(con)m(trol)f(the)g(execution)h(of)e(rules.)40 b(The)30 b(Bo)s(olean)i(op)s(erators)e(are:)150 1860 y Fk(boolean1)39 b Fz(&&)29 b Fk(boolean2)630 1969 y FB(T)-8 b(rue)26 b(if)h(b)s(oth)f Fx(b)s(o)s(olean1)35 b FB(and)26 b Fx(b)s(o)s(olean2)35 b FB(are)27 b(true.)40 b(F)-8 b(or)27 b(example,)i(the)e(follo)m(wing)h(state-)630 2079 y(men)m(t)j(prin)m(ts)f(the)g(curren)m(t)g(input)g(record)g(if)g (it)h(con)m(tains)h(b)s(oth)e(`)p Fz(2400)p FB(')f(and)h(`)p Fz(foo)p FB(':)870 2210 y Fz(if)47 b(\($0)g(~)h(/2400/)e(&&)h($0)g(~)g (/foo/\))g(print)630 2341 y FB(The)40 b(sub)s(expression)e Fx(b)s(o)s(olean2)48 b FB(is)41 b(ev)-5 b(aluated)41 b(only)g(if)f Fx(b)s(o)s(olean1)48 b FB(is)41 b(true.)70 b(This)40 b(can)630 2451 y(mak)m(e)27 b(a)g(di\013erence)g(when)e Fx(b)s(o)s(olean2)34 b FB(con)m(tains)27 b(expressions)f(that)h(ha)m(v) m(e)h(side)e(e\013ects.)41 b(In)630 2560 y(the)27 b(case)h(of)f(`)p Fz($0)j(~)h(/foo/)d(&&)i(\($2)g(==)f(bar++\))p FB(',)e(the)g(v)-5 b(ariable)28 b Fz(bar)e FB(is)h(not)g(incremen)m(ted)630 2670 y(if)j(there)h(is)f(no)h(substring)e(`)p Fz(foo)p FB(')h(in)g(the)g(record.)150 2823 y Fk(boolean1)39 b Fz(||)29 b Fk(boolean2)630 2932 y FB(T)-8 b(rue)27 b(if)g(at)h(least)h (one)f(of)f Fx(b)s(o)s(olean1)35 b FB(or)28 b Fx(b)s(o)s(olean2)35 b FB(is)27 b(true.)40 b(F)-8 b(or)28 b(example,)h(the)e(follo)m(wing) 630 3042 y(statemen)m(t)34 b(prin)m(ts)d(all)i(records)e(in)h(the)g (input)f(that)h(con)m(tain)h Fw(either)42 b FB(`)p Fz(2400)p FB(')32 b(or)f(`)p Fz(foo)p FB(')h(or)630 3152 y(b)s(oth:)870 3283 y Fz(if)47 b(\($0)g(~)h(/2400/)e(||)h($0)g(~)g(/foo/\))g(print)630 3414 y FB(The)39 b(sub)s(expression)e Fx(b)s(o)s(olean2)47 b FB(is)40 b(ev)-5 b(aluated)40 b(only)g(if)f Fx(b)s(o)s(olean1)47 b FB(is)40 b(false.)68 b(This)39 b(can)630 3523 y(mak)m(e)31 b(a)g(di\013erence)g(when)e Fx(b)s(o)s(olean2)38 b FB(con)m(tains)32 b(expressions)e(that)h(ha)m(v)m(e)h(side)e(e\013ects.)150 3676 y Fz(!)g Fk(boolean)630 3786 y FB(T)-8 b(rue)32 b(if)g Fx(b)s(o)s(olean)h FB(is)f(false.)48 b(F)-8 b(or)33 b(example,)h(the)e(follo)m(wing)i(program)e(prin)m(ts)g(`)p Fz(no)e(home!)p FB(')630 3895 y(in)g(the)h(un)m(usual)e(ev)m(en)m(t)j (that)f(the)f Fz(HOME)g FB(en)m(vironmen)m(t)h(v)-5 b(ariable)31 b(is)f(not)h(de\014ned:)870 4027 y Fz(BEGIN)46 b({)i(if)f(\(!)g (\("HOME")f(in)h(ENVIRON\)\))1586 4136 y(print)f("no)h(home!")f(})630 4267 y FB(\(The)34 b Fz(in)f FB(op)s(erator)h(is)g(describ)s(ed)f(in)g (Section)i(7.2)g([Referring)f(to)h(an)e(Arra)m(y)h(Elemen)m(t],)630 4377 y(page)d(117.\))275 4530 y(The)k(`)p Fz(&&)p FB(')h(and)f(`)p Fz(||)p FB(')h(op)s(erators)g(are)g(called)h Fx(short-circuit)i FB(op)s(erators)d(b)s(ecause)g(of)g(the)g(w)m(a)m(y)h(they)150 4639 y(w)m(ork.)43 b(Ev)-5 b(aluation)32 b(of)f(the)g(full)f (expression)h(is)g(\\short-circuited")i(if)e(the)g(result)g(can)g(b)s (e)f(determined)150 4749 y(part)g(w)m(a)m(y)i(through)d(its)i(ev)-5 b(aluation.)275 4880 y(Statemen)m(ts)24 b(that)g(use)f(`)p Fz(&&)p FB(')g(or)g(`)p Fz(||)p FB(')h(can)f(b)s(e)g(con)m(tin)m(ued)h (simply)f(b)m(y)g(putting)g(a)h(newline)f(after)h(them.)150 4990 y(But)31 b(y)m(ou)f(cannot)h(put)f(a)g(newline)h(in)f(fron)m(t)g (of)h(either)f(of)h(these)g(op)s(erators)f(without)g(using)g(bac)m (kslash)150 5099 y(con)m(tin)m(uation)i(\(see)g(Section)f(1.6)g([)p Fz(awk)f FB(Statemen)m(ts)i(V)-8 b(ersus)30 b(Lines],)g(page)i(20\).) 275 5230 y(The)c(actual)h(v)-5 b(alue)29 b(of)g(an)f(expression)h (using)f(the)g(`)p Fz(!)p FB(')h(op)s(erator)g(is)f(either)h(one)g(or)g (zero,)g(dep)s(ending)150 5340 y(up)s(on)h(the)i(truth)f(v)-5 b(alue)32 b(of)f(the)h(expression)g(it)g(is)f(applied)h(to.)45 b(The)31 b(`)p Fz(!)p FB(')h(op)s(erator)g(is)f(often)h(useful)f(for)p eop end %%Page: 89 101 TeXDict begin 89 100 bop 2631 -116 a Fr(Chapter)30 b(5:)41 b(Expressions)90 b FB(89)150 299 y(c)m(hanging)35 b(the)g(sense)g(of)f (a)h(\015ag)g(v)-5 b(ariable)36 b(from)e(false)h(to)g(true)f(and)g(bac) m(k)i(again.)54 b(F)-8 b(or)35 b(example,)i(the)150 408 y(follo)m(wing)32 b(program)e(is)g(one)h(w)m(a)m(y)g(to)h(prin)m(t)e (lines)g(in)g(b)s(et)m(w)m(een)h(sp)s(ecial)g(brac)m(k)m(eting)h (lines:)390 548 y Fz($1)47 b(==)g("START")142 b({)47 b(interested)e(=)j(!)f(interested;)e(next)h(})390 657 y(interested)f(==)i(1)h({)f(print)f(})390 767 y($1)h(==)g("END")238 b({)47 b(interested)e(=)j(!)f(interested;)e(next)h(})150 906 y FB(The)32 b(v)-5 b(ariable)34 b Fz(interested)p FB(,)c(as)j(with)g(all)g Fz(awk)f FB(v)-5 b(ariables,)34 b(starts)f(out)g(initialized)i(to)e(zero,)h(whic)m(h)f(is)150 1016 y(also)25 b(false.)40 b(When)24 b(a)h(line)g(is)f(seen)h(whose)f (\014rst)g(\014eld)g(is)h(`)p Fz(START)p FB(',)g(the)f(v)-5 b(alue)25 b(of)g Fz(interested)d FB(is)i(toggled)150 1126 y(to)31 b(true,)g(using)f(`)p Fz(!)p FB('.)42 b(The)31 b(next)f(rule)h(prin)m(ts)f(lines)h(as)g(long)g(as)g Fz(interested)d FB(is)j(true.)41 b(When)31 b(a)g(line)g(is)150 1235 y(seen)f(whose)h(\014rst)e(\014eld)h(is)h(`)p Fz(END)p FB(',)f Fz(interested)d FB(is)k(toggled)h(bac)m(k)f(to)g(false.)390 1374 y Fr(NOTE:)26 b FB(The)g Fz(next)f FB(statemen)m(t)j(is)e (discussed)f(in)h(Section)h(6.4.8)h([The)e Fz(next)f FB(Statemen)m(t],)390 1484 y(page)32 b(105.)45 b Fz(next)30 b FB(tells)j Fz(awk)d FB(to)i(skip)f(the)g(rest)h(of)f(the)h(rules,)f (get)i(the)e(next)h(record,)g(and)390 1594 y(start)25 b(pro)s(cessing)g(the)g(rules)f(o)m(v)m(er)j(again)e(at)h(the)f(top.)39 b(The)24 b(reason)h(it's)h(there)f(is)g(to)g(a)m(v)m(oid)390 1703 y(prin)m(ting)30 b(the)h(brac)m(k)m(eting)h(`)p Fz(START)p FB(')d(and)h(`)p Fz(END)p FB(')g(lines.)150 1943 y FA(5.12)68 b(Conditional)47 b(Expressions)150 2102 y FB(A)32 b Fx(conditional)i(expression)e FB(is)h(a)f(sp)s(ecial)h (kind)f(of)g(expression)g(that)h(has)f(three)h(op)s(erands.)45 b(It)33 b(allo)m(ws)150 2212 y(y)m(ou)j(to)g(use)g(one)g(expression's)f (v)-5 b(alue)37 b(to)f(select)h(one)f(of)g(t)m(w)m(o)h(other)f (expressions.)56 b(The)36 b(conditional)150 2322 y(expression)30 b(is)h(the)f(same)h(as)g(in)f(the)g(C)g(language,)i(as)f(sho)m(wn)f (here:)390 2461 y Fk(selector)56 b Fz(?)48 b Fk(if-true-exp)55 b Fz(:)47 b Fk(if-false-exp)150 2600 y FB(There)30 b(are)h(three)f(sub) s(expressions.)39 b(The)30 b(\014rst,)f Fx(selector)p FB(,)k(is)d(alw)m(a)m(ys)i(computed)e(\014rst.)40 b(If)30 b(it)h(is)f(\\true")150 2710 y(\(not)f(zero)g(or)f(not)g(n)m(ull\),)h (then)f Fx(if-true-exp)j FB(is)d(computed)g(next)g(and)g(its)g(v)-5 b(alue)29 b(b)s(ecomes)f(the)g(v)-5 b(alue)29 b(of)150 2819 y(the)34 b(whole)h(expression.)52 b(Otherwise,)35 b Fx(if-false-exp)j FB(is)d(computed)f(next)g(and)g(its)h(v)-5 b(alue)34 b(b)s(ecomes)h(the)150 2929 y(v)-5 b(alue)29 b(of)g(the)h(whole)f(expression.)40 b(F)-8 b(or)29 b(example,)h(the)g (follo)m(wing)g(expression)f(pro)s(duces)e(the)i(absolute)150 3039 y(v)-5 b(alue)31 b(of)f Fz(x)p FB(:)390 3178 y Fz(x)47 b(>=)h(0)f(?)h(x)f(:)g(-x)275 3317 y FB(Eac)m(h)24 b(time)g(the)g (conditional)h(expression)f(is)f(computed,)i(only)f(one)g(of)g Fx(if-true-exp)j FB(and)c Fx(if-false-exp)150 3427 y FB(is)30 b(used;)g(the)h(other)f(is)g(ignored.)41 b(This)30 b(is)g(imp)s(ortan)m(t)h(when)e(the)h(expressions)g(ha)m(v)m(e)i(side)e (e\013ects.)42 b(F)-8 b(or)150 3536 y(example,)36 b(this)e(conditional) h(expression)f(examines)g(elemen)m(t)h Fz(i)f FB(of)g(either)g(arra)m (y)h Fz(a)e FB(or)h(arra)m(y)h Fz(b)p FB(,)g(and)150 3646 y(incremen)m(ts)c Fz(i)p FB(:)390 3785 y Fz(x)47 b(==)h(y)f(?)h(a[i++])e(:)h(b[i++])150 3925 y FB(This)40 b(is)h(guaran)m(teed)h(to)g(incremen)m(t)f Fz(i)g FB(exactly)i(once,)h (b)s(ecause)d(eac)m(h)h(time)g(only)f(one)g(of)g(the)h(t)m(w)m(o)150 4034 y(incremen)m(t)f(expressions)g(is)f(executed)i(and)e(the)h(other)g (is)f(not.)72 b(See)41 b(Chapter)f(7)h([Arra)m(ys)g(in)f Fz(awk)p FB(],)150 4144 y(page)31 b(116,)h(for)e(more)h(information)f (ab)s(out)g(arra)m(ys.)275 4283 y(As)21 b(a)i(minor)e Fz(gawk)g FB(extension,)k(a)d(statemen)m(t)i(that)e(uses)g(`)p Fz(?:)p FB(')g(can)g(b)s(e)f(con)m(tin)m(ued)i(simply)e(b)m(y)h (putting)150 4393 y(a)38 b(newline)g(after)h(either)f(c)m(haracter.)65 b(Ho)m(w)m(ev)m(er,)42 b(putting)c(a)g(newline)g(in)g(fron)m(t)g(of)g (either)g(c)m(haracter)150 4502 y(do)s(es)32 b(not)g(w)m(ork)g(without) g(using)f(bac)m(kslash)i(con)m(tin)m(uation)h(\(see)f(Section)f(1.6)h ([)p Fz(awk)f FB(Statemen)m(ts)h(V)-8 b(er-)150 4612 y(sus)34 b(Lines],)i(page)g(20\).)56 b(If)34 b(`)p Fz(--posix)p FB(')g(is)h(sp)s(eci\014ed)f(\(see)i(Section)g(11.2)g([Command-Line)f (Options],)150 4722 y(page)c(173\),)h(then)e(this)h(extension)g(is)f (disabled.)150 4961 y FA(5.13)68 b(F)-11 b(unction)44 b(Calls)150 5121 y FB(A)34 b Fx(function)g FB(is)g(a)g(name)g(for)g(a)h (particular)f(calculation.)54 b(This)33 b(enables)h(y)m(ou)h(to)f(ask)h (for)e(it)i(b)m(y)f(name)150 5230 y(at)f(an)m(y)f(p)s(oin)m(t)f(in)h (the)g(program.)45 b(F)-8 b(or)32 b(example,)h(the)f(function)g Fz(sqrt)e FB(computes)i(the)g(square)g(ro)s(ot)g(of)150 5340 y(a)f(n)m(um)m(b)s(er.)p eop end %%Page: 90 102 TeXDict begin 90 101 bop 150 -116 a FB(90)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(A)21 b(\014xed)g(set)i(of)f(functions)f(are)h Fx(built-in)p FB(,)i(whic)m(h)d(means)h(they)g(are)g(a)m(v)-5 b(ailable)24 b(in)e(ev)m(ery)g Fz(awk)f FB(program.)150 408 y(The)30 b Fz(sqrt)g FB(function)h(is)g(one)g(of)g(these.)43 b(See)31 b(Section)h(8.1)g([Built-in)g(F)-8 b(unctions],)32 b(page)g(127,)g(for)f(a)g(list)150 518 y(of)f(built-in)f(functions)g (and)g(their)g(descriptions.)41 b(In)28 b(addition,)j(y)m(ou)e(can)h (de\014ne)f(functions)g(for)g(use)g(in)150 628 y(y)m(our)i(program.)42 b(See)31 b(Section)h(8.2)g([User-De\014ned)f(F)-8 b(unctions],)32 b(page)g(149,)h(for)d(instructions)h(on)g(ho)m(w)150 737 y(to)g(do)f(this.)275 867 y(The)44 b(w)m(a)m(y)h(to)g(use)f(a)h (function)g(is)f(with)g(a)h Fx(function)f(call)50 b FB(expression,)e (whic)m(h)c(consists)h(of)g(the)150 977 y(function)30 b(name)g(follo)m(w)m(ed)i(immediately)g(b)m(y)e(a)h(list)g(of)f Fx(argumen)m(ts)35 b FB(in)30 b(paren)m(theses.)41 b(The)30 b(argumen)m(ts)150 1087 y(are)i(expressions)f(that)h(pro)m(vide)g(the)g (ra)m(w)g(materials)g(for)g(the)g(function's)f(calculations.)46 b(When)32 b(there)150 1196 y(is)d(more)f(than)h(one)f(argumen)m(t,)i (they)f(are)g(separated)g(b)m(y)f(commas.)41 b(If)28 b(there)h(are)g(no)f(argumen)m(ts,)i(just)150 1306 y(write)36 b(`)p Fz(\(\))p FB(')g(after)h(the)f(function)g(name.)58 b(The)36 b(follo)m(wing)h(examples)g(sho)m(w)f(function)f(calls)j(with) e(and)150 1415 y(without)30 b(argumen)m(ts:)390 1546 y Fz(sqrt\(x^2)46 b(+)h(y^2\))381 b Fk(one)47 b(argument)390 1655 y Fz(atan2\(y,)f(x\))572 b Fk(two)47 b(arguments)390 1765 y Fz(rand\(\))810 b Fk(no)47 b(arguments)275 1895 y Fr(Caution:)39 b FB(Do)28 b(not)g(put)f(an)m(y)h(space)h(b)s(et)m(w)m (een)f(the)g(function)f(name)h(and)f(the)h(op)s(en-paren)m(thesis!)40 b(A)150 2004 y(user-de\014ned)28 b(function)h(name)h(lo)s(oks)g(just)f (lik)m(e)i(the)f(name)f(of)h(a)g(v)-5 b(ariable|a)31 b(space)f(w)m(ould)f(mak)m(e)i(the)150 2114 y(expression)f(lo)s(ok)h (lik)m(e)h(concatenation)h(of)d(a)h(v)-5 b(ariable)31 b(with)f(an)g(expression)g(inside)h(paren)m(theses.)275 2244 y(With)25 b(built-in)g(functions,)h(space)g(b)s(efore)f(the)g (paren)m(thesis)h(is)f(harmless,)h(but)f(it)g(is)h(b)s(est)e(not)i(to)g (get)150 2354 y(in)m(to)33 b(the)f(habit)g(of)g(using)g(space)h(to)f(a) m(v)m(oid)i(mistak)m(es)f(with)f(user-de\014ned)e(functions.)46 b(Eac)m(h)32 b(function)150 2463 y(exp)s(ects)g(a)f(particular)h(n)m (um)m(b)s(er)e(of)h(argumen)m(ts.)44 b(F)-8 b(or)32 b(example,)g(the)g Fz(sqrt)e FB(function)h(m)m(ust)g(b)s(e)g(called)150 2573 y(with)f(a)h(single)g(argumen)m(t,)g(the)f(n)m(um)m(b)s(er)g(of)g (whic)m(h)g(to)h(tak)m(e)h(the)f(square)f(ro)s(ot:)390 2703 y Fz(sqrt\()p Fk(argument)11 b Fz(\))275 2833 y FB(Some)28 b(of)g(the)g(built-in)g(functions)f(ha)m(v)m(e)i(one)f(or)g (more)g(optional)h(argumen)m(ts.)41 b(If)27 b(those)i(argumen)m(ts)150 2943 y(are)40 b(not)g(supplied,)h(the)f(functions)f(use)g(a)h (reasonable)h(default)f(v)-5 b(alue.)69 b(See)40 b(Section)g(8.1)h ([Built-in)150 3053 y(F)-8 b(unctions],)47 b(page)c(127,)k(for)42 b(full)h(details.)78 b(If)42 b(argumen)m(ts)h(are)g(omitted)g(in)g (calls)g(to)g(user-de\014ned)150 3162 y(functions,)32 b(then)f(those)h(argumen)m(ts)g(are)g(treated)g(as)g(lo)s(cal)h(v)-5 b(ariables)32 b(and)f(initialized)i(to)g(the)f(empt)m(y)150 3272 y(string)e(\(see)i(Section)f(8.2)g([User-De\014ned)g(F)-8 b(unctions],)31 b(page)h(149\).)275 3402 y(Lik)m(e)40 b(ev)m(ery)h(other)f(expression,)i(the)e(function)f(call)i(has)e(a)i(v) -5 b(alue,)42 b(whic)m(h)e(is)g(computed)f(b)m(y)h(the)150 3511 y(function)21 b(based)g(on)h(the)g(argumen)m(ts)g(y)m(ou)f(giv)m (e)i(it.)39 b(In)21 b(this)g(example,)j(the)e(v)-5 b(alue)22 b(of)g(`)p Fz(sqrt\()p Fk(argument)11 b Fz(\))p FB(')150 3621 y(is)23 b(the)f(square)h(ro)s(ot)g(of)f Fx(argumen)m(t)p FB(.)39 b(A)23 b(function)f(can)h(also)g(ha)m(v)m(e)h(side)f (e\013ects,)i(suc)m(h)e(as)f(assigning)i(v)-5 b(alues)150 3731 y(to)35 b(certain)g(v)-5 b(ariables)35 b(or)g(doing)f(I/O.)h(The)f (follo)m(wing)i(program)e(reads)g(n)m(um)m(b)s(ers,)g(one)h(n)m(um)m(b) s(er)e(p)s(er)150 3840 y(line,)e(and)f(prin)m(ts)g(the)g(square)g(ro)s (ot)h(of)g(eac)m(h)g(one:)390 3970 y Fz($)47 b(awk)g('{)h(print)e("The) h(square)f(root)g(of",)h($1,)g("is",)f(sqrt\($1\))g(}')390 4080 y(1)410 4194 y Fy(a)533 4190 y Fz(The)h(square)f(root)h(of)g(1)g (is)h(1)390 4299 y(3)410 4413 y Fy(a)533 4409 y Fz(The)f(square)f(root) h(of)g(3)g(is)h(1.73205)390 4518 y(5)410 4632 y Fy(a)533 4628 y Fz(The)f(square)f(root)h(of)g(5)g(is)h(2.23607)390 4738 y Fk(Ctrl-d)150 4961 y FA(5.14)68 b(Op)t(erator)46 b(Precedence)f(\(Ho)l(w)h(Op)t(erators)f(Nest\))150 5121 y Fx(Op)s(erator)22 b(precedence)28 b FB(determines)22 b(ho)m(w)g(op)s(erators)g(are)h(group)s(ed)e(when)g(di\013eren)m(t)i (op)s(erators)g(app)s(ear)150 5230 y(close)34 b(b)m(y)e(in)h(one)g (expression.)47 b(F)-8 b(or)33 b(example,)i(`)p Fz(*)p FB(')d(has)h(higher)f(precedence)h(than)g(`)p Fz(+)p FB(';)h(th)m(us,)f(`)p Fz(a)d(+)g(b)g(*)150 5340 y(c)p FB(')g(means)h(to)g(m)m(ultiply)f Fz(b)g FB(and)g Fz(c)p FB(,)g(and)g(then)g(add)g Fz(a)g FB(to)h(the)g(pro)s(duct)e(\(i.e.,)j (`)p Fz(a)e(+)g(\(b)g(*)g(c\))p FB('\).)p eop end %%Page: 91 103 TeXDict begin 91 102 bop 2631 -116 a Fr(Chapter)30 b(5:)41 b(Expressions)90 b FB(91)275 299 y(The)24 b(normal)i(precedence)g(of)f (the)h(op)s(erators)f(can)h(b)s(e)f(o)m(v)m(erruled)h(b)m(y)f(using)g (paren)m(theses.)40 b(Think)24 b(of)150 408 y(the)31 b(precedence)h(rules)f(as)g(sa)m(ying)h(where)f(the)g(paren)m(theses)g (are)h(assumed)e(to)i(b)s(e.)42 b(In)31 b(fact,)h(it)g(is)f(wise)150 518 y(to)h(alw)m(a)m(ys)h(use)e(paren)m(theses)g(whenev)m(er)h(there)f (is)g(an)h(un)m(usual)e(com)m(bination)j(of)e(op)s(erators,)h(b)s (ecause)150 628 y(other)d(p)s(eople)f(who)g(read)h(the)g(program)f(ma)m (y)h(not)g(remem)m(b)s(er)f(what)g(the)h(precedence)g(is)g(in)f(this)h (case.)150 737 y(Ev)m(en)d(exp)s(erienced)g(programmers)g(o)s (ccasionally)j(forget)e(the)f(exact)i(rules,)f(whic)m(h)f(leads)g(to)h (mistak)m(es.)150 847 y(Explicit)k(paren)m(theses)g(help)f(prev)m(en)m (t)h(an)m(y)g(suc)m(h)f(mistak)m(es.)275 981 y(When)41 b(op)s(erators)g(of)h(equal)f(precedence)h(are)g(used)e(together,)46 b(the)c(leftmost)g(op)s(erator)g(groups)150 1090 y(\014rst,)30 b(except)h(for)g(the)f(assignmen)m(t,)i(conditional,)g(and)e(exp)s (onen)m(tiation)h(op)s(erators,)g(whic)m(h)f(group)g(in)150 1200 y(the)g(opp)s(osite)h(order.)40 b(Th)m(us,)29 b(`)p Fz(a)h(-)h(b)f(+)g(c)p FB(')g(groups)f(as)h(`)p Fz(\(a)g(-)g(b\))g(+)g (c)p FB(')g(and)g(`)p Fz(a)g(=)g(b)g(=)g(c)p FB(')g(groups)g(as)g(`)p Fz(a)g(=)150 1310 y(\(b)g(=)g(c\))p FB('.)275 1443 y(The)22 b(precedence)h(of)f(pre\014x)g(unary)f(op)s(erators)i(do)s(es)f(not)h (matter)g(as)g(long)g(as)g(only)f(unary)g(op)s(erators)150 1553 y(are)27 b(in)m(v)m(olv)m(ed,)j(b)s(ecause)c(there)h(is)g(only)g (one)g(w)m(a)m(y)h(to)g(in)m(terpret)f(them:)39 b(innermost)26 b(\014rst.)39 b(Th)m(us,)27 b(`)p Fz($++i)p FB(')150 1663 y(means)36 b(`)p Fz($\(++i\))p FB(')e(and)h(`)p Fz(++$x)p FB(')g(means)h(`)p Fz(++\($x\))p FB('.)56 b(Ho)m(w)m(ev)m (er,)39 b(when)c(another)h(op)s(erator)g(follo)m(ws)h(the)150 1772 y(op)s(erand,)e(then)g(the)g(precedence)g(of)g(the)g(unary)f(op)s (erators)h(can)h(matter.)55 b(`)p Fz($x^2)p FB(')34 b(means)h(`)p Fz(\($x\)^2)p FB(',)150 1882 y(but)24 b(`)p Fz(-x^2)p FB(')f(means)i(`)p Fz(-\(x^2\))p FB(',)f(b)s(ecause)g(`)p Fz(-)p FB(')h(has)f(lo)m(w)m(er)i(precedence)e(than)h(`)p Fz(^)p FB(',)h(whereas)e(`)p Fz($)p FB(')g(has)g(higher)150 1991 y(precedence.)41 b(This)30 b(table)h(presen)m(ts)f Fz(awk)p FB('s)g(op)s(erators,)h(in)f(order)g(of)g(highest)h(to)g(lo)m (w)m(est)h(precedence:)150 2150 y Fz(\(...)o(\))241 b FB(Grouping.)150 2308 y Fz($)432 b FB(Field.)150 2466 y Fz(++)30 b(--)258 b FB(Incremen)m(t,)31 b(decremen)m(t.)150 2625 y Fz(^)f(**)306 b FB(Exp)s(onen)m(tiation.)42 b(These)30 b(op)s(erators)g(group)g(righ)m(t-to-left.)150 2783 y Fz(+)g(-)g(!)276 b FB(Unary)30 b(plus,)g(min)m(us,)g(logical)i(\\not.") 150 2941 y Fz(*)e(/)g(\045)276 b FB(Multiplication,)33 b(division,)d(mo)s(dulus.)150 3099 y Fz(+)g(-)354 b FB(Addition,)31 b(subtraction.)150 3258 y(String)f(Concatenation)630 3367 y(No)i(sp)s(ecial)g(sym)m(b)s(ol)f(is)g(used)g(to)h(indicate)h (concatenation.)46 b(The)31 b(op)s(erands)f(are)h(simply)630 3477 y(written)f(side)h(b)m(y)f(side)g(\(see)i(Section)f(5.6)g([String) g(Concatenation],)h(page)f(80\).)150 3635 y Fz(<)f(<=)g(==)g(!=)150 3745 y(>)g(>=)g(>>)g(|)g(|&)630 3854 y FB(Relational)k(and)e (redirection.)47 b(The)32 b(relational)i(op)s(erators)e(and)g(the)g (redirections)h(ha)m(v)m(e)630 3964 y(the)c(same)h(precedence)g(lev)m (el.)42 b(Characters)29 b(suc)m(h)g(as)g(`)p Fz(>)p FB(')h(serv)m(e)g (b)s(oth)e(as)i(relationals)h(and)630 4074 y(as)g(redirections;)g(the)f (con)m(text)j(distinguishes)c(b)s(et)m(w)m(een)i(the)g(t)m(w)m(o)h (meanings.)630 4208 y(Note)25 b(that)f(the)f(I/O)h(redirection)g(op)s (erators)f(in)g Fz(print)f FB(and)h Fz(printf)f FB(statemen)m(ts)j(b)s (elong)630 4317 y(to)j(the)f(statemen)m(t)i(lev)m(el,)h(not)e(to)g (expressions.)39 b(The)27 b(redirection)h(do)s(es)f(not)g(pro)s(duce)f (an)630 4427 y(expression)31 b(that)h(could)g(b)s(e)f(the)h(op)s(erand) e(of)i(another)f(op)s(erator.)45 b(As)31 b(a)h(result,)g(it)g(do)s(es) 630 4536 y(not)40 b(mak)m(e)g(sense)f(to)i(use)e(a)h(redirection)g(op)s (erator)f(near)h(another)f(op)s(erator)h(of)g(lo)m(w)m(er)630 4646 y(precedence)34 b(without)g(paren)m(theses.)51 b(Suc)m(h)33 b(com)m(binations)i(\(for)f(example,)i(`)p Fz(print)29 b(foo)630 4755 y(>)h(a)g(?)g(b)g(:)g(c)p FB('\),)k(result)f(in)g(syn)m (tax)g(errors.)48 b(The)32 b(correct)j(w)m(a)m(y)e(to)h(write)f(this)g (statemen)m(t)630 4865 y(is)d(`)p Fz(print)g(foo)f(>)h(\(a)g(?)g(b)g(:) g(c\))p FB('.)150 5023 y Fz(~)g(!~)306 b FB(Matc)m(hing,)32 b(nonmatc)m(hing.)150 5182 y Fz(in)384 b FB(Arra)m(y)31 b(mem)m(b)s(ership.)150 5340 y Fz(&&)384 b FB(Logical)32 b(\\and".)p eop end %%Page: 92 104 TeXDict begin 92 103 bop 150 -116 a FB(92)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz(||)384 b FB(Logical)32 b(\\or".)150 458 y Fz(?:)384 b FB(Conditional.)41 b(This)30 b(op)s(erator)h(groups)e(righ)m (t-to-left.)150 618 y Fz(=)h(+=)g(-=)g(*=)150 727 y(/=)g(\045=)g(^=)f (**=)630 837 y FB(Assignmen)m(t.)41 b(These)30 b(op)s(erators)h(group)f (righ)m(t)h(to)g(left.)390 996 y Fr(NOTE:)41 b FB(The)f(`)p Fz(|&)p FB(',)k(`)p Fz(**)p FB(',)g(and)c(`)p Fz(**=)p FB(')g(op)s(erators)h(are)g(not)g(sp)s(eci\014ed)f(b)m(y)h(POSIX.)f(F) -8 b(or)390 1106 y(maxim)m(um)30 b(p)s(ortabilit)m(y)-8 b(,)32 b(do)e(not)h(use)f(them.)p eop end %%Page: 93 105 TeXDict begin 93 104 bop 1801 -116 a Fr(Chapter)30 b(6:)41 b(P)m(atterns,)32 b(Actions,)f(and)f(V)-8 b(ariables)91 b FB(93)150 299 y Fu(6)80 b(P)l(atterns,)53 b(Actions,)f(and)h(V)-13 b(ariables)150 511 y FB(As)42 b(y)m(ou)g(ha)m(v)m(e)i(already)e(seen,)k (eac)m(h)d Fz(awk)e FB(statemen)m(t)j(consists)f(of)f(a)h(pattern)f (with)f(an)h(asso)s(ciated)150 620 y(action.)60 b(This)36 b(c)m(hapter)h(describ)s(es)f(ho)m(w)g(y)m(ou)h(build)f(patterns)g(and) g(actions,)k(what)c(kinds)f(of)i(things)150 730 y(y)m(ou)31 b(can)f(do)h(within)e(actions,)j(and)e Fz(awk)p FB('s)g(built-in)g(v)-5 b(ariables.)275 860 y(The)36 b(pattern-action)j(rules)e(and)f(the)h (statemen)m(ts)i(a)m(v)-5 b(ailable)40 b(for)d(use)f(within)h(actions)h (form)f(the)150 969 y(core)25 b(of)f Fz(awk)g FB(programming.)38 b(In)24 b(a)g(sense,)i(ev)m(erything)f(co)m(v)m(ered)h(up)d(to)i(here)f (has)g(b)s(een)g(the)g(foundation)150 1079 y(that)31 b(programs)f(are)h(built)f(on)g(top)h(of.)41 b(No)m(w)31 b(it's)g(time)g(to)g(start)g(building)e(something)i(useful.)150 1302 y FA(6.1)68 b(P)l(attern)46 b(Elemen)l(ts)150 1462 y FB(P)m(atterns)29 b(in)f Fz(awk)f FB(con)m(trol)i(the)f(execution)h (of)g(rules|a)f(rule)f(is)h(executed)h(when)e(its)i(pattern)f(matc)m (hes)150 1571 y(the)j(curren)m(t)f(input)f(record.)41 b(The)30 b(follo)m(wing)h(is)g(a)g(summary)e(of)h(the)h(t)m(yp)s(es)f (of)h Fz(awk)e FB(patterns:)150 1722 y Fz(/)p Fk(regular)f(expression) 11 b Fz(/)630 1831 y FB(A)40 b(regular)h(expression.)70 b(It)40 b(matc)m(hes)h(when)e(the)i(text)g(of)f(the)h(input)e(record)h (\014ts)g(the)630 1941 y(regular)31 b(expression.)40 b(\(See)31 b(Chapter)f(2)h([Regular)g(Expressions],)f(page)h(24.\))150 2091 y Fk(expression)630 2201 y FB(A)42 b(single)h(expression.)75 b(It)42 b(matc)m(hes)h(when)e(its)i(v)-5 b(alue)42 b(is)g(nonzero)g (\(if)h(a)f(n)m(um)m(b)s(er\))f(or)630 2311 y(non-n)m(ull)30 b(\(if)h(a)g(string\).)41 b(\(See)31 b(Section)g(6.1.2)h([Expressions)e (as)g(P)m(atterns],)i(page)f(93.\))150 2461 y Fk(pat1)p Fz(,)e Fk(pat2)630 2570 y FB(A)35 b(pair)f(of)h(patterns)g(separated)g (b)m(y)g(a)g(comma,)h(sp)s(ecifying)f(a)g(range)g(of)g(records.)53 b(The)630 2680 y(range)36 b(includes)g(b)s(oth)f(the)h(initial)h (record)e(that)i(matc)m(hes)g Fx(pat1)43 b FB(and)36 b(the)g(\014nal)f(record)630 2790 y(that)22 b(matc)m(hes)g Fx(pat2)p FB(.)39 b(\(See)21 b(Section)h(6.1.3)h([Sp)s(ecifying)e (Record)h(Ranges)g(with)f(P)m(atterns],)630 2899 y(page)31 b(95.\))150 3050 y Fz(BEGIN)150 3159 y(END)336 b FB(Sp)s(ecial)45 b(patterns)h(for)f(y)m(ou)g(to)h(supply)e(startup)h(or)g(clean)m(up)g (actions)i(for)e(y)m(our)g Fz(awk)630 3269 y FB(program.)40 b(\(See)31 b(Section)h(6.1.4)g([The)e Fz(BEGIN)f FB(and)h Fz(END)f FB(Sp)s(ecial)i(P)m(atterns],)g(page)h(96.\))150 3419 y Fk(empty)240 b FB(The)27 b(empt)m(y)h(pattern)g(matc)m(hes)g(ev) m(ery)h(input)d(record.)40 b(\(See)28 b(Section)g(6.1.5)i([The)d(Empt)m (y)630 3529 y(P)m(attern],)32 b(page)f(97.\))150 3719 y Fj(6.1.1)63 b(Regular)40 b(Expressions)j(as)e(P)m(atterns)150 3866 y FB(Regular)30 b(expressions)f(are)g(one)h(of)f(the)h(\014rst)e (kinds)h(of)g(patterns)g(presen)m(ted)g(in)g(this)h(b)s(o)s(ok.)39 b(This)29 b(kind)150 3976 y(of)35 b(pattern)g(is)h(simply)e(a)i(regexp) f(constan)m(t)h(in)f(the)g(pattern)h(part)f(of)g(a)g(rule.)55 b(Its)35 b(meaning)g(is)g(`)p Fz($0)30 b(~)150 4085 y(/)p Fk(pattern)11 b Fz(/)p FB('.)36 b(The)25 b(pattern)g(matc)m(hes)h(when) f(the)g(input)f(record)h(matc)m(hes)h(the)g(regexp.)39 b(F)-8 b(or)26 b(example:)390 4215 y Fz(/foo|bar|baz/)92 b({)47 b(buzzwords++)e(})390 4325 y(END)572 b({)47 b(print)g (buzzwords,)e("buzzwords)g(seen")h(})150 4515 y Fj(6.1.2)63 b(Expressions)42 b(as)f(P)m(atterns)150 4662 y FB(An)m(y)e Fz(awk)g FB(expression)g(is)g(v)-5 b(alid)40 b(as)f(an)g Fz(awk)f FB(pattern.)68 b(The)39 b(pattern)g(matc)m(hes)h(if)g(the)f (expression's)150 4772 y(v)-5 b(alue)31 b(is)g(nonzero)h(\(if)f(a)g(n)m (um)m(b)s(er\))f(or)h(non-n)m(ull)g(\(if)g(a)h(string\).)42 b(The)31 b(expression)g(is)g(reev)-5 b(aluated)32 b(eac)m(h)150 4881 y(time)g(the)f(rule)g(is)g(tested)h(against)g(a)g(new)e(input)g (record.)43 b(If)31 b(the)g(expression)g(uses)g(\014elds)f(suc)m(h)h (as)g Fz($1)p FB(,)150 4991 y(the)37 b(v)-5 b(alue)37 b(dep)s(ends)e(directly)i(on)f(the)h(new)f(input)g(record's)h(text;)k (otherwise,)d(it)g(dep)s(ends)c(on)j(only)150 5100 y(what)30 b(has)g(happ)s(ened)f(so)i(far)f(in)g(the)g(execution)i(of)e(the)h Fz(awk)f FB(program.)275 5230 y(Comparison)24 b(expressions,)j(using)e (the)g(comparison)h(op)s(erators)g(describ)s(ed)e(in)h(Section)i(5.10)g ([V)-8 b(ari-)150 5340 y(able)38 b(T)m(yping)e(and)h(Comparison)f (Expressions],)j(page)f(85,)h(are)f(a)f(v)m(ery)h(common)f(kind)f(of)i (pattern.)p eop end %%Page: 94 106 TeXDict begin 94 105 bop 150 -116 a FB(94)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(Regexp)38 b(matc)m(hing)g(and)f(nonmatc)m(hing)g(are)h(also)g (v)m(ery)f(common)h(expressions.)61 b(The)36 b(left)i(op)s(erand)150 408 y(of)i(the)g(`)p Fz(~)p FB(')f(and)g(`)p Fz(!~)p FB(')h(op)s(erators)g(is)g(a)g(string.)68 b(The)39 b(righ)m(t)h(op)s (erand)f(is)h(either)g(a)g(constan)m(t)h(regular)150 518 y(expression)31 b(enclosed)i(in)e(slashes)h(\()p Fz(/)p Fk(regexp)11 b Fz(/)p FB(\),)30 b(or)h(an)m(y)h(expression)f (whose)h(string)f(v)-5 b(alue)32 b(is)g(used)f(as)150 628 y(a)40 b(dynamic)f(regular)h(expression)f(\(see)h(Section)h(2.8)f ([Using)g(Dynamic)g(Regexps],)j(page)d(34\).)69 b(The)150 737 y(follo)m(wing)35 b(example)e(prin)m(ts)g(the)g(second)g(\014eld)g (of)g(eac)m(h)h(input)e(record)h(whose)g(\014rst)g(\014eld)f(is)h (precisely)150 847 y(`)p Fz(foo)p FB(':)390 976 y Fz($)47 b(awk)g('$1)g(==)g("foo")g({)g(print)g($2)g(}')g(BBS-list)150 1106 y FB(\(There)37 b(is)f(no)h(output,)h(b)s(ecause)f(there)g(is)g (no)f(BBS)h(site)h(with)e(the)h(exact)i(name)d(`)p Fz(foo)p FB('.\))60 b(Con)m(trast)150 1215 y(this)28 b(with)f(the)h(follo)m (wing)h(regular)f(expression)f(matc)m(h,)i(whic)m(h)f(accepts)h(an)m(y) f(record)f(with)g(a)h(\014rst)f(\014eld)150 1325 y(that)k(con)m(tains)h (`)p Fz(foo)p FB(':)390 1455 y Fz($)47 b(awk)g('$1)g(~)h(/foo/)e({)i (print)e($2)h(}')g(BBS-list)410 1568 y Fy(a)533 1564 y Fz(555-1234)410 1678 y Fy(a)533 1674 y Fz(555-6699)410 1787 y Fy(a)533 1783 y Fz(555-6480)410 1897 y Fy(a)533 1893 y Fz(555-2127)275 2022 y FB(A)41 b(regexp)h(constan)m(t)g(as)g(a)g (pattern)f(is)h(also)g(a)g(sp)s(ecial)g(case)g(of)g(an)f(expression)g (pattern.)74 b(The)150 2132 y(expression)29 b Fz(/foo/)f FB(has)g(the)i(v)-5 b(alue)29 b(one)h(if)f(`)p Fz(foo)p FB(')g(app)s(ears)f(in)h(the)g(curren)m(t)g(input)f(record.)41 b(Th)m(us,)28 b(as)i(a)150 2242 y(pattern,)h Fz(/foo/)e FB(matc)m(hes)i(an)m(y)g(record)f(con)m(taining)i(`)p Fz(foo)p FB('.)275 2371 y(Bo)s(olean)e(expressions)f(are)h(also)g (commonly)g(used)e(as)i(patterns.)40 b(Whether)30 b(the)f(pattern)h (matc)m(hes)150 2481 y(an)i(input)f(record)g(dep)s(ends)f(on)i(whether) f(its)i(sub)s(expressions)d(matc)m(h.)46 b(F)-8 b(or)32 b(example,)h(the)f(follo)m(wing)150 2590 y(command)e(prin)m(ts)g(all)h (the)g(records)f(in)g(`)p Fz(BBS-list)p FB(')f(that)i(con)m(tain)g(b)s (oth)f(`)p Fz(2400)p FB(')g(and)f(`)p Fz(foo)p FB(':)390 2720 y Fz($)47 b(awk)g('/2400/)f(&&)h(/foo/')f(BBS-list)410 2833 y Fy(a)533 2829 y Fz(fooey)381 b(555-1234)236 b(2400/1200/300)f(B) 275 2959 y FB(The)36 b(follo)m(wing)j(command)e(prin)m(ts)g(all)h (records)f(in)g(`)p Fz(BBS-list)p FB(')f(that)i(con)m(tain)h Fw(either)47 b FB(`)p Fz(2400)p FB(')37 b(or)150 3068 y(`)p Fz(foo)p FB(')30 b(\(or)h(b)s(oth,)f(of)g(course\):)390 3198 y Fz($)47 b(awk)g('/2400/)f(||)h(/foo/')f(BBS-list)410 3312 y Fy(a)533 3308 y Fz(alpo-net)237 b(555-3412)f(2400/1200/300)f(A) 410 3421 y Fy(a)533 3417 y Fz(bites)381 b(555-1675)236 b(2400/1200/300)f(A)410 3531 y Fy(a)533 3527 y Fz(fooey)381 b(555-1234)236 b(2400/1200/300)f(B)410 3640 y Fy(a)533 3636 y Fz(foot)429 b(555-6699)236 b(1200/300)475 b(B)410 3750 y Fy(a)533 3746 y Fz(macfoo)333 b(555-6480)236 b(1200/300)475 b(A)410 3860 y Fy(a)533 3856 y Fz(sdace)381 b(555-3430)236 b(2400/1200/300)f(A)410 3969 y Fy(a)533 3965 y Fz(sabafoo)285 b(555-2127)236 b(1200/300)475 b(C)275 4095 y FB(The)31 b(follo)m(wing)j(command)e(prin)m(ts)g(all)h(records)f(in)g(`)p Fz(BBS-list)p FB(')f(that)i(do)f Fw(not)42 b FB(con)m(tain)33 b(the)g(string)150 4204 y(`)p Fz(foo)p FB(':)390 4334 y Fz($)47 b(awk)g('!)h(/foo/')e(BBS-list)410 4447 y Fy(a)533 4443 y Fz(aardvark)237 b(555-5553)f(1200/300)475 b(B)410 4557 y Fy(a)533 4553 y Fz(alpo-net)237 b(555-3412)f(2400/1200/300)f(A) 410 4667 y Fy(a)533 4663 y Fz(barfly)333 b(555-7685)236 b(1200/300)475 b(A)410 4776 y Fy(a)533 4772 y Fz(bites)381 b(555-1675)236 b(2400/1200/300)f(A)410 4886 y Fy(a)533 4882 y Fz(camelot)285 b(555-0542)236 b(300)715 b(C)410 4995 y Fy(a)533 4991 y Fz(core)429 b(555-2912)236 b(1200/300)475 b(C)410 5105 y Fy(a)533 5101 y Fz(sdace)381 b(555-3430)236 b(2400/1200/300)f(A)275 5230 y FB(The)32 b(sub)s(expressions)e(of)j(a)g (Bo)s(olean)g(op)s(erator)g(in)f(a)h(pattern)g(can)g(b)s(e)e(constan)m (t)j(regular)f(expres-)150 5340 y(sions,)k(comparisons,)g(or)e(an)m(y)h (other)f Fz(awk)g FB(expressions.)55 b(Range)36 b(patterns)g(are)g(not) f(expressions,)i(so)p eop end %%Page: 95 107 TeXDict begin 95 106 bop 1801 -116 a Fr(Chapter)30 b(6:)41 b(P)m(atterns,)32 b(Actions,)f(and)f(V)-8 b(ariables)91 b FB(95)150 299 y(they)29 b(cannot)f(app)s(ear)g(inside)g(Bo)s(olean)i (patterns.)40 b(Lik)m(ewise,)30 b(the)f(sp)s(ecial)g(patterns)f Fz(BEGIN)f FB(and)h Fz(END)p FB(,)150 408 y(whic)m(h)f(nev)m(er)h(matc) m(h)h(an)m(y)e(input)g(record,)h(are)g(not)g(expressions)f(and)g (cannot)h(app)s(ear)f(inside)h(Bo)s(olean)150 518 y(patterns.)150 718 y Fj(6.1.3)63 b(Sp)s(ecifying)42 b(Record)f(Ranges)g(with)f(P)m (atterns)150 865 y FB(A)i Fx(range)g(pattern)g FB(is)g(made)g(of)g(t)m (w)m(o)h(patterns)f(separated)g(b)m(y)g(a)g(comma,)k(in)41 b(the)h(form)g(`)p Fk(begpat)p Fz(,)150 975 y Fk(endpat)11 b FB('.)37 b(It)27 b(is)f(used)g(to)h(matc)m(h)g(ranges)g(of)g (consecutiv)m(e)h(input)d(records.)39 b(The)26 b(\014rst)g(pattern,)i Fx(b)s(egpat)p FB(,)150 1084 y(con)m(trols)c(where)d(the)i(range)f(b)s (egins,)i(while)e Fx(endpat)i FB(con)m(trols)f(where)f(the)g(pattern)h (ends.)37 b(F)-8 b(or)23 b(example,)150 1194 y(the)31 b(follo)m(wing:)390 1329 y Fz(awk)47 b('$1)g(==)g("on",)f($1)i(==)f ("off"')f(myfile)150 1465 y FB(prin)m(ts)30 b(ev)m(ery)h(record)f(in)g (`)p Fz(myfile)p FB(')g(b)s(et)m(w)m(een)h(`)p Fz(on)p FB('/`)p Fz(off)p FB(')f(pairs,)g(inclusiv)m(e.)275 1600 y(A)40 b(range)g(pattern)g(starts)h(out)f(b)m(y)g(matc)m(hing)h Fx(b)s(egpat)h FB(against)f(ev)m(ery)g(input)e(record.)70 b(When)40 b(a)150 1710 y(record)30 b(matc)m(hes)i Fx(b)s(egpat)p FB(,)f(the)g(range)g(pattern)g(is)f Fx(turned)g(on)g FB(and)g(the)h(range)g(pattern)f(matc)m(hes)i(this)150 1820 y(record)25 b(as)g(w)m(ell.)40 b(As)24 b(long)i(as)f(the)g(range)g (pattern)g(sta)m(ys)h(turned)d(on,)j(it)g(automatically)h(matc)m(hes)f (ev)m(ery)150 1929 y(input)e(record)h(read.)39 b(The)25 b(range)h(pattern)f(also)h(matc)m(hes)g Fx(endpat)h FB(against)g(ev)m (ery)f(input)e(record;)j(when)150 2039 y(this)f(succeeds,)i(the)f (range)g(pattern)f(is)h(turned)e(o\013)i(again)g(for)g(the)f(follo)m (wing)i(record.)39 b(Then)26 b(the)h(range)150 2148 y(pattern)j(go)s (es)h(bac)m(k)h(to)f(c)m(hec)m(king)h Fx(b)s(egpat)g FB(against)g(eac)m(h)g(record.)275 2284 y(The)26 b(record)i(that)g (turns)e(on)h(the)h(range)g(pattern)f(and)g(the)h(one)g(that)g(turns)e (it)i(o\013)g(b)s(oth)e(matc)m(h)j(the)150 2393 y(range)i(pattern.)43 b(If)31 b(y)m(ou)g(don't)g(w)m(an)m(t)h(to)g(op)s(erate)f(on)g(these)h (records,)f(y)m(ou)g(can)h(write)f Fz(if)f FB(statemen)m(ts)150 2503 y(in)g(the)h(rule's)f(action)i(to)f(distinguish)e(them)i(from)e (the)i(records)f(y)m(ou)h(are)g(in)m(terested)g(in.)275 2638 y(It)36 b(is)h(p)s(ossible)f(for)h(a)g(pattern)f(to)i(b)s(e)e (turned)f(on)i(and)f(o\013)h(b)m(y)g(the)f(same)h(record.)60 b(If)36 b(the)h(record)150 2748 y(satis\014es)j(b)s(oth)f(conditions,)k (then)c(the)h(action)h(is)f(executed)h(for)e(just)g(that)i(record.)69 b(F)-8 b(or)40 b(example,)150 2858 y(supp)s(ose)30 b(there)h(is)g(text) h(b)s(et)m(w)m(een)g(t)m(w)m(o)g(iden)m(tical)h(mark)m(ers)e(\(e.g.,)i (the)e(`)p Fz(\045)p FB(')h(sym)m(b)s(ol\),)f(eac)m(h)i(on)d(its)i(o)m (wn)150 2967 y(line,)40 b(that)f(should)e(b)s(e)g(ignored.)64 b(A)38 b(\014rst)f(attempt)i(w)m(ould)f(b)s(e)f(to)i(com)m(bine)g(a)f (range)g(pattern)g(that)150 3077 y(describ)s(es)33 b(the)g(delimited)h (text)g(with)f(the)h Fz(next)e FB(statemen)m(t)j(\(not)f(discussed)f(y) m(et,)i(see)f(Section)g(6.4.8)150 3186 y([The)k Fz(next)e FB(Statemen)m(t],)42 b(page)d(105\).)65 b(This)37 b(causes)i Fz(awk)e FB(to)h(skip)g(an)m(y)g(further)f(pro)s(cessing)h(of)g(the)150 3296 y(curren)m(t)31 b(record)h(and)f(start)h(o)m(v)m(er)h(again)g (with)e(the)h(next)f(input)g(record.)44 b(Suc)m(h)31 b(a)h(program)g(lo)s(oks)g(lik)m(e)150 3405 y(this:)390 3541 y Fz(/^\045$/,/^\045$/)188 b({)47 b(next)g(})1106 3651 y({)g(print)g(})150 3786 y FB(This)30 b(program)h(fails)g(b)s (ecause)g(the)h(range)f(pattern)g(is)g(b)s(oth)f(turned)g(on)h(and)f (turned)g(o\013)i(b)m(y)e(the)i(\014rst)150 3896 y(line,)e(whic)m(h)f (just)f(has)h(a)g(`)p Fz(\045)p FB(')g(on)g(it.)41 b(T)-8 b(o)30 b(accomplish)f(this)g(task,)h(write)g(the)f(program)g(in)f(the)h (follo)m(wing)150 4005 y(manner,)h(using)g(a)g(\015ag:)390 4141 y Fz(/^\045$/)237 b({)48 b(skip)e(=)i(!)f(skip;)g(next)f(})390 4250 y(skip)h(==)g(1)g({)h(next)e(})i(#)f(skip)g(lines)f(with)h(`skip') f(set)275 4386 y FB(In)29 b(a)i(range)g(pattern,)g(the)g(comma)g(\(`)p Fz(,)p FB('\))h(has)e(the)h(lo)m(w)m(est)h(precedence)f(of)g(all)h(the) e(op)s(erators)h(\(i.e.,)150 4495 y(it)26 b(is)f(ev)-5 b(aluated)27 b(last\).)40 b(Th)m(us,)25 b(the)h(follo)m(wing)g(program) f(attempts)i(to)f(com)m(bine)g(a)f(range)h(pattern)f(with)150 4605 y(another,)31 b(simpler)f(test:)390 4740 y Fz(echo)47 b(Yes)g(|)g(awk)g('/1/,/2/)e(||)j(/Yes/')275 4876 y FB(The)38 b(in)m(ten)m(t)i(of)f(this)g(program)g(is)f(`)p Fz(\(/1/,/2/\))29 b(||)g(/Yes/)p FB('.)65 b(Ho)m(w)m(ev)m(er,)44 b Fz(awk)38 b FB(in)m(terprets)h(this)g(as)150 4985 y(`)p Fz(/1/,)29 b(\(/2/)h(||)f(/Yes/\))p FB('.)46 b(This)32 b(cannot)h(b)s(e)f(c)m (hanged)h(or)f(w)m(ork)m(ed)h(around;)g(range)g(patterns)f(do)h(not)150 5095 y(com)m(bine)e(with)f(other)h(patterns:)390 5230 y Fz($)47 b(echo)g(Yes)g(|)g(gawk)g('\(/1/,/2/\))e(||)i(/Yes/')p 410 5283 217 5 v 410 5363 5 81 v 433 5343 a Fl(erro)m(r)p 622 5363 V 410 5367 217 5 v 724 5340 a Fz(gawk:)f(cmd.)h(line:1:)f (\(/1/,/2/\))f(||)i(/Yes/)p eop end %%Page: 96 108 TeXDict begin 96 107 bop 150 -116 a FB(96)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)p 410 241 217 5 v 410 322 5 81 v 433 302 a Fl(erro)m(r)p 622 322 V 410 326 217 5 v 724 299 a Fz(gawk:)46 b(cmd.)h(line:1:)523 b(^)48 b(parse)e(error)p 410 351 V 410 431 5 81 v 433 411 a Fl(erro)m(r)p 622 431 V 410 436 217 5 v 724 408 a Fz(gawk:)g(cmd.)h(line:2:)f(\(/1/,/2/\))f(||)i(/Yes/)p 410 461 V 410 541 5 81 v 433 521 a Fl(erro)m(r)p 622 541 V 410 545 217 5 v 724 518 a Fz(gawk:)f(cmd.)h(line:2:)905 b(^)47 b(unexpected)e(newline)150 768 y Fj(6.1.4)63 b(The)41 b Fh(BEGIN)h Fj(and)f Fh(END)g Fj(Sp)s(ecial)g(P)m(atterns)150 915 y FB(All)26 b(the)g(patterns)f(describ)s(ed)g(so)h(far)f(are)h(for) f(matc)m(hing)i(input)e(records.)39 b(The)25 b Fz(BEGIN)f FB(and)h Fz(END)f FB(sp)s(ecial)150 1024 y(patterns)33 b(are)h(di\013eren)m(t.)50 b(They)33 b(supply)f(startup)h(and)f(clean)m (up)i(actions)h(for)e Fz(awk)f FB(programs.)49 b Fz(BEGIN)150 1134 y FB(and)31 b Fz(END)f FB(rules)h(m)m(ust)g(ha)m(v)m(e)h(actions;) i(there)d(is)g(no)h(default)f(action)i(for)e(these)g(rules)g(b)s (ecause)g(there)h(is)150 1244 y(no)e(curren)m(t)g(record)g(when)f(they) h(run.)40 b Fz(BEGIN)28 b FB(and)i Fz(END)f FB(rules)h(are)g(often)h (referred)e(to)i(as)f(\\)p Fz(BEGIN)g FB(and)150 1353 y Fz(END)f FB(blo)s(c)m(ks")j(b)m(y)e(long-time)i Fz(awk)d FB(programmers.)150 1603 y Fj(6.1.4.1)63 b(Startup)41 b(and)g(Clean)m(up)f(Actions)150 1750 y FB(A)32 b Fz(BEGIN)f FB(rule)h(is)g(executed)h(once)f(only)-8 b(,)34 b(b)s(efore)d(the)i (\014rst)e(input)g(record)h(is)g(read.)46 b(Lik)m(ewise,)34 b(an)e Fz(END)150 1860 y FB(rule)e(is)g(executed)i(once)f(only)-8 b(,)31 b(after)g(all)g(the)g(input)e(is)i(read.)40 b(F)-8 b(or)31 b(example:)390 2045 y Fz($)47 b(awk)g(')390 2154 y(>)g(BEGIN)g({)g(print)g("Analysis)e(of)i(\\"foo\\"")f(})390 2264 y(>)h(/foo/)g({)g(++n)g(})390 2374 y(>)g(END)143 b({)47 b(print)g("\\"foo\\")e(appears",)g(n,)j("times.")d(}')i (BBS-list)410 2487 y Fy(a)533 2483 y Fz(Analysis)f(of)h("foo")410 2597 y Fy(a)533 2593 y Fz("foo")g(appears)e(4)j(times.)275 2778 y FB(This)43 b(program)h(\014nds)e(the)j(n)m(um)m(b)s(er)d(of)j (records)f(in)g(the)g(input)f(\014le)h(`)p Fz(BBS-list)p FB(')f(that)i(con)m(tain)150 2888 y(the)c(string)g(`)p Fz(foo)p FB('.)72 b(The)41 b Fz(BEGIN)e FB(rule)i(prin)m(ts)f(a)h (title)i(for)e(the)g(rep)s(ort.)72 b(There)40 b(is)h(no)g(need)g(to)g (use)150 2997 y(the)d Fz(BEGIN)f FB(rule)h(to)h(initialize)i(the)d (coun)m(ter)h Fz(n)f FB(to)h(zero,)i(since)e Fz(awk)e FB(do)s(es)h(this)g(automatically)j(\(see)150 3107 y(Section)36 b(5.3)g([V)-8 b(ariables],)38 b(page)d(76\).)55 b(The)35 b(second)g(rule)f(incremen)m(ts)h(the)g(v)-5 b(ariable)36 b Fz(n)e FB(ev)m(ery)i(time)g(a)150 3216 y(record)28 b(con)m(taining)h(the)f(pattern)h(`)p Fz(foo)p FB(')e(is)h(read.)40 b(The)27 b Fz(END)g FB(rule)h(prin)m(ts)f(the)i(v)-5 b(alue)28 b(of)g Fz(n)g FB(at)g(the)g(end)g(of)150 3326 y(the)j(run.)275 3511 y(The)26 b(sp)s(ecial)i(patterns)f Fz(BEGIN)f FB(and)g Fz(END)h FB(cannot)g(b)s(e)g(used)f(in)h(ranges)g (or)g(with)g(Bo)s(olean)i(op)s(erators)150 3621 y(\(indeed,)43 b(they)d(cannot)g(b)s(e)g(used)f(with)h(an)m(y)g(op)s(erators\).)70 b(An)40 b Fz(awk)f FB(program)g(ma)m(y)i(ha)m(v)m(e)g(m)m(ultiple)150 3730 y Fz(BEGIN)e FB(and/or)h Fz(END)f FB(rules.)70 b(They)40 b(are)h(executed)g(in)f(the)g(order)g(in)g(whic)m(h)g(they)h(app)s (ear:)60 b(all)41 b(the)150 3840 y Fz(BEGIN)f FB(rules)h(at)h(startup)f (and)g(all)h(the)f Fz(END)g FB(rules)g(at)h(termination.)74 b Fz(BEGIN)40 b FB(and)h Fz(END)f FB(rules)h(ma)m(y)150 3949 y(b)s(e)34 b(in)m(termixed)g(with)g(other)h(rules.)51 b(This)34 b(feature)g(w)m(as)h(added)f(in)g(the)g(1987)i(v)m(ersion)f (of)f Fz(awk)f FB(and)h(is)150 4059 y(included)j(in)g(the)h(POSIX)f (standard.)61 b(The)37 b(original)i(\(1978\))h(v)m(ersion)e(of)g Fz(awk)f FB(required)g(the)g Fz(BEGIN)150 4169 y FB(rule)f(to)g(b)s(e)g (placed)g(at)h(the)f(b)s(eginning)f(of)h(the)h(program,)g(the)f Fz(END)f FB(rule)h(to)h(b)s(e)e(placed)h(at)h(the)f(end,)150 4278 y(and)27 b(only)h(allo)m(w)m(ed)h(one)f(of)g(eac)m(h.)41 b(This)27 b(is)h(no)f(longer)h(required,)g(but)f(it)h(is)g(a)g(go)s(o)s (d)g(idea)g(to)g(follo)m(w)h(this)150 4388 y(template)j(in)e(terms)g (of)h(program)f(organization)i(and)e(readabilit)m(y)-8 b(.)275 4573 y(Multiple)22 b Fz(BEGIN)e FB(and)h Fz(END)g FB(rules)g(are)h(useful)f(for)g(writing)h(library)f(functions,)i(b)s (ecause)f(eac)m(h)g(library)150 4682 y(\014le)j(can)h(ha)m(v)m(e)h(its) f(o)m(wn)f Fz(BEGIN)f FB(and/or)h Fz(END)g FB(rule)g(to)h(do)f(its)h(o) m(wn)f(initialization)k(and/or)c(clean)m(up.)39 b(The)150 4792 y(order)25 b(in)g(whic)m(h)g(library)f(functions)h(are)h(named)f (on)g(the)g(command)g(line)h(con)m(trols)g(the)g(order)e(in)h(whic)m(h) 150 4902 y(their)37 b Fz(BEGIN)f FB(and)h Fz(END)f FB(rules)h(are)h (executed.)62 b(Therefore,)39 b(y)m(ou)f(ha)m(v)m(e)g(to)g(b)s(e)f (careful)h(when)e(writing)150 5011 y(suc)m(h)31 b(rules)f(in)h(library) f(\014les)h(so)g(that)h(the)f(order)f(in)h(whic)m(h)g(they)g(are)g (executed)h(do)s(esn't)e(matter.)44 b(See)150 5121 y(Section)f(11.2)g ([Command-Line)f(Options],)j(page)e(173,)j(for)c(more)g(information)h (on)f(using)f(library)150 5230 y(functions.)50 b(See)34 b(Chapter)f(12)i([A)f(Library)e(of)i Fz(awk)f FB(F)-8 b(unctions],)36 b(page)e(181,)i(for)d(a)i(n)m(um)m(b)s(er)d(of)i (useful)150 5340 y(library)c(functions.)p eop end %%Page: 97 109 TeXDict begin 97 108 bop 1801 -116 a Fr(Chapter)30 b(6:)41 b(P)m(atterns,)32 b(Actions,)f(and)f(V)-8 b(ariables)91 b FB(97)275 299 y(If)25 b(an)g Fz(awk)g FB(program)h(has)f(only)h(a)g Fz(BEGIN)e FB(rule)h(and)g(no)h(other)g(rules,)g(then)g(the)g(program)f (exits)h(after)150 408 y(the)31 b Fz(BEGIN)f FB(rule)g(is)h(run.)1014 375 y Fo(1)1092 408 y FB(Ho)m(w)m(ev)m(er,)i(if)e(an)g Fz(END)f FB(rule)h(exists,)h(then)e(the)h(input)f(is)h(read,)g(ev)m(en) h(if)f(there)150 518 y(are)c(no)f(other)h(rules)f(in)h(the)g(program.) 39 b(This)26 b(is)g(necessary)h(in)g(case)g(the)g Fz(END)f FB(rule)g(c)m(hec)m(ks)i(the)f Fz(FNR)f FB(and)150 628 y Fz(NR)k FB(v)-5 b(ariables.)150 829 y Fj(6.1.4.2)63 b(Input/Output)42 b(from)g Fh(BEGIN)f Fj(and)g Fh(END)h Fj(Rules)150 976 y FB(There)29 b(are)i(sev)m(eral)g(\(sometimes)g (subtle\))f(p)s(oin)m(ts)g(to)h(remem)m(b)s(er)e(when)g(doing)h(I/O)g (from)f(a)h Fz(BEGIN)f FB(or)150 1085 y Fz(END)36 b FB(rule.)58 b(The)36 b(\014rst)g(has)g(to)i(do)e(with)g(the)h(v)-5 b(alue)37 b(of)g Fz($0)e FB(in)i(a)g Fz(BEGIN)e FB(rule.)58 b(Because)38 b Fz(BEGIN)d FB(rules)150 1195 y(are)k(executed)g(b)s (efore)f(an)m(y)h(input)e(is)i(read,)h(there)f(simply)f(is)g(no)g (input)g(record,)i(and)e(therefore)h(no)150 1305 y(\014elds,)f(when)e (executing)i Fz(BEGIN)d FB(rules.)59 b(References)38 b(to)f Fz($0)f FB(and)g(the)h(\014elds)f(yield)h(a)h(n)m(ull)e(string)h (or)150 1414 y(zero,)30 b(dep)s(ending)e(up)s(on)f(the)i(con)m(text.)42 b(One)28 b(w)m(a)m(y)i(to)g(giv)m(e)g Fz($0)e FB(a)h(real)h(v)-5 b(alue)29 b(is)g(to)g(execute)i(a)e Fz(getline)150 1524 y FB(command)45 b(without)g(a)h(v)-5 b(ariable)45 b(\(see)h(Section)g (3.8)h([Explicit)f(Input)d(with)i Fz(getline)p FB(],)j(page)d(51\).)150 1633 y(Another)30 b(w)m(a)m(y)i(is)e(simply)g(to)h(assign)g(a)g(v)-5 b(alue)30 b(to)h Fz($0)p FB(.)275 1770 y(The)f(second)i(p)s(oin)m(t)f (is)h(similar)g(to)g(the)g(\014rst)e(but)h(from)g(the)h(other)f (direction.)45 b(T)-8 b(raditionally)g(,)34 b(due)150 1879 y(largely)29 b(to)g(implemen)m(tation)g(issues,)g Fz($0)e FB(and)g Fz(NF)g FB(w)m(ere)i Fw(unde\014ne)-5 b(d)38 b FB(inside)27 b(an)h Fz(END)f FB(rule.)40 b(The)27 b(POSIX)150 1989 y(standard)i(sp)s(eci\014es)h(that)g Fz(NF)g FB(is)g(a)m(v)-5 b(ailable)32 b(in)e(an)f Fz(END)h FB(rule.)40 b(It)30 b(con)m(tains)h(the)f(n)m(um)m(b)s(er)f(of)h (\014elds)f(from)150 2099 y(the)34 b(last)g(input)f(record.)51 b(Most)35 b(probably)e(due)g(to)h(an)g(o)m(v)m(ersigh)m(t,)j(the)d (standard)f(do)s(es)g(not)h(sa)m(y)g(that)150 2208 y Fz($0)j FB(is)g(also)h(preserv)m(ed,)h(although)e(logically)j(one)e(w)m (ould)f(think)f(that)i(it)g(should)e(b)s(e.)61 b(In)36 b(fact,)k Fz(gawk)150 2318 y FB(do)s(es)32 b(preserv)m(e)g(the)g(v)-5 b(alue)33 b(of)f Fz($0)g FB(for)g(use)f(in)h Fz(END)f FB(rules.)46 b(Be)33 b(a)m(w)m(are,)h(ho)m(w)m(ev)m(er,)g(that)f(Unix)f Fz(awk)p FB(,)g(and)150 2427 y(p)s(ossibly)d(other)i(implemen)m (tations,)h(do)e(not.)275 2564 y(The)25 b(third)g(p)s(oin)m(t)g(follo)m (ws)i(from)e(the)h(\014rst)f(t)m(w)m(o.)41 b(The)25 b(meaning)h(of)g(`) p Fz(print)p FB(')e(inside)i(a)g Fz(BEGIN)e FB(or)i Fz(END)150 2673 y FB(rule)34 b(is)g(the)g(same)h(as)g(alw)m(a)m(ys:)49 b(`)p Fz(print)30 b($0)p FB('.)51 b(If)34 b Fz($0)g FB(is)g(the)g(n)m (ull)g(string,)i(then)e(this)g(prin)m(ts)f(an)i(empt)m(y)150 2783 y(line.)44 b(Man)m(y)33 b(long)f(time)g Fz(awk)e FB(programmers)h(use)h(an)f(unadorned)f(`)p Fz(print)p FB(')g(in)i Fz(BEGIN)e FB(and)h Fz(END)f FB(rules,)150 2893 y(to)h(mean)e(`)p Fz(print)h("")o FB(',)h(relying)f(on)g Fz($0)f FB(b)s(eing)g(n)m(ull.)41 b(Although)30 b(one)g(migh)m(t)g (generally)h(get)g(a)m(w)m(a)m(y)h(with)150 3002 y(this)d(in)g Fz(BEGIN)f FB(rules,)h(it)h(is)f(a)h(v)m(ery)f(bad)g(idea)h(in)e Fz(END)h FB(rules,)g(at)h(least)g(in)f Fz(gawk)p FB(.)39 b(It)30 b(is)f(also)h(p)s(o)s(or)e(st)m(yle,)150 3112 y(since)j(if)f(an)g(empt)m(y)h(line)g(is)f(needed)g(in)g(the)h(output,) f(the)h(program)f(should)f(prin)m(t)h(one)h(explicitly)-8 b(.)275 3248 y(Finally)g(,)30 b(the)e Fz(next)e FB(and)i Fz(nextfile)d FB(statemen)m(ts)30 b(are)e(not)g(allo)m(w)m(ed)i(in)e(a) g Fz(BEGIN)e FB(rule,)j(b)s(ecause)f(the)150 3358 y(implicit)23 b(read-a-record-and-matc)m(h-against-the-rules)j(lo)s(op)c(has)f(not)i (started)f(y)m(et.)39 b(Similarly)-8 b(,)24 b(those)150 3467 y(statemen)m(ts)k(are)e(not)h(v)-5 b(alid)26 b(in)g(an)g Fz(END)f FB(rule,)i(since)g(all)g(the)f(input)f(has)h(b)s(een)f(read.) 39 b(\(See)27 b(Section)g(6.4.8)150 3577 y([The)i Fz(next)f FB(Statemen)m(t],)j(page)f(105,)g(and)f(see)g(Section)h(6.4.9)h([Using) e Fz(gawk)p FB('s)f Fz(nextfile)f FB(Statemen)m(t],)150 3687 y(page)k(106.\))150 3888 y Fj(6.1.5)63 b(The)41 b(Empt)m(y)f(P)m(attern)150 4035 y FB(An)20 b(empt)m(y)h(\(i.e.,)k (nonexisten)m(t\))d(pattern)f(is)f(considered)h(to)g(matc)m(h)h Fw(every)28 b FB(input)20 b(record.)38 b(F)-8 b(or)21 b(example,)150 4144 y(the)31 b(program:)390 4281 y Fz(awk)47 b('{)g(print)f($1)i(}')f(BBS-list)150 4417 y FB(prin)m(ts)30 b(the)g(\014rst)g(\014eld)g(of)h(ev)m(ery)g(record.)150 4653 y FA(6.2)68 b(Using)46 b(Shell)f(V)-11 b(ariables)46 b(in)f(Programs)150 4812 y Fz(awk)20 b FB(programs)h(are)h(often)g (used)e(as)i(comp)s(onen)m(ts)g(in)f(larger)h(programs)f(written)g(in)g (shell.)38 b(F)-8 b(or)22 b(example,)150 4922 y(it)33 b(is)g(v)m(ery)f(common)h(to)g(use)g(a)g(shell)f(v)-5 b(ariable)34 b(to)f(hold)f(a)h(pattern)f(that)h(the)g Fz(awk)f FB(program)g(searc)m(hes)150 5031 y(for.)68 b(There)39 b(are)h(t)m(w)m(o)g(w)m(a)m(ys)h(to)f(get)h(the)e(v)-5 b(alue)40 b(of)g(the)g(shell)f(v)-5 b(ariable)40 b(in)m(to)h(the)f(b)s (o)s(dy)e(of)h(the)h Fz(awk)150 5141 y FB(program.)p 150 5241 1200 4 v 199 5308 a Fo(1)275 5340 y Fn(The)25 b(original)j(v)n(ersion)e(of)g Fm(awk)h Fn(used)e(to)h(k)n(eep)f (reading)h(and)f(ignoring)i(input)e(un)n(til)g(the)h(end)f(of)h(the)f (\014le)h(w)n(as)h(seen.)p eop end %%Page: 98 110 TeXDict begin 98 109 bop 150 -116 a FB(98)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(The)f(most)h(common)f(metho)s(d)h(is)f(to)i(use)e(shell)h (quoting)g(to)g(substitute)g(the)f(v)-5 b(ariable's)31 b(v)-5 b(alue)30 b(in)m(to)150 408 y(the)h(program)f(inside)g(the)g (script.)41 b(F)-8 b(or)31 b(example,)g(in)f(the)h(follo)m(wing)h (program:)390 550 y Fz(echo)47 b(-n)g("Enter)f(search)g(pattern:)g(") 390 660 y(read)h(pattern)390 769 y(awk)g("/$pattern/)e("'{)i (nmatches++)e(})629 879 y(END)i({)g(print)f(nmatches,)g("found")f(}')j (/path/to/data)150 1020 y FB(the)38 b Fz(awk)e FB(program)i(consists)g (of)f(t)m(w)m(o)i(pieces)g(of)e(quoted)h(text)g(that)h(are)f (concatenated)h(together)g(to)150 1130 y(form)23 b(the)h(program.)38 b(The)23 b(\014rst)g(part)g(is)g(double-quoted,)i(whic)m(h)f(allo)m(ws) g(substitution)g(of)f(the)h Fz(pattern)150 1239 y FB(v)-5 b(ariable)31 b(inside)f(the)h(quotes.)41 b(The)30 b(second)g(part)h(is) f(single-quoted.)275 1381 y(V)-8 b(ariable)26 b(substitution)e(via)h (quoting)g(w)m(orks,)i(but)d(can)g(b)s(e)h(p)s(oten)m(tially)h(messy)-8 b(.)39 b(It)25 b(requires)f(a)h(go)s(o)s(d)150 1490 y(understanding)e (of)i(the)f(shell's)h(quoting)g(rules)f(\(see)i(Section)f(1.1.6)i ([Shell-Quoting)e(Issues],)g(page)g(14\),)150 1600 y(and)30 b(it's)h(often)g(di\016cult)f(to)h(correctly)h(matc)m(h)f(up)e(the)i (quotes)g(when)e(reading)i(the)f(program.)275 1742 y(A)25 b(b)s(etter)h(metho)s(d)g(is)g(to)g(use)g Fz(awk)p FB('s)f(v)-5 b(ariable)26 b(assignmen)m(t)h(feature)f(\(see)h(Section)g(5.3.2)g ([Assigning)150 1851 y(V)-8 b(ariables)38 b(on)f(the)g(Command)f (Line],)j(page)e(76\))h(to)g(assign)f(the)g(shell)g(v)-5 b(ariable's)38 b(v)-5 b(alue)37 b(to)h(an)f Fz(awk)150 1961 y FB(v)-5 b(ariable's)36 b(v)-5 b(alue.)57 b(Then)34 b(use)i(dynamic)f(regexps)g(to)i(matc)m(h)f(the)g(pattern)f(\(see)i (Section)f(2.8)g([Using)150 2070 y(Dynamic)30 b(Regexps],)g(page)g (34\).)42 b(The)29 b(follo)m(wing)h(sho)m(ws)f(ho)m(w)g(to)h(redo)f (the)h(previous)f(example)g(using)150 2180 y(this)h(tec)m(hnique:)390 2321 y Fz(echo)47 b(-n)g("Enter)f(search)g(pattern:)g(")390 2431 y(read)h(pattern)390 2541 y(awk)g(-v)g(pat="$pattern")d('$0)j(~)g (pat)g({)h(nmatches++)d(})724 2650 y(END)i({)g(print)g(nmatches,)e ("found")h(}')h(/path/to/data)150 2792 y FB(No)m(w,)89 b(the)77 b Fz(awk)f FB(program)g(is)h(just)f(one)h(single-quoted)g (string.)180 b(The)76 b(assignmen)m(t)h(`)p Fz(-v)150 2901 y(pat="$pattern")p FB(')43 b(still)48 b(requires)f(double)f (quotes,)52 b(in)47 b(case)h(there)f(is)g(whitespace)h(in)e(the)h(v)-5 b(alue)150 3011 y(of)46 b Fz($pattern)p FB(.)83 b(The)45 b Fz(awk)f FB(v)-5 b(ariable)47 b Fz(pat)d FB(could)i(b)s(e)e(named)h Fz(pattern)f FB(to)s(o,)50 b(but)44 b(that)i(w)m(ould)g(b)s(e)150 3120 y(more)37 b(confusing.)58 b(Using)37 b(a)g(v)-5 b(ariable)37 b(also)h(pro)m(vides)e(more)h(\015exibilit)m(y)-8 b(,)40 b(since)d(the)f(v)-5 b(ariable)38 b(can)f(b)s(e)150 3230 y(used)h(an)m(ywhere)h(inside)g(the)g(program|for)g(prin)m(ting,)i (as)f(an)f(arra)m(y)g(subscript,)h(or)f(for)g(an)m(y)h(other)150 3340 y(use|without)30 b(requiring)g(the)g(quoting)h(tric)m(ks)h(at)f (ev)m(ery)g(p)s(oin)m(t)f(in)g(the)h(program.)150 3583 y FA(6.3)68 b(Actions)150 3742 y FB(An)30 b Fz(awk)f FB(program)h(or)g(script)g(consists)g(of)g(a)h(series)f(of)g(rules)g (and)f(function)h(de\014nitions)f(in)m(tersp)s(ersed.)150 3852 y(\(F)-8 b(unctions)30 b(are)g(describ)s(ed)e(later.)41 b(See)29 b(Section)h(8.2)g([User-De\014ned)g(F)-8 b(unctions],)30 b(page)g(149.\))42 b(A)29 b(rule)150 3961 y(con)m(tains)41 b(a)f(pattern)f(and)g(an)g(action,)44 b(either)c(of)f(whic)m(h)h(\(but) f(not)g(b)s(oth\))g(ma)m(y)i(b)s(e)d(omitted.)69 b(The)150 4071 y(purp)s(ose)26 b(of)h(the)h Fx(action)g FB(is)g(to)g(tell)g Fz(awk)f FB(what)g(to)h(do)f(once)h(a)g(matc)m(h)g(for)f(the)h(pattern) f(is)g(found.)39 b(Th)m(us,)150 4180 y(in)30 b(outline,)h(an)g Fz(awk)e FB(program)h(generally)i(lo)s(oks)f(lik)m(e)g(this:)390 4322 y([)p Fk(pattern)11 b FB(])46 b([)p Fz({)i Fk(action)56 b Fz(})p FB(])390 4431 y([)p Fk(pattern)11 b FB(])46 b([)p Fz({)i Fk(action)56 b Fz(})p FB(])390 4541 y Fz(...)390 4651 y(function)46 b Fk(name)11 b Fz(\()p Fk(args)g Fz(\))44 b({)j(...)g(})390 4760 y(...)275 4902 y FB(An)37 b(action)h(consists)g (of)g(one)g(or)f(more)h Fz(awk)f Fx(statemen)m(ts)p FB(,)k(enclosed)d (in)f(curly)g(braces)h(\(`)p Fz({...)o(})p FB('\).)150 5011 y(Eac)m(h)j(statemen)m(t)h(sp)s(eci\014es)d(one)i(thing)f(to)g (do.)70 b(The)40 b(statemen)m(ts)h(are)g(separated)f(b)m(y)g(newlines)g (or)150 5121 y(semicolons.)62 b(The)37 b(curly)g(braces)g(around)f(an)h (action)i(m)m(ust)e(b)s(e)f(used)h(ev)m(en)h(if)f(the)g(action)i(con)m (tains)150 5230 y(only)32 b(one)g(statemen)m(t,)j(or)d(if)g(it)g(con)m (tains)h(no)f(statemen)m(ts)i(at)e(all.)47 b(Ho)m(w)m(ev)m(er,)35 b(if)c(y)m(ou)i(omit)f(the)h(action)150 5340 y(en)m(tirely)-8 b(,)32 b(omit)f(the)g(curly)f(braces)g(as)h(w)m(ell.)42 b(An)30 b(omitted)h(action)h(is)e(equiv)-5 b(alen)m(t)32 b(to)f(`)p Fz({)g(print)d($0)i(})p FB(':)p eop end %%Page: 99 111 TeXDict begin 99 110 bop 1801 -116 a Fr(Chapter)30 b(6:)41 b(P)m(atterns,)32 b(Actions,)f(and)f(V)-8 b(ariables)91 b FB(99)390 299 y Fz(/foo/)j({)48 b(})238 b Fk(match)46 b Fz(foo)p Fk(,)h(do)g(nothing)f(---)h(empty)f(action)390 408 y Fz(/foo/)476 b Fk(match)46 b Fz(foo)p Fk(,)h(print)f(the)h (record)f(---)h(omitted)f(action)275 541 y FB(The)29 b(follo)m(wing)j(t)m(yp)s(es)f(of)f(statemen)m(ts)i(are)f(supp)s(orted) e(in)h Fz(awk)p FB(:)150 696 y(Expressions)630 806 y(Call)55 b(functions)g(or)g(assign)g(v)-5 b(alues)55 b(to)g(v)-5 b(ariables)56 b(\(see)g(Chapter)e(5)h([Expressions],)630 915 y(page)36 b(73\).)55 b(Executing)36 b(this)f(kind)f(of)h(statemen)m (t)i(simply)d(computes)h(the)g(v)-5 b(alue)36 b(of)f(the)630 1025 y(expression.)44 b(This)31 b(is)h(useful)f(when)f(the)i (expression)g(has)f(side)h(e\013ects)h(\(see)f(Section)h(5.7)630 1135 y([Assignmen)m(t)e(Expressions],)f(page)h(81\).)150 1290 y(Con)m(trol)g(statemen)m(ts)630 1400 y(Sp)s(ecify)k(the)h(con)m (trol)h(\015o)m(w)f(of)f Fz(awk)g FB(programs.)57 b(The)35 b Fz(awk)g FB(language)i(giv)m(es)g(y)m(ou)f(C-lik)m(e)630 1509 y(constructs)24 b(\()p Fz(if)p FB(,)h Fz(for)p FB(,)f Fz(while)p FB(,)g(and)g Fz(do)p FB(\))f(as)h(w)m(ell)h(as)f(a)g(few)f (sp)s(ecial)i(ones)f(\(see)g(Section)h(6.4)630 1619 y([Con)m(trol)31 b(Statemen)m(ts)h(in)e(Actions],)i(page)f(99\).)150 1774 y(Comp)s(ound)d(statemen)m(ts)630 1884 y(Consist)e(of)h(one)g(or)f (more)h(statemen)m(ts)h(enclosed)g(in)e(curly)g(braces.)40 b(A)26 b(comp)s(ound)f(state-)630 1993 y(men)m(t)32 b(is)f(used)f(in)h (order)f(to)i(put)f(sev)m(eral)h(statemen)m(ts)h(together)f(in)f(the)h (b)s(o)s(dy)d(of)i(an)g Fz(if)p FB(,)630 2103 y Fz(while)p FB(,)e Fz(do)p FB(,)h(or)h Fz(for)e FB(statemen)m(t.)150 2258 y(Input)g(statemen)m(ts)630 2368 y(Use)46 b(the)g Fz(getline)e FB(command)h(\(see)i(Section)g(3.8)g([Explicit)g(Input)d (with)h Fz(getline)p FB(],)630 2477 y(page)33 b(51\).)46 b(Also)32 b(supplied)f(in)g Fz(awk)g FB(are)h(the)g Fz(next)f FB(statemen)m(t)i(\(see)g(Section)g(6.4.8)g([The)630 2587 y Fz(next)40 b FB(Statemen)m(t],)47 b(page)42 b(105\),)k(and)41 b(the)h Fz(nextfile)d FB(statemen)m(t)k(\(see)g(Section)f(6.4.9)630 2697 y([Using)31 b Fz(gawk)p FB('s)e Fz(nextfile)f FB(Statemen)m(t],)33 b(page)e(106\).)150 2852 y(Output)e(statemen)m(ts)630 2961 y(Suc)m(h)h(as)g Fz(print)f FB(and)h Fz(printf)p FB(.)39 b(See)31 b(Chapter)e(4)i([Prin)m(ting)g(Output],)f(page)h(57.) 150 3117 y(Deletion)h(statemen)m(ts)630 3226 y(F)-8 b(or)26 b(deleting)h(arra)m(y)f(elemen)m(ts.)41 b(See)26 b(Section)g(7.6)h ([The)e Fz(delete)f FB(Statemen)m(t],)29 b(page)d(120.)150 3455 y FA(6.4)68 b(Con)l(trol)46 b(Statemen)l(ts)h(in)e(Actions)150 3614 y Fx(Con)m(trol)d(statemen)m(ts)p FB(,)k(suc)m(h)41 b(as)g Fz(if)p FB(,)i Fz(while)p FB(,)g(and)e(so)g(on,)j(con)m(trol)f (the)e(\015o)m(w)g(of)h(execution)g(in)f Fz(awk)150 3724 y FB(programs.)f(Most)30 b(of)f(the)h(con)m(trol)h(statemen)m(ts)f(in)f Fz(awk)g FB(are)g(patterned)h(on)f(similar)g(statemen)m(ts)i(in)e(C.) 275 3856 y(All)37 b(the)h(con)m(trol)g(statemen)m(ts)h(start)f(with)f (sp)s(ecial)h(k)m(eyw)m(ords,)h(suc)m(h)e(as)g Fz(if)g FB(and)f Fz(while)p FB(,)i(to)g(dis-)150 3966 y(tinguish)28 b(them)g(from)g(simple)g(expressions.)40 b(Man)m(y)29 b(con)m(trol)h(statemen)m(ts)g(con)m(tain)f(other)g(statemen)m(ts.)150 4075 y(F)-8 b(or)38 b(example,)h(the)e Fz(if)f FB(statemen)m(t)j(con)m (tains)f(another)f(statemen)m(t)i(that)e(ma)m(y)g(or)g(ma)m(y)h(not)f (b)s(e)f(exe-)150 4185 y(cuted.)55 b(The)35 b(con)m(tained)h(statemen)m (t)h(is)e(called)h(the)g Fx(b)s(o)s(dy)p FB(.)53 b(T)-8 b(o)36 b(include)f(more)g(than)g(one)g(statemen)m(t)150 4295 y(in)g(the)h(b)s(o)s(dy)-8 b(,)36 b(group)f(them)g(in)m(to)i(a)f (single)g Fx(comp)s(ound)e(statemen)m(t)39 b FB(with)d(curly)f(braces,) i(separating)150 4404 y(them)30 b(with)g(newlines)h(or)f(semicolons.) 150 4599 y Fj(6.4.1)63 b(The)41 b Fh(if)p Fj(-)p Fh(else)h Fj(Statemen)m(t)150 4746 y FB(The)30 b Fz(if)p FB(-)p Fz(else)f FB(statemen)m(t)j(is)e Fz(awk)p FB('s)g(decision-making)i (statemen)m(t.)42 b(It)31 b(lo)s(oks)g(lik)m(e)g(this:)390 4879 y Fz(if)47 b(\()p Fk(condition)11 b Fz(\))44 b Fk(then-body)56 b FB([)p Fz(else)47 b Fk(else-body)11 b FB(])150 5011 y(The)37 b Fx(condition)h FB(is)f(an)g(expression)h(that)f(con)m(trols) i(what)e(the)h(rest)f(of)h(the)f(statemen)m(t)j(do)s(es.)61 b(If)37 b(the)150 5121 y Fx(condition)c FB(is)g(true,)h Fx(then-b)s(o)s(dy)39 b FB(is)33 b(executed;)i(otherwise,)f Fx(else-b)s(o)s(dy)40 b FB(is)33 b(executed.)49 b(The)32 b Fz(else)g FB(part)150 5230 y(of)c(the)h(statemen)m(t)h(is)e (optional.)41 b(The)28 b(condition)h(is)f(considered)g(false)h(if)f (its)h(v)-5 b(alue)28 b(is)g(zero)h(or)g(the)f(n)m(ull)150 5340 y(string;)j(otherwise,)g(the)f(condition)h(is)g(true.)40 b(Refer)31 b(to)g(the)f(follo)m(wing:)p eop end %%Page: 100 112 TeXDict begin 100 111 bop 150 -116 a FB(100)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(if)47 b(\(x)g(\045)h(2)f(==)g(0\))581 408 y(print)f("x)h(is)h (even")390 518 y(else)581 628 y(print)e("x)h(is)h(odd")275 775 y FB(In)30 b(this)g(example,)i(if)f(the)g(expression)f(`)p Fz(x)g(\045)g(2)g(==)g(0)p FB(')h(is)g(true)f(\(that)i(is,)f(if)g(the)g (v)-5 b(alue)31 b(of)g Fz(x)f FB(is)h(ev)m(enly)150 884 y(divisible)i(b)m(y)f(t)m(w)m(o\),)j(then)e(the)f(\014rst)g Fz(print)f FB(statemen)m(t)k(is)d(executed;)j(otherwise,)f(the)f (second)f Fz(print)150 994 y FB(statemen)m(t)40 b(is)e(executed.)65 b(If)38 b(the)h Fz(else)e FB(k)m(eyw)m(ord)h(app)s(ears)g(on)g(the)g (same)h(line)g(as)f Fx(then-b)s(o)s(dy)45 b FB(and)150 1103 y Fx(then-b)s(o)s(dy)k FB(is)43 b(not)g(a)h(comp)s(ound)d (statemen)m(t)k(\(i.e.,)j(not)43 b(surrounded)e(b)m(y)h(curly)h (braces\),)k(then)c(a)150 1213 y(semicolon)28 b(m)m(ust)f(separate)h Fx(then-b)s(o)s(dy)34 b FB(from)26 b(the)h Fz(else)p FB(.)39 b(T)-8 b(o)27 b(illustrate)i(this,)e(the)h(previous)e(example) 150 1323 y(can)31 b(b)s(e)e(rewritten)i(as:)390 1469 y Fz(if)47 b(\(x)g(\045)h(2)f(==)g(0\))h(print)e("x)h(is)g(even";)f (else)772 1579 y(print)g("x)h(is)h(odd")150 1726 y FB(If)26 b(the)g(`)p Fz(;)p FB(')g(is)g(left)h(out,)g Fz(awk)e FB(can't)i(in)m(terpret)f(the)h(statemen)m(t)h(and)d(it)h(pro)s(duces)f (a)i(syn)m(tax)f(error.)39 b(Don't)150 1836 y(actually)30 b(write)e(programs)g(this)h(w)m(a)m(y)-8 b(,)30 b(b)s(ecause)e(a)h(h)m (uman)f(reader)g(migh)m(t)h(fail)g(to)g(see)g(the)g Fz(else)e FB(if)h(it)h(is)150 1945 y(not)i(the)f(\014rst)g(thing)g(on)g(its)h (line.)150 2157 y Fj(6.4.2)63 b(The)41 b Fh(while)h Fj(Statemen)m(t)150 2304 y FB(In)31 b(programming,)h(a)g Fx(lo)s(op)i FB(is)e(a)f(part)h (of)g(a)f(program)h(that)g(can)g(b)s(e)f(executed)h(t)m(w)m(o)h(or)e (more)h(times)g(in)150 2413 y(succession.)57 b(The)35 b Fz(while)f FB(statemen)m(t)j(is)f(the)f(simplest)h(lo)s(oping)g (statemen)m(t)h(in)f Fz(awk)p FB(.)55 b(It)36 b(rep)s(eatedly)150 2523 y(executes)c(a)e(statemen)m(t)j(as)d(long)h(as)g(a)g(condition)g (is)f(true.)40 b(F)-8 b(or)32 b(example:)390 2670 y Fz(while)46 b(\()p Fk(condition)11 b Fz(\))485 2780 y Fk(body)150 2927 y Fx(b)s(o)s(dy)30 b FB(is)24 b(a)g(statemen)m(t)i(called)f(the)f Fx(b)s(o)s(dy)30 b FB(of)24 b(the)g(lo)s(op,)h(and)f Fx(condition)g FB(is)g(an)g(expression)f(that)i(con)m(trols)150 3036 y(ho)m(w)41 b(long)h(the)f(lo)s(op)g(k)m(eeps)h(running.)71 b(The)40 b(\014rst)g(thing)h(the)h Fz(while)d FB(statemen)m(t)k(do)s (es)e(is)g(test)h(the)150 3146 y Fx(condition)p FB(.)57 b(If)34 b(the)i Fx(condition)g FB(is)g(true,)g(it)g(executes)h(the)f (statemen)m(t)h Fx(b)s(o)s(dy)p FB(.)54 b(After)36 b Fx(b)s(o)s(dy)41 b FB(has)36 b(b)s(een)150 3255 y(executed,)44 b Fx(condition)d FB(is)f(tested)h(again,)j(and)c(if)g(it)g(is)h(still)g (true,)i Fx(b)s(o)s(dy)j FB(is)40 b(executed)h(again.)72 b(This)150 3365 y(pro)s(cess)33 b(rep)s(eats)g(un)m(til)g(the)h Fx(condition)f FB(is)h(no)f(longer)g(true.)49 b(If)33 b(the)g Fx(condition)h FB(is)f(initially)i(false,)g(the)150 3474 y(b)s(o)s(dy)24 b(of)i(the)g(lo)s(op)g(is)f(nev)m(er)h(executed)h (and)e Fz(awk)g FB(con)m(tin)m(ues)i(with)e(the)h(statemen)m(t)i(follo) m(wing)f(the)f(lo)s(op.)150 3584 y(This)k(example)h(prin)m(ts)e(the)i (\014rst)f(three)g(\014elds)g(of)h(eac)m(h)g(record,)g(one)f(p)s(er)g (line:)390 3731 y Fz(awk)47 b('{)g(i)h(=)f(1)724 3841 y(while)f(\(i)i(<=)f(3\))g({)915 3950 y(print)f($i)915 4060 y(i++)724 4169 y(})390 4279 y(}')h(inventory-shipped)150 4426 y FB(The)35 b(b)s(o)s(dy)e(of)i(this)g(lo)s(op)g(is)g(a)h(comp)s (ound)d(statemen)m(t)k(enclosed)f(in)f(braces,)h(con)m(taining)h(t)m(w) m(o)f(state-)150 4535 y(men)m(ts.)52 b(The)33 b(lo)s(op)h(w)m(orks)g (in)g(the)g(follo)m(wing)h(manner:)47 b(\014rst,)35 b(the)f(v)-5 b(alue)34 b(of)g Fz(i)g FB(is)g(set)g(to)h(one.)52 b(Then,)150 4645 y(the)38 b Fz(while)e FB(statemen)m(t)j(tests)f(whether)f Fz(i)g FB(is)h(less)f(than)h(or)f(equal)h(to)g(three.)62 b(This)37 b(is)h(true)f(when)f Fz(i)150 4755 y FB(equals)f(one,)h(so)f (the)f Fz(i)p FB(-th)g(\014eld)h(is)f(prin)m(ted.)53 b(Then)33 b(the)i(`)p Fz(i++)p FB(')f(incremen)m(ts)h(the)f(v)-5 b(alue)35 b(of)g Fz(i)f FB(and)g(the)150 4864 y(lo)s(op)c(rep)s(eats.) 41 b(The)30 b(lo)s(op)h(terminates)g(when)e Fz(i)h FB(reac)m(hes)i (four.)275 5011 y(A)26 b(newline)h(is)f(not)h(required)f(b)s(et)m(w)m (een)h(the)g(condition)g(and)f(the)h(b)s(o)s(dy;)f(ho)m(w)m(ev)m(er)i (using)e(one)h(mak)m(es)150 5121 y(the)33 b(program)h(clearer)g(unless) e(the)i(b)s(o)s(dy)e(is)h(a)h(comp)s(ound)d(statemen)m(t)36 b(or)d(else)h(is)f(v)m(ery)h(simple.)49 b(The)150 5230 y(newline)37 b(after)g(the)g(op)s(en-brace)g(that)g(b)s(egins)f(the)h (comp)s(ound)f(statemen)m(t)i(is)f(not)g(required)f(either,)150 5340 y(but)30 b(the)g(program)g(is)h(harder)e(to)i(read)g(without)f (it.)p eop end %%Page: 101 113 TeXDict begin 101 112 bop 1755 -116 a Fr(Chapter)30 b(6:)41 b(P)m(atterns,)32 b(Actions,)g(and)d(V)-8 b(ariables)92 b FB(101)150 299 y Fj(6.4.3)63 b(The)41 b Fh(do)p Fj(-)p Fh(while)h Fj(Statemen)m(t)150 446 y FB(The)30 b Fz(do)g FB(lo)s(op)g(is)h(a)g(v)-5 b(ariation)32 b(of)e(the)h Fz(while)e FB(lo)s(oping)i(statemen)m(t.)43 b(The)30 b Fz(do)f FB(lo)s(op)i(executes)h(the)f Fx(b)s(o)s(dy)150 555 y FB(once)g(and)f(then)g(rep)s(eats)g(the)h Fx(b)s(o)s(dy)36 b FB(as)31 b(long)g(as)g(the)f Fx(condition)h FB(is)g(true.)40 b(It)31 b(lo)s(oks)f(lik)m(e)i(this:)390 705 y Fz(do)485 814 y Fk(body)390 924 y Fz(while)46 b(\()p Fk(condition)11 b Fz(\))275 1073 y FB(Ev)m(en)32 b(if)g(the)g Fx(condition)g FB(is)g(false)h(at)f(the)h(start,)g(the)f Fx(b)s(o)s(dy)38 b FB(is)32 b(executed)h(at)f(least)i(once)e(\(and)g(only)150 1183 y(once,)k(unless)d(executing)i Fx(b)s(o)s(dy)40 b FB(mak)m(es)35 b Fx(condition)g FB(true\).)52 b(Con)m(trast)34 b(this)g(with)g(the)g(corresp)s(onding)150 1293 y Fz(while)29 b FB(statemen)m(t:)390 1442 y Fz(while)46 b(\()p Fk(condition)11 b Fz(\))485 1552 y Fk(body)150 1701 y FB(This)25 b(statemen)m(t)j(do)s (es)e(not)h(execute)g Fx(b)s(o)s(dy)33 b FB(ev)m(en)26 b(once)h(if)g(the)f Fx(condition)h FB(is)f(false)h(to)g(b)s(egin)e (with.)39 b(The)150 1811 y(follo)m(wing)32 b(is)e(an)h(example)g(of)f (a)h Fz(do)f FB(statemen)m(t:)390 1960 y Fz({)286 b(i)48 b(=)f(1)724 2070 y(do)g({)867 2179 y(print)g($0)867 2289 y(i++)724 2399 y(})h(while)e(\(i)h(<=)g(10\))390 2508 y(})150 2658 y FB(This)29 b(program)g(prin)m(ts)h(eac)m(h)h(input)d (record)i(10)h(times.)41 b(Ho)m(w)m(ev)m(er,)32 b(it)e(isn't)g(a)g(v)m (ery)g(realistic)i(example,)150 2767 y(since)37 b(in)e(this)i(case)g (an)f(ordinary)f Fz(while)g FB(w)m(ould)h(do)g(just)g(as)g(w)m(ell.)59 b(This)36 b(situation)h(re\015ects)g(actual)150 2877 y(exp)s(erience;)31 b(only)f(o)s(ccasionally)j(is)d(there)h(a)g(real)g (use)f(for)g(a)h Fz(do)e FB(statemen)m(t.)150 3091 y Fj(6.4.4)63 b(The)41 b Fh(for)g Fj(Statemen)m(t)150 3238 y FB(The)d Fz(for)f FB(statemen)m(t)j(mak)m(es)f(it)g(more)g(con)m(v)m (enien)m(t)h(to)f(coun)m(t)g(iterations)h(of)e(a)h(lo)s(op.)64 b(The)38 b(general)150 3347 y(form)30 b(of)g(the)h Fz(for)e FB(statemen)m(t)k(lo)s(oks)e(lik)m(e)g(this:)390 3497 y Fz(for)47 b(\()p Fk(initialization)11 b Fz(;)43 b Fk(condition)11 b Fz(;)44 b Fk(increment)11 b Fz(\))485 3606 y Fk(body)150 3756 y FB(The)31 b Fx(initialization)p FB(,)k Fx(condition)p FB(,)d(and)f Fx(incremen)m(t)j FB(parts)d(are)h(arbitrary)f Fz(awk)f FB(expressions,)i(and)f Fx(b)s(o)s(dy)150 3866 y FB(stands)f(for)g(an)m(y)h Fz(awk)e FB(statemen)m(t.)275 4015 y(The)39 b Fz(for)f FB(statemen)m(t)k(starts)e(b)m(y)g(executing)h Fx(initialization)p FB(.)71 b(Then,)41 b(as)f(long)h(as)e(the)h Fx(condition)150 4125 y FB(is)g(true,)j(it)e(rep)s(eatedly)f(executes)i Fx(b)s(o)s(dy)k FB(and)40 b(then)g Fx(incremen)m(t)p FB(.)70 b(T)m(ypically)-8 b(,)45 b Fx(initialization)e FB(sets)e(a)150 4234 y(v)-5 b(ariable)32 b(to)g(either)g(zero)g(or)f (one,)h Fx(incremen)m(t)i FB(adds)d(one)g(to)h(it,)h(and)d Fx(condition)i FB(compares)g(it)g(against)150 4344 y(the)f(desired)e(n) m(um)m(b)s(er)g(of)i(iterations.)42 b(F)-8 b(or)31 b(example:)390 4493 y Fz(awk)47 b('{)g(for)g(\(i)g(=)h(1;)f(i)g(<=)g(3;)h(i++\))867 4603 y(print)f($i)390 4712 y(}')g(inventory-shipped)150 4862 y FB(This)30 b(prin)m(ts)f(the)i(\014rst)f(three)g(\014elds)g(of)h (eac)m(h)g(input)f(record,)g(with)g(one)h(\014eld)f(p)s(er)f(line.)275 5011 y(It)37 b(isn't)g(p)s(ossible)g(to)h(set)g(more)f(than)g(one)h(v) -5 b(ariable)38 b(in)f(the)g Fx(initialization)j FB(part)d(without)g (using)150 5121 y(a)e(m)m(ultiple)h(assignmen)m(t)g(statemen)m(t)h(suc) m(h)d(as)i(`)p Fz(x)30 b(=)g(y)g(=)g(0)p FB('.)55 b(This)34 b(mak)m(es)i(sense)f(only)g(if)g(all)g(the)h(ini-)150 5230 y(tial)h(v)-5 b(alues)36 b(are)h(equal.)57 b(\(But)37 b(it)f(is)g(p)s(ossible)f(to)i(initialize)h(additional)f(v)-5 b(ariables)36 b(b)m(y)g(writing)g(their)150 5340 y(assignmen)m(ts)31 b(as)g(separate)g(statemen)m(ts)h(preceding)e(the)h Fz(for)e FB(lo)s(op.\))p eop end %%Page: 102 114 TeXDict begin 102 113 bop 150 -116 a FB(102)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(The)44 b(same)i(is)f(true)g(of)g(the)g Fx(incremen)m(t)j FB(part.)85 b(Incremen)m(ting)46 b(additional)g(v)-5 b(ariables)45 b(requires)150 408 y(separate)30 b(statemen)m(ts)h(at)e (the)h(end)e(of)h(the)g(lo)s(op.)41 b(The)28 b(C)h(comp)s(ound)f (expression,)h(using)f(C's)h(comma)150 518 y(op)s(erator,)i(is)f (useful)g(in)g(this)g(con)m(text)j(but)c(it)i(is)f(not)h(supp)s(orted)e (in)h Fz(awk)p FB(.)275 658 y(Most)h(often,)h Fx(incremen)m(t)i FB(is)c(an)h(incremen)m(t)h(expression,)f(as)g(in)f(the)i(previous)e (example.)43 b(But)31 b(this)150 768 y(is)e(not)h(required;)f(it)h(can) g(b)s(e)f(an)m(y)h(expression)f(whatso)s(ev)m(er.)41 b(F)-8 b(or)30 b(example,)h(the)e(follo)m(wing)i(statemen)m(t)150 877 y(prin)m(ts)f(all)h(the)g(p)s(o)m(w)m(ers)f(of)g(t)m(w)m(o)i(b)s (et)m(w)m(een)f(1)g(and)f(100:)390 1018 y Fz(for)47 b(\(i)g(=)h(1;)f(i) g(<=)g(100;)g(i)g(*=)h(2\))485 1127 y(print)f(i)275 1267 y FB(If)30 b(there)h(is)g(nothing)g(to)g(b)s(e)f(done,)h(an)m(y)g(of)g (the)g(three)g(expressions)g(in)f(the)h(paren)m(theses)g(follo)m(wing) 150 1377 y(the)g Fz(for)f FB(k)m(eyw)m(ord)h(ma)m(y)g(b)s(e)f(omitted.) 42 b(Th)m(us,)30 b(`)p Fz(for)g(\(;)g(x)g(>)g(0;\))p FB(')g(is)h(equiv)-5 b(alen)m(t)32 b(to)f(`)p Fz(while)e(\(x)h(>)g(0\)) p FB('.)150 1486 y(If)h(the)h Fx(condition)g FB(is)g(omitted,)h(it)f (is)f(treated)i(as)f(true,)f(e\013ectiv)m(ely)k(yielding)d(an)f Fx(in\014nite)h(lo)s(op)i FB(\(i.e.,)g(a)150 1596 y(lo)s(op)c(that)h (nev)m(er)g(terminates\).)275 1736 y(In)e(most)i(cases,)g(a)g Fz(for)f FB(lo)s(op)g(is)h(an)f(abbreviation)h(for)f(a)h Fz(while)e FB(lo)s(op,)h(as)h(sho)m(wn)f(here:)390 1876 y Fk(initialization)390 1986 y Fz(while)46 b(\()p Fk(condition)11 b Fz(\))45 b({)485 2096 y Fk(body)485 2205 y(increment)390 2315 y Fz(})150 2455 y FB(The)g(only)g(exception)h(is)f(when)f(the)h Fz(continue)e FB(statemen)m(t)k(\(see)f(Section)g(6.4.7)g([The)f Fz(continue)150 2564 y FB(Statemen)m(t],)51 b(page)46 b(104\))h(is)f(used)e(inside)h(the)h(lo)s(op.)86 b(Changing)45 b(a)h Fz(for)e FB(statemen)m(t)j(to)g(a)e Fz(while)150 2674 y FB(statemen)m(t)32 b(in)e(this)h(w)m(a)m(y)g(can)g(c)m(hange)g (the)g(e\013ect)h(of)e(the)h Fz(continue)d FB(statemen)m(t)k(inside)e (the)h(lo)s(op.)275 2814 y(The)f Fz(awk)g FB(language)i(has)e(a)h Fz(for)f FB(statemen)m(t)i(in)f(addition)g(to)g(a)g Fz(while)f FB(statemen)m(t)i(b)s(ecause)f(a)g Fz(for)150 2924 y FB(lo)s(op)36 b(is)f(often)h(b)s(oth)f(less)h(w)m(ork)f(to)i(t)m(yp)s (e)e(and)g(more)h(natural)f(to)i(think)e(of.)56 b(Coun)m(ting)36 b(the)f(n)m(um)m(b)s(er)150 3033 y(of)d(iterations)i(is)e(v)m(ery)g (common)g(in)g(lo)s(ops.)46 b(It)32 b(can)g(b)s(e)f(easier)i(to)g (think)f(of)g(this)g(coun)m(ting)h(as)f(part)g(of)150 3143 y(lo)s(oping)f(rather)f(than)g(as)h(something)g(to)g(do)f(inside)g (the)h(lo)s(op.)150 3348 y Fj(6.4.5)63 b(The)41 b Fh(switch)h Fj(Statemen)m(t)390 3495 y Fr(NOTE:)29 b FB(This)f(subsection)h (describ)s(es)f(an)h(exp)s(erimen)m(tal)g(feature)h(added)e(in)g Fz(gawk)g FB(3.1.3.)390 3604 y(It)35 b(is)g Fw(not)45 b FB(enabled)35 b(b)m(y)g(default.)55 b(T)-8 b(o)35 b(enable)h(it,)h (use)e(the)g(`)p Fz(--enable-switch)p FB(')c(option)390 3714 y(to)g Fz(configure)c FB(when)i Fz(gawk)g FB(is)h(b)s(eing)f (con\014gured)g(and)h(built.)40 b(See)30 b(Section)h(B.2.2)h([Ad-)390 3824 y(ditional)f(Con\014guration)f(Options],)h(page)g(264,)h(for)e (more)g(information.)275 3964 y(The)c Fz(switch)f FB(statemen)m(t)j (allo)m(ws)g(the)f(ev)-5 b(aluation)28 b(of)f(an)f(expression)h(and)f (the)h(execution)g(of)g(state-)150 4073 y(men)m(ts)32 b(based)f(on)h(a)g Fz(case)e FB(matc)m(h.)45 b(Case)32 b(statemen)m(ts)h(are)f(c)m(hec)m(k)m(ed)i(for)d(a)h(matc)m(h)h(in)e (the)h(order)f(they)150 4183 y(are)g(de\014ned.)39 b(If)30 b(no)g(suitable)h Fz(case)f FB(is)g(found,)f(the)i Fz(default)d FB(section)k(is)e(executed,)i(if)e(supplied.)275 4323 y(Eac)m(h)41 b Fz(case)f FB(con)m(tains)j(a)e(single)h(constan)m(t,)k (b)s(e)40 b(it)i(n)m(umeric,)i(string,)g(or)d(regexp.)74 b(The)41 b Fz(switch)150 4433 y FB(expression)c(is)h(ev)-5 b(aluated,)41 b(and)c(then)g(eac)m(h)i Fz(case)p FB('s)e(constan)m(t)i (is)e(compared)h(against)h(the)f(result)f(in)150 4542 y(turn.)70 b(The)40 b(t)m(yp)s(e)h(of)f(constan)m(t)i(determines)e(the) h(comparison:)61 b(n)m(umeric)40 b(or)h(string)f(do)h(the)f(usual)150 4652 y(comparisons.)53 b(A)34 b(regexp)h(constan)m(t)h(do)s(es)e(a)h (regular)f(expression)h(matc)m(h)g(against)g(the)g(string)f(v)-5 b(alue)150 4761 y(of)31 b(the)f(original)i(expression.)40 b(The)30 b(general)h(form)f(of)h(the)f Fz(switch)f FB(statemen)m(t)j (lo)s(oks)f(lik)m(e)h(this:)390 4902 y Fz(switch)46 b(\()p Fk(expression)11 b Fz(\))44 b({)390 5011 y(case)j Fk(value)f(or)h (regular)f(expression)11 b Fz(:)581 5121 y Fk(case-body)390 5230 y Fz(default:)581 5340 y Fk(default-body)p eop end %%Page: 103 115 TeXDict begin 103 114 bop 1755 -116 a Fr(Chapter)30 b(6:)41 b(P)m(atterns,)32 b(Actions,)g(and)d(V)-8 b(ariables)92 b FB(103)390 299 y Fz(})275 446 y FB(Con)m(trol)35 b(\015o)m(w)h(in)f (the)g Fz(switch)f FB(statemen)m(t)j(w)m(orks)e(as)h(it)f(do)s(es)g(in) g(C.)g(Once)h(a)f(matc)m(h)h(to)g(a)g(giv)m(en)150 556 y(case)29 b(is)f(made,)h(case)g(statemen)m(t)h(b)s(o)s(dies)d(are)i (executed)g(un)m(til)f(a)h Fz(break)p FB(,)e Fz(continue)p FB(,)g Fz(next)p FB(,)g Fz(nextfile)150 665 y FB(or)j Fz(exit)g FB(is)g(encoun)m(tered,)h(or)f(the)h(end)f(of)g(the)h Fz(switch)d FB(statemen)m(t)33 b(itself.)41 b(F)-8 b(or)31 b(example:)390 813 y Fz(switch)46 b(\(NR)h(*)g(2)h(+)f(1\))h({)390 922 y(case)f(3:)390 1032 y(case)g("11":)581 1142 y(print)f(NR)h(-)h(1) 581 1251 y(break)390 1470 y(case)f(/2[[:digit:]]+/:)581 1580 y(print)f(NR)390 1799 y(default:)581 1909 y(print)g(NR)h(+)h(1)390 2128 y(case)f(-1:)581 2237 y(print)f(NR)h(*)h(-1)390 2347 y(})275 2494 y FB(Note)37 b(that)g(if)g(none)f(of)h(the)g (statemen)m(ts)h(sp)s(eci\014ed)e(ab)s(o)m(v)m(e)h(halt)g(execution)h (of)f(a)g(matc)m(hed)g Fz(case)150 2604 y FB(statemen)m(t,)44 b(execution)d(falls)f(through)f(to)i(the)f(next)f Fz(case)g FB(un)m(til)h(execution)h(halts.)69 b(In)39 b(the)h(ab)s(o)m(v)m(e)150 2714 y(example,)k(for)c(an)m(y)h(case)g(v)-5 b(alue)41 b(starting)g(with)f(`)p Fz(2)p FB(')g(follo)m(w)m(ed)i(b)m(y)f(one)f (or)h(more)f(digits,)k(the)c Fz(print)150 2823 y FB(statemen)m(t)31 b(is)f(executed)g(and)e(then)i(falls)f(through)g(in)m(to)h(the)g Fz(default)d FB(section,)k(executing)g(its)e Fz(print)150 2933 y FB(statemen)m(t.)75 b(In)40 b(turn,)j(the)e Fy(\000)p FB(1)g(case)i(will)e(also)h(b)s(e)f(executed)h(since)f(the)g Fz(default)e FB(do)s(es)i(not)g(halt)150 3042 y(execution.)150 3254 y Fj(6.4.6)63 b(The)41 b Fh(break)h Fj(Statemen)m(t)150 3401 y FB(The)33 b Fz(break)f FB(statemen)m(t)j(jumps)d(out)i(of)f(the) h(innermost)f Fz(for)p FB(,)h Fz(while)p FB(,)f(or)g Fz(do)g FB(lo)s(op)h(that)g(encloses)g(it.)150 3511 y(The)i(follo)m (wing)i(example)g(\014nds)d(the)i(smallest)g(divisor)g(of)g(an)m(y)g (in)m(teger,)j(and)c(also)h(iden)m(ti\014es)g(prime)150 3621 y(n)m(um)m(b)s(ers:)390 3768 y Fz(#)47 b(find)g(smallest)f (divisor)f(of)j(num)390 3878 y({)533 3987 y(num)f(=)h($1)533 4097 y(for)f(\(div)g(=)g(2;)g(div*div)f(<=)h(num;)g(div++\))629 4206 y(if)g(\(num)f(\045)i(div)f(==)g(0\))724 4316 y(break)533 4425 y(if)g(\(num)g(\045)g(div)g(==)h(0\))629 4535 y(printf)e ("Smallest)f(divisor)h(of)h(\045d)g(is)g(\045d\\n",)f(num,)h(div)533 4645 y(else)629 4754 y(printf)f("\045d)h(is)g(prime\\n",)e(num)390 4864 y(})275 5011 y FB(When)26 b(the)h(remainder)f(is)h(zero)g(in)g (the)g(\014rst)f Fz(if)g FB(statemen)m(t,)k Fz(awk)25 b FB(immediately)j Fx(breaks)f(out)i FB(of)e(the)150 5121 y(con)m(taining)h Fz(for)e FB(lo)s(op.)40 b(This)26 b(means)h(that)g Fz(awk)f FB(pro)s(ceeds)h(immediately)h(to)g(the)f (statemen)m(t)h(follo)m(wing)150 5230 y(the)33 b(lo)s(op)f(and)g(con)m (tin)m(ues)i(pro)s(cessing.)46 b(\(This)32 b(is)h(v)m(ery)f(di\013eren) m(t)h(from)f(the)h Fz(exit)e FB(statemen)m(t,)k(whic)m(h)150 5340 y(stops)30 b(the)h(en)m(tire)g Fz(awk)f FB(program.)40 b(See)31 b(Section)g(6.4.10)i([The)d Fz(exit)f FB(Statemen)m(t],)j (page)f(106.\))p eop end %%Page: 104 116 TeXDict begin 104 115 bop 150 -116 a FB(104)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(Th)j(follo)m(wing)i(program)f(illustrates)h(ho)m(w)f(the)h Fx(condition)f FB(of)h(a)f Fz(for)f FB(or)h Fz(while)f FB(statemen)m(t)j(could)150 408 y(b)s(e)30 b(replaced)h(with)f(a)g Fz(break)f FB(inside)h(an)h Fz(if)p FB(:)390 550 y Fz(#)47 b(find)g(smallest)f(divisor)f(of)j(num)390 660 y({)485 770 y(num)f(=)h($1)485 879 y(for)f(\(div)g(=)g(2;)h(;)f(div++\))f({)581 989 y(if)h(\(num)g(\045)g(div)g(==)g(0\))g({)676 1098 y(printf)f("Smallest)g(divisor)g(of)h(\045d)g(is)g(\045d\\n",)f(num,)h (div)676 1208 y(break)581 1318 y(})581 1427 y(if)g(\(div*div)f(>)h (num\))g({)676 1537 y(printf)f("\045d)h(is)h(prime\\n",)d(num)676 1646 y(break)581 1756 y(})485 1866 y(})390 1975 y(})275 2117 y FB(The)31 b Fz(break)f FB(statemen)m(t)k(has)e(no)g(meaning)g (when)f(used)g(outside)h(the)g(b)s(o)s(dy)f(of)h(a)g(lo)s(op.)46 b(Ho)m(w)m(ev)m(er,)150 2227 y(although)41 b(it)g(w)m(as)f(nev)m(er)h (do)s(cumen)m(ted,)i(historical)f(implemen)m(tations)f(of)g Fz(awk)e FB(treated)j(the)e Fz(break)150 2336 y FB(statemen)m(t)i (outside)e(of)f(a)i(lo)s(op)e(as)h(if)g(it)g(w)m(ere)h(a)f Fz(next)e FB(statemen)m(t)k(\(see)f(Section)f(6.4.8)i([The)d Fz(next)150 2446 y FB(Statemen)m(t],)49 b(page)c(105\).)82 b(Recen)m(t)46 b(v)m(ersions)e(of)g(Unix)f Fz(awk)g FB(no)h(longer)g (allo)m(w)i(this)d(usage.)82 b Fz(gawk)150 2555 y FB(supp)s(orts)25 b(this)i(use)g(of)g Fz(break)f FB(only)h(if)h(`)p Fz(--traditional)p FB(')c(has)i(b)s(een)h(sp)s(eci\014ed)f(on)h(the)h(command)f(line)150 2665 y(\(see)j(Section)h(11.2)g([Command-Line)e(Options],)g(page)i (173\).)42 b(Otherwise,)29 b(it)h(is)g(treated)g(as)g(an)f(error,)150 2775 y(since)37 b(the)g(POSIX)f(standard)g(sp)s(eci\014es)g(that)i Fz(break)d FB(should)h(only)h(b)s(e)f(used)g(inside)g(the)h(b)s(o)s(dy) f(of)h(a)150 2884 y(lo)s(op.)-666 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: lflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: rflashlight.small.xpic (xpic) %%CreationDate: Tue Dec 12 09:51:27 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 80 32 m 64 24 l x 32 24 m 56 32 l x 32 8 m 56 0 l x 8 16 56 16 e 0 24 32 8 b 64 16 m 80 16 l x 64 8 m 80 0 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 3091 a Fj(6.4.7)63 b(The)41 b Fh(continue)h Fj(Statemen)m(t)150 3238 y FB(As)h(with)g Fz(break)p FB(,)j(the)d Fz(continue)e FB(statemen)m(t)46 b(is)d(used)f(only)i (inside)f Fz(for)p FB(,)j Fz(while)p FB(,)f(and)e Fz(do)g FB(lo)s(ops.)150 3347 y(It)c(skips)e(o)m(v)m(er)j(the)f(rest)g(of)f (the)h(lo)s(op)g(b)s(o)s(dy)-8 b(,)39 b(causing)g(the)g(next)f(cycle)i (around)e(the)g(lo)s(op)h(to)g(b)s(egin)150 3457 y(immediately)-8 b(.)42 b(Con)m(trast)31 b(this)g(with)f Fz(break)p FB(,)f(whic)m(h)h (jumps)f(out)h(of)h(the)g(lo)s(op)f(altogether.)275 3599 y(The)23 b Fz(continue)e FB(statemen)m(t)k(in)f(a)g Fz(for)e FB(lo)s(op)i(directs)g Fz(awk)f FB(to)h(skip)f(the)h(rest)g(of)f(the)h (b)s(o)s(dy)e(of)i(the)g(lo)s(op)150 3709 y(and)34 b(resume)g (execution)h(with)f(the)h(incremen)m(t-expression)g(of)g(the)f Fz(for)g FB(statemen)m(t.)55 b(The)33 b(follo)m(wing)150 3818 y(program)d(illustrates)i(this)e(fact:)390 3960 y Fz(BEGIN)46 b({)629 4070 y(for)h(\(x)g(=)g(0;)g(x)h(<=)f(20;)g(x++\)) g({)820 4179 y(if)g(\(x)g(==)g(5\))1010 4289 y(continue)820 4399 y(printf)f("\045d)h(",)g(x)629 4508 y(})629 4618 y(print)f("")390 4727 y(})150 4869 y FB(This)34 b(program)h(prin)m(ts)f (all)i(the)f(n)m(um)m(b)s(ers)f(from)h(0)g(to)h(20|except)g(for)f(5,)i (for)e(whic)m(h)f(the)i Fz(printf)d FB(is)150 4979 y(skipp)s(ed.)k (Because)25 b(the)g(incremen)m(t)f(`)p Fz(x++)p FB(')g(is)g(not)g (skipp)s(ed,)g Fz(x)f FB(do)s(es)h(not)g(remain)g(stuc)m(k)h(at)f(5.)39 b(Con)m(trast)150 5088 y(the)31 b Fz(for)e FB(lo)s(op)i(from)e(the)i (previous)f(example)h(with)f(the)h(follo)m(wing)g Fz(while)e FB(lo)s(op:)390 5230 y Fz(BEGIN)46 b({)629 5340 y(x)h(=)h(0)p eop end %%Page: 105 117 TeXDict begin 105 116 bop 1755 -116 a Fr(Chapter)30 b(6:)41 b(P)m(atterns,)32 b(Actions,)g(and)d(V)-8 b(ariables)92 b FB(105)629 299 y Fz(while)46 b(\(x)h(<=)g(20\))g({)820 408 y(if)g(\(x)g(==)g(5\))1010 518 y(continue)820 628 y(printf)f("\045d)h(",)g(x)820 737 y(x++)629 847 y(})629 956 y(print)f("")390 1066 y(})150 1201 y FB(This)30 b(program)g(lo)s (ops)g(forev)m(er)h(once)g Fz(x)f FB(reac)m(hes)i(5.)275 1336 y(The)27 b Fz(continue)f FB(statemen)m(t)j(has)f(no)g(meaning)g (when)f(used)g(outside)h(the)g(b)s(o)s(dy)f(of)h(a)g(lo)s(op.)40 b(Histor-)150 1445 y(ical)28 b(v)m(ersions)f(of)f Fz(awk)g FB(treated)i(a)f Fz(continue)d FB(statemen)m(t)k(outside)f(a)g(lo)s(op) g(the)g(same)g(w)m(a)m(y)g(they)g(treated)150 1555 y(a)36 b Fz(break)f FB(statemen)m(t)j(outside)e(a)g(lo)s(op:)52 b(as)36 b(if)g(it)h(w)m(ere)f(a)g Fz(next)f FB(statemen)m(t)j(\(see)f (Section)f(6.4.8)i([The)150 1664 y Fz(next)g FB(Statemen)m(t],)44 b(page)c(105\).)69 b(Recen)m(t)41 b(v)m(ersions)f(of)f(Unix)h Fz(awk)e FB(no)h(longer)h(w)m(ork)g(this)f(w)m(a)m(y)-8 b(,)44 b(and)150 1774 y Fz(gawk)32 b FB(allo)m(ws)j(it)f(only)g(if)f(`) p Fz(--traditional)p FB(')e(is)i(sp)s(eci\014ed)g(on)h(the)f(command)h (line)g(\(see)g(Section)g(11.2)150 1883 y([Command-Line)e(Options],)h (page)h(173\).)49 b(Just)31 b(lik)m(e)j(the)f Fz(break)e FB(statemen)m(t,)k(the)e(POSIX)f(standard)150 1993 y(sp)s(eci\014es)e (that)h Fz(continue)d FB(should)h(only)i(b)s(e)f(used)f(inside)h(the)h (b)s(o)s(dy)e(of)h(a)h(lo)s(op.)1038 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 2193 a Fj(6.4.8)63 b(The)41 b Fh(next)h Fj(Statemen)m(t)150 2340 y FB(The)34 b Fz(next)g FB(statemen)m(t)j (forces)e Fz(awk)f FB(to)h(immediately)h(stop)f(pro)s(cessing)g(the)g (curren)m(t)f(record)h(and)f(go)150 2449 y(on)26 b(to)i(the)f(next)f (record.)40 b(This)25 b(means)i(that)g(no)g(further)e(rules)h(are)h (executed)g(for)g(the)f(curren)m(t)h(record,)150 2559 y(and)j(the)g(rest)h(of)f(the)h(curren)m(t)f(rule's)g(action)i(isn't)f (executed.)275 2694 y(Con)m(trast)38 b(this)h(with)f(the)g(e\013ect)i (of)e(the)h Fz(getline)d FB(function)i(\(see)h(Section)h(3.8)f ([Explicit)g(Input)150 2803 y(with)30 b Fz(getline)p FB(],)f(page)h(51\).)42 b(That)30 b(also)h(causes)g Fz(awk)e FB(to)i(read)f(the)g(next)h(record)f(immediately)-8 b(,)32 b(but)d(it)150 2913 y(do)s(es)35 b(not)g(alter)h(the)g(\015o)m(w)f(of)g (con)m(trol)i(in)d(an)m(y)i(w)m(a)m(y)g(\(i.e.,)i(the)d(rest)h(of)f (the)g(curren)m(t)g(action)i(executes)150 3022 y(with)30 b(a)h(new)f(input)f(record\).)275 3157 y(A)m(t)38 b(the)f(highest)g (lev)m(el,)k Fz(awk)36 b FB(program)h(execution)h(is)f(a)h(lo)s(op)f (that)h(reads)e(an)h(input)g(record)g(and)150 3267 y(then)28 b(tests)h(eac)m(h)g(rule's)f(pattern)h(against)g(it.)41 b(If)27 b(y)m(ou)i(think)f(of)g(this)g(lo)s(op)h(as)f(a)h Fz(for)e FB(statemen)m(t)j(whose)150 3376 y(b)s(o)s(dy)d(con)m(tains)i (the)f(rules,)h(then)f(the)g Fz(next)f FB(statemen)m(t)j(is)e (analogous)i(to)f(a)f Fz(continue)e FB(statemen)m(t.)42 b(It)150 3486 y(skips)30 b(to)i(the)g(end)e(of)h(the)g(b)s(o)s(dy)f(of) h(this)g(implicit)h(lo)s(op)f(and)g(executes)h(the)f(incremen)m(t)h (\(whic)m(h)f(reads)150 3595 y(another)g(record\).)275 3730 y(F)-8 b(or)40 b(example,)j(supp)s(ose)38 b(an)i Fz(awk)e FB(program)i(w)m(orks)g(only)f(on)h(records)f(with)h(four)f (\014elds,)i(and)e(it)150 3840 y(shouldn't)31 b(fail)h(when)f(giv)m(en) i(bad)e(input.)44 b(T)-8 b(o)32 b(a)m(v)m(oid)h(complicating)h(the)e (rest)g(of)g(the)g(program,)g(write)150 3949 y(a)f(\\w)m(eed)g(out")g (rule)f(near)g(the)h(b)s(eginning,)f(in)g(the)g(follo)m(wing)i(manner:) 390 4084 y Fz(NF)47 b(!=)g(4)h({)485 4194 y(err)f(=)h (sprintf\("\045s:\045d:)43 b(skipped:)j(NF)h(!=)g(4\\n",)g(FILENAME,)e (FNR\))485 4303 y(print)i(err)g(>)g("/dev/stderr")485 4413 y(next)390 4522 y(})150 4657 y FB(Because)36 b(of)e(the)h Fz(next)f FB(statemen)m(t,)j(the)e(program's)f(subsequen)m(t)g(rules)g (w)m(on't)h(see)g(the)g(bad)f(record.)150 4767 y(The)41 b(error)f(message)j(is)e(redirected)g(to)h(the)g(standard)e(error)h (output)f(stream,)45 b(as)c(error)g(messages)150 4876 y(should)29 b(b)s(e.)40 b(F)-8 b(or)32 b(more)e(detail)i(see)f(Section) g(4.7)g([Sp)s(ecial)g(File)h(Names)f(in)f Fz(gawk)p FB(],)f(page)j(67.) 275 5011 y(According)37 b(to)g(the)f(POSIX)f(standard,)j(the)e(b)s(eha) m(vior)g(is)h(unde\014ned)d(if)i(the)h Fz(next)e FB(statemen)m(t)j(is) 150 5121 y(used)30 b(in)g(a)g Fz(BEGIN)f FB(or)h Fz(END)g FB(rule.)40 b Fz(gawk)29 b FB(treats)j(it)e(as)h(a)g(syn)m(tax)g (error.)40 b(Although)30 b(POSIX)g(p)s(ermits)f(it,)150 5230 y(some)e(other)g Fz(awk)f FB(implemen)m(tations)i(don't)e(allo)m (w)i(the)f Fz(next)e FB(statemen)m(t)k(inside)d(function)g(b)s(o)s (dies)g(\(see)150 5340 y(Section)32 b(8.2)g([User-De\014ned)f(F)-8 b(unctions],)33 b(page)f(149\).)44 b(Just)30 b(as)i(with)f(an)m(y)g (other)g Fz(next)f FB(statemen)m(t,)k(a)p eop end %%Page: 106 118 TeXDict begin 106 117 bop 150 -116 a FB(106)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz(next)h FB(statemen)m(t)j(inside)d(a)i(function)f(b)s(o)s(dy)e (reads)i(the)g(next)g(record)g(and)f(starts)i(pro)s(cessing)f(it)g (with)150 408 y(the)41 b(\014rst)g(rule)g(in)g(the)g(program.)73 b(If)41 b(the)h Fz(next)e FB(statemen)m(t)j(causes)e(the)h(end)e(of)i (the)f(input)g(to)h(b)s(e)150 518 y(reac)m(hed,)31 b(then)f(the)h(co)s (de)g(in)f(an)m(y)g Fz(END)g FB(rules)g(is)g(executed.)42 b(See)31 b(Section)g(6.1.4)h([The)e Fz(BEGIN)f FB(and)h Fz(END)150 628 y FB(Sp)s(ecial)h(P)m(atterns],)g(page)g(96.)150 836 y Fj(6.4.9)63 b(Using)42 b Fh(gawk)p Fj('s)g Fh(nextfile)g Fj(Statemen)m(t)150 983 y Fz(gawk)32 b FB(pro)m(vides)i(the)g Fz(nextfile)d FB(statemen)m(t,)36 b(whic)m(h)e(is)f(similar)h(to)g(the) g Fz(next)f FB(statemen)m(t.)52 b(Ho)m(w)m(ev)m(er,)150 1093 y(instead)34 b(of)g(abandoning)g(pro)s(cessing)f(of)h(the)g (curren)m(t)g(record,)h(the)f Fz(nextfile)e FB(statemen)m(t)j (instructs)150 1202 y Fz(gawk)29 b FB(to)i(stop)g(pro)s(cessing)f(the)g (curren)m(t)h(data)g(\014le.)275 1346 y(The)36 b Fz(nextfile)e FB(statemen)m(t)39 b(is)d(a)h Fz(gawk)f FB(extension.)60 b(In)36 b(most)h(other)g Fz(awk)f FB(implemen)m(tations,)k(or)150 1456 y(if)h Fz(gawk)f FB(is)i(in)f(compatibilit)m(y)i(mo)s(de)e(\(see)h (Section)g(11.2)h([Command-Line)e(Options],)j(page)e(173\),)150 1566 y Fz(nextfile)28 b FB(is)j(not)f(sp)s(ecial.)275 1710 y(Up)s(on)37 b(execution)i(of)f(the)h Fz(nextfile)c FB(statemen)m(t,)42 b Fz(FILENAME)36 b FB(is)i(up)s(dated)f(to)i(the)f (name)g(of)h(the)150 1819 y(next)32 b(data)h(\014le)f(listed)g(on)g (the)g(command)g(line,)h Fz(FNR)e FB(is)h(reset)h(to)f(one,)h Fz(ARGIND)d FB(is)i(incremen)m(ted,)i(and)150 1929 y(pro)s(cessing)g (starts)g(o)m(v)m(er)h(with)f(the)g(\014rst)f(rule)h(in)g(the)g (program.)51 b(\()p Fz(ARGIND)32 b FB(hasn't)i(b)s(een)g(in)m(tro)s (duced)150 2038 y(y)m(et.)49 b(See)33 b(Section)h(6.5)g([Built-in)g(V) -8 b(ariables],)35 b(page)f(107.\))50 b(If)32 b(the)h Fz(nextfile)e FB(statemen)m(t)j(causes)g(the)150 2148 y(end)25 b(of)h(the)g(input)f(to)i(b)s(e)e(reac)m(hed,)j(then)d(the)h (co)s(de)g(in)g(an)m(y)g Fz(END)f FB(rules)g(is)h(executed.)40 b(See)26 b(Section)h(6.1.4)150 2258 y([The)j Fz(BEGIN)f FB(and)h Fz(END)f FB(Sp)s(ecial)i(P)m(atterns],)h(page)f(96.)275 2401 y(The)43 b Fz(nextfile)e FB(statemen)m(t)46 b(is)e(useful)f(when)g (there)h(are)g(man)m(y)g(data)h(\014les)e(to)i(pro)s(cess)e(but)g(it) 150 2511 y(isn't)33 b(necessary)h(to)g(pro)s(cess)e(ev)m(ery)i(record)f (in)g(ev)m(ery)h(\014le.)49 b(Normally)-8 b(,)35 b(in)e(order)g(to)g (mo)m(v)m(e)i(on)e(to)h(the)150 2621 y(next)i(data)g(\014le,)h(a)f (program)g(has)f(to)h(con)m(tin)m(ue)h(scanning)e(the)h(un)m(w)m(an)m (ted)g(records.)56 b(The)35 b Fz(nextfile)150 2730 y FB(statemen)m(t)d(accomplishes)g(this)e(m)m(uc)m(h)g(more)h(e\016cien)m (tly)-8 b(.)275 2874 y(While)23 b(one)g(migh)m(t)h(think)e(that)h(`)p Fz(close\(FILENAME\))p FB(')d(w)m(ould)i(accomplish)i(the)f(same)g(as)g Fz(nextfile)p FB(,)150 2984 y(this)36 b(isn't)f(true.)57 b Fz(close)34 b FB(is)i(reserv)m(ed)f(for)h(closing)h(\014les,)g(pip)s (es,)f(and)f(copro)s(cesses)h(that)h(are)f(op)s(ened)150 3093 y(with)26 b(redirections.)41 b(It)26 b(is)h(not)g(related)h(to)f (the)g(main)g(pro)s(cessing)g(that)g Fz(awk)f FB(do)s(es)g(with)h(the)g (\014les)f(listed)150 3203 y(in)k Fz(ARGV)p FB(.)275 3347 y(If)d(it's)i(necessary)f(to)h(use)f(an)g Fz(awk)f FB(v)m(ersion)i(that)f(do)s(esn't)g(supp)s(ort)f Fz(nextfile)p FB(,)f(see)j(Section)g(12.2.1)150 3457 y([Implemen)m(ting)24 b Fz(nextfile)e FB(as)i(a)g(F)-8 b(unction],)27 b(page)d(183,)j(for)c (a)i(user-de\014ned)d(function)h(that)i(sim)m(ulates)150 3566 y(the)31 b Fz(nextfile)d FB(statemen)m(t.)275 3710 y(The)33 b(curren)m(t)h(v)m(ersion)h(of)g(the)f(Bell)i(Lab)s(oratories) f Fz(awk)e FB(\(see)i(Section)h(B.6)f([Other)f(F)-8 b(reely)36 b(Av)-5 b(ail-)150 3820 y(able)36 b Fz(awk)f FB(Implemen)m(tations],)k (page)d(277\))h(also)g(supp)s(orts)d Fz(nextfile)p FB(.)54 b(Ho)m(w)m(ev)m(er,)40 b(it)c(do)s(esn't)f(allo)m(w)150 3929 y(the)i Fz(nextfile)d FB(statemen)m(t)k(inside)e(function)g(b)s(o) s(dies)g(\(see)h(Section)h(8.2)f([User-De\014ned)g(F)-8 b(unctions],)150 4039 y(page)32 b(149\).)45 b Fz(gawk)30 b FB(do)s(es;)h(a)h Fz(nextfile)d FB(inside)h(a)i(function)f(b)s(o)s (dy)e(reads)i(the)h(next)f(record)g(and)g(starts)150 4148 y(pro)s(cessing)f(it)h(with)f(the)h(\014rst)e(rule)h(in)g(the)h (program,)f(just)g(as)h(an)m(y)g(other)f Fz(nextfile)e FB(statemen)m(t.)275 4292 y Fr(Caution:)47 b FB(V)-8 b(ersions)34 b(of)g Fz(gawk)e FB(prior)i(to)g(3.0)h(used)e(t)m(w)m(o)i (w)m(ords)e(\(`)p Fz(next)d(file)p FB('\))j(for)g(the)h Fz(nextfile)150 4402 y FB(statemen)m(t.)53 b(In)33 b(v)m(ersion)h(3.0,) i(this)e(w)m(as)g(c)m(hanged)h(to)g(one)f(w)m(ord,)g(b)s(ecause)g(the)g (treatmen)m(t)i(of)e(`)p Fz(file)p FB(')150 4512 y(w)m(as)k (inconsisten)m(t.)62 b(When)37 b(it)h(app)s(eared)f(after)h Fz(next)p FB(,)g(`)p Fz(file)p FB(')e(w)m(as)i(a)g(k)m(eyw)m(ord;)j (otherwise,)f(it)e(w)m(as)150 4621 y(a)f(regular)f(iden)m(ti\014er.)59 b(The)36 b(old)h(usage)g(is)f(no)h(longer)g(accepted;)k(`)p Fz(next)29 b(file)p FB(')36 b(generates)i(a)e(syn)m(tax)150 4731 y(error.)150 4939 y Fj(6.4.10)63 b(The)41 b Fh(exit)h Fj(Statemen)m(t)150 5086 y FB(The)28 b Fz(exit)f FB(statemen)m(t)k (causes)e Fz(awk)f FB(to)h(immediately)h(stop)e(executing)i(the)f (curren)m(t)f(rule)h(and)f(to)h(stop)150 5196 y(pro)s(cessing)e(input;) g(an)m(y)h(remaining)f(input)f(is)h(ignored.)40 b(The)26 b Fz(exit)g FB(statemen)m(t)j(is)e(written)g(as)h(follo)m(ws:)390 5340 y Fz(exit)47 b FB([)p Fk(return)f(code)11 b FB(])p eop end %%Page: 107 119 TeXDict begin 107 118 bop 1755 -116 a Fr(Chapter)30 b(6:)41 b(P)m(atterns,)32 b(Actions,)g(and)d(V)-8 b(ariables)92 b FB(107)275 299 y(When)33 b(an)h Fz(exit)e FB(statemen)m(t)k(is)d (executed)i(from)e(a)h Fz(BEGIN)f FB(rule,)h(the)g(program)g(stops)f (pro)s(cessing)150 408 y(ev)m(erything)h(immediately)-8 b(.)50 b(No)33 b(input)f(records)h(are)g(read.)48 b(Ho)m(w)m(ev)m(er,) 36 b(if)d(an)f Fz(END)g FB(rule)h(is)g(presen)m(t,)h(as)150 518 y(part)25 b(of)g(executing)h(the)f Fz(exit)f FB(statemen)m(t,)k (the)d Fz(END)f FB(rule)h(is)g(executed)g(\(see)h(Section)g(6.1.4)h ([The)d Fz(BEGIN)150 628 y FB(and)34 b Fz(END)g FB(Sp)s(ecial)h(P)m (atterns],)i(page)f(96\).)55 b(If)34 b Fz(exit)g FB(is)g(used)g(as)h (part)g(of)g(an)g Fz(END)e FB(rule,)j(it)g(causes)f(the)150 737 y(program)30 b(to)h(stop)g(immediately)-8 b(.)275 877 y(An)34 b Fz(exit)g FB(statemen)m(t)j(that)f(is)f(not)g(part)g(of)g (a)g Fz(BEGIN)f FB(or)h Fz(END)f FB(rule)h(stops)g(the)g(execution)h (of)g(an)m(y)150 986 y(further)c(automatic)j(rules)e(for)g(the)g (curren)m(t)g(record,)h(skips)f(reading)g(an)m(y)g(remaining)h(input)e (records,)150 1096 y(and)e(executes)h(the)g Fz(END)e FB(rule)i(if)f(there)g(is)h(one.)275 1235 y(In)21 b(suc)m(h)h(a)h (case,)i(if)d(y)m(ou)h(don't)f(w)m(an)m(t)h(the)g Fz(END)e FB(rule)h(to)h(do)g(its)f(job,)i(set)f(a)g(v)-5 b(ariable)23 b(to)g(nonzero)f(b)s(efore)150 1345 y(the)28 b Fz(exit)e FB(statemen)m(t)j(and)e(c)m(hec)m(k)i(that)f(v)-5 b(ariable)28 b(in)f(the)h Fz(END)e FB(rule.)39 b(See)28 b(Section)g(12.2.3)i ([Assertions],)150 1454 y(page)h(185,)h(for)e(an)g(example)i(that)e(do) s(es)h(this.)275 1594 y(If)f(an)i(argumen)m(t)g(is)f(supplied)f(to)i Fz(exit)p FB(,)f(its)h(v)-5 b(alue)31 b(is)h(used)e(as)i(the)g(exit)g (status)g(co)s(de)f(for)g(the)h Fz(awk)150 1703 y FB(pro)s(cess.)47 b(If)32 b(no)h(argumen)m(t)g(is)f(supplied,)h Fz(exit)e FB(returns)g(status)i(zero)h(\(success\).)48 b(In)32 b(the)h(case)g(where)150 1813 y(an)i(argumen)m(t)g(is)g(supplied)f(to)h (a)g(\014rst)g Fz(exit)e FB(statemen)m(t,)38 b(and)d(then)f Fz(exit)g FB(is)h(called)h(a)f(second)g(time)150 1923 y(from)30 b(an)g Fz(END)g FB(rule)g(with)g(no)g(argumen)m(t,)h Fz(awk)f FB(uses)g(the)g(previously)g(supplied)f(exit)j(v)-5 b(alue.)648 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 275 2062 a(F)-8 b(or)29 b(example,)i(supp)s(ose)d(an)h (error)f(condition)i(o)s(ccurs)f(that)h(is)f(di\016cult)g(or)g(imp)s (ossible)g(to)h(handle.)150 2172 y(Con)m(v)m(en)m(tionally)-8 b(,)42 b(programs)37 b(rep)s(ort)f(this)h(b)m(y)g(exiting)i(with)e(a)g (nonzero)h(status.)61 b(An)37 b Fz(awk)f FB(program)150 2281 y(can)f(do)f(this)h(using)f(an)h Fz(exit)e FB(statemen)m(t)k(with) d(a)h(nonzero)g(argumen)m(t,)h(as)f(sho)m(wn)f(in)h(the)f(follo)m(wing) 150 2391 y(example:)390 2530 y Fz(BEGIN)46 b({)724 2640 y(if)h(\(\("date")f(|)h(getline)f(date_now\))f(<=)j(0\))f({)820 2749 y(print)f("Can't)g(get)h(system)f(date")g(>)i("/dev/stderr")820 2859 y(exit)e(1)724 2968 y(})724 3078 y(print)g("current)g(date)h(is",) f(date_now)724 3188 y(close\("date"\))390 3297 y(})150 3537 y FA(6.5)68 b(Built-in)45 b(V)-11 b(ariables)150 3696 y FB(Most)38 b Fz(awk)f FB(v)-5 b(ariables)38 b(are)f(a)m(v)-5 b(ailable)40 b(to)e(use)f(for)g(y)m(our)g(o)m(wn)h(purp)s(oses;)h(they) f(nev)m(er)f(c)m(hange)i(unless)150 3806 y(y)m(our)32 b(program)h(assigns)f(v)-5 b(alues)33 b(to)g(them,)g(and)f(they)h(nev)m (er)f(a\013ect)i(an)m(ything)f(unless)f(y)m(our)g(program)150 3916 y(examines)46 b(them.)86 b(Ho)m(w)m(ev)m(er,)52 b(a)45 b(few)h(v)-5 b(ariables)46 b(in)f Fz(awk)g FB(ha)m(v)m(e)h(sp)s (ecial)g(built-in)g(meanings.)86 b Fz(awk)150 4025 y FB(examines)27 b(some)h(of)f(these)g(automatically)-8 b(,)31 b(so)c(that)h(they)f(enable)g(y)m(ou)g(to)h(tell)g Fz(awk)e FB(ho)m(w)h(to)g(do)g(certain)150 4135 y(things.)38 b(Others)20 b(are)i(set)g(automatically)i(b)m(y)e Fz(awk)p FB(,)g(so)g(that)g(they)g(carry)f(information)h(from)f(the)g(in)m (ternal)150 4244 y(w)m(orkings)31 b(of)f Fz(awk)g FB(to)h(y)m(our)f (program.)275 4384 y(This)i(section)i(do)s(cumen)m(ts)e(all)i(the)f (built-in)g(v)-5 b(ariables)33 b(of)h Fz(gawk)p FB(,)e(most)h(of)h (whic)m(h)e(are)h(also)h(do)s(cu-)150 4493 y(men)m(ted)d(in)f(the)g(c)m (hapters)h(describing)f(their)h(areas)g(of)f(activit)m(y)-8 b(.)150 4698 y Fj(6.5.1)63 b(Built-in)41 b(V)-10 b(ariables)41 b(That)f(Con)m(trol)h Fh(awk)150 4844 y FB(The)22 b(follo)m(wing)i(is)f (an)f(alphab)s(etical)i(list)g(of)e(v)-5 b(ariables)24 b(that)f(y)m(ou)g(can)g(c)m(hange)g(to)h(con)m(trol)g(ho)m(w)f Fz(awk)e FB(do)s(es)150 4954 y(certain)31 b(things.)41 b(The)30 b(v)-5 b(ariables)31 b(that)g(are)f(sp)s(eci\014c)h(to)g Fz(gawk)e FB(are)i(mark)m(ed)f(with)g(a)h(p)s(ound)d(sign)j(\(`)p Fz(#)p FB('\).)150 5121 y Fz(BINMODE)d(#)68 b FB(On)31 b(non-POSIX)f(systems,)i(this)f(v)-5 b(ariable)32 b(sp)s(eci\014es)g (use)f(of)g(binary)g(mo)s(de)g(for)g(all)i(I/O.)630 5230 y(Numeric)38 b(v)-5 b(alues)39 b(of)g(one,)i(t)m(w)m(o,)h(or)c(three)g (sp)s(ecify)g(that)h(input)f(\014les,)i(output)e(\014les,)j(or)630 5340 y(all)31 b(\014les,)f(resp)s(ectiv)m(ely)-8 b(,)31 b(should)e(use)h(binary)f(I/O.)g(Alternativ)m(ely)-8 b(,)33 b(string)d(v)-5 b(alues)30 b(of)g Fz("r")p eop end %%Page: 108 120 TeXDict begin 108 119 bop 150 -116 a FB(108)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)630 299 y FB(or)i Fz("w")e FB(sp)s(ecify)i(that)g(input)f(\014les)g(and)g (output)h(\014les,)g(resp)s(ectiv)m(ely)-8 b(,)34 b(should)c(use)i (binary)630 408 y(I/O.)k(A)h(string)f(v)-5 b(alue)36 b(of)h Fz("rw")e FB(or)h Fz("wr")f FB(indicates)i(that)g(all)g(\014les) f(should)f(use)h(binary)630 518 y(I/O.)25 b(An)m(y)g(other)g(string)g (v)-5 b(alue)25 b(is)g(equiv)-5 b(alen)m(t)27 b(to)e Fz("rw")p FB(,)h(but)e Fz(gawk)g FB(generates)i(a)f(w)m(arning)630 628 y(message.)41 b Fz(BINMODE)25 b FB(is)i(describ)s(ed)f(in)g(more)i (detail)g(in)e(Section)i(B.3.3.4)i([Using)d Fz(gawk)f FB(on)630 737 y(PC)k(Op)s(erating)g(Systems],)g(page)i(269.)630 872 y(This)d(v)-5 b(ariable)32 b(is)e(a)h Fz(gawk)e FB(extension.)41 b(In)30 b(other)g Fz(awk)f FB(implemen)m(tations)j(\(except)g Fz(mawk)p FB(,)630 982 y(see)40 b(Section)g(B.6)g([Other)f(F)-8 b(reely)41 b(Av)-5 b(ailable)41 b Fz(awk)d FB(Implemen)m(tations],)43 b(page)e(277\),)i(or)630 1091 y(if)d Fz(gawk)e FB(is)i(in)f (compatibilit)m(y)j(mo)s(de)d(\(see)i(Section)f(11.2)i([Command-Line)d (Options],)630 1201 y(page)31 b(173\),)h(it)f(is)g(not)f(sp)s(ecial.) 150 1361 y Fz(CONVFMT)144 b FB(This)41 b(string)i(con)m(trols)g(con)m (v)m(ersion)g(of)g(n)m(um)m(b)s(ers)e(to)h(strings)g(\(see)i(Section)f (5.4)g([Con-)630 1470 y(v)m(ersion)c(of)h(Strings)e(and)g(Num)m(b)s (ers],)j(page)f(77\).)67 b(It)40 b(w)m(orks)e(b)m(y)h(b)s(eing)g (passed,)i(in)e(ef-)630 1580 y(fect,)e(as)e(the)g(\014rst)f(argumen)m (t)h(to)h(the)f Fz(sprintf)d FB(function)j(\(see)h(Section)f(8.1.3)i ([String-)630 1689 y(Manipulation)32 b(F)-8 b(unctions],)33 b(page)f(129\).)45 b(Its)31 b(default)h(v)-5 b(alue)32 b(is)f Fz("\045.6g")p FB(.)42 b Fz(CONVFMT)30 b FB(w)m(as)630 1799 y(in)m(tro)s(duced)g(b)m(y)g(the)h(POSIX)e(standard.)150 1959 y Fz(FIELDWIDTHS)e(#)630 2068 y FB(This)f(is)h(a)g (space-separated)h(list)g(of)f(columns)f(that)i(tells)f Fz(gawk)f FB(ho)m(w)h(to)g(split)g(input)f(with)630 2178 y(\014xed)e(columnar)h(b)s(oundaries.)37 b(Assigning)25 b(a)g(v)-5 b(alue)25 b(to)h Fz(FIELDWIDTHS)c FB(o)m(v)m(errides)j(the)g (use)630 2288 y(of)31 b Fz(FS)g FB(for)g(\014eld)f(splitting.)44 b(See)31 b(Section)h(3.6)g([Reading)g(Fixed-Width)g(Data],)h(page)f (47,)630 2397 y(for)e(more)h(information.)630 2532 y(If)38 b Fz(gawk)g FB(is)h(in)g(compatibilit)m(y)i(mo)s(de)d(\(see)i(Section)g (11.2)g([Command-Line)f(Options],)630 2642 y(page)32 b(173\),)h(then)e Fz(FIELDWIDTHS)d FB(has)j(no)g(sp)s(ecial)g(meaning,) h(and)e(\014eld-splitting)i(op)s(er-)630 2751 y(ations)f(o)s(ccur)f (based)g(exclusiv)m(ely)i(on)f(the)f(v)-5 b(alue)31 b(of)g Fz(FS)p FB(.)150 2911 y Fz(FS)384 b FB(This)22 b(is)g(the)h(input)e (\014eld)h(separator)h(\(see)g(Section)g(3.5)h([Sp)s(ecifying)e(Ho)m(w) h(Fields)g(Are)f(Sep-)630 3021 y(arated],)j(page)e(43\).)39 b(The)22 b(v)-5 b(alue)23 b(is)f(a)h(single-c)m(haracter)h(string)f(or) f(a)h(m)m(ulti-c)m(haracter)h(reg-)630 3130 y(ular)k(expression)h(that) g(matc)m(hes)h(the)f(separations)g(b)s(et)m(w)m(een)h(\014elds)e(in)g (an)h(input)f(record.)630 3240 y(If)g(the)h(v)-5 b(alue)29 b(is)g(the)f(n)m(ull)h(string)g(\()p Fz("")p FB(\),)g(then)f(eac)m(h)i (c)m(haracter)g(in)e(the)h(record)g(b)s(ecomes)g(a)630 3349 y(separate)f(\014eld.)39 b(\(This)26 b(b)s(eha)m(vior)h(is)g(a)h Fz(gawk)d FB(extension.)41 b(POSIX)26 b Fz(awk)g FB(do)s(es)g(not)h(sp) s(ecify)630 3459 y(the)k(b)s(eha)m(vior)f(when)f Fz(FS)h FB(is)h(the)f(n)m(ull)g(string.\))630 3594 y(The)41 b(default)g(v)-5 b(alue)42 b(is)g Fz(")30 b(")p FB(,)44 b(a)e(string)f(consisting)h(of)g (a)g(single)g(space.)74 b(As)42 b(a)f(sp)s(ecial)630 3703 y(exception,)31 b(this)d(v)-5 b(alue)30 b(means)f(that)g(an)m(y)g (sequence)h(of)f(spaces,)h(tabs,)f(and/or)g(newlines)630 3813 y(is)d(a)g(single)h(separator.)1431 3780 y Fo(2)1508 3813 y FB(It)f(also)g(causes)h(spaces,)g(tabs,)g(and)e(newlines)h(at)h (the)f(b)s(eginning)630 3922 y(and)k(end)f(of)i(a)g(record)f(to)h(b)s (e)f(ignored.)630 4057 y(Y)-8 b(ou)31 b(can)g(set)f(the)h(v)-5 b(alue)31 b(of)f Fz(FS)g FB(on)g(the)h(command)f(line)h(using)f(the)g (`)p Fz(-F)p FB(')h(option:)870 4192 y Fz(awk)47 b(-F,)g(')p Fk(program)11 b Fz(')45 b Fk(input-files)630 4327 y FB(If)31 b Fz(gawk)g FB(is)g(using)h Fz(FIELDWIDTHS)c FB(for)k(\014eld)f (splitting,)i(assigning)f(a)g(v)-5 b(alue)32 b(to)g Fz(FS)g FB(causes)630 4436 y Fz(gawk)e FB(to)j(return)d(to)j(the)f(normal,)g Fz(FS)p FB(-based)f(\014eld)g(splitting.)45 b(An)31 b(easy)i(w)m(a)m(y) f(to)h(do)e(this)630 4546 y(is)f(to)i(simply)d(sa)m(y)j(`)p Fz(FS)e(=)g(FS)p FB(',)g(p)s(erhaps)e(with)j(an)f(explanatory)h(commen) m(t.)150 4706 y Fz(IGNORECASE)d(#)630 4815 y FB(If)22 b Fz(IGNORECASE)e FB(is)j(nonzero)g(or)g(non-n)m(ull,)h(then)e(all)i (string)e(comparisons)h(and)f(all)i(regular)630 4925 y(expression)i(matc)m(hing)i(are)f(case)h(indep)s(enden)m(t.)38 b(Th)m(us,)27 b(regexp)g(matc)m(hing)g(with)g(`)p Fz(~)p FB(')g(and)630 5034 y(`)p Fz(!~)p FB(',)44 b(as)e(w)m(ell)g(as)f(the)h Fz(gensub)p FB(,)g Fz(gsub)p FB(,)h Fz(index)p FB(,)g Fz(match)p FB(,)f Fz(split)p FB(,)h(and)e Fz(sub)f FB(functions,)630 5144 y(record)e(termination)h(with)f Fz(RS)p FB(,)i(and)e(\014eld)g (splitting)h(with)f Fz(FS)p FB(,)i(all)f(ignore)g(case)g(when)p 150 5241 1200 4 v 199 5308 a Fo(2)275 5340 y Fn(In)25 b(POSIX)f Fm(awk)p Fn(,)j(newline)f(do)r(es)g(not)g(coun)n(t)f(as)h (whitespace.)p eop end %%Page: 109 121 TeXDict begin 109 120 bop 1755 -116 a Fr(Chapter)30 b(6:)41 b(P)m(atterns,)32 b(Actions,)g(and)d(V)-8 b(ariables)92 b FB(109)630 299 y(doing)40 b(their)f(particular)h(regexp)g(op)s (erations.)68 b(Ho)m(w)m(ev)m(er,)44 b(the)c(v)-5 b(alue)40 b(of)g Fz(IGNORECASE)630 408 y FB(do)s(es)f Fw(not)49 b FB(a\013ect)42 b(arra)m(y)e(subscripting)e(and)i(it)g(do)s(es)f(not)h (a\013ect)h(\014eld)f(splitting)g(when)630 518 y(using)h(a)h(single-c)m (haracter)i(\014eld)c(separator.)75 b(See)41 b(Section)h(2.6)h([Case)f (Sensitivit)m(y)g(in)630 628 y(Matc)m(hing],)33 b(page)e(32.)630 766 y(If)38 b Fz(gawk)g FB(is)h(in)g(compatibilit)m(y)i(mo)s(de)d (\(see)i(Section)g(11.2)g([Command-Line)f(Options],)630 876 y(page)33 b(173\),)j(then)c Fz(IGNORECASE)e FB(has)i(no)h(sp)s (ecial)g(meaning.)48 b(Th)m(us,)33 b(string)g(and)f(regexp)630 986 y(op)s(erations)f(are)f(alw)m(a)m(ys)i(case-sensitiv)m(e.)150 1154 y Fz(LINT)d(#)211 b FB(When)23 b(this)f(v)-5 b(ariable)24 b(is)e(true)h(\(nonzero)g(or)g(non-n)m(ull\),)i Fz(gawk)c FB(b)s(eha)m(v)m(es)j(as)e(if)h(the)g(`)p Fz(--lint)p FB(')630 1263 y(command-line)36 b(option)g(is)f(in)g(e\013ect.)57 b(\(see)36 b(Section)g(11.2)h([Command-Line)e(Options],)630 1373 y(page)f(173\).)52 b(With)34 b(a)g(v)-5 b(alue)34 b(of)g Fz("fatal")p FB(,)e(lin)m(t)j(w)m(arnings)e(b)s(ecome)h(fatal)h (errors.)49 b(With)630 1482 y(a)30 b(v)-5 b(alue)31 b(of)f Fz("invalid")p FB(,)e(only)i(w)m(arnings)g(ab)s(out)g(things)g(that)h (are)f(actually)i(in)m(v)-5 b(alid)31 b(are)630 1592 y(issued.)37 b(\(This)21 b(is)h(not)g(fully)f(implemen)m(ted)i(y)m (et.\))39 b(An)m(y)22 b(other)f(true)h(v)-5 b(alue)22 b(prin)m(ts)f(nonfatal)630 1702 y(w)m(arnings.)40 b(Assigning)31 b(a)g(false)g(v)-5 b(alue)31 b(to)g Fz(LINT)e FB(turns)g(o\013)i(the)g (lin)m(t)g(w)m(arnings.)630 1840 y(This)22 b(v)-5 b(ariable)23 b(is)f(a)h Fz(gawk)e FB(extension.)39 b(It)22 b(is)h(not)f(sp)s(ecial)h (in)f(other)h Fz(awk)e FB(implemen)m(tations.)630 1950 y(Unlik)m(e)31 b(the)f(other)h(sp)s(ecial)g(v)-5 b(ariables,)31 b(c)m(hanging)g Fz(LINT)e FB(do)s(es)h(a\013ect)h(the)g(pro)s(duction)e (of)630 2060 y(lin)m(t)41 b(w)m(arnings,)j(ev)m(en)d(if)f Fz(gawk)g FB(is)h(in)f(compatibilit)m(y)j(mo)s(de.)71 b(Muc)m(h)40 b(as)h(the)g(`)p Fz(--lint)p FB(')630 2169 y(and)30 b(`)p Fz(--traditional)p FB(')d(options)j(indep)s(enden)m(tly) f(con)m(trol)j(di\013eren)m(t)e(asp)s(ects)h(of)f Fz(gawk)p FB('s)630 2279 y(b)s(eha)m(vior,)f(the)f(con)m(trol)h(of)f(lin)m(t)h(w) m(arnings)f(during)e(program)i(execution)h(is)f(indep)s(enden)m(t)630 2388 y(of)j(the)f(\015a)m(v)m(or)h(of)g Fz(awk)e FB(b)s(eing)h (executed.)150 2556 y Fz(OFMT)288 b FB(This)31 b(string)g(con)m(trols)i (con)m(v)m(ersion)f(of)g(n)m(um)m(b)s(ers)e(to)i(strings)f(\(see)h (Section)g(5.4)h([Con)m(v)m(er-)630 2666 y(sion)e(of)f(Strings)g(and)g (Num)m(b)s(ers],)g(page)h(77\))h(for)e(prin)m(ting)h(with)f(the)h Fz(print)e FB(statemen)m(t.)630 2776 y(It)38 b(w)m(orks)g(b)m(y)g(b)s (eing)g(passed)f(as)i(the)f(\014rst)f(argumen)m(t)i(to)g(the)f Fz(sprintf)e FB(function)i(\(see)630 2885 y(Section)g(8.1.3)g ([String-Manipulation)g(F)-8 b(unctions],)39 b(page)f(129\).)61 b(Its)37 b(default)g(v)-5 b(alue)37 b(is)630 2995 y Fz("\045.6g")p FB(.)52 b(Earlier)35 b(v)m(ersions)g(of)g Fz(awk)f FB(also)i(used)e Fz(OFMT)f FB(to)j(sp)s(ecify)e(the)h(format)g(for)f(con-)630 3104 y(v)m(erting)28 b(n)m(um)m(b)s(ers)d(to)j(strings)f(in)f(general)i (expressions;)g(this)f(is)g(no)m(w)g(done)g(b)m(y)g Fz(CONVFMT)p FB(.)150 3272 y Fz(OFS)336 b FB(This)22 b(is)h(the)g(output)f(\014eld)g (separator)h(\(see)h(Section)g(4.3)f([Output)f(Separators],)j(page)e (59\).)630 3382 y(It)31 b(is)f(output)g(b)s(et)m(w)m(een)i(the)e (\014elds)g(prin)m(ted)h(b)m(y)f(a)h Fz(print)e FB(statemen)m(t.)43 b(Its)31 b(default)f(v)-5 b(alue)630 3492 y(is)30 b Fz(")g(")p FB(,)h(a)f(string)h(consisting)g(of)g(a)f(single)h(space.)150 3660 y Fz(ORS)336 b FB(This)39 b(is)g(the)g(output)g(record)h (separator.)68 b(It)39 b(is)h(output)f(at)h(the)f(end)g(of)g(ev)m(ery)h Fz(print)630 3769 y FB(statemen)m(t.)63 b(Its)36 b(default)i(v)-5 b(alue)37 b(is)g Fz("\\n")p FB(,)h(the)f(newline)g(c)m(haracter.)62 b(\(See)38 b(Section)g(4.3)630 3879 y([Output)29 b(Separators],)i(page) h(59.\))150 4047 y Fz(RS)384 b FB(This)32 b(is)i Fz(awk)p FB('s)e(input)g(record)i(separator.)49 b(Its)34 b(default)f(v)-5 b(alue)34 b(is)f(a)h(string)f(con)m(taining)i(a)630 4156 y(single)c(newline)f(c)m(haracter,)i(whic)m(h)e(means)g(that)h(an)f (input)f(record)h(consists)g(of)h(a)f(single)630 4266 y(line)i(of)g(text.)46 b(It)32 b(can)g(also)h(b)s(e)e(the)h(n)m(ull)g (string,)h(in)e(whic)m(h)h(case)h(records)e(are)h(separated)630 4376 y(b)m(y)27 b(runs)e(of)i(blank)f(lines.)40 b(If)26 b(it)i(is)f(a)g(regexp,)h(records)f(are)g(separated)g(b)m(y)g(matc)m (hes)h(of)f(the)630 4485 y(regexp)37 b(in)f(the)g(input)g(text.)59 b(\(See)37 b(Section)g(3.1)h([Ho)m(w)f(Input)e(Is)h(Split)g(in)m(to)h (Records],)630 4595 y(page)31 b(36.\))630 4734 y(The)c(abilit)m(y)i (for)e Fz(RS)g FB(to)h(b)s(e)f(a)h(regular)g(expression)f(is)g(a)h Fz(gawk)f FB(extension.)40 b(In)27 b(most)h(other)630 4843 y Fz(awk)44 b FB(implemen)m(tations,)50 b(or)44 b(if)h Fz(gawk)e FB(is)i(in)f(compatibilit)m(y)j(mo)s(de)d(\(see)i (Section)f(11.2)630 4953 y([Command-Line)40 b(Options],)i(page)f (173\),)j(just)c(the)g(\014rst)f(c)m(haracter)j(of)e Fz(RS)p FB('s)f(v)-5 b(alue)41 b(is)630 5062 y(used.)150 5230 y Fz(SUBSEP)192 b FB(This)44 b(is)i(the)f(subscript)f(separator.) 86 b(It)46 b(has)f(the)g(default)h(v)-5 b(alue)45 b(of)h Fz("\\034")d FB(and)i(is)630 5340 y(used)38 b(to)h(separate)g(the)g (parts)f(of)h(the)f(indices)h(of)g(a)g(m)m(ultidimensional)g(arra)m(y) -8 b(.)66 b(Th)m(us,)p eop end %%Page: 110 122 TeXDict begin 110 121 bop 150 -116 a FB(110)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)630 299 y FB(the)k(expression)g Fz(foo["A",)28 b("B"])33 b FB(really)i(accesses)h Fz(foo["A\\034B"])30 b FB(\(see)35 b(Section)g(7.9)630 408 y([Multidimensional)c(Arra)m(ys],)g(page)h (122\).)150 589 y Fz(TEXTDOMAIN)c(#)630 698 y FB(This)35 b(v)-5 b(ariable)36 b(is)g(used)e(for)i(in)m(ternationalization)j(of)c (programs)g(at)i(the)e Fz(awk)g FB(lev)m(el.)58 b(It)630 808 y(sets)28 b(the)f(default)h(text)g(domain)g(for)f(sp)s(ecially)h (mark)m(ed)f(string)h(constan)m(ts)g(in)f(the)h(source)630 918 y(text,)h(as)f(w)m(ell)h(as)e(for)h(the)f Fz(dcgettext)p FB(,)f Fz(dcngettext)f FB(and)i Fz(bindtextdomain)c FB(functions)630 1027 y(\(see)35 b(Chapter)e(9)i([In)m(ternationalization)i(with)d Fz(gawk)p FB(],)g(page)h(156\).)53 b(The)33 b(default)h(v)-5 b(alue)630 1137 y(of)31 b Fz(TEXTDOMAIN)c FB(is)k Fz("messages")p FB(.)630 1282 y(This)h(v)-5 b(ariable)33 b(is)g(a)g Fz(gawk)e FB(extension.)48 b(In)32 b(other)h Fz(awk)f FB(implemen)m(tations,)i (or)f(if)f Fz(gawk)g FB(is)630 1391 y(in)j(compatibilit)m(y)j(mo)s(de)e (\(see)g(Section)h(11.2)g([Command-Line)e(Options],)j(page)e(173\),)630 1501 y(it)31 b(is)f(not)h(sp)s(ecial.)150 1721 y Fj(6.5.2)63 b(Built-in)41 b(V)-10 b(ariables)41 b(That)f(Con)m(v)m(ey)g (Information)150 1868 y FB(The)h(follo)m(wing)i(is)f(an)f(alphab)s (etical)i(list)f(of)g(v)-5 b(ariables)42 b(that)g Fz(awk)f FB(sets)h(automatically)j(on)c(certain)150 1978 y(o)s(ccasions)32 b(in)g(order)e(to)i(pro)m(vide)g(information)g(to)g(y)m(our)f(program.) 44 b(The)30 b(v)-5 b(ariables)32 b(that)g(are)g(sp)s(eci\014c)150 2087 y(to)f Fz(gawk)e FB(are)i(mark)m(ed)g(with)f(a)g(p)s(ound)f(sign)h (\(`)p Fz(#)p FB('\).)150 2278 y Fz(ARGC)p FB(,)f Fz(ARGV)630 2388 y FB(The)f(command-line)h(argumen)m(ts)g(a)m(v)-5 b(ailable)31 b(to)f Fz(awk)d FB(programs)i(are)g(stored)g(in)f(an)g (arra)m(y)630 2497 y(called)45 b Fz(ARGV)p FB(.)81 b Fz(ARGC)42 b FB(is)i(the)h(n)m(um)m(b)s(er)d(of)i(command-line)h (argumen)m(ts)f(presen)m(t.)82 b(See)630 2607 y(Section)40 b(11.3)g([Other)f(Command-Line)g(Argumen)m(ts],)i(page)f(178.)68 b(Unlik)m(e)40 b(most)g Fz(awk)630 2717 y FB(arra)m(ys,)31 b Fz(ARGV)e FB(is)i(indexed)e(from)h(0)h(to)g Fz(ARGC)e Fy(\000)h FB(1.)42 b(In)29 b(the)i(follo)m(wing)h(example:)870 2862 y Fz($)47 b(awk)g('BEGIN)f({)870 2971 y(>)429 b(for)47 b(\(i)g(=)h(0;)f(i)g(<)h(ARGC;)e(i++\))870 3081 y(>)620 b(print)47 b(ARGV[i])870 3190 y(>)286 b(}')47 b(inventory-shipped)c (BBS-list)890 3304 y Fy(a)1013 3300 y Fz(awk)890 3414 y Fy(a)1013 3410 y Fz(inventory-shipped)890 3523 y Fy(a)1013 3519 y Fz(BBS-list)630 3664 y(ARGV[0])71 b FB(con)m(tains)j Fz("awk")p FB(,)82 b Fz(ARGV[1])70 b FB(con)m(tains)k Fz("inventory-shipped")p FB(,)79 b(and)630 3774 y Fz(ARGV[2])30 b FB(con)m(tains)k Fz("BBS-list")p FB(.)44 b(The)31 b(v)-5 b(alue)33 b(of)g Fz(ARGC)e FB(is)h(three,)i(one)e(more)h(than)f(the)630 3883 y(index)41 b(of)g(the)g(last)h(elemen)m(t)h(in)e Fz(ARGV)p FB(,)h(b)s(ecause)f(the)h(elemen)m(ts)g(are)g(n)m(um)m(b)s (ered)d(from)630 3993 y(zero.)630 4138 y(The)j(names)g Fz(ARGC)f FB(and)h Fz(ARGV)p FB(,)i(as)f(w)m(ell)g(as)f(the)h(con)m(v)m (en)m(tion)h(of)f(indexing)f(the)g(arra)m(y)630 4247 y(from)d(0)g(to)h Fz(ARGC)e Fy(\000)g FB(1,)k(are)e(deriv)m(ed)f(from)f (the)i(C)e(language's)j(metho)s(d)d(of)h(accessing)630 4357 y(command-line)31 b(argumen)m(ts.)630 4502 y(The)h(v)-5 b(alue)33 b(of)g Fz(ARGV[0])e FB(can)i(v)-5 b(ary)32 b(from)h(system)f(to)i(system.)47 b(Also,)35 b(y)m(ou)e(should)e(note) 630 4612 y(that)g(the)g(program)f(text)h(is)g Fw(not)40 b FB(included)29 b(in)h Fz(ARGV)p FB(,)g(nor)g(are)h(an)m(y)g(of)f Fz(awk)p FB('s)g(command-)630 4721 y(line)25 b(options.)40 b(See)25 b(Section)h(6.5.3)g([Using)g Fz(ARGC)e FB(and)g Fz(ARGV)p FB(],)h(page)h(113,)i(for)d(information)630 4831 y(ab)s(out)30 b(ho)m(w)g Fz(awk)g FB(uses)g(these)h(v)-5 b(ariables.)150 5011 y Fz(ARGIND)29 b(#)115 b FB(The)32 b(index)g(in)h Fz(ARGV)e FB(of)i(the)g(curren)m(t)g(\014le)f(b)s(eing)h (pro)s(cessed.)47 b(Ev)m(ery)33 b(time)g Fz(gawk)f FB(op)s(ens)630 5121 y(a)37 b(new)f(data)h(\014le)g(for)f(pro)s(cessing,)i(it)f(sets)g Fz(ARGIND)e FB(to)i(the)g(index)f(in)g Fz(ARGV)f FB(of)i(the)g(\014le) 630 5230 y(name.)58 b(When)36 b Fz(gawk)f FB(is)h(pro)s(cessing)g(the)g (input)f(\014les,)j(`)p Fz(FILENAME)28 b(==)i(ARGV[ARGIND])p FB(')630 5340 y(is)g(alw)m(a)m(ys)i(true.)p eop end %%Page: 111 123 TeXDict begin 111 122 bop 1755 -116 a Fr(Chapter)30 b(6:)41 b(P)m(atterns,)32 b(Actions,)g(and)d(V)-8 b(ariables)92 b FB(111)630 299 y(This)29 b(v)-5 b(ariable)30 b(is)g(useful)f(in)g (\014le)h(pro)s(cessing;)g(it)g(allo)m(ws)h(y)m(ou)f(to)h(tell)g(ho)m (w)e(far)h(along)h(y)m(ou)630 408 y(are)c(in)g(the)g(list)g(of)g(data)h (\014les)e(as)h(w)m(ell)h(as)f(to)h(distinguish)e(b)s(et)m(w)m(een)h (successiv)m(e)h(instances)630 518 y(of)j(the)f(same)h(\014le)f(name)h (on)f(the)h(command)f(line.)630 651 y(While)44 b(y)m(ou)g(can)g(c)m (hange)g(the)g(v)-5 b(alue)44 b(of)g Fz(ARGIND)d FB(within)i(y)m(our)h Fz(awk)e FB(program,)47 b Fz(gawk)630 761 y FB(automatically)33 b(sets)e(it)g(to)g(a)g(new)f(v)-5 b(alue)31 b(when)e(the)h(next)h (\014le)f(is)h(op)s(ened.)630 894 y(This)h(v)-5 b(ariable)33 b(is)g(a)g Fz(gawk)e FB(extension.)48 b(In)32 b(other)h Fz(awk)f FB(implemen)m(tations,)i(or)f(if)f Fz(gawk)g FB(is)630 1004 y(in)j(compatibilit)m(y)j(mo)s(de)e(\(see)g(Section)h (11.2)g([Command-Line)e(Options],)j(page)e(173\),)630 1114 y(it)31 b(is)f(not)h(sp)s(ecial.)150 1271 y Fz(ENVIRON)144 b FB(An)37 b(asso)s(ciativ)m(e)i(arra)m(y)f(that)f(con)m(tains)i(the)e (v)-5 b(alues)37 b(of)g(the)h(en)m(vironmen)m(t.)61 b(The)36 b(arra)m(y)630 1380 y(indices)31 b(are)h(the)f(en)m(vironmen)m(t)g(v)-5 b(ariable)32 b(names;)g(the)f(elemen)m(ts)h(are)g(the)f(v)-5 b(alues)32 b(of)f(the)630 1490 y(particular)44 b(en)m(vironmen)m(t)g(v) -5 b(ariables.)80 b(F)-8 b(or)45 b(example,)i Fz(ENVIRON["HOME"])39 b FB(migh)m(t)45 b(b)s(e)630 1599 y(`)p Fz(/home/arnold)p FB('.)53 b(Changing)36 b(this)f(arra)m(y)h(do)s(es)g(not)f(a\013ect)i (the)f(en)m(vironmen)m(t)g(passed)630 1709 y(on)25 b(to)g(an)m(y)g (programs)g(that)g Fz(awk)f FB(ma)m(y)i(spa)m(wn)e(via)h(redirection)h (or)f(the)g Fz(system)e FB(function.)630 1842 y(Some)h(op)s(erating)h (systems)f(ma)m(y)g(not)h(ha)m(v)m(e)g(en)m(vironmen)m(t)f(v)-5 b(ariables.)40 b(On)23 b(suc)m(h)h(systems,)630 1952 y(the)30 b Fz(ENVIRON)d FB(arra)m(y)j(is)f(empt)m(y)h(\(except)h(for)e Fz(ENVIRON["AWKPATH"])-5 b FB(,)30 b(see)g(Section)g(11.4)630 2061 y([The)g Fz(AWKPATH)f FB(En)m(vironmen)m(t)h(V)-8 b(ariable],)32 b(page)f(179\).)150 2219 y Fz(ERRNO)e(#)163 b FB(If)39 b(a)i(system)e(error)h(o)s(ccurs)f(during)g(a)h(redirection) h(for)e Fz(getline)p FB(,)i(during)d(a)i(read)g(for)630 2328 y Fz(getline)p FB(,)28 b(or)h(during)f(a)h Fz(close)f FB(op)s(eration,)i(then)f Fz(ERRNO)f FB(con)m(tains)i(a)g(string)f (describing)630 2438 y(the)i(error.)630 2571 y Fz(ERRNO)c FB(w)m(orks)i(similarly)g(to)g(the)g(C)f(v)-5 b(ariable)29 b Fz(errno)p FB(.)39 b(In)28 b(particular)h Fz(gawk)e Fw(never)38 b FB(clears)630 2681 y(it)23 b(\(sets)g(it)g(to)g(zero)g (or)f Fz("")p FB(\).)38 b(Th)m(us,)23 b(y)m(ou)g(should)e(only)h(exp)s (ect)h(its)g(v)-5 b(alue)22 b(to)h(b)s(e)f(meaningful)630 2790 y(when)31 b(an)h(I/O)f(op)s(eration)i(returns)d(a)i(failure)g(v)-5 b(alue,)33 b(suc)m(h)f(as)g Fz(getline)e FB(returning)h Fy(\000)p FB(1.)630 2900 y(Y)-8 b(ou)31 b(are,)g(of)f(course,)h(free)g (to)g(clear)g(it)g(y)m(ourself)g(b)s(efore)f(doing)g(an)g(I/O)h(op)s (eration.)630 3033 y(This)h(v)-5 b(ariable)33 b(is)g(a)g Fz(gawk)e FB(extension.)48 b(In)32 b(other)h Fz(awk)f FB(implemen)m(tations,)i(or)f(if)f Fz(gawk)g FB(is)630 3143 y(in)j(compatibilit)m(y)j(mo)s(de)e(\(see)g(Section)h(11.2)g ([Command-Line)e(Options],)j(page)e(173\),)630 3252 y(it)31 b(is)f(not)h(sp)s(ecial.)150 3409 y Fz(FILENAME)96 b FB(The)41 b(name)g(of)g(the)g(\014le)h(that)f Fz(awk)f FB(is)i(curren)m(tly)f(reading.)73 b(When)41 b(no)g(data)g(\014les)h (are)630 3519 y(listed)33 b(on)e(the)i(command)e(line,)i Fz(awk)e FB(reads)h(from)g(the)g(standard)f(input)g(and)g Fz(FILENAME)630 3629 y FB(is)g(set)h(to)g Fz("-")p FB(.)43 b Fz(FILENAME)29 b FB(is)i(c)m(hanged)h(eac)m(h)g(time)g(a)g(new)f (\014le)g(is)g(read)h(\(see)g(Chapter)f(3)630 3738 y([Reading)i(Input)e (Files],)k(page)e(36\).)49 b(Inside)31 b(a)i Fz(BEGIN)e FB(rule,)i(the)g(v)-5 b(alue)33 b(of)g Fz(FILENAME)d FB(is)630 3848 y Fz("")p FB(,)40 b(since)g(there)f(are)g(no)f(input)g (\014les)h(b)s(eing)f(pro)s(cessed)g(y)m(et.)2814 3815 y Fo(3)2984 3848 y FB(Note,)43 b(though,)d(that)237 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 630 3957 a(using)33 b Fz(getline)e FB(\(see)k(Section)f (3.8)h([Explicit)f(Input)e(with)i Fz(getline)p FB(],)e(page)j(51\))f (inside)630 4067 y(a)d Fz(BEGIN)e FB(rule)h(can)g(giv)m(e)i Fz(FILENAME)c FB(a)j(v)-5 b(alue.)150 4224 y Fz(FNR)336 b FB(The)31 b(curren)m(t)g(record)g(n)m(um)m(b)s(er)f(in)g(the)i (curren)m(t)f(\014le.)43 b Fz(FNR)30 b FB(is)i(incremen)m(ted)f(eac)m (h)i(time)f(a)630 4334 y(new)e(record)g(is)h(read)g(\(see)g(Section)g (3.8)h([Explicit)g(Input)d(with)h Fz(getline)p FB(],)f(page)i(51\).)43 b(It)630 4443 y(is)30 b(reinitialized)j(to)e(zero)g(eac)m(h)g(time)h(a) e(new)g(input)g(\014le)g(is)g(started.)150 4600 y Fz(NF)384 b FB(The)37 b(n)m(um)m(b)s(er)g(of)h(\014elds)f(in)h(the)g(curren)m(t)g (input)f(record.)63 b Fz(NF)37 b FB(is)h(set)h(eac)m(h)g(time)f(a)g (new)630 4710 y(record)30 b(is)f(read,)h(when)f(a)h(new)f(\014eld)g(is) h(created)g(or)g(when)e Fz($0)h FB(c)m(hanges)i(\(see)f(Section)h(3.2) 630 4820 y([Examining)g(Fields],)g(page)g(39\).)630 4953 y(Unlik)m(e)23 b(most)g(of)g(the)g(v)-5 b(ariables)23 b(describ)s(ed)e(in)h(this)h(section,)i(assigning)e(a)g(v)-5 b(alue)23 b(to)g Fz(NF)f FB(has)630 5062 y(the)27 b(p)s(oten)m(tial)i (to)f(a\013ect)h Fz(awk)p FB('s)e(in)m(ternal)h(w)m(orkings.)40 b(In)26 b(particular,)j(assignmen)m(ts)f(to)g Fz(NF)p 150 5154 1200 4 v 199 5221 a Fo(3)275 5253 y Fn(Some)e(early)h (implemen)n(tations)g(of)g(Unix)e Fm(awk)i Fn(initialized)h Fm(FILENAME)g Fn(to)e Fm("-")p Fn(,)i(ev)n(en)d(if)i(there)f(w)n(ere)h (data)g(\014les)g(to)f(b)r(e)275 5340 y(pro)r(cessed.)35 b(This)26 b(b)r(eha)n(vior)g(w)n(as)h(incorrect)f(and)f(should)h(not)f (b)r(e)h(relied)g(up)r(on)f(in)h(y)n(our)f(programs.)p eop end %%Page: 112 124 TeXDict begin 112 123 bop 150 -116 a FB(112)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)630 299 y FB(can)g(b)s(e)f(used)g(to)h(create)i(or)d(remo)m(v)m(e)i (\014elds)f(from)f(the)h(curren)m(t)f(record:)40 b(See)30 b(Section)h(3.4)630 408 y([Changing)f(the)h(Con)m(ten)m(ts)g(of)g(a)g (Field],)g(page)g(41.)150 563 y Fz(NR)384 b FB(The)44 b(n)m(um)m(b)s(er)g(of)h(input)e(records)i Fz(awk)f FB(has)g(pro)s (cessed)h(since)g(the)g(b)s(eginning)f(of)h(the)630 673 y(program's)22 b(execution)h(\(see)f(Section)h(3.1)g([Ho)m(w)g(Input)d (Is)h(Split)h(in)m(to)h(Records],)h(page)e(36\).)630 783 y Fz(NR)30 b FB(is)g(incremen)m(ted)h(eac)m(h)h(time)f(a)f(new)g (record)h(is)f(read.)150 938 y Fz(PROCINFO)e(#)630 1047 y FB(The)e(elemen)m(ts)h(of)f(this)g(arra)m(y)h(pro)m(vide)f(access)h (to)g(information)f(ab)s(out)g(the)g(running)f Fz(awk)630 1157 y FB(program.)55 b(The)35 b(follo)m(wing)i(elemen)m(ts)g(\(listed) f(alphab)s(etically\))h(are)f(guaran)m(teed)g(to)h(b)s(e)630 1266 y(a)m(v)-5 b(ailable:)630 1421 y Fz(PROCINFO["egid"])1110 1531 y FB(The)30 b(v)-5 b(alue)31 b(of)f(the)h Fz(getegid)d FB(system)j(call.)630 1686 y Fz(PROCINFO["euid"])1110 1795 y FB(The)f(v)-5 b(alue)31 b(of)f(the)h Fz(geteuid)d FB(system)j(call.)630 1950 y Fz(PROCINFO["FS"])1110 2060 y FB(This)61 b(is)i Fz("FS")e FB(if)h(\014eld)g(splitting)g(with)g Fz(FS)g FB(is)g(in)g(e\013ect,)72 b(or)62 b(it)h(is)1110 2169 y Fz("FIELDWIDTHS")27 b FB(if)j(\014eld)g(splitting)h(with)f Fz(FIELDWIDTHS)e FB(is)i(in)g(e\013ect.)630 2324 y Fz(PROCINFO["gid"]) 1110 2434 y FB(The)g(v)-5 b(alue)31 b(of)f(the)h Fz(getgid)d FB(system)j(call.)630 2589 y Fz(PROCINFO["pgrpid"])1110 2699 y FB(The)f(pro)s(cess)g(group)g(ID)g(of)h(the)f(curren)m(t)g(pro)s (cess.)630 2853 y Fz(PROCINFO["pid"])1110 2963 y FB(The)g(pro)s(cess)g (ID)g(of)h(the)f(curren)m(t)h(pro)s(cess.)630 3118 y Fz(PROCINFO["ppid"])1110 3228 y FB(The)f(paren)m(t)g(pro)s(cess)g(ID)h (of)g(the)f(curren)m(t)g(pro)s(cess.)630 3382 y Fz(PROCINFO["uid"])1110 3492 y FB(The)g(v)-5 b(alue)31 b(of)f(the)h Fz(getuid)d FB(system)j(call.)630 3647 y Fz(PROCINFO["version"])1110 3757 y FB(The)e(v)m(ersion)g(of)g Fz(gawk)p FB(.)39 b(This)29 b(is)g(a)m(v)-5 b(ailable)31 b(from)e(v)m(ersion)g(3.1.4)i(and)e (later.)630 3912 y(On)48 b(some)h(systems,)k(there)c(ma)m(y)g(b)s(e)f (elemen)m(ts)i(in)e(the)h(arra)m(y)-8 b(,)54 b Fz("group1")47 b FB(through)630 4021 y Fz("group)p Fk(N)11 b Fz(")43 b FB(for)j(some)g Fx(N)p FB(.)h Fx(N)56 b FB(is)46 b(the)g(n)m(um)m(b)s (er)e(of)i(supplemen)m(tary)g(groups)f(that)i(the)630 4131 y(pro)s(cess)39 b(has.)67 b(Use)40 b(the)f Fz(in)g FB(op)s(erator)g(to)h(test)g(for)f(these)h(elemen)m(ts)h(\(see)f (Section)g(7.2)630 4240 y([Referring)30 b(to)i(an)e(Arra)m(y)g(Elemen)m (t],)i(page)f(117\).)630 4373 y(This)g(arra)m(y)i(is)g(a)f Fz(gawk)f FB(extension.)47 b(In)32 b(other)g Fz(awk)g FB(implemen)m(tations,)i(or)f(if)f Fz(gawk)f FB(is)h(in)630 4482 y(compatibilit)m(y)e(mo)s(de)d(\(see)h(Section)h(11.2)g ([Command-Line)e(Options],)h(page)h(173\),)h(it)e(is)630 4592 y(not)j(sp)s(ecial.)150 4747 y Fz(RLENGTH)144 b FB(The)33 b(length)h(of)g(the)g(substring)e(matc)m(hed)i(b)m(y)g(the)g Fz(match)e FB(function)h(\(see)i(Section)f(8.1.3)630 4856 y([String-Manipulation)43 b(F)-8 b(unctions],)46 b(page)c(129\).)77 b Fz(RLENGTH)40 b FB(is)i(set)g(b)m(y)g(in)m(v)m (oking)h(the)630 4966 y Fz(match)25 b FB(function.)39 b(Its)26 b(v)-5 b(alue)27 b(is)f(the)h(length)g(of)f(the)g(matc)m(hed)i (string,)f(or)f Fy(\000)p FB(1)h(if)f(no)g(matc)m(h)630 5075 y(is)k(found.)150 5230 y Fz(RSTART)192 b FB(The)38 b(start-index)h(in)g(c)m(haracters)h(of)f(the)g(substring)e(that)j(is)e (matc)m(hed)i(b)m(y)e(the)h Fz(match)630 5340 y FB(function)28 b(\(see)h(Section)f(8.1.3)i([String-Manipulation)f(F)-8 b(unctions],)29 b(page)g(129\).)42 b Fz(RSTART)p eop end %%Page: 113 125 TeXDict begin 113 124 bop 1755 -116 a Fr(Chapter)30 b(6:)41 b(P)m(atterns,)32 b(Actions,)g(and)d(V)-8 b(ariables)92 b FB(113)630 299 y(is)38 b(set)h(b)m(y)g(in)m(v)m(oking)g(the)g Fz(match)e FB(function.)64 b(Its)39 b(v)-5 b(alue)38 b(is)h(the)f(p)s(osition)h(of)f(the)h(string)630 408 y(where)30 b(the)g(matc)m(hed)i(substring)d(starts,)i(or)f(zero)h(if)g (no)f(matc)m(h)h(w)m(as)g(found.)150 565 y Fz(RT)f(#)306 b FB(This)30 b(is)h(set)g(eac)m(h)h(time)g(a)f(record)g(is)g(read.)42 b(It)31 b(con)m(tains)h(the)f(input)f(text)i(that)f(matc)m(hed)630 675 y(the)g(text)g(denoted)f(b)m(y)h Fz(RS)p FB(,)f(the)g(record)h (separator.)630 808 y(This)h(v)-5 b(ariable)33 b(is)g(a)g Fz(gawk)e FB(extension.)48 b(In)32 b(other)h Fz(awk)f FB(implemen)m(tations,)i(or)f(if)f Fz(gawk)g FB(is)630 918 y(in)j(compatibilit)m(y)j(mo)s(de)e(\(see)g(Section)h(11.2)g ([Command-Line)e(Options],)j(page)e(173\),)630 1027 y(it)31 b(is)f(not)h(sp)s(ecial.)150 1224 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b(Changing)42 b Fh(NR)f Fj(and)g Fh(FNR)150 1371 y Fz(awk)g FB(incremen)m(ts)h Fz(NR)g FB(and)f Fz(FNR)g FB(eac)m(h)i(time)g(it)f(reads)g(a)g(record,)j(instead)d(of)g(setting)h (them)f(to)h(the)150 1481 y(absolute)29 b(v)-5 b(alue)28 b(of)h(the)f(n)m(um)m(b)s(er)f(of)h(records)g(read.)40 b(This)27 b(means)h(that)h(a)f(program)g(can)g(c)m(hange)h(these)150 1590 y(v)-5 b(ariables)34 b(and)g(their)g(new)f(v)-5 b(alues)34 b(are)g(incremen)m(ted)h(for)e(eac)m(h)i(record.)102 b(This)33 b(is)h(demonstrated)g(in)236 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 1700 a(the)31 b(follo)m(wing)g(example:)390 1833 y Fz($)47 b(echo)g('1)390 1943 y(>)g(2)390 2052 y(>)g(3)390 2162 y(>)g(4')h(|)f(awk)g('NR)g(==)g(2)h({)f(NR)g(=)h(17)f (})390 2271 y(>)g({)h(print)e(NR)h(}')410 2385 y Fy(a)533 2381 y Fz(1)410 2495 y Fy(a)533 2491 y Fz(17)410 2604 y Fy(a)533 2600 y Fz(18)410 2714 y Fy(a)533 2710 y Fz(19)150 2843 y FB(Before)24 b Fz(FNR)f FB(w)m(as)h(added)e(to)i(the)g Fz(awk)e FB(language)j(\(see)f(Section)h(A.1)f([Ma)5 b(jor)24 b(Changes)f(Bet)m(w)m(een)j(V7)e(and)150 2953 y(SVR3.1],)36 b(page)e(252\),)i(man)m(y)e Fz(awk)f FB(programs)g(used)g (this)h(feature)g(to)g(trac)m(k)h(the)f(n)m(um)m(b)s(er)e(of)i(records) 150 3062 y(in)c(a)h(\014le)f(b)m(y)h(resetting)g Fz(NR)f FB(to)h(zero)g(when)e Fz(FILENAME)g FB(c)m(hanged.)150 3259 y Fj(6.5.3)63 b(Using)42 b Fh(ARGC)f Fj(and)g Fh(ARGV)150 3406 y FB(Section)29 b(6.5.2)h([Built-in)f(V)-8 b(ariables)29 b(That)f(Con)m(v)m(ey)h(Information],)g(page)g(110,)h(presen)m(ted)e (the)g(follo)m(w-)150 3516 y(ing)j(program)f(describing)g(the)g (information)h(con)m(tained)h(in)e Fz(ARGC)f FB(and)h Fz(ARGV)p FB(:)390 3649 y Fz($)47 b(awk)g('BEGIN)f({)390 3758 y(>)382 b(for)46 b(\(i)i(=)f(0;)g(i)h(<)f(ARGC;)g(i++\))390 3868 y(>)572 b(print)47 b(ARGV[i])390 3978 y(>)286 b(}')47 b(inventory-shipped)c(BBS-list)410 4091 y Fy(a)533 4087 y Fz(awk)410 4201 y Fy(a)533 4197 y Fz(inventory-shipped)410 4310 y Fy(a)533 4306 y Fz(BBS-list)150 4440 y FB(In)k(this)h(example,) 54 b Fz(ARGV[0])46 b FB(con)m(tains)j(`)p Fz(awk)p FB(',)k Fz(ARGV[1])46 b FB(con)m(tains)j(`)p Fz(inventory-shipped)p FB(',)g(and)150 4549 y Fz(ARGV[2])35 b FB(con)m(tains)j(`)p Fz(BBS-list)p FB('.)59 b(Notice)39 b(that)e(the)g Fz(awk)f FB(program)h(is)g(not)g(en)m(tered)h(in)e Fz(ARGV)p FB(.)59 b(The)150 4659 y(other)36 b(sp)s(ecial)g(command-line)h(options,)g (with)f(their)g(argumen)m(ts,)h(are)g(also)f(not)g(en)m(tered.)58 b(This)35 b(in-)150 4768 y(cludes)40 b(v)-5 b(ariable)42 b(assignmen)m(ts)f(done)f(with)g(the)h(`)p Fz(-v)p FB(')g(option)g (\(see)g(Section)g(11.2)h([Command-Line)150 4878 y(Options],)j(page)d (173\).)77 b(Normal)42 b(v)-5 b(ariable)43 b(assignmen)m(ts)f(on)g(the) g(command)f(line)h Fw(ar)-5 b(e)50 b FB(treated)43 b(as)150 4988 y(argumen)m(ts)31 b(and)e(do)i(sho)m(w)f(up)f(in)h(the)h Fz(ARGV)e FB(arra)m(y:)390 5121 y Fz($)47 b(cat)g(showargs.awk)410 5234 y Fy(a)533 5230 y Fz(BEGIN)g({)410 5344 y Fy(a)724 5340 y Fz(printf)f("A=\045d,)g(B=\045d\\n",)g(A,)h(B)p eop end %%Page: 114 126 TeXDict begin 114 125 bop 150 -116 a FB(114)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)410 303 y Fy(a)724 299 y Fz(for)47 b(\(i)g(=)h(0;)f(i)g(<)h(ARGC;)e(i++\)) 410 412 y Fy(a)915 408 y Fz(printf)g("\\tARGV[\045d])f(=)i(\045s\\n",)f (i,)i(ARGV[i])410 522 y Fy(a)533 518 y Fz(})410 632 y Fy(a)533 628 y Fz(END)143 b({)47 b(printf)f("A=\045d,)g(B=\045d\\n",)g (A,)h(B)g(})390 737 y($)g(awk)g(-v)h(A=1)e(-f)i(showargs.awk)c(B=2)j (/dev/null)410 851 y Fy(a)533 847 y Fz(A=1,)g(B=0)410 960 y Fy(a)867 956 y Fz(ARGV[0])f(=)i(awk)410 1070 y Fy(a)867 1066 y Fz(ARGV[1])e(=)i(B=2)410 1180 y Fy(a)867 1176 y Fz(ARGV[2])e(=)i(/dev/null)410 1289 y Fy(a)533 1285 y Fz(A=1,)f(B=2)275 1426 y FB(A)31 b(program)h(can)g(alter)g Fz(ARGC)f FB(and)g(the)h(elemen)m(ts)h(of)e Fz(ARGV)p FB(.)44 b(Eac)m(h)32 b(time)g Fz(awk)f FB(reac)m(hes)i(the)f(end)f(of) 150 1536 y(an)c(input)f(\014le,)i(it)f(uses)g(the)g(next)g(elemen)m(t)i (of)e Fz(ARGV)f FB(as)h(the)g(name)g(of)g(the)g(next)h(input)e(\014le.) 39 b(By)28 b(storing)150 1645 y(a)36 b(di\013eren)m(t)g(string)f (there,)j(a)e(program)f(can)h(c)m(hange)g(whic)m(h)g(\014les)f(are)h (read.)56 b(Use)36 b Fz("-")f FB(to)h(represen)m(t)150 1755 y(the)f(standard)e(input.)52 b(Storing)34 b(additional)h(elemen)m (ts)h(and)e(incremen)m(ting)h Fz(ARGC)e FB(causes)i(additional)150 1864 y(\014les)30 b(to)h(b)s(e)f(read.)275 2005 y(If)f(the)g(v)-5 b(alue)31 b(of)e Fz(ARGC)g FB(is)g(decreased,)i(that)f(eliminates)h (input)e(\014les)g(from)g(the)h(end)f(of)h(the)g(list.)41 b(By)150 2115 y(recording)35 b(the)g(old)g(v)-5 b(alue)36 b(of)f Fz(ARGC)e FB(elsewhere,)k(a)f(program)e(can)h(treat)i(the)e (eliminated)h(argumen)m(ts)150 2225 y(as)31 b(something)f(other)h(than) f(\014le)h(names.)275 2365 y(T)-8 b(o)38 b(eliminate)h(a)f(\014le)f (from)g(the)h(middle)f(of)h(the)g(list,)i(store)e(the)g(n)m(ull)f (string)h(\()p Fz("")p FB(\))f(in)m(to)i Fz(ARGV)d FB(in)150 2475 y(place)27 b(of)e(the)h(\014le's)g(name.)39 b(As)26 b(a)g(sp)s(ecial)g(feature,)h Fz(awk)e FB(ignores)h(\014le)g(names)f (that)i(ha)m(v)m(e)g(b)s(een)d(replaced)150 2585 y(with)37 b(the)g(n)m(ull)g(string.)60 b(Another)37 b(option)h(is)f(to)g(use)g (the)g Fz(delete)f FB(statemen)m(t)i(to)g(remo)m(v)m(e)h(elemen)m(ts) 150 2694 y(from)30 b Fz(ARGV)f FB(\(see)i(Section)h(7.6)f([The)f Fz(delete)f FB(Statemen)m(t],)j(page)f(120\).)275 2835 y(All)41 b(of)f(these)i(actions)f(are)g(t)m(ypically)i(done)d(in)g(the) h Fz(BEGIN)e FB(rule,)k(b)s(efore)d(actual)i(pro)s(cessing)f(of)150 2945 y(the)g(input)f(b)s(egins.)72 b(See)41 b(Section)g(13.2.4)j ([Splitting)d(a)g(Large)h(File)g(in)m(to)g(Pieces],)j(page)c(221,)46 b(and)150 3054 y(see)31 b(Section)g(13.2.5)i([Duplicating)f(Output)d (in)m(to)i(Multiple)g(Files],)h(page)f(223,)h(for)e(examples)h(of)g (eac)m(h)150 3164 y(w)m(a)m(y)37 b(of)f(remo)m(ving)g(elemen)m(ts)h (from)f Fz(ARGV)p FB(.)55 b(The)36 b(follo)m(wing)h(fragmen)m(t)f(pro)s (cesses)g Fz(ARGV)e FB(in)i(order)f(to)150 3273 y(examine,)c(and)f (then)g(remo)m(v)m(e,)i(command-line)f(options:)390 3414 y Fz(BEGIN)46 b({)581 3524 y(for)h(\(i)g(=)g(1;)h(i)f(<)h(ARGC;)e (i++\))h({)772 3634 y(if)g(\(ARGV[i])f(==)h("-v"\))963 3743 y(verbose)f(=)h(1)772 3853 y(else)f(if)i(\(ARGV[i])d(==)i("-d"\)) 963 3962 y(debug)f(=)i(1)772 4072 y(else)e(if)i(\(ARGV[i])d(~)j (/^-?/\))e({)963 4181 y(e)h(=)h(sprintf\("\045s:)c(unrecognized)h (option)h(--)h(\045c",)1345 4291 y(ARGV[0],)e(substr\(ARGV[i],)f(1,)j (,1\)\))963 4401 y(print)f(e)i(>)f("/dev/stderr")772 4510 y(})g(else)963 4620 y(break)772 4729 y(delete)f(ARGV[i])581 4839 y(})390 4949 y(})275 5089 y FB(T)-8 b(o)38 b(actually)h(get)g(the) g(options)f(in)m(to)h(the)f Fz(awk)f FB(program,)j(end)d(the)h Fz(awk)f FB(options)h(with)g(`)p Fz(--)p FB(')g(and)150 5199 y(then)30 b(supply)f(the)i Fz(awk)e FB(program's)h(options,)h(in)f (the)h(follo)m(wing)h(manner:)390 5340 y Fz(awk)47 b(-f)g(myprog)f(--)h (-v)h(-d)f(file1)f(file2)g(...)p eop end %%Page: 115 127 TeXDict begin 115 126 bop 1755 -116 a Fr(Chapter)30 b(6:)41 b(P)m(atterns,)32 b(Actions,)g(and)d(V)-8 b(ariables)92 b FB(115)275 299 y(This)34 b(is)h(not)g(necessary)h(in)f Fz(gawk)p FB(.)54 b(Unless)35 b(`)p Fz(--posix)p FB(')e(has)i(b)s(een)g (sp)s(eci\014ed,)g Fz(gawk)f FB(silen)m(tly)j(puts)150 408 y(an)m(y)e(unrecognized)g(options)g(in)m(to)h Fz(ARGV)e FB(for)g(the)i Fz(awk)d FB(program)i(to)h(deal)f(with.)54 b(As)35 b(so)s(on)f(as)h(it)g(sees)150 518 y(an)28 b(unkno)m(wn)e (option,)j Fz(gawk)e FB(stops)g(lo)s(oking)i(for)e(other)h(options)g (that)h(it)f(migh)m(t)h(otherwise)f(recognize.)150 628 y(The)i(previous)g(example)h(with)f Fz(gawk)f FB(w)m(ould)h(b)s(e:)390 762 y Fz(gawk)47 b(-f)g(myprog)f(-d)h(-v)g(file1)g(file2)f(...)150 897 y FB(Because)34 b(`)p Fz(-d)p FB(')e(is)g(not)h(a)g(v)-5 b(alid)32 b Fz(gawk)g FB(option,)h(it)g(and)f(the)g(follo)m(wing)i(`)p Fz(-v)p FB(')e(are)h(passed)f(on)g(to)h(the)g Fz(awk)150 1006 y FB(program.)p eop end %%Page: 116 128 TeXDict begin 116 127 bop 150 -116 a FB(116)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fu(7)80 b(Arra)l(ys)54 b(in)f Fi(awk)150 542 y FB(An)34 b Fx(arra)m(y)43 b FB(is)35 b(a)g(table)h(of)e(v)-5 b(alues)35 b(called)h Fx(elemen)m(ts)p FB(.)55 b(The)34 b(elemen)m(ts)i(of)f(an)g(arra)m(y)g(are)g(distinguished)150 652 y(b)m(y)30 b(their)h(indices.)41 b Fx(Indices)33 b FB(ma)m(y)e(b)s(e)f(either)h(n)m(um)m(b)s(ers)e(or)h(strings.)275 789 y(This)f(c)m(hapter)i(describ)s(es)e(ho)m(w)i(arra)m(ys)f(w)m(ork)h (in)f Fz(awk)p FB(,)f(ho)m(w)i(to)g(use)f(arra)m(y)h(elemen)m(ts,)g(ho) m(w)g(to)g(scan)150 899 y(through)37 b(ev)m(ery)i(elemen)m(t)g(in)f(an) f(arra)m(y)-8 b(,)41 b(and)c(ho)m(w)h(to)h(remo)m(v)m(e)g(arra)m(y)g (elemen)m(ts.)64 b(It)38 b(also)h(describ)s(es)150 1008 y(ho)m(w)26 b Fz(awk)f FB(sim)m(ulates)h(m)m(ultidimensional)h(arra)m (ys,)g(as)f(w)m(ell)h(as)f(some)g(of)g(the)g(less)g(ob)m(vious)g(p)s (oin)m(ts)f(ab)s(out)150 1118 y(arra)m(y)36 b(usage.)55 b(The)35 b(c)m(hapter)g(\014nishes)f(with)h(a)g(discussion)g(of)g Fz(gawk)p FB('s)f(facilit)m(y)j(for)e(sorting)g(an)g(arra)m(y)150 1228 y(based)30 b(on)g(its)h(indices.)275 1365 y Fz(awk)e FB(main)m(tains)i(a)f(single)h(set)g(of)f(names)g(that)h(ma)m(y)g(b)s (e)e(used)h(for)g(naming)g(v)-5 b(ariables,)31 b(arra)m(ys,)g(and)150 1475 y(functions)37 b(\(see)h(Section)g(8.2)g([User-De\014ned)f(F)-8 b(unctions],)40 b(page)e(149\).)62 b(Th)m(us,)38 b(y)m(ou)g(cannot)f (ha)m(v)m(e)i(a)150 1584 y(v)-5 b(ariable)31 b(and)f(an)g(arra)m(y)h (with)f(the)h(same)f(name)h(in)f(the)h(same)f Fz(awk)g FB(program.)150 1821 y FA(7.1)68 b(In)l(tro)t(duction)45 b(to)g(Arra)l(ys)150 1981 y FB(The)33 b Fz(awk)g FB(language)j(pro)m (vides)d(one-dimensional)i(arra)m(ys)f(for)g(storing)g(groups)f(of)h (related)h(strings)f(or)150 2090 y(n)m(um)m(b)s(ers.)j(Ev)m(ery)22 b Fz(awk)g FB(arra)m(y)g(m)m(ust)h(ha)m(v)m(e)g(a)g(name.)38 b(Arra)m(y)23 b(names)f(ha)m(v)m(e)h(the)g(same)g(syn)m(tax)g(as)f(v)-5 b(ariable)150 2200 y(names;)29 b(an)m(y)f(v)-5 b(alid)27 b(v)-5 b(ariable)29 b(name)e(w)m(ould)h(also)g(b)s(e)f(a)h(v)-5 b(alid)28 b(arra)m(y)g(name.)40 b(But)28 b(one)g(name)f(cannot)i(b)s(e) 150 2310 y(used)h(in)g(b)s(oth)f(w)m(a)m(ys)i(\(as)g(an)g(arra)m(y)g (and)e(as)i(a)g(v)-5 b(ariable\))31 b(in)f(the)h(same)g Fz(awk)e FB(program.)275 2447 y(Arra)m(ys)k(in)g Fz(awk)g FB(sup)s(er\014cially)g(resem)m(ble)h(arra)m(ys)f(in)g(other)h (programming)f(languages,)j(but)d(there)150 2557 y(are)d(fundamen)m (tal)f(di\013erences.)41 b(In)28 b Fz(awk)p FB(,)h(it)h(isn't)f (necessary)h(to)g(sp)s(ecify)f(the)h(size)g(of)f(an)g(arra)m(y)h(b)s (efore)150 2666 y(starting)h(to)f(use)g(it.)41 b(Additionally)-8 b(,)31 b(an)m(y)f(n)m(um)m(b)s(er)f(or)h(string)g(in)f Fz(awk)p FB(,)g(not)h(just)g(consecutiv)m(e)h(in)m(tegers,)150 2776 y(ma)m(y)g(b)s(e)f(used)f(as)i(an)f(arra)m(y)h(index.)275 2913 y(In)26 b(most)i(other)f(languages,)i(arra)m(ys)f(m)m(ust)f(b)s(e) g Fx(declared)k FB(b)s(efore)c(use,)g(including)g(a)h(sp)s (eci\014cation)g(of)150 3023 y(ho)m(w)h(man)m(y)g(elemen)m(ts)i(or)e (comp)s(onen)m(ts)g(they)g(con)m(tain.)42 b(In)28 b(suc)m(h)h (languages,)i(the)e(declaration)i(causes)150 3133 y(a)e(con)m(tiguous)g (blo)s(c)m(k)g(of)g(memory)f(to)h(b)s(e)f(allo)s(cated)i(for)e(that)h (man)m(y)g(elemen)m(ts.)41 b(Usually)-8 b(,)30 b(an)e(index)g(in)150 3242 y(the)g(arra)m(y)h(m)m(ust)f(b)s(e)g(a)g(p)s(ositiv)m(e)h(in)m (teger.)42 b(F)-8 b(or)28 b(example,)i(the)e(index)g(zero)h(sp)s (eci\014es)f(the)g(\014rst)f(elemen)m(t)150 3352 y(in)33 b(the)h(arra)m(y)-8 b(,)35 b(whic)m(h)e(is)h(actually)h(stored)e(at)h (the)g(b)s(eginning)e(of)i(the)g(blo)s(c)m(k)f(of)h(memory)-8 b(.)50 b(Index)33 b(one)150 3461 y(sp)s(eci\014es)i(the)g(second)g (elemen)m(t,)j(whic)m(h)d(is)g(stored)g(in)g(memory)g(righ)m(t)g(after) h(the)f(\014rst)g(elemen)m(t,)j(and)150 3571 y(so)33 b(on.)46 b(It)32 b(is)h(imp)s(ossible)f(to)h(add)e(more)i(elemen)m(ts)g (to)g(the)g(arra)m(y)-8 b(,)34 b(b)s(ecause)e(it)h(has)f(ro)s(om)g (only)h(for)f(as)150 3681 y(man)m(y)j(elemen)m(ts)h(as)f(giv)m(en)h(in) f(the)g(declaration.)56 b(\(Some)36 b(languages)g(allo)m(w)g(arbitrary) f(starting)h(and)150 3790 y(ending)g(indices|e.g.,)41 b(`)p Fz(15)30 b(..)f(27)p FB('|but)36 b(the)h(size)h(of)f(the)g(arra)m (y)h(is)e(still)i(\014xed)f(when)e(the)i(arra)m(y)h(is)150 3900 y(declared.\))275 4037 y(A)27 b(con)m(tiguous)h(arra)m(y)g(of)f (four)f(elemen)m(ts)j(migh)m(t)e(lo)s(ok)h(lik)m(e)g(the)g(follo)m (wing)g(example,)h(conceptually)-8 b(,)150 4147 y(if)30 b(the)h(elemen)m(t)h(v)-5 b(alues)30 b(are)h(8,)g Fz("foo")p FB(,)e Fz("")p FB(,)h(and)g(30:)p 1056 4274 1434 4 v 1056 4383 4 110 v 1212 4351 a Fz(8)p 1414 4383 V 215 w("foo")p 1771 4383 V 189 w("")p 2129 4383 V 262 w(30)p 2486 4383 V 243 w FB(V)-8 b(alue)p 1056 4386 1434 4 v 1214 4489 a(0)312 b(1)h(2)g(3)269 b(Index)150 4627 y(Only)30 b(the)h(v)-5 b(alues)31 b(are)g(stored;)g(the)g(indices)f(are)h (implicit)h(from)e(the)h(order)f(of)h(the)g(v)-5 b(alues.)41 b(Here,)32 b(8)f(is)150 4736 y(the)g(v)-5 b(alue)30 b(at)i(index)d (zero,)j(b)s(ecause)e(8)h(app)s(ears)f(in)g(the)g(p)s(osition)h(with)f (zero)h(elemen)m(ts)h(b)s(efore)e(it.)275 4874 y(Arra)m(ys)45 b(in)g Fz(awk)f FB(are)h(di\013eren)m(t|they)h(are)g Fx(asso)s(ciativ)m(e)p FB(.)87 b(This)45 b(means)g(that)g(eac)m(h)i (arra)m(y)e(is)h(a)150 4983 y(collection)33 b(of)e(pairs:)40 b(an)30 b(index)g(and)g(its)h(corresp)s(onding)e(arra)m(y)i(elemen)m(t) h(v)-5 b(alue:)390 5121 y(Elemen)m(t)49 b Fz(3)238 b FB(V)-8 b(alue)49 b Fz(30)390 5230 y FB(Elemen)m(t)g Fz(1)238 b FB(V)-8 b(alue)49 b Fz("foo")390 5340 y FB(Elemen)m(t)g Fz(0)238 b FB(V)-8 b(alue)49 b Fz(8)p eop end %%Page: 117 129 TeXDict begin 117 128 bop 2502 -116 a Fr(Chapter)30 b(7:)41 b(Arra)m(ys)30 b(in)h Fz(awk)90 b FB(117)390 299 y(Elemen)m(t)49 b Fz(2)238 b FB(V)-8 b(alue)49 b Fz("")150 430 y FB(The)30 b(pairs)g(are)h(sho)m(wn)e(in)h(jum)m(bled)g(order)g(b)s(ecause)g (their)h(order)e(is)i(irrelev)-5 b(an)m(t.)275 560 y(One)36 b(adv)-5 b(an)m(tage)39 b(of)e(asso)s(ciativ)m(e)i(arra)m(ys)e(is)g (that)h(new)e(pairs)g(can)h(b)s(e)g(added)f(at)h(an)m(y)g(time.)61 b(F)-8 b(or)150 670 y(example,)31 b(supp)s(ose)d(a)i(ten)m(th)g(elemen) m(t)h(is)e(added)g(to)h(the)g(arra)m(y)g(whose)f(v)-5 b(alue)30 b(is)g Fz("number)e(ten")o FB(.)40 b(The)150 779 y(result)30 b(is:)390 910 y(Elemen)m(t)49 b Fz(10)190 b FB(V)-8 b(alue)49 b Fz("number)d(ten")390 1020 y FB(Elemen)m(t)j Fz(3)238 b FB(V)-8 b(alue)49 b Fz(30)390 1129 y FB(Elemen)m(t)g Fz(1)238 b FB(V)-8 b(alue)49 b Fz("foo")390 1239 y FB(Elemen)m(t)g Fz(0)238 b FB(V)-8 b(alue)49 b Fz(8)390 1348 y FB(Elemen)m(t)g Fz(2)238 b FB(V)-8 b(alue)49 b Fz("")150 1479 y FB(No)m(w)36 b(the)f(arra)m(y)h(is)f Fx(sparse)p FB(,)i(whic)m(h)d(just)h(means)g (some)h(indices)f(are)h(missing.)55 b(It)35 b(has)g(elemen)m(ts)i(0{3) 150 1588 y(and)30 b(10,)h(but)f(do)s(esn't)g(ha)m(v)m(e)i(elemen)m(ts)f (4,)g(5,)g(6,)g(7,)g(8,)g(or)g(9.)275 1719 y(Another)i(consequence)i (of)f(asso)s(ciativ)m(e)i(arra)m(ys)e(is)g(that)h(the)f(indices)f (don't)h(ha)m(v)m(e)h(to)g(b)s(e)e(p)s(ositiv)m(e)150 1829 y(in)m(tegers.)46 b(An)m(y)32 b(n)m(um)m(b)s(er,)f(or)h(ev)m(en)h (a)f(string,)g(can)h(b)s(e)e(an)g(index.)45 b(F)-8 b(or)33 b(example,)g(the)f(follo)m(wing)h(is)f(an)150 1938 y(arra)m(y)f(that)g (translates)g(w)m(ords)f(from)g(English)g(to)h(F)-8 b(renc)m(h:)390 2069 y(Elemen)m(t)49 b Fz("dog")d FB(V)-8 b(alue)49 b Fz("chien")390 2178 y FB(Elemen)m(t)g Fz("cat")d FB(V)-8 b(alue)49 b Fz("chat")390 2288 y FB(Elemen)m(t)g Fz("one")d FB(V)-8 b(alue)49 b Fz("un")390 2398 y FB(Elemen)m(t)g Fz(1)238 b FB(V)-8 b(alue)49 b Fz("un")150 2528 y FB(Here)33 b(w)m(e)g(decided)f(to)h(translate)h(the)e(n)m(um)m(b)s(er)g(one)g(in)g (b)s(oth)g(sp)s(elled-out)h(and)f(n)m(umeric)g(form|th)m(us)150 2638 y(illustrating)44 b(that)g(a)g(single)g(arra)m(y)g(can)g(ha)m(v)m (e)h(b)s(oth)d(n)m(um)m(b)s(ers)g(and)h(strings)g(as)h(indices.)80 b(In)43 b(fact,)150 2747 y(arra)m(y)38 b(subscripts)e(are)i(alw)m(a)m (ys)h(strings;)i(this)c(is)h(discussed)e(in)h(more)h(detail)h(in)e (Section)h(7.7)g([Using)150 2857 y(Num)m(b)s(ers)24 b(to)j(Subscript)c (Arra)m(ys],)28 b(page)e(121.)40 b(Here,)27 b(the)f(n)m(um)m(b)s(er)e Fz(1)h FB(isn't)h(double-quoted,)h(since)f Fz(awk)150 2967 y FB(automatically)33 b(con)m(v)m(erts)f(it)f(to)g(a)g(string.)275 3097 y(The)38 b(v)-5 b(alue)39 b(of)g Fz(IGNORECASE)d FB(has)j(no)g(e\013ect)h(up)s(on)d(arra)m(y)j(subscripting.)65 b(The)38 b(iden)m(tical)j(string)150 3207 y(v)-5 b(alue)40 b(used)e(to)j(store)f(an)f(arra)m(y)h(elemen)m(t)h(m)m(ust)e(b)s(e)g (used)f(to)i(retriev)m(e)h(it.)69 b(When)39 b Fz(awk)f FB(creates)j(an)150 3316 y(arra)m(y)33 b(\(e.g.,)i(with)e(the)g Fz(split)e FB(built-in)i(function\),)g(that)h(arra)m(y's)f(indices)g (are)g(consecutiv)m(e)i(in)m(tegers)150 3426 y(starting)c(at)g(one.)41 b(\(See)31 b(Section)g(8.1.3)i([String-Manipulation)e(F)-8 b(unctions],)31 b(page)g(129.\))275 3557 y Fz(awk)p FB('s)i(arra)m(ys)h (are)g(e\016cien)m(t|the)i(time)e(to)h(access)g(an)f(elemen)m(t)h(is)f (indep)s(enden)m(t)f(of)h(the)g(n)m(um)m(b)s(er)150 3666 y(of)d(elemen)m(ts)g(in)f(the)h(arra)m(y)-8 b(.)150 3891 y FA(7.2)68 b(Referring)46 b(to)g(an)f(Arra)l(y)f(Elemen)l(t)150 4050 y FB(The)33 b(principal)g(w)m(a)m(y)h(to)g(use)f(an)h(arra)m(y)g (is)f(to)h(refer)f(to)h(one)g(of)f(its)h(elemen)m(ts.)51 b(An)33 b(arra)m(y)h(reference)g(is)150 4160 y(an)c(expression)g(as)h (follo)m(ws:)390 4291 y Fk(array)11 b Fz([)p Fk(index)g Fz(])150 4421 y FB(Here,)25 b Fx(arra)m(y)32 b FB(is)23 b(the)h(name)f(of)g(an)g(arra)m(y)-8 b(.)40 b(The)22 b(expression)h Fx(index)29 b FB(is)24 b(the)f(index)g(of)g(the)h (desired)e(elemen)m(t)150 4531 y(of)31 b(the)f(arra)m(y)-8 b(.)275 4661 y(The)26 b(v)-5 b(alue)27 b(of)h(the)f(arra)m(y)g (reference)h(is)f(the)g(curren)m(t)g(v)-5 b(alue)27 b(of)g(that)h(arra) m(y)f(elemen)m(t.)41 b(F)-8 b(or)28 b(example,)150 4771 y Fz(foo[4.3])g FB(is)j(an)f(expression)g(for)g(the)h(elemen)m(t)g(of)g (arra)m(y)g Fz(foo)e FB(at)j(index)d(`)p Fz(4.3)p FB('.)275 4902 y(A)f(reference)h(to)g(an)g(arra)m(y)g(elemen)m(t)h(that)f(has)f (no)g(recorded)h(v)-5 b(alue)29 b(yields)f(a)h(v)-5 b(alue)29 b(of)g Fz("")p FB(,)f(the)h(n)m(ull)150 5011 y(string.)56 b(This)34 b(includes)h(elemen)m(ts)i(that)f(ha)m(v)m(e)h(not)e(b)s(een) g(assigned)g(an)m(y)h(v)-5 b(alue)36 b(as)g(w)m(ell)g(as)g(elemen)m(ts) 150 5121 y(that)24 b(ha)m(v)m(e)g(b)s(een)f(deleted)h(\(see)g(Section)g (7.6)g([The)f Fz(delete)f FB(Statemen)m(t],)k(page)e(120\).)40 b(Suc)m(h)23 b(a)g(reference)150 5230 y(automatically)34 b(creates)f(that)f(arra)m(y)g(elemen)m(t,)i(with)d(the)g(n)m(ull)h (string)f(as)h(its)g(v)-5 b(alue.)44 b(\(In)31 b(some)h(cases,)150 5340 y(this)e(is)h(unfortunate,)f(b)s(ecause)g(it)h(migh)m(t)g(w)m (aste)h(memory)e(inside)g Fz(awk)p FB(.\))p eop end %%Page: 118 130 TeXDict begin 118 129 bop 150 -116 a FB(118)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(T)-8 b(o)28 b(determine)f(whether)g(an)g(elemen)m(t)i(exists)g (in)e(an)g(arra)m(y)h(at)g(a)g(certain)h(index,)f(use)f(the)g(follo)m (wing)150 408 y(expression:)390 550 y Fk(index)57 b Fz(in)47 b Fk(array)150 692 y FB(This)26 b(expression)h(tests)g(whether)g(the)g (particular)g(index)g(exists,)h(without)f(the)g(side)g(e\013ect)h(of)g (creating)150 802 y(that)j(elemen)m(t)h(if)f(it)g(is)f(not)h(presen)m (t.)41 b(The)30 b(expression)h(has)f(the)h(v)-5 b(alue)31 b(one)g(\(true\))g(if)f Fk(array)11 b Fz([)p Fk(index)g Fz(])150 911 y FB(exists)36 b(and)e(zero)i(\(false\))g(if)f(it)h(do)s (es)f(not)g(exist.)56 b(F)-8 b(or)35 b(example,)j(this)d(statemen)m(t)h (tests)g(whether)f(the)150 1021 y(arra)m(y)c Fz(frequencies)c FB(con)m(tains)32 b(the)e(index)g(`)p Fz(2)p FB(':)390 1163 y Fz(if)47 b(\(2)g(in)h(frequencies\))581 1272 y(print)e ("Subscript)f(2)j(is)f(present.")275 1414 y FB(Note)25 b(that)g(this)g(is)f Fw(not)34 b FB(a)25 b(test)g(of)g(whether)f(the)h (arra)m(y)g Fz(frequencies)c FB(con)m(tains)26 b(an)e(elemen)m(t)i (whose)150 1524 y Fw(value)42 b FB(is)35 b(t)m(w)m(o.)55 b(There)34 b(is)h(no)g(w)m(a)m(y)h(to)f(do)g(that)h(except)f(to)h(scan) f(all)h(the)f(elemen)m(ts.)55 b(Also,)37 b(this)e Fw(do)-5 b(es)150 1633 y(not)40 b FB(create)32 b Fz(frequencies[2])p FB(,)26 b(while)31 b(the)f(follo)m(wing)i(\(incorrect\))g(alternativ)m (e)h(do)s(es:)390 1775 y Fz(if)47 b(\(frequencies[2])d(!=)j(""\))581 1885 y(print)f("Subscript)f(2)j(is)f(present.")150 2128 y FA(7.3)68 b(Assigning)45 b(Arra)l(y)g(Elemen)l(ts)150 2288 y FB(Arra)m(y)31 b(elemen)m(ts)g(can)g(b)s(e)f(assigned)g(v)-5 b(alues)31 b(just)f(lik)m(e)h Fz(awk)f FB(v)-5 b(ariables:)390 2429 y Fk(array)11 b Fz([)p Fk(subscript)g Fz(])42 b(=)48 b Fk(value)150 2571 y Fx(arra)m(y)40 b FB(is)33 b(the)f(name)g(of)g(an) g(arra)m(y)-8 b(.)47 b(The)32 b(expression)f Fx(subscript)i FB(is)f(the)h(index)e(of)i(the)f(elemen)m(t)h(of)g(the)150 2681 y(arra)m(y)f(that)h(is)f(assigned)g(a)g(v)-5 b(alue.)46 b(The)31 b(expression)h Fx(v)-5 b(alue)37 b FB(is)32 b(the)g(v)-5 b(alue)33 b(to)f(assign)g(to)h(that)f(elemen)m(t)150 2790 y(of)f(the)f(arra)m(y)-8 b(.)150 3034 y FA(7.4)68 b(Basic)45 b(Arra)l(y)g(Example)150 3193 y FB(The)32 b(follo)m(wing)h(program)f(tak)m(es)i(a)f(list)g(of)f(lines,)h(eac)m(h) h(b)s(eginning)d(with)h(a)h(line)f(n)m(um)m(b)s(er,)g(and)f(prin)m(ts) 150 3303 y(them)k(out)g(in)g(order)f(of)h(line)g(n)m(um)m(b)s(er.)54 b(The)34 b(line)h(n)m(um)m(b)s(ers)f(are)h(not)g(in)g(order)f(when)g (they)h(are)h(\014rst)150 3412 y(read|instead)d(they)f(are)h(scram)m (bled.)47 b(This)32 b(program)g(sorts)h(the)f(lines)h(b)m(y)f(making)h (an)f(arra)m(y)h(using)150 3522 y(the)j(line)h(n)m(um)m(b)s(ers)d(as)j (subscripts.)56 b(The)35 b(program)h(then)g(prin)m(ts)g(out)g(the)g (lines)g(in)g(sorted)g(order)g(of)150 3632 y(their)c(n)m(um)m(b)s(ers.) 44 b(It)32 b(is)g(a)g(v)m(ery)g(simple)g(program)g(and)f(gets)i (confused)e(up)s(on)f(encoun)m(tering)j(rep)s(eated)150 3741 y(n)m(um)m(b)s(ers,)c(gaps,)i(or)f(lines)h(that)g(don't)f(b)s (egin)g(with)g(a)h(n)m(um)m(b)s(er:)390 3883 y Fz({)485 3993 y(if)48 b(\($1)f(>)g(max\))581 4102 y(max)g(=)g($1)485 4212 y(arr[$1])f(=)i($0)390 4321 y(})390 4541 y(END)f({)485 4650 y(for)g(\(x)h(=)f(1;)g(x)h(<=)f(max;)f(x++\))581 4760 y(print)g(arr[x])390 4869 y(})275 5011 y FB(The)31 b(\014rst)h(rule)g(k)m(eeps)h(trac)m(k)h(of)e(the)h(largest)h(line)e(n) m(um)m(b)s(er)f(seen)i(so)f(far;)i(it)f(also)g(stores)g(eac)m(h)h(line) 150 5121 y(in)m(to)29 b(the)g(arra)m(y)f Fz(arr)p FB(,)g(at)h(an)g (index)e(that)i(is)f(the)h(line's)g(n)m(um)m(b)s(er.)38 b(The)28 b(second)g(rule)g(runs)f(after)i(all)g(the)150 5230 y(input)d(has)h(b)s(een)f(read,)i(to)g(prin)m(t)f(out)g(all)h(the) g(lines.)40 b(When)27 b(this)g(program)f(is)i(run)d(with)i(the)g(follo) m(wing)150 5340 y(input:)p eop end %%Page: 119 131 TeXDict begin 119 130 bop 2502 -116 a Fr(Chapter)30 b(7:)41 b(Arra)m(ys)30 b(in)h Fz(awk)90 b FB(119)390 299 y Fz(5)95 b(I)48 b(am)f(the)g(Five)f(man)390 408 y(2)95 b(Who)47 b(are)g(you?)94 b(The)47 b(new)g(number)f(two!)390 518 y(4)95 b(.)48 b(.)f(.)h(And)e(four)h(on)g(the)g(floor)390 628 y(1)95 b(Who)47 b(is)g(number)f(one?)390 737 y(3)95 b(I)48 b(three)e(you.)150 879 y FB(Its)30 b(output)g(is:)390 1020 y Fz(1)95 b(Who)47 b(is)g(number)f(one?)390 1130 y(2)95 b(Who)47 b(are)g(you?)94 b(The)47 b(new)g(number)f(two!)390 1239 y(3)95 b(I)48 b(three)e(you.)390 1349 y(4)95 b(.)48 b(.)f(.)h(And)e(four)h(on)g(the)g(floor)390 1459 y(5)95 b(I)48 b(am)f(the)g(Five)f(man)275 1600 y FB(If)24 b(a)h(line)g(n)m(um) m(b)s(er)f(is)g(rep)s(eated,)j(the)e(last)g(line)g(with)g(a)g(giv)m(en) h(n)m(um)m(b)s(er)d(o)m(v)m(errides)j(the)f(others.)39 b(Gaps)150 1710 y(in)33 b(the)g(line)h(n)m(um)m(b)s(ers)e(can)h(b)s(e)g (handled)f(with)h(an)g(easy)h(impro)m(v)m(emen)m(t)g(to)g(the)g (program's)f Fz(END)f FB(rule,)150 1819 y(as)f(follo)m(ws:)390 1961 y Fz(END)47 b({)485 2070 y(for)g(\(x)h(=)f(1;)g(x)h(<=)f(max;)f (x++\))581 2180 y(if)h(\(x)g(in)g(arr\))676 2289 y(print)g(arr[x])390 2399 y(})150 2642 y FA(7.5)68 b(Scanning)45 b(All)g(Elemen)l(ts)h(of)f (an)g(Arra)l(y)150 2801 y FB(In)29 b(programs)h(that)h(use)f(arra)m (ys,)h(it)f(is)g(often)h(necessary)f(to)h(use)f(a)h(lo)s(op)f(that)h (executes)g(once)g(for)f(eac)m(h)150 2911 y(elemen)m(t)d(of)e(an)g (arra)m(y)-8 b(.)40 b(In)24 b(other)i(languages,)i(where)c(arra)m(ys)i (are)f(con)m(tiguous)i(and)d(indices)i(are)f(limited)150 3021 y(to)37 b(p)s(ositiv)m(e)g(in)m(tegers,)i(this)e(is)f(easy:)53 b(all)37 b(the)g(v)-5 b(alid)36 b(indices)h(can)f(b)s(e)g(found)f(b)m (y)h(coun)m(ting)h(from)f(the)150 3130 y(lo)m(w)m(est)27 b(index)d(up)g(to)i(the)f(highest.)39 b(This)24 b(tec)m(hnique)h(w)m (on't)h(do)f(the)g(job)f(in)h Fz(awk)p FB(,)g(b)s(ecause)g(an)m(y)g(n)m (um)m(b)s(er)150 3240 y(or)i(string)h(can)f(b)s(e)g(an)h(arra)m(y)f (index.)40 b(So)27 b Fz(awk)g FB(has)g(a)h(sp)s(ecial)g(kind)e(of)i Fz(for)e FB(statemen)m(t)k(for)d(scanning)g(an)150 3349 y(arra)m(y:)390 3491 y Fz(for)47 b(\()p Fk(var)57 b Fz(in)47 b Fk(array)11 b Fz(\))485 3600 y Fk(body)150 3742 y FB(This)25 b(lo)s(op)h(executes)g Fx(b)s(o)s(dy)32 b FB(once)27 b(for)e(eac)m(h)i(index)e(in)g Fx(arra)m(y)34 b FB(that)27 b(the)e(program)h(has)f(previously)g(used,)150 3852 y(with)30 b(the)h(v)-5 b(ariable)31 b Fx(v)-5 b(ar)37 b FB(set)31 b(to)g(that)g(index.)275 3993 y(The)38 b(follo)m(wing)j(program)e(uses) g(this)g(form)g(of)h(the)f Fz(for)g FB(statemen)m(t.)69 b(The)39 b(\014rst)f(rule)h(scans)h(the)150 4103 y(input)j(records)g (and)g(notes)h(whic)m(h)f(w)m(ords)g(app)s(ear)g(\(at)h(least)h(once\)) f(in)g(the)f(input,)j(b)m(y)e(storing)g(a)150 4212 y(one)39 b(in)m(to)h(the)f(arra)m(y)g Fz(used)e FB(with)i(the)g(w)m(ord)f(as)h (index.)66 b(The)38 b(second)h(rule)f(scans)h(the)g(elemen)m(ts)h(of) 150 4322 y Fz(used)c FB(to)i(\014nd)d(all)j(the)g(distinct)f(w)m(ords)g (that)h(app)s(ear)e(in)h(the)g(input.)60 b(It)38 b(prin)m(ts)e(eac)m(h) i(w)m(ord)f(that)h(is)150 4431 y(more)32 b(than)g(10)h(c)m(haracters)h (long)f(and)e(also)i(prin)m(ts)f(the)g(n)m(um)m(b)s(er)f(of)h(suc)m(h)g (w)m(ords.)46 b(See)32 b(Section)h(8.1.3)150 4541 y ([String-Manipulation)39 b(F)-8 b(unctions],)40 b(page)f(129,)i(for)c (more)h(information)g(on)g(the)g(built-in)f(function)150 4651 y Fz(length)p FB(.)390 4792 y Fz(#)47 b(Record)g(a)g(1)g(for)g (each)g(word)g(that)f(is)h(used)g(at)g(least)g(once)390 4902 y({)581 5011 y(for)g(\(i)g(=)g(1;)h(i)f(<=)g(NF;)g(i++\))772 5121 y(used[$i])e(=)j(1)390 5230 y(})p eop end %%Page: 120 132 TeXDict begin 120 131 bop 150 -116 a FB(120)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(#)47 b(Find)g(number)f(of)h(distinct)f(words)g(more)h(than)g (10)g(characters)e(long)390 408 y(END)i({)581 518 y(for)g(\(x)g(in)g (used\))772 628 y(if)g(\(length\(x\))e(>)i(10\))g({)963 737 y(++num_long_words)963 847 y(print)f(x)772 956 y(})581 1066 y(print)g(num_long_words,)e("words)i(longer)g(than)h(10)g (characters")390 1176 y(})150 1306 y FB(See)28 b(Section)h(13.3.5)h ([Generating)f(W)-8 b(ord-Usage)30 b(Coun)m(ts],)f(page)f(237,)i(for)e (a)g(more)g(detailed)h(example)150 1416 y(of)i(this)f(t)m(yp)s(e.)275 1546 y(The)i(order)h(in)g(whic)m(h)g(elemen)m(ts)i(of)f(the)f(arra)m(y) h(are)g(accessed)g(b)m(y)f(this)h(statemen)m(t)h(is)e(determined)150 1656 y(b)m(y)f(the)g(in)m(ternal)h(arrangemen)m(t)g(of)g(the)f(arra)m (y)h(elemen)m(ts)g(within)f Fz(awk)f FB(and)h(cannot)h(b)s(e)e(con)m (trolled)j(or)150 1766 y(c)m(hanged.)39 b(This)24 b(can)h(lead)g(to)h (problems)e(if)g(new)g(elemen)m(ts)i(are)f(added)f(to)i Fx(arra)m(y)33 b FB(b)m(y)24 b(statemen)m(ts)i(in)f(the)150 1875 y(lo)s(op)32 b(b)s(o)s(dy;)e(it)i(is)g(not)g(predictable)g (whether)e(the)i Fz(for)f FB(lo)s(op)g(will)h(reac)m(h)g(them.)44 b(Similarly)-8 b(,)33 b(c)m(hanging)150 1985 y Fx(v)-5 b(ar)37 b FB(inside)30 b(the)g(lo)s(op)h(ma)m(y)g(pro)s(duce)e(strange) i(results.)41 b(It)30 b(is)g(b)s(est)g(to)i(a)m(v)m(oid)f(suc)m(h)f (things.)150 2209 y FA(7.6)68 b(The)45 b Fq(delete)c FA(Statemen)l(t)150 2369 y FB(T)-8 b(o)31 b(remo)m(v)m(e)h(an)e (individual)g(elemen)m(t)i(of)e(an)g(arra)m(y)-8 b(,)32 b(use)e(the)h Fz(delete)d FB(statemen)m(t:)390 2500 y Fz(delete)46 b Fk(array)11 b Fz([)p Fk(index)g Fz(])275 2630 y FB(Once)35 b(an)h(arra)m(y)h(elemen)m(t)g(has)f(b)s(een)f (deleted,)j(an)m(y)f(v)-5 b(alue)36 b(the)g(elemen)m(t)i(once)e(had)g (is)f(no)h(longer)150 2740 y(a)m(v)-5 b(ailable.)43 b(It)30 b(is)f(as)h(if)g(the)g(elemen)m(t)h(had)e(nev)m(er)h(b)s(een)f (referred)g(to)i(or)f(had)f(b)s(een)g(giv)m(en)h(a)g(v)-5 b(alue.)41 b(The)150 2849 y(follo)m(wing)32 b(is)e(an)h(example)g(of)f (deleting)i(elemen)m(ts)f(in)f(an)h(arra)m(y:)390 2980 y Fz(for)47 b(\(i)g(in)g(frequencies\))485 3090 y(delete)g (frequencies[i])150 3220 y FB(This)35 b(example)h(remo)m(v)m(es)h(all)g (the)f(elemen)m(ts)h(from)e(the)h(arra)m(y)g Fz(frequencies)p FB(.)54 b(Once)35 b(an)h(elemen)m(t)h(is)150 3330 y(deleted,)28 b(a)f(subsequen)m(t)e Fz(for)g FB(statemen)m(t)j(to)f(scan)g(the)f (arra)m(y)h(do)s(es)f(not)g(rep)s(ort)g(that)g(elemen)m(t)i(and)e(the) 150 3439 y Fz(in)k FB(op)s(erator)g(to)i(c)m(hec)m(k)f(for)g(the)f (presence)h(of)f(that)h(elemen)m(t)h(returns)d(zero)i(\(i.e.,)h (false\):)390 3570 y Fz(delete)46 b(foo[4])390 3680 y(if)h(\(4)g(in)h (foo\))581 3789 y(print)e("This)h(will)f(never)h(be)g(printed")275 3920 y FB(It)35 b(is)g(imp)s(ortan)m(t)g(to)h(note)g(that)g(deleting)g (an)f(elemen)m(t)h(is)g Fw(not)44 b FB(the)35 b(same)h(as)f(assigning)h (it)g(a)f(n)m(ull)150 4029 y(v)-5 b(alue)31 b(\(the)g(empt)m(y)g (string,)f Fz("")p FB(\).)41 b(F)-8 b(or)31 b(example:)390 4160 y Fz(foo[4])46 b(=)i("")390 4270 y(if)f(\(4)g(in)h(foo\))485 4379 y(print)f("This)f(is)h(printed,)f(even)h(though)f(foo[4])g(is)h (empty")275 4510 y FB(It)27 b(is)h(not)f(an)g(error)g(to)i(delete)f(an) g(elemen)m(t)h(that)f(do)s(es)f(not)g(exist.)41 b(If)27 b(`)p Fz(--lint)p FB(')f(is)h(pro)m(vided)g(on)h(the)150 4619 y(command)e(line)h(\(see)g(Section)g(11.2)h([Command-Line)e (Options],)h(page)g(173\),)i Fz(gawk)c FB(issues)h(a)h(w)m(arning)150 4729 y(message)k(when)f(an)g(elemen)m(t)i(that)f(is)f(not)h(in)f(the)h (arra)m(y)f(is)h(deleted.)275 4860 y(All)j(the)f(elemen)m(ts)i(of)f(an) f(arra)m(y)h(ma)m(y)g(b)s(e)f(deleted)h(with)f(a)h(single)g(statemen)m (t)h(b)m(y)f(lea)m(ving)h(o\013)f(the)150 4969 y(subscript)29 b(in)h(the)h Fz(delete)d FB(statemen)m(t,)33 b(as)e(follo)m(ws:)390 5100 y Fz(delete)46 b Fk(array)275 5230 y FB(This)21 b(abilit)m(y)j(is)e(a)h Fz(gawk)e FB(extension;)26 b(it)d(is)g(not)f(a) m(v)-5 b(ailable)25 b(in)d(compatibilit)m(y)j(mo)s(de)d(\(see)h (Section)g(11.2)150 5340 y([Command-Line)30 b(Options],)g(page)h (173\).)p eop end %%Page: 121 133 TeXDict begin 121 132 bop 2502 -116 a Fr(Chapter)30 b(7:)41 b(Arra)m(ys)30 b(in)h Fz(awk)90 b FB(121)275 299 y(Using)31 b(this)f(v)m(ersion)h(of)g(the)g Fz(delete)f FB(statemen)m(t)i(is)f(ab) s(out)g(three)g(times)g(more)g(e\016cien)m(t)h(than)f(the)150 408 y(equiv)-5 b(alen)m(t)32 b(lo)s(op)e(that)h(deletes)h(eac)m(h)f (elemen)m(t)h(one)f(at)g(a)g(time.)275 547 y(The)c(follo)m(wing)j (statemen)m(t)g(pro)m(vides)f(a)f(p)s(ortable)h(but)e(nonob)m(vious)h (w)m(a)m(y)i(to)f(clear)g(out)g(an)f(arra)m(y:)3712 514 y Fo(1)390 686 y Fz(split\("",)45 b(array\))275 825 y FB(The)27 b Fz(split)g FB(function)i(\(see)g(Section)g(8.1.3)h ([String-Manipulation)g(F)-8 b(unctions],)30 b(page)f(129\))h(clears) 150 935 y(out)k(the)f(target)i(arra)m(y)f(\014rst.)50 b(This)32 b(call)j(asks)f(it)g(to)g(split)g(apart)f(the)h(n)m(ull)f (string.)50 b(Because)35 b(there)f(is)150 1044 y(no)c(data)h(to)g (split)g(out,)g(the)f(function)g(simply)g(clears)i(the)e(arra)m(y)h (and)f(then)g(returns.)275 1183 y Fr(Caution:)53 b FB(Deleting)39 b(an)e(arra)m(y)g(do)s(es)f(not)h(c)m(hange)h(its)g(t)m(yp)s(e;)i(y)m (ou)d(cannot)g(delete)i(an)d(arra)m(y)i(and)150 1293 y(then)32 b(use)g(the)h(arra)m(y's)g(name)f(as)h(a)f(scalar)i(\(i.e.,)g (a)f(regular)f(v)-5 b(ariable\).)48 b(F)-8 b(or)33 b(example,)h(the)e (follo)m(wing)150 1402 y(do)s(es)e(not)h(w)m(ork:)390 1541 y Fz(a[1])47 b(=)g(3;)g(delete)f(a;)i(a)f(=)g(3)150 1780 y FA(7.7)68 b(Using)46 b(Num)l(b)t(ers)f(to)g(Subscript)f(Arra)l (ys)150 1939 y FB(An)29 b(imp)s(ortan)m(t)h(asp)s(ect)f(ab)s(out)h (arra)m(ys)f(to)i(remem)m(b)s(er)d(is)i(that)g Fw(arr)-5 b(ay)33 b(subscripts)g(ar)-5 b(e)33 b(always)g(strings)p FB(.)150 2049 y(When)e(a)h(n)m(umeric)f(v)-5 b(alue)31 b(is)h(used)e(as)h(a)h(subscript,)e(it)i(is)f(con)m(v)m(erted)i(to)f(a) g(string)f(v)-5 b(alue)32 b(b)s(efore)e(b)s(eing)150 2159 y(used)f(for)h(subscripting)f(\(see)h(Section)h(5.4)g([Con)m(v)m (ersion)g(of)f(Strings)f(and)g(Num)m(b)s(ers],)g(page)i(77\).)42 b(This)150 2268 y(means)27 b(that)h(the)g(v)-5 b(alue)27 b(of)h(the)f(built-in)h(v)-5 b(ariable)28 b Fz(CONVFMT)d FB(can)j(a\013ect)h(ho)m(w)e(y)m(our)g(program)g(accesses)150 2378 y(elemen)m(ts)32 b(of)e(an)h(arra)m(y)-8 b(.)41 b(F)-8 b(or)31 b(example:)390 2517 y Fz(xyz)47 b(=)g(12.153)390 2626 y(data[xyz])e(=)j(1)390 2736 y(CONVFMT)e(=)h("\0452.2f")390 2845 y(if)g(\(xyz)g(in)g(data\))581 2955 y(printf)f("\045s)h(is)g(in)g (data\\n",)f(xyz)390 3064 y(else)581 3174 y(printf)g("\045s)h(is)g(not) g(in)g(data\\n",)f(xyz)150 3313 y FB(This)37 b(prin)m(ts)g(`)p Fz(12.15)29 b(is)h(not)g(in)f(data)p FB('.)62 b(The)38 b(\014rst)f(statemen)m(t)i(giv)m(es)h Fz(xyz)c FB(a)j(n)m(umeric)e(v)-5 b(alue.)64 b(As-)150 3422 y(signing)39 b(to)g Fz(data[xyz])d FB(subscripts)i Fz(data)f FB(with)h(the)h(string)g(v)-5 b(alue)39 b Fz("12.153")d FB(\(using)j(the)g(default)150 3532 y(con)m(v)m(ersion)k(v)-5 b(alue)42 b(of)g Fz(CONVFMT)p FB(,)h Fz("\045.6g")p FB(\).)74 b(Th)m(us,)44 b(the)e(arra)m(y)g (elemen)m(t)i Fz(data["12.153"])38 b FB(is)j(as-)150 3642 y(signed)32 b(the)h(v)-5 b(alue)32 b(one.)47 b(The)31 b(program)h(then)g(c)m(hanges)i(the)e(v)-5 b(alue)33 b(of)f Fz(CONVFMT)p FB(.)44 b(The)32 b(test)h(`)p Fz(\(xyz)d(in)150 3751 y(data\))p FB(')37 b(generates)i(a)f(new)g(string)g(v)-5 b(alue)38 b(from)g Fz(xyz)p FB(|this)f(time)h Fz("12.15")p FB(|b)s(ecause)e(the)i(v)-5 b(alue)39 b(of)150 3861 y Fz(CONVFMT)24 b FB(only)h(allo)m(ws)i(t)m(w)m(o)g(signi\014can)m(t)g (digits.)39 b(This)25 b(test)i(fails,)g(since)f Fz("12.15")d FB(is)j(a)g(di\013eren)m(t)g(string)150 3970 y(from)k Fz("12.153")p FB(.)275 4109 y(According)g(to)g(the)f(rules)g(for)g(con) m(v)m(ersions)h(\(see)h(Section)f(5.4)g([Con)m(v)m(ersion)g(of)g (Strings)f(and)f(Num-)150 4219 y(b)s(ers],)33 b(page)g(77\),)i(in)m (teger)f(v)-5 b(alues)33 b(are)g(alw)m(a)m(ys)h(con)m(v)m(erted)g(to)g (strings)e(as)h(in)m(tegers,)i(no)d(matter)i(what)150 4328 y(the)d(v)-5 b(alue)30 b(of)h Fz(CONVFMT)d FB(ma)m(y)j(happ)s(en)e (to)i(b)s(e.)40 b(So)30 b(the)h(usual)f(case)h(of)g(the)f(follo)m(wing) i(w)m(orks:)390 4467 y Fz(for)47 b(\(i)g(=)h(1;)f(i)g(<=)g(maxsub;)f (i++\))581 4577 y Fk(do)h(something)e(with)58 b Fz(array[i])275 4716 y FB(The)31 b(\\in)m(teger)i(v)-5 b(alues)33 b(alw)m(a)m(ys)g(con) m(v)m(ert)g(to)g(strings)e(as)h(in)m(tegers")i(rule)d(has)h(an)f (additional)i(conse-)150 4825 y(quence)g(for)g(arra)m(y)h(indexing.)49 b(Octal)34 b(and)f(hexadecimal)h(constan)m(ts)h(\(see)f(Section)g (5.1.2)h([Octal)g(and)150 4935 y(Hexadecimal)f(Num)m(b)s(ers],)d(page)i (73\))g(are)f(con)m(v)m(erted)h(in)m(ternally)g(in)m(to)g(n)m(um)m(b)s (ers,)e(and)g(their)h(original)150 5044 y(form)21 b(is)h(forgotten.)39 b(This)21 b(means,)j(for)e(example,)i(that)f Fz(array[17])p FB(,)e Fz(array[021])p FB(,)g(and)g Fz(array[0x11])150 5154 y FB(all)31 b(refer)f(to)h(the)g(same)g(elemen)m(t!)p 150 5241 1200 4 v 199 5308 a Fo(1)275 5340 y Fn(Thanks)25 b(to)h(Mic)n(hael)h(Brennan)e(for)i(p)r(oin)n(ting)f(this)g(out.)p eop end %%Page: 122 134 TeXDict begin 122 133 bop 150 -116 a FB(122)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(As)h(with)g(man)m(y)g(things)h(in)f Fz(awk)p FB(,)g(the)g(ma)5 b(jorit)m(y)33 b(of)e(the)h(time)g(things)f(w)m(ork)h (as)g(one)f(w)m(ould)g(exp)s(ect)150 408 y(them)i(to.)48 b(But)33 b(it)g(is)g(useful)f(to)h(ha)m(v)m(e)h(a)g(precise)f(kno)m (wledge)g(of)g(the)g(actual)h(rules)e(whic)m(h)h(sometimes)150 518 y(can)e(ha)m(v)m(e)g(a)g(subtle)f(e\013ect)i(on)e(y)m(our)h (programs.)150 766 y FA(7.8)68 b(Using)46 b(Uninitialized)h(V)-11 b(ariables)45 b(as)h(Subscripts)150 925 y FB(Supp)s(ose)41 b(it's)i(necessary)h(to)f(write)g(a)g(program)g(to)h(prin)m(t)e(the)h (input)f(data)h(in)g(rev)m(erse)g(order.)78 b(A)150 1035 y(reasonable)31 b(attempt)h(to)f(do)f(so)h(\(with)f(some)h(test)g (data\))h(migh)m(t)f(lo)s(ok)g(lik)m(e)g(this:)390 1180 y Fz($)47 b(echo)g('line)f(1)390 1289 y(>)h(line)g(2)390 1399 y(>)g(line)g(3')g(|)h(awk)f('{)g(l[lines])e(=)j($0;)f(++lines)f(}) 390 1508 y(>)h(END)g({)390 1618 y(>)238 b(for)47 b(\(i)g(=)h(lines-1;)d (i)j(>=)f(0;)g(--i\))390 1728 y(>)382 b(print)46 b(l[i])390 1837 y(>)h(}')410 1951 y Fy(a)533 1947 y Fz(line)g(3)410 2060 y Fy(a)533 2056 y Fz(line)g(2)275 2201 y FB(Unfortunately)-8 b(,)31 b(the)f(v)m(ery)h(\014rst)f(line)h(of)f(input)f(data)j(did)d (not)i(come)g(out)g(in)f(the)g(output!)275 2346 y(A)m(t)35 b(\014rst)g(glance,)i(this)e(program)g(should)f(ha)m(v)m(e)i(w)m(ork)m (ed.)54 b(The)35 b(v)-5 b(ariable)35 b Fz(lines)f FB(is)h (uninitialized,)150 2455 y(and)g(uninitialized)i(v)-5 b(ariables)37 b(ha)m(v)m(e)g(the)f(n)m(umeric)g(v)-5 b(alue)37 b(zero.)58 b(So,)38 b Fz(awk)d FB(should)g(ha)m(v)m(e)i(prin) m(ted)f(the)150 2565 y(v)-5 b(alue)31 b(of)f Fz(l[0])p FB(.)275 2710 y(The)20 b(issue)h(here)g(is)g(that)h(subscripts)e(for)g Fz(awk)h FB(arra)m(ys)g(are)h Fw(always)30 b FB(strings.)37 b(Uninitialized)23 b(v)-5 b(ariables,)150 2819 y(when)29 b(used)g(as)i(strings,)f(ha)m(v)m(e)h(the)f(v)-5 b(alue)31 b Fz("")p FB(,)f(not)g(zero.)41 b(Th)m(us,)30 b(`)p Fz(line)f(1)p FB(')h(ends)f(up)g(stored)h(in)g Fz(l[""])p FB(.)150 2929 y(The)g(follo)m(wing)i(v)m(ersion)f(of)f(the)h(program)f(w)m(orks) g(correctly:)390 3074 y Fz({)47 b(l[lines++])e(=)j($0)f(})390 3183 y(END)g({)581 3293 y(for)g(\(i)g(=)g(lines)g(-)g(1;)g(i)h(>=)f(0;) g(--i\))724 3403 y(print)f(l[i])390 3512 y(})275 3657 y FB(Here,)38 b(the)e(`)p Fz(++)p FB(')g(forces)h Fz(lines)e FB(to)h(b)s(e)g(n)m(umeric,)i(th)m(us)d(making)i(the)f(\\old)h(v)-5 b(alue")37 b(n)m(umeric)f(zero.)150 3766 y(This)30 b(is)g(then)g(con)m (v)m(erted)i(to)f Fz("0")f FB(as)g(the)h(arra)m(y)g(subscript.)275 3911 y(Ev)m(en)38 b(though)f(it)i(is)e(somewhat)i(un)m(usual,)g(the)f (n)m(ull)g(string)f(\()p Fz("")p FB(\))h(is)g(a)g(v)-5 b(alid)39 b(arra)m(y)f(subscript.)-4010 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: lflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: rflashlight.small.xpic (xpic) %%CreationDate: Tue Dec 12 09:51:27 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 80 32 m 64 24 l x 32 24 m 56 32 l x 32 8 m 56 0 l x 8 16 56 16 e 0 24 32 8 b 64 16 m 80 16 l x 64 8 m 80 0 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 4021 a Fz(gawk)35 b FB(w)m(arns)h(ab)s(out)g(the)g (use)g(of)h(the)f(n)m(ull)g(string)h(as)f(a)h(subscript)e(if)h(`)p Fz(--lint)p FB(')f(is)i(pro)m(vided)f(on)g(the)150 4130 y(command)30 b(line)h(\(see)g(Section)g(11.2)h([Command-Line)e (Options],)h(page)g(173\).)150 4378 y FA(7.9)68 b(Multidimensional)47 b(Arra)l(ys)150 4538 y FB(A)39 b(m)m(ultidimensional)h(arra)m(y)f(is)g (an)g(arra)m(y)h(in)f(whic)m(h)f(an)h(elemen)m(t)i(is)e(iden)m (ti\014ed)g(b)m(y)g(a)g(sequence)h(of)150 4647 y(indices)25 b(instead)h(of)f(a)h(single)g(index.)38 b(F)-8 b(or)26 b(example,)i(a)d(t)m(w)m(o-dimensional)i(arra)m(y)f(requires)f(t)m(w)m (o)i(indices.)150 4757 y(The)21 b(usual)g(w)m(a)m(y)h(\(in)g(most)g (languages,)j(including)c Fz(awk)p FB(\))g(to)h(refer)f(to)h(an)g (elemen)m(t)h(of)e(a)h(t)m(w)m(o-dimensional)150 4866 y(arra)m(y)31 b(named)f Fz(grid)f FB(is)h(with)h Fz(grid[)p Fk(x)p Fz(,)p Fk(y)11 b Fz(])p FB(.)275 5011 y(Multidimensional)29 b(arra)m(ys)f(are)h(supp)s(orted)d(in)i Fz(awk)f FB(through)g (concatenation)k(of)d(indices)h(in)m(to)g(one)150 5121 y(string.)69 b Fz(awk)39 b FB(con)m(v)m(erts)j(the)e(indices)g(in)m(to) h(strings)f(\(see)h(Section)f(5.4)h([Con)m(v)m(ersion)g(of)f(Strings)g (and)150 5230 y(Num)m(b)s(ers],)29 b(page)g(77\))i(and)d(concatenates)k (them)d(together,)i(with)e(a)g(separator)h(b)s(et)m(w)m(een)f(them.)41 b(This)150 5340 y(creates)26 b(a)f(single)g(string)g(that)g(describ)s (es)f(the)g(v)-5 b(alues)25 b(of)g(the)g(separate)g(indices.)39 b(The)24 b(com)m(bined)h(string)p eop end %%Page: 123 135 TeXDict begin 123 134 bop 2502 -116 a Fr(Chapter)30 b(7:)41 b(Arra)m(ys)30 b(in)h Fz(awk)90 b FB(123)150 299 y(is)29 b(used)f(as)g(a)i(single)f(index)f(in)m(to)i(an)e(ordinary)-8 b(,)29 b(one-dimensional)h(arra)m(y)-8 b(.)41 b(The)28 b(separator)h(used)f(is)h(the)150 408 y(v)-5 b(alue)31 b(of)f(the)h(built-in)f(v)-5 b(ariable)31 b Fz(SUBSEP)p FB(.)275 548 y(F)-8 b(or)26 b(example,)h(supp)s(ose)e(w)m(e)h(ev)-5 b(aluate)27 b(the)f(expression)f(`)p Fz(foo[5,12])j(=)i("value")p FB(')24 b(when)h(the)g(v)-5 b(alue)150 658 y(of)27 b Fz(SUBSEP)f FB(is)h Fz("@")p FB(.)39 b(The)27 b(n)m(um)m(b)s(ers)f(5)h (and)g(12)h(are)g(con)m(v)m(erted)h(to)f(strings)f(and)g(concatenated)i (with)e(an)150 767 y(`)p Fz(@)p FB(')h(b)s(et)m(w)m(een)g(them,)g (yielding)g Fz("5@12")p FB(;)f(th)m(us,)h(the)g(arra)m(y)g(elemen)m(t)h Fz(foo["5@12"])c FB(is)i(set)h(to)h Fz("value")p FB(.)275 907 y(Once)24 b(the)i(elemen)m(t's)g(v)-5 b(alue)25 b(is)g(stored,)i Fz(awk)d FB(has)g(no)h(record)g(of)g(whether)f(it)i(w)m(as)f(stored)g (with)g(a)g(sin-)150 1016 y(gle)f(index)e(or)h(a)g(sequence)g(of)g (indices.)38 b(The)22 b(t)m(w)m(o)j(expressions)d(`)p Fz(foo[5,12])p FB(')f(and)h(`)p Fz(foo[5)29 b(SUBSEP)g(12])p FB(')150 1126 y(are)i(alw)m(a)m(ys)h(equiv)-5 b(alen)m(t.)275 1265 y(The)24 b(default)h(v)-5 b(alue)25 b(of)g Fz(SUBSEP)e FB(is)i(the)g(string)f Fz("\\034")p FB(,)h(whic)m(h)f(con)m(tains)i(a)f (nonprin)m(ting)f(c)m(haracter)150 1375 y(that)41 b(is)f(unlik)m(ely)h (to)h(app)s(ear)d(in)h(an)h Fz(awk)e FB(program)h(or)h(in)f(most)h (input)e(data.)72 b(The)40 b(usefulness)f(of)150 1484 y(c)m(ho)s(osing)32 b(an)f(unlik)m(ely)h(c)m(haracter)h(comes)f(from)f (the)h(fact)g(that)g(index)f(v)-5 b(alues)32 b(that)g(con)m(tain)g(a)g (string)150 1594 y(matc)m(hing)i Fz(SUBSEP)e FB(can)h(lead)h(to)g(com)m (bined)f(strings)h(that)f(are)h(am)m(biguous.)49 b(Supp)s(ose)32 b(that)i Fz(SUBSEP)150 1704 y FB(is)c Fz("@")p FB(;)g(then)f(`)p Fz(foo["a@b",)f("c"])p FB(')h(and)h(`)p Fz(foo["a",)e("b@c"])p FB(')h(are)h(indistinguishable)g(b)s(ecause)g(b)s(oth)150 1813 y(are)h(actually)h(stored)e(as)h(`)p Fz(foo["a@b@c"])p FB('.)275 1953 y(T)-8 b(o)32 b(test)g(whether)f(a)h(particular)g(index) f(sequence)h(exists)h(in)e(a)h(m)m(ultidimensional)g(arra)m(y)-8 b(,)33 b(use)f(the)150 2062 y(same)i(op)s(erator)g(\(`)p Fz(in)p FB('\))g(that)g(is)g(used)e(for)i(single)g(dimensional)g(arra)m (ys.)50 b(W)-8 b(rite)35 b(the)f(whole)g(sequence)150 2172 y(of)d(indices)f(in)g(paren)m(theses,)h(separated)g(b)m(y)f (commas,)h(as)g(the)g(left)g(op)s(erand:)390 2311 y Fz(\()p Fk(subscript1)p Fz(,)44 b Fk(subscript2)p Fz(,)h(...)o(\))j(in)f Fk(array)275 2451 y FB(The)37 b(follo)m(wing)i(example)f(treats)h(its)f (input)e(as)i(a)g(t)m(w)m(o-dimensional)i(arra)m(y)e(of)f(\014elds;)k (it)e(rotates)150 2560 y(this)25 b(arra)m(y)h(90)g(degrees)g(clo)s(c)m (kwise)h(and)e(prin)m(ts)f(the)i(result.)39 b(It)25 b(assumes)g(that)h (all)g(lines)g(ha)m(v)m(e)g(the)g(same)150 2670 y(n)m(um)m(b)s(er)j(of) i(elemen)m(ts:)390 2809 y Fz({)629 2919 y(if)47 b(\(max_nf)f(<)h(NF\)) 867 3029 y(max_nf)f(=)i(NF)629 3138 y(max_nr)e(=)h(NR)629 3248 y(for)g(\(x)g(=)g(1;)g(x)h(<=)f(NF;)g(x++\))867 3357 y(vector[x,)f(NR])g(=)i($x)390 3467 y(})390 3686 y(END)f({)629 3796 y(for)g(\(x)g(=)g(1;)g(x)h(<=)f(max_nf;)f(x++\))g({) 867 3905 y(for)h(\(y)g(=)h(max_nr;)e(y)h(>=)g(1;)g(--y\))1106 4015 y(printf\("\045s)e(",)i(vector[x,)e(y]\))867 4125 y(printf\("\\n"\))629 4234 y(})390 4344 y(})150 4483 y FB(When)30 b(giv)m(en)i(the)e(input:)390 4623 y Fz(1)47 b(2)h(3)f(4)h(5)f(6)390 4732 y(2)g(3)h(4)f(5)h(6)f(1)390 4842 y(3)g(4)h(5)f(6)h(1)f(2)390 4951 y(4)g(5)h(6)f(1)h(2)f(3)150 5091 y FB(the)31 b(program)f(pro)s(duces)f(the)h(follo)m(wing)i (output:)390 5230 y Fz(4)47 b(3)h(2)f(1)390 5340 y(5)g(4)h(3)f(2)p eop end %%Page: 124 136 TeXDict begin 124 135 bop 150 -116 a FB(124)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(6)47 b(5)h(4)f(3)390 408 y(1)g(6)h(5)f(4)390 518 y(2)g(1)h(6)f(5)390 628 y(3)g(2)h(1)f(6)150 857 y FA(7.10)68 b(Scanning)45 b(Multidimensional)h(Arra)l(ys)150 1016 y FB(There)33 b(is)g(no)g(sp)s(ecial)h Fz(for)f FB(statemen)m(t)i(for)e(scanning)g(a)h(\\m)m(ultidimensional")h(arra)m (y)-8 b(.)50 b(There)33 b(cannot)150 1126 y(b)s(e)e(one,)i(b)s(ecause,) g(in)f(truth,)g(there)g(are)g(no)g(m)m(ultidimensional)h(arra)m(ys)f (or)g(elemen)m(ts|there)i(is)e(only)150 1235 y(a)f(m)m(ultidimensional) g Fw(way)i(of)g(ac)-5 b(c)g(essing)39 b FB(an)31 b(arra)m(y)-8 b(.)275 1368 y(Ho)m(w)m(ev)m(er,)31 b(if)d(y)m(our)g(program)h(has)f (an)g(arra)m(y)h(that)g(is)g(alw)m(a)m(ys)g(accessed)h(as)f(m)m (ultidimensional,)h(y)m(ou)150 1478 y(can)h(get)i(the)e(e\013ect)h(of)g (scanning)f(it)g(b)m(y)g(com)m(bining)h(the)f(scanning)g Fz(for)f FB(statemen)m(t)j(\(see)f(Section)g(7.5)150 1587 y([Scanning)g(All)i(Elemen)m(ts)f(of)g(an)g(Arra)m(y],)h(page)f (119\))h(with)f(the)g(built-in)f Fz(split)f FB(function)i(\(see)g(Sec-) 150 1697 y(tion)e(8.1.3)h([String-Manipulation)f(F)-8 b(unctions],)32 b(page)f(129\).)42 b(It)31 b(w)m(orks)f(in)g(the)h (follo)m(wing)h(manner:)390 1830 y Fz(for)47 b(\(combined)e(in)i (array\))f({)581 1939 y(split\(combined,)e(separate,)h(SUBSEP\))581 2049 y(...)390 2159 y(})150 2291 y FB(This)39 b(sets)h(the)g(v)-5 b(ariable)40 b Fz(combined)d FB(to)k(eac)m(h)g(concatenated)g(com)m (bined)f(index)f(in)h(the)f(arra)m(y)-8 b(,)44 b(and)150 2401 y(splits)28 b(it)h(in)m(to)g(the)f(individual)g(indices)g(b)m(y)g (breaking)h(it)f(apart)h(where)f(the)g(v)-5 b(alue)29 b(of)f Fz(SUBSEP)e FB(app)s(ears.)150 2511 y(The)k(individual)g (indices)g(then)g(b)s(ecome)h(the)g(elemen)m(ts)g(of)g(the)f(arra)m(y)h Fz(separate)p FB(.)275 2643 y(Th)m(us,)36 b(if)g(a)g(v)-5 b(alue)36 b(is)g(previously)g(stored)g(in)f Fz(array[1,)28 b("foo"])p FB(;)37 b(then)f(an)g(elemen)m(t)h(with)e(index)150 2753 y Fz("1\\034foo")27 b FB(exists)i(in)g Fz(array)p FB(.)39 b(\(Recall)32 b(that)e(the)f(default)h(v)-5 b(alue)29 b(of)h Fz(SUBSEP)d FB(is)j(the)f(c)m(haracter)i(with)150 2863 y(co)s(de)i(034.\))49 b(So)s(oner)32 b(or)g(later,)j(the)d Fz(for)g FB(statemen)m(t)i(\014nds)d(that)i(index)f(and)g(do)s(es)h(an) f(iteration)i(with)150 2972 y(the)d(v)-5 b(ariable)31 b Fz(combined)d FB(set)j(to)g Fz("1\\034foo")p FB(.)38 b(Then)29 b(the)i Fz(split)e FB(function)h(is)g(called)i(as)e(follo)m (ws:)390 3105 y Fz(split\("1\\034foo",)43 b(separate,)i("\\034"\))150 3238 y FB(The)31 b(result)h(is)f(to)i(set)f Fz(separate[1])c FB(to)33 b Fz("1")e FB(and)g Fz(separate[2])d FB(to)33 b Fz("foo")p FB(.)43 b(Presto!)i(The)31 b(original)150 3347 y(sequence)g(of)f(separate)i(indices)e(is)h(reco)m(v)m(ered.)150 3577 y FA(7.11)68 b(Sorting)46 b(Arra)l(y)f(V)-11 b(alues)45 b(and)f(Indices)h(with)h Fq(gawk)150 3736 y FB(The)37 b(order)g(in)g(whic)m(h)g(an)g(arra)m(y)h(is)f(scanned)g(with)g(a)h(`)p Fz(for)29 b(\(i)h(in)g(array\))p FB(')36 b(lo)s(op)h(is)g(essen)m (tially)j(ar-)150 3846 y(bitrary)-8 b(.)57 b(In)35 b(most)h Fz(awk)e FB(implemen)m(tations,)39 b(sorting)d(an)g(arra)m(y)g (requires)f(writing)g(a)i Fz(sort)d FB(function.)150 3955 y(While)e(this)f(can)g(b)s(e)f(educational)j(for)e(exploring)g (di\013eren)m(t)g(sorting)h(algorithms,)g(usually)f(that's)h(not)150 4065 y(the)43 b(p)s(oin)m(t)f(of)g(the)h(program.)76 b Fz(gawk)42 b FB(pro)m(vides)g(the)h(built-in)f Fz(asort)f FB(and)g Fz(asorti)g FB(functions)h(\(see)150 4174 y(Section)31 b(8.1.3)h([String-Manipulation)g(F)-8 b(unctions],)31 b(page)g(129\))h(for)e(sorting)h(arra)m(ys.)41 b(F)-8 b(or)31 b(example:)390 4307 y Fk(populate)46 b(the)g(array)57 b Fz(data)390 4417 y(n)47 b(=)h(asort\(data\))390 4526 y(for)f(\(i)g(=)h(1;)f(i)g(<=)g(n;)h(i++\))581 4636 y Fk(do)f(something)e(with)58 b Fz(data[i])275 4769 y FB(After)33 b(the)h(call)h(to)f Fz(asort)p FB(,)g(the)f(arra)m(y)h Fz(data)f FB(is)h(indexed)f(from)g(1)h(to)g(some)g(n)m(um)m(b)s(er)e Fx(n)p FB(,)i(the)g(total)150 4878 y(n)m(um)m(b)s(er)j(of)h(elemen)m (ts)i(in)e Fz(data)p FB(.)63 b(\(This)38 b(coun)m(t)g(is)h Fz(asort)p FB('s)e(return)g(v)-5 b(alue.\))65 b Fz(data[1])36 b Fy(\024)i Fz(data[2])150 4988 y Fy(\024)45 b Fz(data[3])p FB(,)i(and)e(so)g(on.)86 b(The)45 b(comparison)g(of)h(arra)m(y)f (elemen)m(ts)i(is)e(done)g(using)g Fz(gawk)p FB('s)f(usual)150 5098 y(comparison)23 b(rules)g(\(see)h(Section)f(5.10)i([V)-8 b(ariable)24 b(T)m(yping)f(and)f(Comparison)h(Expressions],)h(page)f (85\).)275 5230 y(An)31 b(imp)s(ortan)m(t)g(side)g(e\013ect)i(of)f (calling)h Fz(asort)d FB(is)h(that)h Fw(the)i(arr)-5 b(ay's)36 b(original)e(indic)-5 b(es)34 b(ar)-5 b(e)34 b(irr)-5 b(evo-)150 5340 y(c)g(ably)33 b(lost)p FB(.)42 b(As)30 b(this)h(isn't)f(alw)m(a)m(ys)i(desirable,)f Fz(asort)e FB(accepts)j(a)e(second)h(argumen)m(t:)p eop end %%Page: 125 137 TeXDict begin 125 136 bop 2502 -116 a Fr(Chapter)30 b(7:)41 b(Arra)m(ys)30 b(in)h Fz(awk)90 b FB(125)390 299 y Fk(populate)46 b(the)g(array)57 b Fz(source)390 408 y(n)47 b(=)h(asort\(source,)c (dest\))390 518 y(for)j(\(i)g(=)h(1;)f(i)g(<=)g(n;)h(i++\))581 628 y Fk(do)f(something)e(with)58 b Fz(dest[i])275 769 y FB(In)39 b(this)h(case,)k Fz(gawk)39 b FB(copies)h(the)h Fz(source)d FB(arra)m(y)j(in)m(to)g(the)f Fz(dest)f FB(arra)m(y)h(and)g (then)g(sorts)g Fz(dest)p FB(,)150 878 y(destro)m(ying)31 b(its)g(indices.)41 b(Ho)m(w)m(ev)m(er,)32 b(the)f Fz(source)e FB(arra)m(y)i(is)f(not)h(a\013ected.)275 1019 y(Often,)h(what's)f (needed)h(is)f(to)i(sort)f(on)f(the)h(v)-5 b(alues)32 b(of)g(the)g Fw(indic)-5 b(es)40 b FB(instead)32 b(of)g(the)g(v)-5 b(alues)32 b(of)g(the)150 1129 y(elemen)m(ts.)52 b(T)-8 b(o)34 b(do)g(that,)h(starting)g(with)e Fz(gawk)g FB(3.1.2,)k(use)c (the)h Fz(asorti)e FB(function.)50 b(The)34 b(in)m(terface)h(is)150 1238 y(iden)m(tical)i(to)f(that)g(of)f Fz(asort)p FB(,)g(except)h(that) g(the)f(index)g(v)-5 b(alues)35 b(are)h(used)e(for)h(sorting,)i(and)e (b)s(ecome)150 1348 y(the)c(v)-5 b(alues)30 b(of)h(the)f(result)h(arra) m(y:)390 1489 y Fz({)47 b(source[$0])e(=)j(some_func\($0\))c(})390 1708 y(END)j({)581 1817 y(n)g(=)h(asorti\(source,)c(dest\))581 1927 y(for)j(\(i)g(=)g(1;)h(i)f(<=)g(n;)g(i++\))g({)772 2037 y Fk(do)g(something)e(with)57 b Fz(dest[i])619 b Fk(Work)47 b(with)f(sorted)g(indices)g(di-)390 2146 y(rectly)772 2256 y Fz(...)772 2365 y Fk(do)h(something)e(with)57 b Fz(source[dest[i]])235 b Fk(Access)46 b(original)g(array)g(via)h (sorted)f(in-)390 2475 y(dices)581 2585 y Fz(})390 2694 y(})275 2835 y FB(If)34 b(y)m(our)h(v)m(ersion)h(of)f Fz(gawk)f FB(is)h(3.1.0)i(or)e(3.1.1,)j(y)m(ou)d(don't)g(ha)m(v)m(e)h Fz(asorti)p FB(.)53 b(Instead,)37 b(use)d(a)i(help)s(er)150 2945 y(arra)m(y)24 b(to)h(hold)e(the)h(sorted)g(index)g(v)-5 b(alues,)26 b(and)d(then)g(access)j(the)e(original)h(arra)m(y's)f (elemen)m(ts.)40 b(It)24 b(w)m(orks)150 3054 y(in)30 b(the)h(follo)m(wing)g(w)m(a)m(y:)390 3195 y Fk(populate)46 b(the)g(array)57 b Fz(data)390 3305 y(#)47 b(copy)g(indices)390 3414 y(j)g(=)h(1)390 3524 y(for)f(\(i)g(in)g(data\))g({)581 3634 y(ind[j])f(=)h(i)191 b(#)48 b(index)e(value)g(becomes)g(element)g (value)581 3743 y(j++)390 3853 y(})390 3962 y(n)h(=)h(asort\(ind\))188 b(#)48 b(index)e(values)g(are)h(now)g(sorted)390 4072 y(for)g(\(i)g(=)h(1;)f(i)g(<=)g(n;)h(i++\))e({)581 4181 y Fk(do)h(something)e(with)58 b Fz(ind[i])523 b Fk(Work)46 b(with)h(sorted)f(indices)g(directly)581 4291 y Fz(...)581 4401 y Fk(do)h(something)e(with)58 b Fz(data[ind[i]])235 b Fk(Access)46 b(original)f(array)i(via)g(sorted)f(in-)390 4510 y(dices)390 4620 y Fz(})275 4761 y FB(Sorting)32 b(the)h(arra)m(y)g(b)m(y)f(replacing)i(the)e(indices)h(pro)m(vides)g (maximal)g(\015exibilit)m(y)-8 b(.)49 b(T)-8 b(o)33 b(tra)m(v)m(erse)h (the)150 4870 y(elemen)m(ts)25 b(in)f(decreasing)g(order,)h(use)f(a)g (lo)s(op)g(that)g(go)s(es)h(from)e Fx(n)g FB(do)m(wn)h(to)g(1,)i (either)e(o)m(v)m(er)i(the)e(elemen)m(ts)150 4980 y(or)30 b(o)m(v)m(er)i(the)f(indices.)275 5121 y(Cop)m(ying)26 b(arra)m(y)g(indices)h(and)e(elemen)m(ts)j(isn't)e(exp)s(ensiv)m(e)g (in)g(terms)g(of)g(memory)-8 b(.)40 b(In)m(ternally)-8 b(,)28 b Fz(gawk)150 5230 y FB(main)m(tains)k Fx(reference)g(coun)m(ts) k FB(to)d(data.)45 b(F)-8 b(or)32 b(example,)h(when)d Fz(asort)g FB(copies)j(the)f(\014rst)e(arra)m(y)i(to)h(the)150 5340 y(second)h(one,)i(there)e(is)g(only)g(one)h(cop)m(y)f(of)h(the)f (original)h(arra)m(y)g(elemen)m(ts')g(data,)h(ev)m(en)f(though)f(b)s (oth)p eop end %%Page: 126 138 TeXDict begin 126 137 bop 150 -116 a FB(126)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(arra)m(ys)j(use)f(the)h(v)-5 b(alues.)47 b(Similarly)-8 b(,)34 b(when)e(cop)m(ying)h(the)g(indices)g(from)f Fz(data)f FB(to)i Fz(ind)p FB(,)g(there)f(is)h(only)150 408 y(one)e(cop)m(y)g(of) f(the)h(actual)h(index)e(strings.)275 543 y(W)-8 b(e)38 b(said)f(previously)f(that)i(comparisons)f(are)g(done)g(using)f Fz(gawk)p FB('s)g(\\usual)h(comparison)g(rules.")150 653 y(Because)25 b Fz(IGNORECASE)20 b FB(a\013ects)25 b(string)f(comparisons,)h(the)e(v)-5 b(alue)24 b(of)g Fz(IGNORECASE)c FB(also)25 b(a\013ects)g(sorting)150 762 y(for)30 b(b)s(oth)g Fz(asort)f FB(and)g Fz(asorti)p FB(.)40 b(Ca)m(v)m(eat)32 b(Emptor.)p eop end %%Page: 127 139 TeXDict begin 127 138 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(127)150 299 y Fu(8)80 b(F)-13 b(unctions)150 536 y FB(This)36 b(c)m(hapter)h(describ)s(es)f Fz(awk)p FB('s)g(built-in)g(functions,)i(whic)m(h)e(fall)i(in)m(to)f (three)g(categories:)56 b(n)m(umeric,)150 646 y(string,)45 b(and)d(I/O.)h Fz(gawk)e FB(pro)m(vides)h(additional)h(groups)f(of)g (functions)g(to)h(w)m(ork)g(with)f(v)-5 b(alues)42 b(that)150 756 y(represen)m(t)30 b(time,)i(do)e(bit)g(manipulation,)h(and)f(in)m (ternationalize)j(and)d(lo)s(calize)j(programs.)275 891 y(Besides)28 b(the)f(built-in)g(functions,)h Fz(awk)f FB(has)g(pro)m(visions)h(for)f(writing)g(new)g(functions)g(that)h(the)g (rest)150 1001 y(of)c(a)g(program)g(can)g(use.)39 b(The)23 b(second)h(half)g(of)g(this)g(c)m(hapter)h(describ)s(es)e(these)h Fx(user-de\014ned)i FB(functions.)150 1235 y FA(8.1)68 b(Built-in)45 b(F)-11 b(unctions)150 1394 y Fx(Built-in)36 b FB(functions)f(are)h(alw)m(a)m(ys)i(a)m(v)-5 b(ailable)37 b(for)f(y)m(our)f Fz(awk)g FB(program)g(to)i(call.)57 b(This)35 b(section)i(de\014nes)150 1504 y(all)42 b(the)g(built-in)f (functions)f(in)h Fz(awk)p FB(;)46 b(some)c(of)f(these)h(are)g(men)m (tioned)f(in)g(other)h(sections)g(but)f(are)150 1614 y(summarized)30 b(here)g(for)g(y)m(our)g(con)m(v)m(enience.)150 1814 y Fj(8.1.1)63 b(Calling)41 b(Built-in)g(F)-10 b(unctions)150 1961 y FB(T)i(o)25 b(call)h(one)f(of)g Fz(awk)p FB('s)f(built-in)h (functions,)h(write)e(the)h(name)g(of)g(the)g(function)g(follo)m(w)m (ed)h(b)m(y)f(argumen)m(ts)150 2071 y(in)j(paren)m(theses.)40 b(F)-8 b(or)30 b(example,)f(`)p Fz(atan2\(y)g(+)h(z,)g(1\))p FB(')e(is)g(a)h(call)h(to)f(the)g(function)f Fz(atan2)f FB(and)g(has)i(t)m(w)m(o)150 2180 y(argumen)m(ts.)275 2316 y(Whitespace)e(is)f(ignored)f(b)s(et)m(w)m(een)i(the)f(built-in)f (function)h(name)f(and)h(the)f(op)s(en)h(paren)m(thesis,)h(and)150 2425 y(it)35 b(is)g(go)s(o)s(d)g(practice)h(to)f(a)m(v)m(oid)i(using)d (whitespace)i(there.)54 b(User-de\014ned)34 b(functions)g(do)h(not)g(p) s(ermit)150 2535 y(whitespace)e(in)f(this)g(w)m(a)m(y)-8 b(,)34 b(and)e(it)h(is)f(easier)h(to)g(a)m(v)m(oid)h(mistak)m(es)f(b)m (y)f(follo)m(wing)i(a)f(simple)f(con)m(v)m(en)m(tion)150 2645 y(that)f(alw)m(a)m(ys)h(w)m(orks|no)e(whitespace)h(after)g(a)g (function)f(name.)275 2780 y(Eac)m(h)c(built-in)g(function)g(accepts)h (a)g(certain)g(n)m(um)m(b)s(er)e(of)h(argumen)m(ts.)40 b(In)25 b(some)i(cases,)h(argumen)m(ts)150 2890 y(can)f(b)s(e)f (omitted.)40 b(The)26 b(defaults)h(for)f(omitted)i(argumen)m(ts)e(v)-5 b(ary)27 b(from)f(function)g(to)h(function)g(and)f(are)150 2999 y(describ)s(ed)34 b(under)f(the)j(individual)e(functions.)54 b(In)34 b(some)i Fz(awk)e FB(implemen)m(tations,)k(extra)e(argumen)m (ts)150 3109 y(giv)m(en)g(to)g(built-in)f(functions)g(are)g(ignored.)55 b(Ho)m(w)m(ev)m(er,)39 b(in)c Fz(gawk)p FB(,)g(it)h(is)f(a)h(fatal)g (error)f(to)h(giv)m(e)g(extra)150 3219 y(argumen)m(ts)31 b(to)g(a)g(built-in)f(function.)275 3354 y(When)i(a)h(function)f(is)h (called,)h(expressions)e(that)i(create)g(the)e(function's)h(actual)h (parameters)f(are)150 3464 y(ev)-5 b(aluated)46 b(completely)h(b)s (efore)d(the)i(call)g(is)f(p)s(erformed.)83 b(F)-8 b(or)46 b(example,)j(in)c(the)g(follo)m(wing)i(co)s(de)150 3573 y(fragmen)m(t:)390 3709 y Fz(i)g(=)h(4)390 3819 y(j)f(=)h(sqrt\(i++\)) 150 3954 y FB(the)38 b(v)-5 b(ariable)39 b Fz(i)e FB(is)h(incremen)m (ted)g(to)h(the)f(v)-5 b(alue)38 b(\014v)m(e)g(b)s(efore)g Fz(sqrt)f FB(is)h(called)h(with)e(a)h(v)-5 b(alue)39 b(of)f(four)150 4064 y(for)30 b(its)h(actual)h(parameter.)42 b(The)29 b(order)h(of)h(ev)-5 b(aluation)32 b(of)f(the)f(expressions)h (used)e(for)h(the)h(function's)150 4173 y(parameters)37 b(is)f(unde\014ned.)57 b(Th)m(us,)37 b(a)m(v)m(oid)g(writing)g (programs)f(that)h(assume)f(that)h(parameters)g(are)150 4283 y(ev)-5 b(aluated)32 b(from)d(left)j(to)f(righ)m(t)g(or)f(from)g (righ)m(t)h(to)g(left.)41 b(F)-8 b(or)32 b(example:)390 4419 y Fz(i)47 b(=)h(5)390 4528 y(j)f(=)h(atan2\(i++,)d(i)i(*=)h(2\)) 275 4664 y FB(If)27 b(the)i(order)e(of)i(ev)-5 b(aluation)29 b(is)g(left)f(to)h(righ)m(t,)h(then)e Fz(i)g FB(\014rst)f(b)s(ecomes)h (6,)i(and)d(then)h(12,)i(and)d Fz(atan2)150 4773 y FB(is)k(called)h (with)f(the)g(t)m(w)m(o)h(argumen)m(ts)f(6)g(and)g(12.)43 b(But)31 b(if)f(the)i(order)e(of)h(ev)-5 b(aluation)32 b(is)f(righ)m(t)h(to)f(left,)h Fz(i)150 4883 y FB(\014rst)e(b)s(ecomes) g(10,)i(then)e(11,)h(and)f Fz(atan2)f FB(is)h(called)i(with)e(the)h(t)m (w)m(o)g(argumen)m(ts)g(11)g(and)f(10.)150 5083 y Fj(8.1.2)63 b(Numeric)41 b(F)-10 b(unctions)150 5230 y FB(The)31 b(follo)m(wing)h(list)g(describ)s(es)e(all)i(of)f(the)h(built-in)f (functions)f(that)i(w)m(ork)f(with)g(n)m(um)m(b)s(ers.)42 b(Optional)150 5340 y(parameters)31 b(are)f(enclosed)i(in)e(square)g (brac)m(k)m(ets)i(\([)e(]\):)p eop end %%Page: 128 140 TeXDict begin 128 139 bop 150 -116 a FB(128)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz(int\()p Fk(x)11 b Fz(\))181 b FB(This)24 b(returns)g(the)h (nearest)h(in)m(teger)g(to)g Fx(x)p FB(,)g(lo)s(cated)g(b)s(et)m(w)m (een)g Fx(x)31 b FB(and)25 b(zero)h(and)e(truncated)630 408 y(to)m(w)m(ard)31 b(zero.)630 542 y(F)-8 b(or)30 b(example,)h Fz(int\(3\))d FB(is)i(3,)g Fz(int\(3.9\))e FB(is)h(3,)i Fz(int\(-3.9\))c FB(is)i Fy(\000)p FB(3,)h(and)g Fz(int\(-3\))d FB(is)j Fy(\000)p FB(3)630 652 y(as)h(w)m(ell.)150 810 y Fz(sqrt\()p Fk(x)11 b Fz(\))133 b FB(This)23 b(returns)h(the)g(p) s(ositiv)m(e)h(square)f(ro)s(ot)h(of)f Fx(x)p FB(.)39 b Fz(gawk)23 b FB(rep)s(orts)g(an)i(error)e(if)i Fx(x)30 b FB(is)24 b(negativ)m(e.)630 920 y(Th)m(us,)30 b Fz(sqrt\(4\))e FB(is)i(2.)150 1078 y Fz(exp\()p Fk(x)11 b Fz(\))181 b FB(This)42 b(returns)f(the)i(exp)s(onen)m(tial)h(of)f Fx(x)49 b FB(\()p Fz(e)30 b(^)g Fk(x)11 b FB(\))42 b(or)h(rep)s(orts)f (an)g(error)h(if)f Fx(x)49 b FB(is)43 b(out)g(of)630 1187 y(range.)70 b(The)40 b(range)h(of)f(v)-5 b(alues)40 b Fx(x)47 b FB(can)40 b(ha)m(v)m(e)h(dep)s(ends)e(on)h(y)m(our)g(mac)m (hine's)h(\015oating-)630 1297 y(p)s(oin)m(t)30 b(represen)m(tation.) 150 1455 y Fz(log\()p Fk(x)11 b Fz(\))181 b FB(This)26 b(returns)g(the)h(natural)f(logarithm)i(of)f Fx(x)p FB(,)h(if)f Fx(x)32 b FB(is)27 b(p)s(ositiv)m(e;)j(otherwise,)e(it)f(rep)s(orts)f (an)630 1565 y(error.)150 1723 y Fz(sin\()p Fk(x)11 b Fz(\))181 b FB(This)30 b(returns)f(the)h(sine)h(of)f Fx(x)p FB(,)h(with)f Fx(x)36 b FB(in)30 b(radians.)150 1881 y Fz(cos\()p Fk(x)11 b Fz(\))181 b FB(This)30 b(returns)f(the)h (cosine)h(of)g Fx(x)p FB(,)g(with)f Fx(x)36 b FB(in)30 b(radians.)150 2039 y Fz(atan2\()p Fk(y)p Fz(,)e Fk(x)11 b Fz(\))630 2149 y FB(This)30 b(returns)f(the)h(arctangen)m(t)j(of)d Fk(y)41 b Fz(/)30 b Fk(x)40 b FB(in)30 b(radians.)150 2307 y Fz(rand\(\))192 b FB(This)33 b(returns)f(a)h(random)g(n)m(um)m (b)s(er.)48 b(The)33 b(v)-5 b(alues)34 b(of)g Fz(rand)e FB(are)i(uniformly)e(distributed)630 2417 y(b)s(et)m(w)m(een)f(zero)g (and)f(one.)41 b(The)30 b(v)-5 b(alue)31 b(could)f(b)s(e)g(zero)h(but)f (is)g(nev)m(er)h(one.)3194 2384 y Fo(1)630 2550 y FB(Often)d(random)g (in)m(tegers)i(are)f(needed)g(instead.)40 b(F)-8 b(ollo)m(wing)31 b(is)e(a)g(user-de\014ned)e(function)630 2660 y(that)k(can)g(b)s(e)e (used)h(to)h(obtain)g(a)g(random)e(non-negativ)m(e)k(in)m(teger)e(less) g(than)f Fx(n)p FB(:)870 2794 y Fz(function)46 b(randint\(n\))f({)1109 2903 y(return)h(int\(n)g(*)i(rand\(\)\))870 3013 y(})630 3147 y FB(The)29 b(m)m(ultiplication)i(pro)s(duces)d(a)i(random)e(n)m (um)m(b)s(er)g(greater)j(than)e(zero)h(and)f(less)g(than)630 3257 y Fz(n)p FB(.)76 b(Using)43 b Fz(int)p FB(,)i(this)d(result)g(is)h (made)f(in)m(to)h(an)g(in)m(teger)g(b)s(et)m(w)m(een)g(zero)h(and)d Fz(n)h Fy(\000)g FB(1,)630 3366 y(inclusiv)m(e.)630 3500 y(The)32 b(follo)m(wing)h(example)g(uses)e(a)i(similar)f(function)g(to) h(pro)s(duce)e(random)g(in)m(tegers)i(b)s(e-)630 3610 y(t)m(w)m(een)k(one)g(and)e Fx(n)p FB(.)58 b(This)35 b(program)h(prin)m(ts)g(a)h(new)e(random)h(n)m(um)m(b)s(er)f(for)h(eac) m(h)h(input)630 3719 y(record:)870 3853 y Fz(#)47 b(Function)f(to)h (roll)g(a)g(simulated)f(die.)870 3963 y(function)g(roll\(n\))f({)j (return)e(1)h(+)h(int\(rand\(\))d(*)i(n\))g(})870 4182 y(#)g(Roll)g(3)h(six-sided)d(dice)h(and)870 4291 y(#)h(print)g(total)f (number)g(of)h(points.)870 4401 y({)1156 4511 y(printf\("\045d)e (points\\n",)1490 4620 y(roll\(6\)+roll\(6\)+roll\(6\)\))870 4730 y(})630 4864 y Fr(Caution:)40 b FB(In)28 b(most)h Fz(awk)f FB(implemen)m(tations,)j(including)d Fz(gawk)p FB(,)h Fz(rand)e FB(starts)j(generating)630 4973 y(n)m(um)m(b)s(ers)24 b(from)h(the)g(same)h(starting)g(n)m(um)m(b)s(er,)f(or)h Fx(seed)p FB(,)g(eac)m(h)h(time)f(y)m(ou)g(run)e Fz(awk)p FB(.)38 b(Th)m(us,)p 150 5066 1200 4 v 199 5134 a Fo(1)275 5166 y Fn(The)24 b(C)g(v)n(ersion)g(of)h Fm(rand)g Fn(is)f(kno)n(wn)g (to)g(pro)r(duce)g(fairly)h(p)r(o)r(or)f(sequences)g(of)h(random)f(n)n (um)n(b)r(ers.)34 b(Ho)n(w)n(ev)n(er,)24 b(nothing)275 5253 y(requires)f(that)g(an)g Fm(awk)h Fn(implemen)n(tation)g(use)g (the)f(C)g Fm(rand)i Fn(to)e(implemen)n(t)g(the)g Fm(awk)h Fn(v)n(ersion)g(of)g Fm(rand)p Fn(.)35 b(In)22 b(fact,)j Fm(gawk)275 5340 y Fn(uses)h(the)f(BSD)g Fm(random)i Fn(function,)f(whic)n(h)g(is)g(considerably)g(b)r(etter)g(than)f Fm(rand)p Fn(,)i(to)f(pro)r(duce)f(random)h(n)n(um)n(b)r(ers.)p eop end %%Page: 129 141 TeXDict begin 129 140 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(129)630 299 y(a)34 b(program)g(generates)i (the)e(same)g(results)g(eac)m(h)h(time)g(y)m(ou)g(run)d(it.)52 b(The)34 b(n)m(um)m(b)s(ers)f(are)630 408 y(random)25 b(within)h(one)g Fz(awk)f FB(run)g(but)g(predictable)i(from)e(run)g(to) i(run.)37 b(This)26 b(is)g(con)m(v)m(enien)m(t)630 518 y(for)k(debugging,)h(but)f(if)h(y)m(ou)g(w)m(an)m(t)g(a)g(program)g(to) g(do)g(di\013eren)m(t)g(things)g(eac)m(h)g(time)h(it)f(is)630 628 y(used,)g(y)m(ou)i(m)m(ust)e(c)m(hange)i(the)f(seed)g(to)g(a)g(v)-5 b(alue)32 b(that)h(is)e(di\013eren)m(t)h(in)g(eac)m(h)h(run.)43 b(T)-8 b(o)32 b(do)630 737 y(this,)f(use)f Fz(srand)p FB(.)150 903 y Fz(srand\()p FB([)p Fk(x)11 b FB(])p Fz(\))630 1013 y FB(The)43 b(function)g Fz(srand)f FB(sets)i(the)g(starting)g(p)s (oin)m(t,)j(or)d(seed,)j(for)c(generating)i(random)630 1122 y(n)m(um)m(b)s(ers)29 b(to)i(the)g(v)-5 b(alue)30 b Fx(x)p FB(.)630 1260 y(Eac)m(h)36 b(seed)f(v)-5 b(alue)35 b(leads)g(to)h(a)f(particular)h(sequence)f(of)g(random)f(n)m(um)m(b)s (ers.)3345 1227 y Fo(2)3436 1260 y FB(Th)m(us,)h(if)630 1370 y(the)e(seed)f(is)h(set)g(to)g(the)g(same)g(v)-5 b(alue)33 b(a)g(second)f(time,)i(the)f(same)g(sequence)g(of)g(random) 630 1479 y(n)m(um)m(b)s(ers)c(is)h(pro)s(duced)f(again.)630 1617 y(Di\013eren)m(t)39 b Fz(awk)d FB(implemen)m(tations)j(use)e (di\013eren)m(t)g(random-n)m(um)m(b)s(er)f(generators)i(in)m(ter-)630 1727 y(nally)-8 b(.)39 b(Don't)24 b(exp)s(ect)g(the)f(same)g Fz(awk)f FB(program)h(to)h(pro)s(duce)e(the)h(same)g(series)h(of)f (random)630 1837 y(n)m(um)m(b)s(ers)29 b(when)g(executed)j(b)m(y)e (di\013eren)m(t)h(v)m(ersions)f(of)h Fz(awk)p FB(.)630 1974 y(If)h(the)h(argumen)m(t)g Fx(x)39 b FB(is)33 b(omitted,)h(as)f (in)f(`)p Fz(srand\(\))p FB(',)g(then)h(the)f(curren)m(t)h(date)g(and)f (time)630 2084 y(of)37 b(da)m(y)g(are)g(used)f(for)h(a)g(seed.)60 b(This)36 b(is)h(the)g(w)m(a)m(y)h(to)g(get)g(random)e(n)m(um)m(b)s (ers)f(that)j(are)630 2194 y(truly)30 b(unpredictable.)630 2331 y(The)24 b(return)f(v)-5 b(alue)25 b(of)f Fz(srand)f FB(is)h(the)h(previous)f(seed.)38 b(This)24 b(mak)m(es)h(it)g(easy)g (to)g(k)m(eep)g(trac)m(k)630 2441 y(of)38 b(the)h(seeds)f(in)g(case)i (y)m(ou)e(need)g(to)i(consisten)m(tly)f(repro)s(duce)f(sequences)g(of)h (random)630 2551 y(n)m(um)m(b)s(ers.)150 2756 y Fj(8.1.3)63 b(String-Manipulation)42 b(F)-10 b(unctions)150 2903 y FB(The)34 b(functions)h(in)f(this)h(section)h(lo)s(ok)g(at)f(or)g(c)m (hange)h(the)f(text)h(of)f(one)g(or)g(more)g(strings.)55 b(Optional)150 3013 y(parameters)34 b(are)f(enclosed)h(in)f(square)g (brac)m(k)m(ets)f(\([)f(]\).)j(Those)f(functions)g(that)h(are)g(sp)s (eci\014c)f(to)h Fz(gawk)150 3123 y FB(are)d(mark)m(ed)f(with)g(a)h(p)s (ound)d(sign)j(\(`)p Fz(#)p FB('\):)150 3292 y Fz(asort\()p Fk(source)38 b FB([)p Fz(,)30 b Fk(dest)11 b FB(])p Fz(\))29 b(#)630 3402 y(asort)40 b FB(is)h(a)h Fz(gawk)p FB(-sp)s(eci\014c)f (extension,)k(returning)40 b(the)i(n)m(um)m(b)s(er)e(of)i(elemen)m(ts)h (in)e(the)630 3511 y(arra)m(y)35 b Fx(source)p FB(.)52 b(The)34 b(con)m(ten)m(ts)i(of)f Fx(source)k FB(are)c(sorted)f(using)g Fz(gawk)p FB('s)f(normal)h(rules)g(for)630 3621 y(comparing)24 b(v)-5 b(alues)24 b(\(in)f(particular,)j Fz(IGNORECASE)20 b FB(a\013ects)25 b(the)f(sorting\))g(and)f(the)h(indices)630 3730 y(of)h(the)g(sorted)g(v)-5 b(alues)25 b(of)g Fx(source)30 b FB(are)25 b(replaced)h(with)e(sequen)m(tial)j(in)m(tegers)f(starting) f(with)630 3840 y(one.)42 b(If)30 b(the)h(optional)g(arra)m(y)g Fx(dest)i FB(is)e(sp)s(eci\014ed,)f(then)g Fx(source)36 b FB(is)30 b(duplicated)h(in)m(to)h Fx(dest)p FB(.)630 3950 y Fx(dest)39 b FB(is)e(then)f(sorted,)j(lea)m(ving)f(the)f (indices)g(of)g Fx(source)42 b FB(unc)m(hanged.)60 b(F)-8 b(or)38 b(example,)h(if)630 4059 y(the)31 b(con)m(ten)m(ts)h(of)e Fz(a)g FB(are)h(as)g(follo)m(ws:)870 4197 y Fz(a["last"])45 b(=)j("de")870 4307 y(a["first"])d(=)i("sac")870 4416 y(a["middle"])e(=)i("cul")630 4554 y FB(A)30 b(call)i(to)f Fz(asort)p FB(:)870 4692 y Fz(asort\(a\))630 4830 y FB(results)f(in)g (the)h(follo)m(wing)h(con)m(ten)m(ts)g(of)e Fz(a)p FB(:)870 4967 y Fz(a[1])47 b(=)g("cul")p 150 5066 1200 4 v 199 5134 a Fo(2)275 5166 y Fn(Computer-generated)38 b(random)g(n)n(um)n(b)r (ers)f(really)h(are)h(not)e(truly)h(random.)71 b(They)37 b(are)i(tec)n(hnically)f(kno)n(wn)f(as)275 5253 y(\\pseudorandom.")45 b(This)29 b(means)g(that)g(while)h(the)e(n)n(um)n(b)r(ers)h(in)f(a)i (sequence)e(app)r(ear)i(to)f(b)r(e)g(random,)h(y)n(ou)e(can)h(in)275 5340 y(fact)d(generate)g(the)g(same)g(sequence)g(of)g(random)g(n)n(um)n (b)r(ers)f(o)n(v)n(er)g(and)g(o)n(v)n(er)h(again.)p eop end %%Page: 130 142 TeXDict begin 130 141 bop 150 -116 a FB(130)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)870 299 y Fz(a[2])47 b(=)g("de")870 408 y(a[3])g(=)g("sac")630 543 y FB(The)33 b Fz(asort)f FB(function)h(is)h(describ)s(ed)e(in)i (more)f(detail)i(in)e(Section)i(7.11)g([Sorting)f(Arra)m(y)630 653 y(V)-8 b(alues)35 b(and)e(Indices)h(with)f Fz(gawk)p FB(],)h(page)h(124.)52 b Fz(asort)32 b FB(is)i(a)g Fz(gawk)f FB(extension;)j(it)f(is)f(not)630 763 y(a)m(v)-5 b(ailable)47 b(in)e(compatibilit)m(y)i(mo)s(de)d(\(see)i(Section)f(11.2)i ([Command-Line)d(Options],)630 872 y(page)31 b(173\).)150 1032 y Fz(asorti\()p Fk(source)37 b FB([)p Fz(,)31 b Fk(dest)11 b FB(])p Fz(\))28 b(#)630 1142 y(asorti)35 b FB(is)j(a)f Fz(gawk)p FB(-sp)s(eci\014c)g(extension,)i(returning)e (the)g(n)m(um)m(b)s(er)f(of)h(elemen)m(ts)i(in)e(the)630 1251 y(arra)m(y)44 b Fx(source)p FB(.)80 b(It)43 b(w)m(orks)h (similarly)g(to)g Fz(asort)p FB(,)i(ho)m(w)m(ev)m(er,)i(the)43 b Fw(indic)-5 b(es)52 b FB(are)44 b(sorted,)630 1361 y(instead)i(of)f(the)h(v)-5 b(alues.)87 b(As)45 b(arra)m(y)h(indices)g (are)g(alw)m(a)m(ys)h(strings,)i(the)d(comparison)630 1471 y(p)s(erformed)37 b(is)i(alw)m(a)m(ys)i(a)e(string)g(comparison.) 66 b(\(Here)40 b(to)s(o,)h Fz(IGNORECASE)36 b FB(a\013ects)41 b(the)630 1580 y(sorting.\))630 1715 y(The)29 b Fz(asorti)f FB(function)h(is)h(describ)s(ed)e(in)i(more)f(detail)i(in)e(Section)i (7.11)g([Sorting)f(Arra)m(y)630 1825 y(V)-8 b(alues)34 b(and)f(Indices)g(with)g Fz(gawk)p FB(],)g(page)h(124.)50 b(It)34 b(w)m(as)f(added)g(in)g Fz(gawk)f FB(3.1.2.)51 b Fz(asorti)630 1934 y FB(is)32 b(a)g Fz(gawk)e FB(extension;)k(it)e (is)g(not)g(a)m(v)-5 b(ailable)34 b(in)d(compatibilit)m(y)j(mo)s(de)d (\(see)i(Section)f(11.2)630 2044 y([Command-Line)e(Options],)g(page)h (173\).)150 2204 y Fz(index\()p Fk(in)p Fz(,)d Fk(find)11 b Fz(\))630 2314 y FB(This)36 b(searc)m(hes)i(the)f(string)g Fx(in)g FB(for)g(the)g(\014rst)f(o)s(ccurrence)i(of)f(the)g(string)g Fx(\014nd)p FB(,)g(and)g(re-)630 2423 y(turns)31 b(the)i(p)s(osition)f (in)g(c)m(haracters)i(where)e(that)h(o)s(ccurrence)g(b)s(egins)f(in)g (the)h(string)f Fx(in)p FB(.)630 2533 y(Consider)e(the)g(follo)m(wing)i (example:)870 2668 y Fz($)47 b(awk)g('BEGIN)f({)i(print)e (index\("peanut",)e("an"\))i(}')890 2781 y Fy(a)1013 2777 y Fz(3)630 2912 y FB(If)30 b Fx(\014nd)j FB(is)e(not)g(found,)e Fz(index)h FB(returns)f(zero.)43 b(\(Remem)m(b)s(er)31 b(that)g(string)g(indices)f(in)h Fz(awk)630 3022 y FB(start)g(at)g (one.\))150 3182 y Fz(length\()p FB([)p Fk(string)11 b FB(])p Fz(\))630 3292 y FB(This)41 b(returns)f(the)h(n)m(um)m(b)s(er) f(of)i(c)m(haracters)h(in)e Fx(string)p FB(.)73 b(If)41 b Fx(string)49 b FB(is)42 b(a)g(n)m(um)m(b)s(er,)h(the)630 3401 y(length)35 b(of)h(the)f(digit)g(string)g(represen)m(ting)h(that)f (n)m(um)m(b)s(er)f(is)h(returned.)53 b(F)-8 b(or)36 b(example,)630 3511 y Fz(length\("abcde"\))29 b FB(is)k(5.)48 b(By)33 b(con)m(trast,)i Fz(length\(15)28 b(*)i(35\))i FB(w)m(orks)h(out)g(to)g (3.)49 b(In)32 b(this)630 3620 y(example,)h(15)g(*)f(35)h(=)e(525,)j (and)e(525)h(is)f(then)f(con)m(v)m(erted)j(to)e(the)g(string)g Fz("525")p FB(,)f(whic)m(h)630 3730 y(has)f(three)h(c)m(haracters.)630 3865 y(If)f(no)g(argumen)m(t)h(is)f(supplied,)g Fz(length)e FB(returns)i(the)g(length)h(of)f Fz($0)p FB(.)870 4000 y Fr(NOTE:)22 b FB(In)g(older)g(v)m(ersions)h(of)f Fz(awk)p FB(,)h(the)g Fz(length)d FB(function)i(could)g(b)s(e)g(called)870 4109 y(without)37 b(an)m(y)h(paren)m(theses.)61 b(Doing)38 b(so)g(is)f(mark)m(ed)g(as)h(\\deprecated")g(in)870 4219 y(the)k(POSIX)e(standard.)73 b(This)40 b(means)h(that)h(while)g(a)f (program)g(can)h(do)870 4328 y(this,)37 b(it)e(is)h(a)f(feature)h(that) g(can)f(ev)m(en)m(tually)j(b)s(e)c(remo)m(v)m(ed)i(from)f(a)h(future) 870 4438 y(v)m(ersion)e(of)f(the)g(standard.)48 b(Therefore,)34 b(for)f(programs)g(to)g(b)s(e)g(maximally)870 4548 y(p)s(ortable,)e (alw)m(a)m(ys)h(supply)c(the)j(paren)m(theses.)630 4682 y(Beginning)26 b(with)f Fz(gawk)f FB(v)m(ersion)i(3.2,)i(when)d (supplied)f(an)h(arra)m(y)h(argumen)m(t,)h(the)f Fz(length)630 4792 y FB(function)33 b(returns)g(the)h(n)m(um)m(b)s(er)e(of)i(elemen)m (ts)h(in)e(the)h(arra)m(y)-8 b(.)52 b(This)33 b(is)g(less)h(useful)f (than)630 4902 y(it)j(migh)m(t)g(seem)f(at)h(\014rst,)g(as)g(the)f (arra)m(y)h(is)f(not)g(guaran)m(teed)i(to)f(b)s(e)e(indexed)h(from)g (one)630 5011 y(to)f(the)g(n)m(um)m(b)s(er)e(of)i(elemen)m(ts)h(in)e (it.)51 b(If)34 b(`)p Fz(--lint)p FB(')e(is)i(pro)m(vided)f(on)g(the)h (command)g(line)630 5121 y(\(see)27 b(Section)g(11.2)g([Command-Line)f (Options],)h(page)f(173\),)j Fz(gawk)c FB(w)m(arns)h(that)g(passing)630 5230 y(an)41 b(arra)m(y)g(argumen)m(t)g(is)f(not)h(p)s(ortable.)72 b(If)40 b(`)p Fz(--posix)p FB(')f(is)i(supplied,)h(using)e(an)g(arra)m (y)630 5340 y(argumen)m(t)31 b(is)f(a)h(fatal)h(error)e(\(see)h (Chapter)f(7)g([Arra)m(ys)h(in)f Fz(awk)p FB(],)g(page)h(116\).)p eop end %%Page: 131 143 TeXDict begin 131 142 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(131)150 299 y Fz(match\()p Fk(string)p Fz(,)27 b Fk(regexp)39 b FB([)p Fz(,)30 b Fk(array)11 b FB(])p Fz(\))630 408 y FB(The)28 b Fz(match)e FB(function)i(searc)m(hes)h Fx(string)36 b FB(for)28 b(the)g(longest,)i(leftmost)f(substring)e(matc)m(hed)630 518 y(b)m(y)34 b(the)g(regular)h(expression,)g Fx(regexp)p FB(.)52 b(It)34 b(returns)f(the)h(c)m(haracter)i(p)s(osition,)f(or)f Fx(index)p FB(,)630 628 y(at)f(whic)m(h)g(that)g(substring)e(b)s(egins) h(\(one,)i(if)f(it)g(starts)g(at)g(the)g(b)s(eginning)e(of)i Fx(string)8 b FB(\).)47 b(If)630 737 y(no)30 b(matc)m(h)i(is)e(found,)f (it)i(returns)e(zero.)630 880 y(The)40 b Fx(regexp)j FB(argumen)m(t)d(ma)m(y)h(b)s(e)e(either)i(a)f(regexp)g(constan)m(t)i (\(`)p Fz(/...)o(/)p FB('\))f(or)f(a)g(string)630 989 y(constan)m(t)h(\()p Fz(")6 b Fx(.)22 b(.)g(.)11 b Fz(")p FB(\).)68 b(In)39 b(the)g(latter)i(case,)i(the)d(string)f(is)h(treated) g(as)g(a)g(regexp)f(to)i(b)s(e)630 1099 y(matc)m(hed.)f(Section)27 b(2.8)g([Using)f(Dynamic)g(Regexps],)i(page)f(34,)h(for)d(a)h (discussion)g(of)g(the)630 1208 y(di\013erence)d(b)s(et)m(w)m(een)h (the)f(t)m(w)m(o)i(forms,)f(and)e(the)h(implications)h(for)f(writing)g (y)m(our)g(program)630 1318 y(correctly)-8 b(.)630 1461 y(The)27 b(order)h(of)f(the)h(\014rst)f(t)m(w)m(o)i(argumen)m(ts)g(is)e (bac)m(kw)m(ards)h(from)g(most)g(other)g(string)g(func-)630 1570 y(tions)23 b(that)h(w)m(ork)f(with)g(regular)g(expressions,)h(suc) m(h)f(as)g Fz(sub)f FB(and)h Fz(gsub)p FB(.)37 b(It)23 b(migh)m(t)h(help)e(to)630 1680 y(remem)m(b)s(er)k(that)g(for)h Fz(match)p FB(,)e(the)i(order)f(is)g(the)g(same)h(as)g(for)f(the)g(`)p Fz(~)p FB(')g(op)s(erator:)39 b(`)p Fk(string)630 1789 y Fz(~)30 b Fk(regexp)11 b FB('.)630 1932 y(The)44 b Fz(match)f FB(function)g(sets)i(the)g(built-in)f(v)-5 b(ariable)45 b Fz(RSTART)d FB(to)j(the)g(index.)82 b(It)44 b(also)630 2041 y(sets)37 b(the)g(built-in)g(v)-5 b(ariable)37 b Fz(RLENGTH)e FB(to)j(the)e(length)i(in)e(c)m(haracters)i(of)f(the)g (matc)m(hed)630 2151 y(substring.)j(If)29 b(no)i(matc)m(h)g(is)f (found,)g Fz(RSTART)e FB(is)j(set)g(to)g(zero,)g(and)f Fz(RLENGTH)e FB(to)k Fy(\000)p FB(1.)630 2293 y(F)-8 b(or)31 b(example:)870 2436 y Fz({)1204 2545 y(if)47 b(\($1)g(==)g("FIND"\))1300 2655 y(regex)f(=)h($2)1204 2765 y(else)g({)1300 2874 y(where)f(=)h(match\($0,)f(regex\))1300 2984 y(if)h(\(where)f(!=)h(0\))1395 3093 y(print)f("Match)g(of",)h (regex,)f("found)g(at",)1872 3203 y(where,)g("in",)h($0)1204 3313 y(})870 3422 y(})630 3565 y FB(This)37 b(program)g(lo)s(oks)h(for) g(lines)g(that)g(matc)m(h)g(the)g(regular)g(expression)g(stored)f(in)h (the)630 3674 y(v)-5 b(ariable)32 b Fz(regex)p FB(.)41 b(This)30 b(regular)i(expression)f(can)g(b)s(e)f(c)m(hanged.)44 b(If)30 b(the)i(\014rst)e(w)m(ord)h(on)g(a)630 3784 y(line)g(is)f(`)p Fz(FIND)p FB(',)g Fz(regex)f FB(is)i(c)m(hanged)g(to)g(b)s(e)f(the)h (second)f(w)m(ord)g(on)h(that)g(line.)41 b(Therefore,)630 3893 y(if)30 b(giv)m(en:)870 4036 y Fz(FIND)47 b(ru+n)870 4145 y(My)g(program)f(runs)870 4255 y(but)h(not)g(very)f(quickly)870 4365 y(FIND)h(Melvin)870 4474 y(JF+KM)870 4584 y(This)g(line)f(is)h (property)f(of)h(Reality)f(Engineering)f(Co.)870 4693 y(Melvin)h(was)h(here.)630 4836 y(awk)29 b FB(prin)m(ts:)870 4978 y Fz(Match)46 b(of)i(ru+n)e(found)h(at)g(12)g(in)g(My)g(program)f (runs)870 5088 y(Match)g(of)i(Melvin)e(found)g(at)h(1)h(in)f(Melvin)f (was)h(here.)630 5230 y FB(If)38 b Fx(arra)m(y)47 b FB(is)38 b(presen)m(t,)j(it)e(is)f(cleared,)k(and)c(then)g(the)h(0th)f(elemen)m (t)i(of)f Fx(arra)m(y)47 b FB(is)38 b(set)h(to)630 5340 y(the)28 b(en)m(tire)h(p)s(ortion)e(of)i Fx(string)35 b FB(matc)m(hed)29 b(b)m(y)f Fx(regexp)p FB(.)40 b(If)27 b Fx(regexp)k FB(con)m(tains)e(paren)m(theses,)p eop end %%Page: 132 144 TeXDict begin 132 143 bop 150 -116 a FB(132)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)630 299 y FB(the)37 b(in)m(teger-indexed)g(elemen)m(ts)h(of)e Fx(arra)m(y)45 b FB(are)37 b(set)f(to)h(con)m(tain)h(the)f(p)s(ortion)e (of)i Fx(string)630 408 y FB(matc)m(hing)31 b(the)g(corresp)s(onding)e (paren)m(thesized)i(sub)s(expression.)39 b(F)-8 b(or)31 b(example:)870 535 y Fz($)47 b(echo)g(foooobazbarrrrr)d(|)870 645 y(>)j(gawk)g('{)g(match\($0,)f(/\(fo+\).+\(bar*\)/,)d(arr\))870 754 y(>)525 b(print)46 b(arr[1],)g(arr[2])g(}')890 868 y Fy(a)1013 864 y Fz(foooo)h(barrrrr)630 990 y FB(In)33 b(addition,)j(b)s(eginning)d(with)h Fz(gawk)f FB(3.1.2,)k(m)m (ultidimensional)e(subscripts)d(are)j(a)m(v)-5 b(ail-)630 1100 y(able)31 b(pro)m(viding)f(the)h(start)g(index)f(and)f(length)i (of)g(eac)m(h)g(matc)m(hed)g(sub)s(expression:)870 1226 y Fz($)47 b(echo)g(foooobazbarrrrr)d(|)870 1336 y(>)j(gawk)g('{)g (match\($0,)f(/\(fo+\).+\(bar*\)/,)d(arr\))870 1445 y(>)525 b(print)46 b(arr[1],)g(arr[2])870 1555 y(>)525 b(print)46 b(arr[1,)g("start"],)f(arr[1,)i("length"])870 1665 y(>)525 b(print)46 b(arr[2,)g("start"],)f(arr[2,)i("length"])870 1774 y(>)g(}')890 1888 y Fy(a)1013 1884 y Fz(foooo)g(barrrrr)890 1997 y Fy(a)1013 1993 y Fz(1)h(5)890 2107 y Fy(a)1013 2103 y Fz(9)g(7)630 2229 y FB(There)38 b(ma)m(y)h(not)f(b)s(e)g (subscripts)f(for)h(the)h(start)g(and)e(index)h(for)g(ev)m(ery)h(paren) m(thesized)630 2339 y(sub)s(expressions,)28 b(since)i(they)g(ma)m(y)g (not)g(all)h(ha)m(v)m(e)g(matc)m(hed)f(text;)i(th)m(us)d(they)h(should) f(b)s(e)630 2449 y(tested)24 b(for)g(with)f(the)g Fz(in)g FB(op)s(erator)h(\(see)h(Section)f(7.2)h([Referring)e(to)h(an)g(Arra)m (y)f(Elemen)m(t],)630 2558 y(page)31 b(117\).)630 2685 y(The)f Fx(arra)m(y)40 b FB(argumen)m(t)31 b(to)h Fz(match)e FB(is)h(a)g Fz(gawk)f FB(extension.)43 b(In)30 b(compatibilit)m(y)j(mo) s(de)e(\(see)630 2794 y(Section)i(11.2)h([Command-Line)e(Options],)h (page)g(173\),)i(using)d(a)h(third)e(argumen)m(t)i(is)g(a)630 2904 y(fatal)f(error.)150 3047 y Fz(split\()p Fk(string)p Fz(,)27 b Fk(array)39 b FB([)p Fz(,)30 b Fk(fieldsep)11 b FB(])p Fz(\))630 3157 y FB(This)40 b(function)g(divides)g Fx(string)49 b FB(in)m(to)41 b(pieces)h(separated)f(b)m(y)f Fx(\014eldsep)j FB(and)d(stores)h(the)630 3266 y(pieces)k(in)e Fx(arra)m(y)p FB(.)81 b(The)44 b(\014rst)f(piece)h(is)g(stored)g(in)f Fk(array)11 b Fz([1])p FB(,)45 b(the)f(second)g(piece)g(in)630 3376 y Fk(array)11 b Fz([2])p FB(,)31 b(and)h(so)h(forth.)48 b(The)32 b(string)h(v)-5 b(alue)33 b(of)g(the)g(third)f(argumen)m(t,)i Fx(\014eldsep)p FB(,)f(is)g(a)630 3485 y(regexp)c(describing)g(where)g (to)h(split)f Fx(string)37 b FB(\(m)m(uc)m(h)30 b(as)f Fz(FS)g FB(can)h(b)s(e)e(a)i(regexp)f(describing)630 3595 y(where)38 b(to)h(split)f(input)g(records\).)64 b(If)38 b Fx(\014eldsep)j FB(is)d(omitted,)k(the)c(v)-5 b(alue)39 b(of)f Fz(FS)g FB(is)g(used.)630 3705 y Fz(split)29 b FB(returns)g(the)i(n)m(um)m(b)s(er)e(of)h(elemen)m(ts)i(created.)630 3831 y(The)37 b Fz(split)g FB(function)g(splits)h(strings)g(in)m(to)h (pieces)f(in)g(a)g(manner)f(similar)h(to)h(the)f(w)m(a)m(y)630 3941 y(input)29 b(lines)i(are)g(split)f(in)m(to)i(\014elds.)40 b(F)-8 b(or)31 b(example:)870 4067 y Fz(split\("cul-de-sac",)43 b(a,)k("-"\))630 4194 y FB(splits)26 b(the)g(string)f(`)p Fz(cul-de-sac)p FB(')f(in)m(to)j(three)f(\014elds)f(using)g(`)p Fz(-)p FB(')h(as)g(the)g(separator.)40 b(It)26 b(sets)630 4303 y(the)31 b(con)m(ten)m(ts)h(of)e(the)h(arra)m(y)g Fz(a)f FB(as)g(follo)m(ws:)870 4430 y Fz(a[1])47 b(=)g("cul")870 4539 y(a[2])g(=)g("de")870 4649 y(a[3])g(=)g("sac")630 4775 y FB(The)30 b(v)-5 b(alue)31 b(returned)e(b)m(y)h(this)g(call)i (to)f Fz(split)e FB(is)i(three.)630 4902 y(As)25 b(with)g(input)g (\014eld-splitting,)i(when)d(the)i(v)-5 b(alue)26 b(of)f Fx(\014eldsep)i FB(is)f Fz(")k(")p FB(,)c(leading)g(and)f(trail-)630 5011 y(ing)e(whitespace)h(is)f(ignored,)i(and)e(the)g(elemen)m(ts)h (are)g(separated)f(b)m(y)g(runs)f(of)h(whitespace.)630 5121 y(Also)35 b(as)g(with)f(input)f(\014eld-splitting,)k(if)d Fx(\014eldsep)j FB(is)d(the)h(n)m(ull)f(string,)i(eac)m(h)g(individual) 630 5230 y(c)m(haracter)23 b(in)e(the)h(string)f(is)h(split)f(in)m(to)i (its)f(o)m(wn)f(arra)m(y)h(elemen)m(t.)40 b(\(This)21 b(is)g(a)h Fz(gawk)p FB(-sp)s(eci\014c)630 5340 y(extension.\))p eop end %%Page: 133 145 TeXDict begin 133 144 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(133)630 299 y(Note,)41 b(ho)m(w)m(ev)m(er,)g (that)e Fz(RS)e FB(has)g(no)h(e\013ect)h(on)f(the)g(w)m(a)m(y)g Fz(split)f FB(w)m(orks.)62 b(Ev)m(en)38 b(though)630 408 y(`)p Fz(RS)30 b(=)g("")p FB(')d(causes)i(newline)e(to)i(also)f(b)s (e)f(an)h(input)f(\014eld)g(separator,)i(this)f(do)s(es)f(not)h (a\013ect)630 518 y(ho)m(w)i Fz(split)f FB(splits)i(strings.)630 657 y(Mo)s(dern)j(implemen)m(tations)i(of)g Fz(awk)p FB(,)f(including)f Fz(gawk)p FB(,)h(allo)m(w)i(the)e(third)f(argumen)m (t)h(to)630 766 y(b)s(e)29 b(a)g(regexp)h(constan)m(t)g(\()p Fz(/abc/)p FB(\))f(as)g(w)m(ell)h(as)g(a)f(string.)80 b(The)29 b(POSIX)f(standard)h(allo)m(ws)237 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 630 876 a(this)37 b(as)h(w)m(ell.)63 b(Section)39 b(2.8)f([Using)g(Dynamic)g(Regexps],)j(page)d(34,)i(for)e(a)g (discussion)630 986 y(of)30 b(the)g(di\013erence)g(b)s(et)m(w)m(een)g (using)f(a)h(string)g(constan)m(t)h(or)e(a)h(regexp)g(constan)m(t,)i (and)d(the)630 1095 y(implications)j(for)e(writing)g(y)m(our)g(program) h(correctly)-8 b(.)630 1234 y(Before)39 b(splitting)g(the)f(string,)i Fz(split)d FB(deletes)i(an)m(y)f(previously)g(existing)h(elemen)m(ts)g (in)630 1344 y(the)31 b(arra)m(y)f Fx(arra)m(y)p FB(.)630 1482 y(If)f Fx(string)37 b FB(is)29 b(n)m(ull,)g(the)h(arra)m(y)g(has)e (no)h(elemen)m(ts.)42 b(\(So)30 b(this)f(is)g(a)g(p)s(ortable)h(w)m(a)m (y)g(to)g(delete)630 1592 y(an)35 b(en)m(tire)g(arra)m(y)h(with)e(one)h (statemen)m(t.)56 b(See)35 b(Section)g(7.6)h([The)f Fz(delete)e FB(Statemen)m(t],)630 1702 y(page)e(120.\))630 1840 y(If)e Fx(string)37 b FB(do)s(es)28 b(not)i(matc)m(h)g Fx(\014eldsep)h FB(at)f(all)g(\(but)f(is)g(not)h(n)m(ull\),)g Fx(arra)m(y)37 b FB(has)29 b(one)g(elemen)m(t)630 1950 y(only)-8 b(.)41 b(The)30 b(v)-5 b(alue)31 b(of)g(that)f(elemen)m(t)i(is)f(the)f (original)i Fx(string)p FB(.)150 2118 y Fz(sprintf\()p Fk(format)p Fz(,)26 b Fk(expression1)p Fz(,)h(...)o(\))630 2228 y FB(This)i(returns)f(\(without)i(prin)m(ting\))g(the)g(string)g (that)g Fz(printf)e FB(w)m(ould)i(ha)m(v)m(e)g(prin)m(ted)g(out)630 2337 y(with)25 b(the)g(same)g(argumen)m(ts)g(\(see)h(Section)g(4.5)g ([Using)f Fz(printf)f FB(Statemen)m(ts)i(for)f(F)-8 b(ancier)630 2447 y(Prin)m(ting],)31 b(page)g(60\).)42 b(F)-8 b(or)31 b(example:)870 2586 y Fz(pival)46 b(=)i(sprintf\("pi)d(=)i(\045.2f)g (\(approx.\)",)d(22/7\))630 2725 y FB(assigns)31 b(the)f(string)g Fz("pi)g(=)g(3.14)f(\(approx.\)")f FB(to)j(the)f(v)-5 b(ariable)32 b Fz(pival)p FB(.)150 2893 y Fz(strtonum\()p Fk(str)11 b Fz(\))26 b(#)630 3002 y FB(Examines)37 b Fx(str)43 b FB(and)36 b(returns)f(its)i(n)m(umeric)g(v)-5 b(alue.)60 b(If)36 b Fx(str)43 b FB(b)s(egins)36 b(with)g(a)h(leading)h (`)p Fz(0)p FB(',)630 3112 y Fz(strtonum)24 b FB(assumes)j(that)g Fx(str)33 b FB(is)27 b(an)f(o)s(ctal)j(n)m(um)m(b)s(er.)38 b(If)26 b Fx(str)33 b FB(b)s(egins)26 b(with)g(a)i(leading)f(`)p Fz(0x)p FB(')630 3221 y(or)j(`)p Fz(0X)p FB(',)h Fz(strtonum)d FB(assumes)i(that)h Fx(str)37 b FB(is)30 b(a)h(hexadecimal)g(n)m(um)m (b)s(er.)40 b(F)-8 b(or)31 b(example:)870 3360 y Fz($)47 b(echo)g(0x11)g(|)870 3470 y(>)g(gawk)g('{)g(printf)f("\045d\\n",)g (strtonum\($1\))f(}')890 3583 y Fy(a)1013 3579 y Fz(17)630 3718 y FB(Using)32 b(the)g Fz(strtonum)e FB(function)h(is)h Fw(not)41 b FB(the)32 b(same)g(as)h(adding)e(zero)i(to)f(a)g(string)g (v)-5 b(alue;)630 3828 y(the)31 b(automatic)i(co)s(ercion)f(of)f (strings)g(to)h(n)m(um)m(b)s(ers)e(w)m(orks)h(only)g(for)g(decimal)h (data,)g(not)630 3937 y(for)e(o)s(ctal)i(or)e(hexadecimal.)1616 3904 y Fo(3)630 4076 y FB(Note)f(also)g(that)f Fz(strtonum)e FB(uses)i(the)g(curren)m(t)f(lo)s(cale's)j(decimal)f(p)s(oin)m(t)f(for) f(recognizing)630 4186 y(n)m(um)m(b)s(ers.)630 4325 y Fz(strtonum)37 b FB(is)j(a)g Fz(gawk)f FB(extension;)45 b(it)40 b(is)g(not)g(a)m(v)-5 b(ailable)42 b(in)d(compatibilit)m(y)j (mo)s(de)d(\(see)630 4434 y(Section)31 b(11.2)h([Command-Line)e (Options],)g(page)i(173\).)150 4602 y Fz(sub\()p Fk(regexp)p Fz(,)27 b Fk(replacement)38 b FB([)p Fz(,)30 b Fk(target)11 b FB(])p Fz(\))630 4712 y FB(The)40 b Fz(sub)f FB(function)g(alters)i (the)g(v)-5 b(alue)40 b(of)g Fx(target)p FB(.)72 b(It)40 b(searc)m(hes)h(this)f(v)-5 b(alue,)43 b(whic)m(h)d(is)630 4821 y(treated)34 b(as)f(a)g(string,)h(for)f(the)g(leftmost,)i(longest) f(substring)e(matc)m(hed)i(b)m(y)f(the)g(regular)630 4931 y(expression)d Fx(regexp)p FB(.)41 b(Then)29 b(the)h(en)m(tire)i (string)e(is)g(c)m(hanged)h(b)m(y)f(replacing)h(the)f(matc)m(hed)630 5041 y(text)h(with)f Fx(replacemen)m(t)p FB(.)43 b(The)30 b(mo)s(di\014ed)f(string)h(b)s(ecomes)h(the)f(new)g(v)-5 b(alue)31 b(of)f Fx(target)p FB(.)p 150 5154 1200 4 v 199 5221 a Fo(3)275 5253 y Fn(Unless)25 b(y)n(ou)g(use)h(the)f(`)p Fm(--non-decimal-data)p Fn(')30 b(option,)c(whic)n(h)g(isn't)g (recommended.)34 b(See)26 b(Section)f(10.1)i([Allo)n(wing)275 5340 y(Nondecimal)f(Input)e(Data],)j(page)f(165,)h(for)f(more)h (information.)p eop end %%Page: 134 146 TeXDict begin 134 145 bop 150 -116 a FB(134)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)630 299 y FB(The)40 b Fx(regexp)j FB(argumen)m(t)d(ma)m(y)h(b)s(e)e(either) i(a)f(regexp)g(constan)m(t)i(\(`)p Fz(/...)o(/)p FB('\))f(or)f(a)g (string)630 408 y(constan)m(t)h(\()p Fz(")6 b Fx(.)22 b(.)g(.)11 b Fz(")p FB(\).)68 b(In)39 b(the)g(latter)i(case,)i(the)d (string)f(is)h(treated)g(as)g(a)g(regexp)f(to)i(b)s(e)630 518 y(matc)m(hed.)f(Section)27 b(2.8)g([Using)f(Dynamic)g(Regexps],)i (page)f(34,)h(for)d(a)h(discussion)g(of)g(the)630 628 y(di\013erence)d(b)s(et)m(w)m(een)h(the)f(t)m(w)m(o)i(forms,)f(and)e (the)h(implications)h(for)f(writing)g(y)m(our)g(program)630 737 y(correctly)-8 b(.)630 871 y(This)28 b(function)g(is)g(p)s(eculiar) h(b)s(ecause)f Fx(target)k FB(is)d(not)g(simply)f(used)f(to)j(compute)e (a)h(v)-5 b(alue,)630 981 y(and)21 b(not)g(just)f(an)m(y)i(expression)f (will)g(do|it)h(m)m(ust)f(b)s(e)f(a)i(v)-5 b(ariable,)24 b(\014eld,)f(or)e(arra)m(y)g(elemen)m(t)630 1090 y(so)30 b(that)g Fz(sub)f FB(can)h(store)h(a)f(mo)s(di\014ed)e(v)-5 b(alue)30 b(there.)41 b(If)29 b(this)h(argumen)m(t)g(is)g(omitted,)h (then)630 1200 y(the)g(default)f(is)h(to)g(use)f(and)f(alter)j Fz($0)p FB(.)1962 1167 y Fo(4)2039 1200 y FB(F)-8 b(or)31 b(example:)870 1334 y Fz(str)47 b(=)g("water,)f(water,)g(everywhere") 870 1443 y(sub\(/at/,)f("ith",)h(str\))630 1577 y FB(sets)36 b Fz(str)g FB(to)g Fz("wither,)28 b(water,)h(everywhere")m FB(,)38 b(b)m(y)e(replacing)g(the)h(leftmost)g(longest)630 1687 y(o)s(ccurrence)31 b(of)f(`)p Fz(at)p FB(')g(with)g(`)p Fz(ith)p FB('.)630 1821 y(The)23 b Fz(sub)g FB(function)g(returns)g (the)h(n)m(um)m(b)s(er)e(of)i(substitutions)f(made)h(\(either)h(one)f (or)g(zero\).)630 1954 y(If)41 b(the)h(sp)s(ecial)g(c)m(haracter)h(`)p Fz(&)p FB(')f(app)s(ears)e(in)i Fx(replacemen)m(t)p FB(,)k(it)c(stands) f(for)g(the)h(precise)630 2064 y(substring)25 b(that)h(w)m(as)g(matc)m (hed)h(b)m(y)e Fx(regexp)p FB(.)40 b(\(If)25 b(the)h(regexp)g(can)h (matc)m(h)f(more)g(than)g(one)630 2174 y(string,)31 b(then)f(this)g (precise)h(substring)e(ma)m(y)i(v)-5 b(ary)d(.\))41 b(F)-8 b(or)31 b(example:)870 2307 y Fz({)47 b(sub\(/candidate/,)d("&)j(and)g (his)g(wife"\);)f(print)g(})630 2441 y FB(c)m(hanges)c(the)g(\014rst)e (o)s(ccurrence)i(of)f(`)p Fz(candidate)p FB(')f(to)i(`)p Fz(candidate)28 b(and)h(his)h(wife)p FB(')40 b(on)630 2551 y(eac)m(h)32 b(input)d(line.)41 b(Here)31 b(is)f(another)h (example:)870 2685 y Fz($)47 b(awk)g('BEGIN)f({)870 2794 y(>)429 b(str)47 b(=)h("daabaaa")870 2904 y(>)429 b(sub\(/a+/,)46 b("C&C",)g(str\))870 3013 y(>)429 b(print)47 b(str)870 3123 y(>)g(}')890 3237 y Fy(a)1013 3233 y Fz(dCaaCbaaa)630 3366 y FB(This)31 b(sho)m(ws)h(ho)m(w)g(`)p Fz(&)p FB(')h(can)f (represen)m(t)g(a)h(nonconstan)m(t)g(string)f(and)f(also)j(illustrates) f(the)630 3476 y(\\leftmost,)38 b(longest")f(rule)e(in)g(regexp)h(matc) m(hing)g(\(see)g(Section)g(2.7)h([Ho)m(w)f(Muc)m(h)f(T)-8 b(ext)630 3586 y(Matc)m(hes?],)33 b(page)e(33\).)630 3719 y(The)23 b(e\013ect)j(of)e(this)f(sp)s(ecial)i(c)m(haracter)g(\(`) p Fz(&)p FB('\))g(can)f(b)s(e)f(turned)g(o\013)h(b)m(y)f(putting)h(a)g (bac)m(kslash)630 3829 y(b)s(efore)j(it)g(in)g(the)g(string.)40 b(As)27 b(usual,)g(to)h(insert)f(one)g(bac)m(kslash)h(in)f(the)g (string,)h(y)m(ou)f(m)m(ust)630 3939 y(write)33 b(t)m(w)m(o)g(bac)m (kslashes.)48 b(Therefore,)33 b(write)f(`)p Fz(\\\\&)p FB(')g(in)h(a)f(string)h(constan)m(t)g(to)g(include)g(a)630 4048 y(literal)f(`)p Fz(&)p FB(')e(in)g(the)g(replacemen)m(t.)43 b(F)-8 b(or)31 b(example,)g(the)f(follo)m(wing)i(sho)m(ws)e(ho)m(w)g (to)h(replace)630 4158 y(the)g(\014rst)e(`)p Fz(|)p FB(')i(on)f(eac)m (h)i(line)e(with)g(an)h(`)p Fz(&)p FB(':)870 4292 y Fz({)47 b(sub\(/\\|/,)f("\\\\&"\);)g(print)g(})630 4425 y FB(As)40 b(men)m(tioned,)k(the)d(third)e(argumen)m(t)i(to)g Fz(sub)f FB(m)m(ust)g(b)s(e)g(a)h(v)-5 b(ariable,)44 b(\014eld)c(or)g(arra)m(y) 630 4535 y(reference.)51 b(Some)33 b(v)m(ersions)h(of)g Fz(awk)e FB(allo)m(w)j(the)f(third)f(argumen)m(t)h(to)g(b)s(e)f(an)g (expression)630 4645 y(that)41 b(is)f(not)g(an)g(lv)-5 b(alue.)71 b(In)39 b(suc)m(h)h(a)g(case,)k Fz(sub)39 b FB(still)i(searc)m(hes)g(for)f(the)g(pattern)h(and)630 4754 y(returns)32 b(zero)i(or)g(one,)g(but)f(the)h(result)f(of)g(the)h (substitution)f(\(if)h(an)m(y\))g(is)f(thro)m(wn)g(a)m(w)m(a)m(y)630 4864 y(b)s(ecause)25 b(there)g(is)f(no)h(place)g(to)h(put)e(it.)39 b(Suc)m(h)24 b(v)m(ersions)h(of)g Fz(awk)f FB(accept)i(expressions)e (suc)m(h)630 4973 y(as)31 b(the)f(follo)m(wing:)p 150 5066 1200 4 v 199 5134 a Fo(4)275 5166 y Fn(Note)e(that)g(this)h(means) g(that)g(the)f(record)h(will)h(\014rst)e(b)r(e)h(regenerated)g(using)g (the)f(v)l(alue)h(of)g Fm(OFS)g Fn(if)h(an)n(y)e(\014elds)h(ha)n(v)n(e) 275 5253 y(b)r(een)20 b(c)n(hanged,)j(and)e(that)g(the)f(\014elds)i (will)g(b)r(e)f(up)r(dated)g(after)h(the)e(substituion,)j(ev)n(en)d(if) i(the)f(op)r(eration)h(is)g(a)f(\\no-op")275 5340 y(suc)n(h)k(as)h(`)p Fm(sub\(/^/,)i(""\))p Fn('.)p eop end %%Page: 135 147 TeXDict begin 135 146 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(135)870 299 y Fz(sub\(/USA/,)45 b("United)h(States",)f("the)i(USA)g(and)g(Canada"\))630 432 y FB(F)-8 b(or)37 b(historical)h(compatibilit)m(y)-8 b(,)40 b Fz(gawk)35 b FB(accepts)j(erroneous)e(co)s(de,)i(suc)m(h)e(as) h(in)f(the)g(pre-)630 542 y(vious)j(example.)67 b(Ho)m(w)m(ev)m(er,)43 b(using)c(an)m(y)g(other)g(nonc)m(hangeable)i(ob)5 b(ject)39 b(as)h(the)f(third)630 651 y(parameter)31 b(causes)g(a)f(fatal)i(error) e(and)g(y)m(our)g(program)g(will)h(not)g(run.)630 784 y(Finally)-8 b(,)30 b(if)e(the)g Fx(regexp)j FB(is)d(not)g(a)g(regexp)g (constan)m(t,)i(it)f(is)e(con)m(v)m(erted)j(in)m(to)f(a)f(string,)h (and)630 894 y(then)h(the)h(v)-5 b(alue)30 b(of)h(that)g(string)f(is)h (treated)g(as)g(the)f(regexp)h(to)g(matc)m(h.)150 1050 y Fz(gsub\()p Fk(regexp)p Fz(,)c Fk(replacement)38 b FB([)p Fz(,)30 b Fk(target)11 b FB(])p Fz(\))630 1160 y FB(This)41 b(is)g(similar)h(to)h(the)e Fz(sub)g FB(function,)j (except)f Fz(gsub)d FB(replaces)j Fw(al)5 b(l)51 b FB(of)42 b(the)f(longest,)630 1270 y(leftmost,)24 b Fw(nonoverlapping)32 b FB(matc)m(hing)22 b(substrings)e(it)i(can)f(\014nd.)36 b(The)21 b(`)p Fz(g)p FB(')g(in)g Fz(gsub)e FB(stands)630 1379 y(for)30 b(\\global,")j(whic)m(h)d(means)g(replace)i(ev)m (erywhere.)41 b(F)-8 b(or)31 b(example:)870 1512 y Fz({)47 b(gsub\(/Britain/,)d("United)i(Kingdom"\);)f(print)h(})630 1645 y FB(replaces)37 b(all)f(o)s(ccurrences)g(of)g(the)g(string)g(`)p Fz(Britain)p FB(')e(with)i(`)p Fz(United)28 b(Kingdom)p FB(')34 b(for)i(all)630 1755 y(input)29 b(records.)630 1888 y(The)d Fz(gsub)g FB(function)h(returns)f(the)h(n)m(um)m(b)s(er)e (of)j(substitutions)e(made.)40 b(If)26 b(the)h(v)-5 b(ariable)28 b(to)630 1998 y(searc)m(h)33 b(and)f(alter)i(\()p Fx(target)r FB(\))h(is)d(omitted,)j(then)d(the)h(en)m(tire)g(input)f(record)g(\()p Fz($0)p FB(\))h(is)f(used.)630 2107 y(As)g(in)f Fz(sub)p FB(,)h(the)g(c)m(haracters)i(`)p Fz(&)p FB(')e(and)f(`)p Fz(\\)p FB(')h(are)g(sp)s(ecial,)h(and)f(the)g(third)f(argumen)m(t)h(m) m(ust)630 2217 y(b)s(e)e(assignable.)150 2373 y Fz(gensub\()p Fk(regexp)p Fz(,)c Fk(replacement)p Fz(,)i Fk(how)40 b FB([)p Fz(,)30 b Fk(target)11 b FB(])p Fz(\))28 b(#)630 2483 y(gensub)33 b FB(is)i(a)g(general)g(substitution)g(function.)53 b(Lik)m(e)35 b Fz(sub)f FB(and)g Fz(gsub)p FB(,)h(it)g(searc)m(hes)h (the)630 2592 y(target)h(string)f Fx(target)k FB(for)35 b(matc)m(hes)i(of)g(the)f(regular)g(expression)f Fx(regexp)p FB(.)58 b(Unlik)m(e)37 b Fz(sub)630 2702 y FB(and)30 b Fz(gsub)p FB(,)h(the)g(mo)s(di\014ed)f(string)h(is)g(returned)f(as)h (the)g(result)g(of)g(the)h(function)e(and)h(the)630 2812 y(original)36 b(target)h(string)e(is)g Fw(not)44 b FB(c)m(hanged.)55 b(If)35 b Fx(ho)m(w)42 b FB(is)36 b(a)f(string)g(b)s(eginning)f(with)h (`)p Fz(g)p FB(')g(or)630 2921 y(`)p Fz(G)p FB(',)k(then)d(it)h (replaces)h(all)f(matc)m(hes)h(of)f Fx(regexp)i FB(with)e Fx(replacemen)m(t)p FB(.)61 b(Otherwise,)38 b Fx(ho)m(w)630 3031 y FB(is)33 b(treated)i(as)e(a)h(n)m(um)m(b)s(er)e(that)i (indicates)g(whic)m(h)f(matc)m(h)h(of)f Fx(regexp)k FB(to)d(replace.)50 b(If)33 b(no)630 3140 y Fx(target)h FB(is)c(supplied,)g Fz($0)f FB(is)i(used.)630 3273 y Fz(gensub)c FB(pro)m(vides)j(an)f (additional)h(feature)f(that)h(is)f(not)h(a)m(v)-5 b(ailable)31 b(in)e Fz(sub)g FB(or)g Fz(gsub)p FB(:)39 b(the)630 3383 y(abilit)m(y)30 b(to)f(sp)s(ecify)f(comp)s(onen)m(ts)g(of)g(a)h(regexp) f(in)g(the)h(replacemen)m(t)g(text.)41 b(This)28 b(is)g(done)630 3493 y(b)m(y)d(using)f(paren)m(theses)i(in)e(the)h(regexp)h(to)f(mark)g (the)g(comp)s(onen)m(ts)g(and)f(then)h(sp)s(ecifying)630 3602 y(`)p Fz(\\)p Fk(N)11 b FB(')30 b(in)g(the)g(replacemen)m(t)i (text,)g(where)e Fx(N)40 b FB(is)31 b(a)f(digit)h(from)f(1)h(to)g(9.)41 b(F)-8 b(or)31 b(example:)870 3735 y Fz($)47 b(gawk)g(')870 3845 y(>)g(BEGIN)g({)870 3954 y(>)286 b(a)48 b(=)f("abc)g(def")870 4064 y(>)286 b(b)48 b(=)f(gensub\(/\(.+\))d(\(.+\)/,)j("\\\\2)f (\\\\1",)h("g",)f(a\))870 4174 y(>)286 b(print)46 b(b)870 4283 y(>)h(}')890 4397 y Fy(a)1013 4393 y Fz(def)g(abc)630 4526 y FB(As)27 b(with)h Fz(sub)p FB(,)f(y)m(ou)h(m)m(ust)f(t)m(yp)s(e) h(t)m(w)m(o)h(bac)m(kslashes)f(in)g(order)f(to)h(get)h(one)f(in)m(to)g (the)g(string.)630 4635 y(In)k(the)h(replacemen)m(t)h(text,)h(the)e (sequence)g(`)p Fz(\\0)p FB(')g(represen)m(ts)f(the)h(en)m(tire)h(matc) m(hed)g(text,)630 4745 y(as)d(do)s(es)f(the)g(c)m(haracter)i(`)p Fz(&)p FB('.)630 4878 y(The)k(follo)m(wing)h(example)g(sho)m(ws)f(ho)m (w)g(y)m(ou)h(can)f(use)g(the)h(third)e(argumen)m(t)i(to)f(con)m(trol) 630 4988 y(whic)m(h)30 b(matc)m(h)h(of)g(the)f(regexp)h(should)e(b)s(e) h(c)m(hanged:)870 5121 y Fz($)47 b(echo)g(a)h(b)f(c)g(a)h(b)f(c)h(|)870 5230 y(>)f(gawk)g('{)g(print)g(gensub\(/a/,)d("AA",)j(2\))g(}')890 5344 y Fy(a)1013 5340 y Fz(a)h(b)f(c)h(AA)f(b)g(c)p eop end %%Page: 136 148 TeXDict begin 136 147 bop 150 -116 a FB(136)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)630 299 y FB(In)36 b(this)h(case,)j Fz($0)c FB(is)h(used)g(as)g(the)g (default)g(target)i(string.)60 b Fz(gensub)36 b FB(returns)f(the)i(new) 630 408 y(string)30 b(as)h(its)g(result,)f(whic)m(h)g(is)h(passed)f (directly)h(to)g Fz(print)e FB(for)h(prin)m(ting.)630 547 y(If)g(the)i Fx(ho)m(w)38 b FB(argumen)m(t)32 b(is)f(a)g(string)g (that)h(do)s(es)e(not)h(b)s(egin)g(with)g(`)p Fz(g)p FB(')g(or)g(`)p Fz(G)p FB(',)g(or)g(if)g(it)h(is)f(a)630 657 y(n)m(um)m(b)s(er)i(that)h(is)g(less)g(than)g(or)g(equal)h(to)f (zero,)i(only)e(one)h(substitution)e(is)h(p)s(erformed.)630 766 y(If)c Fx(ho)m(w)38 b FB(is)31 b(zero,)g Fz(gawk)e FB(issues)h(a)h(w)m(arning)f(message.)630 905 y(If)22 b Fx(regexp)k FB(do)s(es)d(not)g(matc)m(h)h Fx(target)p FB(,)i Fz(gensub)p FB('s)21 b(return)h(v)-5 b(alue)23 b(is)g(the)g(original)h(unc)m(hanged)630 1014 y(v)-5 b(alue)31 b(of)f Fx(target)p FB(.)630 1153 y Fz(gensub)g FB(is)i(a)g Fz(gawk)f FB(extension;)i(it)g(is)e(not)i(a)m(v)-5 b(ailable)34 b(in)d(compatibilit)m(y)j(mo)s(de)e(\(see)g(Sec-)630 1263 y(tion)f(11.2)h([Command-Line)e(Options],)g(page)h(173\).)150 1430 y Fz(substr\()p Fk(string)p Fz(,)26 b Fk(start)40 b FB([)p Fz(,)30 b Fk(length)11 b FB(])p Fz(\))630 1540 y FB(This)35 b(returns)g(a)h Fx(length)p FB(-c)m(haracter-long)j (substring)c(of)h Fx(string)p FB(,)i(starting)f(at)f(c)m(haracter)630 1649 y(n)m(um)m(b)s(er)i Fx(start)p FB(.)66 b(The)38 b(\014rst)g(c)m(haracter)j(of)e(a)g(string)g(is)g(c)m(haracter)h(n)m (um)m(b)s(er)e(one.)3514 1616 y Fo(5)3617 1649 y FB(F)-8 b(or)630 1759 y(example,)31 b Fz(substr\("washington",)25 b(5,)30 b(3\))g FB(returns)f Fz("ing")p FB(.)630 1898 y(If)39 b Fx(length)h FB(is)f(not)g(presen)m(t,)j(this)d(function)g (returns)g(the)g(whole)g(su\016x)g(of)g Fx(string)47 b FB(that)630 2007 y(b)s(egins)c(at)h(c)m(haracter)h(n)m(um)m(b)s(er)e Fx(start)p FB(.)81 b(F)-8 b(or)44 b(example,)k Fz (substr\("washington",)25 b(5\))630 2117 y FB(returns)35 b Fz("ington")p FB(.)58 b(The)36 b(whole)h(su\016x)e(is)i(also)h (returned)d(if)i Fx(length)g FB(is)f(greater)i(than)630 2226 y(the)24 b(n)m(um)m(b)s(er)f(of)h(c)m(haracters)h(remaining)f(in)f (the)h(string,)i(coun)m(ting)e(from)g(c)m(haracter)h Fx(start)p FB(.)630 2365 y(If)d Fx(start)j FB(is)e(less)f(than)h(one,)h Fz(substr)d FB(treats)j(it)f(as)f(if)h(it)g(w)m(as)g(one.)38 b(\(POSIX)22 b(do)s(esn't)g(sp)s(ecify)630 2474 y(what)31 b(to)g(do)g(in)g(this)f(case:)43 b(Unix)31 b Fz(awk)f FB(acts)i(this)e(w)m(a)m(y)-8 b(,)33 b(and)d(therefore)h Fz(gawk)f FB(do)s(es)h(to)s(o.\))630 2584 y(If)h Fx(start)j FB(is)d(greater)i(than)e(the)g(n)m(um)m(b)s(er)f(of)i(c)m(haracters)h (in)e(the)g(string,)i Fz(substr)c FB(returns)630 2694 y(the)e(n)m(ull)g(string.)40 b(Similarly)-8 b(,)29 b(if)f Fx(length)g FB(is)g(presen)m(t)g(but)f(less)h(than)g(or)f(equal)i(to)f (zero,)i(the)630 2803 y(n)m(ull)g(string)h(is)f(returned.)630 2942 y(The)37 b(string)h(returned)f(b)m(y)h Fz(substr)e Fw(c)-5 b(annot)48 b FB(b)s(e)37 b(assigned.)63 b(Th)m(us,)39 b(it)g(is)f(a)g(mistak)m(e)h(to)630 3051 y(attempt)31 b(to)h(c)m(hange)f(a)g(p)s(ortion)f(of)g(a)h(string,)g(as)f(sho)m(wn)g (in)g(the)h(follo)m(wing)h(example:)870 3190 y Fz(string)46 b(=)i("abcdef")870 3300 y(#)f(try)g(to)h(get)e("abCDEf",)g(won't)g (work)870 3409 y(substr\(string,)e(3,)j(3\))g(=)h("CDE")630 3548 y FB(It)30 b(is)h(also)g(a)g(mistak)m(e)h(to)f(use)f Fz(substr)f FB(as)h(the)h(third)e(argumen)m(t)i(of)g Fz(sub)e FB(or)i Fz(gsub)p FB(:)870 3686 y Fz(gsub\(/xyz/,)45 b("pdq",)h(substr\($0,)f(5,)i(20\)\))94 b(#)48 b(WRONG)630 3825 y FB(\(Some)33 b(commercial)i(v)m(ersions)e(of)g Fz(awk)f FB(do)h(in)g(fact)h(let)f(y)m(ou)h(use)e Fz(substr)g FB(this)g(w)m(a)m(y)-8 b(,)36 b(but)630 3934 y(doing)30 b(so)h(is)g(not)f(p)s(ortable.\))630 4073 y(If)j(y)m(ou)g(need)g(to)h (replace)g(bits)e(and)h(pieces)h(of)f(a)g(string,)h(com)m(bine)g Fz(substr)d FB(with)i(string)630 4183 y(concatenation,)g(in)d(the)h (follo)m(wing)h(manner:)870 4321 y Fz(string)46 b(=)i("abcdef")870 4431 y(...)870 4540 y(string)e(=)i(substr\(string,)43 b(1,)48 b(2\))f("CDE")f(substr\(string,)e(6\))150 4708 y(tolower\()p Fk(string)11 b Fz(\))630 4818 y FB(This)34 b(returns)h(a)g(cop)m(y)h(of)g Fx(string)p FB(,)g(with)f(eac)m(h)i(upp) s(ercase)d(c)m(haracter)j(in)e(the)g(string)h(re-)630 4927 y(placed)k(with)e(its)i(corresp)s(onding)e(lo)m(w)m(ercase)j(c)m (haracter.)69 b(Nonalphab)s(etic)39 b(c)m(haracters)630 5037 y(are)29 b(left)g(unc)m(hanged.)40 b(F)-8 b(or)29 b(example,)h Fz(tolower\("MiXeD)c(cAsE)j(123"\))e FB(returns)h Fz("mixed)630 5146 y(case)h(123")p FB(.)p 150 5241 1200 4 v 199 5308 a Fo(5)275 5340 y Fn(This)d(is)g(di\013eren)n(t)f(from)i (C)f(and)f(C)p Fm(++)p Fn(,)i(in)f(whic)n(h)f(the)h(\014rst)f(c)n (haracter)h(is)h(n)n(um)n(b)r(er)d(zero.)p eop end %%Page: 137 149 TeXDict begin 137 148 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(137)150 299 y Fz(toupper\()p Fk(string)11 b Fz(\))630 408 y FB(This)36 b(returns)g(a)h(cop)m(y)h(of) f Fx(string)p FB(,)i(with)e(eac)m(h)h(lo)m(w)m(ercase)h(c)m(haracter)g (in)e(the)g(string)g(re-)630 518 y(placed)g(with)f(its)h(corresp)s (onding)f(upp)s(ercase)f(c)m(haracter.)61 b(Nonalphab)s(etic)37 b(c)m(haracters)630 628 y(are)29 b(left)g(unc)m(hanged.)40 b(F)-8 b(or)29 b(example,)h Fz(toupper\("MiXeD)c(cAsE)j(123"\))e FB(returns)h Fz("MIXED)630 737 y(CASE)h(123")p FB(.)150 982 y Fj(8.1.3.1)63 b(More)42 b(Ab)s(out)f(`)p Fh(\\)p Fj(')h(and)e(`)p Fh(&)p Fj(')i(with)e Fh(sub)p Fj(,)i Fh(gsub)p Fj(,)f(and)g Fh(gensub)150 1129 y FB(When)c(using)g Fz(sub)p FB(,)i Fz(gsub)p FB(,)g(or)e Fz(gensub)p FB(,)h(and)f(trying)h (to)g(get)h(literal)g(bac)m(kslashes)g(and)e(amp)s(ersands)150 1239 y(in)m(to)k(the)f(replacemen)m(t)h(text,)j(y)m(ou)c(need)f(to)i (remem)m(b)s(er)e(that)i(there)f(are)g(sev)m(eral)h(lev)m(els)g(of)f Fx(escap)s(e)150 1349 y(pro)s(cessing)e FB(going)31 b(on.)275 1529 y(First,)40 b(there)e(is)g(the)h Fx(lexical)k FB(lev)m(el,)f(whic) m(h)c(is)g(when)f Fz(awk)g FB(reads)h(y)m(our)g(program)g(and)f(builds) g(an)150 1639 y(in)m(ternal)27 b(cop)m(y)g(of)g(it)g(that)f(can)h(b)s (e)f(executed.)40 b(Then)25 b(there)i(is)f(the)h(run)m(time)f(lev)m (el,)j(whic)m(h)d(is)g(when)g Fz(awk)150 1748 y FB(actually)32 b(scans)e(the)h(replacemen)m(t)h(string)e(to)h(determine)g(what)f(to)h (generate.)275 1929 y(A)m(t)d(b)s(oth)g(lev)m(els,)i Fz(awk)d FB(lo)s(oks)h(for)g(a)h(de\014ned)d(set)j(of)f(c)m(haracters)h (that)g(can)f(come)h(after)g(a)f(bac)m(kslash.)150 2038 y(A)m(t)c(the)f(lexical)h(lev)m(el,)j(it)c(lo)s(oks)g(for)g(the)g (escap)s(e)g(sequences)g(listed)h(in)e(Section)i(2.2)g([Escap)s(e)f (Sequences],)150 2148 y(page)33 b(25.)48 b(Th)m(us,)32 b(for)g(ev)m(ery)h(`)p Fz(\\)p FB(')g(that)g Fz(awk)f FB(pro)s(cesses)g(at)h(the)g(run)m(time)f(lev)m(el,)j(t)m(yp)s(e)d(t)m (w)m(o)i(bac)m(kslashes)150 2258 y(at)g(the)f(lexical)i(lev)m(el.)51 b(When)33 b(a)g(c)m(haracter)i(that)f(is)f(not)g(v)-5 b(alid)34 b(for)e(an)h(escap)s(e)h(sequence)g(follo)m(ws)g(the)150 2367 y(`)p Fz(\\)p FB(',)f(Unix)g Fz(awk)e FB(and)h Fz(gawk)f FB(b)s(oth)h(simply)g(remo)m(v)m(e)i(the)e(initial)i(`)p Fz(\\)p FB(')e(and)g(put)g(the)g(next)h(c)m(haracter)h(in)m(to)150 2477 y(the)d(string.)40 b(Th)m(us,)30 b(for)g(example,)h Fz("a\\qb")e FB(is)h(treated)i(as)e Fz("aqb")p FB(.)275 2657 y(A)m(t)38 b(the)f(run)m(time)g(lev)m(el,)k(the)d(v)-5 b(arious)37 b(functions)g(handle)g(sequences)g(of)h(`)p Fz(\\)p FB(')f(and)g(`)p Fz(&)p FB(')h(di\013eren)m(tly)-8 b(.)150 2767 y(The)22 b(situation)i(is)e(\(sadly\))i(somewhat)f (complex.)39 b(Historically)-8 b(,)27 b(the)22 b Fz(sub)g FB(and)g Fz(gsub)g FB(functions)g(treated)150 2876 y(the)31 b(t)m(w)m(o)h(c)m(haracter)g(sequence)f(`)p Fz(\\&)p FB(')g(sp)s(ecially;)g(this)g(sequence)g(w)m(as)g(replaced)g(in)f(the)h (generated)h(text)150 2986 y(with)i(a)g(single)h(`)p Fz(&)p FB('.)51 b(An)m(y)34 b(other)g(`)p Fz(\\)p FB(')g(within)g(the)g Fx(replacemen)m(t)j FB(string)d(that)h(did)e(not)h(precede)g(an)g(`)p Fz(&)p FB(')150 3096 y(w)m(as)d(passed)f(through)f(unc)m(hanged.)41 b(This)29 b(is)i(illustrated)g(in)f(T)-8 b(able)31 b(8.1.)150 3392 y(Y)-8 b(ou)31 b(t)m(yp)s(e)182 b Fz(sub)29 b FB(sees)183 b Fz(sub)29 b FB(generates)p 150 3501 362 4 v 693 3501 327 4 v 1201 3501 682 4 v 416 3611 a Fz(\\&)459 b(&)182 b FB(the)30 b(matc)m(hed)h(text)368 3721 y Fz(\\\\&)411 b(\\&)182 b FB(a)31 b(literal)g(`)p Fz(&)p FB(')320 3830 y Fz(\\\\\\&)411 b(\\&)182 b FB(a)31 b(literal)g(`)p Fz(&)p FB(')272 3940 y Fz(\\\\\\\\&)364 b(\\\\&)181 b FB(a)31 b(literal)g(`)p Fz(\\&)p FB(')225 4049 y Fz(\\\\\\\\\\&)363 b(\\\\&)181 b FB(a)31 b(literal)g(`)p Fz(\\&)p FB(')177 4159 y Fz(\\\\\\\\\\\\&)315 b(\\\\\\&)181 b FB(a)31 b(literal)g(`)p Fz(\\\\&)p FB(')368 4269 y Fz(\\\\q)411 b(\\q)182 b FB(a)31 b(literal)g(`)p Fz(\\q)p FB(')275 4535 y(T)-8 b(able)31 b(8.1:)41 b(Historical)33 b(Escap)s(e)d(Sequence)g(Pro)s(cessing)h(for) f(sub)f(and)h(gsub)150 4721 y(This)40 b(table)i(sho)m(ws)e(b)s(oth)g (the)h(lexical-lev)m(el)k(pro)s(cessing,)f(where)c(an)h(o)s(dd)e(n)m (um)m(b)s(er)h(of)h(bac)m(kslashes)150 4831 y(b)s(ecomes)36 b(an)f(ev)m(en)h(n)m(um)m(b)s(er)e(at)i(the)g(run)m(time)f(lev)m(el,)j (as)e(w)m(ell)g(as)g(the)g(run)m(time)f(pro)s(cessing)g(done)g(b)m(y) 150 4940 y Fz(sub)p FB(.)41 b(\(F)-8 b(or)32 b(the)f(sak)m(e)h(of)f (simplicit)m(y)-8 b(,)32 b(the)f(rest)g(of)g(the)g(follo)m(wing)h (tables)g(only)f(sho)m(w)g(the)f(case)i(of)f(ev)m(en)150 5050 y(n)m(um)m(b)s(ers)e(of)h(bac)m(kslashes)i(en)m(tered)f(at)g(the)f (lexical)j(lev)m(el.\))275 5230 y(The)40 b(problem)f(with)i(the)f (historical)i(approac)m(h)f(is)g(that)g(there)f(is)h(no)f(w)m(a)m(y)i (to)f(get)h(a)f(literal)h(`)p Fz(\\)p FB(')150 5340 y(follo)m(w)m(ed)32 b(b)m(y)e(the)h(matc)m(hed)g(text.)p eop end %%Page: 138 150 TeXDict begin 138 149 bop 150 -116 a FB(138)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(The)f(1992)j(POSIX)d(standard)g(attempted)j(to)e(\014x)g(this) g(problem.)40 b(That)30 b(standard)f(sa)m(ys)i(that)g Fz(sub)150 408 y FB(and)24 b Fz(gsub)g FB(lo)s(ok)i(for)e(either)i(a)f (`)p Fz(\\)p FB(')g(or)g(an)g(`)p Fz(&)p FB(')g(after)g(the)g(`)p Fz(\\)p FB('.)39 b(If)25 b(either)g(one)g(follo)m(ws)h(a)f(`)p Fz(\\)p FB(',)i(that)e(c)m(haracter)150 518 y(is)30 b(output)g (literally)-8 b(.)43 b(The)30 b(in)m(terpretation)i(of)e(`)p Fz(\\)p FB(')h(and)f(`)p Fz(&)p FB(')g(then)g(b)s(ecomes)h(as)g(sho)m (wn)e(in)h(T)-8 b(able)31 b(8.2.)150 814 y(Y)-8 b(ou)31 b(t)m(yp)s(e)182 b Fz(sub)29 b FB(sees)183 b Fz(sub)29 b FB(generates)p 150 924 362 4 v 693 924 327 4 v 1201 924 1382 4 v 463 1033 a Fz(&)460 b(&)182 b FB(the)30 b(matc)m(hed)h(text)368 1143 y Fz(\\\\&)411 b(\\&)182 b FB(a)31 b(literal)g(`)p Fz(&)p FB(')272 1253 y Fz(\\\\\\\\&)364 b(\\\\&)181 b FB(a)31 b(literal)g(`)p Fz(\\)p FB(',)g(then)f(the)h (matc)m(hed)g(text)177 1362 y Fz(\\\\\\\\\\\\&)315 b(\\\\\\&)181 b FB(a)31 b(literal)g(`)p Fz(\\&)p FB(')275 1616 y(T)-8 b(able)31 b(8.2:)41 b(1992)32 b(POSIX)e(Rules)g(for)g(sub)f(and)h(gsub) g(Escap)s(e)g(Sequence)h(Pro)s(cessing)150 1751 y(This)d(app)s(ears)g (to)i(solv)m(e)g(the)f(problem.)40 b(Unfortunately)-8 b(,)30 b(the)f(phrasing)f(of)h(the)g(standard)f(is)h(un)m(usual.)150 1861 y(It)k(sa)m(ys,)i(in)e(e\013ect,)i(that)f(`)p Fz(\\)p FB(')g(turns)d(o\013)j(the)f(sp)s(ecial)h(meaning)g(of)f(an)m(y)g (follo)m(wing)i(c)m(haracter,)h(but)c(for)150 1970 y(an)m(ything)i (other)f(than)g(`)p Fz(\\)p FB(')g(and)g(`)p Fz(&)p FB(',)h(suc)m(h)f (sp)s(ecial)g(meaning)h(is)f(unde\014ned.)46 b(This)33 b(w)m(ording)g(leads)g(to)150 2080 y(t)m(w)m(o)f(problems:)225 2209 y Fy(\017)60 b FB(Bac)m(kslashes)39 b(m)m(ust)e(no)m(w)h(b)s(e)e (doubled)h(in)f(the)i Fx(replacemen)m(t)j FB(string,)e(breaking)e (historical)i Fz(awk)330 2319 y FB(programs.)225 2448 y Fy(\017)60 b FB(T)-8 b(o)41 b(mak)m(e)g(sure)f(that)h(an)g Fz(awk)e FB(program)h(is)h(p)s(ortable,)i Fw(every)49 b FB(c)m(haracter)42 b(in)e(the)g Fx(replacemen)m(t)330 2558 y FB(string)30 b(m)m(ust)h(b)s(e)e(preceded)h(with)g(a)h(bac)m (kslash.)1998 2525 y Fo(6)275 2707 y FB(Because)36 b(of)g(the)g (problems)f(just)g(listed,)i(in)f(1996,)j(the)c Fz(gawk)g FB(main)m(tainer)h(submitted)f(prop)s(osed)150 2817 y(text)27 b(for)g(a)f(revised)h(standard)e(that)i(rev)m(erts)g(to)g(rules)f(that) h(corresp)s(ond)f(more)g(closely)i(to)f(the)g(original)150 2926 y(existing)k(practice.)41 b(The)29 b(prop)s(osed)g(rules)g(ha)m(v) m(e)h(sp)s(ecial)h(cases)f(that)g(mak)m(e)h(it)f(p)s(ossible)f(to)h (pro)s(duce)f(a)150 3036 y(`)p Fz(\\)p FB(')i(preceding)f(the)g(matc)m (hed)i(text.)41 b(This)30 b(is)g(sho)m(wn)g(in)g(T)-8 b(able)31 b(8.3.)150 3332 y(Y)-8 b(ou)31 b(t)m(yp)s(e)182 b Fz(sub)29 b FB(sees)183 b Fz(sub)29 b FB(generates)p 150 3442 362 4 v 693 3442 327 4 v 1201 3442 1652 4 v 177 3551 a Fz(\\\\\\\\\\\\&)315 b(\\\\\\&)181 b FB(a)31 b(literal)g(`)p Fz(\\&)p FB(')272 3661 y Fz(\\\\\\\\&)364 b(\\\\&)181 b FB(a)31 b(literal)g(`)p Fz(\\)p FB(',)g(follo)m(w)m(ed)h (b)m(y)e(the)h(matc)m(hed)g(text)368 3770 y Fz(\\\\&)411 b(\\&)182 b FB(a)31 b(literal)g(`)p Fz(&)p FB(')368 3880 y Fz(\\\\q)411 b(\\q)182 b FB(a)31 b(literal)g(`)p Fz(\\q)p FB(')320 3990 y Fz(\\\\\\\\)411 b(\\\\)182 b(\\\\)275 4244 y FB(T)-8 b(able)31 b(8.3:)41 b(Propsosed)30 b(rules)g(for)g(sub)f (and)h(bac)m(kslash)275 4378 y(In)j(a)i(n)m(utshell,)g(at)g(the)g(run)m (time)f(lev)m(el,)j(there)e(are)g(no)m(w)f(three)h(sp)s(ecial)f (sequences)h(of)f(c)m(haracters)150 4488 y(\(`)p Fz(\\\\\\&)p FB(',)24 b(`)p Fz(\\\\&)p FB(')f(and)f(`)p Fz(\\&)p FB('\))h(whereas)g (historically)i(there)e(w)m(as)g(only)g(one.)39 b(Ho)m(w)m(ev)m(er,)27 b(as)c(in)f(the)i(historical)150 4598 y(case,)35 b(an)m(y)e(`)p Fz(\\)p FB(')g(that)g(is)g(not)g(part)g(of)g(one)g(of)g(these)g(three)g (sequences)h(is)e(not)i(sp)s(ecial)f(and)f(app)s(ears)g(in)150 4707 y(the)f(output)f(literally)-8 b(.)275 4837 y Fz(gawk)38 b FB(3.0)j(and)f(3.1)h(follo)m(w)g(these)f(prop)s(osed)f(POSIX)g(rules) g(for)h Fz(sub)f FB(and)g Fz(gsub)p FB(.)68 b(The)40 b(POSIX)150 4946 y(standard)35 b(to)s(ok)i(m)m(uc)m(h)f(longer)g(to)h (b)s(e)e(revised)h(than)g(w)m(as)g(exp)s(ected)h(in)e(1996.)60 b(The)35 b(2001)j(standard)150 5056 y(do)s(es)28 b(not)g(follo)m(w)i (the)e(ab)s(o)m(v)m(e)i(rules.)39 b(Instead,)29 b(the)f(rules)g(there)h (are)f(somewhat)h(simpler.)39 b(The)28 b(results)150 5165 y(are)j(similar)g(except)g(for)f(one)h(case.)p 150 5241 1200 4 v 199 5308 a Fo(6)275 5340 y Fn(This)26 b(consequence)f(w)n (as)i(certainly)f(unin)n(tended.)p eop end %%Page: 139 151 TeXDict begin 139 150 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(139)275 299 y(The)35 b(2001)i(POSIX)e(rules)g (state)i(that)g(`)p Fz(\\&)p FB(')e(in)h(the)g(replacemen)m(t)h(string) f(pro)s(duces)e(a)i(literal)i(`)p Fz(&)p FB(',)150 408 y(`)p Fz(\\\\)p FB(')31 b(pro)s(duces)f(a)h(literal)i(`)p Fz(\\)p FB(',)e(and)g(`)p Fz(\\)p FB(')g(follo)m(w)m(ed)i(b)m(y)e(an)m (ything)g(else)h(is)f(not)h(sp)s(ecial;)g(the)f(`)p Fz(\\)p FB(')g(is)g(placed)150 518 y(straigh)m(t)h(in)m(to)f(the)g(output.)40 b(These)30 b(rules)g(are)h(presen)m(ted)f(in)g(T)-8 b(able)31 b(8.4.)150 814 y(Y)-8 b(ou)31 b(t)m(yp)s(e)182 b Fz(sub)29 b FB(sees)183 b Fz(sub)29 b FB(generates)p 150 924 362 4 v 693 924 327 4 v 1201 924 1652 4 v 177 1033 a Fz(\\\\\\\\\\\\&)315 b(\\\\\\&)181 b FB(a)31 b(literal)g(`)p Fz(\\&)p FB(')272 1143 y Fz(\\\\\\\\&)364 b(\\\\&)181 b FB(a)31 b(literal)g(`)p Fz(\\)p FB(',)g(follo)m(w)m(ed)h(b)m(y)e(the)h(matc)m(hed)g(text)368 1253 y Fz(\\\\&)411 b(\\&)182 b FB(a)31 b(literal)g(`)p Fz(&)p FB(')368 1362 y Fz(\\\\q)411 b(\\q)182 b FB(a)31 b(literal)g(`)p Fz(\\q)p FB(')320 1472 y Fz(\\\\\\\\)411 b(\\\\)182 b(\\)275 1726 y FB(T)-8 b(able)31 b(8.4:)41 b(POSIX)30 b(2001)i(rules)e(for)g(sub)275 1842 y(The)25 b(only)i(case)g(where)f(the)g(di\013erence)h(is)f(noticeable)j(is)d (the)g(last)i(one:)38 b(`)p Fz(\\\\\\\\)p FB(')26 b(is)g(seen)h(as)f(`) p Fz(\\\\)p FB(')h(and)150 1952 y(pro)s(duces)i(`)p Fz(\\)p FB(')i(instead)f(of)h(`)p Fz(\\\\)p FB('.)275 2080 y(Starting)36 b(with)h(v)m(ersion)g(3.1.4,)j Fz(gawk)35 b FB(follo)m(ws)i(the)g (POSIX)f(rules)g(when)f(`)p Fz(--posix)p FB(')g(is)i(sp)s(eci\014ed)150 2190 y(\(see)i(Section)g(11.2)h([Command-Line)e(Options],)i(page)f (173\).)66 b(Otherwise,)40 b(it)f(con)m(tin)m(ues)h(to)f(follo)m(w)150 2299 y(the)31 b(1996)h(prop)s(osed)d(rules,)i(since,)g(as)g(of)g(this)f (writing,)h(that)g(has)g(b)s(een)e(its)i(b)s(eha)m(vior)g(for)f(o)m(v)m (er)i(sev)m(en)150 2409 y(y)m(ears.)390 2537 y Fr(NOTE:)i FB(A)m(t)i(the)e(next)g(ma)5 b(jor)34 b(release,)j Fz(gawk)c FB(will)i(switc)m(h)f(to)h(using)f(the)g(POSIX)f(2001)390 2647 y(rules)d(b)m(y)g(default.)275 2775 y(The)25 b(rules)h(for)g Fz(gensub)f FB(are)i(considerably)f(simpler.)39 b(A)m(t)27 b(the)g(run)m(time)f(lev)m(el,)j(whenev)m(er)d Fz(gawk)f FB(sees)150 2885 y(a)38 b(`)p Fz(\\)p FB(',)j(if)d(the)g(follo)m(wing)h (c)m(haracter)h(is)e(a)g(digit,)j(then)d(the)g(text)h(that)g(matc)m (hed)g(the)f(corresp)s(onding)150 2994 y(paren)m(thesized)30 b(sub)s(expression)e(is)i(placed)g(in)f(the)h(generated)g(output.)40 b(Otherwise,)30 b(no)g(matter)g(what)150 3104 y(c)m(haracter)h(follo)m (ws)f(the)g(`)p Fz(\\)p FB(',)g(it)g(app)s(ears)f(in)g(the)g(generated) i(text)f(and)f(the)g(`)p Fz(\\)p FB(')h(do)s(es)f(not,)h(as)f(sho)m(wn) g(in)150 3213 y(T)-8 b(able)31 b(8.5.)150 3510 y(Y)-8 b(ou)31 b(t)m(yp)s(e)182 b Fz(gensub)29 b FB(sees)182 b Fz(gensub)29 b FB(generates)p 150 3619 362 4 v 693 3619 470 4 v 1344 3619 1382 4 v 463 3729 a Fz(&)603 b(&)182 b FB(the)31 b(matc)m(hed)g(text)368 3838 y Fz(\\\\&)555 b(\\&)181 b FB(a)31 b(literal)h(`)p Fz(&)p FB(')320 3948 y Fz(\\\\\\\\)555 b(\\\\)181 b FB(a)31 b(literal)h(`)p Fz(\\)p FB(')272 4058 y Fz(\\\\\\\\&)507 b(\\\\&)181 b FB(a)31 b(literal)h(`)p Fz(\\)p FB(',)e(then)g(the)h(matc)m(hed)g (text)177 4167 y Fz(\\\\\\\\\\\\&)458 b(\\\\\\&)181 b FB(a)31 b(literal)h(`)p Fz(\\&)p FB(')368 4277 y Fz(\\\\q)555 b(\\q)181 b FB(a)31 b(literal)h(`)p Fz(q)p FB(')275 4544 y(T)-8 b(able)31 b(8.5:)41 b(Escap)s(e)31 b(Sequence)f(Pro)s(cessing)h (for)f(gensub)275 4677 y(Because)39 b(of)g(the)f(complexit)m(y)i(of)f (the)f(lexical)i(and)e(run)m(time)g(lev)m(el)i(pro)s(cessing)e(and)g (the)g(sp)s(ecial)150 4787 y(cases)d(for)e Fz(sub)g FB(and)g Fz(gsub)p FB(,)h(w)m(e)g(recommend)g(the)g(use)g(of)g Fz(gawk)e FB(and)h Fz(gensub)f FB(when)h(y)m(ou)h(ha)m(v)m(e)h(to)g(do) 150 4896 y(substitutions.)150 5083 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b(Matc)m(hing)41 b(the)g(Null)g(String)150 5230 y FB(In)34 b Fz(awk)p FB(,)h(the)h(`)p Fz(*)p FB(')f(op)s(erator)g (can)g(matc)m(h)h(the)f(n)m(ull)f(string.)55 b(This)34 b(is)h(particularly)g(imp)s(ortan)m(t)g(for)g(the)150 5340 y Fz(sub)p FB(,)30 b Fz(gsub)p FB(,)f(and)h Fz(gensub)f FB(functions.)40 b(F)-8 b(or)31 b(example:)p eop end %%Page: 140 152 TeXDict begin 140 151 bop 150 -116 a FB(140)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz($)47 b(echo)g(abc)g(|)g(awk)g('{)h(gsub\(/m*/,)d("X"\);)h (print)g(}')410 412 y Fy(a)533 408 y Fz(XaXbXcX)150 537 y FB(Although)31 b(this)f(mak)m(es)h(a)g(certain)g(amoun)m(t)g(of)f (sense,)h(it)g(can)g(b)s(e)e(surprising.)150 726 y Fj(8.1.4)63 b(Input/Output)41 b(F)-10 b(unctions)150 872 y FB(The)30 b(follo)m(wing)j(functions)d(relate)j(to)e(input/output)g(\(I/O\).)h (Optional)f(parameters)g(are)h(enclosed)f(in)150 982 y(square)f(brac)m(k)m(ets)i(\([)f(]\):)150 1130 y Fz(close\()p Fk(filename)37 b FB([)p Fz(,)30 b Fk(how)11 b FB(])p Fz(\))630 1240 y FB(Close)28 b(the)f(\014le)g Fx(\014lename)32 b FB(for)27 b(input)f(or)h(output.)39 b(Alternativ)m(ely)-8 b(,)30 b(the)e(argumen)m(t)f(ma)m(y)h(b)s(e)630 1350 y(a)36 b(shell)f(command)g(that)h(w)m(as)g(used)e(for)h(creating)i(a)f (copro)s(cess,)h(or)e(for)g(redirecting)h(to)630 1459 y(or)f(from)f(a)i(pip)s(e;)h(then)d(the)h(copro)s(cess)h(or)f(pip)s(e)f (is)h(closed.)55 b(See)35 b(Section)h(4.8)g([Closing)630 1569 y(Input)29 b(and)h(Output)f(Redirections],)j(page)f(70,)g(for)f (more)h(information.)630 1698 y(When)h(closing)g(a)g(copro)s(cess,)h (it)g(is)e(o)s(ccasionally)j(useful)d(to)i(\014rst)e(close)i(one)f(end) f(of)h(the)630 1807 y(t)m(w)m(o-w)m(a)m(y)j(pip)s(e)d(and)g(then)h(to)g (close)h(the)f(other.)48 b(This)32 b(is)g(done)h(b)m(y)f(pro)m(viding)h (a)g(second)630 1917 y(argumen)m(t)42 b(to)g Fz(close)p FB(.)71 b(This)41 b(second)g(argumen)m(t)h(should)e(b)s(e)g(one)i(of)f (the)g(t)m(w)m(o)i(string)630 2026 y(v)-5 b(alues)44 b Fz("to")e FB(or)i Fz("from")p FB(,)h(indicating)g(whic)m(h)e(end)g (of)h(the)g(pip)s(e)e(to)j(close.)81 b(Case)44 b(in)630 2136 y(the)33 b(string)f(do)s(es)g(not)h(matter.)47 b(See)33 b(Section)g(10.2)h([Tw)m(o-W)-8 b(a)m(y)35 b(Comm)m(unications)e(with) 630 2246 y(Another)41 b(Pro)s(cess],)j(page)e(166,)k(whic)m(h)41 b(discusses)f(this)h(feature)h(in)f(more)g(detail)i(and)630 2355 y(giv)m(es)32 b(an)e(example.)150 2503 y Fz(fflush\()p FB([)p Fk(filename)11 b FB(])p Fz(\))630 2613 y FB(Flush)22 b(an)m(y)i(bu\013ered)d(output)i(asso)s(ciated)h(with)f Fx(\014lename)p FB(,)i(whic)m(h)d(is)h(either)g(a)h(\014le)f(op)s(ened) 630 2723 y(for)30 b(writing)h(or)f(a)h(shell)f(command)g(for)h (redirecting)g(output)f(to)h(a)f(pip)s(e)g(or)g(copro)s(cess.)630 2852 y(Man)m(y)i(utilit)m(y)g(programs)f Fx(bu\013er)36 b FB(their)31 b(output;)g(i.e.,)i(they)e(sa)m(v)m(e)i(information)e(to) h(write)630 2961 y(to)26 b(a)f(disk)f(\014le)h(or)g(terminal)h(in)e (memory)h(un)m(til)g(there)h(is)f(enough)f(for)h(it)g(to)h(b)s(e)e(w)m (orth)m(while)630 3071 y(to)29 b(send)f(the)g(data)i(to)f(the)f(output) g(device.)41 b(This)28 b(is)g(often)h(more)g(e\016cien)m(t)h(than)e (writing)630 3180 y(ev)m(ery)34 b(little)h(bit)e(of)h(information)f(as) h(so)s(on)f(as)h(it)f(is)h(ready)-8 b(.)49 b(Ho)m(w)m(ev)m(er,)37 b(sometimes)d(it)g(is)630 3290 y(necessary)d(to)g(force)h(a)f(program)f (to)i Fx(\015ush)d FB(its)i(bu\013ers;)f(that)h(is,)g(write)g(the)g (information)630 3400 y(to)e(its)g(destination,)h(ev)m(en)f(if)f(a)h (bu\013er)e(is)h(not)h(full.)40 b(This)27 b(is)i(the)f(purp)s(ose)f(of) h(the)h Fz(fflush)630 3509 y FB(function|)p Fz(gawk)h FB(also)j(bu\013ers)d(its)j(output)e(and)g(the)h Fz(fflush)e FB(function)h(forces)i Fz(gawk)d FB(to)630 3619 y(\015ush)f(its)h (bu\013ers.)630 3748 y Fz(fflush)39 b FB(w)m(as)j(added)e(to)h(the)h (Bell)g(Lab)s(oratories)f(researc)m(h)h(v)m(ersion)f(of)g Fz(awk)f FB(in)h(1994;)630 3857 y(it)k(is)f(not)g(part)g(of)g(the)g (POSIX)f(standard)g(and)h(is)g(not)g(a)m(v)-5 b(ailable)47 b(if)d(`)p Fz(--posix)p FB(')e(has)630 3967 y(b)s(een)24 b(sp)s(eci\014ed)g(on)h(the)g(command)g(line)g(\(see)h(Section)g(11.2)g ([Command-Line)f(Options],)630 4076 y(page)31 b(173\).)630 4205 y Fz(gawk)21 b FB(extends)h(the)g Fz(fflush)f FB(function)h(in)f (t)m(w)m(o)j(w)m(a)m(ys.)39 b(The)21 b(\014rst)h(is)g(to)h(allo)m(w)g (no)f(argumen)m(t)630 4315 y(at)35 b(all.)52 b(In)33 b(this)g(case,)j(the)e(bu\013er)f(for)h(the)g(standard)f(output)g(is)h (\015ushed.)50 b(The)33 b(second)630 4425 y(is)c(to)h(allo)m(w)h(the)f (n)m(ull)f(string)g(\()p Fz("")p FB(\))g(as)h(the)f(argumen)m(t.)41 b(In)29 b(this)g(case,)i(the)e(bu\013ers)f(for)h Fw(al)5 b(l)630 4534 y FB(op)s(en)30 b(output)g(\014les)g(and)g(pip)s(es)f(are) i(\015ushed.)630 4663 y Fz(fflush)36 b FB(returns)f(zero)j(if)g(the)f (bu\013er)f(is)i(successfully)f(\015ushed;)i(otherwise,)g(it)f(returns) 630 4773 y Fy(\000)p FB(1.)58 b(In)35 b(the)i(case)g(where)e(all)i (bu\013ers)e(are)i(\015ushed,)f(the)g(return)f(v)-5 b(alue)37 b(is)f(zero)h(only)f(if)630 4882 y(all)28 b(bu\013ers)e(w)m(ere)i (\015ushed)e(successfully)-8 b(.)40 b(Otherwise,)28 b(it)g(is)f Fy(\000)p FB(1,)h(and)f Fz(gawk)f FB(w)m(arns)h(ab)s(out)630 4992 y(the)k(problem)e Fx(\014lename)p FB(.)630 5121 y Fz(gawk)k FB(also)i(issues)f(a)h(w)m(arning)f(message)i(if)e(y)m(ou)g (attempt)i(to)f(\015ush)e(a)h(\014le)h(or)f(pip)s(e)f(that)630 5230 y(w)m(as)i(op)s(ened)f(for)g(reading)h(\(suc)m(h)g(as)g(with)f Fz(getline)p FB(\),)g(or)h(if)g Fx(\014lename)k FB(is)c(not)g(an)g(op)s (en)630 5340 y(\014le,)c(pip)s(e,)e(or)i(copro)s(cess.)41 b(In)30 b(suc)m(h)g(a)g(case,)i Fz(fflush)d FB(returns)g Fy(\000)p FB(1,)i(as)f(w)m(ell.)p eop end %%Page: 141 153 TeXDict begin 141 152 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(141)150 299 y Fz(system\()p Fk(command)11 b Fz(\))630 408 y FB(Executes)40 b(op)s(erating-system)g (commands)f(and)g(then)g(returns)f(to)i(the)f Fz(awk)g FB(program.)630 518 y(The)32 b Fz(system)f FB(function)i(executes)h (the)f(command)g(giv)m(en)g(b)m(y)g(the)g(string)g Fx(command)p FB(.)48 b(It)630 628 y(returns)29 b(the)i(status)f(returned)g(b)m(y)g (the)g(command)h(that)g(w)m(as)f(executed)i(as)e(its)h(v)-5 b(alue.)630 765 y(F)d(or)31 b(example,)g(if)g(the)f(follo)m(wing)i (fragmen)m(t)f(of)g(co)s(de)f(is)h(put)e(in)i(y)m(our)f Fz(awk)f FB(program:)870 902 y Fz(END)47 b({)1109 1012 y(system\("date)d(|)k(mail)e(-s)h('awk)g(run)g(done')f(root"\))870 1121 y(})630 1259 y FB(the)26 b(system)g(administrator)g(is)f(sen)m(t)i (mail)f(when)f(the)g Fz(awk)g FB(program)h(\014nishes)e(pro)s(cessing) 630 1368 y(input)29 b(and)h(b)s(egins)g(its)h(end-of-input)e(pro)s (cessing.)630 1506 y(Note)c(that)f(redirecting)g Fz(print)e FB(or)i Fz(printf)e FB(in)m(to)i(a)g(pip)s(e)f(is)h(often)g(enough)f (to)h(accomplish)630 1615 y(y)m(our)36 b(task.)58 b(If)35 b(y)m(ou)h(need)g(to)h(run)d(man)m(y)i(commands,)h(it)f(is)g(more)g (e\016cien)m(t)i(to)e(simply)630 1725 y(prin)m(t)30 b(them)g(do)m(wn)g (a)h(pip)s(eline)f(to)h(the)g(shell:)870 1862 y Fz(while)46 b(\()p Fk(more)h(stuff)f(to)h(do)11 b Fz(\))1061 1972 y(print)46 b Fk(command)57 b Fz(|)47 b("/bin/sh")870 2081 y(close\("/bin/sh"\))630 2219 y FB(Ho)m(w)m(ev)m(er,)38 b(if)d(y)m(our)g Fz(awk)f FB(program)g(is)h(in)m(teractiv)m(e,)k Fz(system)33 b FB(is)i(useful)f(for)h(cranking)g(up)630 2328 y(large)43 b(self-con)m(tained)g(programs,)h(suc)m(h)d(as)h(a)f (shell)h(or)f(an)h(editor.)74 b(Some)41 b(op)s(erating)630 2438 y(systems)32 b(cannot)g(implemen)m(t)g(the)g Fz(system)e FB(function.)44 b Fz(system)30 b FB(causes)i(a)g(fatal)h(error)e(if)630 2547 y(it)g(is)f(not)h(supp)s(orted.)150 2752 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b(In)m(teractiv)m(e)39 b(V)-10 b(ersus)41 b(Nonin)m(teractiv)m(e)f(Bu\013ering)150 2899 y FB(As)28 b(a)g(side)g(p)s(oin)m(t,)g(bu\013ering)f(issues)h(can)g(b)s (e)f(ev)m(en)h(more)g(confusing,)g(dep)s(ending)f(up)s(on)f(whether)h (y)m(our)150 3009 y(program)j(is)h Fx(in)m(teractiv)m(e)p FB(,)i(i.e.,)f(comm)m(unicating)g(with)e(a)g(user)g(sitting)h(at)h(a)e (k)m(eyb)s(oard.)3218 2976 y Fo(7)275 3149 y FB(In)m(teractiv)m(e)38 b(programs)e(generally)i Fx(line)f(bu\013er)42 b FB(their)36 b(output;)k(i.e.,)f(they)e(write)f(out)h(ev)m(ery)g(line.)150 3258 y(Nonin)m(teractiv)m(e)43 b(programs)c(w)m(ait)h(un)m(til)g(they)g (ha)m(v)m(e)h(a)f(full)f(bu\013er,)i(whic)m(h)e(ma)m(y)h(b)s(e)f(man)m (y)h(lines)g(of)150 3368 y(output.)g(Here)31 b(is)g(an)f(example)h(of)g (the)f(di\013erence:)390 3508 y Fz($)47 b(awk)g('{)h(print)e($1)h(+)h ($2)f(}')390 3618 y(1)g(1)410 3731 y Fy(a)533 3727 y Fz(2)390 3837 y(2)g(3)410 3950 y Fy(a)533 3946 y Fz(5)390 4056 y Fk(Ctrl-d)150 4196 y FB(Eac)m(h)31 b(line)g(of)f(output)g(is)h (prin)m(ted)f(immediately)-8 b(.)42 b(Compare)30 b(that)h(b)s(eha)m (vior)g(with)f(this)g(example:)390 4336 y Fz($)47 b(awk)g('{)h(print)e ($1)h(+)h($2)f(}')g(|)g(cat)390 4446 y(1)g(1)390 4555 y(2)g(3)390 4665 y Fk(Ctrl-d)410 4779 y Fy(a)533 4775 y Fz(2)410 4888 y Fy(a)533 4884 y Fz(5)150 5024 y FB(Here,)40 b(no)d(output)f(is)h(prin)m(ted)g(un)m(til)g(after)h(the)f Fk(Ctrl-d)f FB(is)h(t)m(yp)s(ed,)i(b)s(ecause)e(it)g(is)h(all)g (bu\013ered)e(and)150 5134 y(sen)m(t)31 b(do)m(wn)f(the)g(pip)s(e)g(to) h Fz(cat)e FB(in)i(one)f(shot.)p 150 5241 1200 4 v 199 5308 a Fo(7)275 5340 y Fn(A)25 b(program)h(is)g(in)n(teractiv)n(e)g(if) h(the)e(standard)h(output)e(is)i(connected)g(to)g(a)g(terminal)g (device.)p eop end %%Page: 142 154 TeXDict begin 142 153 bop 150 -116 a FB(142)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fj(Adv)-7 b(anced)40 b(Notes:)62 b(Con)m(trolling)42 b(Output)f(Bu\013ering)h(with)e Fh(system)150 446 y FB(The)29 b Fz(fflush)e FB(function)i(pro)m(vides)g(explicit)i(con)m(trol)f(o)m (v)m(er)h(output)e(bu\013ering)f(for)h(individual)f(\014les)i(and)150 555 y(pip)s(es.)39 b(Ho)m(w)m(ev)m(er,)31 b(its)e(use)f(is)g(not)h(p)s (ortable)f(to)h(man)m(y)f(other)h Fz(awk)e FB(implemen)m(tations.)42 b(An)28 b(alternativ)m(e)150 665 y(metho)s(d)i(to)h(\015ush)e(output)h (bu\013ers)f(is)h(to)h(call)h Fz(system)d FB(with)h(a)g(n)m(ull)h (string)f(as)h(its)f(argumen)m(t:)390 820 y Fz(system\(""\))140 b(#)48 b(flush)e(output)150 975 y(gawk)25 b FB(treats)j(this)e(use)g (of)h(the)f Fz(system)f FB(function)h(as)h(a)f(sp)s(ecial)h(case)h(and) e(is)g(smart)g(enough)h(not)f(to)h(run)150 1084 y(a)36 b(shell)g(\(or)h(other)f(command)f(in)m(terpreter\))i(with)f(the)g (empt)m(y)g(command.)57 b(Therefore,)37 b(with)f Fz(gawk)p FB(,)150 1194 y(this)30 b(idiom)g(is)h(not)f(only)g(useful,)g(it)h(is)f (also)h(e\016cien)m(t.)43 b(While)31 b(this)f(metho)s(d)f(should)g(w)m (ork)i(with)f(other)150 1304 y Fz(awk)36 b FB(implemen)m(tations,)k(it) d(do)s(es)g(not)g(necessarily)h(a)m(v)m(oid)g(starting)g(an)f (unnecessary)f(shell.)60 b(\(Other)150 1413 y(implemen)m(tations)40 b(ma)m(y)g(only)f(\015ush)e(the)i(bu\013er)f(asso)s(ciated)i(with)f (the)g(standard)f(output)g(and)h(not)150 1523 y(necessarily)31 b(all)h(bu\013ered)d(output.\))275 1678 y(If)d(y)m(ou)i(think)f(ab)s (out)g(what)g(a)h(programmer)f(exp)s(ects,)h(it)g(mak)m(es)g(sense)g (that)g Fz(system)d FB(should)i(\015ush)150 1787 y(an)m(y)k(p)s(ending) e(output.)40 b(The)30 b(follo)m(wing)i(program:)390 1942 y Fz(BEGIN)46 b({)629 2052 y(print)g("first)g(print")629 2161 y(system\("echo)e(system)i(echo"\))629 2271 y(print)g("second)g (print")390 2381 y(})150 2536 y FB(m)m(ust)30 b(prin)m(t:)390 2691 y Fz(first)46 b(print)390 2800 y(system)g(echo)390 2910 y(second)g(print)150 3065 y FB(and)30 b(not:)390 3220 y Fz(system)46 b(echo)390 3329 y(first)g(print)390 3439 y(second)g(print)275 3594 y FB(If)30 b Fz(awk)g FB(did)g(not)h(\015ush)e(its)i(bu\013ers)f(b)s(efore)g(calling)j Fz(system)p FB(,)c(y)m(ou)i(w)m(ould)g(see)g(the)h(latter)g(\(undesir-) 150 3703 y(able\))f(output.)150 3923 y Fj(8.1.5)63 b(Using)42 b Fh(gawk)p Fj('s)g(Timestamp)g(F)-10 b(unctions)150 4070 y Fz(awk)38 b FB(programs)h(are)g(commonly)g(used)f(to)i(pro)s (cess)f(log)h(\014les)e(con)m(taining)j(timestamp)e(information,)150 4180 y(indicating)27 b(when)e(a)h(particular)g(log)h(record)f(w)m(as)g (written.)40 b(Man)m(y)26 b(programs)g(log)h(their)f(timestamp)g(in)150 4289 y(the)e(form)g(returned)f(b)m(y)h(the)g Fz(time)f FB(system)i(call,)i(whic)m(h)d(is)g(the)g(n)m(um)m(b)s(er)f(of)h (seconds)h(since)f(a)h(particular)150 4399 y(ep)s(o)s(c)m(h.)39 b(On)25 b(POSIX-complian)m(t)i(systems,)g(it)f(is)g(the)h(n)m(um)m(b)s (er)d(of)i(seconds)g(since)h(1970-01-01)j(00:00:00)150 4508 y(UTC,)21 b(not)h(coun)m(ting)g(leap)g(seconds.)1418 4475 y Fo(8)1493 4508 y FB(All)g(kno)m(wn)e(POSIX-complian)m(t)i (systems)g(supp)s(ort)d(timestamps)150 4618 y(from)32 b(0)g(through)g(2)835 4585 y Fo(3)872 4618 y FB(1)22 b Fy(\000)f FB(1,)34 b(whic)m(h)d(is)i(su\016cien)m(t)f(to)h(represen)m (t)f(times)h(through)e(2038-01-19)37 b(03:14:07)150 4728 y(UTC.)32 b(Man)m(y)h(systems)f(supp)s(ort)f(a)i(wider)e(range)i(of)f (timestamps,)i(including)e(negativ)m(e)i(timestamps)150 4837 y(that)d(represen)m(t)f(times)h(b)s(efore)f(the)h(ep)s(o)s(c)m(h.) 275 4992 y(In)h(order)h(to)h(mak)m(e)g(it)g(easier)g(to)g(pro)s(cess)f (suc)m(h)g(log)h(\014les)f(and)g(to)h(pro)s(duce)e(useful)h(rep)s (orts,)g Fz(gawk)150 5102 y FB(pro)m(vides)i(the)g(follo)m(wing)h (functions)e(for)h(w)m(orking)g(with)f(timestamps.)54 b(They)34 b(are)i Fz(gawk)d FB(extensions;)p 150 5241 1200 4 v 199 5308 a Fo(8)275 5340 y Fn(See)25 b([Glossary],)j(page)e (300,)i(esp)r(ecially)f(the)e(en)n(tries)h(\\Ep)r(o)r(c)n(h")h(and)e (\\UTC.")p eop end %%Page: 143 155 TeXDict begin 143 154 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(143)150 299 y(they)32 b(are)h(not)f(sp)s (eci\014ed)g(in)g(the)g(POSIX)g(standard,)g(nor)f(are)i(they)f(in)g(an) m(y)h(other)f(kno)m(wn)g(v)m(ersion)h(of)150 408 y Fz(awk)p FB(.)319 375 y Fo(9)396 408 y FB(Optional)e(parameters)g(are)f (enclosed)h(in)f(square)h(brac)m(k)m(ets)g(\([)g(]\):)150 568 y Fz(systime\(\))630 677 y FB(This)45 b(function)g(returns)f(the)i (curren)m(t)f(time)h(as)g(the)g(n)m(um)m(b)s(er)e(of)h(seconds)h(since) g(the)630 787 y(system)35 b(ep)s(o)s(c)m(h.)56 b(On)34 b(POSIX)h(systems,)h(this)g(is)f(the)g(n)m(um)m(b)s(er)f(of)i(seconds)f (since)h(1970-)630 896 y(01-01)e(00:00:00)i(UTC,)31 b(not)i(coun)m (ting)g(leap)f(seconds.)47 b(It)32 b(ma)m(y)h(b)s(e)e(a)i(di\013eren)m (t)f(n)m(um)m(b)s(er)630 1006 y(on)e(other)h(systems.)150 1165 y Fz(mktime\()p Fk(datespec)11 b Fz(\))630 1275 y FB(This)28 b(function)h(turns)f Fx(datesp)s(ec)35 b FB(in)m(to)30 b(a)g(timestamp)f(in)g(the)g(same)h(form)f(as)g(is)g (returned)630 1384 y(b)m(y)41 b Fz(systime)p FB(.)71 b(It)41 b(is)h(similar)f(to)h(the)f(function)g(of)g(the)h(same)f(name)h (in)e(ISO)g(C.)h(The)630 1494 y(argumen)m(t,)47 b Fx(datesp)s(ec)p FB(,)g(is)c(a)g(string)g(of)g(the)g(form)g Fz(")p Fk(YYYY)c(MM)i(DD)f (HH)g(MM)h(SS)f Fz([)p Fk(DST)11 b Fz(]")n FB(.)630 1604 y(The)33 b(string)h(consists)g(of)g(six)g(or)f(sev)m(en)i(n)m(um)m(b)s (ers)d(represen)m(ting,)j(resp)s(ectiv)m(ely)-8 b(,)36 b(the)e(full)630 1713 y(y)m(ear)h(including)f(cen)m(tury)-8 b(,)36 b(the)e(mon)m(th)g(from)g(1)g(to)h(12,)h(the)f(da)m(y)f(of)g (the)h(mon)m(th)f(from)g(1)630 1823 y(to)i(31,)h(the)e(hour)e(of)i(the) g(da)m(y)h(from)e(0)h(to)h(23,)h(the)e(min)m(ute)g(from)f(0)h(to)h(59,) h(the)e(second)630 1932 y(from)30 b(0)h(to)g(60,)1147 1899 y Fo(10)1249 1932 y FB(and)e(an)i(optional)g(da)m(yligh)m(t-sa)m (vings)i(\015ag.)630 2067 y(The)27 b(v)-5 b(alues)28 b(of)g(these)h(n)m(um)m(b)s(ers)d(need)i(not)g(b)s(e)f(within)g(the)h (ranges)g(sp)s(eci\014ed;)h(for)e(exam-)630 2176 y(ple,)37 b(an)d(hour)h(of)g Fy(\000)p FB(1)g(means)g(1)g(hour)f(b)s(efore)h (midnigh)m(t.)55 b(The)34 b(origin-zero)j(Gregorian)630 2286 y(calendar)32 b(is)g(assumed,)f(with)g(y)m(ear)i(0)f(preceding)f (y)m(ear)i(1)f(and)e(y)m(ear)j Fy(\000)p FB(1)f(preceding)f(y)m(ear)630 2395 y(0.)40 b(The)28 b(time)h(is)g(assumed)e(to)i(b)s(e)f(in)g(the)g (lo)s(cal)i(timezone.)41 b(If)28 b(the)h(da)m(yligh)m(t-sa)m(vings)i (\015ag)630 2505 y(is)f(p)s(ositiv)m(e,)h(the)f(time)g(is)g(assumed)e (to)j(b)s(e)e(da)m(yligh)m(t)i(sa)m(vings)f(time;)h(if)f(zero,)h(the)f (time)g(is)630 2615 y(assumed)35 b(to)h(b)s(e)f(standard)g(time;)k(and) c(if)h(negativ)m(e)h(\(the)f(default\),)i Fz(mktime)c FB(attempts)630 2724 y(to)d(determine)g(whether)e(da)m(yligh)m(t)j(sa)m (vings)f(time)h(is)e(in)g(e\013ect)i(for)e(the)h(sp)s(eci\014ed)e (time.)630 2859 y(If)i Fx(datesp)s(ec)38 b FB(do)s(es)32 b(not)g(con)m(tain)h(enough)e(elemen)m(ts)j(or)d(if)h(the)g(resulting)g (time)h(is)f(out)g(of)630 2968 y(range,)f Fz(mktime)e FB(returns)g Fy(\000)p FB(1.)150 3127 y Fz(strftime\()p FB([)p Fk(format)37 b FB([)p Fz(,)30 b Fk(timestamp)11 b FB(]])p Fz(\))630 3237 y FB(This)33 b(function)h(returns)f(a)i (string.)52 b(It)34 b(is)g(similar)h(to)f(the)h(function)f(of)g(the)g (same)h(name)630 3347 y(in)d(ISO)g(C.)g(The)g(time)h(sp)s(eci\014ed)f (b)m(y)g Fx(timestamp)k FB(is)d(used)f(to)h(pro)s(duce)e(a)i(string,)g (based)630 3456 y(on)40 b(the)f(con)m(ten)m(ts)j(of)e(the)g Fx(format)i FB(string.)68 b(The)39 b Fx(timestamp)44 b FB(is)39 b(in)h(the)g(same)g(format)630 3566 y(as)c(the)f(v)-5 b(alue)36 b(returned)f(b)m(y)g(the)h Fz(systime)d FB(function.)56 b(If)35 b(no)g Fx(timestamp)k FB(argumen)m(t)d(is)630 3675 y(supplied,)k Fz(gawk)e FB(uses)g(the)h(curren)m(t)g(time)h(of)f (da)m(y)g(as)g(the)g(timestamp.)67 b(If)39 b(no)g Fx(format)630 3785 y FB(argumen)m(t)29 b(is)f(supplied,)g Fz(strftime)e FB(uses)i Fz("\045a)h(\045b)h(\045d)g(\045H:\045M:\045S)e(\045Z)i (\045Y")o FB(.)40 b(This)28 b(format)630 3895 y(string)34 b(pro)s(duces)f(output)h(that)h(is)g(\(almost\))h(equiv)-5 b(alen)m(t)36 b(to)f(that)g(of)f(the)h Fz(date)e FB(utilit)m(y)-8 b(.)630 4004 y(\(V)g(ersions)31 b(of)g Fz(gawk)e FB(prior)h(to)h(3.0)g (require)f(the)h Fx(format)i FB(argumen)m(t.\))275 4163 y(The)44 b Fz(systime)g FB(function)g(allo)m(ws)j(y)m(ou)f(to)g (compare)f(a)h(timestamp)g(from)f(a)g(log)h(\014le)g(with)f(the)150 4273 y(curren)m(t)30 b(time)h(of)g(da)m(y)-8 b(.)42 b(In)29 b(particular,)i(it)g(is)g(easy)g(to)g(determine)f(ho)m(w)h(long)g(ago)g (a)g(particular)g(record)150 4383 y(w)m(as)i(logged.)50 b(It)33 b(also)h(allo)m(ws)g(y)m(ou)f(to)h(pro)s(duce)d(log)j(records)f (using)f(the)h(\\seconds)g(since)h(the)f(ep)s(o)s(c)m(h")150 4492 y(format.)275 4626 y(The)e Fz(mktime)g FB(function)h(allo)m(ws)h (y)m(ou)g(to)g(con)m(v)m(ert)g(a)g(textual)h(represen)m(tation)f(of)f (a)h(date)g(and)e(time)150 4736 y(in)m(to)36 b(a)f(timestamp.)54 b(This)34 b(mak)m(es)i(it)f(easy)h(to)f(do)g(b)s(efore/after)g (comparisons)g(of)g(dates)g(and)f(times,)150 4846 y(particularly)28 b(when)f(dealing)h(with)f(date)h(and)f(time)i(data)f(coming)g(from)f (an)h(external)g(source,)g(suc)m(h)g(as)150 4955 y(a)j(log)g(\014le.)p 150 5051 1200 4 v 199 5118 a Fo(9)275 5150 y Fn(The)h(GNU)g Fm(date)i Fn(utilit)n(y)e(can)h(also)h(do)f(man)n(y)f(of)i(the)e (things)h(describ)r(ed)g(here.)55 b(Its)33 b(use)f(ma)n(y)h(b)r(e)f (preferable)i(for)275 5237 y(simple)26 b(time-related)g(op)r(erations)h (in)f(shell)g(scripts.)166 5308 y Fo(10)275 5340 y Fn(Occasionally)h (there)e(are)h(min)n(utes)g(in)g(a)f(y)n(ear)h(with)g(a)g(leap)g (second,)g(whic)n(h)g(is)g(wh)n(y)f(the)h(seconds)g(can)g(go)g(up)f(to) h(60.)p eop end %%Page: 144 156 TeXDict begin 144 155 bop 150 -116 a FB(144)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(The)45 b Fz(strftime)e FB(function)j(allo)m(ws)h(y)m(ou)f(to)h (easily)g(turn)d(a)j(timestamp)f(in)m(to)h(h)m(uman-readable)150 408 y(information.)78 b(It)43 b(is)g(similar)g(in)f(nature)h(to)g(the)g Fz(sprintf)e FB(function)h(\(see)i(Section)f(8.1.3)i([String-)150 518 y(Manipulation)c(F)-8 b(unctions],)44 b(page)d(129\),)k(in)c(that)g (it)g(copies)g(nonformat)f(sp)s(eci\014cation)h(c)m(haracters)150 628 y(v)m(erbatim)30 b(to)g(the)f(returned)f(string,)i(while)f (substituting)g(date)h(and)e(time)i(v)-5 b(alues)30 b(for)f(format)g (sp)s(eci\014-)150 737 y(cations)j(in)e(the)g Fx(format)j FB(string.)275 871 y Fz(strftime)k FB(is)i(guaran)m(teed)i(b)m(y)f(the) f(1999)j(ISO)c(C)h(standard)2444 838 y Fo(11)2553 871 y FB(to)i(supp)s(ort)c(the)j(follo)m(wing)h(date)150 980 y(format)31 b(sp)s(eci\014cations:)150 1138 y Fz(\045a)384 b FB(The)30 b(lo)s(cale's)i(abbreviated)f(w)m(eekda)m(y)g(name.)150 1296 y Fz(\045A)384 b FB(The)30 b(lo)s(cale's)i(full)e(w)m(eekda)m(y)i (name.)150 1453 y Fz(\045b)384 b FB(The)30 b(lo)s(cale's)i(abbreviated) f(mon)m(th)f(name.)150 1611 y Fz(\045B)384 b FB(The)30 b(lo)s(cale's)i(full)e(mon)m(th)g(name.)150 1768 y Fz(\045c)384 b FB(The)28 b(lo)s(cale's)j(\\appropriate")f(date)f(and)g(time)g (represen)m(tation.)42 b(\(This)28 b(is)h(`)p Fz(\045A)h(\045B)g(\045d) g(\045T)630 1878 y(\045Y)p FB(')g(in)g(the)h Fz("C")e FB(lo)s(cale.\))150 2035 y Fz(\045C)384 b FB(The)32 b(cen)m(tury)-8 b(.)49 b(This)32 b(is)h(the)g(y)m(ear)h(divided)e(b)m(y)h(100)h(and)e (truncated)h(to)h(the)f(next)g(lo)m(w)m(er)630 2145 y(in)m(teger.)150 2303 y Fz(\045d)384 b FB(The)30 b(da)m(y)h(of)f(the)h(mon)m(th)f(as)h (a)f(decimal)i(n)m(um)m(b)s(er)d(\(01{31\).)150 2460 y Fz(\045D)384 b FB(Equiv)-5 b(alen)m(t)31 b(to)g(sp)s(ecifying)g(`)p Fz(\045m/\045d/\045y)p FB('.)150 2618 y Fz(\045e)384 b FB(The)30 b(da)m(y)h(of)f(the)h(mon)m(th,)f(padded)f(with)i(a)f (space)h(if)g(it)f(is)h(only)f(one)h(digit.)150 2775 y Fz(\045F)384 b FB(Equiv)-5 b(alen)m(t)31 b(to)g(sp)s(ecifying)g(`)p Fz(\045Y-\045m-\045d)p FB('.)39 b(This)29 b(is)i(the)f(ISO)f(8601)k (date)e(format.)150 2933 y Fz(\045g)384 b FB(The)33 b(y)m(ear)i(mo)s (dulo)e(100)i(of)f(the)g(ISO)f(w)m(eek)i(n)m(um)m(b)s(er,)e(as)h(a)h (decimal)f(n)m(um)m(b)s(er)f(\(00{99\).)630 3042 y(F)-8 b(or)33 b(example,)g(Jan)m(uary)e(1,)i(1993)g(is)f(in)g(w)m(eek)g(53)h (of)f(1992.)47 b(Th)m(us,)31 b(the)h(y)m(ear)h(of)f(its)g(ISO)630 3152 y(w)m(eek)39 b(n)m(um)m(b)s(er)e(is)i(1992,)j(ev)m(en)d(though)f (its)h(y)m(ear)g(is)g(1993.)66 b(Similarly)-8 b(,)42 b(Decem)m(b)s(er)d(31,)630 3262 y(1973)31 b(is)e(in)g(w)m(eek)g(1)h(of) f(1974.)42 b(Th)m(us,)29 b(the)g(y)m(ear)h(of)f(its)g(ISO)f(w)m(eek)i (n)m(um)m(b)s(er)e(is)h(1974,)i(ev)m(en)630 3371 y(though)f(its)h(y)m (ear)g(is)f(1973.)150 3529 y Fz(\045G)384 b FB(The)30 b(full)g(y)m(ear)h(of)g(the)f(ISO)g(w)m(eek)h(n)m(um)m(b)s(er,)e(as)i (a)g(decimal)g(n)m(um)m(b)s(er.)150 3686 y Fz(\045h)384 b FB(Equiv)-5 b(alen)m(t)31 b(to)g(`)p Fz(\045b)p FB('.)150 3844 y Fz(\045H)384 b FB(The)30 b(hour)f(\(24-hour)i(clo)s(c)m(k\))h (as)f(a)g(decimal)g(n)m(um)m(b)s(er)e(\(00{23\).)150 4001 y Fz(\045I)384 b FB(The)30 b(hour)f(\(12-hour)i(clo)s(c)m(k\))h (as)f(a)g(decimal)g(n)m(um)m(b)s(er)e(\(01{12\).)150 4159 y Fz(\045j)384 b FB(The)30 b(da)m(y)h(of)f(the)h(y)m(ear)g(as)g(a) f(decimal)i(n)m(um)m(b)s(er)d(\(001{366\).)150 4317 y Fz(\045m)384 b FB(The)30 b(mon)m(th)g(as)h(a)g(decimal)g(n)m(um)m(b)s (er)e(\(01{12\).)150 4474 y Fz(\045M)384 b FB(The)30 b(min)m(ute)g(as)h(a)g(decimal)g(n)m(um)m(b)s(er)e(\(00{59\).)150 4632 y Fz(\045n)384 b FB(A)30 b(newline)h(c)m(haracter)h(\(ASCI)s(I)d (LF\).)150 4789 y Fz(\045p)384 b FB(The)32 b(lo)s(cale's)i(equiv)-5 b(alen)m(t)33 b(of)f(the)h(AM/PM)g(designations)g(asso)s(ciated)g(with) f(a)h(12-hour)630 4899 y(clo)s(c)m(k.)150 5056 y Fz(\045r)384 b FB(The)30 b(lo)s(cale's)i(12-hour)f(clo)s(c)m(k)g(time.)42 b(\(This)30 b(is)g(`)p Fz(\045I:\045M:\045S)f(\045p)p FB(')h(in)g(the)g Fz("C")g FB(lo)s(cale.\))p 150 5154 1200 4 v 166 5221 a Fo(11)275 5253 y Fn(As)i(this)i(is)f(a)h(recen)n(t) e(standard,)k(not)d(ev)n(ery)f(system's)i Fm(strftime)g Fn(necessarily)h(supp)r(orts)e(all)h(of)g(the)e(con)n(v)n(ersions)275 5340 y(listed)26 b(here.)p eop end %%Page: 145 157 TeXDict begin 145 156 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(145)150 299 y Fz(\045R)384 b FB(Equiv)-5 b(alen)m(t)31 b(to)g(sp)s(ecifying)g(`)p Fz(\045H:\045M)p FB('.)150 459 y Fz(\045S)384 b FB(The)30 b(second)g(as)h(a)g(decimal)g(n)m(um)m(b)s(er)e(\(00{60\).)150 619 y Fz(\045t)384 b FB(A)30 b(T)-8 b(AB)31 b(c)m(haracter.)150 779 y Fz(\045T)384 b FB(Equiv)-5 b(alen)m(t)31 b(to)g(sp)s(ecifying)g (`)p Fz(\045H:\045M:\045S)p FB('.)150 940 y Fz(\045u)384 b FB(The)30 b(w)m(eekda)m(y)i(as)e(a)h(decimal)g(n)m(um)m(b)s(er)e (\(1{7\).)43 b(Monda)m(y)31 b(is)f(da)m(y)h(one.)150 1100 y Fz(\045U)384 b FB(The)29 b(w)m(eek)h(n)m(um)m(b)s(er)e(of)h(the) h(y)m(ear)g(\(the)g(\014rst)f(Sunda)m(y)f(as)h(the)h(\014rst)e(da)m(y)i (of)g(w)m(eek)g(one\))g(as)630 1209 y(a)h(decimal)g(n)m(um)m(b)s(er)e (\(00{53\).)150 1370 y Fz(\045V)384 b FB(The)27 b(w)m(eek)i(n)m(um)m(b) s(er)d(of)i(the)f(y)m(ear)i(\(the)f(\014rst)f(Monda)m(y)h(as)g(the)g (\014rst)e(da)m(y)i(of)g(w)m(eek)g(one\))h(as)630 1479 y(a)f(decimal)h(n)m(um)m(b)s(er)e(\(01{53\).)42 b(The)28 b(metho)s(d)f(for)h(determining)f(the)i(w)m(eek)f(n)m(um)m(b)s(er)f(is) h(as)630 1589 y(sp)s(eci\014ed)34 b(b)m(y)g(ISO)g(8601.)55 b(\(T)-8 b(o)35 b(wit:)50 b(if)34 b(the)h(w)m(eek)g(con)m(taining)i (Jan)m(uary)d(1)h(has)f(four)g(or)630 1698 y(more)f(da)m(ys)h(in)e(the) i(new)e(y)m(ear,)j(then)e(it)h(is)f(w)m(eek)h(one;)h(otherwise)f(it)f (is)g(w)m(eek)h(53)g(of)g(the)630 1808 y(previous)c(y)m(ear)h(and)f (the)g(next)h(w)m(eek)g(is)g(w)m(eek)g(one.\))150 1968 y Fz(\045w)384 b FB(The)30 b(w)m(eekda)m(y)i(as)e(a)h(decimal)g(n)m(um) m(b)s(er)e(\(0{6\).)43 b(Sunda)m(y)29 b(is)i(da)m(y)f(zero.)150 2128 y Fz(\045W)384 b FB(The)27 b(w)m(eek)i(n)m(um)m(b)s(er)d(of)i(the) f(y)m(ear)i(\(the)f(\014rst)f(Monda)m(y)h(as)g(the)g(\014rst)e(da)m(y)i (of)g(w)m(eek)g(one\))h(as)630 2238 y(a)i(decimal)g(n)m(um)m(b)s(er)e (\(00{53\).)150 2398 y Fz(\045x)384 b FB(The)37 b(lo)s(cale's)j (\\appropriate")f(date)g(represen)m(tation.)64 b(\(This)38 b(is)g(`)p Fz(\045A)30 b(\045B)g(\045d)f(\045Y)p FB(')38 b(in)g(the)630 2508 y Fz("C")29 b FB(lo)s(cale.\))150 2668 y Fz(\045X)384 b FB(The)27 b(lo)s(cale's)i(\\appropriate")f(time)g (represen)m(tation.)40 b(\(This)27 b(is)g(`)p Fz(\045T)p FB(')g(in)g(the)g Fz("C")g FB(lo)s(cale.\))150 2828 y Fz(\045y)384 b FB(The)30 b(y)m(ear)h(mo)s(dulo)f(100)i(as)e(a)h (decimal)g(n)m(um)m(b)s(er)e(\(00{99\).)150 2988 y Fz(\045Y)384 b FB(The)30 b(full)g(y)m(ear)h(as)g(a)g(decimal)g(n)m(um)m(b)s(er)e (\(e.g.,)j(1995\).)150 3148 y Fz(\045z)384 b FB(The)25 b(timezone)i(o\013set)f(in)f(a)h Fz(+)p FB(HHMM)g(format)g(\(e.g.,)i (the)e(format)f(necessary)h(to)g(pro)s(duce)630 3258 y(RF)m(C)31 b(822/RF)m(C)h(1036)g(date)f(headers\).)150 3418 y Fz(\045Z)384 b FB(The)38 b(time)h(zone)f(name)h(or)f (abbreviation;)43 b(no)38 b(c)m(haracters)h(if)f(no)h(time)f(zone)h(is) f(deter-)630 3528 y(minable.)150 3688 y Fz(\045Ec)29 b(\045EC)h(\045Ex)f(\045EX)h(\045Ey)f(\045EY)h(\045Od)f(\045Oe)h (\045OH)150 3797 y(\045OI)f(\045Om)h(\045OM)f(\045OS)h(\045Ou)f(\045OU) h(\045OV)f(\045Ow)h(\045OW)f(\045Oy)630 3907 y FB(\\Alternate)c (represen)m(tations")f(for)f(the)g(sp)s(eci\014cations)h(that)g(use)e (only)h(the)h(second)f(letter)630 4017 y(\(`)p Fz(\045c)p FB(',)41 b(`)p Fz(\045C)p FB(',)g(and)d(so)h(on\).)1550 3984 y Fo(12)1687 4017 y FB(\(These)f(facilitate)k(compliance)e(with)e (the)h(POSIX)f Fz(date)630 4126 y FB(utilit)m(y)-8 b(.\))150 4286 y Fz(\045\045)384 b FB(A)30 b(literal)i(`)p Fz(\045)p FB('.)275 4447 y(If)d(a)i(con)m(v)m(ersion)h(sp)s(eci\014er)e(is)g(not) h(one)f(of)h(the)f(ab)s(o)m(v)m(e,)i(the)f(b)s(eha)m(vior)f(is)h (unde\014ned.)3229 4414 y Fo(13)275 4582 y FB(Informally)-8 b(,)39 b(a)g Fx(lo)s(cale)44 b FB(is)38 b(the)g(geographic)h(place)f (in)g(whic)m(h)f(a)h(program)f(is)h(mean)m(t)h(to)f(run.)61 b(F)-8 b(or)150 4692 y(example,)41 b(a)d(common)g(w)m(a)m(y)h(to)g (abbreviate)f(the)g(date)h(Septem)m(b)s(er)e(4,)k(1991)e(in)f(the)g (United)g(States)p 150 4789 1200 4 v 166 4856 a Fo(12)275 4888 y Fn(If)30 b(y)n(ou)g(don't)h(understand)e(an)n(y)h(of)i(this,)g (don't)f(w)n(orry)g(ab)r(out)f(it;)k(these)d(facilities)i(are)e(mean)n (t)f(to)h(mak)n(e)g(it)g(easier)275 4975 y(to)25 b(\\in)n (ternationalize")i(programs.)35 b(Other)24 b(in)n(ternationalization)j (features)f(are)f(describ)r(ed)g(in)g(Chapter)g(9)g([In)n(terna-)275 5063 y(tionalization)i(with)f Fm(gawk)p Fn(],)h(page)g(156.)166 5134 y Fo(13)275 5166 y Fn(This)k(is)h(b)r(ecause)f(ISO)f(C)i(lea)n(v)n (es)f(the)g(b)r(eha)n(vior)g(of)h(the)e(C)i(v)n(ersion)f(of)h Fm(strftime)g Fn(unde\014ned)e(and)g Fm(gawk)i Fn(uses)f(the)275 5253 y(system's)e(v)n(ersion)g(of)g Fm(strftime)i Fn(if)e(it's)h (there.)43 b(T)n(ypically)-6 b(,)30 b(the)f(con)n(v)n(ersion)g(sp)r (eci\014er)g(either)g(do)r(es)g(not)g(app)r(ear)g(in)275 5340 y(the)c(returned)g(string)h(or)g(app)r(ears)g(literally)-6 b(.)p eop end %%Page: 146 158 TeXDict begin 146 157 bop 150 -116 a FB(146)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(is)k(\\9/4/91.")54 b(In)33 b(man)m(y)g(coun)m(tries)i(in)e (Europ)s(e,)h(ho)m(w)m(ev)m(er,)i(it)e(is)f(abbreviated)h(\\4.9.91.")54 b(Th)m(us,)34 b(the)150 408 y(`)p Fz(\045x)p FB(')i(sp)s(eci\014cation) g(in)f(a)h Fz("US")f FB(lo)s(cale)i(migh)m(t)g(pro)s(duce)d(`)p Fz(9/4/91)p FB(',)i(while)g(in)f(a)h Fz("EUROPE")d FB(lo)s(cale,)39 b(it)150 518 y(migh)m(t)i(pro)s(duce)e(`)p Fz(4.9.91)p FB('.)70 b(The)40 b(ISO)f(C)h(standard)g(de\014nes)g(a)g(default)h Fz("C")f FB(lo)s(cale,)k(whic)m(h)d(is)f(an)150 628 y(en)m(vironmen)m (t)31 b(that)g(is)f(t)m(ypical)i(of)f(what)f(most)h(C)f(programmers)g (are)g(used)g(to.)275 760 y(A)i(public-domain)g(C)f(v)m(ersion)i(of)f Fz(strftime)e FB(is)i(supplied)f(with)h Fz(gawk)f FB(for)h(systems)g (that)h(are)g(not)150 870 y(y)m(et)40 b(fully)f(standards-complian)m (t.)69 b(It)39 b(supp)s(orts)f(all)i(of)f(the)h(just)f(listed)g(format) h(sp)s(eci\014cations.)68 b(If)150 979 y(that)29 b(v)m(ersion)f(is)g (used)f(to)i(compile)g Fz(gawk)d FB(\(see)j(App)s(endix)d(B)j ([Installing)f Fz(gawk)p FB(],)g(page)h(260\),)h(then)e(the)150 1089 y(follo)m(wing)k(additional)f(format)g(sp)s(eci\014cations)g(are)g (a)m(v)-5 b(ailable:)150 1245 y Fz(\045k)384 b FB(The)25 b(hour)f(\(24-hour)i(clo)s(c)m(k\))h(as)f(a)g(decimal)g(n)m(um)m(b)s (er)e(\(0{23\).)42 b(Single-digit)27 b(n)m(um)m(b)s(ers)d(are)630 1354 y(padded)29 b(with)h(a)h(space.)150 1510 y Fz(\045l)384 b FB(The)25 b(hour)f(\(12-hour)i(clo)s(c)m(k\))h(as)f(a)g(decimal)g(n)m (um)m(b)s(er)e(\(1{12\).)42 b(Single-digit)27 b(n)m(um)m(b)s(ers)d(are) 630 1620 y(padded)29 b(with)h(a)h(space.)150 1775 y Fz(\045N)384 b FB(The)30 b(\\Emp)s(eror/Era")g(name.)41 b(Equiv)-5 b(alen)m(t)31 b(to)g Fz(\045C)p FB(.)150 1931 y Fz(\045o)384 b FB(The)30 b(\\Emp)s(eror/Era")g(y)m(ear.)42 b(Equiv)-5 b(alen)m(t)31 b(to)g Fz(\045y)p FB(.)150 2087 y Fz(\045s)384 b FB(The)30 b(time)h(as)g(a)f(decimal)i(timestamp)f(in)f(seconds)g (since)h(the)f(ep)s(o)s(c)m(h.)150 2243 y Fz(\045v)384 b FB(The)30 b(date)h(in)f(VMS)g(format)h(\(e.g.,)h(`)p Fz(20-JUN-1991)p FB('\).)275 2398 y(Additionally)-8 b(,)36 b(the)e(alternate)i(represen)m(tations)f(are)g(recognized)g(but)f (their)g(normal)g(represen)m(ta-)150 2508 y(tions)d(are)f(used.)275 2641 y(This)g(example)i(is)f(an)g Fz(awk)f FB(implemen)m(tation)j(of)e (the)g(POSIX)f Fz(date)g FB(utilit)m(y)-8 b(.)45 b(Normally)-8 b(,)33 b(the)e Fz(date)150 2750 y FB(utilit)m(y)39 b(prin)m(ts)f(the)g (curren)m(t)g(date)g(and)g(time)g(of)g(da)m(y)h(in)e(a)i(w)m(ell-kno)m (wn)g(format.)63 b(Ho)m(w)m(ev)m(er,)43 b(if)38 b(y)m(ou)150 2860 y(pro)m(vide)26 b(an)g(argumen)m(t)h(to)g(it)f(that)h(b)s(egins)f (with)f(a)i(`)p Fz(+)p FB(',)g Fz(date)e FB(copies)i(nonformat)f(sp)s (eci\014er)f(c)m(haracters)150 2969 y(to)35 b(the)g(standard)f(output)g (and)g(in)m(terprets)h(the)g(curren)m(t)g(time)g(according)g(to)h(the)f (format)g(sp)s(eci\014ers)150 3079 y(in)30 b(the)h(string.)40 b(F)-8 b(or)31 b(example:)390 3212 y Fz($)47 b(date)g('+Today)f(is)h (\045A,)g(\045B)g(\045d,)g(\045Y.')410 3325 y Fy(a)533 3321 y Fz(Today)g(is)g(Thursday,)e(September)g(14,)i(2000.)275 3454 y FB(Here)31 b(is)f(the)h Fz(gawk)e FB(v)m(ersion)i(of)g(the)g Fz(date)e FB(utilit)m(y)-8 b(.)43 b(It)30 b(has)h(a)g(shell)f(\\wrapp)s (er")g(to)h(handle)f(the)h(`)p Fz(-u)p FB(')150 3563 y(option,)g(whic)m(h)f(requires)g(that)h Fz(date)e FB(run)g(as)i(if)f (the)h(time)g(zone)g(is)f(set)h(to)g(UTC:)390 3696 y Fz(#!)47 b(/bin/sh)390 3806 y(#)390 3915 y(#)g(date)g(---)g (approximate)e(the)i(P1003.2)e('date')i(command)390 4134 y(case)g($1)g(in)390 4244 y(-u\))95 b(TZ=UTC0)236 b(#)48 b(use)f(UTC)629 4354 y(export)f(TZ)629 4463 y(shift)g(;;)390 4573 y(esac)390 4792 y(gawk)h('BEGIN)93 b({)581 4902 y(format)46 b(=)h("\045a)g(\045b)h(\045d)f(\045H:\045M:\045S)e(\045Z)i (\045Y")581 5011 y(exitval)f(=)h(0)581 5230 y(if)g(\(ARGC)f(>)i(2\))772 5340 y(exitval)e(=)h(1)p eop end %%Page: 147 159 TeXDict begin 147 158 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(147)581 299 y Fz(else)47 b(if)g(\(ARGC)f(==)h (2\))g({)772 408 y(format)f(=)h(ARGV[1])772 518 y(if)g(\(format)f(~)h (/^\\+/\))963 628 y(format)f(=)h(substr\(format,)d(2\))143 b(#)47 b(remove)f(leading)g(+)581 737 y(})581 847 y(print)g (strftime\(format\))581 956 y(exit)h(exitval)390 1066 y(}')g("$@")150 1259 y Fj(8.1.6)63 b(Bit-Manipulation)41 b(F)-10 b(unctions)42 b(of)g Fh(gawk)390 1406 y Fw(I)33 b(c)-5 b(an)33 b(explain)h(it)e(for)h(you,)g(but)f(I)h(c)-5 b(an)c('t)33 b(understand)i(it)d(for)h(you.)390 1515 y FB(Anon)m(ymous)275 1647 y(Man)m(y)g(languages)h(pro)m(vide)f(the)h (abilit)m(y)g(to)g(p)s(erform)d Fx(bit)m(wise)39 b FB(op)s(erations)33 b(on)g(t)m(w)m(o)h(in)m(teger)g(n)m(um-)150 1756 y(b)s(ers.)73 b(In)40 b(other)i(w)m(ords,)i(the)e(op)s(eration)f(is)h(p)s(erformed)e (on)h(eac)m(h)i(successiv)m(e)g(pair)e(of)g(bits)h(in)f(the)150 1866 y(op)s(erands.)g(Three)31 b(common)g(op)s(erations)h(are)f(bit)m (wise)h(AND,)g(OR,)f(and)f(X)m(OR.)i(The)e(op)s(erations)i(are)150 1976 y(describ)s(ed)d(in)h(T)-8 b(able)31 b(8.6.)1954 2287 y Fr(Bit)g(op)s(erator)p 1511 2454 4 110 v 1640 2422 a FB(AND)p 1972 2454 V 290 w(OR)p 2433 2454 V 291 w(X)m(OR)1036 2531 y Fr(Op)s(erands)p 1511 2563 V 184 w FB(0)p 1741 2563 V 185 w(1)p 1972 2563 V 186 w(0)p 2202 2563 V 186 w(1)p 2433 2563 V 185 w(0)p 2664 2563 V 186 w(1)p 1036 2567 1859 4 v 1511 2583 4 17 v 1972 2583 V 2433 2583 V 1205 2661 a(0)p 1511 2693 4 110 v 355 w(0)185 b(0)p 1972 2693 V 186 w(0)h(1)p 2433 2693 V 185 w(0)g(1)1205 2770 y(1)p 1511 2802 V 355 w(0)f(1)p 1972 2802 V 186 w(1)h(1)p 2433 2802 V 185 w(1)g(0)275 2917 y(T)-8 b(able)31 b(8.6:)41 b(Bit)m(wise)32 b(Op)s(erations)275 3054 y(As)37 b(y)m(ou)h(can)g(see,)j(the)d(result)g(of)f(an)h(AND)h(op) s(eration)f(is)g(1)g(only)g(when)e Fw(b)-5 b(oth)46 b FB(bits)38 b(are)g(1.)63 b(The)150 3164 y(result)37 b(of)h(an)f(OR)f (op)s(eration)i(is)f(1)h(if)f Fw(either)48 b FB(bit)37 b(is)g(1.)62 b(The)36 b(result)i(of)f(an)g(X)m(OR)g(op)s(eration)h(is)f (1)h(if)150 3273 y(either)33 b(bit)f(is)g(1,)i(but)d(not)i(b)s(oth.)46 b(The)31 b(next)i(op)s(eration)g(is)f(the)g Fx(complemen)m(t)r FB(;)j(the)e(complemen)m(t)g(of)g(1)150 3383 y(is)c(0)h(and)f(the)g (complemen)m(t)i(of)e(0)h(is)f(1.)41 b(Th)m(us,)29 b(this)g(op)s (eration)h(\\\015ips")f(all)h(the)g(bits)f(of)g(a)h(giv)m(en)g(v)-5 b(alue.)275 3514 y(Finally)d(,)39 b(t)m(w)m(o)e(other)f(common)g(op)s (erations)h(are)f(to)h(shift)e(the)i(bits)e(left)i(or)f(righ)m(t.)58 b(F)-8 b(or)37 b(example,)150 3624 y(if)g(y)m(ou)g(ha)m(v)m(e)h(a)g (bit)f(string)g(`)p Fz(10111001)p FB(')e(and)h(y)m(ou)h(shift)g(it)h (righ)m(t)f(b)m(y)g(three)g(bits,)i(y)m(ou)e(end)f(up)g(with)150 3733 y(`)p Fz(00010111)p FB('.)609 3700 y Fo(14)717 3733 y FB(If)26 b(y)m(ou)g(start)h(o)m(v)m(er)h(again)f(with)f(`)p Fz(10111001)p FB(')f(and)g(shift)h(it)h(left)g(b)m(y)f(three)h(bits,)g (y)m(ou)g(end)150 3843 y(up)d(with)i(`)p Fz(11001000)p FB('.)37 b Fz(gawk)24 b FB(pro)m(vides)i(built-in)f(functions)g(that)h (implemen)m(t)g(the)g(bit)m(wise)g(op)s(erations)150 3952 y(just)k(describ)s(ed.)39 b(They)30 b(are:)150 4193 y Fz(and\()p Fk(v1)p Fz(,)e Fk(v2)11 b Fz(\))463 b FB(Returns)34 b(the)h(bit)m(wise)h(AND)f(of)g(the)g(v)-5 b(alues)35 b(pro)m(vided)g(b)m(y)1132 4303 y Fx(v1)j FB(and)30 b Fx(v2)p FB(.)150 4521 y Fz(or\()p Fk(v1)p Fz(,)f Fk(v2)11 b Fz(\))510 b FB(Returns)27 b(the)i(bit)m(wise)g(OR)e(of)i(the)f(v)-5 b(alues)28 b(pro)m(vided)g(b)m(y)g Fx(v1)1132 4630 y FB(and)i Fx(v2)p FB(.)150 4848 y Fz(xor\()p Fk(v1)p Fz(,)e Fk(v2)11 b Fz(\))463 b FB(Returns)34 b(the)i(bit)m(wise)f(X)m(OR)h(of)f (the)g(v)-5 b(alues)36 b(pro)m(vided)f(b)m(y)1132 4957 y Fx(v1)j FB(and)30 b Fx(v2)p FB(.)p 150 5154 1200 4 v 166 5221 a Fo(14)275 5253 y Fn(This)20 b(example)g(sho)n(ws)g(that)g (0's)g(come)h(in)e(on)h(the)f(left)i(side.)33 b(F)-6 b(or)19 b Fm(gawk)p Fn(,)j(this)e(is)g(alw)n(a)n(ys)h(true,)g(but)e(in) h(some)g(languages,)275 5340 y(it's)26 b(p)r(ossible)h(to)f(ha)n(v)n(e) f(the)g(left)h(side)h(\014ll)e(with)h(1's.)36 b(Ca)n(v)n(eat)26 b(emptor.)p eop end %%Page: 148 160 TeXDict begin 148 159 bop 150 -116 a FB(148)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz(compl\()p Fk(val)11 b Fz(\))491 b FB(Returns)30 b(the)g(bit)m(wise)h(complemen)m(t)h(of)e Fx(v)-5 b(al)p FB(.)150 517 y Fz(lshift\()p Fk(val)p Fz(,)27 b Fk(count)11 b Fz(\))128 b FB(Returns)30 b(the)g(v)-5 b(alue)31 b(of)g Fx(v)-5 b(al)p FB(,)31 b(shifted)f(left)h(b)m(y)f Fx(coun)m(t)j FB(bits.)150 734 y Fz(rshift\()p Fk(val)p Fz(,)27 b Fk(count)11 b Fz(\))128 b FB(Returns)30 b(the)g(v)-5 b(alue)31 b(of)g Fx(v)-5 b(al)p FB(,)31 b(shifted)f(righ)m(t)h(b)m(y)f Fx(coun)m(t)j FB(bits.)275 869 y(F)-8 b(or)33 b(all)h(of)f(these)h (functions,)f(\014rst)f(the)h(double-precision)g(\015oating-p)s(oin)m (t)h(v)-5 b(alue)34 b(is)f(con)m(v)m(erted)h(to)150 979 y(the)f(widest)h(C)e(unsigned)g(in)m(teger)j(t)m(yp)s(e,)f(then)f(the)h (bit)m(wise)f(op)s(eration)h(is)f(p)s(erformed.)48 b(If)33 b(the)g(result)150 1088 y(cannot)d(b)s(e)f(represen)m(ted)g(exactly)i (as)f(a)g(C)e Fz(double)p FB(,)h(leading)h(nonzero)f(bits)h(are)f(remo) m(v)m(ed)i(one)e(b)m(y)h(one)150 1198 y(un)m(til)h(it)h(can)f(b)s(e)g (represen)m(ted)g(exactly)-8 b(.)44 b(The)31 b(result)g(is)g(then)g (con)m(v)m(erted)h(bac)m(k)g(in)m(to)g(a)f(C)g Fz(double)p FB(.)41 b(\(If)150 1308 y(y)m(ou)31 b(don't)f(understand)f(this)h (paragraph,)g(don't)g(w)m(orry)g(ab)s(out)h(it.\))275 1443 y(Here)d(is)g(a)g(user-de\014ned)e(function)i(\(see)g(Section)h (8.2)g([User-De\014ned)f(F)-8 b(unctions],)29 b(page)g(149\))g(that)150 1552 y(illustrates)i(the)g(use)f(of)h(these)f(functions:)390 1665 y Fm(#)39 b(bits2str)i(---)f(turn)h(a)e(byte)h(into)g(readable)h (1's)f(and)g(0's)390 1839 y(function)h(bits2str\(bits,)317 b(data,)40 b(mask\))390 1926 y({)547 2013 y(if)g(\(bits)g(==)g(0\))704 2101 y(return)g("0")547 2275 y(mask)g(=)f(1)547 2362 y(for)h(\(;)f(bits)i(!=)e(0;)h(bits)g(=)g(rshift\(bits,)i(1\)\))704 2449 y(data)e(=)f(\(and\(bits,)j(mask\))e(?)g("1")g(:)f("0"\))h(data) 547 2624 y(while)g(\(\(length\(data\))j(\045)c(8\))h(!=)g(0\))704 2711 y(data)g(=)f("0")h(data)547 2885 y(return)g(data)390 2972 y(})390 3234 y(BEGIN)g({)547 3321 y(printf)g("123)h(=)e (\045s\\n",)i(bits2str\(123\))547 3408 y(printf)f("0123)h(=)e (\045s\\n",)i(bits2str\(0123\))547 3495 y(printf)f("0x99)h(=)e (\045s\\n",)i(bits2str\(0x99\))547 3583 y(comp)f(=)f(compl\(0x99\))547 3670 y(printf)h("compl\(0x99\))i(=)e(\045#x)g(=)f(\045s\\n",)i(comp,)f (bits2str\(comp\))547 3757 y(shift)g(=)g(lshift\(0x99,)i(2\))547 3844 y(printf)e("lshift\(0x99,)j(2\))c(=)h(\045#x)g(=)f(\045s\\n",)i (shift,)f(bits2str\(shift\))547 3931 y(shift)g(=)g(rshift\(0x99,)i(2\)) 547 4018 y(printf)e("rshift\(0x99,)j(2\))c(=)h(\045#x)g(=)f(\045s\\n",) i(shift,)f(bits2str\(shift\))390 4106 y(})150 4241 y FB(This)30 b(program)g(pro)s(duces)f(the)h(follo)m(wing)i(output)e (when)g(run:)390 4353 y Fm($)39 b(gawk)i(-f)e(testbits.awk)406 4443 y Fe(a)508 4440 y Fm(123)h(=)f(01111011)406 4531 y Fe(a)508 4528 y Fm(0123)h(=)f(01010011)406 4618 y Fe(a)508 4615 y Fm(0x99)h(=)f(10011001)406 4705 y Fe(a)508 4702 y Fm(compl\(0x99\))i(=)f(0xffffff66)h(=)f (111111111111111111111111011001)q(10)406 4792 y Fe(a)508 4789 y Fm(lshift\(0x99,)i(2\))d(=)h(0x264)g(=)g(0000001001100100)406 4879 y Fe(a)508 4876 y Fm(rshift\(0x99,)i(2\))d(=)h(0x26)g(=)f (00100110)275 5011 y FB(The)27 b Fz(bits2str)e FB(function)j(turns)f(a) h(binary)f(n)m(um)m(b)s(er)f(in)m(to)j(a)g(string.)39 b(The)28 b(n)m(um)m(b)s(er)e Fz(1)i FB(represen)m(ts)g(a)150 5121 y(binary)j(v)-5 b(alue)33 b(where)f(the)g(righ)m(tmost)h(bit)f(is) g(set)h(to)g(1.)46 b(Using)33 b(this)f(mask,)g(the)h(function)f(rep)s (eatedly)150 5230 y(c)m(hec)m(ks)c(the)g(righ)m(tmost)g(bit.)39 b(ANDing)28 b(the)g(mask)f(with)g(the)g(v)-5 b(alue)27 b(indicates)h(whether)f(the)g(righ)m(tmost)150 5340 y(bit)33 b(is)f(1)h(or)g(not.)48 b(If)32 b(so,)h(a)g Fz("1")f FB(is)h(concatenated)h(on)m(to)g(the)f(fron)m(t)g(of)g(the)f(string.)48 b(Otherwise,)33 b(a)g Fz("0")p eop end %%Page: 149 161 TeXDict begin 149 160 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(149)150 299 y(is)32 b(added.)46 b(The)31 b(v)-5 b(alue)33 b(is)f(then)g(shifted)g(righ)m(t)g(b)m(y)h (one)f(bit)g(and)g(the)g(lo)s(op)g(con)m(tin)m(ues)i(un)m(til)e(there)h (are)150 408 y(no)d(more)h(1)g(bits.)275 552 y(If)23 b(the)h(initial)h(v)-5 b(alue)24 b(is)g(zero)h(it)f(returns)f(a)h (simple)g Fz("0")p FB(.)38 b(Otherwise,)25 b(at)f(the)g(end,)h(it)f (pads)f(the)h(v)-5 b(alue)150 661 y(with)30 b(zeros)h(to)g(represen)m (t)g(m)m(ultiples)g(of)f(8-bit)h(quan)m(tities.)42 b(This)30 b(is)g(t)m(ypical)i(in)e(mo)s(dern)f(computers.)275 804 y(The)37 b(main)g(co)s(de)h(in)f(the)h Fz(BEGIN)e FB(rule)i(sho)m(ws)f (the)h(di\013erence)g(b)s(et)m(w)m(een)g(the)g(decimal)h(and)e(o)s (ctal)150 914 y(v)-5 b(alues)26 b(for)f(the)g(same)h(n)m(um)m(b)s(ers)e (\(see)i(Section)g(5.1.2)h([Octal)g(and)e(Hexadecimal)i(Num)m(b)s (ers],)e(page)h(73\),)150 1024 y(and)k(then)g(demonstrates)h(the)f (results)g(of)h(the)f Fz(compl)p FB(,)g Fz(lshift)p FB(,)f(and)g Fz(rshift)g FB(functions.)150 1232 y Fj(8.1.7)63 b(Using)42 b Fh(gawk)p Fj('s)g(String-T)-10 b(ranslation)42 b(F)-10 b(unctions)150 1379 y Fz(gawk)37 b FB(pro)m(vides)h(facilities)j(for)d (in)m(ternationalizing)j Fz(awk)c FB(programs.)65 b(These)38 b(include)g(the)g(functions)150 1488 y(describ)s(ed)d(in)i(the)g(follo) m(wing)h(list.)60 b(The)36 b(descriptions)g(here)h(are)g(purp)s(osely)e (brief.)59 b(See)37 b(Chapter)f(9)150 1598 y([In)m(ternationalization) 48 b(with)d Fz(gawk)p FB(],)i(page)f(156,)k(for)44 b(the)h(full)g (story)-8 b(.)84 b(Optional)45 b(parameters)h(are)150 1707 y(enclosed)31 b(in)f(square)g(brac)m(k)m(ets)i(\([)f(]\):)150 1880 y Fz(dcgettext\()p Fk(string)36 b FB([)p Fz(,)31 b Fk(domain)39 b FB([)p Fz(,)30 b Fk(category)11 b FB(]])p Fz(\))630 1989 y FB(This)36 b(function)g(returns)f(the)i(translation)g (of)g Fx(string)44 b FB(in)36 b(text)i(domain)e Fx(domain)h FB(for)f(lo-)630 2099 y(cale)k(category)g Fx(category)p FB(.)66 b(The)37 b(default)h(v)-5 b(alue)39 b(for)f Fx(domain)g FB(is)g(the)g(curren)m(t)g(v)-5 b(alue)39 b(of)630 2209 y Fz(TEXTDOMAIN)p FB(.)f(The)30 b(default)g(v)-5 b(alue)31 b(for)f Fx(category)41 b FB(is)30 b Fz("LC_MESSAGES")p FB(.)150 2377 y Fz(dcngettext\()p Fk(string1)p Fz(,)25 b Fk(string2)p Fz(,)j Fk(number)39 b FB([)p Fz(,)31 b Fk(domain)39 b FB([)p Fz(,)30 b Fk(category)11 b FB(]])p Fz(\))630 2486 y FB(This)40 b(function)h(returns)f(the)i(plural)e(form) h(used)f(for)h Fx(n)m(um)m(b)s(er)47 b FB(of)41 b(the)h(translation)g (of)630 2596 y Fx(string1)33 b FB(and)24 b Fx(string2)32 b FB(in)25 b(text)h(domain)f Fx(domain)f FB(for)h(lo)s(cale)i(category) g Fx(category)p FB(.)41 b Fx(string1)630 2705 y FB(is)h(the)g(English)f (singular)g(v)-5 b(arian)m(t)43 b(of)f(a)g(message,)k(and)41 b Fx(string2)49 b FB(the)42 b(English)f(plural)630 2815 y(v)-5 b(arian)m(t)30 b(of)f(the)g(same)g(message.)41 b(The)29 b(default)g(v)-5 b(alue)29 b(for)f Fx(domain)h FB(is)g(the)g(curren)m(t)f(v)-5 b(alue)630 2925 y(of)31 b Fz(TEXTDOMAIN)p FB(.)37 b(The)30 b(default)h(v)-5 b(alue)31 b(for)f Fx(category)40 b FB(is)30 b Fz("LC_MESSAGES")p FB(.)150 3093 y Fz(bindtextdomain\()p Fk(directory)k FB([)p Fz(,)d Fk(domain)11 b FB(])p Fz(\))630 3202 y FB(This)37 b(function)g(allo)m(ws)i(y)m(ou)f(to)g(sp)s(ecify)f(the)h (directory)g(in)f(whic)m(h)h Fz(gawk)e FB(will)i(lo)s(ok)g(for)630 3312 y(message)27 b(translation)h(\014les,)f(in)f(case)i(they)e(will)h (not)g(or)f(cannot)h(b)s(e)f(placed)g(in)h(the)f(\\stan-)630 3421 y(dard")i(lo)s(cations)i(\(e.g.,)h(during)c(testing\).)41 b(It)29 b(returns)e(the)i(directory)g(in)f(whic)m(h)g Fx(domain)630 3531 y FB(is)i(\\b)s(ound.")630 3670 y(The)i(default)h Fx(domain)f FB(is)h(the)g(v)-5 b(alue)33 b(of)g Fz(TEXTDOMAIN)p FB(.)45 b(If)32 b Fx(directory)41 b FB(is)33 b(the)f(n)m(ull)h(string) 630 3779 y(\()p Fz("")p FB(\),)e(then)f Fz(bindtextdomain)c FB(returns)j(the)i(curren)m(t)f(binding)f(for)i(the)f(giv)m(en)i Fx(domain)p FB(.)150 4025 y FA(8.2)68 b(User-De\014ned)45 b(F)-11 b(unctions)150 4184 y FB(Complicated)36 b Fz(awk)e FB(programs)g(can)h(often)h(b)s(e)e(simpli\014ed)g(b)m(y)g(de\014ning)g (y)m(our)h(o)m(wn)g(functions.)54 b(User-)150 4294 y(de\014ned)39 b(functions)h(can)g(b)s(e)g(called)i(just)d(lik)m(e)j(built-in)e(ones)h (\(see)g(Section)g(5.13)h([F)-8 b(unction)41 b(Calls],)150 4404 y(page)31 b(89\),)h(but)e(it)h(is)f(up)f(to)i(y)m(ou)g(to)g (de\014ne)f(them,)g(i.e.,)i(to)f(tell)h Fz(awk)d FB(what)i(they)f (should)f(do.)150 4611 y Fj(8.2.1)63 b(F)-10 b(unction)41 b(De\014nition)h(Syn)m(tax)150 4758 y FB(De\014nitions)32 b(of)g(functions)f(can)h(app)s(ear)g(an)m(ywhere)f(b)s(et)m(w)m(een)i (the)e(rules)h(of)g(an)f Fz(awk)g FB(program.)45 b(Th)m(us,)150 4868 y(the)40 b(general)g(form)f(of)g(an)h Fz(awk)e FB(program)h(is)h (extended)f(to)h(include)f(sequences)h(of)g(rules)f Fw(and)49 b FB(user-)150 4978 y(de\014ned)30 b(function)i(de\014nitions.)43 b(There)31 b(is)h(no)g(need)f(to)h(put)f(the)h(de\014nition)f(of)h(a)g (function)f(b)s(efore)g(all)150 5087 y(uses)24 b(of)g(the)h(function.) 38 b(This)24 b(is)g(b)s(ecause)h Fz(awk)e FB(reads)h(the)h(en)m(tire)g (program)f(b)s(efore)g(starting)h(to)h(execute)150 5197 y(an)m(y)31 b(of)f(it.)275 5340 y(The)f(de\014nition)h(of)h(a)g (function)f(named)g Fx(name)35 b FB(lo)s(oks)c(lik)m(e)h(this:)p eop end %%Page: 150 162 TeXDict begin 150 161 bop 150 -116 a FB(150)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(function)46 b Fk(name)11 b Fz(\()p Fk(parameter-list)f Fz(\))390 408 y({)629 518 y Fk(body-of-function)390 628 y Fz(})150 767 y Fx(name)38 b FB(is)c(the)f(name)h(of)f(the)h(function) f(to)h(de\014ne.)48 b(A)34 b(v)-5 b(alid)34 b(function)f(name)g(is)g (lik)m(e)i(a)f(v)-5 b(alid)33 b(v)-5 b(ariable)150 877 y(name:)40 b(a)29 b(sequence)g(of)g(letters,)h(digits,)g(and)e (underscores)g(that)i(do)s(esn't)e(start)h(with)g(a)g(digit.)41 b(Within)150 986 y(a)25 b(single)f Fz(awk)g FB(program,)h(an)m(y)g (particular)f(name)h(can)f(only)h(b)s(e)e(used)h(as)g(a)h(v)-5 b(ariable,)26 b(arra)m(y)-8 b(,)27 b(or)d(function.)275 1126 y Fx(parameter-list)i FB(is)d(a)g(list)h(of)f(the)g(function's)g (argumen)m(ts)g(and)g(lo)s(cal)h(v)-5 b(ariable)24 b(names,)h (separated)e(b)m(y)150 1235 y(commas.)44 b(When)32 b(the)f(function)g (is)h(called,)h(the)e(argumen)m(t)h(names)f(are)h(used)f(to)h(hold)f (the)g(argumen)m(t)150 1345 y(v)-5 b(alues)31 b(giv)m(en)i(in)d(the)i (call.)44 b(The)31 b(lo)s(cal)h(v)-5 b(ariables)32 b(are)f(initialized) i(to)f(the)g(empt)m(y)f(string.)43 b(A)31 b(function)150 1455 y(cannot)37 b(ha)m(v)m(e)g(t)m(w)m(o)h(parameters)e(with)g(the)g (same)h(name,)g(nor)f(ma)m(y)h(it)f(ha)m(v)m(e)i(a)e(parameter)h(with)f (the)150 1564 y(same)31 b(name)f(as)h(the)f(function)g(itself.)275 1704 y(The)k Fx(b)s(o)s(dy-of-function)g FB(consists)h(of)g Fz(awk)f FB(statemen)m(ts.)56 b(It)35 b(is)g(the)h(most)f(imp)s(ortan)m (t)g(part)g(of)g(the)150 1813 y(de\014nition,)28 b(b)s(ecause)f(it)h (sa)m(ys)f(what)g(the)h(function)e(should)h(actually)h Fw(do)p FB(.)41 b(The)27 b(argumen)m(t)g(names)g(exist)150 1923 y(to)32 b(giv)m(e)h(the)e(b)s(o)s(dy)f(a)h(w)m(a)m(y)h(to)g(talk)h (ab)s(out)e(the)g(argumen)m(ts;)h(lo)s(cal)h(v)-5 b(ariables)31 b(exist)h(to)g(giv)m(e)h(the)f(b)s(o)s(dy)150 2032 y(places)f(to)g(k)m (eep)g(temp)s(orary)f(v)-5 b(alues.)275 2172 y(Argumen)m(t)27 b(names)h(are)g(not)g(distinguished)e(syn)m(tactically)31 b(from)c(lo)s(cal)i(v)-5 b(ariable)28 b(names.)40 b(Instead,)150 2281 y(the)31 b(n)m(um)m(b)s(er)e(of)i(argumen)m(ts)g(supplied)e(when)h (the)h(function)f(is)h(called)h(determines)e(ho)m(w)h(man)m(y)g(argu-) 150 2391 y(men)m(t)e(v)-5 b(ariables)30 b(there)f(are.)41 b(Th)m(us,)28 b(if)h(three)g(argumen)m(t)g(v)-5 b(alues)29 b(are)h(giv)m(en,)g(the)f(\014rst)f(three)h(names)g(in)150 2501 y Fx(parameter-list)34 b FB(are)d(argumen)m(ts)f(and)g(the)h(rest) f(are)h(lo)s(cal)h(v)-5 b(ariables.)275 2640 y(It)34 b(follo)m(ws)i(that)f(if)g(the)g(n)m(um)m(b)s(er)e(of)i(argumen)m(ts)g (is)g(not)g(the)g(same)g(in)f(all)i(calls)g(to)f(the)g(function,)150 2750 y(some)23 b(of)f(the)g(names)h(in)e Fx(parameter-list)26 b FB(ma)m(y)d(b)s(e)f(argumen)m(ts)g(on)g(some)h(o)s(ccasions)g(and)f (lo)s(cal)h(v)-5 b(ariables)150 2859 y(on)25 b(others.)39 b(Another)25 b(w)m(a)m(y)h(to)f(think)g(of)g(this)g(is)g(that)h (omitted)g(argumen)m(ts)f(default)g(to)h(the)f(n)m(ull)g(string.)275 2999 y(Usually)37 b(when)e(y)m(ou)i(write)g(a)g(function,)h(y)m(ou)f (kno)m(w)f(ho)m(w)h(man)m(y)g(names)f(y)m(ou)h(in)m(tend)g(to)g(use)f (for)150 3108 y(argumen)m(ts)e(and)f(ho)m(w)h(man)m(y)g(y)m(ou)g(in)m (tend)f(to)i(use)e(as)h(lo)s(cal)h(v)-5 b(ariables.)51 b(It)34 b(is)g(con)m(v)m(en)m(tional)j(to)d(place)150 3218 y(some)28 b(extra)g(space)g(b)s(et)m(w)m(een)g(the)g(argumen)m(ts) g(and)f(the)g(lo)s(cal)i(v)-5 b(ariables,)29 b(in)e(order)g(to)i(do)s (cumen)m(t)e(ho)m(w)150 3328 y(y)m(our)j(function)g(is)h(supp)s(osed)d (to)j(b)s(e)f(used.)275 3467 y(During)f(execution)i(of)f(the)g (function)f(b)s(o)s(dy)-8 b(,)29 b(the)h(argumen)m(ts)g(and)f(lo)s(cal) j(v)-5 b(ariable)30 b(v)-5 b(alues)30 b(hide,)g(or)150 3577 y Fx(shado)m(w)p FB(,)35 b(an)m(y)g(v)-5 b(ariables)34 b(of)h(the)f(same)h(names)f(used)f(in)h(the)g(rest)h(of)f(the)g (program.)52 b(The)34 b(shado)m(w)m(ed)150 3686 y(v)-5 b(ariables)26 b(are)g(not)f(accessible)i(in)e(the)h(function)f (de\014nition,)h(b)s(ecause)f(there)h(is)f(no)g(w)m(a)m(y)i(to)f(name)f (them)150 3796 y(while)30 b(their)h(names)f(ha)m(v)m(e)h(b)s(een)f(tak) m(en)h(a)m(w)m(a)m(y)h(for)e(the)h(lo)s(cal)g(v)-5 b(ariables.)42 b(All)30 b(other)h(v)-5 b(ariables)31 b(used)e(in)150 3905 y(the)i Fz(awk)e FB(program)h(can)h(b)s(e)f(referenced)g(or)g(set) h(normally)g(in)f(the)g(function's)h(b)s(o)s(dy)-8 b(.)275 4045 y(The)33 b(argumen)m(ts)h(and)g(lo)s(cal)h(v)-5 b(ariables)34 b(last)h(only)f(as)h(long)f(as)g(the)g(function)g(b)s(o)s (dy)e(is)i(executing.)150 4154 y(Once)e(the)g(b)s(o)s(dy)f(\014nishes,) g(y)m(ou)h(can)h(once)f(again)h(access)h(the)e(v)-5 b(ariables)33 b(that)f(w)m(ere)h(shado)m(w)m(ed)f(while)150 4264 y(the)f(function)f (w)m(as)g(running.)275 4403 y(The)h(function)h(b)s(o)s(dy)f(can)h(con)m (tain)i(expressions)e(that)h(call)g(functions.)46 b(They)32 b(can)h(ev)m(en)f(call)i(this)150 4513 y(function,)41 b(either)e(directly)g(or)g(b)m(y)g(w)m(a)m(y)g(of)g(another)g (function.)66 b(When)38 b(this)h(happ)s(ens,)g(w)m(e)g(sa)m(y)h(the)150 4623 y(function)30 b(is)g Fx(recursiv)m(e)p FB(.)42 b(The)29 b(act)j(of)f(a)f(function)g(calling)i(itself)f(is)g(called)g Fx(recursion)p FB(.)275 4762 y(In)g(man)m(y)g Fz(awk)g FB(implemen)m(tations,)j(including)e Fz(gawk)p FB(,)f(the)h(k)m(eyw)m (ord)g Fz(function)d FB(ma)m(y)k(b)s(e)e(abbrevi-)150 4872 y(ated)e Fz(func)p FB(.)39 b(Ho)m(w)m(ev)m(er,)32 b(POSIX)27 b(only)i(sp)s(eci\014es)f(the)h(use)g(of)g(the)f(k)m(eyw)m (ord)i Fz(function)p FB(.)37 b(This)28 b(actually)150 4981 y(has)i(some)h(practical)i(implications.)42 b(If)31 b Fz(gawk)e FB(is)i(in)f(POSIX-compatibilit)m(y)i(mo)s(de)e(\(see)i (Section)f(11.2)150 5091 y([Command-Line)g(Options],)i(page)f(173\),)j (then)c(the)h(follo)m(wing)i(statemen)m(t)f(do)s(es)f Fw(not)41 b FB(de\014ne)31 b(a)i(func-)150 5200 y(tion:)390 5340 y Fz(func)47 b(foo\(\))f({)h(a)h(=)f(sqrt\($1\))f(;)h(print)g(a)g (})p eop end %%Page: 151 163 TeXDict begin 151 162 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(151)150 299 y(Instead)30 b(it)g(de\014nes)f (a)h(rule)g(that,)h(for)e(eac)m(h)i(record,)f(concatenates)j(the)d(v)-5 b(alue)30 b(of)g(the)g(v)-5 b(ariable)31 b(`)p Fz(func)p FB(')150 408 y(with)36 b(the)g(return)f(v)-5 b(alue)36 b(of)g(the)g(function)g(`)p Fz(foo)p FB('.)57 b(If)35 b(the)h(resulting)g(string)g(is)g(non-n)m(ull,)h(the)g(action)150 518 y(is)32 b(executed.)48 b(This)31 b(is)i(probably)e(not)i(what)f(is) g(desired.)46 b(\()p Fz(awk)32 b FB(accepts)i(this)e(input)f(as)i(syn)m (tactically)150 628 y(v)-5 b(alid,)31 b(b)s(ecause)f(functions)g(ma)m (y)h(b)s(e)f(used)g(b)s(efore)f(they)i(are)g(de\014ned)e(in)h Fz(awk)f FB(programs.\))275 761 y(T)-8 b(o)27 b(ensure)g(that)g(y)m (our)h Fz(awk)e FB(programs)h(are)g(p)s(ortable,)h(alw)m(a)m(ys)h(use)e (the)g(k)m(eyw)m(ord)h Fz(function)d FB(when)150 871 y(de\014ning)k(a)i(function.)150 1068 y Fj(8.2.2)63 b(F)-10 b(unction)41 b(De\014nition)h(Examples)150 1215 y FB(Here)d(is)f(an)g (example)h(of)g(a)f(user-de\014ned)f(function,)j(called)g Fz(myprint)p FB(,)e(that)h(tak)m(es)h(a)f(n)m(um)m(b)s(er)e(and)150 1325 y(prin)m(ts)30 b(it)h(in)f(a)h(sp)s(eci\014c)f(format:)390 1459 y Fz(function)46 b(myprint\(num\))390 1568 y({)629 1678 y(printf)g("\0456.3g\\n",)f(num)390 1787 y(})150 1921 y FB(T)-8 b(o)31 b(illustrate,)h(here)e(is)g(an)h Fz(awk)e FB(rule)h(that)h(uses)f(our)g Fz(myprint)e FB(function:)390 2055 y Fz($3)47 b(>)h(0)238 b({)47 b(myprint\($3\))e(})150 2188 y FB(This)22 b(program)g(prin)m(ts,)i(in)e(our)f(sp)s(ecial)i (format,)i(all)e(the)g(third)e(\014elds)h(that)h(con)m(tain)h(a)f(p)s (ositiv)m(e)g(n)m(um)m(b)s(er)150 2298 y(in)30 b(our)g(input.)40 b(Therefore,)30 b(when)f(giv)m(en)j(the)e(follo)m(wing:)438 2432 y Fz(1.2)142 b(3.4)190 b(5.6)143 b(7.8)438 2541 y(9.10)46 b(11.12)h(-13.14)f(15.16)390 2651 y(17.18)g(19.20)94 b(21.22)47 b(23.24)150 2785 y FB(this)30 b(program,)h(using)f(our)f (function)h(to)i(format)e(the)h(results,)f(prin)m(ts:)533 2918 y Fz(5.6)485 3028 y(21.2)275 3161 y FB(This)f(function)h(deletes)i (all)f(the)f(elemen)m(ts)i(in)e(an)h(arra)m(y:)390 3295 y Fz(function)46 b(delarray\(a,)187 b(i\))390 3405 y({)581 3514 y(for)47 b(\(i)g(in)g(a\))724 3624 y(delete)f(a[i])390 3733 y(})275 3867 y FB(When)23 b(w)m(orking)i(with)f(arra)m(ys,)i(it)e (is)g(often)h(necessary)f(to)h(delete)g(all)g(the)g(elemen)m(ts)g(in)f (an)g(arra)m(y)h(and)150 3977 y(start)32 b(o)m(v)m(er)h(with)e(a)h(new) f(list)h(of)g(elemen)m(ts)h(\(see)g(Section)f(7.6)h([The)e Fz(delete)f FB(Statemen)m(t],)k(page)e(120\).)150 4086 y(Instead)f(of)g(ha)m(ving)h(to)g(rep)s(eat)f(this)g(lo)s(op)g(ev)m (erywhere)g(that)h(y)m(ou)g(need)e(to)i(clear)g(out)g(an)f(arra)m(y)-8 b(,)32 b(y)m(our)150 4196 y(program)h(can)g(just)f(call)i Fz(delarray)p FB(.)45 b(\(This)33 b(guaran)m(tees)h(p)s(ortabilit)m(y) -8 b(.)49 b(The)32 b(use)h(of)g(`)p Fz(delete)c Fk(array)11 b FB(')150 4306 y(to)31 b(delete)h(the)e(con)m(ten)m(ts)i(of)f(an)f(en) m(tire)h(arra)m(y)g(is)g(a)g(nonstandard)e(extension.\))275 4439 y(The)d(follo)m(wing)j(is)e(an)g(example)h(of)g(a)f(recursiv)m(e)h (function.)39 b(It)28 b(tak)m(es)g(a)g(string)f(as)h(an)f(input)f (param-)150 4549 y(eter)g(and)g(returns)e(the)i(string)g(in)f(bac)m(kw) m(ards)h(order.)39 b(Recursiv)m(e)27 b(functions)e(m)m(ust)h(alw)m(a)m (ys)h(ha)m(v)m(e)g(a)f(test)150 4658 y(that)33 b(stops)g(the)f (recursion.)47 b(In)32 b(this)h(case,)h(the)f(recursion)f(terminates)h (when)f(the)h(starting)g(p)s(osition)150 4768 y(is)d(zero,)i(i.e.,)g (when)d(there)i(are)f(no)h(more)f(c)m(haracters)i(left)f(in)f(the)h (string.)390 4902 y Fz(function)46 b(rev\(str,)f(start\))390 5011 y({)581 5121 y(if)i(\(start)f(==)h(0\))772 5230 y(return)f("")p eop end %%Page: 152 164 TeXDict begin 152 163 bop 150 -116 a FB(152)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)581 299 y Fz(return)46 b(\(substr\(str,)e(start,)j(1\))g(rev\(str,)e(start) i(-)g(1\)\))390 408 y(})275 546 y FB(If)29 b(this)i(function)f(is)g(in) g(a)h(\014le)f(named)g(`)p Fz(rev.awk)p FB(',)g(it)g(can)h(b)s(e)f (tested)h(this)f(w)m(a)m(y:)390 684 y Fz($)47 b(echo)g("Don't)f (Panic!")g(|)390 793 y(>)h(gawk)g(--source)f('{)h(print)f(rev\($0,)g (length\($0\)\))f(}')i(-f)g(rev.awk)410 907 y Fy(a)533 903 y Fz(!cinaP)f(t'noD)275 1040 y FB(The)28 b(C)g Fz(ctime)f FB(function)i(tak)m(es)h(a)f(timestamp)g(and)f(returns)g(it)h(in)g(a)g (string,)g(formatted)g(in)g(a)g(w)m(ell-)150 1150 y(kno)m(wn)22 b(fashion.)38 b(The)22 b(follo)m(wing)i(example)f(uses)f(the)h (built-in)f Fz(strftime)e FB(function)i(\(see)i(Section)f(8.1.5)150 1260 y([Using)31 b Fz(gawk)p FB('s)e(Timestamp)h(F)-8 b(unctions],)32 b(page)f(142\))h(to)f(create)h(an)e Fz(awk)g FB(v)m(ersion)h(of)f Fz(ctime)p FB(:)390 1397 y Fz(#)47 b(ctime.awk)390 1507 y(#)390 1616 y(#)g(awk)g(version)f(of)h(C)h (ctime\(3\))d(function)390 1836 y(function)h(ctime\(ts,)188 b(format\))390 1945 y({)581 2055 y(format)46 b(=)h("\045a)g(\045b)h (\045d)f(\045H:\045M:\045S)e(\045Z)i(\045Y")581 2164 y(if)g(\(ts)g(==)g(0\))772 2274 y(ts)g(=)g(systime\(\))332 b(#)48 b(use)e(current)g(time)h(as)g(default)581 2384 y(return)f(strftime\(format,)d(ts\))390 2493 y(})150 2696 y Fj(8.2.3)63 b(Calling)41 b(User-De\014ned)h(F)-10 b(unctions)150 2842 y Fx(Calling)33 b(a)g(function)e FB(means)i(causing)f(the)g(function)g(to)h(run)e(and)h(do)g(its)g(job.) 46 b(A)32 b(function)g(call)i(is)e(an)150 2952 y(expression)e(and)g (its)h(v)-5 b(alue)31 b(is)f(the)g(v)-5 b(alue)31 b(returned)f(b)m(y)g (the)g(function.)275 3090 y(A)g(function)f(call)j(consists)e(of)g(the)g (function)g(name)g(follo)m(w)m(ed)h(b)m(y)f(the)g(argumen)m(ts)h(in)e (paren)m(theses.)150 3199 y Fz(awk)38 b FB(expressions)g(are)h(what)g (y)m(ou)g(write)f(in)h(the)g(call)g(for)g(the)g(argumen)m(ts.)66 b(Eac)m(h)39 b(time)g(the)g(call)h(is)150 3309 y(executed,)h(these)e (expressions)e(are)i(ev)-5 b(aluated,)41 b(and)d(the)g(v)-5 b(alues)39 b(are)f(the)g(actual)i(argumen)m(ts.)64 b(F)-8 b(or)150 3418 y(example,)29 b(here)e(is)g(a)g(call)h(to)g Fz(foo)e FB(with)h(three)g(argumen)m(ts)h(\(the)f(\014rst)g(b)s(eing)f (a)i(string)f(concatenation\):)390 3556 y Fz(foo\(x)46 b(y,)i("lose",)d(4)j(*)f(z\))275 3694 y Fr(Caution:)39 b FB(Whitespace)30 b(c)m(haracters)g(\(spaces)f(and)f(tabs\))g(are)h (not)g(allo)m(w)m(ed)h(b)s(et)m(w)m(een)f(the)f(function)150 3803 y(name)35 b(and)f(the)h(op)s(en-paren)m(thesis)g(of)g(the)g (argumen)m(t)g(list.)55 b(If)34 b(y)m(ou)h(write)g(whitespace)h(b)m(y)e (mistak)m(e,)150 3913 y Fz(awk)24 b FB(migh)m(t)i(think)f(that)g(y)m (ou)h(mean)f(to)h(concatenate)i(a)d(v)-5 b(ariable)26 b(with)f(an)g(expression)g(in)f(paren)m(theses.)150 4022 y(Ho)m(w)m(ev)m(er,)30 b(it)f(notices)f(that)g(y)m(ou)g(used)f(a)h (function)f(name)h(and)f(not)h(a)g(v)-5 b(ariable)28 b(name,)g(and)f(rep)s(orts)g(an)150 4132 y(error.)275 4270 y(When)39 b(a)i(function)f(is)g(called,)k(it)d(is)f(giv)m(en)h(a)g Fw(c)-5 b(opy)49 b FB(of)40 b(the)h(v)-5 b(alues)40 b(of)h(its)f (argumen)m(ts.)71 b(This)39 b(is)150 4379 y(kno)m(wn)32 b(as)g Fx(call)i(b)m(y)e(v)-5 b(alue)p FB(.)46 b(The)32 b(caller)i(ma)m(y)f(use)e(a)i(v)-5 b(ariable)33 b(as)f(the)h (expression)f(for)g(the)g(argumen)m(t,)150 4489 y(but)i(the)h(called)h (function)e(do)s(es)g(not)h(kno)m(w)g(this|it)g(only)g(kno)m(ws)g(what) f(v)-5 b(alue)35 b(the)g(argumen)m(t)g(had.)150 4598 y(F)-8 b(or)31 b(example,)g(if)g(y)m(ou)f(write)h(the)g(follo)m(wing)g (co)s(de:)390 4736 y Fz(foo)47 b(=)g("bar")390 4846 y(z)g(=)h (myfunc\(foo\))150 4983 y FB(then)28 b(y)m(ou)g(should)f(not)h(think)g (of)g(the)g(argumen)m(t)h(to)g Fz(myfunc)d FB(as)i(b)s(eing)g(\\the)h (v)-5 b(ariable)28 b Fz(foo)p FB(.")40 b(Instead,)150 5093 y(think)34 b(of)g(the)g(argumen)m(t)g(as)h(the)f(string)g(v)-5 b(alue)34 b Fz("bar")p FB(.)51 b(If)33 b(the)h(function)g Fz(myfunc)e FB(alters)j(the)g(v)-5 b(alues)150 5202 y(of)31 b(its)f(lo)s(cal)i(v)-5 b(ariables,)31 b(this)f(has)h(no)f(e\013ect)i (on)e(an)m(y)h(other)f(v)-5 b(ariables.)42 b(Th)m(us,)29 b(if)i Fz(myfunc)d FB(do)s(es)i(this:)390 5340 y Fz(function)46 b(myfunc\(str\))p eop end %%Page: 153 165 TeXDict begin 153 164 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(153)390 299 y Fz({)485 408 y(print)47 b(str)485 518 y(str)g(=)h("zzz")485 628 y(print)f(str)390 737 y(})150 896 y FB(to)31 b(c)m(hange)g(its)g(\014rst)e(argumen)m(t)h (v)-5 b(ariable)31 b Fz(str)p FB(,)f(it)h(do)s(es)e Fw(not)40 b FB(c)m(hange)31 b(the)f(v)-5 b(alue)31 b(of)f Fz(foo)f FB(in)h(the)g(caller.)150 1005 y(The)41 b(role)h(of)f Fz(foo)f FB(in)h(calling)i Fz(myfunc)c FB(ended)i(when)f(its)h(v)-5 b(alue)42 b(\()p Fz("bar")p FB(\))f(w)m(as)g(computed.)73 b(If)41 b Fz(str)150 1115 y FB(also)31 b(exists)f(outside)g(of)g Fz(myfunc)p FB(,)f(the)h(function)f(b)s(o)s(dy)f(cannot)j(alter)f(this) g(outer)g(v)-5 b(alue,)31 b(b)s(ecause)f(it)g(is)150 1224 y(shado)m(w)m(ed)h(during)e(the)h(execution)i(of)e Fz(myfunc)f FB(and)h(cannot)h(b)s(e)f(seen)g(or)g(c)m(hanged)h(from)f (there.)275 1383 y(Ho)m(w)m(ev)m(er,)f(when)c(arra)m(ys)i(are)f(the)h (parameters)f(to)h(functions,)g(they)g(are)f Fw(not)36 b FB(copied.)k(Instead,)27 b(the)150 1492 y(arra)m(y)i(itself)g(is)f (made)g(a)m(v)-5 b(ailable)30 b(for)e(direct)h(manipulation)f(b)m(y)g (the)h(function.)39 b(This)28 b(is)g(usually)g(called)150 1602 y Fx(call)36 b(b)m(y)e(reference)p FB(.)54 b(Changes)34 b(made)h(to)g(an)g(arra)m(y)g(parameter)g(inside)f(the)h(b)s(o)s(dy)e (of)i(a)g(function)f Fw(ar)-5 b(e)150 1711 y FB(visible)31 b(outside)f(that)h(function.)390 1870 y Fr(NOTE:)h FB(Changing)f(an)h (arra)m(y)g(parameter)g(inside)g(a)g(function)f(can)h(b)s(e)f(v)m(ery)h (dangerous)390 1979 y(if)e(y)m(ou)h(do)f(not)h(w)m(atc)m(h)h(what)e(y)m (ou)h(are)f(doing.)41 b(F)-8 b(or)31 b(example:)630 2138 y Fz(function)46 b(changeit\(array,)d(ind,)k(nvalue\))630 2247 y({)869 2357 y(array[ind])e(=)i(nvalue)630 2466 y(})630 2685 y(BEGIN)f({)821 2795 y(a[1])h(=)g(1;)g(a[2])g(=)g(2;)g (a[3])g(=)h(3)821 2905 y(changeit\(a,)d(2,)i("two"\))821 3014 y(printf)f("a[1])g(=)i(\045s,)f(a[2])f(=)i(\045s,)f(a[3])f(=)i (\045s\\n",)1203 3124 y(a[1],)e(a[2],)g(a[3])630 3233 y(})390 3392 y FB(prin)m(ts)23 b(`)p Fz(a[1])29 b(=)h(1,)g(a[2])f(=)h (two,)g(a[3])f(=)h(3)p FB(',)25 b(b)s(ecause)e Fz(changeit)e FB(stores)j Fz("two")e FB(in)h(the)390 3501 y(second)30 b(elemen)m(t)i(of)f Fz(a)p FB(.)275 3660 y(Some)d Fz(awk)f FB(implemen)m(tations)j(allo)m(w)f(y)m(ou)g(to)g(call)g(a)f(function)g (that)h(has)f(not)g(b)s(een)g(de\014ned.)38 b(They)150 3769 y(only)29 b(rep)s(ort)f(a)h(problem)g(at)g(run)m(time)g(when)e (the)i(program)g(actually)h(tries)g(to)f(call)h(the)f(function.)40 b(F)-8 b(or)150 3879 y(example:)390 4037 y Fz(BEGIN)46 b({)581 4147 y(if)h(\(0\))772 4256 y(foo\(\))581 4366 y(else)772 4475 y(bar\(\))390 4585 y(})390 4695 y(function)f(bar\(\))g ({)h(...)g(})390 4804 y(#)g(note)g(that)g(`foo')f(is)h(not)g(defined) 150 4963 y FB(Because)35 b(the)f(`)p Fz(if)p FB(')f(statemen)m(t)i (will)f(nev)m(er)g(b)s(e)f(true,)h(it)g(is)g(not)g(really)g(a)g (problem)f(that)h Fz(foo)e FB(has)i(not)150 5072 y(b)s(een)c (de\014ned.)39 b(Usually)-8 b(,)32 b(though,)e(it)h(is)f(a)h(problem)f (if)g(a)h(program)f(calls)i(an)e(unde\014ned)e(function.)275 5230 y(If)45 b(`)p Fz(--lint)p FB(')f(is)h(sp)s(eci\014ed)g(\(see)i (Section)f(11.2)h([Command-Line)e(Options],)50 b(page)c(173\),)51 b Fz(gawk)150 5340 y FB(rep)s(orts)30 b(calls)h(to)g(unde\014ned)d (functions.)p eop end %%Page: 154 166 TeXDict begin 154 165 bop 150 -116 a FB(154)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(Some)g Fz(awk)g FB(implemen)m(tations)j(generate)f(a)g(run)m (time)e(error)h(if)g(y)m(ou)g(use)f(the)i Fz(next)d FB(statemen)m(t)k (\(see)150 408 y(Section)26 b(6.4.8)i([The)d Fz(next)f FB(Statemen)m(t],)29 b(page)d(105\))h(inside)e(a)h(user-de\014ned)e (function.)39 b Fz(gawk)24 b FB(do)s(es)i(not)150 518 y(ha)m(v)m(e)32 b(this)e(limitation.)150 713 y Fj(8.2.4)63 b(The)41 b Fh(return)h Fj(Statemen)m(t)150 860 y FB(The)21 b(b)s(o)s(dy)f(of)i(a)g(user-de\014ned)e(function)h(can)h(con)m(tain)h (a)f Fz(return)d FB(statemen)m(t.)40 b(This)21 b(statemen)m(t)i (returns)150 970 y(con)m(trol)30 b(to)f(the)g(calling)g(part)g(of)f (the)h Fz(awk)e FB(program.)40 b(It)29 b(can)f(also)i(b)s(e)d(used)h (to)h(return)e(a)i(v)-5 b(alue)29 b(for)f(use)150 1079 y(in)i(the)h(rest)f(of)h(the)f Fz(awk)g FB(program.)40 b(It)31 b(lo)s(oks)g(lik)m(e)g(this:)390 1212 y Fz(return)46 b FB([)p Fk(expression)11 b FB(])275 1344 y(The)34 b Fx(expression)g FB(part)g(is)h(optional.)54 b(If)34 b(it)h(is)g (omitted,)i(then)d(the)h(returned)e(v)-5 b(alue)35 b(is)g(unde\014ned,) 150 1454 y(and)30 b(therefore,)h(unpredictable.)275 1586 y(A)k Fz(return)e FB(statemen)m(t)k(with)e(no)g(v)-5 b(alue)36 b(expression)f(is)g(assumed)f(at)i(the)g(end)e(of)h(ev)m(ery) h(function)150 1696 y(de\014nition.)42 b(So)30 b(if)h(con)m(trol)h (reac)m(hes)g(the)f(end)f(of)h(the)g(function)g(b)s(o)s(dy)-8 b(,)30 b(then)g(the)h(function)f(returns)g(an)150 1806 y(unpredictable)g(v)-5 b(alue.)41 b Fz(awk)30 b FB(do)s(es)g Fw(not)39 b FB(w)m(arn)30 b(y)m(ou)h(if)f(y)m(ou)h(use)f(the)h(return)e (v)-5 b(alue)31 b(of)f(suc)m(h)g(a)h(function.)275 1938 y(Sometimes,)f(y)m(ou)f(w)m(an)m(t)h(to)g(write)f(a)h(function)e(for)h (what)g(it)h(do)s(es,)f(not)g(for)g(what)g(it)h(returns.)39 b(Suc)m(h)150 2048 y(a)31 b(function)g(corresp)s(onds)e(to)j(a)f Fz(void)e FB(function)i(in)f(C)h(or)g(to)g(a)g Fz(procedure)e FB(in)h(P)m(ascal.)44 b(Th)m(us,)30 b(it)h(ma)m(y)150 2157 y(b)s(e)25 b(appropriate)h(to)g(not)g(return)e(an)m(y)i(v)-5 b(alue;)28 b(simply)d(b)s(ear)g(in)h(mind)e(that)i(if)g(y)m(ou)g(use)f (the)h(return)e(v)-5 b(alue)150 2267 y(of)31 b(suc)m(h)f(a)g(function,) h(y)m(ou)f(do)h(so)f(at)h(y)m(our)g(o)m(wn)f(risk.)275 2399 y(The)23 b(follo)m(wing)j(is)e(an)h(example)g(of)f(a)h (user-de\014ned)e(function)h(that)g(returns)g(a)g(v)-5 b(alue)25 b(for)f(the)h(largest)150 2509 y(n)m(um)m(b)s(er)k(among)i (the)g(elemen)m(ts)g(of)g(an)f(arra)m(y:)390 2641 y Fz(function)46 b(maxelt\(vec,)140 b(i,)47 b(ret\))390 2751 y({)629 2860 y(for)g(\(i)g(in)g(vec\))g({)867 2970 y(if)g(\(ret)g(==)g("")g(||)h (vec[i])e(>)h(ret\))1106 3080 y(ret)g(=)g(vec[i])629 3189 y(})629 3299 y(return)f(ret)390 3408 y(})150 3541 y FB(Y)-8 b(ou)28 b(call)g Fz(maxelt)e FB(with)h(one)h(argumen)m(t,)g (whic)m(h)f(is)h(an)f(arra)m(y)h(name.)40 b(The)27 b(lo)s(cal)h(v)-5 b(ariables)28 b Fz(i)f FB(and)g Fz(ret)150 3650 y FB(are)38 b(not)f(in)m(tended)g(to)h(b)s(e)f(argumen)m(ts;)k(while)c(there)h(is)f (nothing)g(to)h(stop)f(y)m(ou)h(from)f(passing)g(more)150 3760 y(than)25 b(one)h(argumen)m(t)g(to)g Fz(maxelt)p FB(,)f(the)g(results)g(w)m(ould)g(b)s(e)g(strange.)40 b(The)25 b(extra)h(space)g(b)s(efore)f Fz(i)g FB(in)g(the)150 3870 y(function)35 b(parameter)h(list)f(indicates)i(that)e Fz(i)g FB(and)g Fz(ret)f FB(are)i(not)f(supp)s(osed)e(to)j(b)s(e)f (argumen)m(ts.)55 b(Y)-8 b(ou)150 3979 y(should)29 b(follo)m(w)j(this)e (con)m(v)m(en)m(tion)j(when)c(de\014ning)h(functions.)275 4112 y(The)k(follo)m(wing)j(program)f(uses)f(the)g Fz(maxelt)f FB(function.)56 b(It)35 b(loads)h(an)g(arra)m(y)-8 b(,)38 b(calls)e Fz(maxelt)p FB(,)g(and)150 4221 y(then)30 b(rep)s(orts)g(the) g(maxim)m(um)g(n)m(um)m(b)s(er)g(in)g(that)h(arra)m(y:)390 4354 y Fz(function)46 b(maxelt\(vec,)140 b(i,)47 b(ret\))390 4463 y({)629 4573 y(for)g(\(i)g(in)g(vec\))g({)867 4682 y(if)g(\(ret)g(==)g("")g(||)h(vec[i])e(>)h(ret\))1106 4792 y(ret)g(=)g(vec[i])629 4902 y(})629 5011 y(return)f(ret)390 5121 y(})390 5340 y(#)h(Load)g(all)g(fields)f(of)h(each)g(record)f (into)h(nums.)p eop end %%Page: 155 167 TeXDict begin 155 166 bop 2670 -116 a Fr(Chapter)30 b(8:)41 b(F)-8 b(unctions)92 b FB(155)390 299 y Fz({)629 408 y(for\(i)46 b(=)h(1;)h(i)f(<=)g(NF;)g(i++\))867 518 y(nums[NR,)f(i])h (=)g($i)390 628 y(})390 847 y(END)g({)629 956 y(print)f(maxelt\(nums\)) 390 1066 y(})275 1200 y FB(Giv)m(en)31 b(the)f(follo)m(wing)i(input:) 438 1335 y Fz(1)47 b(5)h(23)f(8)g(16)390 1445 y(44)g(3)h(5)f(2)h(8)f (26)390 1554 y(256)g(291)g(1396)f(2962)h(100)390 1664 y(-6)g(467)g(998)g(1101)390 1773 y(99385)f(11)i(0)f(225)150 1908 y FB(the)31 b(program)f(rep)s(orts)f(\(predictably\))j(that)f Fz(99385)d FB(is)j(the)f(largest)i(n)m(um)m(b)s(er)d(in)h(the)h(arra)m (y)-8 b(.)150 2107 y Fj(8.2.5)63 b(F)-10 b(unctions)41 b(and)g(Their)h(E\013ects)d(on)j(V)-10 b(ariable)40 b(T)m(yping)150 2254 y Fz(awk)34 b FB(is)h(a)g(v)m(ery)h(\015uid)d(language.)56 b(It)35 b(is)h(p)s(ossible)e(that)i Fz(awk)e FB(can't)i(tell)g(if)f(an) f(iden)m(ti\014er)i(represen)m(ts)f(a)150 2364 y(regular)c(v)-5 b(ariable)31 b(or)f(an)g(arra)m(y)h(un)m(til)g(run)m(time.)40 b(Here)31 b(is)g(an)f(annotated)h(sample)g(program:)390 2498 y Fz(function)46 b(foo\(a\))390 2608 y({)581 2717 y(a[1])h(=)g(1)143 b(#)47 b(parameter)f(is)h(an)g(array)390 2827 y(})390 3046 y(BEGIN)f({)581 3156 y(b)h(=)h(1)581 3265 y(foo\(b\))94 b(#)47 b(invalid:)f(fatal)g(type)h(mismatch)581 3484 y(foo\(x\))94 b(#)47 b(x)h(uninitialized,)c(becomes)h(an)j(array)e (dynamically)581 3594 y(x)h(=)h(1)143 b(#)47 b(now)g(not)g(allowed,)f (runtime)f(error)390 3704 y(})275 3838 y FB(Usually)-8 b(,)31 b(suc)m(h)f(things)g(aren't)h(a)g(big)f(issue,)h(but)f(it's)h(w) m(orth)f(b)s(eing)g(a)m(w)m(are)i(of)e(them.)p eop end %%Page: 156 168 TeXDict begin 156 167 bop 150 -116 a FB(156)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fu(9)80 b(In)l(ternationalization)51 b(with)i Fi(gawk)150 532 y FB(Once)37 b(up)s(on)f(a)h(time,)j(computer)e(mak)m(ers)f(wrote)h (soft)m(w)m(are)h(that)e(w)m(ork)m(ed)h(only)g(in)e(English.)61 b(Ev)m(en-)150 642 y(tually)-8 b(,)40 b(hardw)m(are)d(and)f(soft)m(w)m (are)j(v)m(endors)d(noticed)i(that)g(if)f(their)g(systems)g(w)m(ork)m (ed)h(in)e(the)i(nativ)m(e)150 752 y(languages)j(of)g(non-English-sp)s (eaking)e(coun)m(tries,)44 b(they)c(w)m(ere)h(able)g(to)f(sell)h(more)f (systems.)70 b(As)41 b(a)150 861 y(result,)j(in)m(ternationalization)h (and)40 b(lo)s(calization)k(of)e(programs)f(and)f(soft)m(w)m(are)j (systems)e(b)s(ecame)h(a)150 971 y(common)31 b(practice.)275 1105 y(Un)m(til)36 b(recen)m(tly)-8 b(,)38 b(the)d(abilit)m(y)i(to)f (pro)m(vide)f(in)m(ternationalization)j(w)m(as)e(largely)g(restricted)g (to)g(pro-)150 1215 y(grams)e(written)g(in)g(C)g(and)f(C)p Fz(++)p FB(.)51 b(This)33 b(c)m(hapter)i(describ)s(es)e(the)h (underlying)f(library)h Fz(gawk)f FB(uses)g(for)150 1324 y(in)m(ternationalization,)43 b(as)38 b(w)m(ell)h(as)f(ho)m(w)g Fz(gawk)e FB(mak)m(es)j(in)m(ternationalization)i(features)d(a)m(v)-5 b(ailable)40 b(at)150 1434 y(the)28 b Fz(awk)g FB(program)g(lev)m(el.) 41 b(Ha)m(ving)30 b(in)m(ternationalization)i(a)m(v)-5 b(ailable)30 b(at)f(the)g Fz(awk)e FB(lev)m(el)j(giv)m(es)f(soft)m(w)m (are)150 1543 y(dev)m(elop)s(ers)36 b(additional)g(\015exibilit)m (y|they)h(are)e(no)h(longer)g(required)e(to)i(write)g(in)f(C)g(when)f (in)m(terna-)150 1653 y(tionalization)f(is)e(a)f(requiremen)m(t.)150 1885 y FA(9.1)68 b(In)l(ternationalization)48 b(and)d(Lo)t(calization) 150 2045 y Fx(In)m(ternationalization)40 b FB(means)d(writing)f(\(or)h (mo)s(difying\))g(a)g(program)g(once,)i(in)e(suc)m(h)f(a)h(w)m(a)m(y)h (that)f(it)150 2154 y(can)43 b(use)f(m)m(ultiple)g(languages)i(without) e(requiring)g(further)f(source-co)s(de)i(c)m(hanges.)77 b Fx(Lo)s(calization)150 2264 y FB(means)34 b(pro)m(viding)g(the)g (data)h(necessary)g(for)f(an)g(in)m(ternationalized)i(program)e(to)h(w) m(ork)f(in)g(a)g(partic-)150 2373 y(ular)g(language.)54 b(Most)35 b(t)m(ypically)-8 b(,)37 b(these)e(terms)f(refer)g(to)h (features)f(suc)m(h)g(as)h(the)f(language)i(used)d(for)150 2483 y(prin)m(ting)k(error)f(messages,)k(the)d(language)i(used)d(to)h (read)g(resp)s(onses,)h(and)e(information)h(related)h(to)150 2593 y(ho)m(w)30 b(n)m(umerical)h(and)f(monetary)h(v)-5 b(alues)31 b(are)f(prin)m(ted)g(and)g(read.)150 2825 y FA(9.2)68 b(GNU)45 b Fq(gettext)150 2984 y FB(The)c(facilities)i(in)e (GNU)h Fz(gettext)d FB(fo)s(cus)i(on)g(messages;)48 b(strings)41 b(prin)m(ted)g(b)m(y)g(a)h(program,)h(either)150 3094 y(directly)31 b(or)f(via)h(formatting)h(with)e Fz(printf)e FB(or)j Fz(sprintf)p FB(.)2190 3061 y Fo(1)275 3228 y FB(When)f(using)g(GNU)h Fz(gettext)p FB(,)e(eac)m(h)j(application)g (has)f(its)g(o)m(wn)f Fx(text)i(domain)p FB(.)41 b(This)30 b(is)h(a)g(unique)150 3338 y(name,)37 b(suc)m(h)f(as)g(`)p Fz(kpilot)p FB(')e(or)i(`)p Fz(gawk)p FB(',)h(that)f(iden)m(ti\014es)g (the)g(application.)59 b(A)35 b(complete)j(application)150 3447 y(ma)m(y)c(ha)m(v)m(e)h(m)m(ultiple)f(comp)s(onen)m(ts|programs)g (written)f(in)h(C)f(or)g(C)p Fz(++)p FB(,)h(as)g(w)m(ell)h(as)e (scripts)h(written)150 3557 y(in)c Fz(sh)g FB(or)g Fz(awk)p FB(.)40 b(All)31 b(of)g(the)f(comp)s(onen)m(ts)h(use)f(the)g(same)h (text)g(domain.)275 3691 y(T)-8 b(o)41 b(mak)m(e)i(the)e(discussion)g (concrete,)k(assume)c(w)m(e're)h(writing)g(an)f(application)h(named)f Fz(guide)p FB(.)150 3801 y(In)m(ternationalization)33 b(consists)e(of)g(the)f(follo)m(wing)i(steps,)f(in)f(this)g(order:)199 3935 y(1.)61 b(The)23 b(programmer)h(go)s(es)h(through)e(the)h(source)g (for)g(all)h(of)f Fz(guide)p FB('s)f(comp)s(onen)m(ts)h(and)f(marks)h (eac)m(h)330 4045 y(string)k(that)g(is)g(a)g(candidate)h(for)e (translation.)41 b(F)-8 b(or)29 b(example,)g Fz("`-F':)g(option)f (required")e FB(is)i(a)330 4154 y(go)s(o)s(d)c(candidate)i(for)e (translation.)40 b(A)25 b(table)g(with)g(strings)f(of)h(option)g(names) g(is)f(not)h(\(e.g.,)j Fz(gawk)p FB('s)330 4264 y(`)p Fz(--profile)p FB(')g(option)j(should)f(remain)g(the)g(same,)h(no)g (matter)g(what)f(the)h(lo)s(cal)g(language\).)199 4398 y(2.)61 b(The)40 b(programmer)g(indicates)h(the)g(application's)h(text) f(domain)g(\()p Fz("guide")p FB(\))e(to)i(the)g Fz(gettext)330 4508 y FB(library)-8 b(,)31 b(b)m(y)f(calling)i(the)e Fz(textdomain)e FB(function.)199 4642 y(3.)61 b(Messages)38 b(from)d(the)h(application)i(are)e(extracted)i(from)d(the)i(source)f (co)s(de)g(and)g(collected)i(in)m(to)330 4752 y(a)32 b(p)s(ortable)g(ob)5 b(ject)33 b(\014le)f(\(`)p Fz(guide.po)p FB('\),)f(whic)m(h)h(lists)g(the)g(strings)g(and)f(their)h (translations.)46 b(The)330 4862 y(translations)36 b(are)f(initially)h (empt)m(y)-8 b(.)55 b(The)34 b(original)i(\(usually)f(English\))g (messages)g(serv)m(e)h(as)f(the)330 4971 y(k)m(ey)c(for)f(lo)s(okup)g (of)h(the)f(translations.)p 150 5066 1200 4 v 199 5134 a Fo(1)275 5166 y Fn(F)-6 b(or)29 b(some)h(op)r(erating)g(systems,)g (the)f Fm(gawk)h Fn(p)r(ort)f(do)r(esn't)h(supp)r(ort)e(GNU)h Fm(gettext)p Fn(.)46 b(This)30 b(applies)g(most)f(notably)275 5253 y(to)j(the)g(PC)h(op)r(erating)g(systems.)55 b(As)32 b(suc)n(h,)i(these)f(features)g(are)g(not)f(a)n(v)l(ailable)i(if)f(y)n (ou)e(are)i(using)g(one)f(of)i(those)275 5340 y(op)r(erating)26 b(systems.)35 b(Sorry)-6 b(.)p eop end %%Page: 157 169 TeXDict begin 157 168 bop 1837 -116 a Fr(Chapter)30 b(9:)41 b(In)m(ternationalization)34 b(with)c Fz(gawk)90 b FB(157)199 299 y(4.)61 b(F)-8 b(or)31 b(eac)m(h)g(language)g(with)f(a)g (translator,)i(`)p Fz(guide.po)p FB(')c(is)i(copied)g(and)g (translations)g(are)h(created)330 408 y(and)f(shipp)s(ed)e(with)i(the)h (application.)199 540 y(5.)61 b(Eac)m(h)42 b(language's)h(`)p Fz(.po)p FB(')e(\014le)g(is)h(con)m(v)m(erted)h(in)m(to)f(a)g(binary)e (message)j(ob)5 b(ject)42 b(\(`)p Fz(.mo)p FB('\))g(\014le.)74 b(A)330 650 y(message)39 b(ob)5 b(ject)39 b(\014le)g(con)m(tains)g(the) g(original)g(messages)g(and)f(their)g(translations)h(in)f(a)h(binary) 330 759 y(format)31 b(that)g(allo)m(ws)g(fast)g(lo)s(okup)f(of)h (translations)g(at)g(run)m(time.)199 891 y(6.)61 b(When)21 b Fz(guide)g FB(is)g(built)h(and)f(installed,)j(the)e(binary)f (translation)h(\014les)g(are)g(installed)g(in)g(a)g(standard)330 1000 y(place.)199 1132 y(7.)61 b(F)-8 b(or)24 b(testing)g(and)f(dev)m (elopmen)m(t,)j(it)e(is)f(p)s(ossible)g(to)h(tell)h Fz(gettext)c FB(to)j(use)f(`)p Fz(.mo)p FB(')g(\014les)g(in)g(a)g(di\013eren)m(t)330 1241 y(directory)31 b(than)f(the)h(standard)e(one)i(b)m(y)f(using)g (the)g Fz(bindtextdomain)d FB(function.)199 1373 y(8.)61 b(A)m(t)34 b(run)m(time,)g Fz(guide)e FB(lo)s(oks)h(up)g(eac)m(h)h (string)f(via)h(a)f(call)i(to)f Fz(gettext)p FB(.)47 b(The)33 b(returned)f(string)h(is)330 1482 y(the)e(translated)g(string) f(if)g(a)m(v)-5 b(ailable,)33 b(or)e(the)f(original)i(string)e(if)g (not.)199 1614 y(9.)61 b(If)27 b(necessary)-8 b(,)29 b(it)e(is)g(p)s(ossible)g(to)h(access)g(messages)g(from)f(a)h (di\013eren)m(t)f(text)h(domain)f(than)g(the)h(one)330 1724 y(b)s(elonging)37 b(to)g(the)g(application,)j(without)d(ha)m(ving) g(to)g(switc)m(h)g(the)g(application's)h(default)f(text)330 1833 y(domain)30 b(bac)m(k)h(and)f(forth.)275 1987 y(In)e(C)i(\(or)g(C) p Fz(++)p FB(\),)f(the)h(string)g(marking)f(and)g(dynamic)h (translation)g(lo)s(okup)g(are)g(accomplished)g(b)m(y)150 2096 y(wrapping)f(eac)m(h)j(string)e(in)g(a)h(call)h(to)f Fz(gettext)p FB(:)390 2228 y Fz(printf\(gettext\("Don't)42 b(Panic!\\n"\)\);)275 2359 y FB(The)27 b(to)s(ols)h(that)h(extract)g (messages)f(from)g(source)f(co)s(de)h(pull)g(out)f(all)i(strings)f (enclosed)g(in)f(calls)i(to)150 2469 y Fz(gettext)p FB(.)275 2600 y(The)f(GNU)h Fz(gettext)d FB(dev)m(elop)s(ers,)k(recognizing)g (that)f(t)m(yping)g(`)p Fz(gettext)p FB(')e(o)m(v)m(er)j(and)e(o)m(v)m (er)i(again)g(is)150 2710 y(b)s(oth)g(painful)f(and)h(ugly)g(to)i(lo)s (ok)f(at,)g(use)f(the)h(macro)g(`)p Fz(_)p FB(')f(\(an)h(underscore\))f (to)h(mak)m(e)g(things)f(easier:)390 2841 y Fz(/*)47 b(In)g(the)g(standard)f(header)g(file:)g(*/)390 2951 y(#define)g(_\(str\))g(gettext\(str\))390 3170 y(/*)h(In)g(the)g (program)f(text:)g(*/)390 3280 y(printf\(_\("Don't)e(Panic!\\n"\)\);) 150 3411 y FB(This)31 b(reduces)g(the)h(t)m(yping)g(o)m(v)m(erhead)g (to)g(just)f(three)h(extra)g(c)m(haracters)h(p)s(er)e(string)g(and)g (is)h(consider-)150 3521 y(ably)h(easier)h(to)f(read)g(as)g(w)m(ell.)49 b(There)32 b(are)i(lo)s(cale)g Fx(categories)39 b FB(for)33 b(di\013eren)m(t)g(t)m(yp)s(es)g(of)g(lo)s(cale-related)150 3630 y(information.)41 b(The)30 b(de\014ned)f(lo)s(cale)j(categories)h (that)e Fz(gettext)d FB(kno)m(ws)j(ab)s(out)f(are:)150 3784 y Fz(LC_MESSAGES)630 3893 y FB(T)-8 b(ext)36 b(messages.)56 b(This)35 b(is)g(the)h(default)f(category)i(for)e Fz(gettext)f FB(op)s(erations,)j(but)d(it)i(is)630 4003 y(p)s(ossible)i(to)i(supply) d(a)i(di\013eren)m(t)g(one)g(explicitly)-8 b(,)43 b(if)c(necessary)-8 b(.)66 b(\(It)39 b(is)g(almost)h(nev)m(er)630 4113 y(necessary)31 b(to)g(supply)e(a)i(di\013eren)m(t)f(category)-8 b(.\))150 4266 y Fz(LC_COLLATE)630 4376 y FB(T)g(ext-collation)30 b(information;)e(i.e.,)h(ho)m(w)e(di\013eren)m(t)g(c)m(haracters)h (and/or)f(groups)e(of)i(c)m(har-)630 4485 y(acters)k(sort)g(in)f(a)h (giv)m(en)g(language.)150 4639 y Fz(LC_CTYPE)96 b FB(Character-t)m(yp)s (e)30 b(information)f(\(alphab)s(etic,)h(digit,)g(upp)s(er-)d(or)i(lo)m (w)m(ercase,)i(and)d(so)h(on\).)630 4748 y(This)e(information)g(is)h (accessed)g(via)g(the)g(POSIX)e(c)m(haracter)j(classes)f(in)f(regular)h (expres-)630 4858 y(sions,)h(suc)m(h)f(as)h Fz(/[[:alnum:]]/)c FB(\(see)30 b(Section)f(2.3)h([Regular)f(Expression)f(Op)s(erators],) 630 4967 y(page)j(27\).)150 5121 y Fz(LC_MONETARY)630 5230 y FB(Monetary)36 b(information,)g(suc)m(h)e(as)h(the)f(currency)g (sym)m(b)s(ol,)i(and)e(whether)f(the)i(sym)m(b)s(ol)630 5340 y(go)s(es)c(b)s(efore)f(or)g(after)h(a)g(n)m(um)m(b)s(er.)p eop end %%Page: 158 170 TeXDict begin 158 169 bop 150 -116 a FB(158)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz(LC_NUMERIC)630 408 y FB(Numeric)c(information,)h(suc)m(h)e(as) h(whic)m(h)g(c)m(haracters)h(to)f(use)g(for)f(the)h(decimal)h(p)s(oin)m (t)f(and)630 518 y(the)31 b(thousands)e(separator.)1611 485 y Fo(2)150 673 y Fz(LC_RESPONSE)630 783 y FB(Resp)s(onse)22 b(information,)j(suc)m(h)d(as)h(ho)m(w)g(\\y)m(es")h(and)e(\\no")h(app) s(ear)f(in)h(the)f(lo)s(cal)i(language,)630 892 y(and)30 b(p)s(ossibly)f(other)i(information)g(as)f(w)m(ell.)150 1047 y Fz(LC_TIME)144 b FB(Time-)22 b(and)g(date-related)i (information,)h(suc)m(h)c(as)i(12-)g(or)f(24-hour)h(clo)s(c)m(k,)i(mon) m(th)d(prin)m(ted)630 1157 y(b)s(efore)30 b(or)g(after)h(da)m(y)g(in)f (a)h(date,)g(lo)s(cal)h(mon)m(th)e(abbreviations,)h(and)f(so)h(on.)150 1312 y Fz(LC_ALL)192 b FB(All)31 b(of)g(the)f(ab)s(o)m(v)m(e.)42 b(\(Not)32 b(to)s(o)f(useful)e(in)h(the)h(con)m(text)h(of)f Fz(gettext)p FB(.\))150 1539 y FA(9.3)68 b(In)l(ternationalizing)48 b Fq(awk)43 b FA(Programs)150 1699 y Fz(gawk)29 b FB(pro)m(vides)i(the) f(follo)m(wing)i(v)-5 b(ariables)31 b(and)f(functions)g(for)g(in)m (ternationalization:)150 1854 y Fz(TEXTDOMAIN)630 1963 y FB(This)35 b(v)-5 b(ariable)37 b(indicates)g(the)f(application's)h (text)g(domain.)57 b(F)-8 b(or)37 b(compatibilit)m(y)h(with)630 2073 y(GNU)31 b Fz(gettext)p FB(,)e(the)h(default)h(v)-5 b(alue)31 b(is)f Fz("messages")p FB(.)150 2228 y Fz(_"your)f(message)f (here")630 2337 y FB(String)k(constan)m(ts)i(mark)m(ed)f(with)g(a)g (leading)h(underscore)e(are)h(candidates)h(for)e(transla-)630 2447 y(tion)i(at)g(run)m(time.)50 b(String)33 b(constan)m(ts)i(without) e(a)h(leading)h(underscore)d(are)i(not)g(trans-)630 2557 y(lated.)150 2711 y Fz(dcgettext\()p Fk(string)i FB([)p Fz(,)31 b Fk(domain)39 b FB([)p Fz(,)30 b Fk(category)11 b FB(]])p Fz(\))630 2821 y FB(This)31 b(built-in)i(function)f(returns)f (the)h(translation)h(of)g Fx(string)40 b FB(in)32 b(text)h(domain)f Fx(domain)630 2931 y FB(for)e(lo)s(cale)i(category)g Fx(category)p FB(.)43 b(The)30 b(default)g(v)-5 b(alue)31 b(for)f Fx(domain)h FB(is)f(the)g(curren)m(t)g(v)-5 b(alue)630 3040 y(of)31 b Fz(TEXTDOMAIN)p FB(.)37 b(The)30 b(default)h(v)-5 b(alue)31 b(for)f Fx(category)40 b FB(is)30 b Fz("LC_MESSAGES")p FB(.)630 3172 y(If)25 b(y)m(ou)h(supply)d(a)j(v)-5 b(alue)26 b(for)f Fx(category)p FB(,)k(it)d(m)m(ust)f(b)s(e)g(a)g(string)h(equal) g(to)g(one)f(of)h(the)f(kno)m(wn)630 3282 y(lo)s(cale)j(categories)i (describ)s(ed)25 b(in)i(the)g(previous)f(section.)41 b(Y)-8 b(ou)27 b(m)m(ust)g(also)g(supply)f(a)h(text)630 3392 y(domain.)41 b(Use)30 b Fz(TEXTDOMAIN)e FB(if)i(y)m(ou)h(w)m(an)m (t)g(to)g(use)f(the)h(curren)m(t)f(domain.)630 3524 y Fr(Caution:)39 b FB(The)28 b(order)f(of)h(argumen)m(ts)g(to)h(the)f Fz(awk)f FB(v)m(ersion)h(of)g(the)g Fz(dcgettext)d FB(function)630 3634 y(is)j(purp)s(osely)f(di\013eren)m(t)h(from)g(the)g(order)g(for)g (the)g(C)g(v)m(ersion.)40 b(The)28 b Fz(awk)f FB(v)m(ersion's)h(order) 630 3743 y(w)m(as)22 b(c)m(hosen)h(to)g(b)s(e)e(simple)h(and)g(to)g (allo)m(w)i(for)e(reasonable)g Fz(awk)p FB(-st)m(yle)h(default)f (argumen)m(ts.)150 3898 y Fz(dcngettext\()p Fk(string1)p Fz(,)j Fk(string2)p Fz(,)j Fk(number)39 b FB([)p Fz(,)31 b Fk(domain)39 b FB([)p Fz(,)30 b Fk(category)11 b FB(]])p Fz(\))630 4008 y FB(This)22 b(built-in)h(function)f(returns)g(the)h (plural)g(form)f(used)g(for)h Fx(n)m(um)m(b)s(er)28 b FB(of)23 b(the)g(translation)630 4117 y(of)45 b Fx(string1)52 b FB(and)43 b Fx(string2)52 b FB(in)44 b(text)i(domain)e Fx(domain)g FB(for)g(lo)s(cale)i(category)h Fx(category)p FB(.)630 4227 y Fx(string1)e FB(is)38 b(the)g(English)g(singular)f(v)-5 b(arian)m(t)39 b(of)f(a)g(message,)j(and)c Fx(string2)45 b FB(the)38 b(English)630 4336 y(plural)26 b(v)-5 b(arian)m(t)28 b(of)e(the)h(same)g(message.)40 b(The)26 b(default)h(v)-5 b(alue)27 b(for)f Fx(domain)h FB(is)f(the)h(curren)m(t)630 4446 y(v)-5 b(alue)31 b(of)f Fz(TEXTDOMAIN)p FB(.)38 b(The)30 b(default)h(v)-5 b(alue)31 b(for)f Fx(category)40 b FB(is)30 b Fz("LC_MESSAGES")p FB(.)630 4578 y(The)g(same)h(remarks)f (as)g(for)g(the)h Fz(dcgettext)d FB(function)i(apply)-8 b(.)150 4733 y Fz(bindtextdomain\()p Fk(directory)34 b FB([)p Fz(,)d Fk(domain)11 b FB(])p Fz(\))630 4843 y FB(This)21 b(built-in)h(function)g(allo)m(ws)i(y)m(ou)e(to)h(sp)s (ecify)f(the)h(directory)f(in)g(whic)m(h)g Fz(gettext)e FB(lo)s(oks)630 4952 y(for)k(`)p Fz(.mo)p FB(')f(\014les,)i(in)f(case)h (they)f(will)g(not)g(or)g(cannot)g(b)s(e)g(placed)g(in)f(the)h (standard)f(lo)s(cations)630 5062 y(\(e.g.,)32 b(during)d(testing\).)43 b(It)30 b(returns)f(the)i(directory)g(in)f(whic)m(h)g Fx(domain)g FB(is)g(\\b)s(ound.")p 150 5154 1200 4 v 199 5221 a Fo(2)275 5253 y Fn(Americans)k(use)h(a)f(comma)h(ev)n(ery)f (three)g(decimal)h(places)g(and)f(a)g(p)r(erio)r(d)h(for)g(the)f (decimal)h(p)r(oin)n(t,)h(while)g(man)n(y)275 5340 y(Europ)r(eans)26 b(do)f(exactly)h(the)f(opp)r(osite:)36 b Fm(1,234.56)27 b Fn(v)n(ersus)f Fm(1.234,56)p Fn(.)p eop end %%Page: 159 171 TeXDict begin 159 170 bop 1837 -116 a Fr(Chapter)30 b(9:)41 b(In)m(ternationalization)34 b(with)c Fz(gawk)90 b FB(159)630 299 y(The)32 b(default)h Fx(domain)f FB(is)h(the)g(v)-5 b(alue)33 b(of)g Fz(TEXTDOMAIN)p FB(.)45 b(If)32 b Fx(directory)41 b FB(is)33 b(the)f(n)m(ull)h(string)630 408 y(\()p Fz("")p FB(\),)e(then)f Fz(bindtextdomain)c FB(returns)j(the)i(curren)m(t)f (binding)f(for)i(the)f(giv)m(en)i Fx(domain)p FB(.)275 576 y(T)-8 b(o)39 b(use)g(these)g(facilities)j(in)c(y)m(our)h Fz(awk)f FB(program,)k(follo)m(w)e(the)f(steps)g(outlined)g(in)g(the)g (previous)150 686 y(section,)32 b(lik)m(e)f(so:)199 826 y(1.)61 b(Set)29 b(the)g(v)-5 b(ariable)30 b Fz(TEXTDOMAIN)c FB(to)k(the)f(text)h(domain)f(of)h(y)m(our)e(program.)41 b(This)28 b(is)h(b)s(est)f(done)h(in)330 935 y(a)34 b Fz(BEGIN)e FB(rule)h(\(see)i(Section)f(6.1.4)h([The)f Fz(BEGIN)e FB(and)h Fz(END)f FB(Sp)s(ecial)i(P)m(atterns],)i(page)e (96\),)i(or)d(it)330 1045 y(can)i(also)g(b)s(e)f(done)g(via)i(the)e(`)p Fz(-v)p FB(')h(command-line)g(option)g(\(see)g(Section)g(11.2)h ([Command-Line)330 1154 y(Options],)30 b(page)i(173\):)570 1291 y Fz(BEGIN)46 b({)761 1401 y(TEXTDOMAIN)f(=)i("guide")761 1511 y(...)570 1620 y(})199 1757 y FB(2.)61 b(Mark)42 b(all)g(translatable)g(strings)f(with)g(a)h(leading)g(underscore)e(\(`) p Fz(_)p FB('\))i(c)m(haracter.)75 b(It)41 b Fw(must)51 b FB(b)s(e)330 1867 y(adjacen)m(t)32 b(to)f(the)f(op)s(ening)g(quote)h (of)g(the)f(string.)41 b(F)-8 b(or)31 b(example:)570 2004 y Fz(print)46 b(_"hello,)g(world")570 2114 y(x)h(=)h(_"you)e (goofed")570 2223 y(printf\(_"Number)e(of)j(users)f(is)h(\045d\\n",)f (nusers\))199 2361 y FB(3.)61 b(If)55 b(y)m(ou)i(are)f(creating)h (strings)f(dynamically)-8 b(,)63 b(y)m(ou)56 b(can)g(still)h(translate) g(them,)62 b(using)56 b(the)330 2470 y Fz(dcgettext)28 b FB(built-in)i(function:)570 2607 y Fz(message)46 b(=)h(nusers)f(")i (users)e(logged)g(in")570 2717 y(message)g(=)h(dcgettext\(message,)c ("adminprog"\))570 2827 y(print)j(message)330 2964 y FB(Here,)34 b(the)g(call)g(to)g Fz(dcgettext)c FB(supplies)i(a)i (di\013eren)m(t)f(text)h(domain)f(\()p Fz("adminprog")p FB(\))e(in)h(whic)m(h)330 3073 y(to)f(\014nd)e(the)h(message,)i(but)e (it)h(uses)f(the)g(default)h Fz("LC_MESSAGES")c FB(category)-8 b(.)199 3211 y(4.)61 b(During)38 b(dev)m(elopmen)m(t,)43 b(y)m(ou)c(migh)m(t)g(w)m(an)m(t)h(to)f(put)f(the)h(`)p Fz(.mo)p FB(')f(\014le)h(in)f(a)h(priv)-5 b(ate)39 b(directory)g(for) 330 3320 y(testing.)j(This)29 b(is)i(done)f(with)g(the)h Fz(bindtextdomain)26 b FB(built-in)k(function:)570 3457 y Fz(BEGIN)46 b({)713 3567 y(TEXTDOMAIN)f(=)j("guide")141 b(#)47 b(our)g(text)g(domain)713 3677 y(if)g(\(Testing\))f({)904 3786 y(#)i(where)e(to)h(find)g(our)g(files)904 3896 y (bindtextdomain\("testdir"\))904 4005 y(#)h(joe)e(is)i(in)f(charge)f (of)h(adminprog)904 4115 y(bindtextdomain\("../joe/te)o(std)o(ir",)41 b("adminprog"\))713 4225 y(})713 4334 y(...)570 4444 y(})275 4611 y FB(See)30 b(Section)h(9.5)g([A)g(Simple)f(In)m (ternationalization)j(Example],)e(page)g(162,)h(for)e(an)g(example)h (pro-)150 4721 y(gram)g(sho)m(wing)f(the)h(steps)f(to)h(create)h(and)e (use)g(translations)h(from)f Fz(awk)p FB(.)150 4961 y FA(9.4)68 b(T)-11 b(ranslating)46 b Fq(awk)d FA(Programs)150 5121 y FB(Once)30 b(a)g(program's)g(translatable)h(strings)f(ha)m(v)m (e)h(b)s(een)f(mark)m(ed,)g(they)g(m)m(ust)g(b)s(e)f(extracted)j(to)e (create)150 5230 y(the)39 b(initial)h(`)p Fz(.po)p FB(')f(\014le.)66 b(As)39 b(part)g(of)g(translation,)j(it)e(is)e(often)i(helpful)e(to)h (rearrange)h(the)f(order)f(in)150 5340 y(whic)m(h)30 b(argumen)m(ts)h(to)g Fz(printf)e FB(are)h(output.)p eop end %%Page: 160 172 TeXDict begin 160 171 bop 150 -116 a FB(160)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y Fz(gawk)p FB('s)40 b(`)p Fz(--gen-po)p FB(')f(command-line)j (option)g(extracts)h(the)e(messages)i(and)e(is)g(discussed)g(next.)150 408 y(After)i(that,)j Fz(printf)p FB('s)40 b(abilit)m(y)k(to)f (rearrange)g(the)f(order)g(for)g Fz(printf)e FB(argumen)m(ts)j(at)g (run)m(time)f(is)150 518 y(co)m(v)m(ered.)150 713 y Fj(9.4.1)63 b(Extracting)39 b(Mark)m(ed)i(Strings)150 860 y FB(Once)36 b(y)m(our)g Fz(awk)g FB(program)g(is)g(w)m(orking,)i(and)e(all)h(the)g (strings)f(ha)m(v)m(e)h(b)s(een)f(mark)m(ed)g(and)g(y)m(ou'v)m(e)h(set) 150 969 y(\(and)h(p)s(erhaps)e(b)s(ound\))h(the)h(text)h(domain,)h(it)f (is)f(time)h(to)g(pro)s(duce)e(translations.)64 b(First,)41 b(use)d(the)150 1079 y(`)p Fz(--gen-po)p FB(')29 b(command-line)h (option)h(to)g(create)h(the)f(initial)h(`)p Fz(.po)p FB(')e(\014le:)390 1211 y Fz($)47 b(gawk)g(--gen-po)f(-f)h(guide.awk)e (>)j(guide.po)275 1344 y FB(When)33 b(run)g(with)h(`)p Fz(--gen-po)p FB(',)f Fz(gawk)g FB(do)s(es)g(not)i(execute)g(y)m(our)f (program.)51 b(Instead,)35 b(it)g(parses)e(it)150 1453 y(as)c(usual)f(and)g(prin)m(ts)g(all)h(mark)m(ed)g(strings)f(to)h (standard)f(output)g(in)h(the)f(format)h(of)g(a)g(GNU)g Fz(gettext)150 1563 y FB(P)m(ortable)35 b(Ob)5 b(ject)34 b(\014le.)52 b(Also)35 b(included)e(in)g(the)i(output)e(are)h(an)m(y)h (constan)m(t)g(strings)f(that)g(app)s(ear)g(as)150 1672 y(the)d(\014rst)g(argumen)m(t)g(to)h Fz(dcgettext)c FB(or)k(as)f(the)g (\014rst)f(and)h(second)g(argumen)m(t)h(to)f Fz(dcngettext)p FB(.)3541 1639 y Fo(3)3619 1672 y FB(See)150 1782 y(Section)k(9.5)f([A) g(Simple)g(In)m(ternationalization)j(Example],)e(page)f(162,)i(for)e (the)g(full)f(list)i(of)f(steps)f(to)150 1892 y(go)e(through)f(to)h (create)h(and)e(test)h(translations)g(for)f Fz(guide)p FB(.)150 2087 y Fj(9.4.2)63 b(Rearranging)41 b Fh(printf)h Fj(Argumen)m(ts)150 2233 y FB(F)-8 b(ormat)45 b(strings)f(for)g Fz(printf)e FB(and)h Fz(sprintf)f FB(\(see)j(Section)g(4.5)g([Using)g Fz(printf)d FB(Statemen)m(ts)j(for)150 2343 y(F)-8 b(ancier)34 b(Prin)m(ting],)f(page)g(60\))h(presen)m(t)e(a)h(sp)s(ecial)g(problem)f (for)g(translation.)47 b(Consider)32 b(the)g(follo)m(w-)150 2453 y(ing:)296 2420 y Fo(4)390 2585 y Fz(printf\(_"String)44 b(`\045s')i(has)h(\045d)g(characters\\n",)867 2695 y(string,)f (length\(string\)\)\))275 2827 y FB(A)30 b(p)s(ossible)g(German)g (translation)i(for)e(this)g(migh)m(t)h(b)s(e:)390 2959 y Fz("\045d)47 b(Zeichen)f(lang)g(ist)h(die)g(Zeichenkette)e (`\045s'\\n")275 3091 y FB(The)31 b(problem)g(should)g(b)s(e)g(ob)m (vious:)44 b(the)32 b(order)f(of)h(the)g(format)g(sp)s(eci\014cations)g (is)g(di\013eren)m(t)g(from)150 3201 y(the)i(original!)52 b(Ev)m(en)34 b(though)g Fz(gettext)e FB(can)i(return)e(the)i (translated)h(string)f(at)g(run)m(time,)h(it)f(cannot)150 3311 y(c)m(hange)e(the)e(argumen)m(t)h(order)f(in)g(the)g(call)i(to)f Fz(printf)p FB(.)275 3443 y(T)-8 b(o)34 b(solv)m(e)h(this)f(problem,)h Fz(printf)d FB(format)j(sp)s(eci\014ciers)f(ma)m(y)g(ha)m(v)m(e)i(an)d (additional)i(optional)h(ele-)150 3553 y(men)m(t,)31 b(whic)m(h)f(w)m(e)h(call)h(a)e Fx(p)s(ositional)i(sp)s(eci\014er)p FB(.)40 b(F)-8 b(or)31 b(example:)390 3685 y Fz("\0452$d)46 b(Zeichen)g(lang)h(ist)g(die)g(Zeichenkette)d(`\0451$s'\\n")275 3817 y FB(Here,)23 b(the)f(p)s(ositional)g(sp)s(eci\014er)e(consists)i (of)f(an)g(in)m(teger)i(coun)m(t,)h(whic)m(h)d(indicates)h(whic)m(h)e (argumen)m(t)150 3927 y(to)k(use,)g(and)e(a)h(`)p Fz($)p FB('.)39 b(Coun)m(ts)22 b(are)h(one-based,)i(and)e(the)g(format)g (string)g(itself)g(is)g Fw(not)32 b FB(included.)38 b(Th)m(us,)23 b(in)150 4036 y(the)31 b(follo)m(wing)g(example,)h(`)p Fz(string)p FB(')d(is)h(the)h(\014rst)e(argumen)m(t)i(and)f(`)p Fz(length\(string\))p FB(')d(is)j(the)h(second:)390 4169 y Fz($)47 b(gawk)g('BEGIN)f({)390 4278 y(>)238 b(string)46 b(=)i("Dont)e(Panic")390 4388 y(>)238 b(printf)46 b(_"\0452$d)h (characters)e(live)h(in)h(\\"\0451$s\\"\\n",)390 4497 y(>)1193 b(string,)46 b(length\(string\))390 4607 y(>)h(}')410 4721 y Fy(a)533 4717 y Fz(10)g(characters)e(live)i(in)g("Dont)g(Panic") 275 4849 y FB(If)36 b(presen)m(t,)j(p)s(ositional)f(sp)s(eci\014ers)f (come)h(\014rst)e(in)h(the)g(format)h(sp)s(eci\014cation,)h(b)s(efore)e (the)g(\015ags,)150 4959 y(the)31 b(\014eld)f(width,)f(and/or)i(the)f (precision.)p 150 5051 1200 4 v 199 5118 a Fo(3)275 5150 y Fn(Starting)g(with)g Fm(gettext)i Fn(v)n(ersion)e(0.11.5,)k(the)c Fm(xgettext)i Fn(utilit)n(y)d(that)h(comes)h(with)g(GNU)e Fm(gettext)j Fn(can)e(handle)275 5237 y(`)p Fm(.awk)p Fn(')d(\014les.)199 5308 y Fo(4)275 5340 y Fn(This)f(example)g(is)g(b)r (orro)n(w)n(ed)g(from)h(the)e(GNU)g Fm(gettext)i Fn(man)n(ual.)p eop end %%Page: 161 173 TeXDict begin 161 172 bop 1837 -116 a Fr(Chapter)30 b(9:)41 b(In)m(ternationalization)34 b(with)c Fz(gawk)90 b FB(161)275 299 y(P)m(ositional)32 b(sp)s(eci\014ers)e(can)g(b)s(e)g(used)g(with)g (the)g(dynamic)g(\014eld)g(width)g(and)g(precision)g(capabilit)m(y:)390 433 y Fz($)47 b(gawk)g('BEGIN)f({)390 542 y(>)191 b (printf\("\045*.*s\\n",)43 b(10,)k(20,)g("hello"\))390 652 y(>)191 b(printf\("\0453$*2$.*1$s\\n",)41 b(20,)47 b(10,)g("hello"\))390 762 y(>)g(}')410 875 y Fy(a)772 871 y Fz(hello)410 985 y Fy(a)772 981 y Fz(hello)390 1115 y Fr(NOTE:)30 b FB(When)g(using)f(`)p Fz(*)p FB(')h(with)g(a)g(p)s (ositional)h(sp)s(eci\014er,)f(the)g(`)p Fz(*)p FB(')g(comes)h (\014rst,)e(then)h(the)390 1224 y(in)m(teger)i(p)s(osition,)e(and)g (then)g(the)h(`)p Fz($)p FB('.)41 b(This)29 b(is)i(somewhat)g(coun)m (terin)m(tutiv)m(e.)275 1358 y Fz(gawk)43 b FB(do)s(es)i(not)g(allo)m (w)i(y)m(ou)e(to)h(mix)f(regular)g(format)g(sp)s(eci\014ers)g(and)f (those)h(with)g(p)s(ositional)150 1468 y(sp)s(eci\014ers)30 b(in)g(the)g(same)h(string:)390 1579 y Fm($)39 b(gawk)i('BEGIN)f({)g (printf)g(_"\045d)g(\0453$s\\n",)h(1,)f(2,)g("hi")g(}')p 410 1604 217 5 v 410 1684 5 81 v 433 1664 a Fl(erro)m(r)p 622 1684 V 410 1689 217 5 v 716 1666 a Fm(gawk:)g(cmd.)g(line:1:)h (fatal:)f(must)h(use)f(`count$')h(on)e(all)h(formats)h(or)f(none)390 1800 y Fr(NOTE:)34 b FB(There)g(are)h(some)f(pathological)j(cases)e (that)g Fz(gawk)e FB(ma)m(y)i(fail)g(to)g(diagnose.)53 b(In)390 1910 y(suc)m(h)29 b(cases,)j(the)d(output)h(ma)m(y)g(not)g(b)s (e)f(what)h(y)m(ou)g(exp)s(ect.)41 b(It's)30 b(still)h(a)f(bad)f(idea)i (to)f(try)390 2020 y(mixing)h(them,)f(ev)m(en)h(if)f Fz(gawk)g FB(do)s(esn't)g(detect)i(it.)275 2153 y(Although)e(p)s (ositional)i(sp)s(eci\014ers)e(can)h(b)s(e)f(used)g(directly)h(in)g Fz(awk)f FB(programs,)g(their)h(primary)f(pur-)150 2263 y(p)s(ose)j(is)h(to)g(help)f(in)h(pro)s(ducing)e(correct)j (translations)f(of)g(format)g(strings)f(in)m(to)i(languages)f (di\013eren)m(t)150 2373 y(from)c(the)g(one)h(in)f(whic)m(h)g(the)h (program)f(is)g(\014rst)g(written.)150 2571 y Fj(9.4.3)63 b Fh(awk)41 b Fj(P)m(ortabilit)m(y)f(Issues)150 2718 y Fz(gawk)p FB('s)31 b(in)m(ternationalization)36 b(features)d(w)m(ere) g(purp)s(osely)e(c)m(hosen)i(to)h(ha)m(v)m(e)f(as)g(little)h(impact)g (as)e(p)s(os-)150 2827 y(sible)h(on)f(the)h(p)s(ortabilit)m(y)h(of)f Fz(awk)e FB(programs)i(that)g(use)f(them)h(to)g(other)g(v)m(ersions)g (of)g Fz(awk)p FB(.)47 b(Consider)150 2937 y(this)30 b(program:)390 3071 y Fz(BEGIN)46 b({)581 3180 y(TEXTDOMAIN)f(=)i ("guide")581 3290 y(if)g(\(Test_Guide\))140 b(#)47 b(set)g(with)g(-v) 772 3400 y(bindtextdomain\("/test/gu)o(ide)o(/mes)o(sage)o(s"\))581 3509 y(print)f(_"don't)g(panic!")390 3619 y(})150 3753 y FB(As)28 b(written,)h(it)f(w)m(on't)h(w)m(ork)f(on)g(other)h(v)m (ersions)f(of)g Fz(awk)p FB(.)39 b(Ho)m(w)m(ev)m(er,)31 b(it)e(is)f(actually)i(almost)f(p)s(ortable,)150 3862 y(requiring)h(v)m(ery)h(little)h(c)m(hange:)225 3996 y Fy(\017)60 b FB(Assignmen)m(ts)33 b(to)g Fz(TEXTDOMAIN)c FB(w)m(on't)k(ha)m(v)m(e)g(an)m(y)g(e\013ect,)i(since)d Fz(TEXTDOMAIN)e FB(is)i(not)g(sp)s(ecial)h(in)330 4106 y(other)e Fz(awk)e FB(implemen)m(tations.)225 4240 y Fy(\017)60 b FB(Non-GNU)23 b(v)m(ersions)g(of)f Fz(awk)f FB(treat)j(mark)m(ed)e(strings)g(as)g(the)h(concatenation)h(of)f(a)f(v) -5 b(ariable)23 b(named)330 4349 y Fz(_)31 b FB(with)g(the)g(string)h (follo)m(wing)g(it.)1503 4316 y Fo(5)1585 4349 y FB(T)m(ypically)-8 b(,)33 b(the)f(v)-5 b(ariable)32 b Fz(_)f FB(has)g(the)g(n)m(ull)g (string)h(\()p Fz("")p FB(\))f(as)h(its)330 4459 y(v)-5 b(alue,)31 b(lea)m(ving)h(the)f(original)g(string)g(constan)m(t)g(as)g (the)f(result.)225 4593 y Fy(\017)60 b FB(By)99 b(de\014ning)f(\\dumm)m (y")g(functions)h(to)g(replace)h Fz(dcgettext)p FB(,)114 b Fz(dcngettext)96 b FB(and)330 4702 y Fz(bindtextdomain)p FB(,)46 b(the)g Fz(awk)f FB(program)h(can)g(b)s(e)f(made)h(to)h(run,)i (but)c(all)i(the)f(messages)h(are)330 4812 y(output)30 b(in)g(the)h(original)g(language.)42 b(F)-8 b(or)31 b(example:)570 4946 y Fz(function)46 b(bindtextdomain\(dir,)c(domain\))570 5055 y({)761 5165 y(return)k(dir)p 150 5241 1200 4 v 199 5308 a Fo(5)275 5340 y Fn(This)26 b(is)g(go)r(o)r(d)h(fo)r(dder)f (for)g(an)g(\\Obfuscated)g Fm(awk)p Fn(")h(con)n(test.)p eop end %%Page: 162 174 TeXDict begin 162 173 bop 150 -116 a FB(162)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)570 299 y Fz(})570 518 y(function)46 b(dcgettext\(string,)d(domain,)i (category\))570 628 y({)761 737 y(return)h(string)570 847 y(})570 1066 y(function)g(dcngettext\(string1,)c(string2,)k (number,)f(domain,)h(category\))570 1176 y({)761 1285 y(return)g(\(number)g(==)h(1)g(?)h(string1)e(:)h(string2\))570 1395 y(})225 1535 y Fy(\017)60 b FB(The)30 b(use)h(of)g(p)s(ositional)h (sp)s(eci\014cations)f(in)g Fz(printf)e FB(or)i Fz(sprintf)e FB(is)i Fw(not)40 b FB(p)s(ortable.)i(T)-8 b(o)32 b(supp)s(ort)330 1645 y Fz(gettext)j FB(at)j(the)g(C)f(lev)m(el,)j(man)m(y)e(systems')f (C)g(v)m(ersions)h(of)f Fz(sprintf)e FB(do)j(supp)s(ort)d(p)s (ositional)330 1754 y(sp)s(eci\014ers.)67 b(But)40 b(it)g(w)m(orks)g (only)f(if)h(enough)f(argumen)m(ts)h(are)g(supplied)e(in)h(the)h (function)f(call.)330 1864 y(Man)m(y)26 b(v)m(ersions)f(of)g Fz(awk)f FB(pass)h Fz(printf)e FB(formats)j(and)e(argumen)m(ts)h(unc)m (hanged)g(to)h(the)f(underlying)330 1973 y(C)40 b(library)g(v)m(ersion) g(of)h Fz(sprintf)p FB(,)g(but)e(only)h(one)h(format)f(and)g(argumen)m (t)h(at)g(a)f(time.)71 b(What)330 2083 y(happ)s(ens)38 b(if)h(a)h(p)s(ositional)h(sp)s(eci\014cation)f(is)g(used)f(is)g(an)m (yb)s(o)s(dy's)g(guess.)69 b(Ho)m(w)m(ev)m(er,)44 b(since)c(the)330 2193 y(p)s(ositional)f(sp)s(eci\014cations)g(are)g(primarily)g(for)f (use)g(in)g Fw(tr)-5 b(anslate)g(d)51 b FB(format)39 b(strings,)i(and)d(since)330 2302 y(non-GNU)g Fz(awk)p FB(s)f(nev)m(er)h(retriev)m(e)h(the)f(translated)h(string,)g(this)f (should)f(not)h(b)s(e)f(a)h(problem)f(in)330 2412 y(practice.)150 2661 y FA(9.5)68 b(A)44 b(Simple)i(In)l(ternationalization)i(Example) 150 2821 y FB(No)m(w)36 b(let's)h(lo)s(ok)g(at)f(a)g(step-b)m(y-step)h (example)f(of)g(ho)m(w)g(to)g(in)m(ternationalize)j(and)c(lo)s(calize)j (a)e(simple)150 2930 y Fz(awk)29 b FB(program,)i(using)f(`)p Fz(guide.awk)p FB(')e(as)j(our)f(original)h(source:)390 3076 y Fz(BEGIN)46 b({)581 3186 y(TEXTDOMAIN)f(=)i("guide")581 3295 y(bindtextdomain\("."\))90 b(#)48 b(for)f(testing)581 3405 y(print)f(_"Don't)g(Panic")581 3515 y(print)g(_"The)h(Answer)f (Is",)g(42)581 3624 y(print)g("Pardon)g(me,)h(Zaphod)f(who?")390 3734 y(})150 3880 y FB(Run)29 b(`)p Fz(gawk)h(--gen-po)p FB(')e(to)j(create)h(the)f(`)p Fz(.po)p FB(')f(\014le:)390 4026 y Fz($)47 b(gawk)g(--gen-po)f(-f)h(guide.awk)e(>)j(guide.po)150 4171 y FB(This)30 b(pro)s(duces:)390 4317 y Fz(#:)47 b(guide.awk:4)390 4427 y(msgid)f("Don't)g(Panic")390 4537 y(msgstr)g("")390 4756 y(#:)h(guide.awk:5)390 4865 y(msgid)f("The)h(Answer)f(Is")390 4975 y(msgstr)g("")275 5230 y FB(This)34 b(original)i(p)s(ortable)f(ob)5 b(ject)36 b(\014le)f(is)g(sa)m(v)m(ed)i(and)d(reused)g(for)h(eac)m(h)h(language)h (in)m(to)f(whic)m(h)f(the)150 5340 y(application)26 b(is)g(translated.) 39 b(The)25 b Fz(msgid)e FB(is)j(the)f(original)h(string)f(and)g(the)g Fz(msgstr)e FB(is)i(the)h(translation.)p eop end %%Page: 163 175 TeXDict begin 163 174 bop 1837 -116 a Fr(Chapter)30 b(9:)41 b(In)m(ternationalization)34 b(with)c Fz(gawk)90 b FB(163)390 299 y Fr(NOTE:)42 b FB(Strings)f(not)h(mark)m(ed)g(with)f(a)h(leading)h (underscore)e(do)g(not)h(app)s(ear)f(in)h(the)390 408 y(`)p Fz(guide.po)p FB(')29 b(\014le.)275 542 y(Next,)36 b(the)e(messages)h(m)m(ust)f(b)s(e)g(translated.)52 b(Here)35 b(is)f(a)g(translation)i(to)e(a)h(h)m(yp)s(othetical)g(dialect)150 652 y(of)c(English,)f(called)h(\\Mello)m(w":)1257 619 y Fo(6)390 785 y Fz($)47 b(cp)h(guide.po)d(guide-mellow.po)390 895 y Fk(Add)i(translations)d(to)58 b Fz(guide-mellow.po)44 b(...)150 1029 y FB(F)-8 b(ollo)m(wing)33 b(are)e(the)f(translations:) 390 1163 y Fz(#:)47 b(guide.awk:4)390 1272 y(msgid)f("Don't)g(Panic") 390 1382 y(msgstr)g("Hey)h(man,)f(relax!")390 1601 y(#:)h(guide.awk:5) 390 1710 y(msgid)f("The)h(Answer)f(Is")390 1820 y(msgstr)g("Like,)g (the)h(scoop)f(is")275 2063 y FB(The)25 b(next)g(step)h(is)f(to)i(mak)m (e)f(the)g(directory)g(to)g(hold)f(the)h(binary)f(message)h(ob)5 b(ject)27 b(\014le)e(and)g(then)g(to)150 2173 y(create)34 b(the)e(`)p Fz(guide.mo)p FB(')e(\014le.)47 b(The)31 b(directory)i(la)m(y)m(out)h(sho)m(wn)e(here)g(is)g(standard)f(for)h (GNU)h Fz(gettext)150 2283 y FB(on)d(GNU/Lin)m(ux)h(systems.)41 b(Other)30 b(v)m(ersions)h(of)f Fz(gettext)e FB(ma)m(y)j(use)g(a)f (di\013eren)m(t)h(la)m(y)m(out:)390 2416 y Fz($)47 b(mkdir)g(en_US)f (en_US/LC_MESSAGES)275 2550 y FB(The)g Fz(msgfmt)e FB(utilit)m(y)k(do)s (es)f(the)f(con)m(v)m(ersion)i(from)e(h)m(uman-readable)h(`)p Fz(.po)p FB(')f(\014le)h(to)g(mac)m(hine-)150 2660 y(readable)41 b(`)p Fz(.mo)p FB(')f(\014le.)71 b(By)41 b(default,)i Fz(msgfmt)c FB(creates)j(a)f(\014le)f(named)h(`)p Fz(messages)p FB('.)69 b(This)39 b(\014le)i(m)m(ust)150 2769 y(b)s(e)30 b(renamed)g(and)f(placed)i(in)f(the)h(prop)s(er)e(directory)i(so)f (that)h Fz(gawk)e FB(can)i(\014nd)e(it:)390 2903 y Fz($)47 b(msgfmt)g(guide-mellow.po)390 3012 y($)g(mv)h(messages)d (en_US/LC_MESSAGES/guide.m)o(o)275 3146 y FB(Finally)-8 b(,)32 b(w)m(e)e(run)f(the)i(program)f(to)h(test)g(it:)390 3280 y Fz($)47 b(gawk)g(-f)g(guide.awk)410 3393 y Fy(a)533 3389 y Fz(Hey)g(man,)g(relax!)410 3503 y Fy(a)533 3499 y Fz(Like,)g(the)f(scoop)h(is)g(42)410 3613 y Fy(a)533 3609 y Fz(Pardon)f(me,)h(Zaphod)f(who?)275 3742 y FB(If)23 b(the)h(three)g(replacemen)m(t)i(functions)d(for)h Fz(dcgettext)p FB(,)f Fz(dcngettext)e FB(and)i Fz(bindtextdomain)d FB(\(see)150 3852 y(Section)29 b(9.4.3)g([)p Fz(awk)f FB(P)m(ortabilit)m(y)i (Issues],)e(page)h(161\))g(are)f(in)g(a)g(\014le)g(named)g(`)p Fz(libintl.awk)p FB(',)e(then)h(w)m(e)150 3962 y(can)k(run)e(`)p Fz(guide.awk)p FB(')f(unc)m(hanged)i(as)h(follo)m(ws:)390 4095 y Fz($)47 b(gawk)g(--posix)f(-f)h(guide.awk)e(-f)j(libintl.awk)410 4209 y Fy(a)533 4205 y Fz(Don't)f(Panic)410 4318 y Fy(a)533 4314 y Fz(The)g(Answer)f(Is)h(42)410 4428 y Fy(a)533 4424 y Fz(Pardon)f(me,)h(Zaphod)f(who?)150 4655 y FA(9.6)68 b Fq(gawk)43 b FA(Can)i(Sp)t(eak)g(Y)-11 b(our)44 b(Language)150 4814 y FB(As)63 b(of)h(v)m(ersion)f(3.1,)73 b Fz(gawk)62 b FB(itself)i(has)f(b)s(een)f(in)m(ternationalized)k(using)d(the)g(GNU) h Fz(gettext)150 4924 y FB(pac)m(k)-5 b(age.)225 b(\(GNU)92 b Fz(gettext)d FB(is)i(describ)s(ed)f(in)h(complete)h(detail)g(in)f Fx(GNU)h(gettext)150 5034 y(to)s(ols)p FB(.\))141 b(As)63 b(of)h(this)f(writing,)72 b(the)64 b(latest)h(v)m(ersion)e(of)h(GNU)g Fz(gettext)d FB(is)j(v)m(ersion)g(0.11.5)150 5143 y(\()p Fz(ftp://ftp.gnu.org/gnu/gett)o(ext)o(/get)o(text)o(-0.)o(11.5)o(.tar)o (.gz)o FB(\).)p 150 5241 1200 4 v 199 5308 a Fo(6)275 5340 y Fn(P)n(erhaps)25 b(it)h(w)n(ould)g(b)r(e)g(b)r(etter)f(if)i(it)e (w)n(ere)i(called)f(\\Hipp)n(y)-6 b(.")34 b(Ah,)25 b(w)n(ell.)p eop end %%Page: 164 176 TeXDict begin 164 175 bop 150 -116 a FB(164)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(If)c(a)g(translation)i(of)f Fz(gawk)p FB('s)e(messages)i (exists,)i(then)d Fz(gawk)f FB(pro)s(duces)g(usage)i(messages,)i(w)m (arnings,)150 408 y(and)h(fatal)h(errors)f(in)g(the)h(lo)s(cal)g (language.)p eop end %%Page: 165 177 TeXDict begin 165 176 bop 1924 -116 a Fr(Chapter)30 b(10:)41 b(Adv)-5 b(anced)30 b(F)-8 b(eatures)31 b(of)g Fz(gawk)90 b FB(165)150 299 y Fu(10)80 b(Adv)-9 b(anced)53 b(F)-13 b(eatures)52 b(of)i Fi(gawk)390 636 y Fw(Write)34 b(do)-5 b(cumentation)37 b(as)e(if)f(who)-5 b(ever)35 b(r)-5 b(e)g(ads)36 b(it)e(is)h(a)f(violent)h(psychop)-5 b(ath)38 b(who)d(knows)390 746 y(wher)-5 b(e)34 b(you)f(live.)390 855 y FB(Stev)m(e)e(English,)g(as)f(quoted)h(b)m(y)f(P)m(eter)h (Langston)275 1024 y(This)36 b(c)m(hapter)i(discusses)f(adv)-5 b(anced)37 b(features)h(in)f Fz(gawk)p FB(.)60 b(It's)38 b(a)f(bit)h(of)f(a)h(\\grab)g(bag")g(of)f(items)150 1134 y(that)g(are)f(otherwise)h(unrelated)f(to)h(eac)m(h)h(other.)58 b(First,)39 b(a)d(command-line)h(option)g(allo)m(ws)g Fz(gawk)e FB(to)150 1244 y(recognize)42 b(nondecimal)g(n)m(um)m(b)s (ers)d(in)h(input)g(data,)k(not)d(just)f(in)g Fz(awk)g FB(programs.)71 b(Next,)44 b(t)m(w)m(o-w)m(a)m(y)150 1353 y(I/O,)38 b(discussed)f(brie\015y)g(in)g(earlier)i(parts)f(of)g (this)f(b)s(o)s(ok,)j(is)e(describ)s(ed)e(in)i(full)f(detail,)k(along)e (with)150 1463 y(the)e(basics)f(of)h(TCP/IP)f(net)m(w)m(orking)h(and)f (BSD)h(p)s(ortal)f(\014les.)59 b(Finally)-8 b(,)39 b Fz(gawk)d FB(can)g Fx(pro\014le)42 b FB(an)36 b Fz(awk)150 1572 y FB(program,)30 b(making)h(it)g(p)s(ossible)f(to)h(tune)f(it)h (for)f(p)s(erformance.)275 1741 y(Section)h(C.3)f([Adding)g(New)h (Built-in)g(F)-8 b(unctions)31 b(to)g Fz(gawk)p FB(],)e(page)i(282,)h (discusses)e(the)g(abilit)m(y)i(to)150 1851 y(dynamically)c(add)e(new)h (built-in)g(functions)g(to)g Fz(gawk)p FB(.)39 b(As)27 b(this)g(feature)h(is)f(still)h(immature)f(and)f(lik)m(ely)150 1960 y(to)31 b(c)m(hange,)h(its)f(description)f(is)g(relegated)j(to)e (an)f(app)s(endix.)150 2245 y FA(10.1)68 b(Allo)l(wing)46 b(Nondecimal)g(Input)f(Data)150 2404 y FB(If)25 b(y)m(ou)g(run)f Fz(gawk)g FB(with)g(the)i(`)p Fz(--non-decimal-data)p FB(')20 b(option,)27 b(y)m(ou)f(can)f(ha)m(v)m(e)h(nondecimal)g (constan)m(ts)150 2514 y(in)k(y)m(our)g(input)g(data:)390 2683 y Fz($)47 b(echo)g(0123)g(123)g(0x123)f(|)390 2792 y(>)h(gawk)g(--non-decimal-data)c('{)k(printf)f("\045d,)h(\045d,)g (\045d\\n",)390 2902 y(>)1957 b($1,)46 b($2,)h($3)h(}')410 3015 y Fy(a)533 3011 y Fz(83,)f(123,)g(291)275 3180 y FB(F)-8 b(or)31 b(this)f(feature)h(to)g(w)m(ork,)g(write)f(y)m(our)g (program)h(so)f(that)h Fz(gawk)e FB(treats)j(y)m(our)e(data)h(as)g(n)m (umeric:)390 3349 y Fz($)47 b(echo)g(0123)g(123)g(0x123)f(|)h(gawk)g ('{)g(print)g($1,)g($2,)f($3)i(}')410 3463 y Fy(a)533 3459 y Fz(0123)f(123)g(0x123)150 3628 y FB(The)30 b Fz(print)e FB(statemen)m(t)k(treats)f(its)g(expressions)f(as)g(strings.)40 b(Although)31 b(the)f(\014elds)f(can)i(act)g(as)f(n)m(um-)150 3737 y(b)s(ers)c(when)g(necessary)-8 b(,)29 b(they)f(are)f(still)h (strings,)g(so)g Fz(print)e FB(do)s(es)g(not)i(try)f(to)h(treat)g(them) f(n)m(umerically)-8 b(.)150 3847 y(Y)g(ou)31 b(ma)m(y)g(need)f(to)h (add)f(zero)h(to)g(a)g(\014eld)f(to)h(force)g(it)g(to)g(b)s(e)f (treated)h(as)g(a)f(n)m(um)m(b)s(er.)40 b(F)-8 b(or)31 b(example:)390 4016 y Fz($)47 b(echo)g(0123)g(123)g(0x123)f(|)h(gawk)g (--non-decimal-data)c(')390 4125 y(>)k({)h(print)e($1,)h($2,)g($3)390 4235 y(>)143 b(print)46 b($1)h(+)h(0,)f($2)g(+)h(0,)f($3)g(+)h(0)f(}') 410 4349 y Fy(a)533 4345 y Fz(0123)g(123)g(0x123)410 4458 y Fy(a)533 4454 y Fz(83)g(123)g(291)275 4623 y FB(Because)41 b(it)f(is)g(common)g(to)h(ha)m(v)m(e)g(decimal)g(data)f(with)g(leading) h(zeros,)i(and)c(b)s(ecause)h(using)f(it)150 4733 y(could)30 b(lead)g(to)h(surprising)d(results,)i(the)g(default)g(is)g(to)h(lea)m (v)m(e)h(this)e(facilit)m(y)i(disabled.)40 b(If)29 b(y)m(ou)h(w)m(an)m (t)h(it,)150 4842 y(y)m(ou)g(m)m(ust)f(explicitly)i(request)e(it.)275 5011 y Fr(Caution:)40 b Fw(Use)32 b(of)g(this)h(option)h(is)e(not)h(r) -5 b(e)g(c)g(ommende)g(d.)43 b FB(It)30 b(can)h(break)f(old)g(programs) f(v)m(ery)i(badly)-8 b(.)150 5121 y(Instead,)48 b(use)d(the)f Fz(strtonum)f FB(function)h(to)h(con)m(v)m(ert)h(y)m(our)f(data)g (\(see)h(Section)f(5.1.2)i([Octal)f(and)150 5230 y(Hexadecimal)34 b(Num)m(b)s(ers],)e(page)h(73\).)47 b(This)31 b(mak)m(es)i(y)m(our)g (programs)e(easier)i(to)g(write)g(and)e(easier)i(to)150 5340 y(read,)e(and)e(leads)i(to)g(less)g(surprising)e(results.)p eop end %%Page: 166 178 TeXDict begin 166 177 bop 150 -116 a FB(166)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FA(10.2)68 b(Tw)l(o-W)-11 b(a)l(y)46 b(Comm)l(unications)g(with)f (Another)g(Pro)t(cess)390 436 y Fm(From:)40 b(brennan@whidbey.com)k (\(Mike)c(Brennan\))390 523 y(Newsgroups:)i(comp.lang.awk)390 610 y(Subject:)f(Re:)f(Learn)g(the)g(SECRET)h(to)f(Attract)g(Women)h (Easily)390 697 y(Date:)f(4)g(Aug)g(1997)g(17:34:46)h(GMT)390 785 y(Message-ID:)h(<5s53rm$eca@news.whidbey.com>)390 959 y(On)e(3)f(Aug)h(1997)g(13:17:43)h(GMT,)f(Want)h(More)f(Dates???) 390 1046 y(<tracy78@kilgrona.com>)k(wrote:)390 1133 y(>Learn)d(the)e (SECRET)i(to)f(Attract)h(Women)f(Easily)390 1220 y(>)390 1308 y(>The)g(SCENT\(tm\))81 b(Pheromone)41 b(Sex)f(Attractant)h(For)f (Men)g(to)g(Attract)h(Women)390 1482 y(The)f(scent)g(of)g(awk)g (programmers)i(is)d(a)h(lot)g(more)g(attractive)h(to)f(women)g(than)390 1569 y(the)g(scent)g(of)g(perl)g(programmers.)390 1656 y(--)390 1743 y(Mike)g(Brennan)275 1874 y FB(It)30 b(is)h(often)f (useful)g(to)h(b)s(e)f(able)h(to)g(send)f(data)h(to)g(a)g(separate)h (program)e(for)g(pro)s(cessing)g(and)g(then)150 1984 y(read)g(the)h(result.)40 b(This)30 b(can)h(alw)m(a)m(ys)h(b)s(e)d (done)i(with)f(temp)s(orary)g(\014les:)390 2115 y Fz(#)47 b(write)g(the)g(data)f(for)h(processing)390 2225 y(tempfile)f(=)h (\("mydata.")e(PROCINFO["pid"]\))390 2334 y(while)h(\()p Fk(not)h(done)g(with)f(data)11 b Fz(\))581 2444 y(print)46 b Fk(data)57 b Fz(|)48 b(\("subprogram)c(>)k(")f(tempfile\))390 2553 y(close\("subprogram)c(>)48 b(")f(tempfile\))390 2772 y(#)g(read)g(the)g(results,)f(remove)g(tempfile)f(when)i(done)390 2882 y(while)f(\(\(getline)g(newdata)f(<)j(tempfile\))d(>)j(0\))581 2992 y Fk(process)56 b Fz(newdata)46 b Fk(appropriately)390 3101 y Fz(close\(tempfile\))390 3211 y(system\("rm)f(")i(tempfile\))150 3342 y FB(This)30 b(w)m(orks,)g(but)g(not)h(elegan)m(tly)-8 b(.)43 b(Among)31 b(other)f(things,)h(it)g(requires)f(that)h(the)f (program)h(b)s(e)e(run)g(in)150 3451 y(a)h(directory)g(that)h(cannot)f (b)s(e)f(shared)g(among)i(users;)e(for)h(example,)g(`)p Fz(/tmp)p FB(')g(will)g(not)g(do,)g(as)g(another)150 3561 y(user)g(migh)m(t)h(happ)s(en)d(to)k(b)s(e)d(using)h(a)h(temp)s (orary)f(\014le)g(with)g(the)h(same)g(name.)275 3692 y(Starting)22 b(with)f(v)m(ersion)h(3.1)h(of)f Fz(gawk)p FB(,)h(it)f(is)g(p)s(ossible)f(to)h(op)s(en)f(a)i Fw(two-way)31 b FB(pip)s(e)21 b(to)h(another)g(pro)s(cess.)150 3801 y(The)28 b(second)h(pro)s(cess)f(is)h(termed)g(a)g Fx(copro)s(cess)p FB(,)h(since)f(it)g(runs)e(in)i(parallel)h(with)e Fz(gawk)p FB(.)39 b(The)28 b(t)m(w)m(o-w)m(a)m(y)150 3911 y(connection)k(is)e (created)h(using)f(the)h(new)f(`)p Fz(|&)p FB(')g(op)s(erator)h(\(b)s (orro)m(w)m(ed)f(from)g(the)g(Korn)g(shell,)h Fz(ksh)p FB(\):)3612 3878 y Fo(1)390 4042 y Fz(do)47 b({)581 4152 y(print)f Fk(data)57 b Fz(|&)48 b("subprogram")581 4261 y("subprogram")c(|&)k(getline)d(results)390 4371 y(})i(while)g(\()p Fk(data)f(left)h(to)g(process)11 b Fz(\))390 4480 y (close\("subprogram"\))275 4611 y FB(The)28 b(\014rst)g(time)i(an)f (I/O)f(op)s(eration)i(is)f(executed)h(using)e(the)h(`)p Fz(|&)p FB(')g(op)s(erator,)h Fz(gawk)e FB(creates)i(a)f(t)m(w)m(o-)150 4721 y(w)m(a)m(y)36 b(pip)s(eline)e(to)i(a)f(c)m(hild)g(pro)s(cess)f (that)i(runs)d(the)i(other)g(program.)53 b(Output)34 b(created)i(with)e Fz(print)150 4830 y FB(or)44 b Fz(printf)e FB(is)i(written)g(to)h(the)f(program's)g(standard)g(input,)i(and)e (output)f(from)h(the)g(program's)150 4940 y(standard)c(output)g(can)h (b)s(e)f(read)g(b)m(y)g(the)h Fz(gawk)e FB(program)i(using)f Fz(getline)p FB(.)69 b(As)40 b(is)h(the)g(case)g(with)150 5050 y(pro)s(cesses)27 b(started)h(b)m(y)g(`)p Fz(|)p FB(',)g(the)g(subprogram)e(can)i(b)s(e)e(an)m(y)i(program,)g(or)g(pip)s (eline)f(of)g(programs,)h(that)150 5159 y(can)j(b)s(e)e(started)i(b)m (y)g(the)f(shell.)p 150 5241 1200 4 v 199 5308 a Fo(1)275 5340 y Fn(This)c(is)g(v)n(ery)f(di\013eren)n(t)g(from)h(the)g(same)g (op)r(erator)h(in)e(the)h(C)g(shell,)h Fm(csh)p Fn(.)p eop end %%Page: 167 179 TeXDict begin 167 178 bop 1924 -116 a Fr(Chapter)30 b(10:)41 b(Adv)-5 b(anced)30 b(F)-8 b(eatures)31 b(of)g Fz(gawk)90 b FB(167)275 299 y(There)29 b(are)i(some)g(cautionary)g(items)g(to)g(b) s(e)f(a)m(w)m(are)i(of:)225 439 y Fy(\017)60 b FB(As)36 b(the)h(co)s(de)g(inside)f Fz(gawk)g FB(curren)m(tly)g(stands,)i(the)f (copro)s(cess's)g(standard)e(error)h(go)s(es)h(to)h(the)330 548 y(same)d(place)g(that)g(the)g(paren)m(t)f Fz(gawk)p FB('s)f(standard)h(error)g(go)s(es.)53 b(It)35 b(is)f(not)h(p)s (ossible)e(to)i(read)g(the)330 658 y(c)m(hild's)c(standard)e(error)h (separately)-8 b(.)225 795 y Fy(\017)60 b FB(I/O)30 b(bu\013ering)f(ma) m(y)i(b)s(e)e(a)h(problem.)40 b Fz(gawk)29 b FB(automatically)k (\015ushes)c(all)i(output)e(do)m(wn)h(the)g(pip)s(e)330 905 y(to)39 b(the)f(c)m(hild)g(pro)s(cess.)63 b(Ho)m(w)m(ev)m(er,)42 b(if)c(the)g(copro)s(cess)g(do)s(es)f(not)i(\015ush)d(its)i(output,)i Fz(gawk)c FB(ma)m(y)330 1014 y(hang)e(when)f(doing)h(a)h Fz(getline)d FB(in)h(order)h(to)h(read)f(the)g(copro)s(cess's)g (results.)52 b(This)33 b(could)h(lead)330 1124 y(to)28 b(a)f(situation)i(kno)m(wn)d(as)i Fx(deadlo)s(c)m(k)p FB(,)h(where)d(eac)m(h)j(pro)s(cess)d(is)h(w)m(aiting)i(for)e(the)g (other)h(one)f(to)h(do)330 1234 y(something.)275 1401 y(It)35 b(is)g(p)s(ossible)g(to)h(close)g(just)f(one)g(end)f(of)i(the)f (t)m(w)m(o-w)m(a)m(y)j(pip)s(e)c(to)i(a)g(copro)s(cess,)h(b)m(y)e (supplying)f(a)150 1511 y(second)f(argumen)m(t)g(to)g(the)g Fz(close)e FB(function)h(of)h(either)g Fz("to")e FB(or)i Fz("from")e FB(\(see)i(Section)h(4.8)f([Closing)150 1620 y(Input)f(and)h(Output)f(Redirections],)j(page)f(70\).)51 b(These)33 b(strings)h(tell)g Fz(gawk)e FB(to)i(close)h(the)f(end)e(of) i(the)150 1730 y(pip)s(e)29 b(that)i(sends)f(data)h(to)g(the)g(pro)s (cess)f(or)g(the)g(end)g(that)h(reads)f(from)g(it,)h(resp)s(ectiv)m (ely)-8 b(.)275 1870 y(This)36 b(is)i(particularly)g(necessary)f(in)g (order)g(to)h(use)g(the)f(system)h Fz(sort)e FB(utilit)m(y)j(as)e(part) h(of)f(a)h(co-)150 1980 y(pro)s(cess;)33 b Fz(sort)e FB(m)m(ust)h(read)g Fw(al)5 b(l)42 b FB(of)32 b(its)h(input)e(data)i(b) s(efore)e(it)i(can)f(pro)s(duce)f(an)m(y)i(output.)45 b(The)32 b Fz(sort)150 2089 y FB(program)39 b(do)s(es)f(not)h(receiv)m (e)i(an)e(end-of-\014le)g(indication)h(un)m(til)f Fz(gawk)e FB(closes)j(the)f(write)h(end)e(of)h(the)150 2199 y(pip)s(e.)275 2339 y(When)31 b(y)m(ou)g(ha)m(v)m(e)i(\014nished)d(writing)h(data)h (to)h(the)e Fz(sort)f FB(utilit)m(y)-8 b(,)34 b(y)m(ou)e(can)g(close)g (the)g Fz("to")e FB(end)h(of)150 2448 y(the)g(pip)s(e,)e(and)h(then)g (start)h(reading)g(sorted)f(data)h(via)g Fz(getline)p FB(.)39 b(F)-8 b(or)31 b(example:)390 2588 y Fz(BEGIN)46 b({)581 2698 y(command)g(=)h("LC_ALL=C)e(sort")581 2807 y(n)i(=)h(split\("abcdefghijklmnopq)o(rst)o(uvwx)o(yz",)41 b(a,)47 b(""\))581 3027 y(for)g(\(i)g(=)g(n;)h(i)f(>)h(0;)f(i--\))772 3136 y(print)f(a[i])h(|&)g(command)581 3246 y(close\(command,)d("to"\)) 581 3465 y(while)i(\(\(command)g(|&)h(getline)f(line\))g(>)h(0\))772 3575 y(print)f("got",)g(line)581 3684 y(close\(command\))390 3794 y(})275 3934 y FB(This)29 b(program)h(writes)h(the)g(letters)g(of) g(the)g(alphab)s(et)f(in)g(rev)m(erse)h(order,)f(one)h(p)s(er)f(line,)h (do)m(wn)f(the)150 4043 y(t)m(w)m(o-w)m(a)m(y)39 b(pip)s(e)c(to)i Fz(sort)p FB(.)57 b(It)36 b(then)g(closes)i(the)e(write)h(end)e(of)h (the)h(pip)s(e,)g(so)f(that)h Fz(sort)e FB(receiv)m(es)j(an)150 4153 y(end-of-\014le)32 b(indication.)44 b(This)30 b(causes)i Fz(sort)e FB(to)i(sort)f(the)h(data)g(and)e(write)i(the)f(sorted)g (data)h(bac)m(k)g(to)150 4263 y(the)f Fz(gawk)g FB(program.)43 b(Once)31 b(all)h(of)g(the)f(data)h(has)f(b)s(een)g(read,)g Fz(gawk)f FB(terminates)i(the)g(copro)s(cess)g(and)150 4372 y(exits.)275 4512 y(As)23 b(a)g(side)h(note,)h(the)f(assignmen)m (t)g(`)p Fz(LC_ALL=C)p FB(')d(in)i(the)h Fz(sort)e FB(command)h (ensures)f(traditional)j(Unix)150 4622 y(\(ASCI)s(I\))30 b(sorting)g(from)g Fz(sort)p FB(.)275 4762 y(Beginning)f(with)g Fz(gawk)f FB(3.1.2,)k(y)m(ou)d(ma)m(y)h(use)f(Pseudo-tt)m(ys)h(\(pt)m (ys\))g(for)f(t)m(w)m(o-w)m(a)m(y)i(comm)m(unication)150 4871 y(instead)j(of)f(pip)s(es,)h(if)f(y)m(our)h(system)f(supp)s(orts)f (them.)50 b(This)32 b(is)i(done)f(on)g(a)h(p)s(er-command)f(basis,)h(b) m(y)150 4981 y(setting)e(a)g(sp)s(ecial)f(elemen)m(t)i(in)e(the)g Fz(PROCINFO)e FB(arra)m(y)j(\(see)g(Section)g(6.5.2)g([Built-in)h(V)-8 b(ariables)32 b(That)150 5090 y(Con)m(v)m(ey)f(Information],)g(page)g (110\),)h(lik)m(e)g(so:)390 5230 y Fz(command)46 b(=)h("sort)g(-nr")524 b(#)47 b(command,)f(saved)g(in)h(variable)f(for)h(convenience)390 5340 y(PROCINFO[command,)c("pty"])j(=)i(1)143 b(#)47 b(update)f(PROCINFO)p eop end %%Page: 168 180 TeXDict begin 168 179 bop 150 -116 a FB(168)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(print)46 b(...)h(|&)g(command)333 b(#)47 b(start)f(two-way)g (pipe)390 408 y(...)150 542 y FB(Using)29 b(pt)m(ys)h(a)m(v)m(oids)g (the)g(bu\013er)e(deadlo)s(c)m(k)i(issues)f(describ)s(ed)f(earlier,)i (at)g(some)g(loss)f(in)g(p)s(erformance.)150 651 y(If)e(y)m(our)h (system)g(do)s(es)g(not)g(ha)m(v)m(e)h(pt)m(ys,)g(or)f(if)g(all)h(the)f (system's)g(pt)m(ys)g(are)g(in)g(use,)g Fz(gawk)f FB(automatically)150 761 y(falls)k(bac)m(k)g(to)g(using)f(regular)h(pip)s(es.)150 991 y FA(10.3)68 b(Using)46 b Fq(gawk)d FA(for)i(Net)l(w)l(ork)h (Programming)390 1150 y Fz(EMISTERED)p FB(:)38 b Fw(A)32 b(host)i(is)f(a)g(host)h(fr)-5 b(om)33 b(c)-5 b(o)g(ast)35 b(to)e(c)-5 b(o)g(ast,)390 1260 y(and)34 b(no-one)f(c)-5 b(an)33 b(talk)g(to)g(host)h(that's)g(close,)390 1369 y(unless)f(the)g(host)h(that)g(isn)-9 b('t)32 b(close)390 1479 y(is)h(busy)f(hung)h(or)g(de)-5 b(ad.)275 1612 y FB(In)28 b(addition)h(to)h(b)s(eing)f(able)h(to)f(op)s(en)g(a)g(t)m(w)m (o-w)m(a)m(y)j(pip)s(eline)d(to)h(a)f(copro)s(cess)h(on)f(the)g(same)h (system)150 1722 y(\(see)23 b(Section)f(10.2)i([Tw)m(o-W)-8 b(a)m(y)24 b(Comm)m(unications)e(with)g(Another)f(Pro)s(cess],)j(page)f (166\),)i(it)e(is)e(p)s(ossible)150 1831 y(to)i(mak)m(e)g(a)g(t)m(w)m (o-w)m(a)m(y)h(connection)g(to)f(another)f(pro)s(cess)g(on)g(another)g (system)g(across)h(an)f(IP)g(net)m(w)m(orking)150 1941 y(connection.)275 2074 y(Y)-8 b(ou)27 b(can)h(think)f(of)g(this)h(as)f (just)g(a)h Fw(very)h(long)36 b FB(t)m(w)m(o-w)m(a)m(y)30 b(pip)s(eline)d(to)h(a)g(copro)s(cess.)40 b(The)27 b(w)m(a)m(y)h Fz(gawk)150 2184 y FB(decides)k(that)g(y)m(ou)g(w)m(an)m(t)g(to)g(use)g (TCP/IP)e(net)m(w)m(orking)j(is)f(b)m(y)f(recognizing)i(sp)s(ecial)f (\014le)g(names)f(that)150 2293 y(b)s(egin)f(with)g(`)p Fz(/inet/)p FB('.)275 2426 y(The)50 b(full)g(syn)m(tax)h(of)f(the)h(sp) s(ecial)g(\014le)g(name)f(is)h(`)p Fz(/inet/)p Fk(protocol)11 b Fz(/)p Fk(local-p)o(ort)f Fz(/)p Fk(re)o(mote)o(-)150 2536 y(host)h Fz(/)p Fk(remote-port)g FB('.)36 b(The)29 b(comp)s(onen)m(ts)i(are:)150 2693 y Fx(proto)s(col)155 b FB(The)37 b(proto)s(col)i(to)f(use)f(o)m(v)m(er)i(IP)-8 b(.)38 b(This)f(m)m(ust)g(b)s(e)g(either)h(`)p Fz(tcp)p FB(',)h(`)p Fz(udp)p FB(',)g(or)f(`)p Fz(raw)p FB(',)h(for)f(a)630 2802 y(TCP)-8 b(,)22 b(UDP)-8 b(,)23 b(or)g(ra)m(w)f(IP)g(connection,)j (resp)s(ectiv)m(ely)-8 b(.)40 b(The)21 b(use)h(of)h(TCP)e(is)h (recommended)630 2912 y(for)30 b(most)h(applications.)630 3045 y Fr(Caution:)55 b FB(The)37 b(use)h(of)f(ra)m(w)h(so)s(c)m(k)m (ets)i(is)d(not)h(curren)m(tly)g(supp)s(orted)e(in)h(v)m(ersion)h(3.1)h (of)630 3155 y Fz(gawk)p FB(.)150 3312 y Fx(lo)s(cal-p)s(ort)97 b FB(The)36 b(lo)s(cal)h(TCP)e(or)i(UDP)f(p)s(ort)g(n)m(um)m(b)s(er)f (to)i(use.)58 b(Use)36 b(a)h(p)s(ort)e(n)m(um)m(b)s(er)g(of)i(`)p Fz(0)p FB(')f(when)630 3421 y(y)m(ou)c(w)m(an)m(t)g(the)g(system)g(to)g (pic)m(k)g(a)g(p)s(ort.)44 b(This)31 b(is)h(what)f(y)m(ou)h(should)f (do)g(when)g(writing)630 3531 y(a)36 b(TCP)e(or)h(UDP)h(clien)m(t.)56 b(Y)-8 b(ou)36 b(ma)m(y)g(also)g(use)f(a)g(w)m(ell-kno)m(wn)h(service)g (name,)h(suc)m(h)e(as)630 3640 y(`)p Fz(smtp)p FB(')28 b(or)g(`)p Fz(http)p FB(',)g(in)g(whic)m(h)g(case)h Fz(gawk)e FB(attempts)i(to)g(determine)g(the)f(prede\014ned)f(p)s(ort)630 3750 y(n)m(um)m(b)s(er)i(using)h(the)h(C)e Fz(getservbyname)e FB(function.)150 3907 y Fx(remote-host)630 4016 y FB(The)37 b(IP)g(address)g(or)g(fully-quali\014ed)h(domain)f(name)h(of)g(the)f (In)m(ternet)h(host)g(to)g(whic)m(h)630 4126 y(y)m(ou)31 b(w)m(an)m(t)g(to)g(connect.)150 4283 y Fx(remote-p)s(ort)630 4392 y FB(The)c(TCP)g(or)h(UDP)h(p)s(ort)e(n)m(um)m(b)s(er)f(to)j(use)f (on)f(the)i(giv)m(en)f Fx(remote-host)p FB(.)42 b(Again,)29 b(use)f(`)p Fz(0)p FB(')630 4502 y(if)i(y)m(ou)h(don't)f(care,)i(or)e (else)h(a)g(w)m(ell-kno)m(wn)g(service)h(name.)275 4659 y(Consider)d(the)i(follo)m(wing)g(v)m(ery)g(simple)g(example:)390 4792 y Fz(BEGIN)46 b({)485 4902 y(Service)g(=)i ("/inet/tcp/0/localhost/)o(dayt)o(ime")485 5011 y(Service)e(|&)h (getline)485 5121 y(print)g($0)485 5230 y(close\(Service\))390 5340 y(})p eop end %%Page: 169 181 TeXDict begin 169 180 bop 1924 -116 a Fr(Chapter)30 b(10:)41 b(Adv)-5 b(anced)30 b(F)-8 b(eatures)31 b(of)g Fz(gawk)90 b FB(169)275 299 y(This)33 b(program)h(reads)g(the)g(curren)m(t)g(date) h(and)f(time)h(from)f(the)g(lo)s(cal)i(system's)e(TCP)f(`)p Fz(daytime)p FB(')150 408 y(serv)m(er.)41 b(It)30 b(then)h(prin)m(ts)e (the)i(results)f(and)g(closes)h(the)g(connection.)275 543 y(Because)c(this)e(topic)i(is)f(extensiv)m(e,)i(the)e(use)g(of)g Fz(gawk)e FB(for)i(TCP/IP)f(programming)g(is)h(do)s(cumen)m(ted)150 653 y(separately)-8 b(.)87 b(See)46 b Fx(TCP/IP)e(In)m(ternet)m(w)m (orking)j(with)e Fz(gawk)p FB(,)j(whic)m(h)d(comes)h(as)g(part)f(of)h (the)f Fz(gawk)150 762 y FB(distribution,)39 b(for)f(a)g(m)m(uc)m(h)g (more)g(complete)h(in)m(tro)s(duction)f(and)f(discussion,)j(as)e(w)m (ell)g(as)g(extensiv)m(e)150 872 y(examples.)150 1105 y FA(10.4)68 b(Using)46 b Fq(gawk)d FA(with)i(BSD)f(P)l(ortals)150 1264 y FB(Similar)h(to)h(the)g(`)p Fz(/inet)p FB(')e(sp)s(ecial)i (\014les,)j(if)c Fz(gawk)g FB(is)g(con\014gured)f(with)h(the)h(`)p Fz(--enable-portals)p FB(')150 1374 y(option)26 b(\(see)h(Section)f (B.2.1)i([Compiling)e Fz(gawk)e FB(for)i(Unix],)h(page)f(264\),)j(then) c Fz(gawk)g FB(treats)h(\014les)g(whose)150 1484 y(pathnames)k(b)s (egin)g(with)g Fz(/p)g FB(as)g(4.4)i(BSD-st)m(yle)g(p)s(ortals.)275 1618 y(When)24 b(used)g(with)h(the)g(`)p Fz(|&)p FB(')g(op)s(erator,)i Fz(gawk)c FB(op)s(ens)i(the)g(\014le)g(for)g(t)m(w)m(o-w)m(a)m(y)i (comm)m(unications.)40 b(The)150 1728 y(op)s(erating)24 b(system's)g(p)s(ortal)g(mec)m(hanism)g(then)g(manages)g(creating)i (the)e(pro)s(cess)f(asso)s(ciated)i(with)f(the)150 1838 y(p)s(ortal)30 b(and)g(the)h(corresp)s(onding)e(comm)m(unications)j (with)e(the)g(p)s(ortal's)h(pro)s(cess.)150 2070 y FA(10.5)68 b(Pro\014ling)46 b(Y)-11 b(our)44 b Fq(awk)f FA(Programs)150 2230 y FB(Beginning)23 b(with)g(v)m(ersion)g(3.1)h(of)f Fz(gawk)p FB(,)g(y)m(ou)h(ma)m(y)f(pro)s(duce)f(execution)i(traces)f (of)g(y)m(our)g Fz(awk)f FB(programs.)150 2339 y(This)30 b(is)g(done)g(with)g(a)h(sp)s(ecially)g(compiled)g(v)m(ersion)g(of)f Fz(gawk)p FB(,)g(called)h Fz(pgawk)e FB(\(\\pro\014ling)i Fz(gawk)p FB("\).)275 2474 y Fz(pgawk)37 b FB(is)i(iden)m(tical)h(in)f (ev)m(ery)g(w)m(a)m(y)h(to)f Fz(gawk)p FB(,)h(except)g(that)f(when)f (it)h(has)g(\014nished)e(running,)i(it)150 2584 y(creates)34 b(a)e(pro\014le)g(of)g(y)m(our)g(program)g(in)g(a)g(\014le)h(named)e(`) p Fz(awkprof.out)p FB('.)44 b(Because)33 b(it)g(is)f(pro\014ling,)g(it) 150 2693 y(also)f(executes)h(up)d(to)i(45\045)g(slo)m(w)m(er)h(than)e Fz(gawk)f FB(normally)i(do)s(es.)275 2828 y(As)j(sho)m(wn)f(in)h(the)g (follo)m(wing)h(example,)h(the)e(`)p Fz(--profile)p FB(')e(option)j (can)f(b)s(e)g(used)f(to)i(c)m(hange)g(the)150 2938 y(name)30 b(of)h(the)g(\014le)f(where)g Fz(pgawk)f FB(will)i(write)f(the)h (pro\014le:)390 3073 y Fz($)47 b(pgawk)g(--profile=myprog.prof)42 b(-f)47 b(myprog.awk)e(data1)h(data2)150 3207 y FB(In)21 b(the)g(ab)s(o)m(v)m(e)h(example,)i Fz(pgawk)c FB(places)i(the)g (pro\014le)f(in)g(`)p Fz(myprog.prof)p FB(')d(instead)k(of)f(in)g(`)p Fz(awkprof.out)p FB('.)275 3342 y(Regular)27 b Fz(gawk)f FB(also)i(accepts)g(this)f(option.)41 b(When)26 b(called)j(with)d(just) h(`)p Fz(--profile)p FB(',)f Fz(gawk)g FB(\\prett)m(y)150 3452 y(prin)m(ts")g(the)g(program)f(in)m(to)i(`)p Fz(awkprof.out)p FB(',)d(without)i(an)m(y)g(execution)h(coun)m(ts.)40 b(Y)-8 b(ou)26 b(ma)m(y)h(supply)d(an)150 3561 y(option)33 b(to)h(`)p Fz(--profile)p FB(')d(to)j(c)m(hange)g(the)f(\014le)g(name.) 48 b(Here)33 b(is)g(a)h(sample)f(session)g(sho)m(wing)g(a)g(simple)150 3671 y Fz(awk)c FB(program,)i(its)g(input)e(data,)i(and)f(the)h (results)f(from)g(running)e Fz(pgawk)p FB(.)40 b(First,)31 b(the)f Fz(awk)g FB(program:)390 3806 y Fz(BEGIN)46 b({)i(print)e ("First)g(BEGIN)h(rule")f(})390 4025 y(END)h({)g(print)g("First)f(END)h (rule")f(})390 4244 y(/foo/)g({)581 4354 y(print)g("matched)g(/foo/,)g (gosh")581 4463 y(for)h(\(i)g(=)g(1;)h(i)f(<=)g(3;)g(i++\))772 4573 y(sing\(\))390 4682 y(})390 4902 y({)581 5011 y(if)g(\(/foo/\))772 5121 y(print)f("if)h(is)g(true")581 5230 y(else)772 5340 y(print)f("else)h(is)g(true")p eop end %%Page: 170 182 TeXDict begin 170 181 bop 150 -116 a FB(170)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(})390 518 y(BEGIN)46 b({)i(print)e("Second)g(BEGIN)g(rule")h (})390 737 y(END)g({)g(print)g("Second)f(END)g(rule")h(})390 956 y(function)f(sing\()189 b(dummy\))390 1066 y({)581 1176 y(print)46 b("I)h(gotta)g(be)g(me!")390 1285 y(})275 1422 y FB(F)-8 b(ollo)m(wing)32 b(is)f(the)f(input)g(data:)390 1559 y Fz(foo)390 1669 y(bar)390 1778 y(baz)390 1888 y(foo)390 1998 y(junk)275 2134 y FB(Here)36 b(is)h(the)f(`)p Fz(awkprof.out)p FB(')e(that)j(results)f(from)g(running)e Fz(pgawk)h FB(on)h(this)g(program)h(and)e(data)150 2244 y(\(this)c(example)g(also)g(illustrates)g(that)g Fz(awk)f FB(programmers)g(sometimes)h(ha)m(v)m(e)h(to)f(w)m(ork)f(late\):)772 2381 y Fz(#)47 b(gawk)g(profile,)e(created)h(Sun)h(Aug)g(13)g(00:00:15) f(2000)772 2600 y(#)h(BEGIN)g(block\(s\))772 2819 y(BEGIN)f({)629 2929 y(1)477 b(print)46 b("First)g(BEGIN)g(rule")629 3039 y(1)477 b(print)46 b("Second)g(BEGIN)g(rule")772 3148 y(})772 3367 y(#)h(Rule\(s\))629 3587 y(5)95 b(/foo/)142 b({)47 b(#)h(2)629 3696 y(2)477 b(print)46 b("matched)g(/foo/,)g(gosh") 629 3806 y(6)477 b(for)47 b(\(i)g(=)g(1;)g(i)h(<=)f(3;)g(i++\))g({)629 3915 y(6)858 b(sing\(\))1154 4025 y(})772 4134 y(})629 4354 y(5)95 b({)629 4463 y(5)477 b(if)47 b(\(/foo/\))f({)h(#)h(2)629 4573 y(2)858 b(print)47 b("if)g(is)g(true")629 4682 y(3)477 b(})47 b(else)g({)629 4792 y(3)858 b(print)47 b("else)f(is)h(true")1154 4902 y(})772 5011 y(})772 5230 y(#)g(END)g(block\(s\))p eop end %%Page: 171 183 TeXDict begin 171 182 bop 1924 -116 a Fr(Chapter)30 b(10:)41 b(Adv)-5 b(anced)30 b(F)-8 b(eatures)31 b(of)g Fz(gawk)90 b FB(171)772 299 y Fz(END)47 b({)629 408 y(1)477 b(print)46 b("First)g(END)h(rule")629 518 y(1)477 b(print)46 b("Second)g(END)h (rule")772 628 y(})772 847 y(#)g(Functions,)e(listed)h(alphabetically) 629 1066 y(6)95 b(function)45 b(sing\(dummy\))772 1176 y({)629 1285 y(6)477 b(print)46 b("I)h(gotta)g(be)g(me!")772 1395 y(})275 1521 y FB(This)33 b(example)j(illustrates)g(man)m(y)e(of)h (the)g(basic)g(rules)f(for)h(pro\014ling)f(output.)53 b(The)34 b(rules)h(are)g(as)150 1631 y(follo)m(ws:)225 1757 y Fy(\017)60 b FB(The)39 b(program)h(is)g(prin)m(ted)f(in)h(the)g (order)f Fz(BEGIN)g FB(rule,)j(pattern/action)g(rules,)g Fz(END)d FB(rule)h(and)330 1867 y(functions,)30 b(listed)h(alphab)s (etically)-8 b(.)43 b(Multiple)31 b Fz(BEGIN)e FB(and)h Fz(END)f FB(rules)h(are)h(merged)f(together.)225 1993 y Fy(\017)60 b FB(P)m(attern-action)40 b(rules)d(ha)m(v)m(e)i(t)m(w)m (o)g(coun)m(ts.)63 b(The)37 b(\014rst)g(coun)m(t,)k(to)d(the)g(left)g (of)g(the)g(rule,)h(sho)m(ws)330 2103 y(ho)m(w)c(man)m(y)g(times)h(the) f(rule's)g(pattern)g(w)m(as)g Fw(teste)-5 b(d)p FB(.)56 b(The)35 b(second)g(coun)m(t,)i(to)f(the)f(righ)m(t)h(of)f(the)330 2212 y(rule's)h(op)s(ening)f(left)i(brace)f(in)f(a)h(commen)m(t,)j(sho) m(ws)d(ho)m(w)f(man)m(y)h(times)h(the)f(rule's)f(action)j(w)m(as)330 2322 y Fw(exe)-5 b(cute)g(d)p FB(.)42 b(The)30 b(di\013erence)h(b)s(et) m(w)m(een)h(the)e(t)m(w)m(o)i(indicates)g(ho)m(w)f(man)m(y)f(times)i (the)e(rule's)h(pattern)330 2432 y(ev)-5 b(aluated)32 b(to)f(false.)225 2558 y Fy(\017)60 b FB(Similarly)-8 b(,)27 b(the)f(coun)m(t)f(for)g(an)g Fz(if)p FB(-)p Fz(else)f FB(statemen)m(t)j(sho)m(ws)e(ho)m(w)g(man)m(y)h(times)f(the)h (condition)g(w)m(as)330 2668 y(tested.)41 b(T)-8 b(o)29 b(the)f(righ)m(t)h(of)g(the)g(op)s(ening)f(left)h(brace)f(for)h(the)f Fz(if)p FB('s)g(b)s(o)s(dy)f(is)i(a)f(coun)m(t)h(sho)m(wing)g(ho)m(w) 330 2777 y(man)m(y)h(times)g(the)g(condition)g(w)m(as)g(true.)40 b(The)29 b(coun)m(t)h(for)f(the)h Fz(else)f FB(indicates)h(ho)m(w)g (man)m(y)f(times)330 2887 y(the)i(test)g(failed.)225 3013 y Fy(\017)60 b FB(The)23 b(coun)m(t)i(for)f(a)g(lo)s(op)g(header)g (\(suc)m(h)g(as)g Fz(for)f FB(or)h Fz(while)p FB(\))f(sho)m(ws)g(ho)m (w)h(man)m(y)g(times)h(the)f(lo)s(op)g(test)330 3123 y(w)m(as)30 b(executed.)41 b(\(Because)32 b(of)d(this,)h(y)m(ou)g (can't)h(just)e(lo)s(ok)h(at)g(the)g(coun)m(t)g(on)f(the)h(\014rst)f (statemen)m(t)330 3232 y(in)h(a)g(rule)g(to)h(determine)g(ho)m(w)f(man) m(y)g(times)h(the)f(rule)g(w)m(as)h(executed.)41 b(If)30 b(the)g(\014rst)g(statemen)m(t)i(is)330 3342 y(a)f(lo)s(op,)g(the)f (coun)m(t)h(is)f(misleading.\))225 3469 y Fy(\017)60 b FB(F)-8 b(or)44 b(user-de\014ned)e(functions,)k(the)e(coun)m(t)g (next)f(to)h(the)g Fz(function)d FB(k)m(eyw)m(ord)j(indicates)g(ho)m(w) 330 3578 y(man)m(y)36 b(times)g(the)g(function)f(w)m(as)h(called.)58 b(The)35 b(coun)m(ts)h(next)g(to)g(the)g(statemen)m(ts)h(in)f(the)g(b)s (o)s(dy)330 3688 y(sho)m(w)30 b(ho)m(w)h(man)m(y)f(times)h(those)g (statemen)m(ts)h(w)m(ere)f(executed.)225 3814 y Fy(\017)60 b FB(The)34 b(la)m(y)m(out)i(uses)e(\\K&R")h(st)m(yle)h(with)e(tabs.)53 b(Braces)35 b(are)g(used)f(ev)m(erywhere,)i(ev)m(en)f(when)f(the)330 3924 y(b)s(o)s(dy)29 b(of)h(an)h Fz(if)p FB(,)f Fz(else)p FB(,)f(or)h(lo)s(op)h(is)f(only)h(a)g(single)g(statemen)m(t.)225 4050 y Fy(\017)60 b FB(P)m(aren)m(theses)31 b(are)g(used)f(only)g (where)g(needed,)h(as)f(indicated)h(b)m(y)g(the)f(structure)g(of)h(the) f(program)330 4160 y(and)j(the)g(precedence)h(rules.)50 b(F)-8 b(or)34 b(example,)h(`)p Fz(\(3)30 b(+)g(5\))g(*)g(4)p FB(')j(means)h(add)e(three)i(plus)e(\014v)m(e,)j(then)330 4269 y(m)m(ultiply)27 b(the)h(total)h(b)m(y)e(four.)39 b(Ho)m(w)m(ev)m(er,)30 b(`)p Fz(3)g(+)g(5)g(*)g(4)p FB(')d(has)g(no)g (paren)m(theses,)i(and)d(means)h(`)p Fz(3)k(+)f(\(5)330 4379 y(*)g(4\))p FB('.)225 4505 y Fy(\017)60 b FB(All)31 b(string)f(concatenations)j(are)e(paren)m(thesized)g(to)s(o.)41 b(\(This)30 b(could)g(b)s(e)g(made)h(a)f(bit)h(smarter.\))225 4632 y Fy(\017)60 b FB(P)m(aren)m(theses)28 b(are)f(used)e(around)h (the)h(argumen)m(ts)f(to)i Fz(print)d FB(and)h Fz(printf)e FB(only)j(when)f(the)g Fz(print)330 4741 y FB(or)e Fz(printf)f FB(statemen)m(t)j(is)e(follo)m(w)m(ed)i(b)m(y)e(a)g(redirection.)40 b(Similarly)-8 b(,)26 b(if)e(the)h(target)g(of)g(a)f(redirection)330 4851 y(isn't)31 b(a)f(scalar,)i(it)f(gets)g(paren)m(thesized.)225 4977 y Fy(\017)60 b Fz(pgawk)19 b FB(supplies)h(leading)i(commen)m(ts)g (in)e(fron)m(t)h(of)g(the)g Fz(BEGIN)e FB(and)h Fz(END)g FB(rules,)j(the)e(pattern/action)330 5087 y(rules,)30 b(and)g(the)h(functions.)275 5230 y(The)k(pro\014led)g(v)m(ersion)i(of) f(y)m(our)g(program)g(ma)m(y)h(not)f(lo)s(ok)h(exactly)g(lik)m(e)h (what)e(y)m(ou)g(t)m(yp)s(ed)g(when)150 5340 y(y)m(ou)i(wrote)g(it.)63 b(This)36 b(is)i(b)s(ecause)f Fz(pgawk)f FB(creates)j(the)f(pro\014led) f(v)m(ersion)h(b)m(y)f(\\prett)m(y)i(prin)m(ting")f(its)p eop end %%Page: 172 184 TeXDict begin 172 183 bop 150 -116 a FB(172)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(in)m(ternal)35 b(represen)m(tation)h(of)f(the)g(program.)54 b(The)34 b(adv)-5 b(an)m(tage)37 b(to)e(this)g(is)f(that)i Fz(pgawk)d FB(can)i(pro)s(duce)150 408 y(a)e(standard)e(represen)m (tation.)47 b(The)32 b(disadv)-5 b(an)m(tage)34 b(is)e(that)h(all)g (source-co)s(de)g(commen)m(ts)g(are)g(lost,)h(as)150 518 y(are)d(the)f(distinctions)h(among)g(m)m(ultiple)g Fz(BEGIN)e FB(and)h Fz(END)f FB(rules.)41 b(Also,)31 b(things)f(suc)m(h)g(as:)390 653 y Fz(/foo/)150 787 y FB(come)h(out)g(as:)390 922 y Fz(/foo/)142 b({)581 1031 y(print)46 b($0)390 1141 y(})150 1275 y FB(whic)m(h)30 b(is)h(correct,)g(but)f(p)s(ossibly)f(surprising.)275 1410 y(Besides)37 b(creating)i(pro\014les)e(when)f(a)i(program)f(has)g (completed,)k Fz(pgawk)36 b FB(can)h(pro)s(duce)g(a)g(pro\014le)150 1519 y(while)e(it)g(is)g(running.)52 b(This)33 b(is)i(useful)f(if)h(y)m (our)f Fz(awk)g FB(program)h(go)s(es)g(in)m(to)h(an)e(in\014nite)h(lo)s (op)f(and)h(y)m(ou)150 1629 y(w)m(an)m(t)c(to)g(see)g(what)g(has)f(b)s (een)f(executed.)42 b(T)-8 b(o)31 b(use)f(this)g(feature,)h(run)e Fz(pgawk)g FB(in)h(the)h(bac)m(kground:)390 1763 y Fz($)47 b(pgawk)g(-f)g(myprog)f(&)390 1873 y([1])h(13992)150 2007 y FB(The)34 b(shell)i(prin)m(ts)e(a)h(job)g(n)m(um)m(b)s(er)e(and) i(pro)s(cess)f(ID)h(n)m(um)m(b)s(er;)h(in)f(this)g(case,)i(13992.)57 b(Use)35 b(the)g Fz(kill)150 2117 y FB(command)30 b(to)h(send)f(the)g Fz(USR1)g FB(signal)h(to)g Fz(pgawk)p FB(:)390 2252 y Fz($)47 b(kill)g(-USR1)f(13992)150 2386 y FB(As)31 b(usual,)f(the)h (pro\014led)f(v)m(ersion)h(of)g(the)g(program)g(is)f(written)h(to)h(`)p Fz(awkprof.out)p FB(',)c(or)j(to)g(a)g(di\013eren)m(t)150 2496 y(\014le)f(if)h(y)m(ou)g(use)f(the)g(`)p Fz(--profile)p FB(')f(option.)275 2630 y(Along)e(with)g(the)g(regular)g(pro\014le,)h (as)f(sho)m(wn)f(earlier,)j(the)e(pro\014le)f(includes)h(a)g(trace)h (of)f(an)m(y)h(activ)m(e)150 2740 y(functions:)390 2874 y Fz(#)47 b(Function)f(Call)h(Stack:)390 3093 y(#)143 b(3.)47 b(baz)390 3203 y(#)143 b(2.)47 b(bar)390 3313 y(#)143 b(1.)47 b(foo)390 3422 y(#)g(--)h(main)e(--)275 3557 y FB(Y)-8 b(ou)32 b(ma)m(y)h(send)e Fz(pgawk)f FB(the)i Fz(USR1)f FB(signal)i(as)f(man)m(y)g(times)h(as)f(y)m(ou)g(lik)m(e.)47 b(Eac)m(h)33 b(time,)g(the)f(pro\014le)150 3666 y(and)e(function)g (call)h(trace)h(are)f(app)s(ended)d(to)k(the)e(output)g(pro\014le)g (\014le.)275 3801 y(If)f(y)m(ou)i(use)f(the)h Fz(HUP)f FB(signal)h(instead)f(of)h(the)f Fz(USR1)g FB(signal,)h Fz(pgawk)e FB(pro)s(duces)g(the)i(pro\014le)f(and)g(the)150 3910 y(function)g(call)i(trace)f(and)f(then)g(exits.)275 4045 y(When)38 b Fz(pgawk)f FB(runs)g(on)i(MS-DOS)f(or)h(MS-Windo)m (ws,)i(it)e(uses)f(the)h Fz(INT)f FB(and)g Fz(QUIT)f FB(signals)i(for)150 4154 y(pro)s(ducing)k(the)h(pro\014le)g(and,)j(in) d(the)g(case)h(of)f(the)h Fz(INT)e FB(signal,)48 b Fz(pgawk)43 b FB(exits.)83 b(This)43 b(is)h(b)s(ecause)150 4264 y(these)37 b(systems)f(don't)g(supp)s(ort)f(the)h Fz(kill)f FB(command,)j(so)e (the)g(only)h(signals)g(y)m(ou)f(can)h(deliv)m(er)g(to)g(a)150 4374 y(program)28 b(are)h(those)g(generated)g(b)m(y)f(the)h(k)m(eyb)s (oard.)40 b(The)28 b Fz(INT)f FB(signal)i(is)f(generated)i(b)m(y)e(the) h Fk(Ctrl-)3651 4371 y Fe(h)p 3673 4318 51 4 v 3673 4374 a Fd(C)p 3673 4389 V 3720 4371 a Fe(i)150 4483 y FB(or)h Fk(Ctrl-)501 4480 y Fe(h)p 524 4427 258 4 v 524 4483 a Fd(BREAK)p 524 4499 V 778 4480 a Fe(i)838 4483 y FB(k)m(ey)-8 b(,)32 b(while)e(the)g Fz(QUIT)g FB(signal)h(is)f(generated)i(b)m(y)e (the)g Fk(Ctrl-)2921 4480 y Fe(h)p 2944 4427 36 4 v 2944 4483 a Fd(\\)p 2944 4499 V 2975 4480 a Fe(i)3035 4483 y FB(k)m(ey)-8 b(.)p eop end %%Page: 173 185 TeXDict begin 173 184 bop 2096 -116 a Fr(Chapter)30 b(11:)42 b(Running)29 b Fz(awk)g Fr(and)h Fz(gawk)90 b FB(173)150 299 y Fu(11)80 b(Running)52 b Fi(awk)i Fu(and)f Fi(gawk)150 601 y FB(This)24 b(c)m(hapter)h(co)m(v)m(ers)h(ho)m(w)f(to)g(run)e(a)m (wk,)k(b)s(oth)d(POSIX-standard)f(and)h Fz(gawk)p FB(-sp)s(eci\014c)f (command-line)150 711 y(options,)32 b(and)f(what)g Fz(awk)g FB(and)f Fz(gawk)h FB(do)g(with)g(non-option)h(argumen)m(ts.)44 b(It)31 b(then)g(pro)s(ceeds)g(to)h(co)m(v)m(er)150 820 y(ho)m(w)39 b Fz(gawk)g FB(searc)m(hes)h(for)f(source)g(\014les,)j (obsolete)f(options)f(and/or)f(features,)j(and)d(kno)m(wn)g(bugs)f(in) 150 930 y Fz(gawk)p FB(.)i(This)29 b(c)m(hapter)i(rounds)e(out)i(the)f (discussion)g(of)g Fz(awk)g FB(as)g(a)h(program)f(and)g(as)h(a)g (language.)275 1087 y(While)39 b(a)g(n)m(um)m(b)s(er)e(of)i(the)g (options)f(and)g(features)h(describ)s(ed)f(here)g(w)m(ere)h(discussed)f (in)g(passing)150 1197 y(earlier)31 b(in)f(the)h(b)s(o)s(ok,)f(this)g (c)m(hapter)h(pro)m(vides)g(the)f(full)g(details.)150 1463 y FA(11.1)68 b(In)l(v)l(oking)46 b Fq(awk)150 1623 y FB(There)37 b(are)h(t)m(w)m(o)g(w)m(a)m(ys)h(to)f(run)e Fz(awk)p FB(|with)g(an)h(explicit)i(program)e(or)g(with)h(one)f(or)h (more)f(program)150 1732 y(\014les.)55 b(Here)36 b(are)g(templates)g (for)f(b)s(oth)g(of)g(them;)j(items)e(enclosed)g(in)f([)6 b(.)22 b(.)h(.)11 b(])35 b(in)g(these)h(templates)h(are)150 1842 y(optional:)390 1999 y Fz(awk)47 b FB([)p Fx(options)t FB(])h Fz(-f)f(progfile)f FB([)p Fz(--)p FB(])i Fk(file)57 b Fz(...)390 2109 y(awk)47 b FB([)p Fx(options)t FB(])h([)p Fz(--)p FB(])g Fz(')p Fk(program)11 b Fz(')45 b Fk(file)57 b Fz(...)275 2266 y FB(Besides)39 b(traditional)h(one-letter)h (POSIX-st)m(yle)e(options,)i Fz(gawk)d FB(also)h(supp)s(orts)e(GNU)i (long)h(op-)150 2375 y(tions.)275 2533 y(It)30 b(is)g(p)s(ossible)g(to) h(in)m(v)m(ok)m(e)i Fz(awk)c FB(with)h(an)h(empt)m(y)f(program:)390 2690 y Fz(awk)47 b('')g(datafile1)e(datafile2)150 2847 y FB(Doing)34 b(so)g(mak)m(es)g(little)h(sense,)f(though;)h Fz(awk)e FB(exits)h(silen)m(tly)g(when)f(giv)m(en)h(an)f(empt)m(y)h (program.)98 b(If)236 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: rflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: flashlight.small.xpic (xpic) %%CreationDate: Tue Oct 24 14:41:28 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 8 16 24 16 e 24 32 m 48 24 l x 24 0 m 48 8 l x 48 24 m 0 0 0 -5.33333 0 -16 s x 48 24 80 8 b 0 8 m 0 8 l x 0 0 m 16 8 l x 0 16 m 16 16 l x 16 24 m 0 32 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 150 2957 a(`)p Fz(--lint)p FB(')30 b(has)h(b)s(een)f(sp)s (eci\014ed)h(on)g(the)g(command)g(line,)h Fz(gawk)e FB(issues)h(a)g(w)m (arning)g(that)h(the)f(program)150 3066 y(is)f(empt)m(y)-8 b(.)150 3333 y FA(11.2)68 b(Command-Line)46 b(Options)150 3492 y FB(Options)25 b(b)s(egin)h(with)g(a)g(dash)f(and)g(consist)i(of) f(a)g(single)h(c)m(haracter.)40 b(GNU-st)m(yle)29 b(long)d(options)g (consist)150 3602 y(of)h(t)m(w)m(o)i(dashes)e(and)f(a)i(k)m(eyw)m(ord.) 40 b(The)27 b(k)m(eyw)m(ord)h(can)f(b)s(e)g(abbreviated,)h(as)g(long)f (as)h(the)f(abbreviation)150 3711 y(allo)m(ws)44 b(the)f(option)g(to)g (b)s(e)f(uniquely)g(iden)m(ti\014ed.)78 b(If)42 b(the)h(option)g(tak)m (es)h(an)f(argumen)m(t,)j(then)d(the)150 3821 y(k)m(eyw)m(ord)28 b(is)g(either)h(immediately)g(follo)m(w)m(ed)g(b)m(y)f(an)g(equals)g (sign)g(\(`)p Fz(=)p FB('\))h(and)e(the)h(argumen)m(t's)h(v)-5 b(alue,)29 b(or)150 3930 y(the)j(k)m(eyw)m(ord)h(and)e(the)i(argumen)m (t's)f(v)-5 b(alue)33 b(are)g(separated)f(b)m(y)g(whitespace.)47 b(If)32 b(a)g(particular)g(option)150 4040 y(with)e(a)h(v)-5 b(alue)31 b(is)f(giv)m(en)h(more)g(than)f(once,)h(it)g(is)g(the)f(last) i(v)-5 b(alue)30 b(that)h(coun)m(ts.)275 4197 y(Eac)m(h)e(long)g (option)g(for)g Fz(gawk)e FB(has)h(a)h(corresp)s(onding)f(POSIX-st)m (yle)h(option.)41 b(The)28 b(long)h(and)f(short)150 4307 y(options)j(are)f(in)m(terc)m(hangeable)j(in)d(all)h(con)m(texts.)43 b(The)30 b(options)g(and)g(their)h(meanings)f(are)h(as)g(follo)m(ws:) 150 4500 y Fz(-F)f Fk(fs)150 4610 y Fz(--field-separator)c Fk(fs)630 4720 y FB(Sets)c(the)h Fz(FS)e FB(v)-5 b(ariable)23 b(to)g Fx(fs)i FB(\(see)e(Section)g(3.5)h([Sp)s(ecifying)e(Ho)m(w)g (Fields)h(Are)f(Separated],)630 4829 y(page)31 b(43\).)150 5011 y Fz(-f)f Fk(source-file)150 5121 y Fz(--file)f Fk(source-file)630 5230 y FB(Indicates)36 b(that)h(the)e Fz(awk)g FB(program)h(is)g(to)g(b)s(e)f(found)g(in)g Fx(source-\014le)41 b FB(instead)36 b(of)g(in)g(the)630 5340 y(\014rst)30 b(non-option)g(argumen)m(t.)p eop end %%Page: 174 186 TeXDict begin 174 185 bop 150 -116 a FB(174)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz(-v)g Fk(var)11 b Fz(=)p Fk(val)150 408 y Fz(--assign)28 b Fk(var)11 b Fz(=)p Fk(val)630 518 y FB(Sets)34 b(the)g(v)-5 b(ariable)35 b Fx(v)-5 b(ar)40 b FB(to)35 b(the)f(v)-5 b(alue)35 b Fx(v)-5 b(al)38 b Fw(b)-5 b(efor)g(e)41 b FB(execution)35 b(of)f(the)h(program)e(b)s(egins.)630 628 y(Suc)m(h)25 b(v)-5 b(ariable)27 b(v)-5 b(alues)26 b(are)h(a)m(v)-5 b(ailable)28 b(inside)e(the)g Fz(BEGIN)e FB(rule)i(\(see)h(Section)g(11.3)g([Other)630 737 y(Command-Line)j (Argumen)m(ts],)h(page)g(178\).)630 869 y(The)h(`)p Fz(-v)p FB(')h(option)g(can)g(only)g(set)g(one)g(v)-5 b(ariable,)34 b(but)e(it)i(can)f(b)s(e)f(used)g(more)h(than)f(once,)630 978 y(setting)f(another)g(v)-5 b(ariable)31 b(eac)m(h)h(time,)f(lik)m (e)h(this:)40 b(`)p Fz(awk)30 b(-v)g(foo=1)f(-v)h(bar=2)f(...)o FB('.)630 1110 y Fr(Caution:)69 b FB(Using)44 b(`)p Fz(-v)p FB(')g(to)h(set)g(the)g(v)-5 b(alues)44 b(of)h(the)f(built-in)g(v)-5 b(ariables)45 b(ma)m(y)g(lead)g(to)630 1219 y(surprising)36 b(results.)62 b Fz(awk)37 b FB(will)h(reset)g(the)g(v)-5 b(alues)38 b(of)g(those)g(v)-5 b(ariables)39 b(as)e(it)i(needs)e(to,) 630 1329 y(p)s(ossibly)29 b(ignoring)i(an)m(y)g(prede\014ned)e(v)-5 b(alue)30 b(y)m(ou)h(ma)m(y)g(ha)m(v)m(e)h(giv)m(en.)150 1482 y Fz(-mf)d Fk(N)150 1592 y Fz(-mr)g Fk(N)259 b FB(Sets)44 b(v)-5 b(arious)43 b(memory)g(limits)h(to)h(the)e(v)-5 b(alue)44 b Fx(N)p FB(.)g(The)f(`)p Fz(f)p FB(')h(\015ag)g(sets)f(the)h (maxim)m(um)630 1702 y(n)m(um)m(b)s(er)26 b(of)i(\014elds)f(and)g(the)h (`)p Fz(r)p FB(')f(\015ag)h(sets)g(the)g(maxim)m(um)f(record)h(size.)41 b(These)27 b(t)m(w)m(o)i(\015ags)630 1811 y(and)c(the)g(`)p Fz(-m)p FB(')g(option)h(are)g(from)e(the)i(Bell)g(Lab)s(oratories)g (researc)m(h)g(v)m(ersion)g(of)f(Unix)h Fz(awk)p FB(.)630 1921 y(They)i(are)i(pro)m(vided)e(for)h(compatibilit)m(y)i(but)d (otherwise)h(ignored)g(b)m(y)g Fz(gawk)p FB(,)f(since)h Fz(gawk)630 2030 y FB(has)41 b(no)g(prede\014ned)f(limits.)74 b(\(The)41 b(Bell)i(Lab)s(oratories)f Fz(awk)e FB(no)i(longer)g(needs)e (these)630 2140 y(options;)31 b(it)g(con)m(tin)m(ues)g(to)g(accept)h (them)f(to)g(a)m(v)m(oid)h(breaking)e(old)h(programs.\))150 2293 y Fz(-W)f Fk(gawk-opt)630 2403 y FB(F)-8 b(ollo)m(wing)28 b(the)d(POSIX)g(standard,)g(implemen)m(tation-sp)s(eci\014c)i(options)f (are)g(supplied)e(as)630 2513 y(argumen)m(ts)g(to)g(the)g(`)p Fz(-W)p FB(')g(option.)38 b(These)24 b(options)g(also)g(ha)m(v)m(e)h (corresp)s(onding)e(GNU-st)m(yle)630 2622 y(long)37 b(options.)59 b(Note)37 b(that)g(the)g(long)f(options)h(ma)m(y)g(b)s(e)e (abbreviated,)k(as)d(long)h(as)g(the)630 2732 y(abbreviations)c(remain) g(unique.)47 b(The)33 b(full)f(list)i(of)f Fz(gawk)p FB(-sp)s(eci\014c)e(options)i(is)g(pro)m(vided)630 2841 y(next.)150 2995 y Fz(--)384 b FB(Signals)29 b(the)h(end)e(of)h(the)h (command-line)f(options.)41 b(The)28 b(follo)m(wing)j(argumen)m(ts)e (are)h(not)630 3104 y(treated)c(as)f(options)g(ev)m(en)g(if)g(they)g(b) s(egin)f(with)h(`)p Fz(-)p FB('.)39 b(This)24 b(in)m(terpretation)i(of) f(`)p Fz(--)p FB(')g(follo)m(ws)630 3214 y(the)31 b(POSIX)e(argumen)m (t)i(parsing)f(con)m(v)m(en)m(tions.)630 3345 y(This)25 b(is)i(useful)e(if)h(y)m(ou)h(ha)m(v)m(e)g(\014le)g(names)f(that)h (start)f(with)g(`)p Fz(-)p FB(',)i(or)e(in)g(shell)g(scripts,)h(if)g(y) m(ou)630 3455 y(ha)m(v)m(e)32 b(\014le)e(names)g(that)h(will)g(b)s(e)f (sp)s(eci\014ed)f(b)m(y)i(the)f(user)g(that)h(could)f(start)h(with)f(`) p Fz(-)p FB('.)275 3608 y(The)24 b(previous)h(list)g(describ)s(ed)f (options)i(mandated)e(b)m(y)h(the)h(POSIX)e(standard,)h(as)g(w)m(ell)h (as)g(options)150 3718 y(a)m(v)-5 b(ailable)33 b(in)e(the)g(Bell)i(Lab) s(oratories)e(v)m(ersion)h(of)f Fz(awk)p FB(.)42 b(The)30 b(follo)m(wing)j(list)f(describ)s(es)e Fz(gawk)p FB(-sp)s(eci\014c)150 3828 y(options:)150 3981 y Fz(-W)g(compat)150 4091 y(-W)g(traditional) 150 4200 y(--compat)150 4310 y(--traditional)630 4419 y FB(Sp)s(eci\014es)24 b Fx(compatibilit)m(y)j(mo)s(de)p FB(,)f(in)e(whic)m(h)h(the)g(GNU)g(extensions)g(to)h(the)f Fz(awk)f FB(language)630 4529 y(are)31 b(disabled,)f(so)g(that)h Fz(gawk)e FB(b)s(eha)m(v)m(es)i(just)e(lik)m(e)j(the)e(Bell)i(Lab)s (oratories)e(researc)m(h)h(v)m(er-)630 4639 y(sion)38 b(of)f(Unix)h Fz(awk)p FB(.)62 b(`)p Fz(--traditional)p FB(')34 b(is)k(the)g(preferred)e(form)h(of)h(this)g(option.)63 b(See)630 4748 y(Section)42 b(A.5)h([Extensions)f(in)f Fz(gawk)f FB(Not)j(in)e(POSIX)g Fz(awk)p FB(],)j(page)e(255,)k(whic)m (h)c(sum-)630 4858 y(marizes)g(the)g(extensions.)74 b(Also)42 b(see)g(Section)g(C.1)g([Do)m(wn)m(w)m(ard)g(Compatibilit)m(y)h(and)630 4967 y(Debugging],)32 b(page)f(279.)150 5121 y Fz(-W)f(copyright)150 5230 y(--copyright)630 5340 y FB(Prin)m(t)g(the)h(short)f(v)m(ersion)h (of)f(the)h(General)g(Public)f(License)h(and)f(then)g(exit.)p eop end %%Page: 175 187 TeXDict begin 175 186 bop 2096 -116 a Fr(Chapter)30 b(11:)42 b(Running)29 b Fz(awk)g Fr(and)h Fz(gawk)90 b FB(175)150 299 y Fz(-W)30 b(copyleft)150 408 y(--copyleft)630 518 y FB(Just)24 b(lik)m(e)i(`)p Fz(--copyright)p FB('.)36 b(This)23 b(option)i(ma)m(y)g(disapp)s(ear)f(in)g(a)h(future)e(v)m (ersion)i(of)g Fz(gawk)p FB(.)150 678 y Fz(-W)30 b(dump-variables)p FB([)p Fz(=)p Fk(file)11 b FB(])150 788 y Fz(--dump-variables)p FB([)p Fz(=)p Fk(file)g FB(])630 897 y(Prin)m(ts)35 b(a)i(sorted)e (list)i(of)e(global)i(v)-5 b(ariables,)38 b(their)e(t)m(yp)s(es,)h(and) e(\014nal)g(v)-5 b(alues)36 b(to)h Fx(\014le)p FB(.)56 b(If)630 1007 y(no)30 b Fx(\014le)35 b FB(is)30 b(pro)m(vided,)g Fz(gawk)f FB(prin)m(ts)g(this)h(list)h(to)g(the)f(\014le)g(named)g(`)p Fz(awkvars.out)p FB(')d(in)j(the)630 1117 y(curren)m(t)g(directory)-8 b(.)630 1251 y(Ha)m(ving)42 b(a)f(list)g(of)g(all)g(global)h(v)-5 b(ariables)41 b(is)g(a)g(go)s(o)s(d)f(w)m(a)m(y)i(to)f(lo)s(ok)g(for)g (t)m(yp)s(ographical)630 1361 y(errors)d(in)g(y)m(our)g(programs.)65 b(Y)-8 b(ou)39 b(w)m(ould)f(also)h(use)f(this)g(option)h(if)g(y)m(ou)f (ha)m(v)m(e)i(a)f(large)630 1471 y(program)34 b(with)f(a)i(lot)g(of)f (functions,)h(and)e(y)m(ou)i(w)m(an)m(t)f(to)h(b)s(e)f(sure)f(that)h(y) m(our)g(functions)630 1580 y(don't)d(inadv)m(erten)m(tly)i(use)f (global)g(v)-5 b(ariables)32 b(that)h(y)m(ou)e(mean)m(t)i(to)f(b)s(e)f (lo)s(cal.)45 b(\(This)31 b(is)h(a)630 1690 y(particularly)f(easy)g (mistak)m(e)h(to)f(mak)m(e)g(with)f(simple)h(v)-5 b(ariable)31 b(names)f(lik)m(e)i Fz(i)p FB(,)e Fz(j)p FB(,)g(etc.\))150 1850 y Fz(-W)g(exec)f Fk(file)150 1960 y Fz(--exec)g Fk(file)630 2069 y FB(Similar)38 b(to)h(`)p Fz(-f)p FB(',)h(reads)d Fz(awk)g FB(program)h(text)h(from)f Fx(\014le)p FB(.)63 b(There)38 b(are)g(t)m(w)m(o)h(di\013erences.)630 2179 y(The)30 b(\014st)h(is)g(that)g(this)g(option)h(also)g(terminates)f (option)h(pro)s(cessing;)f(an)m(ything)g(else)h(on)630 2288 y(the)c(command)f(line)h(is)f(passed)g(on)g(directly)i(to)f(the)f Fz(awk)g FB(program.)39 b(The)27 b(second)h(is)f(that)630 2398 y(command)j(line)h(v)-5 b(ariable)31 b(assignmen)m(ts)g(of)g(the)f (form)g(`)p Fk(var)11 b Fz(=)p Fk(value)g FB(')27 b(are)k(disallo)m(w)m (ed.)630 2533 y(This)40 b(option)i(is)f(particularly)h(necessary)g(for) e(W)-8 b(orld)42 b(Wide)g(W)-8 b(eb)42 b(CGI)f(applications)630 2642 y(that)34 b(pass)e(argumen)m(ts)i(through)e(the)h(URL;)h(using)e (this)h(option)h(prev)m(en)m(ts)f(a)h(malicious)630 2752 y(\(or)i(other\))g(user)g(from)f(passing)g(in)h(options,)h(assignmen)m (ts,)h(or)e Fz(awk)f FB(source)h(co)s(de)g(\(via)630 2862 y(`)p Fz(--source)p FB('\))20 b(to)i(the)f(CGI)g(application.)39 b(This)21 b(option)h(should)e(b)s(e)h(used)f(with)h(`)p Fz(#!)p FB(')g(scripts)630 2971 y(\(see)31 b(Section)h(1.1.4)g ([Executable)f Fz(awk)f FB(Programs],)h(page)g(13\),)h(lik)m(e)f(so:) 870 3106 y Fz(#!)47 b(/usr/local/bin/gawk)c(--exec)870 3325 y Fk(awk)k(program)f(here)g(...)150 3485 y Fz(-W)30 b(gen-po)150 3595 y(--gen-po)96 b FB(Analyzes)22 b(the)f(source)g (program)g(and)g(generates)h(a)g(GNU)f Fz(gettext)e FB(P)m(ortable)k (Ob)5 b(ject)21 b(\014le)630 3705 y(on)30 b(standard)g(output)g(for)h (all)g(string)g(constan)m(ts)g(that)h(ha)m(v)m(e)f(b)s(een)f(mark)m(ed) h(for)f(transla-)630 3814 y(tion.)41 b(See)28 b(Chapter)g(9)h([In)m (ternationalization)j(with)c Fz(gawk)p FB(],)h(page)g(156,)h(for)f (information)630 3924 y(ab)s(out)h(this)g(option.)150 4084 y Fz(-W)g(help)150 4194 y(-W)g(usage)150 4303 y(--help)150 4413 y(--usage)144 b FB(Prin)m(ts)38 b(a)h(\\usage")g(message)h (summarizing)e(the)g(short)g(and)g(long)g(st)m(yle)i(options)e(that)630 4522 y Fz(gawk)29 b FB(accepts)j(and)e(then)g(exit.)150 4682 y Fz(-W)g(lint)p FB([)p Fz(=fatal)p FB(])150 4792 y Fz(--lint)p FB([)p Fz(=fatal)p FB(])630 4902 y(W)-8 b(arns)36 b(ab)s(out)g(constructs)h(that)g(are)f(dubious)f(or)h(nonp)s (ortable)g(to)h(other)f Fz(awk)g FB(imple-)630 5011 y(men)m(tations.)72 b(Some)41 b(w)m(arnings)f(are)h(issued)f(when)f Fz(gawk)h FB(\014rst)f(reads)h(y)m(our)h(program.)630 5121 y(Others)h(are)g (issued)g(at)h(run)m(time,)j(as)c(y)m(our)h(program)f(executes.)78 b(With)43 b(an)f(optional)630 5230 y(argumen)m(t)36 b(of)g(`)p Fz(fatal)p FB(',)g(lin)m(t)g(w)m(arnings)f(b)s(ecome)h(fatal)g(errors.) 56 b(This)34 b(ma)m(y)j(b)s(e)d(drastic,)630 5340 y(but)f(its)g(use)g (will)h(certainly)g(encourage)h(the)e(dev)m(elopmen)m(t)i(of)e(cleaner) i Fz(awk)d FB(programs.)p eop end %%Page: 176 188 TeXDict begin 176 187 bop 150 -116 a FB(176)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)630 299 y FB(With)j(an)f(optional)h(argumen)m(t)g(of)g(`)p Fz(invalid)p FB(',)e(only)i(w)m(arnings)e(ab)s(out)i(things)f(that)h (are)630 408 y(actually)f(in)m(v)-5 b(alid)31 b(are)g(issued.)40 b(\(This)30 b(is)g(not)h(fully)f(implemen)m(ted)h(y)m(et.\))150 576 y Fz(-W)f(lint-old)150 685 y(--lint-old)630 795 y FB(W)-8 b(arns)40 b(ab)s(out)f(constructs)h(that)g(are)g(not)g(a)m(v)-5 b(ailable)41 b(in)f(the)f(original)i(v)m(ersion)f(of)g Fz(awk)630 905 y FB(from)23 b(V)-8 b(ersion)24 b(7)g(Unix)f(\(see)h (Section)g(A.1)g([Ma)5 b(jor)25 b(Changes)e(Bet)m(w)m(een)i(V7)f(and)f (SVR3.1],)630 1014 y(page)31 b(252\).)150 1181 y Fz(-W)f (non-decimal-data)150 1291 y(--non-decimal-data)630 1401 y FB(Enable)f(automatic)i(in)m(terpretation)g(of)e(o)s(ctal)i(and)e (hexadecimal)h(v)-5 b(alues)30 b(in)f(input)f(data)630 1510 y(\(see)j(Section)h(10.1)f([Allo)m(wing)h(Nondecimal)g(Input)d (Data],)j(page)g(165\).)630 1649 y Fr(Caution:)41 b FB(This)29 b(option)i(can)g(sev)m(erely)g(break)g(old)f(programs.)41 b(Use)30 b(with)g(care.)150 1816 y Fz(-W)g(posix)150 1925 y(--posix)144 b FB(Op)s(erates)39 b(in)f(strict)i(POSIX)e(mo)s (de.)65 b(This)38 b(disables)h(all)h Fz(gawk)e FB(extensions)h(\(just)g (lik)m(e)630 2035 y(`)p Fz(--traditional)p FB('\))28 b(and)h(adds)h(the)h(follo)m(wing)g(additional)h(restrictions:)705 2173 y Fy(\017)60 b Fz(\\x)23 b FB(escap)s(e)h(sequences)f(are)h(not)g (recognized)h(\(see)f(Section)g(2.2)h([Escap)s(e)f(Sequences],)810 2283 y(page)31 b(25\).)705 2421 y Fy(\017)60 b FB(Newlines)30 b(do)g(not)g(act)h(as)f(whitespace)h(to)f(separate)h(\014elds)f(when)e Fz(FS)i FB(is)g(equal)g(to)h(a)810 2531 y(single)g(space)g(\(see)g (Section)g(3.2)h([Examining)f(Fields],)g(page)g(39\).)705 2669 y Fy(\017)60 b FB(Newlines)45 b(are)g(not)g(allo)m(w)m(ed)h(after) f(`)p Fz(?)p FB(')g(or)f(`)p Fz(:)p FB(')h(\(see)h(Section)f(5.12)h ([Conditional)810 2779 y(Expressions],)30 b(page)h(89\).)705 2917 y Fy(\017)60 b FB(The)34 b(synon)m(ym)f Fz(func)g FB(for)h(the)h(k)m(eyw)m(ord)f Fz(function)e FB(is)i(not)h(recognized)g (\(see)g(Sec-)810 3027 y(tion)c(8.2.1)h([F)-8 b(unction)31 b(De\014nition)g(Syn)m(tax],)g(page)h(149\).)705 3165 y Fy(\017)60 b FB(The)35 b(`)p Fz(**)p FB(')g(and)g(`)p Fz(**=)p FB(')g(op)s(erators)g(cannot)h(b)s(e)f(used)f(in)h(place)h(of) g(`)p Fz(^)p FB(')f(and)g(`)p Fz(^=)p FB(')g(\(see)810 3275 y(Section)e(5.5)g([Arithmetic)h(Op)s(erators],)e(page)h(78,)h(and) d(also)i(see)g(Section)g(5.7)g([As-)810 3385 y(signmen)m(t)e (Expressions],)f(page)h(81\).)705 3523 y Fy(\017)60 b FB(Sp)s(ecifying)36 b(`)p Fz(-Ft)p FB(')g(on)g(the)g(command-line)h(do) s(es)f(not)g(set)h(the)g(v)-5 b(alue)36 b(of)h Fz(FS)f FB(to)h(b)s(e)810 3633 y(a)32 b(single)h(T)-8 b(AB)33 b(c)m(haracter)g(\(see)g(Section)g(3.5)g([Sp)s(ecifying)f(Ho)m(w)h (Fields)g(Are)f(Sepa-)810 3742 y(rated],)f(page)g(43\).)705 3881 y Fy(\017)60 b FB(The)73 b Fz(fflush)f FB(built-in)i(function)f (is)g(not)h(supp)s(orted)e(\(see)j(Section)f(8.1.4)810 3990 y([Input/Output)29 b(F)-8 b(unctions],)31 b(page)g(140\).)630 4158 y(If)49 b(y)m(ou)i(supply)d(b)s(oth)h(`)p Fz(--traditional)p FB(')e(and)i(`)p Fz(--posix)p FB(')g(on)h(the)g(command)f(line,)630 4267 y(`)p Fz(--posix)p FB(')41 b(tak)m(es)j(precedence.)78 b Fz(gawk)42 b FB(also)h(issues)g(a)g(w)m(arning)f(if)h(b)s(oth)f (options)h(are)630 4377 y(supplied.)150 4544 y Fz(-W)30 b(profile)p FB([)p Fz(=)p Fk(file)11 b FB(])150 4654 y Fz(--profile)p FB([)p Fz(=)p Fk(file)g FB(])630 4763 y(Enable)63 b(pro\014ling)f(of)i Fz(awk)e FB(programs)g(\(see)i (Section)g(10.5)h([Pro\014ling)e(Y)-8 b(our)63 b Fz(awk)630 4873 y FB(Programs],)h(page)58 b(169\).)122 b(By)58 b(default,)64 b(pro\014les)56 b(are)i(created)g(in)f(a)g(\014le)g(named)630 4982 y(`)p Fz(awkprof.out)p FB('.)68 b(The)40 b(optional)i Fx(\014le)k FB(argumen)m(t)41 b(allo)m(ws)g(y)m(ou)g(to)g(sp)s(ecify)g (a)f(di\013eren)m(t)630 5092 y(\014le)30 b(name)h(for)f(the)h (pro\014le)f(\014le.)630 5230 y(When)j(run)f(with)h Fz(gawk)p FB(,)g(the)h(pro\014le)f(is)g(just)g(a)h(\\prett)m(y)g(prin)m(ted")f(v) m(ersion)h(of)g(the)f(pro-)630 5340 y(gram.)69 b(When)39 b(run)f(with)h Fz(pgawk)p FB(,)i(the)f(pro\014le)f(con)m(tains)i (execution)f(coun)m(ts)g(for)g(eac)m(h)p eop end %%Page: 177 189 TeXDict begin 177 188 bop 2096 -116 a Fr(Chapter)30 b(11:)42 b(Running)29 b Fz(awk)g Fr(and)h Fz(gawk)90 b FB(177)630 299 y(statemen)m(t)34 b(in)d(the)h(program)f(in)g(the)h(left)h(margin,) f(and)f(function)g(call)i(coun)m(ts)f(for)g(eac)m(h)630 408 y(function.)150 565 y Fz(-W)e(re-interval)150 675 y(--re-interval)630 784 y FB(Allo)m(ws)44 b(in)m(terv)-5 b(al)45 b(expressions)e(\(see)h(Section)h(2.3)f([Regular)g(Expression)f (Op)s(erators],)630 894 y(page)33 b(27\))h(in)e(regexps.)48 b(Because)34 b(in)m(terv)-5 b(al)34 b(expressions)e(w)m(ere)h (traditionally)h(not)f(a)m(v)-5 b(ail-)630 1003 y(able)41 b(in)e Fz(awk)p FB(,)j Fz(gawk)d FB(do)s(es)h(not)g(pro)m(vide)h(them)f (b)m(y)g(default.)70 b(This)39 b(prev)m(en)m(ts)i(old)f Fz(awk)630 1113 y FB(programs)30 b(from)g(breaking.)150 1270 y Fz(-W)g(source)e Fk(program-text)150 1379 y Fz(--source)g Fk(program-text)630 1489 y FB(Allo)m(ws)34 b(y)m(ou)g(to)g(mix)f (source)g(co)s(de)g(in)g(\014les)g(with)g(source)g(co)s(de)h(that)f(y)m (ou)h(en)m(ter)g(on)f(the)630 1598 y(command)41 b(line.)76 b(Program)41 b(source)h(co)s(de)g(is)g(tak)m(en)h(from)e(the)h Fx(program-text)p FB(.)76 b(This)630 1708 y(is)42 b(particularly)h (useful)e(when)g(y)m(ou)h(ha)m(v)m(e)h(library)f(functions)g(that)g(y)m (ou)h(w)m(an)m(t)f(to)h(use)630 1817 y(from)22 b(y)m(our)g (command-line)h(programs)f(\(see)i(Section)f(11.4)h([The)e Fz(AWKPATH)f FB(En)m(vironmen)m(t)630 1927 y(V)-8 b(ariable],)32 b(page)f(179\).)150 2084 y Fz(-W)f(version)150 2193 y(--version)630 2303 y FB(Prin)m(ts)h(v)m(ersion)g(information)g(for)g(this)g (particular)g(cop)m(y)h(of)f Fz(gawk)p FB(.)41 b(This)30 b(allo)m(ws)i(y)m(ou)f(to)630 2412 y(determine)f(if)f(y)m(our)h(cop)m (y)g(of)g Fz(gawk)e FB(is)i(up)f(to)h(date)g(with)g(resp)s(ect)f(to)i (whatev)m(er)f(the)g(F)-8 b(ree)630 2522 y(Soft)m(w)m(are)33 b(F)-8 b(oundation)33 b(is)g(curren)m(tly)f(distributing.)46 b(It)33 b(is)f(also)h(useful)f(for)g(bug)g(rep)s(orts)630 2632 y(\(see)f(Section)h(B.5)f([Rep)s(orting)f(Problems)g(and)g(Bugs],) h(page)g(276\).)275 2788 y(As)26 b(long)i(as)f(program)g(text)h(has)e (b)s(een)h(supplied,)f(an)m(y)h(other)g(options)h(are)f(\015agged)h(as) f(in)m(v)-5 b(alid)27 b(with)150 2898 y(a)k(w)m(arning)f(message)h(but) f(are)h(otherwise)g(ignored.)275 3031 y(In)f(compatibilit)m(y)j(mo)s (de,)e(as)g(a)h(sp)s(ecial)g(case,)g(if)f(the)g(v)-5 b(alue)32 b(of)f Fx(fs)k FB(supplied)29 b(to)j(the)f(`)p Fz(-F)p FB(')g(option)h(is)150 3140 y(`)p Fz(t)p FB(',)e(then)g Fz(FS)f FB(is)g(set)i(to)f(the)g(T)-8 b(AB)30 b(c)m(haracter)i(\()p Fz("\\t")p FB(\).)40 b(This)28 b(is)i(true)g(only)g(for)f(`)p Fz(--traditional)p FB(')e(and)150 3250 y(not)k(for)f(`)p Fz(--posix)p FB(')f(\(see)i(Section)g(3.5)h([Sp)s(ecifying)e(Ho)m(w)h (Fields)g(Are)f(Separated],)h(page)g(43\).)275 3383 y(The)i(`)p Fz(-f)p FB(')h(option)h(ma)m(y)f(b)s(e)g(used)f(more)h(than)g(once)h (on)e(the)i(command)f(line.)52 b(If)33 b(it)i(is,)g Fz(awk)e FB(reads)150 3493 y(its)i(program)f(source)g(from)g(all)h(of)f(the)h (named)f(\014les,)h(as)f(if)h(they)f(had)g(b)s(een)f(concatenated)j (together)150 3602 y(in)m(to)d(one)e(big)h(\014le.)45 b(This)30 b(is)i(useful)f(for)g(creating)i(libraries)f(of)g Fz(awk)e FB(functions.)44 b(These)32 b(functions)f(can)150 3712 y(b)s(e)d(written)i(once)g(and)e(then)h(retriev)m(ed)h(from)f(a)g (standard)f(place,)j(instead)e(of)h(ha)m(ving)f(to)h(b)s(e)f(included) 150 3821 y(in)m(to)g(eac)m(h)h(individual)d(program.)40 b(\(As)29 b(men)m(tioned)f(in)g(Section)h(8.2.1)h([F)-8 b(unction)29 b(De\014nition)g(Syn)m(tax],)150 3931 y(page)i(149,)h (function)e(names)g(m)m(ust)h(b)s(e)e(unique.\))275 4064 y(Library)34 b(functions)h(can)h(still)g(b)s(e)f(used,)h(ev)m(en)h(if)e (the)h(program)f(is)h(en)m(tered)g(at)g(the)g(terminal,)h(b)m(y)150 4174 y(sp)s(ecifying)32 b(`)p Fz(-f)e(/dev/tty)p FB('.)42 b(After)32 b(t)m(yping)g(y)m(our)g(program,)g(t)m(yp)s(e)g Fk(Ctrl-d)e FB(\(the)i(end-of-\014le)g(c)m(harac-)150 4283 y(ter\))k(to)g(terminate)g(it.)56 b(\(Y)-8 b(ou)36 b(ma)m(y)f(also)h(use)f(`)p Fz(-f)30 b(-)p FB(')35 b(to)h(read)f (program)g(source)h(from)e(the)i(standard)150 4393 y(input)29 b(but)h(then)g(y)m(ou)h(will)g(not)f(b)s(e)g(able)h(to)g(also)g(use)f (the)h(standard)e(input)h(as)h(a)f(source)h(of)f(data.\))275 4526 y(Because)23 b(it)f(is)g(clumsy)g(using)f(the)i(standard)e Fz(awk)g FB(mec)m(hanisms)h(to)h(mix)e(source)h(\014le)h(and)e (command-)150 4635 y(line)30 b Fz(awk)f FB(programs,)h Fz(gawk)e FB(pro)m(vides)i(the)g(`)p Fz(--source)p FB(')e(option.)41 b(This)29 b(do)s(es)g(not)h(require)g(y)m(ou)g(to)g(pre-)150 4745 y(empt)37 b(the)h(standard)e(input)g(for)h(y)m(our)g(source)h(co)s (de;)j(it)d(allo)m(ws)g(y)m(ou)g(to)g(easily)g(mix)f(command-line)150 4855 y(and)30 b(library)g(source)g(co)s(de)h(\(see)g(Section)g(11.4)h ([The)e Fz(AWKPATH)f FB(En)m(vironmen)m(t)h(V)-8 b(ariable],)33 b(page)e(179\).)275 4988 y(If)22 b(no)i(`)p Fz(-f)p FB(')f(or)g(`)p Fz(--source)p FB(')f(option)h(is)h(sp)s(eci\014ed,)g(then)f Fz(gawk)f FB(uses)h(the)h(\014rst)e(non-option)i(command-)150 5097 y(line)31 b(argumen)m(t)g(as)f(the)h(text)g(of)g(the)f(program)g (source)h(co)s(de.)275 5230 y(If)24 b(the)i(en)m(vironmen)m(t)g(v)-5 b(ariable)26 b Fz(POSIXLY_CORRECT)21 b FB(exists,)28 b(then)d Fz(gawk)f FB(b)s(eha)m(v)m(es)i(in)f(strict)h(POSIX)150 5340 y(mo)s(de,)46 b(exactly)e(as)f(if)g(y)m(ou)g(had)f(supplied)f(the) i(`)p Fz(--posix)p FB(')e(command-line)j(option.)78 b(Man)m(y)43 b(GNU)p eop end %%Page: 178 190 TeXDict begin 178 189 bop 150 -116 a FB(178)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(programs)38 b(lo)s(ok)h(for)g(this)f(en)m(vironmen)m(t)h(v)-5 b(ariable)39 b(to)h(turn)d(on)i(strict)g(POSIX)e(mo)s(de.)65 b(If)38 b(`)p Fz(--lint)p FB(')150 408 y(is)i(supplied)f(on)h(the)h (command)f(line)g(and)g Fz(gawk)f FB(turns)g(on)h(POSIX)f(mo)s(de)h(b)s (ecause)g(of)g Fz(POSIXLY_)150 518 y(CORRECT)p FB(,)35 b(then)f(it)i(issues)f(a)g(w)m(arning)g(message)h(indicating)g(that)g (POSIX)e(mo)s(de)h(is)g(in)g(e\013ect.)56 b(Y)-8 b(ou)150 628 y(w)m(ould)32 b(t)m(ypically)h(set)g(this)f(v)-5 b(ariable)32 b(in)g(y)m(our)g(shell's)g(startup)f(\014le.)46 b(F)-8 b(or)32 b(a)g(Bourne-compatible)i(shell)150 737 y(\(suc)m(h)c(as)h Fz(bash)p FB(\),)f(y)m(ou)h(w)m(ould)f(add)f(these)i (lines)g(to)g(the)g(`)p Fz(.profile)p FB(')d(\014le)j(in)f(y)m(our)g (home)g(directory:)390 875 y Fz(POSIXLY_CORRECT=true)390 984 y(export)46 b(POSIXLY_CORRECT)275 1122 y FB(F)-8 b(or)35 b(a)f Fz(csh)p FB(-compatible)h(shell,)1365 1089 y Fo(1)1438 1122 y FB(y)m(ou)g(w)m(ould)f(add)f(this)h(line)h(to)g(the) f(`)p Fz(.login)p FB(')f(\014le)i(in)f(y)m(our)g(home)150 1231 y(directory:)390 1369 y Fz(setenv)46 b(POSIXLY_CORRECT)e(true)275 1507 y FB(Ha)m(ving)26 b Fz(POSIXLY_CORRECT)20 b FB(set)26 b(is)e(not)h(recommended)g(for)f(daily)i(use,)f(but)f(it)i(is)f(go)s(o) s(d)f(for)h(testing)150 1616 y(the)31 b(p)s(ortabilit)m(y)g(of)f(y)m (our)h(programs)f(to)h(other)f(en)m(vironmen)m(ts.)150 1853 y FA(11.3)68 b(Other)46 b(Command-Line)f(Argumen)l(ts)150 2012 y FB(An)m(y)36 b(additional)h(argumen)m(ts)f(on)g(the)g(command)g (line)g(are)g(normally)g(treated)h(as)f(input)f(\014les)h(to)h(b)s(e) 150 2122 y(pro)s(cessed)k(in)g(the)h(order)f(sp)s(eci\014ed.)73 b(Ho)m(w)m(ev)m(er,)47 b(an)41 b(argumen)m(t)h(that)g(has)f(the)h(form) f Fk(var)11 b Fz(=)p Fk(value)g FB(,)150 2232 y(assigns)42 b(the)f(v)-5 b(alue)42 b Fx(v)-5 b(alue)47 b FB(to)42 b(the)g(v)-5 b(ariable)42 b Fx(v)-5 b(ar)p FB(|it)42 b(do)s(es)f(not)h(sp)s(ecify)f(a)h(\014le)f(at)i(all.)75 b(\(This)41 b(w)m(as)150 2341 y(discussed)29 b(earlier)j(in)e(Section)h (5.3.2)h([Assigning)f(V)-8 b(ariables)32 b(on)e(the)h(Command)e(Line],) i(page)g(76.\))275 2479 y(All)41 b(these)h(argumen)m(ts)g(are)g(made)f (a)m(v)-5 b(ailable)44 b(to)e(y)m(our)f Fz(awk)f FB(program)h(in)g(the) h Fz(ARGV)e FB(arra)m(y)i(\(see)150 2588 y(Section)29 b(6.5)g([Built-in)g(V)-8 b(ariables],)30 b(page)f(107\).)41 b(Command-line)28 b(options)g(and)g(the)g(program)g(text)h(\(if)150 2698 y(presen)m(t\))34 b(are)g(omitted)h(from)f Fz(ARGV)p FB(.)49 b(All)35 b(other)f(argumen)m(ts,)h(including)e(v)-5 b(ariable)35 b(assignmen)m(ts,)h(are)150 2808 y(included.)k(As)29 b(eac)m(h)h(elemen)m(t)g(of)g Fz(ARGV)d FB(is)j(pro)s(cessed,)f Fz(gawk)e FB(sets)j(the)f(v)-5 b(ariable)30 b Fz(ARGIND)d FB(to)j(the)f(index)150 2917 y(in)h Fz(ARGV)f FB(of)i(the)f(curren)m(t) h(elemen)m(t.)275 3055 y(The)22 b(distinction)h(b)s(et)m(w)m(een)h (\014le)e(name)h(argumen)m(ts)g(and)f(v)-5 b(ariable-assignmen)m(t)25 b(argumen)m(ts)e(is)g(made)150 3164 y(when)28 b Fz(awk)g FB(is)h(ab)s(out)f(to)i(op)s(en)e(the)h(next)g(input)f(\014le.)40 b(A)m(t)30 b(that)f(p)s(oin)m(t)g(in)g(execution,)h(it)g(c)m(hec)m(ks)g (the)f(\014le)150 3274 y(name)34 b(to)g(see)g(whether)f(it)i(is)e (really)i(a)f(v)-5 b(ariable)34 b(assignmen)m(t;)j(if)c(so,)i Fz(awk)e FB(sets)h(the)g(v)-5 b(ariable)35 b(instead)150 3383 y(of)c(reading)f(a)h(\014le.)275 3521 y(Therefore,)39 b(the)f(v)-5 b(ariables)38 b(actually)i(receiv)m(e)f(the)f(giv)m(en)h (v)-5 b(alues)38 b(after)h(all)f(previously)g(sp)s(eci\014ed)150 3631 y(\014les)43 b(ha)m(v)m(e)i(b)s(een)e(read.)80 b(In)43 b(particular,)k(the)d(v)-5 b(alues)44 b(of)g(v)-5 b(ariables)44 b(assigned)g(in)f(this)g(fashion)h(are)150 3740 y Fw(not)e FB(a)m(v)-5 b(ailable)34 b(inside)e(a)h Fz(BEGIN)e FB(rule)h(\(see)h (Section)g(6.1.4)h([The)e Fz(BEGIN)f FB(and)h Fz(END)f FB(Sp)s(ecial)i(P)m(atterns],)150 3850 y(page)e(96\),)h(b)s(ecause)e (suc)m(h)g(rules)g(are)h(run)e(b)s(efore)h Fz(awk)f FB(b)s(egins)h (scanning)g(the)h(argumen)m(t)g(list.)275 3987 y(The)g(v)-5 b(ariable)33 b(v)-5 b(alues)32 b(giv)m(en)h(on)f(the)g(command)g(line)h (are)f(pro)s(cessed)f(for)h(escap)s(e)h(sequences)f(\(see)150 4097 y(Section)f(2.2)h([Escap)s(e)e(Sequences],)h(page)g(25\).)-2109 b @beginspecial 0 @llx 0 @lly 72 @urx 28.799999 @ury 283 @rwi @setspecial %%BeginDocument: lflashlight.eps %! %%Creator: arnold@skeeve (Aharon Robbins) %%Title: rflashlight.small.xpic (xpic) %%CreationDate: Tue Dec 12 09:51:27 2000 %%Pages: 1 %%BoundingBox: 0 0 72 28.8 % (in inches) at 0 0, width 1, height 0.4 %%EndComments % Prolog for xpic to PostScript converter % Author: Mark Moraes % $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp % %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH % %s F - change font to fontname % %d S - change size (font size in points) % (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) % (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) % %d %d l - lineto % %d %d m - moveto % %d %d s - spline segment % x - flush line, spline % <wid> <ht> <x> <y> b - box % <wid> <ht> <x> <y> e - ellipse % %d ss - setscale % %d W - change linewidth % getpagesize - gets the values of PAGEHEIGHT and PAGEWIDTH % %d %d flip - translate by %d, PAGEHEIGHT - %d (this % transforms to X windows coordinates) save 50 dict begin /xpic exch def /StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def % Set defaults /fontname /Times-Roman def /ptsize 12 def % halign has the values for MIDLINE, TOPLINE, BOTLINE /halign 3 array def /s {rcurveto} def /x {stroke} def /l {lineto} def /m {moveto} def /b { /ury exch def /urx exch def /lly exch def /llx exch def llx lly moveto urx lly lineto urx ury lineto llx ury lineto llx lly lineto stroke } def /mtrx matrix def /e { /yc exch def /xc exch def /yrad exch def /xrad exch def xc xrad add yc moveto /savematrix mtrx currentmatrix def xc yc translate xrad yrad scale 0 0 1 0 360 arc savematrix setmatrix stroke } def % The next three take the text string, and moveto the right horiz. position % leaving the string on the stack. /lj {} def /rj {dup stringwidth pop neg 0 rmoveto} def /ce {dup stringwidth pop 2 div neg 0 rmoveto} def % And this is invoked after one of the three above, and % computes the vert. pos, and then displays the string. /t {halign exch get 0 exch rmoveto show newpath} def % Store an array of patterns in /styles - a pattern is an array consisting % of an array and an offset. Corresp to xpic patterns % solid, dotted, short-dashed, long-dashed, dot-dashed /styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] 5 array astore def % change style to arg. /D {stroke styles exch get aload pop setdash newpath} def /W {stroke 0.5 mul setlinewidth newpath} def % fontbox takes a fontname off the stack, and returns an array % containing the values of the bottom line of the bounding box, the % mid line of the bounding box, and the top line of the bounding box % of that font, taken from the baseline, scaled to a font of size 1 /fontbox { findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop /ytop exch def pop /ybot exch def pop /ymid ytop ybot sub 2 div def 0 ybot fm dtransform exch pop % botline dup neg exch % midline - this works better than (ytop-ybot)/2! 0 ytop fm dtransform exch pop exch %topline % now in the order midline, topline, botline. 3 array astore } def % select font /F { dup /fontname exch def fontbox /thisfontbox exch def SF } def % set point size /S {/ptsize exch def SF} def % actually set font /SF { fontname findfont ptsize curscale div scalefont setfont thisfontbox aload pop 1 1 3 { pop ptsize mul curscale div neg 3 1 roll } for halign astore pop } def % sets the scale to 72 / n, where n is on the stack, and stores the value % in curscale for font scaling /curscale 1 def /getpagesize{newpath clippath pathbbox /pageheight exch def /pagewidth exch def pop pop newpath} def /flip{pageheight exch sub translate} def /ss {/curscale exch 72 exch div dup dup scale def} def /land {90 rotate} def StartXpic %%EndProlog 80 ss 0.5 W 0 D 80 32 m 64 24 l x 32 24 m 56 32 l x 32 8 m 56 0 l x 8 16 56 16 e 0 24 32 8 b 64 16 m 80 16 l x 64 8 m 80 0 l x %%Trailer showpage % Trailer for xpic to PostScript converter % $Header: x2ps.tra,v 1.2 89/07/02 15:59:53 moraes Exp $ xpic end restore %%EndDocument @endspecial 275 4234 a(In)41 b(some)h(earlier)h(implemen)m(tations)h (of)e Fz(awk)p FB(,)j(when)c(a)h(v)-5 b(ariable)43 b(assignmen)m(t)g(o) s(ccurred)e(b)s(efore)150 4344 y(an)m(y)d(\014le)f(names,)i(the)e (assignmen)m(t)h(w)m(ould)f(happ)s(en)f Fw(b)-5 b(efor)g(e)44 b FB(the)38 b Fz(BEGIN)d FB(rule)i(w)m(as)h(executed.)62 b Fz(awk)p FB('s)150 4454 y(b)s(eha)m(vior)35 b(w)m(as)g(th)m(us)f (inconsisten)m(t;)k(some)d(command-line)g(assignmen)m(ts)g(w)m(ere)g(a) m(v)-5 b(ailable)37 b(inside)e(the)150 4563 y Fz(BEGIN)29 b FB(rule,)i(while)g(others)g(w)m(ere)h(not.)42 b(Unfortunately)-8 b(,)32 b(some)g(applications)g(came)g(to)f(dep)s(end)f(up)s(on)150 4673 y(this)f(\\feature.")41 b(When)29 b Fz(awk)f FB(w)m(as)h(c)m (hanged)g(to)h(b)s(e)e(more)h(consisten)m(t,)h(the)f(`)p Fz(-v)p FB(')g(option)g(w)m(as)g(added)f(to)150 4782 y(accommo)s(date)k(applications)g(that)f(dep)s(ended)d(up)s(on)h(the)i (old)f(b)s(eha)m(vior.)275 4920 y(The)25 b(v)-5 b(ariable)28 b(assignmen)m(t)f(feature)g(is)f(most)h(useful)f(for)g(assigning)h(to)g (v)-5 b(ariables)27 b(suc)m(h)f(as)h Fz(RS)p FB(,)g Fz(OFS)p FB(,)150 5029 y(and)32 b Fz(ORS)p FB(,)h(whic)m(h)f(con)m(trol)i(input) e(and)g(output)g(formats)h(b)s(efore)f(scanning)h(the)g(data)g (\014les.)48 b(It)32 b(is)h(also)150 5139 y(useful)d(for)g(con)m (trolling)i(state)g(if)e(m)m(ultiple)h(passes)f(are)h(needed)f(o)m(v)m (er)i(a)f(data)g(\014le.)41 b(F)-8 b(or)31 b(example:)p 150 5241 1200 4 v 199 5308 a Fo(1)275 5340 y Fn(Not)25 b(recommended.)p eop end %%Page: 179 191 TeXDict begin 179 190 bop 2096 -116 a Fr(Chapter)30 b(11:)42 b(Running)29 b Fz(awk)g Fr(and)h Fz(gawk)90 b FB(179)390 299 y Fz(awk)47 b('pass)f(==)h(1)96 b({)47 b Fk(pass)g(1)g(stuff)57 b Fz(})629 408 y(pass)46 b(==)h(2)96 b({)47 b Fk(pass)g(2)g(stuff)57 b Fz(}')47 b(pass=1)f(mydata)g(pass=2)g(mydata)275 575 y FB(Giv)m(en)32 b(the)g(v)-5 b(ariable)32 b(assignmen)m(t)h(feature,)f (the)g(`)p Fz(-F)p FB(')f(option)h(for)g(setting)g(the)g(v)-5 b(alue)32 b(of)g Fz(FS)f FB(is)h(not)150 685 y(strictly)f(necessary)-8 b(.)42 b(It)30 b(remains)h(for)f(historical)h(compatibilit)m(y)-8 b(.)150 966 y FA(11.4)68 b(The)45 b Fq(AWKPATH)c FA(En)l(vironmen)l(t) 46 b(V)-11 b(ariable)150 1125 y FB(In)31 b(most)g Fz(awk)g FB(implemen)m(tations,)i(y)m(ou)f(m)m(ust)f(supply)f(a)i(precise)f (path)g(name)h(for)f(eac)m(h)h(program)g(\014le,)150 1235 y(unless)39 b(the)h(\014le)h(is)f(in)f(the)h(curren)m(t)g (directory)-8 b(.)71 b(But)40 b(in)g Fz(gawk)p FB(,)h(if)f(the)g (\014le)g(name)g(supplied)f(to)i(the)150 1344 y(`)p Fz(-f)p FB(')29 b(option)g(do)s(es)g(not)g(con)m(tain)h(a)f(`)p Fz(/)p FB(',)h(then)e Fz(gawk)g FB(searc)m(hes)i(a)f(list)h(of)f (directories)h(\(called)g(the)f Fx(searc)m(h)150 1454 y(path)p FB(\),)i(one)f(b)m(y)h(one,)g(lo)s(oking)g(for)f(a)h(\014le)f (with)g(the)h(sp)s(eci\014ed)e(name.)275 1621 y(The)39 b(searc)m(h)i(path)g(is)f(a)h(string)f(consisting)h(of)g(directory)g (names)f(separated)h(b)m(y)f(colons.)72 b Fz(gawk)150 1730 y FB(gets)45 b(its)e(searc)m(h)i(path)e(from)g(the)h Fz(AWKPATH)d FB(en)m(vironmen)m(t)j(v)-5 b(ariable.)81 b(If)43 b(that)h(v)-5 b(ariable)45 b(do)s(es)e(not)150 1840 y(exist,)e Fz(gawk)36 b FB(uses)i(a)g(default)g(path,)h(`)p Fz(.:/usr/local/share/awk)p FB('.)2602 1807 y Fo(2)2697 1840 y FB(\(Programs)f(written)g(for)f(use)150 1949 y(b)m(y)28 b(system)g(administrators)g(should)f(use)h(an)f Fz(AWKPATH)f FB(v)-5 b(ariable)29 b(that)g(do)s(es)e(not)h(include)g(the)g(curren)m (t)150 2059 y(directory)-8 b(,)32 b(`)p Fz(.)p FB('.\))275 2226 y(The)20 b(searc)m(h)i(path)g(feature)f(is)h(particularly)g (useful)e(for)h(building)g(libraries)g(of)h(useful)f Fz(awk)f FB(functions.)150 2335 y(The)k(library)h(\014les)g(can)g(b)s (e)f(placed)i(in)e(a)i(standard)e(directory)h(in)g(the)g(default)g (path)g(and)f(then)h(sp)s(eci\014ed)150 2445 y(on)34 b(the)h(command)f(line)h(with)g(a)f(short)h(\014le)f(name.)54 b(Otherwise,)35 b(the)g(full)f(\014le)h(name)f(w)m(ould)g(ha)m(v)m(e)i (to)150 2554 y(b)s(e)30 b(t)m(yp)s(ed)g(for)g(eac)m(h)h(\014le.)275 2721 y(By)23 b(using)f(b)s(oth)g(the)h(`)p Fz(--source)p FB(')e(and)i(`)p Fz(-f)p FB(')f(options,)j(y)m(our)e(command-line)h Fz(awk)e FB(programs)g(can)h(use)150 2831 y(facilities)32 b(in)e Fz(awk)f FB(library)g(\014les)h(\(see)h(Chapter)e(12)i([A)f (Library)f(of)h Fz(awk)f FB(F)-8 b(unctions],)31 b(page)g(181\).)42 b(P)m(ath)150 2940 y(searc)m(hing)23 b(is)f(not)g(done)g(if)f Fz(gawk)g FB(is)h(in)g(compatibilit)m(y)i(mo)s(de.)37 b(This)21 b(is)h(true)g(for)g(b)s(oth)f(`)p Fz(--traditional)p FB(')150 3050 y(and)30 b(`)p Fz(--posix)p FB('.)39 b(See)31 b(Section)g(11.2)h([Command-Line)e(Options],)g(page)h(173.)390 3217 y Fr(NOTE:)e FB(If)f(y)m(ou)h(w)m(an)m(t)g(\014les)g(in)f(the)h (curren)m(t)f(directory)h(to)g(b)s(e)f(found,)g(y)m(ou)h(m)m(ust)f (include)390 3326 y(the)k(curren)m(t)f(directory)h(in)f(the)h(path,)g (either)g(b)m(y)f(including)g(`)p Fz(.)p FB(')h(explicitly)h(in)e(the)h (path)390 3436 y(or)k(b)m(y)g(writing)g(a)g(n)m(ull)g(en)m(try)g(in)g (the)g(path.)57 b(\(A)37 b(n)m(ull)f(en)m(try)g(is)g(indicated)g(b)m(y) g(starting)390 3545 y(or)h(ending)g(the)h(path)f(with)g(a)g(colon)i(or) e(b)m(y)g(placing)h(t)m(w)m(o)h(colons)f(next)f(to)h(eac)m(h)h(other) 390 3655 y(\(`)p Fz(::)p FB('\).\))i(If)26 b(the)h(curren)m(t)g (directory)g(is)g(not)g(included)f(in)h(the)g(path,)h(then)e(\014les)h (cannot)h(b)s(e)390 3765 y(found)i(in)h(the)g(curren)m(t)h(directory)-8 b(.)44 b(This)31 b(path)g(searc)m(h)h(mec)m(hanism)f(is)h(iden)m(tical) h(to)f(the)390 3874 y(shell's.)275 4041 y(Starting)g(with)g(v)m(ersion) g(3.0,)i(if)e Fz(AWKPATH)e FB(is)i(not)g(de\014ned)f(in)g(the)i(en)m (vironmen)m(t,)g Fz(gawk)e FB(places)i(its)150 4151 y(default)d(searc)m (h)g(path)f(in)m(to)i Fz(ENVIRON["AWKPATH"])p FB(.)k(This)29 b(mak)m(es)i(it)f(easy)g(to)g(determine)g(the)g(actual)150 4260 y(searc)m(h)h(path)f(that)h Fz(gawk)e FB(will)i(use)f(from)g (within)g(an)g Fz(awk)g FB(program.)275 4427 y(While)d(y)m(ou)g(can)f (c)m(hange)i Fz(ENVIRON["AWKPATH"])21 b FB(within)26 b(y)m(our)h Fz(awk)e FB(program,)j(this)e(has)g(no)g(e\013ect)150 4536 y(on)33 b(the)h(running)e(program's)h(b)s(eha)m(vior.)50 b(This)32 b(mak)m(es)i(sense:)47 b(the)34 b Fz(AWKPATH)d FB(en)m(vironmen)m(t)j(v)-5 b(ariable)150 4646 y(is)35 b(used)g(to)h(\014nd)d(the)i(program)g(source)h(\014les.)55 b(Once)35 b(y)m(our)g(program)g(is)g(running,)g(all)h(the)g(\014les)f (ha)m(v)m(e)150 4756 y(b)s(een)30 b(found,)f(and)h Fz(gawk)f FB(no)h(longer)h(needs)f(to)h(use)f Fz(AWKPATH)p FB(.)p 150 5066 1200 4 v 199 5134 a Fo(2)275 5166 y Fn(Y)-6 b(our)21 b(v)n(ersion)h(of)g Fm(gawk)h Fn(ma)n(y)f(use)g(a)g (di\013eren)n(t)f(directory;)j(it)e(will)h(dep)r(end)e(up)r(on)h(ho)n (w)g Fm(gawk)h Fn(w)n(as)f(built)g(and)g(installed.)275 5253 y(The)30 b(actual)g(directory)g(is)h(the)e(v)l(alue)h(of)h(`)p Fm($\(datadir\))p Fn(')h(generated)f(when)f Fm(gawk)g Fn(w)n(as)h(con\014gured.)47 b(Y)-6 b(ou)29 b(probably)275 5340 y(don't)c(need)g(to)h(w)n(orry)g(ab)r(out)g(this,)g(though.)p eop end %%Page: 180 192 TeXDict begin 180 191 bop 150 -116 a FB(180)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FA(11.5)68 b(Obsolete)47 b(Options)e(and/or)g(F)-11 b(eatures)150 458 y FB(This)25 b(section)i(describ)s(es)e(features)i (and/or)e(command-line)i(options)f(from)g(previous)f(releases)i(of)f Fz(gawk)150 568 y FB(that)f(are)g(either)f(not)h(a)m(v)-5 b(ailable)27 b(in)d(the)g(curren)m(t)g(v)m(ersion)h(or)f(that)h(are)g (still)g(supp)s(orted)e(but)g(deprecated)150 677 y(\(meaning)31 b(that)g(they)g(will)f Fw(not)40 b FB(b)s(e)30 b(in)g(the)g(next)h (release\).)275 812 y(F)-8 b(or)25 b(v)m(ersion)g(3.1)h(of)f Fz(gawk)p FB(,)g(there)g(are)h(no)e(deprecated)i(command-line)f (options)g(from)f(the)h(previous)150 922 y(v)m(ersion)31 b(of)g Fz(gawk)p FB(.)40 b(The)31 b(use)f(of)h(`)p Fz(next)e(file)p FB(')h(\(t)m(w)m(o)i(w)m(ords\))f(for)f Fz(nextfile)f FB(w)m(as)i(deprecated)g(in)f Fz(gawk)150 1031 y FB(3.0)h(but)f(still)h (w)m(ork)m(ed.)42 b(Starting)30 b(with)g(v)m(ersion)h(3.1,)h(the)f(t)m (w)m(o-w)m(ord)g(usage)g(is)g(no)f(longer)h(accepted.)275 1166 y(The)41 b(pro)s(cess-related)i(sp)s(ecial)f(\014les)g(describ)s (ed)f(in)g(Section)i(4.7.2)h([Sp)s(ecial)e(Files)h(for)f(Pro)s(cess-) 150 1275 y(Related)27 b(Information],)h(page)f(69,)h(w)m(ork)e(as)h (describ)s(ed,)f(but)f(are)i(no)m(w)f(considered)g(deprecated.)40 b Fz(gawk)150 1385 y FB(prin)m(ts)23 b(a)g(w)m(arning)h(message)g(ev)m (ery)g(time)g(they)g(are)f(used.)38 b(\(Use)24 b Fz(PROCINFO)d FB(instead;)26 b(see)e(Section)g(6.5.2)150 1494 y([Built-in)36 b(V)-8 b(ariables)35 b(That)g(Con)m(v)m(ey)g(Information],)h(page)f (110.\))55 b(They)34 b(will)h(b)s(e)f(remo)m(v)m(ed)i(from)e(the)150 1604 y(next)d(release)g(of)g Fz(gawk)p FB(.)150 1836 y FA(11.6)68 b(Undo)t(cumen)l(ted)45 b(Options)h(and)e(F)-11 b(eatures)390 1996 y Fw(Use)32 b(the)h(Sour)-5 b(c)g(e,)34 b(Luke!)390 2105 y FB(Obi-W)-8 b(an)275 2240 y(This)29 b(section)j(in)m(ten)m(tionally)g(left)g(blank.)150 2472 y FA(11.7)68 b(Kno)l(wn)46 b(Bugs)e(in)h Fq(gawk)225 2632 y Fy(\017)60 b FB(The)23 b(`)p Fz(-F)p FB(')g(option)h(for)f(c)m (hanging)h(the)g(v)-5 b(alue)23 b(of)h Fz(FS)f FB(\(see)h(Section)g (11.2)h([Command-Line)e(Options],)330 2741 y(page)46 b(173\))h(is)e(not)g(necessary)h(giv)m(en)g(the)f(command-line)g(v)-5 b(ariable)46 b(assignmen)m(t)g(feature;)53 b(it)330 2851 y(remains)30 b(only)h(for)f(bac)m(kw)m(ard)h(compatibilit)m(y)-8 b(.)225 2985 y Fy(\017)60 b FB(Syn)m(tactically)30 b(in)m(v)-5 b(alid)27 b(single-c)m(haracter)j(programs)c(tend)h(to)h(o)m(v)m (er\015o)m(w)g(the)f(parse)g(stac)m(k,)i(gener-)330 3095 y(ating)j(a)f(rather)f(unhelpful)f(message.)43 b(Suc)m(h)30 b(programs)g(are)h(surprisingly)e(di\016cult)i(to)g(diagnose)330 3205 y(in)f(the)h(completely)h(general)f(case,)h(and)e(the)g(e\013ort)h (to)g(do)g(so)f(really)h(is)g(not)g(w)m(orth)f(it.)p eop end %%Page: 181 193 TeXDict begin 181 192 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(181)150 299 y Fu(12)80 b(A)54 b(Library)f(of)h Fi(awk)g Fu(F)-13 b(unctions)150 512 y FB(Section)32 b(8.2)g([User-De\014ned)f (F)-8 b(unctions],)32 b(page)g(149,)g(describ)s(es)e(ho)m(w)h(to)h (write)f(y)m(our)g(o)m(wn)g Fz(awk)f FB(func-)150 622 y(tions.)42 b(W)-8 b(riting)31 b(functions)f(is)h(imp)s(ortan)m(t,)g(b) s(ecause)f(it)i(allo)m(ws)f(y)m(ou)g(to)h(encapsulate)f(algorithms)h (and)150 731 y(program)h(tasks)h(in)f(a)h(single)g(place.)51 b(It)33 b(simpli\014es)g(programming,)i(making)e(program)h(dev)m (elopmen)m(t)150 841 y(more)d(manageable,)h(and)d(making)i(programs)f (more)h(readable.)275 971 y(One)38 b(v)-5 b(aluable)40 b(w)m(a)m(y)g(to)g(learn)g(a)f(new)g(programming)g(language)h(is)f(to)h Fw(r)-5 b(e)g(ad)51 b FB(programs)38 b(in)h(that)150 1081 y(language.)58 b(T)-8 b(o)36 b(that)h(end,)g(this)e(c)m(hapter)i (and)e(Chapter)g(13)h([Practical)i Fz(awk)d FB(Programs],)j(page)e (210,)150 1191 y(pro)m(vide)30 b(a)h(go)s(o)s(d-sized)g(b)s(o)s(dy)e (of)i(co)s(de)f(for)g(y)m(ou)h(to)g(read,)g(and)e(hop)s(efully)-8 b(,)31 b(to)g(learn)f(from.)275 1321 y(This)j(c)m(hapter)j(presen)m(ts) e(a)h(library)g(of)f(useful)g Fz(awk)g FB(functions.)53 b(Man)m(y)36 b(of)f(the)f(sample)h(programs)150 1431 y(presen)m(ted)41 b(later)h(in)e(this)h(b)s(o)s(ok)f(use)h(these)g (functions.)72 b(The)41 b(functions)f(are)h(presen)m(ted)g(here)g(in)g (a)150 1540 y(progression)30 b(from)g(simple)g(to)i(complex.)275 1670 y(Section)40 b(13.3.7)h([Extracting)g(Programs)e(from)g(T)-8 b(exinfo)39 b(Source)g(Files],)k(page)d(240,)j(presen)m(ts)d(a)150 1780 y(program)d(that)g(y)m(ou)g(can)h(use)e(to)i(extract)g(the)f (source)g(co)s(de)g(for)g(these)g(example)h(library)e(functions)150 1890 y(and)c(programs)g(from)g(the)g(T)-8 b(exinfo)33 b(source)g(for)f(this)g(b)s(o)s(ok.)46 b(\(This)32 b(has)h(already)g(b) s(een)e(done)h(as)h(part)150 1999 y(of)e(the)f Fz(gawk)f FB(distribution.\))275 2130 y(If)f(y)m(ou)i(ha)m(v)m(e)g(written)f(one) h(or)f(more)g(useful,)g(general-purp)s(ose)g Fz(awk)f FB(functions)h(and)g(w)m(ould)g(lik)m(e)h(to)150 2239 y(con)m(tribute)25 b(them)f(to)h(the)f(author's)h(collection)h(of)f Fz(awk)e FB(programs,)i(see)g([Ho)m(w)g(to)g(Con)m(tribute],)h(page)f (8,)150 2349 y(for)30 b(more)h(information.)275 2479 y(The)37 b(programs)h(in)f(this)h(c)m(hapter)h(and)f(in)f(Chapter)h(13) h([Practical)h Fz(awk)d FB(Programs],)k(page)d(210,)150 2589 y(freely)27 b(use)g(features)h(that)f(are)h Fz(gawk)p FB(-sp)s(eci\014c.)39 b(Rewriting)27 b(these)h(programs)e(for)h (di\013eren)m(t)h(implemen-)150 2698 y(tations)k(of)e(a)m(wk)h(is)f (prett)m(y)h(straigh)m(tforw)m(ard.)275 2829 y(Diagnostic)k(error)f (messages)g(are)g(sen)m(t)g(to)g(`)p Fz(/dev/stderr)p FB('.)48 b(Use)34 b(`)p Fz(|)c("cat)f(1>&2")p FB(')k(instead)g(of)h(`)p Fz(>)150 2938 y("/dev/stderr")p FB(')27 b(if)j(y)m(our)h(system)f(do)s (es)g(not)h(ha)m(v)m(e)g(a)g(`)p Fz(/dev/stderr)p FB(',)d(or)j(if)f(y)m (ou)h(cannot)g(use)f Fz(gawk)p FB(.)275 3069 y(A)k(n)m(um)m(b)s(er)e (of)i(programs)g(use)g Fz(nextfile)d FB(\(see)k(Section)g(6.4.9)h ([Using)e Fz(gawk)p FB('s)f Fz(nextfile)f FB(State-)150 3178 y(men)m(t],)27 b(page)e(106\))i(to)f(skip)e(an)m(y)h(remaining)g (input)f(in)h(the)g(input)f(\014le.)39 b(Section)25 b(12.2.1)i ([Implemen)m(ting)150 3288 y Fz(nextfile)i FB(as)i(a)h(F)-8 b(unction],)32 b(page)g(183,)h(sho)m(ws)e(y)m(ou)g(ho)m(w)g(to)h(write) f(a)h(function)f(that)g(do)s(es)g(the)h(same)150 3397 y(thing.)275 3528 y(Finally)-8 b(,)28 b(some)e(of)g(the)g(programs)g(c) m(ho)s(ose)g(to)h(ignore)f(upp)s(er-)f(and)g(lo)m(w)m(ercase)j (distinctions)e(in)g(their)150 3637 y(input.)38 b(They)24 b(do)g(so)h(b)m(y)f(assigning)h(one)g(to)g Fz(IGNORECASE)p FB(.)36 b(Y)-8 b(ou)25 b(can)f(ac)m(hiev)m(e)j(almost)f(the)e(same)h (e\013ect)3711 3604 y Fo(1)150 3747 y FB(b)m(y)30 b(adding)g(the)h (follo)m(wing)h(rule)e(to)h(the)f(b)s(eginning)g(of)h(the)f(program:) 390 3877 y Fz(#)47 b(ignore)g(case)390 3987 y({)g($0)h(=)f (tolower\($0\))e(})150 4117 y FB(Also,)d(v)m(erify)d(that)g(all)g (regexp)g(and)f(string)h(constan)m(ts)h(used)e(in)g(comparisons)g(use)h (only)g(lo)m(w)m(ercase)150 4227 y(letters.)150 4451 y FA(12.1)68 b(Naming)46 b(Library)f(F)-11 b(unction)44 b(Global)i(V)-11 b(ariables)150 4610 y FB(Due)39 b(to)g(the)g(w)m(a)m (y)g(the)g Fz(awk)f FB(language)i(ev)m(olv)m(ed,)i(v)-5 b(ariables)40 b(are)e(either)h Fx(global)44 b FB(\(usable)39 b(b)m(y)f(the)h(en-)150 4720 y(tire)c(program\))f(or)h Fx(lo)s(cal)k FB(\(usable)c(just)f(b)m(y)g(a)h(sp)s(eci\014c)f (function\).)53 b(There)34 b(is)g(no)h(in)m(termediate)h(state)150 4829 y(analogous)c(to)f Fz(static)d FB(v)-5 b(ariables)31 b(in)g(C.)275 4960 y(Library)44 b(functions)g(often)h(need)g(to)g(ha)m (v)m(e)h(global)h(v)-5 b(ariables)45 b(that)g(they)h(can)f(use)f(to)i (preserv)m(e)150 5069 y(state)30 b(information)g(b)s(et)m(w)m(een)g (calls)g(to)g(the)f(function|for)g(example,)h Fz(getopt)p FB('s)d(v)-5 b(ariable)30 b Fz(_opti)e FB(\(see)p 150 5154 1200 4 v 199 5221 a Fo(1)275 5253 y Fn(The)20 b(e\013ects)i(are)f (not)f(iden)n(tical.)34 b(Output)19 b(of)j(the)e(transformed)i(record)f (will)h(b)r(e)f(in)f(all)i(lo)n(w)n(ercase,)i(while)e Fm(IGNORECASE)275 5340 y Fn(preserv)n(es)j(the)h(original)h(con)n(ten)n (ts)e(of)i(the)e(input)g(record.)p eop end %%Page: 182 194 TeXDict begin 182 193 bop 150 -116 a FB(182)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(Section)44 b(12.4)g([Pro)s(cessing)f(Command-Line)f(Options],) k(page)e(196\).)80 b(Suc)m(h)42 b(v)-5 b(ariables)43 b(are)h(called)150 408 y Fx(priv)-5 b(ate)p FB(,)31 b(since)g(the)f (only)h(functions)f(that)h(need)f(to)h(use)f(them)g(are)h(the)g(ones)f (in)g(the)h(library)-8 b(.)275 572 y(When)31 b(writing)i(a)f(library)g (function,)g(y)m(ou)h(should)e(try)h(to)h(c)m(ho)s(ose)g(names)f(for)g (y)m(our)g(priv)-5 b(ate)32 b(v)-5 b(ari-)150 682 y(ables)33 b(that)g(will)g(not)g(con\015ict)h(with)e(an)m(y)h(v)-5 b(ariables)33 b(used)f(b)m(y)g(either)i(another)e(library)h(function)f (or)h(a)150 791 y(user's)28 b(main)h(program.)40 b(F)-8 b(or)30 b(example,)g(a)f(name)g(lik)m(e)h(`)p Fz(i)p FB(')f(or)g(`)p Fz(j)p FB(')g(is)g(not)g(a)h(go)s(o)s(d)e(c)m(hoice,)k (b)s(ecause)d(user)150 901 y(programs)h(often)h(use)f(v)-5 b(ariable)31 b(names)f(lik)m(e)i(these)f(for)f(their)g(o)m(wn)h(purp)s (oses.)275 1065 y(The)22 b(example)h(programs)g(sho)m(wn)f(in)h(this)g (c)m(hapter)g(all)h(start)f(the)g(names)g(of)g(their)g(priv)-5 b(ate)23 b(v)-5 b(ariables)150 1174 y(with)38 b(an)g(underscore)g(\(`)p Fz(_)p FB('\).)65 b(Users)38 b(generally)h(don't)g(use)f(leading)h (underscores)e(in)h(their)g(v)-5 b(ariable)150 1284 y(names,)27 b(so)g(this)f(con)m(v)m(en)m(tion)j(immediately)f(decreases)f(the)g(c)m (hances)g(that)g(the)g(v)-5 b(ariable)27 b(name)g(will)g(b)s(e)150 1393 y(acciden)m(tally)33 b(shared)d(with)g(the)g(user's)g(program.)275 1557 y(In)23 b(addition,)j(sev)m(eral)g(of)e(the)h(library)f(functions) g(use)g(a)h(pre\014x)e(that)i(helps)f(indicate)h(what)f(function)150 1667 y(or)g(set)h(of)f(functions)f(use)h(the)g(v)-5 b(ariables|for)25 b(example,)h Fz(_pw_byname)21 b FB(in)j(the)g(user)f(database)i (routines)150 1776 y(\(see)h(Section)f(12.5)i([Reading)e(the)g(User)g (Database],)j(page)e(201\).)40 b(This)24 b(con)m(v)m(en)m(tion)j(is)e (recommended,)150 1886 y(since)c(it)h(ev)m(en)g(further)d(decreases)j (the)f(c)m(hance)h(of)g(inadv)m(erten)m(t)g(con\015ict)g(among)f(v)-5 b(ariable)22 b(names.)38 b(Note)150 1996 y(that)30 b(this)g(con)m(v)m (en)m(tion)i(is)d(used)g(equally)i(w)m(ell)f(for)g(v)-5 b(ariable)30 b(names)g(and)f(for)h(priv)-5 b(ate)30 b(function)f(names) 150 2105 y(as)i(w)m(ell.)440 2072 y Fo(2)275 2269 y FB(As)d(a)h (\014nal)f(note)h(on)g(v)-5 b(ariable)29 b(naming,)g(if)g(a)f(function) h(mak)m(es)g(global)h(v)-5 b(ariables)29 b(a)m(v)-5 b(ailable)31 b(for)d(use)150 2378 y(b)m(y)38 b(a)g(main)g(program,)i(it)f(is)f(a)h (go)s(o)s(d)f(con)m(v)m(en)m(tion)i(to)f(start)f(that)h(v)-5 b(ariable's)39 b(name)f(with)g(a)g(capital)150 2488 y(letter|for)h (example,)h Fz(getopt)p FB('s)c Fz(Opterr)g FB(and)h Fz(Optind)f FB(v)-5 b(ariables)38 b(\(see)h(Section)f(12.4)i([Pro)s (cessing)150 2598 y(Command-Line)33 b(Options],)i(page)g(196\).)53 b(The)34 b(leading)g(capital)i(letter)f(indicates)g(that)g(it)f(is)g (global,)150 2707 y(while)c(the)h(fact)g(that)g(the)f(v)-5 b(ariable)31 b(name)g(is)f(not)h(all)g(capital)h(letters)f(indicates)g (that)g(the)g(v)-5 b(ariable)31 b(is)150 2817 y(not)g(one)f(of)h Fz(awk)p FB('s)e(built-in)i(v)-5 b(ariables,)31 b(suc)m(h)f(as)h Fz(FS)p FB(.)275 2981 y(It)d(is)h(also)h(imp)s(ortan)m(t)f(that)g Fw(al)5 b(l)38 b FB(v)-5 b(ariables)30 b(in)e(library)g(functions)h (that)g(do)g(not)f(need)h(to)g(sa)m(v)m(e)i(state)150 3090 y(are,)k(in)e(fact,)i(declared)f(lo)s(cal.)1218 3057 y Fo(3)1306 3090 y FB(If)f(this)g(is)g(not)h(done,)g(the)g(v)-5 b(ariable)34 b(could)f(acciden)m(tally)j(b)s(e)d(used)f(in)150 3200 y(the)f(user's)e(program,)i(leading)g(to)g(bugs)f(that)h(are)f(v)m (ery)h(di\016cult)f(to)i(trac)m(k)f(do)m(wn:)390 3363 y Fz(function)46 b(lib_func\(x,)e(y,)191 b(l1,)47 b(l2\))390 3473 y({)581 3583 y(...)581 3692 y Fk(use)g(variable)56 b Fz(some_var)141 b(#)47 b(some_var)f(should)g(be)h(local)581 3802 y(...)906 b(#)47 b(but)g(is)g(not)g(by)h(oversight)390 3911 y(})275 4075 y FB(A)41 b(di\013eren)m(t)h(con)m(v)m(en)m(tion,)47 b(common)41 b(in)g(the)h(Tcl)g(comm)m(unit)m(y)-8 b(,)46 b(is)41 b(to)h(use)f(a)h(single)g(asso)s(ciativ)m(e)150 4185 y(arra)m(y)30 b(to)h(hold)e(the)h(v)-5 b(alues)30 b(needed)g(b)m(y)g(the)g(library)f(function\(s\),)h(or)g(\\pac)m(k)-5 b(age.")44 b(This)29 b(signi\014can)m(tly)150 4294 y(decreases)k(the)g (n)m(um)m(b)s(er)e(of)i(actual)g(global)h(names)f(in)f(use.)46 b(F)-8 b(or)34 b(example,)f(the)g(functions)f(describ)s(ed)150 4404 y(in)40 b(Section)g(12.5)i([Reading)e(the)g(User)g(Database],)k (page)d(201,)j(migh)m(t)c(ha)m(v)m(e)h(used)e(arra)m(y)i(elemen)m(ts) 150 4513 y Fz(PW_data["inited"])-5 b FB(,)52 b Fz(PW_data["total"])l FB(,)g Fz(PW_data["count"])l FB(,)f(and)c Fz(PW_data["awklib"])l FB(,)150 4623 y(instead)31 b(of)f Fz(_pw_inited)m FB(,)h Fz(_pw_awklib)m FB(,)g Fz(_pw_total)m FB(,)g(and)f Fz(_pw_count)m FB(.)275 4787 y(The)37 b(con)m(v)m(en)m(tions)j(presen)m(ted)d(in)h (this)f(section)i(are)g(exactly)g(that:)56 b(con)m(v)m(en)m(tions.)65 b(Y)-8 b(ou)39 b(are)f(not)150 4896 y(required)30 b(to)h(write)f(y)m (our)h(programs)f(this)g(w)m(a)m(y|w)m(e)i(merely)e(recommend)g(that)h (y)m(ou)g(do)f(so.)p 150 5051 1200 4 v 199 5118 a Fo(2)275 5150 y Fn(While)19 b(all)h(the)f(library)g(routines)h(could)f(ha)n(v)n (e)g(b)r(een)g(rewritten)g(to)h(use)f(this)g(con)n(v)n(en)n(tion,)i (this)e(w)n(as)h(not)f(done,)i(in)e(order)275 5237 y(to)25 b(sho)n(w)i(ho)n(w)f(m)n(y)f(o)n(wn)h Fm(awk)g Fn(programming)h(st)n (yle)e(has)h(ev)n(olv)n(ed)g(and)f(to)h(pro)n(vide)f(some)h(basis)h (for)f(this)g(discussion.)199 5308 y Fo(3)275 5340 y Fm(gawk)p Fn('s)h(`)p Fm(--dump-variables)p Fn(')j(command-line)25 b(option)h(is)h(useful)f(for)g(v)n(erifying)g(this.)p eop end %%Page: 183 195 TeXDict begin 183 194 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(183)150 299 y FA(12.2)68 b(General)46 b(Programming)150 458 y FB(This)30 b(section)h(presen)m(ts)f(a)h(n)m(um)m(b)s(er)e(of)i (functions)f(that)h(are)f(of)h(general)g(programming)f(use.)150 668 y Fj(12.2.1)63 b(Implemen)m(ting)42 b Fh(nextfile)g Fj(as)f(a)f(F)-10 b(unction)150 815 y FB(The)37 b Fz(nextfile)e FB(statemen)m(t,)41 b(presen)m(ted)d(in)f(Section)h(6.4.9)h([Using)f Fz(gawk)p FB('s)f Fz(nextfile)e FB(Statemen)m(t],)150 925 y(page)30 b(106,)h(is)f(a)f Fz(gawk)p FB(-sp)s(eci\014c)g (extension|it)h(is)f(not)h(a)m(v)-5 b(ailable)32 b(in)d(most)g(other)h (implemen)m(tations)h(of)150 1035 y Fz(awk)p FB(.)43 b(This)31 b(section)i(sho)m(ws)e(t)m(w)m(o)i(v)m(ersions)f(of)g(a)g Fz(nextfile)d FB(function)i(that)h(y)m(ou)g(can)g(use)f(to)i(sim)m (ulate)150 1144 y Fz(gawk)p FB('s)c Fz(nextfile)f FB(statemen)m(t)33 b(if)d(y)m(ou)h(cannot)g(use)f Fz(gawk)p FB(.)275 1290 y(A)g(\014rst)g(attempt)h(at)g(writing)g(a)f Fz(nextfile)e FB(function)j(is)f(as)h(follo)m(ws:)390 1435 y Fz(#)47 b(nextfile)f(---)h(skip)g(remaining)e(records)h(in)h(current)f(file)390 1545 y(#)h(this)g(should)f(be)h(read)g(in)g(before)f(the)h("main")f (awk)h(program)390 1764 y(function)f(nextfile\(\))188 b({)47 b(_abandon_)e(=)j(FILENAME;)d(next)i(})390 1873 y(_abandon_)e(==)i(FILENAME)94 b({)47 b(next)g(})275 2019 y FB(Because)28 b(it)g(supplies)f(a)h(rule)f(that)h(m)m(ust)f(b)s (e)g(executed)i(\014rst,)e(this)h(\014le)f(should)g(b)s(e)g(included)f (b)s(efore)150 2128 y(the)k(main)f(program.)40 b(This)29 b(rule)g(compares)h(the)g(curren)m(t)f(data)h(\014le's)g(name)f(\(whic) m(h)h(is)g(alw)m(a)m(ys)h(in)e(the)150 2238 y Fz(FILENAME)f FB(v)-5 b(ariable\))32 b(to)f(a)f(priv)-5 b(ate)31 b(v)-5 b(ariable)31 b(named)f Fz(_abandon_)p FB(.)38 b(If)30 b(the)h(\014le)f(name)g(matc)m(hes,)i(then)150 2347 y(the)37 b(action)g(part)g(of)f(the)h(rule)f(executes)h(a)g Fz(next)e FB(statemen)m(t)k(to)e(go)g(on)f(to)h(the)g(next)f(record.)59 b(\(The)150 2457 y(use)35 b(of)h(`)p Fz(_)p FB(')g(in)g(the)g(v)-5 b(ariable)36 b(name)g(is)g(a)g(con)m(v)m(en)m(tion.)59 b(It)36 b(is)f(discussed)g(more)h(fully)f(in)h(Section)g(12.1)150 2567 y([Naming)31 b(Library)f(F)-8 b(unction)31 b(Global)g(V)-8 b(ariables],)33 b(page)e(181.\))275 2712 y(The)f(use)h(of)g(the)g Fz(next)e FB(statemen)m(t)k(e\013ectiv)m(ely)h(creates)e(a)g(lo)s(op)f (that)g(reads)g(all)h(the)f(records)f(from)150 2822 y(the)44 b(curren)m(t)g(data)h(\014le.)82 b(The)44 b(end)g(of)g(the)g(\014le)h (is)f(ev)m(en)m(tually)i(reac)m(hed)f(and)e(a)i(new)f(data)h(\014le)f (is)150 2931 y(op)s(ened,)28 b(c)m(hanging)i(the)e(v)-5 b(alue)29 b(of)g Fz(FILENAME)p FB(.)38 b(Once)28 b(this)g(happ)s(ens,)g (the)g(comparison)h(of)f Fz(_abandon_)150 3041 y FB(to)j Fz(FILENAME)d FB(fails,)j(and)f(execution)i(con)m(tin)m(ues)f(with)f (the)h(\014rst)e(rule)i(of)f(the)h(\\real")h(program.)275 3186 y(The)k Fz(nextfile)f FB(function)h(itself)i(simply)f(sets)g(the)g (v)-5 b(alue)38 b(of)f Fz(_abandon_)d FB(and)j(then)f(executes)j(a)150 3296 y Fz(next)29 b FB(statemen)m(t)j(to)g(start)e(the)h(lo)s(op.)275 3441 y(This)37 b(initial)k(v)m(ersion)e(has)f(a)h(subtle)g(problem.)65 b(If)39 b(the)g(same)g(data)g(\014le)g(is)g(listed)g Fw(twic)-5 b(e)46 b FB(on)39 b(the)150 3551 y(commandline,)i(one)f (righ)m(t)f(after)g(the)g(other)h(or)e(ev)m(en)i(with)e(just)h(a)g(v)-5 b(ariable)40 b(assignmen)m(t)f(b)s(et)m(w)m(een)150 3660 y(them,)29 b(this)f(co)s(de)g(skips)f(righ)m(t)i(through)e(the)h (\014le)g(a)h(second)f(time,)h(ev)m(en)g(though)e(it)i(should)e(stop)h (when)150 3770 y(it)k(gets)g(to)f(the)h(end)e(of)h(the)g(\014rst)g(o)s (ccurrence.)43 b(A)31 b(second)g(v)m(ersion)g(of)g Fz(nextfile)e FB(that)j(remedies)f(this)150 3880 y(problem)f(is)g(sho)m(wn)g(here:) 390 4025 y Fz(#)47 b(nextfile)f(---)h(skip)g(remaining)e(records)h(in)h (current)f(file)390 4134 y(#)h(correctly)f(handle)g(successive)f (occurrences)g(of)i(the)g(same)f(file)390 4354 y(#)h(this)g(should)f (be)h(read)g(in)g(before)f(the)h("main")f(awk)h(program)390 4573 y(function)f(nextfile\(\))140 b({)47 b(_abandon_)f(=)h(FILENAME;)e (next)i(})390 4792 y(_abandon_)e(==)i(FILENAME)f({)676 4902 y(if)i(\(FNR)e(==)h(1\))867 5011 y(_abandon_)f(=)h("")676 5121 y(else)867 5230 y(next)390 5340 y(})p eop end %%Page: 184 196 TeXDict begin 184 195 bop 150 -116 a FB(184)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(The)i Fz(nextfile)f FB(function)h(has)h(not)g(c)m(hanged.)49 b(It)33 b(mak)m(es)h Fz(_abandon_)d FB(equal)i(to)h(the)f(curren)m(t)g (\014le)150 408 y(name)e(and)f(then)g(executes)i(a)f Fz(next)e FB(statemen)m(t.)43 b(The)30 b Fz(next)g FB(statemen)m(t)i (reads)f(the)f(next)h(record)g(and)150 518 y(incremen)m(ts)43 b Fz(FNR)e FB(so)i(that)g Fz(FNR)e FB(is)h(guaran)m(teed)i(to)f(ha)m(v) m(e)g(a)g(v)-5 b(alue)43 b(of)f(at)h(least)h(t)m(w)m(o.)77 b(Ho)m(w)m(ev)m(er,)48 b(if)150 628 y Fz(nextfile)31 b FB(is)j(called)g(for)f(the)h(last)g(record)f(in)g(the)h(\014le,)g (then)f Fz(awk)g FB(closes)h(the)g(curren)m(t)f(data)h(\014le)g(and)150 737 y(mo)m(v)m(es)41 b(on)e(to)g(the)h(next)f(one.)68 b(Up)s(on)38 b(doing)h(so,)j Fz(FILENAME)37 b FB(is)i(set)h(to)g(the)f (name)g(of)h(the)f(new)g(\014le)150 847 y(and)30 b Fz(FNR)g FB(is)h(reset)h(to)g(one.)42 b(If)31 b(this)g(next)g(\014le)g(is)g(the) g(same)g(as)g(the)h(previous)e(one,)i Fz(_abandon_)c FB(is)j(still)150 956 y(equal)j(to)g Fz(FILENAME)p FB(.)48 b(Ho)m(w)m(ev)m(er,)36 b Fz(FNR)d FB(is)g(equal)h(to)h(one,)f(telling)h (us)e(that)h(this)f(is)h(a)g(new)f(o)s(ccurrence)150 1066 y(of)f(the)h(\014le)f(and)g(not)g(the)g(one)h(w)m(e)g(w)m(ere)f (reading)h(when)e(the)h Fz(nextfile)e FB(function)i(w)m(as)h(executed.) 47 b(In)150 1176 y(that)27 b(case,)i Fz(_abandon_)24 b FB(is)j(reset)g(to)h(the)f(empt)m(y)g(string,)h(so)f(that)g(further)e (executions)j(of)f(this)g(rule)f(fail)150 1285 y(\(un)m(til)31 b(the)g(next)f(time)h(that)g Fz(nextfile)d FB(is)j(called\).)275 1424 y(If)h Fz(FNR)g FB(is)h(not)g(one,)h(then)f(w)m(e)g(are)h(still)g (in)e(the)h(original)h(data)g(\014le)f(and)g(the)g(program)f(executes)j (a)150 1534 y Fz(next)29 b FB(statemen)m(t)j(to)g(skip)d(through)h(it.) 275 1672 y(An)g(imp)s(ortan)m(t)g(question)h(to)h(ask)e(at)i(this)e(p)s (oin)m(t)h(is:)41 b(giv)m(en)31 b(that)h(the)e(functionalit)m(y)i(of)f Fz(nextfile)150 1782 y FB(can)22 b(b)s(e)f(pro)m(vided)h(with)g(a)g (library)f(\014le,)j(wh)m(y)e(is)g(it)g(built)g(in)m(to)h Fz(gawk)p FB(?)36 b(Adding)21 b(features)h(for)g(little)i(reason)150 1892 y(leads)33 b(to)h(larger,)g(slo)m(w)m(er)g(programs)f(that)g(are)g (harder)f(to)i(main)m(tain.)48 b(The)33 b(answ)m(er)g(is)f(that)i (building)150 2001 y Fz(nextfile)39 b FB(in)m(to)k Fz(gawk)d FB(pro)m(vides)i(signi\014can)m(t)g(gains)g(in)f(e\016ciency)-8 b(.)76 b(If)41 b(the)g Fz(nextfile)f FB(function)h(is)150 2111 y(executed)32 b(at)h(the)e(b)s(eginning)g(of)h(a)g(large)g(data)h (\014le,)f Fz(awk)e FB(still)j(has)e(to)h(scan)g(the)g(en)m(tire)g (\014le,)g(splitting)150 2220 y(it)41 b(up)e(in)m(to)i(records,)i(just) d(to)h(skip)f(o)m(v)m(er)i(it.)71 b(The)40 b(built-in)g Fz(nextfile)e FB(can)j(simply)f(close)h(the)g(\014le)150 2330 y(immediately)c(and)e(pro)s(ceed)h(to)h(the)f(next)g(one,)h(whic)m (h)f(sa)m(v)m(es)h(a)g(lot)f(of)h(time.)57 b(This)35 b(is)h(particularly)150 2440 y(imp)s(ortan)m(t)30 b(in)f Fz(awk)p FB(,)g(b)s(ecause)h Fz(awk)e FB(programs)h(are)h(generally)h (I/O-b)s(ound)d(\(i.e.,)j(they)f(sp)s(end)e(most)i(of)150 2549 y(their)g(time)h(doing)g(input)e(and)h(output,)g(instead)h(of)g(p) s(erforming)e(computations\).)150 2753 y Fj(12.2.2)63 b(Con)m(v)m(erting)41 b(Strings)h(T)-10 b(o)41 b(Num)m(b)s(ers)150 2900 y FB(The)34 b Fz(strtonum)f FB(function)h(\(see)i(Section)f(8.1.3) i([String-Manipulation)e(F)-8 b(unctions],)37 b(page)e(129\))i(is)e(a) 150 3009 y Fz(gawk)h FB(extension.)61 b(The)36 b(follo)m(wing)j (function)d(pro)m(vides)h(an)g(implemen)m(tation)i(for)d(other)i(v)m (ersions)f(of)150 3119 y Fz(awk)p FB(:)390 3258 y Fz(#)47 b(strtonum)f(---)h(convert)f(string)g(to)h(number)390 3477 y(function)f(mystrtonum\(str,)377 b(ret,)47 b(chars,)f(n,)h(i,)g (k,)h(c\))390 3587 y({)581 3696 y(if)f(\(str)g(~)g(/^0[0-7]*$/\))e({) 772 3806 y(#)i(octal)772 3915 y(n)g(=)h(length\(str\))772 4025 y(ret)f(=)g(0)772 4134 y(for)g(\(i)g(=)g(1;)h(i)f(<=)g(n;)g(i++\)) g({)963 4244 y(c)g(=)h(substr\(str,)c(i,)k(1\))963 4354 y(if)f(\(\(k)g(=)g(index\("01234567",)c(c\)\))k(>)h(0\))1154 4463 y(k--)f(#)g(adjust)f(for)h(1-basing)f(in)h(awk)963 4682 y(ret)g(=)g(ret)g(*)g(8)h(+)f(k)772 4792 y(})581 4902 y(})g(else)g(if)g(\(str)g(~)g(/^0[xX][0-9a-fA-f]+/\))42 b({)772 5011 y(#)47 b(hexadecimal)772 5121 y(str)g(=)g(substr\(str,)e (3\))190 b(#)48 b(lop)f(off)g(leading)e(0x)772 5230 y(n)i(=)h (length\(str\))772 5340 y(ret)f(=)g(0)p eop end %%Page: 185 197 TeXDict begin 185 196 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(185)772 299 y Fz(for)47 b(\(i)g(=)g(1;)h(i)f(<=)g(n;)g(i++\))g({) 963 408 y(c)g(=)h(substr\(str,)c(i,)k(1\))963 518 y(c)f(=)h (tolower\(c\))963 628 y(if)f(\(\(k)g(=)g(index\("0123456789",)c(c\)\))k (>)g(0\))1154 737 y(k--)g(#)g(adjust)f(for)h(1-basing)f(in)h(awk)963 847 y(else)f(if)i(\(\(k)e(=)i(index\("abcdef",)c(c\)\))i(>)i(0\))1154 956 y(k)f(+=)g(9)963 1176 y(ret)g(=)g(ret)g(*)g(16)h(+)f(k)772 1285 y(})581 1395 y(})g(else)g(if)g(\(str)g(~)g (/^[-+]?\([0-9]+\([.][0-9]*\()o([Ee])o([0-9)o(]+\))o(?\)?|)o(\([.])o ([0-)o(9]+\()o([Ee])o([-+)o(]?[0)o(-9])o(+\)?\))o(\)$/\))41 b({)772 1504 y(#)47 b(decimal)f(number,)g(possibly)f(floating)h(point) 772 1614 y(ret)h(=)g(str)g(+)h(0)581 1724 y(})f(else)772 1833 y(ret)g(=)g("NOT-A-NUMBER")581 2052 y(return)f(ret)390 2162 y(})390 2381 y(#)h(BEGIN)g({)238 b(#)48 b(gawk)e(test)h(harness) 390 2491 y(#)238 b(a[1])47 b(=)g("25")390 2600 y(#)238 b(a[2])47 b(=)g(".31")390 2710 y(#)238 b(a[3])47 b(=)g("0123")390 2819 y(#)238 b(a[4])47 b(=)g("0xdeadBEEF")390 2929 y(#)238 b(a[5])47 b(=)g("123.45")390 3039 y(#)238 b(a[6])47 b(=)g("1.e3")390 3148 y(#)238 b(a[7])47 b(=)g("1.32")390 3258 y(#)238 b(a[7])47 b(=)g("1.32E2")390 3367 y(#)390 3477 y(#)238 b(for)47 b(\(i)g(=)h(1;)f(i)h(in)f(a;)g(i++\))390 3587 y(#)429 b(print)47 b(a[i],)f(strtonum\(a[i]\),)e(mystrtonum\(a[i]\))390 3696 y(#)j(})275 3836 y FB(The)25 b(function)i(\014rst)e(lo)s(oks)i (for)f(C-st)m(yle)i(o)s(ctal)g(n)m(um)m(b)s(ers)d(\(base)h(8\).)41 b(If)26 b(the)g(input)g(string)g(matc)m(hes)i(a)150 3946 y(regular)d(expression)f(describing)g(o)s(ctal)i(n)m(um)m(b)s(ers,)e (then)g Fz(mystrtonum)e FB(lo)s(ops)i(through)g(eac)m(h)h(c)m(haracter) 150 4055 y(in)37 b(the)h(string.)62 b(It)38 b(sets)g Fz(k)f FB(to)h(the)g(index)f(in)h Fz("01234567")c FB(of)k(the)g(curren) m(t)f(o)s(ctal)i(digit.)63 b(Since)38 b(the)150 4165 y(return)f(v)-5 b(alue)38 b(is)g(one-based,)i(the)e(`)p Fz(k--)p FB(')f(adjusts)g Fz(k)g FB(so)h(it)h(can)f(b)s(e)f(used)g(in)g (computing)h(the)g(return)150 4274 y(v)-5 b(alue.)275 4414 y(Similar)25 b(logic)j(applies)e(to)g(the)g(co)s(de)g(that)g(c)m (hec)m(ks)h(for)f(and)f(con)m(v)m(erts)i(a)f(hexadecimal)h(v)-5 b(alue,)27 b(whic)m(h)150 4524 y(starts)42 b(with)f(`)p Fz(0x)p FB(')g(or)h(`)p Fz(0X)p FB('.)74 b(The)41 b(use)g(of)h Fz(tolower)d FB(simpli\014es)i(the)h(computation)g(for)g(\014nding)e (the)150 4634 y(correct)32 b(n)m(umeric)e(v)-5 b(alue)31 b(for)f(eac)m(h)h(hexadecimal)h(digit.)275 4773 y(Finally)-8 b(,)27 b(if)d(the)h(string)g(matc)m(hes)g(the)g(\(rather)g (complicated\))i(regex)e(for)f(a)h(regular)g(decimal)h(in)m(teger)150 4883 y(or)38 b(\015oating-p)s(oin)m(t)h(n)m(umer,)f(the)g(computation)h (`)p Fz(ret)30 b(=)g(str)f(+)h(0)p FB(')38 b(lets)g Fz(awk)f FB(con)m(v)m(ert)i(the)f(v)-5 b(alue)38 b(to)h(a)150 4993 y(n)m(um)m(b)s(er.)275 5133 y(A)25 b(commen)m(ted-out)i(test)g (program)e(is)h(included,)g(so)g(that)g(the)f(function)h(can)g(b)s(e)e (tested)j(with)e Fz(gawk)150 5242 y FB(and)30 b(the)g(results)g (compared)h(to)g(the)g(built-in)f Fz(strtonum)e FB(function.)p eop end %%Page: 186 198 TeXDict begin 186 197 bop 150 -116 a FB(186)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fj(12.2.3)63 b(Assertions)150 446 y FB(When)25 b(writing)g(large)i(programs,)f(it)g(is)f(often)h(useful)e(to)i(kno)m (w)g(that)f(a)h(condition)g(or)f(set)h(of)f(conditions)150 555 y(is)f(true.)38 b(Before)24 b(pro)s(ceeding)g(with)f(a)h (particular)g(computation,)i(y)m(ou)e(mak)m(e)g(a)g(statemen)m(t)i(ab)s (out)d(what)150 665 y(y)m(ou)37 b(b)s(eliev)m(e)h(to)f(b)s(e)f(the)h (case.)61 b(Suc)m(h)36 b(a)h(statemen)m(t)i(is)e(kno)m(wn)f(as)h(an)g Fx(assertion)p FB(.)60 b(The)36 b(C)h(language)150 775 y(pro)m(vides)28 b(an)g Fz(<assert.h>)e FB(header)i(\014le)g(and)g (corresp)s(onding)f Fz(assert)g FB(macro)i(that)g(the)f(programmer)150 884 y(can)41 b(use)f(to)h(mak)m(e)g(assertions.)71 b(If)40 b(an)g(assertion)h(fails,)j(the)c Fz(assert)f FB(macro)i(arranges)g(to) g(prin)m(t)f(a)150 994 y(diagnostic)c(message)g(describing)f(the)g (condition)g(that)g(should)f(ha)m(v)m(e)i(b)s(een)e(true)h(but)f(w)m (as)h(not,)i(and)150 1103 y(then)30 b(it)h(kills)g(the)f(program.)41 b(In)30 b(C,)g(using)g Fz(assert)e FB(lo)s(oks)j(this:)390 1239 y Fz(#include)46 b(<assert.h>)390 1458 y(int)h(myfunc\(int)e(a,)i (double)f(b\))390 1568 y({)629 1677 y(assert\(a)f(<=)i(5)h(&&)f(b)g(>=) h(17.1\);)629 1787 y(...)390 1896 y(})275 2032 y FB(If)29 b(the)i(assertion)g(fails,)g(the)g(program)f(prin)m(ts)g(a)h(message)g (similar)g(to)g(this:)390 2168 y Fz(prog.c:5:)45 b(assertion)h(failed:) f(a)j(<=)f(5)g(&&)h(b)f(>=)g(17.1)275 2303 y FB(The)30 b(C)g(language)i(mak)m(es)f(it)g(p)s(ossible)f(to)h(turn)f(the)g (condition)i(in)m(to)f(a)g(string)f(for)h(use)f(in)g(prin)m(ting)150 2413 y(the)g(diagnostic)h(message.)42 b(This)28 b(is)i(not)g(p)s (ossible)f(in)h Fz(awk)p FB(,)f(so)h(this)f Fz(assert)f FB(function)i(also)g(requires)g(a)150 2522 y(string)g(v)m(ersion)h(of)g (the)f(condition)h(that)g(is)g(b)s(eing)f(tested.)41 b(F)-8 b(ollo)m(wing)33 b(is)d(the)h(function:)390 2658 y Fz(#)47 b(assert)g(---)f(assert)h(that)f(a)i(condition)d(is)i(true.)f (Otherwise)g(exit.)390 2877 y(function)g(assert\(condition,)d(string\)) 390 2987 y({)581 3096 y(if)k(\(!)g(condition\))e({)772 3206 y(printf\("\045s:\045d:)f(assertion)h(failed:)h(\045s\\n",)963 3315 y(FILENAME,)f(FNR,)i(string\))e(>)j("/dev/stderr")772 3425 y(_assert_exit)c(=)k(1)772 3535 y(exit)e(1)581 3644 y(})390 3754 y(})390 3973 y(END)h({)581 4083 y(if)g(\(_assert_exit\)) 772 4192 y(exit)f(1)390 4302 y(})275 4437 y FB(The)33 b Fz(assert)g FB(function)h(tests)h(the)g Fz(condition)d FB(parameter.)53 b(If)34 b(it)h(is)g(false,)h(it)f(prin)m(ts)f(a)h (message)150 4547 y(to)28 b(standard)f(error,)h(using)f(the)h Fz(string)e FB(parameter)i(to)g(describ)s(e)f(the)h(failed)g (condition.)41 b(It)27 b(then)h(sets)150 4656 y(the)34 b(v)-5 b(ariable)35 b Fz(_assert_exit)30 b FB(to)35 b(one)f(and)f (executes)i(the)f Fz(exit)e FB(statemen)m(t.)53 b(The)33 b Fz(exit)g FB(statemen)m(t)150 4766 y(jumps)25 b(to)j(the)f Fz(END)f FB(rule.)39 b(If)27 b(the)g Fz(END)f FB(rules)g(\014nds)g Fz(_assert_exit)d FB(to)28 b(b)s(e)e(true,)i(it)f(exits)h(immediately) -8 b(.)275 4902 y(The)37 b(purp)s(ose)g(of)h(the)g(test)h(in)f(the)h Fz(END)e FB(rule)h(is)g(to)h(k)m(eep)g(an)m(y)f(other)h Fz(END)e FB(rules)h(from)f(running.)150 5011 y(When)f(an)g(assertion)h (fails,)h(the)f(program)f(should)f(exit)i(immediately)-8 b(.)60 b(If)36 b(no)g(assertions)h(fail,)h(then)150 5121 y Fz(_assert_exit)24 b FB(is)j(still)h(false)g(when)e(the)i Fz(END)e FB(rule)h(is)g(run)f(normally)-8 b(,)29 b(and)d(the)i(rest)f (of)h(the)f(program's)150 5230 y Fz(END)32 b FB(rules)h(execute.)51 b(F)-8 b(or)34 b(all)g(of)g(this)f(to)h(w)m(ork)f(correctly)-8 b(,)36 b(`)p Fz(assert.awk)p FB(')31 b(m)m(ust)i(b)s(e)g(the)g(\014rst) g(source)150 5340 y(\014le)d(read)h(b)m(y)f Fz(awk)p FB(.)40 b(The)30 b(function)g(can)g(b)s(e)g(used)g(in)g(a)h(program)f (in)g(the)g(follo)m(wing)i(w)m(a)m(y:)p eop end %%Page: 187 199 TeXDict begin 187 198 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(187)390 299 y Fz(function)46 b(myfunc\(a,)f(b\))390 408 y({)629 518 y(assert\(a)g(<=)i(5)h(&&)f(b)g(>=)h(17.1,)e("a)h(<=)g (5)h(&&)f(b)g(>=)h(17.1"\))629 628 y(...)390 737 y(})150 867 y FB(If)30 b(the)g(assertion)i(fails,)f(y)m(ou)f(see)h(a)g(message) h(similar)e(to)h(the)g(follo)m(wing:)390 997 y Fz(mydata:1357:)44 b(assertion)i(failed:)g(a)h(<=)g(5)h(&&)f(b)g(>=)g(17.1)275 1127 y FB(There)40 b(is)h(a)g(small)g(problem)f(with)h(this)f(v)m (ersion)h(of)g Fz(assert)p FB(.)71 b(An)40 b Fz(END)g FB(rule)g(is)h(automatically)150 1236 y(added)28 b(to)i(the)f(program)g (calling)h Fz(assert)p FB(.)39 b(Normally)-8 b(,)31 b(if)e(a)g(program) g(consists)g(of)h(just)e(a)h Fz(BEGIN)f FB(rule,)150 1346 y(the)i(input)e(\014les)h(and/or)h(standard)e(input)g(are)i(not)g (read.)40 b(Ho)m(w)m(ev)m(er,)32 b(no)m(w)d(that)h(the)g(program)f(has) g(an)150 1456 y Fz(END)34 b FB(rule,)i Fz(awk)e FB(attempts)i(to)f (read)g(the)g(input)f(data)h(\014les)g(or)g(standard)f(input)g(\(see)i (Section)f(6.1.4.1)150 1565 y([Startup)j(and)g(Clean)m(up)g(Actions],) 43 b(page)c(96\),)j(most)d(lik)m(ely)h(causing)f(the)g(program)g(to)g (hang)g(as)f(it)150 1675 y(w)m(aits)31 b(for)f(input.)275 1805 y(There)36 b(is)h(a)g(simple)g(w)m(ork)-5 b(around)36 b(to)h(this:)54 b(mak)m(e)38 b(sure)e(the)h Fz(BEGIN)e FB(rule)i(alw)m(a)m(ys)h(ends)e(with)h(an)150 1914 y Fz(exit)29 b FB(statemen)m(t.)150 2104 y Fj(12.2.4)63 b(Rounding)42 b(Num)m(b)s(ers)150 2251 y FB(The)27 b(w)m(a)m(y)h Fz(printf)d FB(and)i Fz(sprintf)e FB(\(see)j(Section)g(4.5)h([Using)e Fz(printf)f FB(Statemen)m(ts)i(for)f(F)-8 b(ancier)29 b(Prin)m(t-)150 2361 y(ing],)38 b(page)e(60\))h(p)s(erform)d(rounding)h (often)h(dep)s(ends)e(up)s(on)g(the)i(system's)g(C)f Fz(sprintf)f FB(subroutine.)150 2470 y(On)28 b(man)m(y)h(mac)m(hines,)h Fz(sprintf)d FB(rounding)g(is)i(\\un)m(biased,")h(whic)m(h)e(means)h (it)g(do)s(esn't)g(alw)m(a)m(ys)h(round)150 2580 y(a)40 b(trailing)h(`)p Fz(.5)p FB(')e(up,)i(con)m(trary)g(to)f(naiv)m(e)h (exp)s(ectations.)70 b(In)39 b(un)m(biased)g(rounding,)i(`)p Fz(.5)p FB(')e(rounds)f(to)150 2690 y(ev)m(en,)29 b(rather)e(than)h (alw)m(a)m(ys)h(up,)e(so)h(1.5)h(rounds)d(to)i(2)g(but)f(4.5)h(rounds)e (to)j(4.)40 b(This)26 b(means)i(that)g(if)g(y)m(ou)150 2799 y(are)33 b(using)g(a)g(format)g(that)h(do)s(es)f(rounding)e (\(e.g.,)36 b Fz("\045.0f")p FB(\),)c(y)m(ou)i(should)e(c)m(hec)m(k)i (what)f(y)m(our)g(system)150 2909 y(do)s(es.)65 b(The)38 b(follo)m(wing)h(function)g(do)s(es)f(traditional)h(rounding;)j(it)d (migh)m(t)g(b)s(e)f(useful)g(if)g(y)m(our)g(a)m(wk's)150 3018 y Fz(printf)29 b FB(do)s(es)h(un)m(biased)f(rounding:)390 3148 y Fz(#)47 b(round.awk)f(---)h(do)g(normal)f(rounding)390 3367 y(function)g(round\(x,)141 b(ival,)46 b(aval,)g(fraction\))390 3477 y({)533 3587 y(ival)h(=)g(int\(x\))190 b(#)47 b(integer)f(part,)g (int\(\))h(truncates)533 3806 y(#)h(see)f(if)g(fractional)e(part)533 3915 y(if)i(\(ival)g(==)g(x\))143 b(#)47 b(no)g(fraction)676 4025 y(return)f(x)533 4244 y(if)h(\(x)h(<)f(0\))g({)676 4354 y(aval)g(=)g(-x)239 b(#)47 b(absolute)f(value)676 4463 y(ival)h(=)g(int\(aval\))676 4573 y(fraction)f(=)h(aval)g(-)g (ival)676 4682 y(if)h(\(fraction)d(>=)i(.5\))820 4792 y(return)f(int\(x\))g(-)h(1)143 b(#)48 b(-2.5)e(-->)h(-3)676 4902 y(else)820 5011 y(return)f(int\(x\))332 b(#)48 b(-2.3)e(-->)h(-2) 533 5121 y(})h(else)e({)676 5230 y(fraction)g(=)h(x)h(-)f(ival)676 5340 y(if)h(\(fraction)d(>=)i(.5\))p eop end %%Page: 188 200 TeXDict begin 188 199 bop 150 -116 a FB(188)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)820 299 y Fz(return)46 b(ival)g(+)i(1)676 408 y(else)820 518 y(return)e(ival)533 628 y(})390 737 y(})390 956 y(#)h(test)g (harness)390 1066 y({)g(print)g($0,)g(round\($0\))e(})150 1265 y Fj(12.2.5)63 b(The)41 b(Cli\013)g(Random)g(Num)m(b)s(er)g (Generator)150 1412 y FB(The)22 b(Cli\013)h(random)f(n)m(um)m(b)s(er)g (generator)1544 1379 y Fo(4)1605 1412 y FB(is)h(a)g(v)m(ery)g(simple)g (random)f(n)m(um)m(b)s(er)f(generator)j(that)g(\\passes)150 1521 y(the)29 b(noise)g(sphere)f(test)h(for)g(randomness)e(b)m(y)i(sho) m(wing)g(no)f(structure.")40 b(It)29 b(is)g(easily)h(programmed,)e(in) 150 1631 y(less)j(than)f(10)h(lines)g(of)f Fz(awk)g FB(co)s(de:)390 1765 y Fz(#)47 b(cliff_rand.awk)d(---)j(generate)f(Cliff)g(random)g (numbers)390 1984 y(BEGIN)g({)i(_cliff_seed)d(=)i(0.1)g(})390 2203 y(function)f(cliff_rand\(\))390 2313 y({)581 2423 y(_cliff_seed)f(=)i(\(100)g(*)g(log\(_cliff_seed\)\))c(\045)48 b(1)581 2532 y(if)f(\(_cliff_seed)e(<)i(0\))772 2642 y(_cliff_seed)e(=)i(-)g(_cliff_seed)581 2751 y(return)f(_cliff_seed)390 2861 y(})275 2995 y FB(This)33 b(algorithm)j(requires)e(an)h(initial)h (\\seed")f(of)g(0.1.)55 b(Eac)m(h)35 b(new)f(v)-5 b(alue)35 b(uses)g(the)f(curren)m(t)h(seed)150 3105 y(as)29 b(input)e(for)h(the)h (calculation.)42 b(If)28 b(the)h(built-in)f Fz(rand)g FB(function)g(\(see)h(Section)h(8.1.2)g([Numeric)f(F)-8 b(unc-)150 3214 y(tions],)31 b(page)g(127\))h(isn't)f(random)e(enough,) i(y)m(ou)g(migh)m(t)g(try)f(using)g(this)g(function)g(instead.)150 3413 y Fj(12.2.6)63 b(T)-10 b(ranslating)42 b(Bet)m(w)m(een)d (Characters)h(and)h(Num)m(b)s(ers)150 3560 y FB(One)g(commercial)i (implemen)m(tation)h(of)d Fz(awk)g FB(supplies)g(a)h(built-in)f (function,)j Fz(ord)p FB(,)g(whic)m(h)e(tak)m(es)h(a)150 3670 y(c)m(haracter)34 b(and)e(returns)f(the)i(n)m(umeric)f(v)-5 b(alue)33 b(for)g(that)g(c)m(haracter)h(in)e(the)h(mac)m(hine's)g(c)m (haracter)h(set.)150 3779 y(If)c(the)g(string)h(passed)f(to)h Fz(ord)e FB(has)h(more)h(than)f(one)h(c)m(haracter,)h(only)e(the)h (\014rst)f(one)g(is)h(used.)275 3913 y(The)24 b(in)m(v)m(erse)i(of)f (this)g(function)f(is)h Fz(chr)f FB(\(from)h(the)g(function)g(of)g(the) g(same)g(name)g(in)g(P)m(ascal\),)j(whic)m(h)150 4023 y(tak)m(es)35 b(a)e(n)m(um)m(b)s(er)f(and)g(returns)g(the)i(corresp)s (onding)e(c)m(haracter.)50 b(Both)34 b(functions)f(are)g(written)h(v)m (ery)150 4133 y(nicely)d(in)f Fz(awk)p FB(;)g(there)g(is)h(no)f(real)h (reason)g(to)g(build)e(them)i(in)m(to)g(the)f Fz(awk)g FB(in)m(terpreter:)390 4267 y Fz(#)47 b(ord.awk)f(---)h(do)g(ord)g(and) g(chr)390 4486 y(#)g(Global)g(identifiers:)390 4596 y(#)191 b(_ord_:)380 b(numerical)45 b(values)h(indexed)g(by)h(characters)390 4705 y(#)191 b(_ord_init:)d(function)45 b(to)j(initialize)d(_ord_)390 4924 y(BEGIN)190 b({)47 b(_ord_init\(\))e(})390 5144 y(function)h(_ord_init\()188 b(low,)46 b(high,)h(i,)g(t\))p 150 5241 1200 4 v 199 5308 a Fo(4)275 5340 y Fm (http://mathworld.wolfram.com/Cl)q(iffRa)q(ndom)q(Numb)q(erGen)q(erat)q (or.hm)q(tl)p eop end %%Page: 189 201 TeXDict begin 189 200 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(189)390 299 y Fz({)581 408 y(low)47 b(=)g(sprintf\("\045c",)d(7\)) k(#)f(BEL)g(is)g(ascii)g(7)581 518 y(if)g(\(low)g(==)g("\\a"\))f({)191 b(#)47 b(regular)f(ascii)772 628 y(low)h(=)g(0)772 737 y(high)f(=)i(127)581 847 y(})f(else)g(if)g(\(sprintf\("\045c",)d(128)j (+)g(7\))h(==)f("\\a"\))f({)772 956 y(#)h(ascii,)f(mark)h(parity)772 1066 y(low)g(=)g(128)772 1176 y(high)f(=)i(255)581 1285 y(})f(else)g({)382 b(#)47 b(ebcdic\(!\))772 1395 y(low)g(=)g(0)772 1504 y(high)f(=)i(255)581 1614 y(})581 1833 y(for)f(\(i)g(=)g(low;)g(i) h(<=)f(high;)f(i++\))h({)772 1943 y(t)g(=)h(sprintf\("\045c",)c(i\))772 2052 y(_ord_[t])h(=)j(i)581 2162 y(})390 2271 y(})275 2413 y FB(Some)c(explanation)i(of)e(the)h(n)m(um)m(b)s(ers)e(used)h(b)m (y)g Fz(chr)g FB(is)h(w)m(orth)m(while.)83 b(The)44 b(most)h(prominen)m (t)150 2523 y(c)m(haracter)38 b(set)f(in)f(use)h(to)s(da)m(y)g(is)f (ASCI)s(I.)f(Although)i(an)f(8-bit)i(b)m(yte)f(can)g(hold)f(256)i (distinct)f(v)-5 b(alues)150 2632 y(\(from)23 b(0)g(to)g(255\),)k(ASCI) s(I)21 b(only)i(de\014nes)f(c)m(haracters)i(that)f(use)g(the)g(v)-5 b(alues)23 b(from)f(0)i(to)f(127.)3259 2600 y Fo(5)3336 2632 y FB(In)f(the)h(no)m(w)150 2742 y(distan)m(t)36 b(past,)h(at)f(least)g(one)f(minicomputer)g(man)m(ufacturer)g(used)g (ASCI)s(I,)e(but)i(with)g(mark)g(parit)m(y)-8 b(,)150 2852 y(meaning)34 b(that)f(the)h(leftmost)g(bit)g(in)f(the)g(b)m(yte)h (is)f(alw)m(a)m(ys)i(1.)50 b(This)33 b(means)g(that)h(on)f(those)h (systems,)150 2961 y(c)m(haracters)f(ha)m(v)m(e)h(n)m(umeric)d(v)-5 b(alues)33 b(from)e(128)i(to)g(255.)46 b(Finally)-8 b(,)34 b(large)f(mainframe)f(systems)g(use)g(the)150 3071 y(EBCDIC)i(c)m (haracter)h(set,)h(whic)m(h)d(uses)g(all)i(256)g(v)-5 b(alues.)52 b(While)34 b(there)g(are)h(other)f(c)m(haracter)h(sets)f (in)150 3180 y(use)c(on)g(some)h(older)g(systems,)f(they)h(are)g(not)f (really)h(w)m(orth)g(w)m(orrying)f(ab)s(out:)390 3322 y Fz(function)46 b(ord\(str,)188 b(c\))390 3432 y({)581 3541 y(#)47 b(only)g(first)f(character)g(is)h(of)g(interest)581 3651 y(c)g(=)h(substr\(str,)d(1,)i(1\))581 3761 y(return)f(_ord_[c])390 3870 y(})390 4089 y(function)g(chr\(c\))390 4199 y({)581 4309 y(#)h(force)g(c)g(to)g(be)h(numeric)d(by)j(adding)e(0)581 4418 y(return)g(sprintf\("\045c",)e(c)k(+)f(0\))390 4528 y(})390 4747 y(####)g(test)f(code)h(####)390 4857 y(#)g(BEGIN)190 b(\\)390 4966 y(#)47 b({)p 150 5066 1200 4 v 199 5134 a Fo(5)275 5166 y Fn(ASCI)r(I)36 b(has)h(b)r(een)g(extended)e(in)i(man) n(y)g(coun)n(tries)g(to)g(use)g(the)g(v)l(alues)g(from)h(128)g(to)f (255)h(for)g(coun)n(try-sp)r(eci\014c)275 5253 y(c)n(haracters.)k(If)29 b(y)n(our)e(system)i(uses)f(these)g(extensions,)i(y)n(ou)d(can)h (simplify)i Fm(_ord_init)g Fn(to)e(simply)g(lo)r(op)h(from)g(0)g(to)275 5340 y(255.)p eop end %%Page: 190 202 TeXDict begin 190 201 bop 150 -116 a FB(190)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(#)191 b(for)47 b(\(;;\))f({)390 408 y(#)382 b(printf\("enter)44 b(a)j(character:)e("\))390 518 y(#)382 b(if)47 b(\(getline)e(var)i(<=)g(0\))390 628 y(#)572 b(break)390 737 y(#)382 b(printf\("ord\(\045s\))43 b(=)48 b(\045d\\n",)e(var,)g(ord\(var\)\))390 847 y(#)191 b(})390 956 y(#)47 b(})275 1083 y FB(An)26 b(ob)m(vious)i(impro)m(v)m(emen)m(t) h(to)f(these)g(functions)f(is)g(to)h(mo)m(v)m(e)h(the)e(co)s(de)h(for)f (the)h Fz(_ord_init)d FB(func-)150 1193 y(tion)d(in)m(to)g(the)f(b)s(o) s(dy)f(of)h(the)g Fz(BEGIN)f FB(rule.)37 b(It)21 b(w)m(as)h(written)f (this)g(w)m(a)m(y)h(initially)h(for)e(ease)h(of)f(dev)m(elopmen)m(t.) 150 1302 y(There)35 b(is)h(a)g(\\test)h(program")e(in)h(a)g Fz(BEGIN)e FB(rule,)j(to)f(test)h(the)e(function.)56 b(It)36 b(is)g(commen)m(ted)g(out)g(for)150 1412 y(pro)s(duction)29 b(use.)150 1596 y Fj(12.2.7)63 b(Merging)42 b(an)f(Arra)m(y)f(in)m(to)h (a)f(String)150 1743 y FB(When)28 b(doing)g(string)g(pro)s(cessing,)h (it)f(is)g(often)h(useful)e(to)i(b)s(e)e(able)i(to)g(join)f(all)h(the)f (strings)g(in)f(an)h(arra)m(y)150 1852 y(in)m(to)33 b(one)f(long)h (string.)46 b(The)31 b(follo)m(wing)j(function,)e Fz(join)p FB(,)g(accomplishes)h(this)f(task.)46 b(It)33 b(is)f(used)f(later)150 1962 y(in)26 b(sev)m(eral)i(of)f(the)g(application)h(programs)f(\(see)g (Chapter)f(13)i([Practical)h Fz(awk)d FB(Programs],)i(page)f(210\).)275 2089 y(Go)s(o)s(d)k(function)g(design)h(is)g(imp)s(ortan)m(t;)h(this)e (function)h(needs)f(to)h(b)s(e)f(general)i(but)e(it)h(should)f(also)150 2198 y(ha)m(v)m(e)h(a)g(reasonable)f(default)h(b)s(eha)m(vior.)42 b(It)31 b(is)g(called)i(with)d(an)h(arra)m(y)h(as)f(w)m(ell)h(as)f(the) g(b)s(eginning)g(and)150 2308 y(ending)40 b(indices)g(of)h(the)f (elemen)m(ts)i(in)e(the)g(arra)m(y)h(to)g(b)s(e)f(merged.)71 b(This)39 b(assumes)h(that)h(the)f(arra)m(y)150 2417 y(indices)26 b(are)g(n)m(umeric|a)g(reasonable)h(assumption)e(since)h (the)g(arra)m(y)g(w)m(as)h(lik)m(ely)g(created)g(with)e Fz(split)150 2527 y FB(\(see)31 b(Section)h(8.1.3)g ([String-Manipulation)f(F)-8 b(unctions],)31 b(page)h(129\):)390 2654 y Fz(#)47 b(join.awk)f(---)h(join)g(an)g(array)f(into)h(a)g (string)390 2873 y(function)f(join\(array,)e(start,)i(end,)h(sep,)190 b(result,)46 b(i\))390 2982 y({)581 3092 y(if)h(\(sep)g(==)g(""\))724 3202 y(sep)g(=)g(")h(")581 3311 y(else)f(if)g(\(sep)f(==)i(SUBSEP\))d (#)j(magic)e(value)724 3421 y(sep)h(=)g("")581 3530 y(result)f(=)h (array[start])581 3640 y(for)g(\(i)g(=)g(start)g(+)g(1;)g(i)h(<=)f (end;)g(i++\))772 3750 y(result)f(=)h(result)f(sep)h(array[i])581 3859 y(return)f(result)390 3969 y(})275 4096 y FB(An)33 b(optional)j(additional)f(argumen)m(t)g(is)f(the)g(separator)h(to)g (use)f(when)f(joining)i(the)f(strings)g(bac)m(k)150 4205 y(together.)49 b(If)32 b(the)h(caller)h(supplies)e(a)h(nonempt)m(y)g(v) -5 b(alue,)34 b Fz(join)d FB(uses)h(it;)j(if)e(it)g(is)g(not)g (supplied,)f(it)h(has)150 4315 y(a)d(n)m(ull)g(v)-5 b(alue.)41 b(In)30 b(this)g(case,)h Fz(join)e FB(uses)h(a)g(single)h(blank)e(as)i (a)f(default)g(separator)h(for)f(the)g(strings.)40 b(If)150 4424 y(the)32 b(v)-5 b(alue)32 b(is)f(equal)i(to)f Fz(SUBSEP)p FB(,)e(then)i Fz(join)e FB(joins)h(the)h(strings)g(with)f(no)g (separator)i(b)s(et)m(w)m(een)f(them.)150 4534 y Fz(SUBSEP)h FB(serv)m(es)i(as)g(a)g(\\magic")i(v)-5 b(alue)35 b(to)h(indicate)f (that)h(there)f(should)e(b)s(e)h(no)h(separation)g(b)s(et)m(w)m(een)150 4643 y(the)c(comp)s(onen)m(t)f(strings.)1060 4610 y Fo(6)150 4827 y Fj(12.2.8)63 b(Managing)42 b(the)f(Time)g(of)h(Da)m(y)150 4974 y FB(The)31 b Fz(systime)e FB(and)i Fz(strftime)e FB(functions)i(describ)s(ed)f(in)h(Section)i(8.1.5)g([Using)f Fz(gawk)p FB('s)e(Timestamp)150 5084 y(F)-8 b(unctions],)45 b(page)c(142,)k(pro)m(vide)d(the)f(minim)m(um)f(functionalit)m(y)i (necessary)g(for)e(dealing)i(with)f(the)p 150 5154 1200 4 v 199 5221 a Fo(6)275 5253 y Fn(It)26 b(w)n(ould)i(b)r(e)f(nice)g(if) h Fm(awk)g Fn(had)e(an)i(assignmen)n(t)g(op)r(erator)g(for)g (concatenation.)40 b(The)27 b(lac)n(k)g(of)h(an)f(explicit)h(op)r (erator)275 5340 y(for)e(concatenation)h(mak)n(es)f(string)g(op)r (erations)h(more)f(di\016cult)f(than)h(they)e(really)j(need)e(to)h(b)r (e.)p eop end %%Page: 191 203 TeXDict begin 191 202 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(191)150 299 y(time)31 b(of)f(da)m(y)g(in)g(h)m(uman)f(readable)i (form.)40 b(While)31 b Fz(strftime)d FB(is)i(extensiv)m(e,)i(the)e(con) m(trol)h(formats)g(are)150 408 y(not)g(necessarily)g(easy)g(to)g(remem) m(b)s(er)f(or)g(in)m(tuitiv)m(ely)i(ob)m(vious)f(when)f(reading)g(a)h (program.)275 573 y(The)d(follo)m(wing)j(function,)e Fz(gettimeofday)p FB(,)d(p)s(opulates)j(a)g(user-supplied)f(arra)m(y)h (with)g(preformat-)150 682 y(ted)i(time)h(information.)42 b(It)31 b(returns)f(a)h(string)g(with)f(the)h(curren)m(t)g(time)h (formatted)f(in)g(the)g(same)g(w)m(a)m(y)150 792 y(as)g(the)f Fz(date)f FB(utilit)m(y:)390 956 y Fz(#)47 b(gettimeofday.awk)d(---)j (get)g(the)g(time)f(of)h(day)g(in)g(a)h(usable)e(format)390 1285 y(#)h(Returns)f(a)i(string)e(in)h(the)g(format)f(of)h(output)f(of) h(date\(1\))390 1395 y(#)g(Populates)f(the)h(array)f(argument)g(time)g (with)h(individual)e(values:)390 1504 y(#)191 b(time["second"])330 b(--)47 b(seconds)f(\(0)h(-)h(59\))390 1614 y(#)191 b(time["minute"]) 330 b(--)47 b(minutes)f(\(0)h(-)h(59\))390 1724 y(#)191 b(time["hour"])426 b(--)47 b(hours)f(\(0)i(-)f(23\))390 1833 y(#)191 b(time["althour"])282 b(--)47 b(hours)f(\(0)i(-)f(12\))390 1943 y(#)191 b(time["monthday"])234 b(--)47 b(day)g(of)g(month)g(\(1)g (-)g(31\))390 2052 y(#)191 b(time["month"])378 b(--)47 b(month)f(of)i(year)e(\(1)h(-)h(12\))390 2162 y(#)191 b(time["monthname"])186 b(--)47 b(name)g(of)g(the)g(month)390 2271 y(#)191 b(time["shortmonth"])138 b(--)47 b(short)f(name)h(of)g (the)g(month)390 2381 y(#)191 b(time["year"])426 b(--)47 b(year)g(modulo)f(100)h(\(0)g(-)g(99\))390 2491 y(#)191 b(time["fullyear"])234 b(--)47 b(full)g(year)390 2600 y(#)191 b(time["weekday"])282 b(--)47 b(day)g(of)g(week)g(\(Sunday)f(=) h(0\))390 2710 y(#)191 b(time["altweekday"])138 b(--)47 b(day)g(of)g(week)g(\(Monday)f(=)h(0\))390 2819 y(#)191 b(time["dayname"])282 b(--)47 b(name)g(of)g(weekday)390 2929 y(#)191 b(time["shortdayname"])42 b(--)47 b(short)f(name)h(of)g (weekday)390 3039 y(#)191 b(time["yearday"])282 b(--)47 b(day)g(of)g(year)g(\(0)g(-)g(365\))390 3148 y(#)191 b(time["timezone"])234 b(--)47 b(abbreviation)e(of)i(timezone)e(name) 390 3258 y(#)191 b(time["ampm"])426 b(--)47 b(AM)g(or)g(PM)h (designation)390 3367 y(#)191 b(time["weeknum"])282 b(--)47 b(week)g(number,)f(Sunday)g(first)g(day)390 3477 y(#)191 b(time["altweeknum"])138 b(--)47 b(week)g(number,)f(Monday)g(first)g (day)390 3696 y(function)g(gettimeofday\(time,)186 b(ret,)46 b(now,)h(i\))390 3806 y({)581 3915 y(#)g(get)g(time)g(once,)f(avoids)g (unnecessary)f(system)h(calls)581 4025 y(now)h(=)g(systime\(\))581 4244 y(#)g(return)f(date\(1\)-style)f(output)581 4354 y(ret)i(=)g(strftime\("\045a)e(\045b)i(\045d)g(\045H:\045M:\045S)f (\045Z)h(\045Y",)f(now\))581 4573 y(#)h(clear)g(out)g(target)f(array) 581 4682 y(delete)g(time)581 4902 y(#)h(fill)g(in)g(values,)f(force)g (numeric)g(values)g(to)h(be)581 5011 y(#)g(numeric)f(by)h(adding)f(0) 581 5121 y(time["second"])330 b(=)48 b(strftime\("\045S",)c(now\))i(+)i (0)581 5230 y(time["minute"])330 b(=)48 b(strftime\("\045M",)c(now\))i (+)i(0)581 5340 y(time["hour"])426 b(=)48 b(strftime\("\045H",)c(now\)) i(+)i(0)p eop end %%Page: 192 204 TeXDict begin 192 203 bop 150 -116 a FB(192)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)581 299 y Fz(time["althour"])282 b(=)48 b(strftime\("\045I",)c(now\))i(+)i (0)581 408 y(time["monthday"])234 b(=)48 b(strftime\("\045d",)c(now\))i (+)i(0)581 518 y(time["month"])378 b(=)48 b(strftime\("\045m",)c(now\)) i(+)i(0)581 628 y(time["monthname"])186 b(=)48 b(strftime\("\045B",)c (now\))581 737 y(time["shortmonth"])138 b(=)48 b(strftime\("\045b",)c (now\))581 847 y(time["year"])426 b(=)48 b(strftime\("\045y",)c(now\))i (+)i(0)581 956 y(time["fullyear"])234 b(=)48 b(strftime\("\045Y",)c (now\))i(+)i(0)581 1066 y(time["weekday"])282 b(=)48 b(strftime\("\045w",)c(now\))i(+)i(0)581 1176 y(time["altweekday"])138 b(=)48 b(strftime\("\045u",)c(now\))i(+)i(0)581 1285 y(time["dayname"])282 b(=)48 b(strftime\("\045A",)c(now\))581 1395 y(time["shortdayname"])e(=)48 b(strftime\("\045a",)c(now\))581 1504 y(time["yearday"])282 b(=)48 b(strftime\("\045j",)c(now\))i(+)i(0) 581 1614 y(time["timezone"])234 b(=)48 b(strftime\("\045Z",)c(now\))581 1724 y(time["ampm"])426 b(=)48 b(strftime\("\045p",)c(now\))581 1833 y(time["weeknum"])282 b(=)48 b(strftime\("\045U",)c(now\))i(+)i(0) 581 1943 y(time["altweeknum"])138 b(=)48 b(strftime\("\045W",)c(now\))i (+)i(0)581 2162 y(return)e(ret)390 2271 y(})275 2418 y FB(The)f(string)h(indices)f(are)i(easier)f(to)h(use)e(and)g(read)h (than)f(the)h(v)-5 b(arious)46 b(formats)g(required)f(b)m(y)150 2527 y Fz(strftime)p FB(.)69 b(The)40 b Fz(alarm)f FB(program)i(presen) m(ted)f(in)h(Section)g(13.3.2)i([An)d(Alarm)h(Clo)s(c)m(k)g(Program],) 150 2637 y(page)33 b(231,)h(uses)e(this)g(function.)46 b(A)32 b(more)g(general)h(design)f(for)g(the)h Fz(gettimeofday)28 b FB(function)k(w)m(ould)150 2746 y(ha)m(v)m(e)h(allo)m(w)m(ed)h(the)e (user)f(to)i(supply)d(an)i(optional)h(timestamp)g(v)-5 b(alue)32 b(to)h(use)f(instead)g(of)g(the)g(curren)m(t)150 2856 y(time.)150 3106 y FA(12.3)68 b(Data)46 b(File)g(Managemen)l(t)150 3265 y FB(This)30 b(section)h(presen)m(ts)f(functions)g(that)h(are)g (useful)f(for)g(managing)h(command-line)g(data)g(\014les.)150 3476 y Fj(12.3.1)63 b(Noting)42 b(Data)e(File)h(Boundaries)150 3623 y FB(The)j Fz(BEGIN)g FB(and)g Fz(END)g FB(rules)g(are)i(eac)m(h)g (executed)f(exactly)i(once)f(at)f(the)g(b)s(eginning)f(and)h(end)f(of) 150 3733 y(y)m(our)37 b Fz(awk)g FB(program,)i(resp)s(ectiv)m(ely)g (\(see)f(Section)g(6.1.4)i([The)d Fz(BEGIN)f FB(and)g Fz(END)h FB(Sp)s(ecial)h(P)m(atterns],)150 3842 y(page)33 b(96\).)46 b(W)-8 b(e)34 b(\(the)e Fz(gawk)f FB(authors\))h(once)h(had) e(a)h(user)f(who)h(mistak)m(enly)h(though)m(t)g(that)f(the)g Fz(BEGIN)150 3952 y FB(rule)g(is)h(executed)g(at)g(the)g(b)s(eginning)f (of)h(eac)m(h)g(data)h(\014le)e(and)g(the)h Fz(END)e FB(rule)i(is)f(executed)i(at)f(the)g(end)150 4061 y(of)k(eac)m(h)h (data)f(\014le.)60 b(When)36 b(informed)g(that)h(this)g(w)m(as)g(not)g (the)f(case,)k(the)d(user)f(requested)g(that)h(w)m(e)150 4171 y(add)31 b(new)f(sp)s(ecial)i(patterns)f(to)h Fz(gawk)p FB(,)f(named)f Fz(BEGIN_FILE)f FB(and)h Fz(END_FILE)p FB(,)g(that)h(w)m(ould)g(ha)m(v)m(e)i(the)150 4281 y(desired)d(b)s(eha) m(vior.)41 b(He)31 b(ev)m(en)g(supplied)e(us)g(the)i(co)s(de)g(to)g(do) f(so.)275 4427 y(Adding)39 b(these)h(sp)s(ecial)g(patterns)g(to)h Fz(gawk)d FB(w)m(asn't)i(necessary;)46 b(the)40 b(job)f(can)h(b)s(e)f (done)h(cleanly)150 4536 y(in)34 b Fz(awk)f FB(itself,)i(as)g (illustrated)f(b)m(y)g(the)g(follo)m(wing)h(library)f(program.)51 b(It)34 b(arranges)g(to)h(call)g(t)m(w)m(o)g(user-)150 4646 y(supplied)i(functions,)j Fz(beginfile)c FB(and)i Fz(endfile)p FB(,)h(at)g(the)f(b)s(eginning)g(and)g(end)f(of)i(eac)m(h) h(data)f(\014le.)150 4755 y(Besides)f(solving)f(the)g(problem)g(in)f (only)i(nine\(!\))60 b(lines)38 b(of)f(co)s(de,)i(it)e(do)s(es)g(so)g Fw(p)-5 b(ortably)8 b FB(;)43 b(this)37 b(w)m(orks)150 4865 y(with)30 b(an)m(y)h(implemen)m(tation)h(of)e Fz(awk)p FB(:)390 5011 y Fz(#)47 b(transfile.awk)390 5121 y(#)390 5230 y(#)g(Give)g(the)g(user)g(a)g(hook)g(for)g(filename)e(transitions) 390 5340 y(#)p eop end %%Page: 193 205 TeXDict begin 193 204 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(193)390 299 y Fz(#)47 b(The)g(user)g(must)g(supply)f(functions)f (beginfile\(\))g(and)i(endfile\(\))390 408 y(#)g(that)g(each)g(take)f (the)h(name)g(of)g(the)g(file)g(being)f(started)g(or)390 518 y(#)h(finished,)f(respectively.)390 737 y(FILENAME)g(!=)h (_oldfilename)d(\\)390 847 y({)581 956 y(if)j(\(_oldfilename)d(!=)j (""\))772 1066 y(endfile\(_oldfilename\))581 1176 y(_oldfilename)d(=)k (FILENAME)581 1285 y(beginfile\(FILENAME\))390 1395 y(})390 1614 y(END)142 b({)48 b(endfile\(FILENAME\))43 b(})275 1761 y FB(This)32 b(\014le)h(m)m(ust)g(b)s(e)f(loaded)i(b)s(efore)f (the)g(user's)f(\\main")i(program,)g(so)f(that)h(the)f(rule)g(it)h (supplies)150 1870 y(is)c(executed)i(\014rst.)275 2017 y(This)40 b(rule)h(relies)h(on)f Fz(awk)p FB('s)g Fz(FILENAME)e FB(v)-5 b(ariable)42 b(that)g(automatically)i(c)m(hanges)f(for)e(eac)m (h)h(new)150 2127 y(data)32 b(\014le.)44 b(The)30 b(curren)m(t)i (\014le)f(name)g(is)h(sa)m(v)m(ed)g(in)f(a)h(priv)-5 b(ate)32 b(v)-5 b(ariable,)32 b Fz(_oldfilename)p FB(.)40 b(If)31 b Fz(FILENAME)150 2237 y FB(do)s(es)j(not)h(equal)h Fz(_oldfilename)p FB(,)c(then)j(a)g(new)f(data)h(\014le)g(is)g(b)s (eing)f(pro)s(cessed)g(and)h(it)g(is)g(necessary)150 2346 y(to)h(call)h Fz(endfile)c FB(for)i(the)h(old)g(\014le.)55 b(Because)37 b Fz(endfile)d FB(should)g(only)i(b)s(e)e(called)j(if)e(a) h(\014le)g(has)f(b)s(een)150 2456 y(pro)s(cessed,)30 b(the)g(program)g(\014rst)f(c)m(hec)m(ks)i(to)g(mak)m(e)g(sure)e(that)i Fz(_oldfilename)26 b FB(is)k(not)h(the)f(n)m(ull)g(string.)150 2565 y(The)h(program)g(then)g(assigns)h(the)f(curren)m(t)h(\014le)f (name)h(to)g Fz(_oldfilename)c FB(and)j(calls)h Fz(beginfile)d FB(for)150 2675 y(the)j(\014le.)46 b(Because,)34 b(lik)m(e)g(all)f Fz(awk)e FB(v)-5 b(ariables,)33 b Fz(_oldfilename)c FB(is)j (initialized)i(to)f(the)f(n)m(ull)g(string,)h(this)150 2784 y(rule)d(executes)i(correctly)f(ev)m(en)h(for)e(the)g(\014rst)g (data)h(\014le.)275 2931 y(The)24 b(program)g(also)i(supplies)e(an)h Fz(END)f FB(rule)g(to)i(do)e(the)h(\014nal)g(pro)s(cessing)f(for)h(the) g(last)h(\014le.)39 b(Because)150 3041 y(this)27 b Fz(END)f FB(rule)h(comes)h(b)s(efore)e(an)m(y)i Fz(END)e FB(rules)g(supplied)g (in)h(the)g(\\main")h(program,)g Fz(endfile)d FB(is)i(called)150 3151 y(\014rst.)40 b(Once)30 b(again)i(the)e(v)-5 b(alue)31 b(of)g(m)m(ultiple)g Fz(BEGIN)e FB(and)g Fz(END)h FB(rules)g(should)f (b)s(e)h(clear.)275 3297 y(This)g(v)m(ersion)h(has)g(same)g(problem)f (as)i(the)f(\014rst)f(v)m(ersion)h(of)g Fz(nextfile)e FB(\(see)j(Section)g(12.2.1)h([Im-)150 3407 y(plemen)m(ting)d Fz(nextfile)d FB(as)i(a)h(F)-8 b(unction],)31 b(page)f(183\).)42 b(If)28 b(the)i(same)f(data)h(\014le)g(o)s(ccurs)f(t)m(wice)h(in)f(a)h (ro)m(w)150 3517 y(on)d(the)h(command)f(line,)h(then)f Fz(endfile)f FB(and)g Fz(beginfile)f FB(are)j(not)f(executed)i(at)f (the)f(end)g(of)g(the)h(\014rst)150 3626 y(pass)i(and)g(at)h(the)f(b)s (eginning)g(of)h(the)f(second)h(pass.)40 b(The)30 b(follo)m(wing)i(v)m (ersion)f(solv)m(es)g(the)g(problem:)390 3773 y Fz(#)47 b(ftrans.awk)e(---)i(handle)f(data)h(file)g(transitions)390 3883 y(#)390 3992 y(#)g(user)g(supplies)f(beginfile\(\))e(and)j (endfile\(\))f(functions)390 4212 y(FNR)h(==)g(1)h({)581 4321 y(if)f(\(_filename_)e(!=)i(""\))772 4431 y(endfile\(_filename_\)) 581 4540 y(_filename_)e(=)i(FILENAME)581 4650 y(beginfile\(FILENAME\)) 390 4759 y(})390 4979 y(END)95 b({)47 b(endfile\(_filename_\))c(})275 5126 y FB(Section)28 b(13.2.7)i([Coun)m(ting)e(Things],)g(page)h(228,)h (sho)m(ws)d(ho)m(w)h(this)g(library)f(function)h(can)g(b)s(e)f(used)150 5235 y(and)j(ho)m(w)g(it)h(simpli\014es)f(writing)g(the)h(main)f (program.)p eop end %%Page: 194 206 TeXDict begin 194 205 bop 150 -116 a FB(194)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fj(12.3.2)63 b(Rereading)41 b(the)g(Curren)m(t)f(File)150 446 y FB(Another)32 b(request)g(for)g(a)g(new)f(built-in)h(function)g (w)m(as)g(for)g(a)g Fz(rewind)f FB(function)g(that)i(w)m(ould)e(mak)m (e)i(it)150 555 y(p)s(ossible)c(to)h(reread)f(the)g(curren)m(t)g (\014le.)41 b(The)29 b(requesting)g(user)g(didn't)f(w)m(an)m(t)i(to)g (ha)m(v)m(e)h(to)f(use)f Fz(getline)150 665 y FB(\(see)i(Section)h(3.8) f([Explicit)g(Input)e(with)h Fz(getline)p FB(],)f(page)i(51\))h(inside) e(a)h(lo)s(op.)275 806 y(Ho)m(w)m(ev)m(er,)c(as)d(long)g(as)g(y)m(ou)h (are)f(not)g(in)f(the)h Fz(END)f FB(rule,)i(it)g(is)f(quite)g(easy)g (to)h(arrange)f(to)h(immediately)150 916 y(close)36 b(the)f(curren)m(t) g(input)f(\014le)g(and)h(then)f(start)h(o)m(v)m(er)i(with)d(it)h(from)g (the)g(top.)54 b(F)-8 b(or)35 b(lac)m(k)i(of)e(a)g(b)s(etter)150 1025 y(name,)c(w)m(e'll)g(call)h(it)f Fz(rewind)p FB(:)390 1166 y Fz(#)47 b(rewind.awk)e(---)i(rewind)f(the)h(current)f(file)h (and)g(start)f(over)390 1386 y(function)g(rewind\()189 b(i\))390 1495 y({)581 1605 y(#)47 b(shift)g(remaining)e(arguments)g (up)581 1714 y(for)i(\(i)g(=)g(ARGC;)g(i)g(>)h(ARGIND;)e(i--\))772 1824 y(ARGV[i])g(=)h(ARGV[i-1])581 2043 y(#)g(make)g(sure)g(gawk)f (knows)h(to)g(keep)f(going)581 2153 y(ARGC++)581 2372 y(#)h(make)g(current)f(file)g(next)h(to)g(get)g(done)581 2482 y(ARGV[ARGIND+1])d(=)j(FILENAME)581 2701 y(#)g(do)h(it)581 2810 y(nextfile)390 2920 y(})275 3061 y FB(This)21 b(co)s(de)h(relies)g (on)g(the)g Fz(ARGIND)e FB(v)-5 b(ariable)23 b(\(see)g(Section)g(6.5.2) g([Built-in)g(V)-8 b(ariables)23 b(That)f(Con)m(v)m(ey)150 3171 y(Information],)34 b(page)g(110\),)h(whic)m(h)e(is)g(sp)s (eci\014c)g(to)h Fz(gawk)p FB(.)47 b(If)32 b(y)m(ou)i(are)f(not)g (using)g Fz(gawk)p FB(,)g(y)m(ou)g(can)g(use)150 3280 y(ideas)28 b(presen)m(ted)g(in)f(the)h(previous)f(section)i(to)f (either)g(up)s(date)f Fz(ARGIND)f FB(on)h(y)m(our)h(o)m(wn)g(or)f(mo)s (dify)g(this)150 3390 y(co)s(de)k(as)f(appropriate.)275 3531 y(The)21 b Fz(rewind)g FB(function)h(also)i(relies)f(on)f(the)g Fz(nextfile)f FB(k)m(eyw)m(ord)h(\(see)i(Section)f(6.4.9)h([Using)f Fz(gawk)p FB('s)150 3641 y Fz(nextfile)c FB(Statemen)m(t],)25 b(page)d(106\).)39 b(See)22 b(Section)g(12.2.1)i([Implemen)m(ting)e Fz(nextfile)d FB(as)i(a)h(F)-8 b(unction],)150 3750 y(page)31 b(183,)h(for)e(a)h(function)f(v)m(ersion)h(of)f Fz(nextfile)p FB(.)150 3956 y Fj(12.3.3)63 b(Chec)m(king)40 b(for)i(Readable)e(Data)g (Files)150 4103 y FB(Normally)-8 b(,)35 b(if)d(y)m(ou)h(giv)m(e)h Fz(awk)e FB(a)h(data)g(\014le)f(that)i(isn't)e(readable,)i(it)f(stops)g (with)f(a)h(fatal)h(error.)46 b(There)150 4213 y(are)35 b(times)g(when)e(y)m(ou)h(migh)m(t)h(w)m(an)m(t)h(to)f(just)e(ignore)i (suc)m(h)f(\014les)g(and)g(k)m(eep)h(going.)54 b(Y)-8 b(ou)34 b(can)h(do)f(this)150 4322 y(b)m(y)c(prep)s(ending)f(the)h (follo)m(wing)i(program)e(to)h(y)m(our)g Fz(awk)e FB(program:)390 4463 y Fz(#)47 b(readable.awk)e(---)i(library)f(file)g(to)h(skip)g (over)g(unreadable)e(files)390 4682 y(BEGIN)h({)581 4792 y(for)h(\(i)g(=)g(1;)h(i)f(<)h(ARGC;)e(i++\))h({)772 4902 y(if)g(\(ARGV[i])f(~)h(/^[A-Za-z_][A-Za-z0-9_]*)o(=.*/)41 b(\\)963 5011 y(||)47 b(ARGV[i])f(==)h("-"\))963 5121 y(continue)188 b(#)48 b(assignment)d(or)i(standard)f(input)772 5230 y(else)g(if)i(\(\(getline)d(junk)i(<)g(ARGV[i]\))f(<)h(0\))g(#)h (unreadable)963 5340 y(delete)e(ARGV[i])p eop end %%Page: 195 207 TeXDict begin 195 206 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(195)772 299 y Fz(else)963 408 y(close\(ARGV[i]\))581 518 y(})390 628 y(})275 779 y FB(In)23 b Fz(gawk)p FB(,)h(the)g Fz(getline)e FB(w)m(on't)j(b)s(e)e(fatal)j(\(unless)d(`)p Fz(--posix)p FB(')g(is)h(in)g(force\).)39 b(Remo)m(ving)25 b(the)f(elemen)m(t)150 889 y(from)30 b Fz(ARGV)f FB(with)h Fz(delete)f FB(skips)h(the)g(\014le)h(\(since)g(it's)g(no)f(longer)h (in)f(the)h(list\).)150 1105 y Fj(12.3.4)63 b(Chec)m(king)40 b(F)-10 b(or)42 b(Zero-length)f(Files)150 1252 y FB(All)e(kno)m(wn)e Fz(awk)g FB(implemen)m(tations)j(silen)m(tly)f(skip)f(o)m(v)m(er)h (zero-length)h(\014les.)63 b(This)37 b(is)h(a)h(b)m(y-pro)s(duct)150 1362 y(of)33 b Fz(awk)p FB('s)f(implicit)h(read-a-record-and-matc)m (h-against-the-rules)k(lo)s(op:)45 b(when)32 b Fz(awk)g FB(tries)h(to)g(read)g(a)150 1471 y(record)g(from)f(an)h(empt)m(y)g (\014le,)h(it)g(immediately)g(receiv)m(es)h(an)d(end)h(of)g(\014le)g (indication,)h(closes)g(the)g(\014le,)150 1581 y(and)f(pro)s(ceeds)f (on)i(to)f(the)h(next)f(command-line)h(data)g(\014le,)g Fw(without)43 b FB(executing)35 b(an)m(y)e(user-lev)m(el)i Fz(awk)150 1691 y FB(program)30 b(co)s(de.)275 1842 y(Using)22 b Fz(gawk)p FB('s)e Fz(ARGIND)g FB(v)-5 b(ariable)23 b(\(see)g(Section)f(6.5)h([Built-in)g(V)-8 b(ariables],)25 b(page)e(107\),)i(it)e(is)e(p)s(ossible)150 1952 y(to)36 b(detect)g(when)d(an)i(empt)m(y)g(data)h(\014le)f(has)f(b)s(een)g (skipp)s(ed.)53 b(Similar)34 b(to)i(the)f(library)f(\014le)h(presen)m (ted)150 2061 y(in)d(Section)g(12.3.1)i([Noting)f(Data)h(File)f (Boundaries],)g(page)f(192,)i(the)e(follo)m(wing)h(library)f(\014le)g (calls)h(a)150 2171 y(function)h(named)h Fz(zerofile)d FB(that)k(the)f(user)f(m)m(ust)g(pro)m(vide.)54 b(The)34 b(argumen)m(ts)h(passed)g(are)g(the)g(\014le)150 2281 y(name)30 b(and)g(the)h(p)s(osition)f(in)g Fz(ARGV)f FB(where)h(it)h(w)m(as)g(found:)390 2432 y Fz(#)47 b(zerofile.awk)e (---)i(library)f(file)g(to)h(process)f(empty)h(input)f(files)390 2651 y(BEGIN)g({)i(Argind)e(=)h(0)h(})390 2870 y(ARGIND)e(>)i(Argind)e (+)h(1)h({)581 2980 y(for)f(\(Argind++;)e(Argind)h(<)h(ARGIND;)f (Argind++\))772 3090 y(zerofile\(ARGV[Argind],)c(Argind\))390 3199 y(})390 3418 y(ARGIND)k(!=)h(Argind)f({)i(Argind)e(=)h(ARGIND)f(}) 390 3638 y(END)h({)581 3747 y(if)g(\(ARGIND)f(>)h(Argind\))772 3857 y(for)g(\(Argind++;)e(Argind)h(<=)h(ARGIND;)f(Argind++\))963 3966 y(zerofile\(ARGV[Argind],)41 b(Argind\))390 4076 y(})275 4228 y FB(The)f(user-lev)m(el)i(v)-5 b(ariable)42 b Fz(Argind)d FB(allo)m(ws)k(the)e Fz(awk)f FB(program)h(to)g(trac)m(k) i(its)e(progress)g(through)150 4337 y Fz(ARGV)p FB(.)55 b(Whenev)m(er)36 b(the)g(program)f(detects)i(that)f Fz(ARGIND)e FB(is)i(greater)h(than)e(`)p Fz(Argind)29 b(+)h(1)p FB(',)37 b(it)f(means)150 4447 y(that)e(one)h(or)e(more)h(empt)m(y)h(\014les)e (w)m(ere)i(skipp)s(ed.)49 b(The)33 b(action)j(then)d(calls)i Fz(zerofile)d FB(for)h(eac)m(h)i(suc)m(h)150 4556 y(\014le,)c(incremen) m(ting)g Fz(Argind)e FB(along)i(the)g(w)m(a)m(y)-8 b(.)275 4708 y(The)29 b(`)p Fz(Argind)g(!=)h(ARGIND)p FB(')f(rule)h(simply)g(k) m(eeps)h Fz(Argind)e FB(up)g(to)i(date)g(in)f(the)h(normal)f(case.)275 4860 y(Finally)-8 b(,)31 b(the)e Fz(END)f FB(rule)h(catc)m(hes)i(the)e (case)i(of)e(an)m(y)g(empt)m(y)h(\014les)f(at)h(the)f(end)g(of)g(the)g (command-line)150 4969 y(argumen)m(ts.)46 b(Note)33 b(that)f(the)g (test)h(in)f(the)g(condition)g(of)g(the)h Fz(for)e FB(lo)s(op)h(uses)f (the)h(`)p Fz(<=)p FB(')g(op)s(erator,)h(not)150 5079 y Fz(<)p FB(.)275 5230 y(As)j(an)h(exercise,)j(y)m(ou)e(migh)m(t)g (consider)e(whether)h(this)g(same)g(problem)f(can)i(b)s(e)e(solv)m(ed)i (without)150 5340 y(relying)31 b(on)f Fz(gawk)p FB('s)f Fz(ARGIND)g FB(v)-5 b(ariable.)p eop end %%Page: 196 208 TeXDict begin 196 207 bop 150 -116 a FB(196)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(As)j(a)g(second)g(exercise,)j(revise)d(this)g(co)s(de)h(to)g (handle)e(the)i(case)g(where)e(an)h(in)m(terv)m(ening)i(v)-5 b(alue)33 b(in)150 408 y Fz(ARGV)c FB(is)i(a)f(v)-5 b(ariable)32 b(assignmen)m(t.)150 601 y Fj(12.3.5)63 b(T)-10 b(reating)41 b(Assignmen)m(ts)h(as)f(File)h(Names)150 748 y FB(Occasionally)-8 b(,)39 b(y)m(ou)c(migh)m(t)h(not)g(w)m(an)m(t)g Fz(awk)e FB(to)i(pro)s(cess)f(command-line)g(v)-5 b(ariable)36 b(assignmen)m(ts)g(\(see)150 858 y(Section)g(5.3.2)g([Assigning)g(V)-8 b(ariables)36 b(on)e(the)h(Command)f(Line],)i(page)g(76\).)55 b(In)34 b(particular,)j(if)e(y)m(ou)150 967 y(ha)m(v)m(e)j(\014le)e (names)h(that)g(con)m(tain)g(an)g(`)p Fz(=)p FB(')f(c)m(haracter,)k Fz(awk)c FB(treats)h(the)g(\014le)f(name)h(as)g(an)f(assignmen)m(t,)150 1077 y(and)30 b(do)s(es)g(not)g(pro)s(cess)g(it.)275 1208 y(Some)50 b(users)f(ha)m(v)m(e)i(suggested)g(an)f(additional)g (command-line)h(option)f(for)g Fz(gawk)f FB(to)i(disable)150 1318 y(command-line)40 b(assignmen)m(ts.)68 b(Ho)m(w)m(ev)m(er,)44 b(some)c(simple)g(programming)f(with)g(a)h(library)f(\014le)g(do)s(es) 150 1427 y(the)31 b(tric)m(k:)390 1559 y Fz(#)47 b(noassign.awk)e(---)i (library)f(file)g(to)h(avoid)g(the)g(need)f(for)h(a)390 1668 y(#)g(special)f(option)g(that)h(disables)f(command-line)e (assignments)390 1887 y(function)i(disable_assigns\(argc,)c(argv,)189 b(i\))390 1997 y({)581 2107 y(for)47 b(\(i)g(=)g(1;)h(i)f(<)h(argc;)e (i++\))772 2216 y(if)h(\(argv[i])f(~)h(/^[A-Za-z_][A-Za-z_0-9]*)o(=.*/) o(\))963 2326 y(argv[i])f(=)h(\("./")f(argv[i]\))390 2435 y(})390 2655 y(BEGIN)g({)581 2764 y(if)h(\(No_command_assign\))772 2874 y(disable_assigns\(ARGC,)42 b(ARGV\))390 2983 y(})275 3115 y FB(Y)-8 b(ou)30 b(then)g(run)f(y)m(our)i(program)f(this)g(w)m(a) m(y:)390 3246 y Fz(awk)47 b(-v)g(No_command_assign=1)c(-f)k (noassign.awk)d(-f)j(yourprog.awk)e(*)275 3377 y FB(The)24 b(function)g(w)m(orks)g(b)m(y)h(lo)s(oping)f(through)g(the)h(argumen)m (ts.)39 b(It)25 b(prep)s(ends)d(`)p Fz(./)p FB(')i(to)i(an)m(y)e (argumen)m(t)150 3487 y(that)31 b(matc)m(hes)g(the)g(form)f(of)g(a)h(v) -5 b(ariable)31 b(assignmen)m(t,)h(turning)d(that)i(argumen)m(t)g(in)m (to)g(a)g(\014le)g(name.)275 3618 y(The)g(use)i(of)f Fz(No_command_assign)c FB(allo)m(ws)33 b(y)m(ou)g(to)g(disable)g (command-line)g(assignmen)m(ts)g(at)g(in-)150 3727 y(v)m(o)s(cation)k (time,)g(b)m(y)e(giving)h(the)g(v)-5 b(ariable)35 b(a)h(true)f(v)-5 b(alue.)55 b(When)35 b(not)h(set,)h(it)e(is)h(initially)g(zero)g (\(i.e.,)150 3837 y(false\),)c(so)e(the)h(command-line)g(argumen)m(ts)f (are)h(left)g(alone.)150 4063 y FA(12.4)68 b(Pro)t(cessing)46 b(Command-Line)f(Options)150 4222 y FB(Most)32 b(utilities)g(on)f (POSIX)f(compatible)i(systems)f(tak)m(e)h(options,)g(or)f(\\switc)m (hes,")h(on)f(the)g(command)150 4332 y(line)38 b(that)h(can)f(b)s(e)f (used)g(to)h(c)m(hange)h(the)f(w)m(a)m(y)h(a)f(program)g(b)s(eha)m(v)m (es.)63 b Fz(awk)37 b FB(is)h(an)g(example)g(of)g(suc)m(h)150 4442 y(a)45 b(program)f(\(see)h(Section)h(11.2)g([Command-Line)e (Options],)k(page)d(173\).)85 b(Often,)48 b(options)c(tak)m(e)150 4551 y Fx(argumen)m(ts)t FB(;)38 b(i.e.,)f(data)f(that)f(the)g(program) g(needs)g(to)g(correctly)i(ob)s(ey)e(the)g(command-line)g(option.)150 4661 y(F)-8 b(or)41 b(example,)j Fz(awk)p FB('s)c(`)p Fz(-F)p FB(')g(option)h(requires)f(a)h(string)f(to)h(use)f(as)h(the)f (\014eld)g(separator.)72 b(The)40 b(\014rst)150 4770 y(o)s(ccurrence)29 b(on)g(the)g(command)f(line)i(of)f(either)g(`)p Fz(--)p FB(')g(or)g(a)g(string)g(that)g(do)s(es)g(not)g(b)s(egin)f (with)h(`)p Fz(-)p FB(')g(ends)150 4880 y(the)i(options.)275 5011 y(Mo)s(dern)d(Unix)g(systems)h(pro)m(vide)g(a)h(C)e(function)h (named)f Fz(getopt)f FB(for)i(pro)s(cessing)f(command-line)150 5121 y(argumen)m(ts.)38 b(The)21 b(programmer)g(pro)m(vides)h(a)g (string)f(describing)h(the)f(one-letter)j(options.)38 b(If)21 b(an)g(option)150 5230 y(requires)35 b(an)f(argumen)m(t,)j(it)f (is)f(follo)m(w)m(ed)h(in)f(the)g(string)g(with)g(a)g(colon.)56 b Fz(getopt)33 b FB(is)i(also)h(passed)f(the)150 5340 y(coun)m(t)30 b(and)g(v)-5 b(alues)30 b(of)g(the)g(command-line)g (argumen)m(ts)g(and)f(is)h(called)h(in)e(a)h(lo)s(op.)41 b Fz(getopt)28 b FB(pro)s(cesses)p eop end %%Page: 197 209 TeXDict begin 197 208 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(197)150 299 y(the)38 b(command-line)f(argumen)m(ts)h(for)f(option) h(letters.)62 b(Eac)m(h)38 b(time)g(around)f(the)g(lo)s(op,)j(it)d (returns)g(a)150 408 y(single)31 b(c)m(haracter)h(represen)m(ting)e (the)h(next)f(option)h(letter)g(that)g(it)g(\014nds,)e(or)h(`)p Fz(?)p FB(')h(if)f(it)h(\014nds)d(an)i(in)m(v)-5 b(alid)150 518 y(option.)41 b(When)30 b(it)h(returns)e Fy(\000)p FB(1,)i(there)g(are)f(no)h(options)f(left)h(on)g(the)f(command)g(line.) 275 656 y(When)e(using)h Fz(getopt)p FB(,)f(options)h(that)h(do)e(not)i (tak)m(e)g(argumen)m(ts)g(can)f(b)s(e)f(group)s(ed)g(together.)42 b(F)-8 b(ur-)150 765 y(thermore,)28 b(options)e(that)i(tak)m(e)g (argumen)m(ts)e(require)h(that)g(the)f(argumen)m(t)h(is)g(presen)m(t.) 39 b(The)26 b(argumen)m(t)150 875 y(can)31 b(immediately)g(follo)m(w)h (the)f(option)f(letter,)i(or)f(it)g(can)f(b)s(e)g(a)h(separate)g (command-line)g(argumen)m(t.)275 1013 y(Giv)m(en)40 b(a)g(h)m(yp)s (othetical)h(program)e(that)h(tak)m(es)h(three)f(command-line)g (options,)j(`)p Fz(-a)p FB(',)f(`)p Fz(-b)p FB(',)g(and)150 1122 y(`)p Fz(-c)p FB(',)d(where)d(`)p Fz(-b)p FB(')h(requires)g(an)g (argumen)m(t,)i(all)f(of)g(the)f(follo)m(wing)h(are)g(v)-5 b(alid)37 b(w)m(a)m(ys)h(of)f(in)m(v)m(oking)i(the)150 1232 y(program:)390 1370 y Fz(prog)47 b(-a)g(-b)g(foo)g(-c)g(data1)f (data2)h(data3)390 1479 y(prog)g(-ac)g(-bfoo)f(--)h(data1)f(data2)h (data3)390 1589 y(prog)g(-acbfoo)e(data1)i(data2)f(data3)275 1727 y FB(Notice)35 b(that)f(when)e(the)i(argumen)m(t)g(is)f(group)s (ed)f(with)h(its)h(option,)h(the)e(rest)h(of)g(the)f(argumen)m(t)h(is) 150 1836 y(considered)27 b(to)h(b)s(e)e(the)i(option's)g(argumen)m(t.) 40 b(In)26 b(this)h(example,)i(`)p Fz(-acbfoo)p FB(')d(indicates)i (that)f(all)h(of)g(the)150 1946 y(`)p Fz(-a)p FB(',)g(`)p Fz(-b)p FB(',)h(and)e(`)p Fz(-c)p FB(')g(options)h(w)m(ere)g(supplied,) f(and)g(that)h(`)p Fz(foo)p FB(')f(is)h(the)g(argumen)m(t)g(to)g(the)g (`)p Fz(-b)p FB(')f(option.)275 2084 y Fz(getopt)h FB(pro)m(vides)j (four)e(external)i(v)-5 b(ariables)31 b(that)g(the)g(programmer)f(can)h (use:)150 2248 y Fz(optind)192 b FB(The)52 b(index)h(in)g(the)g (argumen)m(t)g(v)-5 b(alue)53 b(arra)m(y)h(\()p Fz(argv)p FB(\))e(where)h(the)g(\014rst)f(nonoption)630 2358 y(command-line)31 b(argumen)m(t)g(can)f(b)s(e)g(found.)150 2521 y Fz(optarg)192 b FB(The)30 b(string)g(v)-5 b(alue)31 b(of)g(the)f(argumen)m(t)h(to)g (an)f(option.)150 2683 y Fz(opterr)192 b FB(Usually)26 b Fz(getopt)e FB(prin)m(ts)i(an)f(error)h(message)h(when)e(it)h (\014nds)e(an)i(in)m(v)-5 b(alid)26 b(option.)40 b(Setting)630 2793 y Fz(opterr)34 b FB(to)i(zero)h(disables)e(this)h(feature.)57 b(\(An)35 b(application)i(migh)m(t)f(w)m(an)m(t)h(to)f(prin)m(t)g(its) 630 2902 y(o)m(wn)30 b(error)g(message.\))150 3065 y Fz(optopt)192 b FB(The)30 b(letter)i(represen)m(ting)e(the)h (command-line)g(option.)275 3230 y(The)24 b(follo)m(wing)j(C)e(fragmen) m(t)h(sho)m(ws)f(ho)m(w)g Fz(getopt)e FB(migh)m(t)j(pro)s(cess)f (command-line)h(argumen)m(ts)f(for)150 3339 y Fz(awk)p FB(:)390 3477 y Fz(int)390 3587 y(main\(int)46 b(argc,)g(char)h (*argv[]\))390 3696 y({)581 3806 y(...)581 3915 y(/*)g(print)f(our)h (own)g(message)f(*/)581 4025 y(opterr)g(=)h(0;)581 4134 y(while)f(\(\(c)h(=)h(getopt\(argc,)c(argv,)i("v:f:F:W:"\)\))f(!=)i (-1\))g({)772 4244 y(switch)f(\(c\))h({)772 4354 y(case)f('f':)190 b(/*)47 b(file)g(*/)963 4463 y(...)963 4573 y(break;)772 4682 y(case)f('F':)190 b(/*)47 b(field)g(separator)e(*/)963 4792 y(...)963 4902 y(break;)772 5011 y(case)h('v':)190 b(/*)47 b(variable)f(assignment)f(*/)963 5121 y(...)963 5230 y(break;)772 5340 y(case)h('W':)190 b(/*)47 b(extension)f(*/)p eop end %%Page: 198 210 TeXDict begin 198 209 bop 150 -116 a FB(198)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)963 299 y Fz(...)963 408 y(break;)772 518 y(case)46 b('?':)772 628 y(default:)963 737 y(usage\(\);)963 847 y(break;)772 956 y(})581 1066 y(})581 1176 y(...)390 1285 y(})275 1420 y FB(As)41 b(a)g(side)g(p)s(oin)m(t,)j Fz(gawk)c FB(actually)j(uses)d(the)i(GNU)f Fz(getopt_long)d FB(function)j(to)h (pro)s(cess)f(b)s(oth)150 1529 y(normal)29 b(and)f(GNU-st)m(yle)j(long) f(options)f(\(see)h(Section)g(11.2)g([Command-Line)f(Options],)g(page)h (173\).)275 1664 y(The)h(abstraction)i(pro)m(vided)f(b)m(y)f Fz(getopt)g FB(is)h(v)m(ery)g(useful)f(and)g(is)h(quite)h(handy)e(in)g Fz(awk)g FB(programs)150 1773 y(as)e(w)m(ell.)42 b(F)-8 b(ollo)m(wing)31 b(is)f(an)f Fz(awk)f FB(v)m(ersion)i(of)f Fz(getopt)p FB(.)39 b(This)28 b(function)h(highligh)m(ts)h(one)f(of)h (the)f(greatest)150 1883 y(w)m(eaknesses)d(in)e Fz(awk)p FB(,)h(whic)m(h)g(is)f(that)i(it)f(is)g(v)m(ery)g(p)s(o)s(or)e(at)j (manipulating)f(single)g(c)m(haracters.)41 b(Rep)s(eated)150 1992 y(calls)32 b(to)g Fz(substr)e FB(are)i(necessary)f(for)g (accessing)i(individual)e(c)m(haracters)h(\(see)h(Section)f(8.1.3)h ([String-)150 2102 y(Manipulation)e(F)-8 b(unctions],)32 b(page)f(129\).)1587 2069 y Fo(7)275 2236 y FB(The)e(discussion)h(that) h(follo)m(ws)h(w)m(alks)f(through)e(the)i(co)s(de)f(a)h(bit)g(at)g(a)f (time:)390 2371 y Fz(#)47 b(getopt.awk)e(---)i(do)h(C)f(library)f (getopt\(3\))f(function)h(in)h(awk)390 2590 y(#)g(External)f (variables:)390 2700 y(#)191 b(Optind)46 b(--)h(index)f(in)h(ARGV)g(of) g(first)g(nonoption)e(argument)390 2809 y(#)191 b(Optarg)46 b(--)h(string)f(value)g(of)i(argument)d(to)i(current)f(option)390 2919 y(#)191 b(Opterr)46 b(--)h(if)g(nonzero,)f(print)g(our)h(own)g (diagnostic)390 3028 y(#)191 b(Optopt)46 b(--)h(current)f(option)g (letter)390 3248 y(#)h(Returns:)390 3357 y(#)191 b(-1)238 b(at)47 b(end)g(of)g(options)390 3467 y(#)191 b(?)286 b(for)47 b(unrecognized)d(option)390 3576 y(#)191 b(<c>)f(a)47 b(character)e(representing)g(the)i(current)f(option)390 3796 y(#)h(Private)f(Data:)390 3905 y(#)191 b(_opti)94 b(--)47 b(index)f(in)h(multi-flag)e(option,)h(e.g.,)h(-abc)275 4040 y FB(The)27 b(function)h(starts)h(out)f(with)g(a)h(list)g(of)f (the)g(global)i(v)-5 b(ariables)29 b(it)g(uses,)f(what)g(the)g(return)g (v)-5 b(alues)150 4149 y(are,)35 b(what)f(they)g(mean,)h(and)e(an)m(y)h (global)h(v)-5 b(ariables)35 b(that)f(are)g(\\priv)-5 b(ate")35 b(to)g(this)f(library)f(function.)150 4259 y(Suc)m(h)d(do)s(cumen)m(tation)h(is)f(essen)m(tial)i(for)f(an)m(y)f (program,)h(and)e(particularly)i(for)g(library)e(functions.)275 4393 y(The)h Fz(getopt)g FB(function)h(\014rst)g(c)m(hec)m(ks)h(that)g (it)g(w)m(as)g(indeed)f(called)h(with)f(a)h(string)f(of)h(options)f (\(the)150 4503 y Fz(options)d FB(parameter\).)42 b(If)30 b Fz(options)e FB(has)i(a)h(zero)g(length,)g Fz(getopt)e FB(immediately)j(returns)d Fy(\000)p FB(1:)390 4637 y Fz(function)46 b(getopt\(argc,)e(argv,)i(options,)189 b(thisopt,)46 b(i\))390 4747 y({)581 4857 y(if)h(\(length\(options\))c (==)48 b(0\))190 b(#)47 b(no)h(options)d(given)772 4966 y(return)h(-1)p 150 5154 1200 4 v 199 5221 a Fo(7)275 5253 y Fn(This)23 b(function)h(w)n(as)g(written)g(b)r(efore)g Fm(gawk)g Fn(acquired)f(the)g(abilit)n(y)g(to)h(split)f(strings)h(in)n (to)g(single)g(c)n(haracters)g(using)g Fm("")275 5340 y Fn(as)i(the)f(separator.)36 b(W)-6 b(e)25 b(ha)n(v)n(e)g(left)i(it)e (alone,)i(since)f(using)g Fm(substr)h Fn(is)g(more)f(p)r(ortable.)p eop end %%Page: 199 211 TeXDict begin 199 210 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(199)581 299 y Fz(if)47 b(\(argv[Optind])d(==)j("--"\))g({)95 b(#)47 b(all)g(done)772 408 y(Optind++)772 518 y(_opti)f(=)i(0)772 628 y(return)e(-1)581 737 y(})h(else)g(if)g(\(argv[Optind])d(!~)k (/^-[^:)e(\\t\\n\\f\\r\\v\\b]/\))d({)772 847 y(_opti)j(=)i(0)772 956 y(return)e(-1)581 1066 y(})275 1207 y FB(The)36 b(next)i(thing)f (to)h(c)m(hec)m(k)h(for)e(is)g(the)g(end)g(of)g(the)h(options.)61 b(A)38 b(`)p Fz(--)p FB(')f(ends)f(the)h(command-line)150 1316 y(options,)27 b(as)f(do)s(es)g(an)m(y)g(command-line)g(argumen)m (t)g(that)g(do)s(es)g(not)g(b)s(egin)f(with)g(a)i(`)p Fz(-)p FB('.)39 b Fz(Optind)24 b FB(is)i(used)150 1426 y(to)38 b(step)f(through)f(the)i(arra)m(y)f(of)h(command-line)f (argumen)m(ts;)k(it)d(retains)f(its)h(v)-5 b(alue)37 b(across)h(calls)g(to)150 1536 y Fz(getopt)p FB(,)29 b(b)s(ecause)h(it)h(is)g(a)f(global)i(v)-5 b(ariable.)275 1677 y(The)22 b(regular)h(expression)g(that)g(is)g(used,)h Fz(/^-[^:)29 b(\\t\\n\\f\\r\\v\\b]/)l FB(,)24 b(is)f(p)s(erhaps)e(a)j (bit)f(of)g(o)m(v)m(erkill;)150 1786 y(it)i(c)m(hec)m(ks)h(for)e(a)h(`) p Fz(-)p FB(')g(follo)m(w)m(ed)h(b)m(y)e(an)m(ything)h(that)g(is)g(not) g(whitespace)g(and)f(not)h(a)g(colon.)39 b(If)24 b(the)h(curren)m(t)150 1896 y(command-line)h(argumen)m(t)h(do)s(es)e(not)h(matc)m(h)h(this)e (pattern,)j(it)e(is)g(not)g(an)f(option,)j(and)d(it)h(ends)f(option)150 2005 y(pro)s(cessing:)581 2146 y Fz(if)47 b(\(_opti)f(==)h(0\))772 2256 y(_opti)f(=)i(2)581 2365 y(thisopt)e(=)h(substr\(argv[Optind],)42 b(_opti,)47 b(1\))581 2475 y(Optopt)f(=)h(thisopt)581 2585 y(i)g(=)h(index\(options,)c(thisopt\))581 2694 y(if)j(\(i)g(==)g (0\))h({)772 2804 y(if)f(\(Opterr\))963 2913 y(printf\("\045c)e(--)i (invalid)f(option\\n",)2013 3023 y(thisopt\))f(>)j("/dev/stderr")772 3133 y(if)f(\(_opti)f(>=)h(length\(argv[Optind]\)\))42 b({)963 3242 y(Optind++)963 3352 y(_opti)k(=)i(0)772 3461 y(})f(else)963 3571 y(_opti++)772 3680 y(return)f("?")581 3790 y(})275 3931 y FB(The)66 b Fz(_opti)g FB(v)-5 b(ariable)67 b(trac)m(ks)h(the)f(p)s(osition)g(in)g(the)g(curren)m(t)g(command-line) g(argumen)m(t)150 4041 y(\()p Fz(argv[Optind])p FB(\).)48 b(If)33 b(m)m(ultiple)h(options)g(are)g(group)s(ed)e(together)j(with)f (one)f(`)p Fz(-)p FB(')h(\(e.g.,)i(`)p Fz(-abx)p FB('\),)f(it)f(is)150 4150 y(necessary)d(to)g(return)e(them)h(to)i(the)e(user)g(one)h(at)g(a) f(time.)275 4291 y(If)35 b Fz(_opti)g FB(is)h(equal)g(to)h(zero,)h(it)f (is)f(set)g(to)h(t)m(w)m(o,)i(whic)m(h)d(is)g(the)g(index)g(in)f(the)h (string)g(of)h(the)f(next)150 4401 y(c)m(haracter)30 b(to)f(lo)s(ok)g(at)g(\(w)m(e)g(skip)f(the)g(`)p Fz(-)p FB(',)h(whic)m(h)f(is)g(at)h(p)s(osition)g(one\).)40 b(The)28 b(v)-5 b(ariable)29 b Fz(thisopt)d FB(holds)150 4510 y(the)31 b(c)m(haracter,)h(obtained)f(with)f Fz(substr)p FB(.)39 b(It)30 b(is)h(sa)m(v)m(ed)g(in)f Fz(Optopt)f FB(for)h(the)g(main)h(program)f(to)h(use.)275 4651 y(If)23 b Fz(thisopt)f FB(is)i(not)g(in)g(the)g Fz(options)e FB(string,)k(then)d(it)i(is)f(an)g(in)m(v)-5 b(alid)24 b(option.)40 b(If)23 b Fz(Opterr)f FB(is)i(nonzero,)150 4761 y Fz(getopt)32 b FB(prin)m(ts)h(an)h(error)f(message)i(on)e(the)h (standard)f(error)g(that)i(is)e(similar)h(to)h(the)f(message)g(from)150 4870 y(the)d(C)f(v)m(ersion)g(of)h Fz(getopt)p FB(.)275 5011 y(Because)j(the)e(option)h(is)g(in)m(v)-5 b(alid,)34 b(it)f(is)g(necessary)g(to)g(skip)g(it)g(and)f(mo)m(v)m(e)i(on)e(to)i (the)f(next)f(option)150 5121 y(c)m(haracter.)74 b(If)40 b Fz(_opti)f FB(is)i(greater)h(than)f(or)g(equal)g(to)h(the)f(length)g (of)g(the)g(curren)m(t)f(command-line)150 5230 y(argumen)m(t,)33 b(it)g(is)f(necessary)h(to)g(mo)m(v)m(e)g(on)f(to)h(the)f(next)h (argumen)m(t,)g(so)f Fz(Optind)f FB(is)h(incremen)m(ted)h(and)150 5340 y Fz(_opti)c FB(is)h(reset)h(to)g(zero.)42 b(Otherwise,)30 b Fz(Optind)f FB(is)h(left)h(alone)h(and)e Fz(_opti)e FB(is)j(merely)g(incremen)m(ted.)p eop end %%Page: 200 212 TeXDict begin 200 211 bop 150 -116 a FB(200)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(In)k(an)m(y)h(case,)j(b)s(ecause)d(the)g(option)h(is)f(in)m(v) -5 b(alid,)37 b Fz(getopt)c FB(returns)h(`)p Fz(?)p FB('.)55 b(The)35 b(main)g(program)g(can)150 408 y(examine)f Fz(Optopt)d FB(if)i(it)h(needs)e(to)i(kno)m(w)f(what)g(the)g(in)m(v)-5 b(alid)34 b(option)f(letter)h(actually)h(is.)49 b(Con)m(tin)m(uing)150 518 y(on:)581 664 y Fz(if)e(\(substr\(options,)c(i)48 b(+)f(1,)h(1\))f(==)g(":"\))g({)772 774 y(#)g(get)g(option)f(argument) 772 883 y(if)h(\(length\(substr\(argv[Opti)o(nd],)41 b(_opti)46 b(+)i(1\)\))f(>)g(0\))963 993 y(Optarg)f(=)h (substr\(argv[Optind],)c(_opti)j(+)h(1\))772 1103 y(else)963 1212 y(Optarg)f(=)h(argv[++Optind])772 1322 y(_opti)f(=)i(0)581 1431 y(})f(else)772 1541 y(Optarg)f(=)h("")275 1687 y FB(If)f(the)h(option)g(requires)f(an)h(argumen)m(t,)k(the)c(option)g (letter)h(is)f(follo)m(w)m(ed)h(b)m(y)f(a)g(colon)g(in)g(the)150 1797 y Fz(options)34 b FB(string.)56 b(If)35 b(there)h(are)g(remaining) g(c)m(haracters)h(in)e(the)h(curren)m(t)f(command-line)h(argumen)m(t) 150 1906 y(\()p Fz(argv[Optind])p FB(\),)g(then)h(the)g(rest)g(of)g (that)g(string)g(is)g(assigned)g(to)h Fz(Optarg)p FB(.)58 b(Otherwise,)39 b(the)e(next)150 2016 y(command-line)i(argumen)m(t)h (is)f(used)f(\(`)p Fz(-xFOO)p FB(')g(v)m(ersus)h(`)p Fz(-x)30 b(FOO)o FB('\).)67 b(In)38 b(either)i(case,)i Fz(_opti)37 b FB(is)i(reset)150 2125 y(to)31 b(zero,)h(b)s(ecause)f (there)g(are)g(no)f(more)h(c)m(haracters)h(left)f(to)h(examine)f(in)f (the)h(curren)m(t)f(command-line)150 2235 y(argumen)m(t.)41 b(Con)m(tin)m(uing:)581 2381 y Fz(if)47 b(\(_opti)f(==)h(0)h(||)f (_opti)f(>=)i(length\(argv[Optind]\)\))42 b({)772 2491 y(Optind++)772 2600 y(_opti)k(=)i(0)581 2710 y(})f(else)772 2819 y(_opti++)581 2929 y(return)f(thisopt)390 3039 y(})275 3185 y FB(Finally)-8 b(,)49 b(if)44 b Fz(_opti)f FB(is)h(either)h(zero) g(or)f(greater)i(than)e(the)g(length)h(of)f(the)h(curren)m(t)f (command-)150 3294 y(line)f(argumen)m(t,)k(it)d(means)f(this)g(elemen)m (t)h(in)f Fz(argv)f FB(is)h(through)g(b)s(eing)f(pro)s(cessed,)k(so)e Fz(Optind)d FB(is)150 3404 y(incremen)m(ted)36 b(to)g(p)s(oin)m(t)f(to) h(the)g(next)f(elemen)m(t)i(in)e Fz(argv)p FB(.)54 b(If)35 b(neither)g(condition)h(is)f(true,)i(then)e(only)150 3513 y Fz(_opti)e FB(is)i(incremen)m(ted,)i(so)e(that)h(the)f(next)g (option)g(letter)h(can)g(b)s(e)e(pro)s(cessed)g(on)h(the)g(next)g(call) h(to)150 3623 y Fz(getopt)p FB(.)275 3769 y(The)c Fz(BEGIN)g FB(rule)h(initializes)i(b)s(oth)e Fz(Opterr)f FB(and)g Fz(Optind)g FB(to)i(one.)49 b Fz(Opterr)32 b FB(is)h(set)h(to)g(one,)h (since)150 3879 y(the)41 b(default)f(b)s(eha)m(vior)h(is)f(for)h Fz(getopt)d FB(to)j(prin)m(t)g(a)f(diagnostic)i(message)g(up)s(on)d (seeing)i(an)f(in)m(v)-5 b(alid)150 3988 y(option.)41 b Fz(Optind)27 b FB(is)h(set)i(to)f(one,)h(since)f(there's)g(no)f (reason)h(to)h(lo)s(ok)f(at)h(the)f(program)f(name,)h(whic)m(h)g(is)150 4098 y(in)h Fz(ARGV[0])p FB(:)390 4244 y Fz(BEGIN)46 b({)581 4354 y(Opterr)g(=)h(1)191 b(#)48 b(default)d(is)j(to)f (diagnose)581 4463 y(Optind)f(=)h(1)191 b(#)48 b(skip)e(ARGV[0])581 4682 y(#)h(test)g(program)581 4792 y(if)g(\(_getopt_test\))d({)772 4902 y(while)i(\(\(_go_c)g(=)h(getopt\(ARGC,)e(ARGV,)h("ab:cd"\)\))g (!=)h(-1\))963 5011 y(printf\("c)e(=)i(<\045c>,)g(optarg)f(=)h (<\045s>\\n",)2251 5121 y(_go_c,)f(Optarg\))772 5230 y(printf\("non-option)d(arguments:\\n"\))772 5340 y(for)k(\(;)g(Optind) f(<)h(ARGC;)g(Optind++\))p eop end %%Page: 201 213 TeXDict begin 201 212 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(201)963 299 y Fz(printf\("\\tARGV[\045d])43 b(=)k(<\045s>\\n",) 2108 408 y(Optind,)f(ARGV[Optind]\))581 518 y(})390 628 y(})275 768 y FB(The)35 b(rest)h(of)h(the)f Fz(BEGIN)e FB(rule)i(is)g(a)h(simple)f(test)h(program.)57 b(Here)37 b(is)f(the)g(result)g(of)g(t)m(w)m(o)i(sample)150 878 y(runs)29 b(of)h(the)h(test)g(program:)390 1019 y Fz($)47 b(awk)g(-f)h(getopt.awk)d(-v)i(_getopt_test=1)d(--)j(-a)g(-cbARG)f(bax) h(-x)410 1132 y Fy(a)533 1128 y Fz(c)h(=)f(<a>,)g(optarg)f(=)h(<>)410 1242 y Fy(a)533 1238 y Fz(c)h(=)f(<c>,)g(optarg)f(=)h(<>)410 1352 y Fy(a)533 1348 y Fz(c)h(=)f(<b>,)g(optarg)f(=)h(<ARG>)410 1461 y Fy(a)533 1457 y Fz(non-option)e(arguments:)410 1571 y Fy(a)915 1567 y Fz(ARGV[3])h(=)h(<bax>)410 1680 y Fy(a)915 1676 y Fz(ARGV[4])f(=)h(<-x>)390 1895 y($)g(awk)g(-f)h (getopt.awk)d(-v)i(_getopt_test=1)d(--)j(-a)g(-x)g(--)g(xyz)g(abc)410 2009 y Fy(a)533 2005 y Fz(c)h(=)f(<a>,)g(optarg)f(=)h(<>)p 410 2057 217 5 v 410 2137 5 81 v 433 2118 a Fl(erro)m(r)p 622 2137 V 410 2142 217 5 v 724 2115 a Fz(x)h(--)f(invalid)f(option)410 2228 y Fy(a)533 2224 y Fz(c)i(=)f(<?>,)g(optarg)f(=)h(<>)410 2338 y Fy(a)533 2334 y Fz(non-option)e(arguments:)410 2447 y Fy(a)915 2443 y Fz(ARGV[4])h(=)h(<xyz>)410 2557 y Fy(a)915 2553 y Fz(ARGV[5])f(=)h(<abc>)275 2694 y FB(In)32 b(b)s(oth)g(runs,)g(the)h(\014rst)f(`)p Fz(--)p FB(')h(terminates)g (the)g(argumen)m(ts)h(to)f Fz(awk)p FB(,)g(so)g(that)h(it)f(do)s(es)f (not)h(try)g(to)150 2803 y(in)m(terpret)38 b(the)h(`)p Fz(-a)p FB(',)h(etc.,)h(as)e(its)f(o)m(wn)g(options.)64 b(Sev)m(eral)39 b(of)f(the)g(sample)h(programs)e(presen)m(ted)h(in)150 2913 y(Chapter)30 b(13)h([Practical)i Fz(awk)c FB(Programs],)i(page)g (210,)h(use)e Fz(getopt)f FB(to)i(pro)s(cess)f(their)g(argumen)m(ts.) 150 3155 y FA(12.5)68 b(Reading)46 b(the)g(User)f(Database)150 3314 y FB(The)32 b Fz(PROCINFO)e FB(arra)m(y)j(\(see)h(Section)f(6.5)h ([Built-in)g(V)-8 b(ariables],)34 b(page)g(107\))g(pro)m(vides)f (access)g(to)h(the)150 3424 y(curren)m(t)39 b(user's)g(real)i(and)e (e\013ectiv)m(e)j(user)d(and)g(group)g(ID)h(n)m(um)m(b)s(ers,)h(and)e (if)g(a)m(v)-5 b(ailable,)45 b(the)40 b(user's)150 3533 y(supplemen)m(tary)34 b(group)g(set.)55 b(Ho)m(w)m(ev)m(er,)38 b(b)s(ecause)c(these)i(are)f(n)m(um)m(b)s(ers,)f(they)h(do)g(not)g(pro) m(vide)g(v)m(ery)150 3643 y(useful)45 b(information)g(to)h(the)g(a)m(v) m(erage)i(user.)85 b(There)45 b(needs)g(to)h(b)s(e)f(some)h(w)m(a)m(y)g (to)g(\014nd)e(the)i(user)150 3753 y(information)32 b(asso)s(ciated)h (with)f(the)g(user)f(and)g(group)h(ID)g(n)m(um)m(b)s(ers.)44 b(This)31 b(section)i(presen)m(ts)e(a)i(suite)150 3862 y(of)i(functions)f(for)h(retrieving)g(information)g(from)f(the)h(user)f (database.)55 b(See)35 b(Section)g(12.6)h([Reading)150 3972 y(the)25 b(Group)f(Database],)k(page)d(205,)j(for)c(a)h(similar)g (suite)g(that)h(retriev)m(es)f(information)g(from)g(the)f(group)150 4081 y(database.)275 4222 y(The)34 b(POSIX)g(standard)g(do)s(es)h(not)g (de\014ne)f(the)h(\014le)h(where)e(user)g(information)i(is)f(k)m(ept.) 55 b(Instead,)150 4332 y(it)35 b(pro)m(vides)f(the)g Fz(<pwd.h>)e FB(header)i(\014le)g(and)f(sev)m(eral)i(C)f(language)h (subroutines)e(for)h(obtaining)h(user)150 4441 y(information.)40 b(The)27 b(primary)g(function)g(is)h Fz(getpwent)p FB(,)e(for)i(\\get)h (passw)m(ord)e(en)m(try)-8 b(.")41 b(The)27 b(\\passw)m(ord")150 4551 y(comes)36 b(from)f(the)h(original)g(user)f(database)h(\014le,)h (`)p Fz(/etc/passwd)p FB(',)e(whic)m(h)g(stores)h(user)e(information,) 150 4660 y(along)d(with)f(the)h(encrypted)f(passw)m(ords)g(\(hence)g (the)h(name\).)275 4801 y(While)22 b(an)f Fz(awk)f FB(program)h(could)h (simply)e(read)h(`)p Fz(/etc/passwd)p FB(')e(directly)-8 b(,)25 b(this)c(\014le)g(ma)m(y)h(not)g(con)m(tain)150 4911 y(complete)32 b(information)f(ab)s(out)f(the)h(system's)g(set)g (of)g(users.)2277 4878 y Fo(8)2355 4911 y FB(T)-8 b(o)31 b(b)s(e)f(sure)g(y)m(ou)h(are)g(able)h(to)f(pro)s(duce)150 5020 y(a)38 b(readable)h(and)f(complete)h(v)m(ersion)g(of)f(the)g(user) g(database,)j(it)d(is)h(necessary)f(to)h(write)f(a)h(small)f(C)150 5130 y(program)43 b(that)i(calls)f Fz(getpwent)p FB(.)79 b Fz(getpwent)41 b FB(is)j(de\014ned)e(as)i(returning)f(a)h(p)s(oin)m (ter)f(to)i(a)f Fz(struct)p 150 5241 1200 4 v 199 5308 a Fo(8)275 5340 y Fn(It)25 b(is)h(often)g(the)f(case)i(that)e(passw)n (ord)i(information)g(is)f(stored)g(in)g(a)g(net)n(w)n(ork)f(database.)p eop end %%Page: 202 214 TeXDict begin 202 213 bop 150 -116 a FB(202)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz(passwd)p FB(.)70 b(Eac)m(h)42 b(time)f(it)h(is)f(called,)k(it) c(returns)e(the)i(next)g(en)m(try)h(in)e(the)h(database.)73 b(When)41 b(there)150 408 y(are)33 b(no)f(more)g(en)m(tries,)h(it)g (returns)e Fz(NULL)p FB(,)h(the)g(n)m(ull)g(p)s(oin)m(ter.)46 b(When)32 b(this)g(happ)s(ens,)f(the)h(C)g(program)150 518 y(should)h(call)i Fz(endpwent)d FB(to)j(close)g(the)f(database.)53 b(F)-8 b(ollo)m(wing)36 b(is)e Fz(pwcat)p FB(,)g(a)g(C)g(program)f (that)i(\\cats")150 628 y(the)c(passw)m(ord)e(database:)390 780 y Fz(/*)438 890 y(*)47 b(pwcat.c)438 999 y(*)438 1109 y(*)g(Generate)f(a)h(printable)e(version)h(of)h(the)g(password)f (database)438 1219 y(*/)390 1438 y(#include)g(<stdio.h>)390 1547 y(#include)g(<pwd.h>)390 1876 y(int)390 1986 y(main\(argc,)f (argv\))390 2095 y(int)i(argc;)390 2205 y(char)g(**argv;)390 2315 y({)581 2424 y(struct)f(passwd)g(*p;)581 2643 y(while)g(\(\(p)h(=) h(getpwent\(\)\))c(!=)k(NULL\))772 2753 y (printf\("\045s:\045s:\045ld:\045ld:\045s)o(:\045s)o(:\045s\\)o(n",)963 2862 y(p->pw_name,)c(p->pw_passwd,)h(\(long\))h(p->pw_uid,)963 2972 y(\(long\))g(p->pw_gid,)f(p->pw_gecos,)f(p->pw_dir,)h (p->pw_shell\);)581 3191 y(endpwent\(\);)581 3301 y(return)h(0;)390 3410 y(})275 3563 y FB(If)36 b(y)m(ou)i(don't)f(understand)f(C,)h (don't)g(w)m(orry)g(ab)s(out)g(it.)62 b(The)37 b(output)g(from)g Fz(pwcat)f FB(is)h(the)h(user)150 3673 y(database,)31 b(in)f(the)g(traditional)i(`)p Fz(/etc/passwd)p FB(')27 b(format)j(of)g(colon-separated)i(\014elds.)40 b(The)30 b(\014elds)f(are:)150 3825 y(Login)i(name)470 b(The)30 b(user's)f(login)j(name.)150 4043 y(Encrypted)d(passw)m(ord)130 b(The)20 b(user's)g(encrypted)g(passw)m(ord.)37 b(This)20 b(ma)m(y)h(not)g(b)s(e)f(a)m(v)-5 b(ail-)1086 4152 y(able)31 b(on)f(some)h(systems.)150 4370 y(User-ID)624 b(The)30 b(user's)f(n)m(umeric)i(user)e(ID)i(n)m(um)m(b)s(er.)150 4588 y(Group-ID)550 b(The)30 b(user's)f(n)m(umeric)i(group)e(ID)i(n)m (um)m(b)s(er.)150 4805 y(F)-8 b(ull)31 b(name)541 b(The)34 b(user's)h(full)g(name,)i(and)e(p)s(erhaps)e(other)j(information)1086 4915 y(asso)s(ciated)c(with)e(the)g(user.)150 5133 y(Home)h(directory) 320 b(The)44 b(user's)h(login)h(\(or)g(\\home"\))g(directory)g (\(familiar)g(to)1086 5242 y(shell)30 b(programmers)g(as)h Fz($HOME)p FB(\).)p eop end %%Page: 203 215 TeXDict begin 203 214 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(203)150 299 y(Login)31 b(shell)505 b(The)32 b(program)g(that)i(is) e(run)f(when)h(the)h(user)f(logs)h(in.)48 b(This)1086 408 y(is)30 b(usually)g(a)h(shell,)g(suc)m(h)f(as)h Fz(bash)p FB(.)275 541 y(A)f(few)g(lines)h(represen)m(tativ)m(e)h(of)f Fz(pwcat)p FB('s)e(output)h(are)g(as)h(follo)m(ws:)390 680 y Fz($)47 b(pwcat)410 793 y Fy(a)533 789 y Fz (root:3Ov02d5VaUPB6:0:1:Op)o(erat)o(or:)o(/:/b)o(in/s)o(h)410 903 y Fy(a)533 899 y Fz(nobody:*:65534:65534::/:)410 1013 y Fy(a)533 1009 y Fz(daemon:*:1:1::/:)410 1122 y Fy(a)533 1118 y Fz(sys:*:2:2::/:/bin/csh)410 1232 y Fy(a)533 1228 y Fz(bin:*:3:3::/bin:)410 1341 y Fy(a)533 1337 y Fz(arnold:xyzzy:2076:10:Arno)o(ld)42 b(Robbins:/home/arnold:/b)o(in/)o (sh)410 1451 y Fy(a)533 1447 y Fz(miriam:yxaay:112:10:Miria)o(m)g (Robbins:/home/miriam:/bi)o(n/s)o(h)410 1560 y Fy(a)533 1556 y Fz(andy:abcca2:113:10:Andy)g(Jacobs:/home/andy:/bin/)o(sh)390 1666 y(...)275 1804 y FB(With)36 b(that)g(in)m(tro)s(duction,)i(follo)m (wing)f(is)f(a)g(group)f(of)h(functions)f(for)h(getting)h(user)e (information.)150 1914 y(There)30 b(are)h(sev)m(eral)g(functions)f (here,)h(corresp)s(onding)e(to)i(the)g(C)f(functions)g(of)g(the)h(same) g(names:)390 2052 y Fz(#)47 b(passwd.awk)e(---)i(access)f(password)g (file)h(information)390 2271 y(BEGIN)f({)581 2381 y(#)h(tailor)f(this)h (to)g(suit)g(your)g(system)581 2491 y(_pw_awklib)e(=)i ("/usr/local/libexec/awk/")390 2600 y(})390 2819 y(function)f (_pw_init\()188 b(oldfs,)46 b(oldrs,)g(olddol0,)g(pwcat,)g(using_fw\)) 390 2929 y({)581 3039 y(if)h(\(_pw_inited\))772 3148 y(return)581 3367 y(oldfs)f(=)i(FS)581 3477 y(oldrs)e(=)i(RS)581 3587 y(olddol0)e(=)h($0)581 3696 y(using_fw)e(=)j(\(PROCINFO["FS"])c (==)j("FIELDWIDTHS"\))581 3806 y(FS)g(=)h(":")581 3915 y(RS)f(=)h("\\n")581 4134 y(pwcat)e(=)i(_pw_awklib)d("pwcat")581 4244 y(while)h(\(\(pwcat)g(|)i(getline\))d(>)j(0\))f({)772 4354 y(_pw_byname[$1])d(=)j($0)772 4463 y(_pw_byuid[$3])d(=)j($0)772 4573 y(_pw_bycount[++_pw_total])41 b(=)47 b($0)581 4682 y(})581 4792 y(close\(pwcat\))581 4902 y(_pw_count)e(=)j(0)581 5011 y(_pw_inited)d(=)i(1)581 5121 y(FS)g(=)h(oldfs)581 5230 y(if)f(\(using_fw\))772 5340 y(FIELDWIDTHS)e(=)i(FIELDWIDTHS)p eop end %%Page: 204 216 TeXDict begin 204 215 bop 150 -116 a FB(204)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)581 299 y Fz(RS)47 b(=)h(oldrs)581 408 y($0)f(=)h(olddol0)390 518 y(})275 661 y FB(The)59 b Fz(BEGIN)g FB(rule)i(sets)f(a)h(priv)-5 b(ate)61 b(v)-5 b(ariable)61 b(to)h(the)e(directory)h(where)f Fz(pwcat)f FB(is)i(stored.)150 770 y(Because)54 b(it)f(is)f(used)g(to)h (help)f(out)g(an)h Fz(awk)e FB(library)h(routine,)58 b(w)m(e)53 b(ha)m(v)m(e)h(c)m(hosen)f(to)g(put)e(it)i(in)150 880 y(`)p Fz(/usr/local/libexec/awk)p FB(';)33 b(ho)m(w)m(ev)m(er,)38 b(y)m(ou)e(migh)m(t)h(w)m(an)m(t)f(it)g(to)h(b)s(e)e(in)g(a)h (di\013eren)m(t)g(directory)g(on)150 989 y(y)m(our)30 b(system.)275 1132 y(The)35 b(function)h Fz(_pw_init)e FB(k)m(eeps)j(three)f(copies)h(of)g(the)f(user)f(information)i(in)f (three)g(asso)s(ciativ)m(e)150 1241 y(arra)m(ys.)i(The)21 b(arra)m(ys)h(are)g(indexed)e(b)m(y)i(username)f(\()p Fz(_pw_byname)p FB(\),)g(b)m(y)g(user)g(ID)g(n)m(um)m(b)s(er)f(\()p Fz(_pw_byuid)p FB(\),)150 1351 y(and)28 b(b)m(y)h(order)f(of)h(o)s (ccurrence)g(\()p Fz(_pw_bycount)p FB(\).)38 b(The)28 b(v)-5 b(ariable)29 b Fz(_pw_inited)d FB(is)j(used)f(for)h (e\016ciency;)150 1461 y Fz(_pw_init)f FB(needs)i(only)h(to)g(b)s(e)e (called)j(once.)275 1603 y(Because)38 b(this)f(function)f(uses)h Fz(getline)d FB(to)k(read)f(information)g(from)g Fz(pwcat)p FB(,)g(it)g(\014rst)f(sa)m(v)m(es)j(the)150 1713 y(v)-5 b(alues)39 b(of)h Fz(FS)p FB(,)g Fz(RS)p FB(,)h(and)e Fz($0)p FB(.)66 b(It)39 b(notes)h(in)e(the)i(v)-5 b(ariable)40 b Fz(using_fw)c FB(whether)j(\014eld)f(splitting)i(with)150 1822 y Fz(FIELDWIDTHS)25 b FB(is)j(in)g(e\013ect)i(or)e(not.)40 b(Doing)29 b(so)g(is)f(necessary)-8 b(,)29 b(since)g(these)f(functions) g(could)g(b)s(e)g(called)150 1932 y(from)42 b(an)m(ywhere)g(within)f(a) h(user's)g(program,)j(and)c(the)h(user)g(ma)m(y)g(ha)m(v)m(e)i(his)d (or)h(her)g(o)m(wn)g(w)m(a)m(y)h(of)150 2041 y(splitting)31 b(records)f(and)g(\014elds.)275 2184 y(The)21 b Fz(using_fw)f FB(v)-5 b(ariable)23 b(c)m(hec)m(ks)h Fz(PROCINFO["FS"])p FB(,)c(whic)m(h)i(is)g Fz("FIELDWIDTHS")c FB(if)k(\014eld)g(splitting) 150 2293 y(is)j(b)s(eing)g(done)h(with)f Fz(FIELDWIDTHS)p FB(.)36 b(This)25 b(mak)m(es)h(it)g(p)s(ossible)f(to)h(restore)g(the)g (correct)g(\014eld-splitting)150 2403 y(mec)m(hanism)h(later.)40 b(The)26 b(test)h(can)g(only)f(b)s(e)g(true)g(for)g Fz(gawk)p FB(.)38 b(It)26 b(is)h(false)g(if)f(using)g Fz(FS)f FB(or)i(on)f(some)h (other)150 2513 y Fz(awk)i FB(implemen)m(tation.)275 2655 y(The)24 b(main)h(part)g(of)g(the)h(function)e(uses)h(a)h(lo)s(op) f(to)h(read)f(database)h(lines,)g(split)f(the)h(line)f(in)m(to)h (\014elds,)150 2765 y(and)d(then)f(store)i(the)g(line)f(in)m(to)h(eac)m (h)h(arra)m(y)e(as)h(necessary)-8 b(.)39 b(When)23 b(the)g(lo)s(op)g (is)h(done,)g Fz(_pw_init)d FB(cleans)150 2874 y(up)29 b(b)m(y)g(closing)i(the)f(pip)s(eline,)g(setting)h Fz(_pw_inited)c FB(to)j(one,)h(and)e(restoring)h Fz(FS)f FB(\(and)h Fz(FIELDWIDTHS)150 2984 y FB(if)g(necessary\),)i Fz(RS)p FB(,)e(and)f Fz($0)p FB(.)41 b(The)29 b(use)i(of)f Fz(_pw_count)e FB(is)i(explained)h (shortly)-8 b(.)275 3126 y(The)36 b Fz(getpwnam)f FB(function)i(tak)m (es)h(a)g(username)f(as)g(a)g(string)g(argumen)m(t.)62 b(If)37 b(that)g(user)g(is)g(in)g(the)150 3236 y(database,)32 b(it)e(returns)g(the)g(appropriate)h(line.)41 b(Otherwise,)30 b(it)h(returns)e(the)i(n)m(ull)f(string:)390 3378 y Fz(function)46 b(getpwnam\(name\))390 3488 y({)581 3598 y(_pw_init\(\))581 3707 y(if)h(\(name)f(in)i(_pw_byname\))772 3817 y(return)e (_pw_byname[name])581 3926 y(return)g("")390 4036 y(})275 4178 y FB(Similarly)-8 b(,)28 b(the)f Fz(getpwuid)e FB(function)h(tak)m (es)j(a)e(user)f(ID)h(n)m(um)m(b)s(er)f(argumen)m(t.)40 b(If)27 b(that)g(user)f(n)m(um)m(b)s(er)150 4288 y(is)k(in)g(the)h (database,)h(it)e(returns)g(the)g(appropriate)h(line.)41 b(Otherwise,)30 b(it)h(returns)e(the)i(n)m(ull)f(string:)390 4430 y Fz(function)46 b(getpwuid\(uid\))390 4540 y({)581 4650 y(_pw_init\(\))581 4759 y(if)h(\(uid)g(in)g(_pw_byuid\))772 4869 y(return)f(_pw_byuid[uid])581 4978 y(return)g("")390 5088 y(})275 5230 y FB(The)30 b Fz(getpwent)e FB(function)i(simply)g (steps)g(through)g(the)h(database,)g(one)g(en)m(try)g(at)g(a)g(time.)42 b(It)30 b(uses)150 5340 y Fz(_pw_count)e FB(to)j(trac)m(k)h(its)e (curren)m(t)g(p)s(osition)h(in)f(the)h Fz(_pw_bycount)c FB(arra)m(y:)p eop end %%Page: 205 217 TeXDict begin 205 216 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(205)390 299 y Fz(function)46 b(getpwent\(\))390 408 y({)581 518 y(_pw_init\(\))581 628 y(if)h(\(_pw_count)e(<)j (_pw_total\))772 737 y(return)e(_pw_bycount[++_pw_count])581 847 y(return)g("")390 956 y(})275 1089 y FB(The)30 b Fz(endpwent)f FB(function)i(resets)g Fz(_pw_count)e FB(to)j(zero,)g(so) f(that)h(subsequen)m(t)e(calls)i(to)g Fz(getpwent)150 1198 y FB(start)f(o)m(v)m(er)h(again:)390 1331 y Fz(function)46 b(endpwent\(\))390 1441 y({)581 1550 y(_pw_count)f(=)j(0)390 1660 y(})275 1792 y FB(A)30 b(conscious)h(design)f(decision)h(in)f (this)h(suite)g(w)m(as)f(made)h(that)g(eac)m(h)g(subroutine)f(calls)h Fz(_pw_init)150 1902 y FB(to)24 b(initialize)j(the)c(database)i(arra)m (ys.)39 b(The)23 b(o)m(v)m(erhead)i(of)f(running)e(a)i(separate)h(pro)s (cess)e(to)h(generate)i(the)150 2011 y(user)g(database,)j(and)e(the)g (I/O)g(to)h(scan)f(it,)i(are)e(only)h(incurred)e(if)h(the)g(user's)f (main)h(program)g(actually)150 2121 y(calls)c(one)e(of)h(these)g (functions.)37 b(If)21 b(this)g(library)g(\014le)h(is)f(loaded)h(along) h(with)e(a)g(user's)g(program,)i(but)e(none)150 2231 y(of)35 b(the)f(routines)h(are)g(ev)m(er)g(called,)i(then)d(there)h(is) f(no)g(extra)i(run)m(time)e(o)m(v)m(erhead.)54 b(\(The)35 b(alternativ)m(e)150 2340 y(is)c(mo)m(v)m(e)h(the)f(b)s(o)s(dy)e(of)i Fz(_pw_init)d FB(in)m(to)k(a)f Fz(BEGIN)e FB(rule,)i(whic)m(h)f(alw)m (a)m(ys)i(runs)d Fz(pwcat)p FB(.)40 b(This)30 b(simpli\014es)150 2450 y(the)h(co)s(de)f(but)g(runs)f(an)h(extra)h(pro)s(cess)f(that)h (ma)m(y)g(nev)m(er)g(b)s(e)e(needed.\))275 2582 y(In)j(turn,)h(calling) h Fz(_pw_init)d FB(is)i(not)g(to)s(o)h(exp)s(ensiv)m(e,)g(b)s(ecause)f (the)g Fz(_pw_inited)e FB(v)-5 b(ariable)33 b(k)m(eeps)150 2692 y(the)38 b(program)f(from)h(reading)g(the)f(data)i(more)f(than)f (once.)64 b(If)37 b(y)m(ou)h(are)g(w)m(orried)g(ab)s(out)f(squeezing) 150 2801 y(ev)m(ery)c(last)g(cycle)g(out)g(of)f(y)m(our)g Fz(awk)f FB(program,)i(the)f(c)m(hec)m(k)i(of)e Fz(_pw_inited)e FB(could)i(b)s(e)f(mo)m(v)m(ed)i(out)g(of)150 2911 y Fz(_pw_init)27 b FB(and)i(duplicated)g(in)g(all)i(the)e(other)h (functions.)40 b(In)28 b(practice,)k(this)d(is)g(not)h(necessary)-8 b(,)31 b(since)150 3021 y(most)g Fz(awk)e FB(programs)h(are)h(I/O-b)s (ound,)e(and)h(it)h(clutters)g(up)e(the)h(co)s(de.)275 3153 y(The)g Fz(id)g FB(program)h(in)f(Section)i(13.2.3)h([Prin)m(ting) f(out)f(User)f(Information],)i(page)f(219,)i(uses)d(these)150 3263 y(functions.)150 3491 y FA(12.6)68 b(Reading)46 b(the)g(Group)e(Database)150 3650 y FB(Muc)m(h)36 b(of)f(the)h (discussion)f(presen)m(ted)h(in)f(Section)h(12.5)h([Reading)g(the)e (User)h(Database],)j(page)d(201,)150 3760 y(applies)31 b(to)h(the)f(group)f(database)i(as)f(w)m(ell.)44 b(Although)31 b(there)g(has)g(traditionally)h(b)s(een)f(a)g(w)m(ell-kno)m(wn)150 3870 y(\014le)j(\(`)p Fz(/etc/group)p FB('\))f(in)h(a)g(w)m(ell-kno)m (wn)h(format,)h(the)e(POSIX)f(standard)h(only)g(pro)m(vides)g(a)g(set)h (of)f(C)150 3979 y(library)f(routines)f(\()p Fz(<grp.h>)g FB(and)g Fz(getgrent)p FB(\))f(for)i(accessing)h(the)f(information.)49 b(Ev)m(en)33 b(though)g(this)150 4089 y(\014le)38 b(ma)m(y)g(exist,)j (it)d(lik)m(ely)i(do)s(es)d(not)h(ha)m(v)m(e)h(complete)g(information.) 64 b(Therefore,)39 b(as)f(with)g(the)g(user)150 4198 y(database,)d(it)f(is)f(necessary)h(to)g(ha)m(v)m(e)g(a)g(small)g(C)f (program)g(that)h(generates)g(the)g(group)e(database)j(as)150 4308 y(its)c(output.)275 4440 y Fz(grcat)p FB(,)e(a)h(C)g(program)h (that)g(\\cats")h(the)e(group)g(database,)i(is)e(as)h(follo)m(ws:)390 4573 y Fz(/*)438 4682 y(*)47 b(grcat.c)438 4792 y(*)438 4902 y(*)g(Generate)f(a)h(printable)e(version)h(of)h(the)g(group)g (database)438 5011 y(*/)390 5230 y(#include)f(<stdio.h>)390 5340 y(#include)g(<grp.h>)p eop end %%Page: 206 218 TeXDict begin 206 217 bop 150 -116 a FB(206)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 408 y Fz(int)390 518 y(main\(argc,)45 b(argv\))390 628 y(int)i(argc;)390 737 y(char)g(**argv;)390 847 y({)581 956 y(struct)f(group)g(*g;)581 1066 y(int)h(i;)581 1285 y(while)f(\(\(g)h(=)h(getgrent\(\)\))c(!=)k(NULL\))e({)772 1395 y(printf\("\045s:\045s:\045ld:",)c(g->gr_name,)j(g->gr_passwd,) 2156 1504 y(\(long\))h(g->gr_gid\);)772 1614 y(for)h(\(i)g(=)g(0;)h (g->gr_mem[i])c(!=)j(NULL;)g(i++\))f({)963 1724 y(printf\("\045s",)e (g->gr_mem[i]\);)963 1833 y(if)j(\(g->gr_mem[i+1])d(!=)j(NULL\))1154 1943 y(putchar\(','\);)772 2052 y(})772 2162 y(putchar\('\\n'\);)581 2271 y(})581 2381 y(endgrent\(\);)581 2491 y(return)f(0;)390 2600 y(})275 2740 y FB(Eac)m(h)39 b(line)h(in)f(the)g(group)g(database) h(represen)m(ts)f(one)g(group.)67 b(The)38 b(\014elds)h(are)h (separated)f(with)150 2849 y(colons)31 b(and)f(represen)m(t)g(the)h (follo)m(wing)h(information:)150 2989 y(Group)e(name)440 b(The)30 b(group's)g(name.)150 3206 y(Group)g(passw)m(ord)289 b(The)20 b(group's)g(encrypted)g(passw)m(ord.)36 b(In)20 b(practice,)k(this)c(\014eld)1086 3316 y(is)30 b(nev)m(er)h(used;)f(it) h(is)f(usually)g(empt)m(y)h(or)f(set)h(to)g(`)p Fz(*)p FB('.)150 3534 y(Group-ID)550 b(The)36 b(group's)f(n)m(umeric)i(group)e (ID)i(n)m(um)m(b)s(er;)h(this)e(n)m(um)m(b)s(er)1086 3643 y(should)29 b(b)s(e)h(unique)f(within)h(the)h(\014le.)150 3861 y(Group)f(mem)m(b)s(er)f(list)183 b(A)23 b(comma-separated)i(list) f(of)f(usernames.)38 b(These)23 b(users)f(are)1086 3971 y(mem)m(b)s(ers)38 b(of)i(the)f(group.)67 b(Mo)s(dern)39 b(Unix)g(systems)g(allo)m(w)1086 4080 y(users)25 b(to)j(b)s(e)d(mem)m (b)s(ers)h(of)h(sev)m(eral)h(groups)d(sim)m(ultaneously)-8 b(.)1086 4190 y(If)23 b(y)m(our)g(system)h(do)s(es,)h(then)e(there)g (are)h(elemen)m(ts)h Fz("group1")1086 4299 y FB(through)44 b Fz("group)p Fk(N)11 b Fz(")42 b FB(in)i Fz(PROCINFO)e FB(for)j(those)g(group)f(ID)1086 4409 y(n)m(um)m(b)s(ers.)62 b(\(Note)40 b(that)f Fz(PROCINFO)c FB(is)k(a)f Fz(gawk)f FB(extension;)1086 4518 y(see)31 b(Section)g(6.5)g([Built-in)h(V)-8 b(ariables],)32 b(page)f(107.\))275 4653 y(Here)f(is)h(what)f(running)f Fz(grcat)g FB(migh)m(t)i(pro)s(duce:)390 4792 y Fz($)47 b(grcat)410 4906 y Fy(a)533 4902 y Fz(wheel:*:0:arnold)410 5015 y Fy(a)533 5011 y Fz(nogroup:*:65534:)410 5125 y Fy(a)533 5121 y Fz(daemon:*:1:)410 5234 y Fy(a)533 5230 y Fz(kmem:*:2:)410 5344 y Fy(a)533 5340 y Fz(staff:*:10:arnold,miriam,) o(andy)p eop end %%Page: 207 219 TeXDict begin 207 218 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(207)410 303 y Fy(a)533 299 y Fz(other:*:20:)390 408 y(...)275 573 y FB(Here)37 b(are)h(the)f(functions)g(for)g (obtaining)h(information)g(from)e(the)i(group)f(database.)62 b(There)37 b(are)150 682 y(sev)m(eral,)32 b(mo)s(deled)e(after)h(the)g (C)f(library)f(functions)h(of)h(the)g(same)f(names:)390 847 y Fz(#)47 b(group.awk)f(---)h(functions)e(for)i(dealing)f(with)g (the)h(group)g(file)390 1066 y(BEGIN)190 b(\\)390 1176 y({)581 1285 y(#)47 b(Change)f(to)i(suit)e(your)h(system)581 1395 y(_gr_awklib)e(=)i("/usr/local/libexec/awk/")390 1504 y(})390 1724 y(function)f(_gr_init\()188 b(oldfs,)46 b(oldrs,)g(olddol0,)g(grcat,)1774 1833 y(using_fw,)f(n,)j(a,)f(i\))390 1943 y({)581 2052 y(if)g(\(_gr_inited\))772 2162 y(return)581 2381 y(oldfs)f(=)i(FS)581 2491 y(oldrs)e(=)i(RS)581 2600 y(olddol0)e(=)h($0)581 2710 y(using_fw)e(=)j(\(PROCINFO["FS"])c(==)j ("FIELDWIDTHS"\))581 2819 y(FS)g(=)h(":")581 2929 y(RS)f(=)h("\\n")581 3148 y(grcat)e(=)i(_gr_awklib)d("grcat")581 3258 y(while)h(\(\(grcat)g (|)i(getline\))d(>)j(0\))f({)772 3367 y(if)g(\($1)g(in)g(_gr_byname\)) 963 3477 y(_gr_byname[$1])d(=)j(_gr_byname[$1])d(",")j($4)772 3587 y(else)963 3696 y(_gr_byname[$1])d(=)j($0)772 3806 y(if)g(\($3)g(in)g(_gr_bygid\))963 3915 y(_gr_bygid[$3])d(=)j (_gr_bygid[$3])e(",")h($4)772 4025 y(else)963 4134 y(_gr_bygid[$3])e(=) j($0)772 4354 y(n)g(=)h(split\($4,)d(a,)i("[)g(\\t]*,[)f(\\t]*"\))772 4463 y(for)h(\(i)g(=)g(1;)h(i)f(<=)g(n;)g(i++\))963 4573 y(if)g(\(a[i])f(in)h(_gr_groupsbyuser\))1154 4682 y (_gr_groupsbyuser[a[i]])41 b(=)48 b(\\)1345 4792 y (_gr_groupsbyuser[a[i]])41 b(")48 b(")f($1)963 4902 y(else)1154 5011 y(_gr_groupsbyuser[a[i]])41 b(=)48 b($1)772 5230 y(_gr_bycount[++_gr_count])41 b(=)47 b($0)581 5340 y(})p eop end %%Page: 208 220 TeXDict begin 208 219 bop 150 -116 a FB(208)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)581 299 y Fz(close\(grcat\))581 408 y(_gr_count)45 b(=)j(0)581 518 y(_gr_inited++)581 628 y(FS)f(=)h(oldfs)581 737 y(if)f (\(using_fw\))772 847 y(FIELDWIDTHS)e(=)i(FIELDWIDTHS)581 956 y(RS)g(=)h(oldrs)581 1066 y($0)f(=)h(olddol0)390 1176 y(})275 1322 y FB(The)59 b Fz(BEGIN)g FB(rule)i(sets)f(a)h(priv)-5 b(ate)61 b(v)-5 b(ariable)61 b(to)h(the)e(directory)h(where)f Fz(grcat)f FB(is)i(stored.)150 1431 y(Because)54 b(it)f(is)f(used)g(to) h(help)f(out)g(an)h Fz(awk)e FB(library)h(routine,)58 b(w)m(e)53 b(ha)m(v)m(e)h(c)m(hosen)f(to)g(put)e(it)i(in)150 1541 y(`)p Fz(/usr/local/libexec/awk)p FB('.)80 b(Y)-8 b(ou)45 b(migh)m(t)h(w)m(an)m(t)h(it)e(to)h(b)s(e)f(in)g(a)g (di\013eren)m(t)h(directory)g(on)f(y)m(our)150 1650 y(system.)275 1797 y(These)35 b(routines)g(follo)m(w)i(the)f(same)f(general)i (outline)f(as)g(the)f(user)g(database)i(routines)e(\(see)h(Sec-)150 1906 y(tion)41 b(12.5)i([Reading)e(the)h(User)e(Database],)46 b(page)c(201\).)74 b(The)40 b Fz(_gr_inited)e FB(v)-5 b(ariable)42 b(is)f(used)f(to)150 2016 y(ensure)29 b(that)i(the)f (database)h(is)g(scanned)e(no)h(more)h(than)e(once.)42 b(The)29 b Fz(_gr_init)f FB(function)i(\014rst)f(sa)m(v)m(es)150 2125 y Fz(FS)p FB(,)36 b Fz(FIELDWIDTHS)p FB(,)d Fz(RS)p FB(,)i(and)f Fz($0)p FB(,)i(and)e(then)g(sets)i Fz(FS)e FB(and)g Fz(RS)g FB(to)i(the)e(correct)i(v)-5 b(alues)36 b(for)e(scanning)150 2235 y(the)d(group)e(information.)275 2381 y(The)37 b(group)g(information)h(is)g(stored)g(is)f(sev)m(eral)i (asso)s(ciativ)m(e)i(arra)m(ys.)63 b(The)37 b(arra)m(ys)h(are)g (indexed)150 2491 y(b)m(y)60 b(group)g(name)h(\()p Fz(_gr_byname)n FB(\),)68 b(b)m(y)61 b(group)f(ID)h(n)m(um)m(b)s(er)e(\()p Fz(_gr_bygid)n FB(\),)68 b(and)60 b(b)m(y)h(p)s(osition)150 2600 y(in)54 b(the)h(database)g(\()p Fz(_gr_bycount)m FB(\).)113 b(There)54 b(is)h(an)f(additional)h(arra)m(y)g(indexed)f(b)m (y)h(username)150 2710 y(\()p Fz(_gr_groupsbyuser)l FB(\),)30 b(whic)m(h)g(is)f(a)h(space-separated)h(list)g(of)e(groups)g(to)i(whic) m(h)e(eac)m(h)i(user)e(b)s(elongs.)275 2856 y(Unlik)m(e)j(the)f(user)g (database,)i(it)e(is)h(p)s(ossible)f(to)h(ha)m(v)m(e)g(m)m(ultiple)g (records)f(in)g(the)g(database)i(for)e(the)150 2966 y(same)e(group.)39 b(This)28 b(is)g(common)g(when)g(a)g(group)g(has)g(a)h(large)g(n)m(um)m (b)s(er)e(of)h(mem)m(b)s(ers.)39 b(A)29 b(pair)f(of)g(suc)m(h)150 3075 y(en)m(tries)j(migh)m(t)g(lo)s(ok)g(lik)m(e)h(the)e(follo)m(wing:) 390 3221 y Fz(tvpeople:*:101:johnny,ja)o(y,ar)o(seni)o(o)390 3331 y(tvpeople:*:101:david,con)o(an,t)o(om,j)o(oan)275 3477 y FB(F)-8 b(or)34 b(this)f(reason,)i Fz(_gr_init)c FB(lo)s(oks)j(to)g(see)g(if)f(a)h(group)f(name)g(or)g(group)g(ID)h(n)m (um)m(b)s(er)e(is)h(already)150 3587 y(seen.)53 b(If)34 b(it)h(is,)g(then)f(the)h(usernames)f(are)g(simply)g(concatenated)j(on) m(to)e(the)g(previous)f(list)h(of)g(users.)150 3696 y(\(There)i(is)g (actually)h(a)f(subtle)g(problem)f(with)h(the)g(co)s(de)g(just)f (presen)m(ted.)60 b(Supp)s(ose)35 b(that)j(the)f(\014rst)150 3806 y(time)27 b(there)f(w)m(ere)g(no)g(names.)39 b(This)25 b(co)s(de)h(adds)g(the)g(names)g(with)f(a)i(leading)f(comma.)40 b(It)26 b(also)h(do)s(esn't)150 3915 y(c)m(hec)m(k)32 b(that)f(there)f(is)h(a)g Fz($4)p FB(.\))275 4061 y(Finally)-8 b(,)35 b Fz(_gr_init)30 b FB(closes)k(the)f(pip)s(eline)g(to)g Fz(grcat)p FB(,)f(restores)i Fz(FS)e FB(\(and)h Fz(FIELDWIDTHS)c FB(if)k(neces-)150 4171 y(sary\),)k Fz(RS)p FB(,)f(and)e Fz($0)p FB(,)i(initializes)i Fz(_gr_count)32 b FB(to)k(zero)g(\(it)g (is)g(used)e(later\),)k(and)d(mak)m(es)h Fz(_gr_inited)150 4281 y FB(nonzero.)275 4427 y(The)29 b Fz(getgrnam)e FB(function)i(tak)m(es)i(a)g(group)e(name)g(as)h(its)g(argumen)m(t,)h (and)e(if)g(that)i(group)e(exists,)h(it)150 4536 y(is)g(returned.)40 b(Otherwise,)30 b Fz(getgrnam)e FB(returns)i(the)g(n)m(ull)g(string:) 390 4682 y Fz(function)46 b(getgrnam\(group\))390 4792 y({)581 4902 y(_gr_init\(\))581 5011 y(if)h(\(group)f(in)h (_gr_byname\))772 5121 y(return)f(_gr_byname[group])581 5230 y(return)g("")390 5340 y(})p eop end %%Page: 209 221 TeXDict begin 209 220 bop 1918 -116 a Fr(Chapter)30 b(12:)42 b(A)30 b(Library)f(of)i Fz(awk)e Fr(F)-8 b(unctions)92 b FB(209)275 299 y(The)33 b Fz(getgrgid)f FB(function)i(is)g(similar,)h (it)g(tak)m(es)h(a)e(n)m(umeric)g(group)g(ID)g(and)f(lo)s(oks)i(up)e (the)h(infor-)150 408 y(mation)d(asso)s(ciated)h(with)e(that)h(group)f (ID:)390 543 y Fz(function)46 b(getgrgid\(gid\))390 653 y({)581 762 y(_gr_init\(\))581 872 y(if)h(\(gid)g(in)g(_gr_bygid\))772 981 y(return)f(_gr_bygid[gid])581 1091 y(return)g("")390 1200 y(})275 1335 y FB(The)24 b Fz(getgruser)e FB(function)i(do)s(es)h (not)f(ha)m(v)m(e)i(a)f(C)g(coun)m(terpart.)39 b(It)25 b(tak)m(es)h(a)f(username)f(and)g(returns)150 1445 y(the)31 b(list)g(of)f(groups)g(that)h(ha)m(v)m(e)g(the)g(user)f(as)g(a)h(mem)m (b)s(er:)390 1579 y Fz(function)46 b(getgruser\(user\))390 1689 y({)581 1798 y(_gr_init\(\))581 1908 y(if)h(\(user)f(in)i (_gr_groupsbyuser\))772 2017 y(return)e(_gr_groupsbyuser[user])581 2127 y(return)g("")390 2237 y(})275 2371 y FB(The)35 b Fz(getgrent)g FB(function)h(steps)g(through)g(the)g(database)i(one)e (en)m(try)h(at)g(a)g(time.)60 b(It)36 b(uses)g Fz(_gr_)150 2481 y(count)29 b FB(to)i(trac)m(k)h(its)e(p)s(osition)h(in)f(the)g (list:)390 2615 y Fz(function)46 b(getgrent\(\))390 2725 y({)581 2834 y(_gr_init\(\))581 2944 y(if)h(\(++_gr_count)e(in)i (_gr_bycount\))772 3054 y(return)f(_gr_bycount[_gr_count])581 3163 y(return)g("")390 3273 y(})275 3407 y FB(The)27 b Fz(endgrent)e FB(function)j(resets)g Fz(_gr_count)d FB(to)k(zero)f(so)g(that)h Fz(getgrent)c FB(can)j(start)h(o)m(v)m(er)g (again:)390 3542 y Fz(function)46 b(endgrent\(\))390 3651 y({)581 3761 y(_gr_count)f(=)j(0)390 3870 y(})275 4005 y FB(As)26 b(with)g(the)h(user)f(database)h(routines,)h(eac)m(h)f (function)g(calls)g Fz(_gr_init)d FB(to)k(initialize)h(the)d(arra)m (ys.)150 4115 y(Doing)37 b(so)f(only)h(incurs)e(the)h(extra)h(o)m(v)m (erhead)g(of)f(running)f Fz(grcat)f FB(if)i(these)h(functions)f(are)g (used)f(\(as)150 4224 y(opp)s(osed)30 b(to)h(mo)m(ving)g(the)f(b)s(o)s (dy)f(of)i Fz(_gr_init)d FB(in)m(to)j(a)g Fz(BEGIN)e FB(rule\).)275 4359 y(Most)d(of)g(the)g(w)m(ork)g(is)g(in)f(scanning)h (the)g(database)g(and)f(building)g(the)h(v)-5 b(arious)26 b(asso)s(ciativ)m(e)i(arra)m(ys.)150 4468 y(The)35 b(functions)h(that)g (the)g(user)f(calls)i(are)g(themselv)m(es)g(v)m(ery)f(simple,)h (relying)f(on)g Fz(awk)p FB('s)f(asso)s(ciativ)m(e)150 4578 y(arra)m(ys)c(to)g(do)f(w)m(ork.)275 4712 y(The)g Fz(id)g FB(program)h(in)f(Section)i(13.2.3)h([Prin)m(ting)f(out)f(User) f(Information],)i(page)f(219,)i(uses)d(these)150 4822 y(functions.)p eop end %%Page: 210 222 TeXDict begin 210 221 bop 150 -116 a FB(210)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fu(13)80 b(Practical)54 b Fi(awk)f Fu(Programs)150 534 y FB(Chapter)25 b(12)h([A)g(Library)f(of)h Fz(awk)f FB(F)-8 b(unctions],)27 b(page)g(181,)h(presen)m(ts)d(the)h(idea)g (that)h(reading)e(programs)150 644 y(in)e(a)g(language)i(con)m (tributes)e(to)h(learning)f(that)h(language.)40 b(This)22 b(c)m(hapter)h(con)m(tin)m(ues)h(that)g(theme,)h(pre-)150 753 y(sen)m(ting)31 b(a)g(p)s(otp)s(ourri)e(of)h Fz(awk)g FB(programs)g(for)g(y)m(our)g(reading)h(enjo)m(ymen)m(t.)41 b(There)30 b(are)h(three)g(sections.)150 863 y(The)f(\014rst)f(describ) s(es)h(ho)m(w)h(to)g(run)e(the)h(programs)g(presen)m(ted)g(in)g(this)h (c)m(hapter.)275 998 y(The)20 b(second)h(presen)m(ts)g Fz(awk)g FB(v)m(ersions)g(of)h(sev)m(eral)g(common)g(POSIX)e (utilities.)39 b(These)21 b(are)g(programs)150 1107 y(that)k(y)m(ou)g (are)f(hop)s(efully)g(already)h(familiar)g(with,)g(and)f(therefore,)i (whose)e(problems)g(are)h(understo)s(o)s(d.)150 1217 y(By)42 b(reimplemen)m(ting)h(these)g(programs)e(in)h Fz(awk)p FB(,)j(y)m(ou)d(can)g(fo)s(cus)g(on)g(the)g Fz(awk)p FB(-related)g(asp)s(ects)h(of)150 1326 y(solving)31 b(the)g(programming)f(problem.)275 1461 y(The)42 b(third)g(is)h(a)h (grab)f(bag)g(of)h(in)m(teresting)g(programs.)79 b(These)43 b(solv)m(e)h(a)f(n)m(um)m(b)s(er)f(of)h(di\013eren)m(t)150 1571 y(data-manipulation)h(and)e(managemen)m(t)h(problems.)77 b(Man)m(y)43 b(of)f(the)h(programs)f(are)h(short,)i(whic)m(h)150 1680 y(emphasizes)31 b Fz(awk)p FB('s)e(abilit)m(y)j(to)f(do)g(a)f(lot) i(in)e(just)f(a)i(few)f(lines)h(of)f(co)s(de.)275 1815 y(Man)m(y)e(of)h(these)f(programs)g(use)g(the)h(library)e(functions)h (presen)m(ted)g(in)g(Chapter)g(12)h([A)f(Library)g(of)150 1925 y Fz(awk)h FB(F)-8 b(unctions],)32 b(page)f(181.)150 2158 y FA(13.1)68 b(Running)45 b(the)g(Example)h(Programs)150 2317 y FB(T)-8 b(o)31 b(run)e(a)i(giv)m(en)g(program,)f(y)m(ou)h(w)m (ould)f(t)m(ypically)i(do)f(something)f(lik)m(e)i(this:)390 2452 y Fz(awk)47 b(-f)g Fk(program)56 b Fz(--)48 b Fk(options)56 b(files)150 2587 y FB(Here,)e Fx(program)48 b FB(is)h(the)g(name)f(of)h (the)g Fz(awk)f FB(program)g(\(suc)m(h)h(as)g(`)p Fz(cut.awk)p FB('\),)j Fx(options)h FB(are)c(an)m(y)150 2696 y(command-line)35 b(options)g(for)f(the)h(program)f(that)h(start)g(with)g(a)g(`)p Fz(-)p FB(',)h(and)d Fx(\014les)39 b FB(are)c(the)f(actual)i(data)150 2806 y(\014les.)275 2941 y(If)k(y)m(our)h(system)g(supp)s(orts)e(the)i (`)p Fz(#!)p FB(')g(executable)h(in)m(terpreter)f(mec)m(hanism)h(\(see) f(Section)h(1.1.4)150 3050 y([Executable)32 b Fz(awk)d FB(Programs],)i(page)g(13\),)h(y)m(ou)f(can)f(instead)h(run)e(y)m(our)h (program)g(directly:)390 3185 y Fz(cut.awk)46 b(-c1-8)g(myfiles)g(>)h (results)275 3320 y FB(If)29 b(y)m(our)i Fz(awk)e FB(is)i(not)f Fz(gawk)p FB(,)g(y)m(ou)g(ma)m(y)h(instead)g(need)f(to)h(use)f(this:) 390 3455 y Fz(cut.awk)46 b(--)h(-c1-8)f(myfiles)g(>)i(results)150 3688 y FA(13.2)68 b(Rein)l(v)l(en)l(ting)47 b(Wheels)f(for)f(F)-11 b(un)44 b(and)g(Pro\014t)150 3847 y FB(This)30 b(section)h(presen)m(ts) g(a)g(n)m(um)m(b)s(er)e(of)h(POSIX)g(utilities)i(that)f(are)g(implemen) m(ted)g(in)f Fz(awk)p FB(.)40 b(Rein)m(v)m(en)m(t-)150 3957 y(ing)d(these)h(programs)f(in)g Fz(awk)f FB(is)h(often)h(enjo)m(y) m(able,)i(b)s(ecause)e(the)f(algorithms)h(can)g(b)s(e)e(v)m(ery)i (clearly)150 4066 y(expressed,)33 b(and)f(the)h(co)s(de)g(is)g(usually) g(v)m(ery)g(concise)h(and)e(simple.)48 b(This)32 b(is)h(true)g(b)s (ecause)f Fz(awk)g FB(do)s(es)150 4176 y(so)f(m)m(uc)m(h)f(for)g(y)m (ou.)275 4311 y(It)k(should)g(b)s(e)h(noted)g(that)g(these)g(programs)g (are)g(not)g(necessarily)h(in)m(tended)f(to)g(replace)h(the)f(in-)150 4420 y(stalled)i(v)m(ersions)g(on)f(y)m(our)g(system.)59 b(Instead,)37 b(their)g(purp)s(ose)d(is)j(to)g(illustrate)g Fz(awk)e FB(language)j(pro-)150 4530 y(gramming)31 b(for)f(\\real)h(w)m (orld")g(tasks.)275 4665 y(The)e(programs)h(are)h(presen)m(ted)f(in)h (alphab)s(etical)g(order.)150 4864 y Fj(13.2.1)63 b(Cutting)41 b(out)g(Fields)h(and)f(Columns)150 5011 y FB(The)c Fz(cut)g FB(utilit)m(y)i(selects,)j(or)37 b(\\cuts,")k(c)m(haracters)e(or)f (\014elds)f(from)h(its)g(standard)f(input)g(and)g(sends)150 5121 y(them)26 b(to)h(its)f(standard)g(output.)39 b(Fields)26 b(are)h(separated)g(b)m(y)f(tabs)g(b)m(y)g(default,)h(but)f(y)m(ou)g (ma)m(y)h(supply)e(a)150 5230 y(command-line)g(option)g(to)h(c)m(hange) g(the)f(\014eld)f Fx(delimiter)32 b FB(\(i.e.,)c(the)d (\014eld-separator)g(c)m(haracter\).)41 b Fz(cut)p FB('s)150 5340 y(de\014nition)30 b(of)h(\014elds)e(is)i(less)f(general)i(than)e Fz(awk)p FB('s.)p eop end %%Page: 211 223 TeXDict begin 211 222 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(211)275 299 y(A)31 b(common)g(use)g(of)h Fz(cut)e FB(migh)m(t)i(b)s(e)e(to)i (pull)f(out)g(just)g(the)g(login)h(name)g(of)f(logged-on)i(users)d (from)150 408 y(the)d(output)g(of)h Fz(who)p FB(.)38 b(F)-8 b(or)28 b(example,)h(the)e(follo)m(wing)i(pip)s(eline)e (generates)h(a)g(sorted,)g(unique)f(list)g(of)h(the)150 518 y(logged-on)k(users:)390 648 y Fz(who)47 b(|)g(cut)g(-c1-8)g(|)g (sort)g(|)g(uniq)275 778 y FB(The)29 b(options)i(for)f Fz(cut)g FB(are:)150 929 y Fz(-c)g Fk(list)162 b FB(Use)45 b Fx(list)i FB(as)d(the)h(list)g(of)f(c)m(haracters)i(to)f(cut)g(out.) 83 b(Items)44 b(within)g(the)h(list)g(ma)m(y)g(b)s(e)630 1039 y(separated)33 b(b)m(y)f(commas,)i(and)d(ranges)i(of)f(c)m (haracters)i(can)f(b)s(e)e(separated)i(with)f(dashes.)630 1148 y(The)j(list)i(`)p Fz(1-8,15,22-35)p FB(')c(sp)s(eci\014es)j(c)m (haracters)h(1)g(through)e(8,)j(15,)g(and)e(22)h(through)630 1258 y(35.)150 1408 y Fz(-f)30 b Fk(list)162 b FB(Use)31 b Fx(list)i FB(as)d(the)h(list)g(of)f(\014elds)g(to)h(cut)g(out.)150 1559 y Fz(-d)f Fk(delim)114 b FB(Use)31 b Fx(delim)f FB(as)h(the)f(\014eld-separator)h(c)m(haracter)h(instead)f(of)g(the)f (tab)h(c)m(haracter.)150 1710 y Fz(-s)384 b FB(Suppress)28 b(prin)m(ting)i(of)h(lines)f(that)h(do)g(not)f(con)m(tain)i(the)e (\014eld)g(delimiter.)275 1861 y(The)e Fz(awk)g FB(implemen)m(tation)i (of)f Fz(cut)f FB(uses)h(the)g Fz(getopt)e FB(library)h(function)h (\(see)g(Section)h(12.4)h([Pro-)150 1970 y(cessing)23 b(Command-Line)f(Options],)i(page)f(196\))h(and)e(the)g Fz(join)f FB(library)h(function)g(\(see)i(Section)f(12.2.7)150 2080 y([Merging)32 b(an)e(Arra)m(y)g(in)m(to)i(a)f(String],)f(page)h (190\).)275 2210 y(The)21 b(program)g(b)s(egins)g(with)g(a)h(commen)m (t)h(describing)e(the)h(options,)i(the)e(library)f(functions)g(needed,) 150 2319 y(and)32 b(a)h Fz(usage)e FB(function)h(that)h(prin)m(ts)f (out)h(a)g(usage)g(message)h(and)e(exits.)48 b Fz(usage)31 b FB(is)h(called)i(if)e(in)m(v)-5 b(alid)150 2429 y(argumen)m(ts)31 b(are)f(supplied:)390 2559 y Fz(#)47 b(cut.awk)f(---)h(implement)e(cut) i(in)h(awk)390 2778 y(#)f(Options:)390 2888 y(#)191 b(-f)47 b(list)237 b(Cut)47 b(fields)390 2998 y(#)191 b(-d)47 b(c)381 b(Field)47 b(delimiter)e(character)390 3107 y(#)191 b(-c)47 b(list)237 b(Cut)47 b(characters)390 3217 y(#)390 3326 y(#)191 b(-s)476 b(Suppress)46 b(lines)g(without)g(the)h (delimiter)390 3436 y(#)390 3545 y(#)g(Requires)f(getopt)g(and)h(join)g (library)e(functions)390 3765 y(function)h(usage\()189 b(e1,)47 b(e2\))390 3874 y({)581 3984 y(e1)g(=)h("usage:)d(cut)i([-f)g (list])g([-d)f(c])i([-s])e([files...]")581 4093 y(e2)h(=)h("usage:)d (cut)i([-c)g(list])g([files...]")581 4203 y(print)f(e1)h(>)h ("/dev/stderr")581 4313 y(print)e(e2)h(>)h("/dev/stderr")581 4422 y(exit)f(1)390 4532 y(})150 4662 y FB(The)30 b(v)-5 b(ariables)31 b Fz(e1)f FB(and)f Fz(e2)h FB(are)h(used)f(so)g(that)h (the)g(function)f(\014ts)g(nicely)h(on)f(the)h(page.)275 4792 y(Next)k(comes)h(a)g Fz(BEGIN)d FB(rule)i(that)h(parses)e(the)i (command-line)f(options.)55 b(It)35 b(sets)h Fz(FS)e FB(to)i(a)f(single)150 4902 y(T)-8 b(AB)32 b(c)m(haracter,)i(b)s (ecause)d(that)h(is)g Fz(cut)p FB('s)e(default)i(\014eld)f(separator.) 45 b(The)31 b(output)g(\014eld)g(separator)h(is)150 5011 y(also)i(set)f(to)g(b)s(e)f(the)h(same)g(as)g(the)g(input)f(\014eld)g (separator.)48 b(Then)32 b Fz(getopt)f FB(is)i(used)e(to)j(step)f (through)150 5121 y(the)i(command-line)g(options.)55 b(Exactly)36 b(one)f(of)g(the)g(v)-5 b(ariables)36 b Fz(by_fields)c FB(or)j Fz(by_chars)e FB(is)i(set)g(to)150 5230 y(true,)42 b(to)e(indicate)h(that)g(pro)s(cessing)e(should)g(b)s (e)g(done)g(b)m(y)h(\014elds)f(or)h(b)m(y)f(c)m(haracters,)44 b(resp)s(ectiv)m(ely)-8 b(.)150 5340 y(When)30 b(cutting)h(b)m(y)g(c)m (haracters,)h(the)e(output)g(\014eld)g(separator)h(is)g(set)f(to)i(the) e(n)m(ull)g(string:)p eop end %%Page: 212 224 TeXDict begin 212 223 bop 150 -116 a FB(212)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(BEGIN)190 b(\\)390 408 y({)581 518 y(FS)47 b(=)h("\\t")189 b(#)48 b(default)581 628 y(OFS)f(=)g(FS)581 737 y(while)f(\(\(c)h(=)h (getopt\(ARGC,)c(ARGV,)i("sf:c:d:"\)\))f(!=)i(-1\))g({)772 847 y(if)g(\(c)g(==)g("f"\))g({)963 956 y(by_fields)e(=)i(1)963 1066 y(fieldlist)e(=)i(Optarg)772 1176 y(})g(else)g(if)g(\(c)g(==)g ("c"\))g({)963 1285 y(by_chars)e(=)j(1)963 1395 y(fieldlist)d(=)i (Optarg)963 1504 y(OFS)g(=)g("")772 1614 y(})g(else)g(if)g(\(c)g(==)g ("d"\))g({)963 1724 y(if)g(\(length\(Optarg\))d(>)j(1\))g({)1154 1833 y(printf\("Using)d(first)i(character)f(of)j(\045s")f(\\)1154 1943 y(")g(for)g(delimiter\\n",)d(Optarg\))i(>)h("/dev/stderr")1154 2052 y(Optarg)f(=)h(substr\(Optarg,)d(1,)j(1\))963 2162 y(})963 2271 y(FS)g(=)g(Optarg)963 2381 y(OFS)g(=)g(FS)963 2491 y(if)g(\(FS)g(==)g(")g("\))191 b(#)47 b(defeat)f(awk)h(semantics) 1154 2600 y(FS)g(=)g("[)g(]")772 2710 y(})g(else)g(if)g(\(c)g(==)g ("s"\))963 2819 y(suppress++)772 2929 y(else)963 3039 y(usage\(\))581 3148 y(})581 3367 y(for)g(\(i)g(=)g(1;)h(i)f(<)h (Optind;)d(i++\))772 3477 y(ARGV[i])h(=)h("")275 3623 y FB(Sp)s(ecial)33 b(care)h(is)f(tak)m(en)h(when)f(the)g(\014eld)g (delimiter)h(is)f(a)g(space.)50 b(Using)33 b(a)h(single)g(space)g(\()p Fz(")c(")p FB(\))j(for)150 3733 y(the)38 b(v)-5 b(alue)38 b(of)f Fz(FS)g FB(is)h(incorrect|)p Fz(awk)g FB(w)m(ould)f(separate)h (\014elds)f(with)h(runs)e(of)h(spaces,)j(tabs,)g(and/or)150 3842 y(newlines,)33 b(and)f(w)m(e)i(w)m(an)m(t)f(them)g(to)g(b)s(e)f (separated)i(with)e(individual)g(spaces.)48 b(Also,)35 b(note)e(that)g(after)150 3952 y Fz(getopt)28 b FB(is)i(through,)f(w)m (e)h(ha)m(v)m(e)h(to)g(clear)f(out)g(all)h(the)f(elemen)m(ts)h(of)f Fz(ARGV)e FB(from)h(1)i(to)f Fz(Optind)p FB(,)e(so)i(that)150 4061 y Fz(awk)f FB(do)s(es)i(not)f(try)g(to)i(pro)s(cess)d(the)i (command-line)g(options)g(as)f(\014le)h(names.)275 4208 y(After)24 b(dealing)h(with)f(the)g(command-line)h(options,)h(the)f (program)f(v)m(eri\014es)g(that)h(the)f(options)h(mak)m(e)150 4317 y(sense.)47 b(Only)31 b(one)i(or)f(the)h(other)f(of)h(`)p Fz(-c)p FB(')f(and)g(`)p Fz(-f)p FB(')g(should)f(b)s(e)h(used,)g(and)g (b)s(oth)f(require)h(a)h(\014eld)f(list.)150 4427 y(Then)37 b(the)h(program)g(calls)h(either)g Fz(set_fieldlist)34 b FB(or)k Fz(set_charlist)c FB(to)39 b(pull)f(apart)g(the)g(list)h(of) 150 4536 y(\014elds)30 b(or)g(c)m(haracters:)581 4682 y Fz(if)47 b(\(by_fields)e(&&)i(by_chars\))772 4792 y(usage\(\))581 5011 y(if)g(\(by_fields)e(==)i(0)h(&&)f(by_chars)e(==)j(0\))772 5121 y(by_fields)d(=)j(1)190 b(#)48 b(default)581 5340 y(if)f(\(fieldlist)e(==)i(""\))g({)p eop end %%Page: 213 225 TeXDict begin 213 224 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(213)772 299 y Fz(print)46 b("cut:)h(needs)f(list)h(for)f(-c)i(or)f(-f")g(>)g ("/dev/stderr")772 408 y(exit)f(1)581 518 y(})581 737 y(if)h(\(by_fields\))772 847 y(set_fieldlist\(\))581 956 y(else)772 1066 y(set_charlist\(\))390 1176 y(})275 1307 y(set_fieldlist)35 b FB(is)40 b(used)e(to)i(split)g(the)f(\014eld) g(list)h(apart)g(at)g(the)f(commas)h(and)f(in)m(to)i(an)e(arra)m(y)-8 b(.)150 1417 y(Then,)29 b(for)h(eac)m(h)i(elemen)m(t)f(of)f(the)h(arra) m(y)-8 b(,)31 b(it)g(lo)s(oks)f(to)h(see)g(if)f(it)h(is)f(actually)h(a) g(range,)g(and)e(if)h(so,)h(splits)150 1526 y(it)37 b(apart.)59 b(The)36 b(range)g(is)h(v)m(eri\014ed)f(to)h(mak)m(e)h(sure)d(the)i (\014rst)f(n)m(um)m(b)s(er)f(is)h(smaller)h(than)f(the)h(second.)150 1636 y(Eac)m(h)32 b(n)m(um)m(b)s(er)d(in)i(the)g(list)h(is)f(added)f (to)i(the)f Fz(flist)e FB(arra)m(y)-8 b(,)33 b(whic)m(h)d(simply)h (lists)g(the)h(\014elds)e(that)i(will)150 1745 y(b)s(e)j(prin)m(ted.)55 b(Normal)35 b(\014eld)g(splitting)h(is)g(used.)54 b(The)35 b(program)g(lets)h Fz(awk)e FB(handle)h(the)g(job)g(of)h(doing)150 1855 y(the)31 b(\014eld)f(splitting:)390 1987 y Fz(function)46 b(set_fieldlist\()378 b(n,)47 b(m,)g(i,)g(j,)g(k,)g(f,)h(g\))390 2096 y({)581 2206 y(n)f(=)h(split\(fieldlist,)43 b(f,)k(","\))581 2315 y(j)g(=)h(1)190 b(#)48 b(index)e(in)h(flist)581 2425 y(for)g(\(i)g(=)g(1;)h(i)f(<=)g(n;)g(i++\))g({)772 2534 y(if)g(\(index\(f[i],)d("-"\))j(!=)g(0\))g({)h(#)f(a)h(range)963 2644 y(m)f(=)h(split\(f[i],)c(g,)k("-"\))963 2754 y(if)f(\(m)g(!=)g(2)h (||)f(g[1])g(>=)g(g[2]\))f({)1154 2863 y(printf\("bad)e(field)j(list:)f (\045s\\n",)2013 2973 y(f[i]\))g(>)i("/dev/stderr")1154 3082 y(exit)e(1)963 3192 y(})963 3302 y(for)h(\(k)g(=)g(g[1];)g(k)g(<=) g(g[2];)g(k++\))1154 3411 y(flist[j++])e(=)i(k)772 3521 y(})g(else)963 3630 y(flist[j++])e(=)i(f[i])581 3740 y(})581 3850 y(nfields)f(=)h(j)h(-)f(1)390 3959 y(})275 4091 y FB(The)27 b Fz(set_charlist)d FB(function)j(is)g(more)h (complicated)h(than)e Fz(set_fieldlist)p FB(.)37 b(The)27 b(idea)h(here)f(is)150 4200 y(to)g(use)e Fz(gawk)p FB('s)g Fz(FIELDWIDTHS)e FB(v)-5 b(ariable)26 b(\(see)h(Section)g(3.6)g ([Reading)f(Fixed-Width)h(Data],)i(page)d(47\),)150 4310 y(whic)m(h)h(describ)s(es)g(constan)m(t-width)h(input.)39 b(When)27 b(using)g(a)h(c)m(haracter)h(list,)g(that)f(is)g(exactly)h (what)e(w)m(e)150 4419 y(ha)m(v)m(e.)275 4551 y(Setting)j(up)f Fz(FIELDWIDTHS)e FB(is)k(more)f(complicated)i(than)d(simply)h(listing)h (the)f(\014elds)g(that)g(need)g(to)150 4661 y(b)s(e)f(prin)m(ted.)40 b(W)-8 b(e)31 b(ha)m(v)m(e)g(to)f(k)m(eep)g(trac)m(k)h(of)f(the)g (\014elds)f(to)h(prin)m(t)f(and)g(also)i(the)f(in)m(terv)m(ening)g(c)m (haracters)150 4770 y(that)f(ha)m(v)m(e)g(to)h(b)s(e)d(skipp)s(ed.)39 b(F)-8 b(or)29 b(example,)h(supp)s(ose)c(y)m(ou)j(w)m(an)m(ted)g(c)m (haracters)h(1)f(through)e(8,)j(15,)g(and)150 4880 y(22)36 b(through)e(35.)55 b(Y)-8 b(ou)35 b(w)m(ould)f(use)h(`)p Fz(-c)30 b(1-8,15,22-35)p FB('.)51 b(The)34 b(necessary)h(v)-5 b(alue)35 b(for)g Fz(FIELDWIDTHS)150 4989 y FB(is)40 b Fz("8)30 b(6)g(1)g(6)g(14")o FB(.)70 b(This)39 b(yields)h(\014v)m(e)h (\014elds,)h(and)e(the)g(\014elds)f(to)i(prin)m(t)f(are)g Fz($1)p FB(,)j Fz($3)p FB(,)f(and)d Fz($5)p FB(.)69 b(The)150 5099 y(in)m(termediate)41 b(\014elds)e(are)h Fx(\014ller)p FB(,)i(whic)m(h)e(is)g(stu\013)f(in)g(b)s(et)m(w)m(een)h(the)g(desired) f(data.)69 b Fz(flist)39 b FB(lists)h(the)150 5208 y(\014elds)30 b(to)h(prin)m(t,)f(and)g Fz(t)g FB(trac)m(ks)h(the)g(complete)h (\014eld)e(list,)h(including)f(\014ller)g(\014elds:)390 5340 y Fz(function)46 b(set_charlist\()187 b(field,)46 b(i,)h(j,)g(f,)h(g,)f(t,)p eop end %%Page: 214 226 TeXDict begin 214 225 bop 150 -116 a FB(214)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)1631 299 y Fz(filler,)46 b(last,)g(len\))390 408 y({)581 518 y(field)g(=)i(1)143 b(#)47 b(count)f(total)h(fields)581 628 y(n)g(=)h(split\(fieldlist,)43 b(f,)k(","\))581 737 y(j)g(=)h(1)334 b(#)47 b(index)f(in)i(flist)581 847 y(for)f(\(i)g(=)g (1;)h(i)f(<=)g(n;)g(i++\))g({)772 956 y(if)g(\(index\(f[i],)d("-"\))j (!=)g(0\))g({)h(#)f(range)963 1066 y(m)g(=)h(split\(f[i],)c(g,)k("-"\)) 963 1176 y(if)f(\(m)g(!=)g(2)h(||)f(g[1])g(>=)g(g[2]\))f({)1154 1285 y(printf\("bad)e(character)i(list:)g(\045s\\n",)1870 1395 y(f[i]\))g(>)h("/dev/stderr")1154 1504 y(exit)f(1)963 1614 y(})963 1724 y(len)h(=)g(g[2])g(-)g(g[1])g(+)g(1)963 1833 y(if)g(\(g[1])f(>)i(1\))95 b(#)47 b(compute)f(length)g(of)h (filler)1154 1943 y(filler)f(=)h(g[1])g(-)g(last)g(-)g(1)963 2052 y(else)1154 2162 y(filler)f(=)h(0)963 2271 y(if)g(\(filler\))1154 2381 y(t[field++])e(=)i(filler)963 2491 y(t[field++])e(=)i(len)95 b(#)47 b(length)f(of)i(field)963 2600 y(last)e(=)i(g[2])963 2710 y(flist[j++])d(=)i(field)g(-)g(1)772 2819 y(})g(else)g({)963 2929 y(if)g(\(f[i])f(>)i(1\))1154 3039 y(filler)e(=)h(f[i])g(-)g(last)g (-)g(1)963 3148 y(else)1154 3258 y(filler)f(=)h(0)963 3367 y(if)g(\(filler\))1154 3477 y(t[field++])e(=)i(filler)963 3587 y(t[field++])e(=)i(1)963 3696 y(last)f(=)i(f[i])963 3806 y(flist[j++])d(=)i(field)g(-)g(1)772 3915 y(})581 4025 y(})581 4134 y(FIELDWIDTHS)e(=)i(join\(t,)f(1,)h(field)f(-)i(1\)) 581 4244 y(nfields)e(=)h(j)h(-)f(1)390 4354 y(})275 4518 y FB(Next)e(is)g(the)g(rule)g(that)g(actually)i(pro)s(cesses)e(the)g (data.)85 b(If)44 b(the)h(`)p Fz(-s)p FB(')g(option)g(is)g(giv)m(en,)50 b(then)150 4628 y Fz(suppress)32 b FB(is)i(true.)52 b(The)34 b(\014rst)f Fz(if)h FB(statemen)m(t)i(mak)m(es)f(sure)f(that)h(the)f (input)f(record)h(do)s(es)g(ha)m(v)m(e)i(the)150 4737 y(\014eld)22 b(separator.)39 b(If)22 b Fz(cut)f FB(is)i(pro)s(cessing)f (\014elds,)i Fz(suppress)c FB(is)j(true,)h(and)e(the)g(\014eld)g (separator)h(c)m(haracter)150 4847 y(is)30 b(not)h(in)f(the)h(record,)f (then)g(the)h(record)f(is)h(skipp)s(ed.)275 5011 y(If)e(the)h(record)g (is)h(v)-5 b(alid,)30 b(then)g Fz(gawk)f FB(has)h(split)g(the)g(data)h (in)m(to)g(\014elds,)f(either)g(using)g(the)g(c)m(haracter)150 5121 y(in)e Fz(FS)h FB(or)f(using)h(\014xed-length)f(\014elds)h(and)f Fz(FIELDWIDTHS)p FB(.)37 b(The)28 b(lo)s(op)h(go)s(es)g(through)f(the)h (list)h(of)e(\014elds)150 5230 y(that)35 b(should)e(b)s(e)g(prin)m (ted.)51 b(The)34 b(corresp)s(onding)f(\014eld)g(is)h(prin)m(ted)g(if)g (it)g(con)m(tains)i(data.)52 b(If)34 b(the)g(next)150 5340 y(\014eld)c(also)h(has)f(data,)i(then)e(the)g(separator)h(c)m (haracter)h(is)f(written)f(out)h(b)s(et)m(w)m(een)g(the)f(\014elds:)p eop end %%Page: 215 227 TeXDict begin 215 226 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(215)390 299 y Fz({)581 408 y(if)47 b(\(by_fields)e(&&)i(suppress)f(&&)h (index\($0,)e(FS\))i(!=)g(0\))772 518 y(next)581 737 y(for)g(\(i)g(=)g(1;)h(i)f(<=)g(nfields;)f(i++\))g({)772 847 y(if)h(\($flist[i])e(!=)i(""\))g({)963 956 y(printf)f("\045s",)g ($flist[i])963 1066 y(if)h(\(i)g(<)h(nfields)d(&&)j($flist[i+1])c(!=)j (""\))1154 1176 y(printf)f("\045s",)g(OFS)772 1285 y(})581 1395 y(})581 1504 y(print)g("")390 1614 y(})275 1747 y FB(This)40 b(v)m(ersion)i(of)f Fz(cut)f FB(relies)i(on)f Fz(gawk)p FB('s)g Fz(FIELDWIDTHS)d FB(v)-5 b(ariable)42 b(to)g(do)f(the)g(c)m(haracter-based)150 1857 y(cutting.)g(While)30 b(it)g(is)g(p)s(ossible)f(in)g(other)h Fz(awk)e FB(implemen)m(tations)j (to)g(use)e Fz(substr)e FB(\(see)k(Section)f(8.1.3)150 1966 y([String-Manipulation)h(F)-8 b(unctions],)31 b(page)g(129\),)h (it)e(is)g(also)h(extremely)g(painful.)40 b(The)29 b Fz(FIELDWIDTHS)150 2076 y FB(v)-5 b(ariable)44 b(supplies)f(an)h (elegan)m(t)i(solution)e(to)g(the)g(problem)f(of)h(pic)m(king)g(the)g (input)f(line)h(apart)g(b)m(y)150 2185 y(c)m(haracters.)150 2382 y Fj(13.2.2)63 b(Searc)m(hing)41 b(for)h(Regular)f(Expressions)h (in)f(Files)150 2529 y FB(The)d Fz(egrep)e FB(utilit)m(y)k(searc)m(hes) f(\014les)f(for)g(patterns.)64 b(It)39 b(uses)e(regular)i(expressions)f (that)g(are)h(almost)150 2638 y(iden)m(tical)28 b(to)e(those)h(a)m(v)-5 b(ailable)28 b(in)e Fz(awk)f FB(\(see)i(Chapter)e(2)h([Regular)h (Expressions],)g(page)f(24\).)41 b(It)26 b(is)g(used)150 2748 y(in)k(the)h(follo)m(wing)g(manner:)390 2881 y Fz(egrep)46 b FB([)i Fk(options)57 b FB(])48 b Fz(')p Fk(pattern)11 b Fz(')44 b Fk(files)57 b Fz(...)275 3014 y FB(The)34 b Fx(pattern)h FB(is)f(a)h(regular)g(expression.)54 b(In)34 b(t)m(ypical)i(usage,)h(the)e(regular)g(expression)f(is)h(quoted)150 3124 y(to)i(prev)m(en)m(t)g(the)g(shell)g(from)f(expanding)g(an)m(y)h (of)f(the)h(sp)s(ecial)g(c)m(haracters)h(as)f(\014le)g(name)f (wildcards.)150 3233 y(Normally)-8 b(,)35 b Fz(egrep)c FB(prin)m(ts)i(the)g(lines)g(that)g(matc)m(hed.)49 b(If)33 b(m)m(ultiple)g(\014le)g(names)g(are)g(pro)m(vided)g(on)g(the)150 3343 y(command)d(line,)h(eac)m(h)h(output)e(line)g(is)h(preceded)f(b)m (y)g(the)h(name)f(of)h(the)f(\014le)h(and)e(a)i(colon.)275 3476 y(The)e(options)i(to)g Fz(egrep)e FB(are)i(as)g(follo)m(ws:)150 3633 y Fz(-c)384 b FB(Prin)m(t)38 b(out)g(a)h(coun)m(t)f(of)h(the)f (lines)g(that)h(matc)m(hed)f(the)h(pattern,)h(instead)e(of)h(the)f (lines)630 3742 y(themselv)m(es.)150 3899 y Fz(-s)384 b FB(Be)44 b(silen)m(t.)80 b(No)43 b(output)g(is)g(pro)s(duced)e(and)i (the)g(exit)h(v)-5 b(alue)43 b(indicates)h(whether)f(the)630 4009 y(pattern)30 b(w)m(as)h(matc)m(hed.)150 4165 y Fz(-v)384 b FB(In)m(v)m(ert)23 b(the)f(sense)g(of)g(the)g(test.)39 b Fz(egrep)21 b FB(prin)m(ts)g(the)h(lines)h(that)f(do)g Fw(not)32 b FB(matc)m(h)23 b(the)f(pattern)630 4275 y(and)30 b(exits)h(successfully)f(if)h(the)f(pattern)h(is)f(not)h(matc)m(hed.) 150 4432 y Fz(-i)384 b FB(Ignore)31 b(case)g(distinctions)g(in)f(b)s (oth)g(the)g(pattern)h(and)e(the)i(input)e(data.)150 4588 y Fz(-l)384 b FB(Only)22 b(prin)m(t)h(\(list\))h(the)f(names)g(of) h(the)f(\014les)g(that)g(matc)m(hed,)j(not)d(the)g(lines)g(that)h(matc) m(hed.)150 4745 y Fz(-e)30 b Fk(pattern)630 4855 y FB(Use)g Fx(pattern)f FB(as)h(the)g(regexp)f(to)h(matc)m(h.)42 b(The)29 b(purp)s(ose)e(of)j(the)g(`)p Fz(-e)p FB(')f(option)h(is)f(to) h(allo)m(w)630 4964 y(patterns)g(that)h(start)g(with)f(a)h(`)p Fz(-)p FB('.)275 5121 y(This)h(v)m(ersion)i(uses)f(the)h Fz(getopt)e FB(library)h(function)g(\(see)h(Section)h(12.4)g([Pro)s (cessing)f(Command-)150 5230 y(Line)28 b(Options],)h(page)g(196\))h (and)e(the)h(\014le)f(transition)h(library)f(program)g(\(see)i(Section) f(12.3.1)i([Noting)150 5340 y(Data)h(File)g(Boundaries],)e(page)h (192\).)p eop end %%Page: 216 228 TeXDict begin 216 227 bop 150 -116 a FB(216)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(The)j(program)g(b)s(egins)g(with)h(a)g(descriptiv)m(e)h (commen)m(t)f(and)g(then)f(a)h Fz(BEGIN)e FB(rule)i(that)g(pro)s (cesses)150 408 y(the)23 b(command-line)h(argumen)m(ts)g(with)f Fz(getopt)p FB(.)36 b(The)23 b(`)p Fz(-i)p FB(')g(\(ignore)i(case\))f (option)g(is)f(particularly)h(easy)150 518 y(with)g Fz(gawk)p FB(;)h(w)m(e)g(just)f(use)g(the)g Fz(IGNORECASE)e FB(built-in)i(v)-5 b(ariable)25 b(\(see)g(Section)g(6.5)h([Built-in)f(V)-8 b(ariables],)150 628 y(page)31 b(107\):)390 774 y Fz(#)47 b(egrep.awk)f(---)h(simulate)e(egrep)i(in)g(awk)390 993 y(#)g(Options:)390 1103 y(#)191 b(-c)f(count)46 b(of)i(lines)390 1212 y(#)191 b(-s)f(silent)46 b(-)i(use)e(exit)h(value)390 1322 y(#)191 b(-v)f(invert)46 b(test,)g(success)g(if)h(no)h(match)390 1431 y(#)191 b(-i)f(ignore)46 b(case)390 1541 y(#)191 b(-l)f(print)46 b(filenames)g(only)390 1650 y(#)191 b(-e)f(argument)46 b(is)h(pattern)390 1760 y(#)390 1870 y(#)g(Requires)f(getopt)g(and)h (file)g(transition)e(library)g(functions)390 2089 y(BEGIN)h({)581 2198 y(while)g(\(\(c)h(=)h(getopt\(ARGC,)c(ARGV,)i("ce:svil"\)\))f(!=)i (-1\))g({)772 2308 y(if)g(\(c)g(==)g("c"\))963 2418 y(count_only++)772 2527 y(else)f(if)i(\(c)f(==)g("s"\))963 2637 y(no_print++)772 2746 y(else)f(if)i(\(c)f(==)g("v"\))963 2856 y(invert++)772 2966 y(else)f(if)i(\(c)f(==)g("i"\))963 3075 y(IGNORECASE)e(=)i(1)772 3185 y(else)f(if)i(\(c)f(==)g("l"\))963 3294 y(filenames_only++)772 3404 y(else)f(if)i(\(c)f(==)g("e"\))963 3513 y(pattern)f(=)h(Optarg)772 3623 y(else)963 3733 y(usage\(\))581 3842 y(})275 3988 y FB(Next)29 b(comes)h(the)g(co)s(de)f(that)h(handles)e(the)h Fz(egrep)p FB(-sp)s(eci\014c)f(b)s(eha)m(vior.)40 b(If)29 b(no)g(pattern)g(is)g(supplied)150 4098 y(with)34 b(`)p Fz(-e)p FB(',)h(the)f(\014rst)g(nonoption)g(on)g(the)g(command)g(line)h (is)f(used.)51 b(The)34 b Fz(awk)f FB(command-line)i(argu-)150 4208 y(men)m(ts)g(up)e(to)i Fz(ARGV[Optind])c FB(are)k(cleared,)h(so)f (that)g Fz(awk)e FB(w)m(on't)i(try)f(to)h(pro)s(cess)f(them)g(as)h (\014les.)52 b(If)150 4317 y(no)28 b(\014les)g(are)g(sp)s(eci\014ed,)g (the)g(standard)f(input)g(is)h(used,)g(and)f(if)h(m)m(ultiple)g (\014les)g(are)h(sp)s(eci\014ed,)f(w)m(e)g(mak)m(e)150 4427 y(sure)i(to)h(note)g(this)f(so)h(that)g(the)f(\014le)h(names)f (can)h(precede)f(the)h(matc)m(hed)g(lines)f(in)h(the)f(output:)581 4573 y Fz(if)47 b(\(pattern)f(==)h(""\))772 4682 y(pattern)f(=)h (ARGV[Optind++])581 4902 y(for)g(\(i)g(=)g(1;)h(i)f(<)h(Optind;)d (i++\))772 5011 y(ARGV[i])h(=)h("")581 5121 y(if)g(\(Optind)f(>=)h (ARGC\))f({)772 5230 y(ARGV[1])g(=)h("-")772 5340 y(ARGC)f(=)i(2)p eop end %%Page: 217 229 TeXDict begin 217 228 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(217)581 299 y Fz(})47 b(else)g(if)g(\(ARGC)g(-)g(Optind)f(>)i(1\))772 408 y(do_filenames++)390 628 y(#)191 b(if)47 b(\(IGNORECASE\))390 737 y(#)382 b(pattern)45 b(=)j(tolower\(pattern\))390 847 y(})275 986 y FB(The)30 b(last)j(t)m(w)m(o)f(lines)g(are)g(commen)m (ted)g(out,)g(since)g(they)f(are)h(not)g(needed)f(in)g Fz(gawk)p FB(.)42 b(They)31 b(should)150 1095 y(b)s(e)f(uncommen)m(ted) g(if)g(y)m(ou)h(ha)m(v)m(e)h(to)f(use)f(another)g(v)m(ersion)h(of)g Fz(awk)p FB(.)275 1234 y(The)42 b(next)h(set)h(of)f(lines)g(should)f(b) s(e)g(uncommen)m(ted)h(if)g(y)m(ou)g(are)g(not)g(using)g Fz(gawk)p FB(.)77 b(This)42 b(rule)150 1344 y(translates)33 b(all)f(the)g(c)m(haracters)h(in)e(the)h(input)f(line)h(in)m(to)g(lo)m (w)m(ercase)i(if)e(the)g(`)p Fz(-i)p FB(')f(option)h(is)g(sp)s (eci\014ed.)3713 1311 y Fo(1)150 1453 y FB(The)e(rule)g(is)g(commen)m (ted)i(out)e(since)h(it)g(is)f(not)h(necessary)g(with)f Fz(gawk)p FB(:)390 1592 y Fz(#{)390 1702 y(#)191 b(if)47 b(\(IGNORECASE\))390 1812 y(#)382 b($0)47 b(=)g(tolower\($0\))390 1921 y(#})275 2060 y FB(The)41 b Fz(beginfile)e FB(function)i(is)h (called)h(b)m(y)e(the)h(rule)g(in)f(`)p Fz(ftrans.awk)p FB(')e(when)i(eac)m(h)i(new)e(\014le)h(is)150 2170 y(pro)s(cessed.)82 b(In)43 b(this)i(case,)k(it)c(is)f(v)m(ery)h(simple;)51 b(all)45 b(it)g(do)s(es)f(is)g(initialize)j(a)e(v)-5 b(ariable)45 b Fz(fcount)d FB(to)150 2279 y(zero.)58 b Fz(fcount)34 b FB(trac)m(ks)j(ho)m(w)e(man)m(y)h(lines)g(in)g(the)g (curren)m(t)f(\014le)h(matc)m(hed)h(the)f(pattern)g(\(naming)g(the)150 2389 y(parameter)30 b Fz(junk)f FB(sho)m(ws)h(w)m(e)g(kno)m(w)g(that)h Fz(beginfile)c FB(is)j(called)i(with)d(a)i(parameter,)f(but)g(that)g(w) m(e're)150 2498 y(not)h(in)m(terested)g(in)f(its)h(v)-5 b(alue\):)390 2637 y Fz(function)46 b(beginfile\(junk\))390 2747 y({)581 2856 y(fcount)g(=)h(0)390 2966 y(})275 3105 y FB(The)31 b Fz(endfile)g FB(function)g(is)i(called)g(after)g(eac)m(h) g(\014le)g(has)f(b)s(een)f(pro)s(cessed.)46 b(It)32 b(a\013ects)i(the)e (output)150 3215 y(only)i(when)f(the)h(user)f(w)m(an)m(ts)i(a)f(coun)m (t)h(of)f(the)g(n)m(um)m(b)s(er)f(of)h(lines)g(that)g(matc)m(hed.)53 b Fz(no_print)31 b FB(is)j(true)150 3324 y(only)42 b(if)f(the)h(exit)g (status)g(is)f(desired.)74 b Fz(count_only)38 b FB(is)k(true)f(if)g (line)h(coun)m(ts)g(are)g(desired.)73 b Fz(egrep)150 3434 y FB(therefore)34 b(only)g(prin)m(ts)g(line)g(coun)m(ts)g(if)g (prin)m(ting)g(and)f(coun)m(ting)h(are)h(enabled.)51 b(The)33 b(output)h(format)150 3543 y(m)m(ust)d(b)s(e)f(adjusted)g(dep) s(ending)g(up)s(on)f(the)i(n)m(um)m(b)s(er)f(of)h(\014les)f(to)i(pro)s (cess.)42 b(Finally)-8 b(,)33 b Fz(fcount)c FB(is)i(added)150 3653 y(to)g Fz(total)p FB(,)e(so)i(that)g(w)m(e)g(kno)m(w)f(the)h (total)h(n)m(um)m(b)s(er)d(of)h(lines)h(that)g(matc)m(hed)g(the)g (pattern:)390 3792 y Fz(function)46 b(endfile\(file\))390 3901 y({)581 4011 y(if)h(\(!)g(no_print)f(&&)h(count_only\))772 4121 y(if)g(\(do_filenames\))963 4230 y(print)f(file)h(":")g(fcount)772 4340 y(else)963 4449 y(print)f(fcount)581 4669 y(total)g(+=)h(fcount) 390 4778 y(})275 4917 y FB(The)37 b(follo)m(wing)i(rule)e(do)s(es)g (most)h(of)g(the)g(w)m(ork)g(of)f(matc)m(hing)i(lines.)63 b(The)37 b(v)-5 b(ariable)38 b Fz(matches)e FB(is)150 5027 y(true)c(if)g(the)g(line)h(matc)m(hed)g(the)f(pattern.)46 b(If)32 b(the)g(user)f(w)m(an)m(ts)i(lines)g(that)f(did)g(not)g(matc)m (h,)i(the)e(sense)150 5136 y(of)41 b Fz(matches)e FB(is)j(in)m(v)m (erted)g(using)e(the)h(`)p Fz(!)p FB(')h(op)s(erator.)73 b Fz(fcount)39 b FB(is)i(incremen)m(ted)h(with)f(the)g(v)-5 b(alue)42 b(of)p 150 5241 1200 4 v 199 5308 a Fo(1)275 5340 y Fn(It)25 b(also)i(in)n(tro)r(duces)f(a)g(subtle)f(bug;)h(if)g(a) g(matc)n(h)g(happ)r(ens,)f(w)n(e)h(output)f(the)g(translated)i(line,)f (not)g(the)f(original.)p eop end %%Page: 218 230 TeXDict begin 218 229 bop 150 -116 a FB(218)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz(matches)p FB(,)k(whic)m(h)g(is)g(either)h(one)g(or)f(zero,)j (dep)s(ending)32 b(up)s(on)h(a)i(successful)f(or)h(unsuccessful)e(matc) m(h.)150 408 y(If)d(the)g(line)h(do)s(es)f(not)h(matc)m(h,)g(the)g Fz(next)e FB(statemen)m(t)j(just)e(mo)m(v)m(es)i(on)e(to)h(the)g(next)f (record.)275 555 y(A)k(n)m(um)m(b)s(er)g(of)g(additional)i(tests)f(are) g(made,)h(but)e(they)h(are)g(only)g(done)f(if)h(w)m(e)g(are)g(not)g (coun)m(ting)150 664 y(lines.)73 b(First,)44 b(if)d(the)g(user)g(only)g (w)m(an)m(ts)h(exit)f(status)h(\()p Fz(no_print)d FB(is)i(true\),)j (then)d(it)g(is)g(enough)g(to)150 774 y(kno)m(w)29 b(that)g Fw(one)36 b FB(line)29 b(in)f(this)h(\014le)g(matc)m(hed,)h(and)e(w)m (e)h(can)g(skip)f(on)h(to)g(the)g(next)g(\014le)g(with)f Fz(nextfile)p FB(.)150 883 y(Similarly)-8 b(,)28 b(if)e(w)m(e)g(are)h (only)f(prin)m(ting)g(\014le)g(names,)h(w)m(e)f(can)g(prin)m(t)g(the)g (\014le)g(name,)h(and)f(then)f(skip)h(to)h(the)150 993 y(next)k(\014le)g(with)f Fz(nextfile)p FB(.)40 b(Finally)-8 b(,)32 b(eac)m(h)g(line)f(is)g(prin)m(ted,)f(with)h(a)g(leading)h (\014le)e(name)h(and)f(colon)i(if)150 1103 y(necessary:)390 1249 y Fz({)581 1358 y(matches)46 b(=)h(\($0)g(~)h(pattern\))581 1468 y(if)f(\(invert\))772 1577 y(matches)f(=)h(!)h(matches)581 1797 y(fcount)e(+=)h(matches)189 b(#)48 b(1)f(or)g(0)581 2016 y(if)g(\(!)g(matches\))772 2125 y(next)581 2345 y(if)g(\(!)g(count_only\))e({)772 2454 y(if)i(\(no_print\))963 2564 y(nextfile)772 2783 y(if)g(\(filenames_only\))c({)963 2892 y(print)j(FILENAME)963 3002 y(nextfile)772 3112 y(})772 3331 y(if)h(\(do_filenames\))963 3440 y(print)f(FILENAME)g(":") h($0)772 3550 y(else)963 3660 y(print)581 3769 y(})390 3879 y(})275 4025 y FB(The)34 b Fz(END)h FB(rule)g(tak)m(es)i(care)f (of)g(pro)s(ducing)e(the)i(correct)g(exit)h(status.)56 b(If)35 b(there)g(are)h(no)g(matc)m(hes,)150 4134 y(the)31 b(exit)g(status)g(is)f(one;)h(otherwise)g(it)g(is)f(zero:)390 4281 y Fz(END)190 b(\\)390 4390 y({)581 4500 y(if)47 b(\(total)f(==)h(0\))772 4609 y(exit)f(1)581 4719 y(exit)h(0)390 4829 y(})275 4975 y FB(The)29 b Fz(usage)g FB(function)h(prin)m(ts)g(a) h(usage)g(message)g(in)g(case)g(of)g(in)m(v)-5 b(alid)30 b(options,)h(and)f(then)g(exits:)390 5121 y Fz(function)46 b(usage\()189 b(e\))390 5230 y({)581 5340 y(e)47 b(=)h("Usage:)e(egrep) g([-csvil])g([-e)g(pat])h([files)f(...]")p eop end %%Page: 219 231 TeXDict begin 219 230 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(219)581 299 y Fz(e)47 b(=)h(e)f("\\n\\tegrep)e([-csvil])h(pat)h([files)f(...]") 581 408 y(print)g(e)i(>)f("/dev/stderr")581 518 y(exit)g(1)390 628 y(})275 766 y FB(The)29 b(v)-5 b(ariable)32 b Fz(e)e FB(is)g(used)g(so)g(that)h(the)g(function)f(\014ts)g(nicely)h(on)f(the) h(prin)m(ted)f(page.)275 903 y(Just)22 b(a)h(note)g(on)g(programming)g (st)m(yle:)38 b(y)m(ou)23 b(ma)m(y)g(ha)m(v)m(e)h(noticed)g(that)f(the) g Fz(END)f FB(rule)h(uses)f(bac)m(kslash)150 1013 y(con)m(tin)m (uation,)k(with)c(the)h(op)s(en)f(brace)h(on)f(a)h(line)g(b)m(y)g (itself.)38 b(This)22 b(is)h(so)g(that)g(it)g(more)f(closely)i(resem)m (bles)150 1123 y(the)36 b(w)m(a)m(y)h(functions)f(are)g(written.)58 b(Man)m(y)36 b(of)g(the)g(examples)h(in)f(this)g(c)m(hapter)g(use)g (this)g(st)m(yle.)58 b(Y)-8 b(ou)150 1232 y(can)31 b(decide)f(for)h(y)m (ourself)f(if)h(y)m(ou)f(lik)m(e)i(writing)e(y)m(our)h Fz(BEGIN)e FB(and)g Fz(END)h FB(rules)g(this)g(w)m(a)m(y)h(or)g(not.) 150 1435 y Fj(13.2.3)63 b(Prin)m(ting)41 b(out)g(User)h(Information)150 1582 y FB(The)30 b Fz(id)h FB(utilit)m(y)h(lists)g(a)f(user's)g(real)g (and)g(e\013ectiv)m(e)i(user)d(ID)i(n)m(um)m(b)s(ers,)e(real)h(and)g (e\013ectiv)m(e)i(group)e(ID)150 1691 y(n)m(um)m(b)s(ers,)c(and)g(the)h (user's)f(group)g(set,)i(if)f(an)m(y)-8 b(.)40 b Fz(id)28 b FB(only)f(prin)m(ts)g(the)h(e\013ectiv)m(e)j(user)c(ID)h(and)f(group) g(ID)150 1801 y(if)j(they)h(are)g(di\013eren)m(t)g(from)f(the)g(real)h (ones.)42 b(If)30 b(p)s(ossible,)g Fz(id)g FB(also)h(supplies)f(the)g (corresp)s(onding)g(user)150 1911 y(and)g(group)g(names.)40 b(The)30 b(output)g(migh)m(t)h(lo)s(ok)g(lik)m(e)h(this:)390 2049 y Fz($)47 b(id)410 2162 y Fy(a)533 2158 y Fz(uid=2076\(arnold\))d (gid=10\(staff\))g(groups=10\(staff\),4\(tty\))275 2296 y FB(This)30 b(information)i(is)f(part)h(of)f(what)h(is)f(pro)m(vided)g (b)m(y)h Fz(gawk)p FB('s)e Fz(PROCINFO)f FB(arra)m(y)j(\(see)h(Section) f(6.5)150 2406 y([Built-in)k(V)-8 b(ariables],)39 b(page)d(107\).)57 b(Ho)m(w)m(ev)m(er,)39 b(the)c Fz(id)g FB(utilit)m(y)i(pro)m(vides)e(a) h(more)f(palatable)i(output)150 2515 y(than)30 b(just)g(individual)g(n) m(um)m(b)s(ers.)275 2653 y(Here)e(is)g(a)g(simple)g(v)m(ersion)g(of)g Fz(id)f FB(written)h(in)g Fz(awk)p FB(.)39 b(It)28 b(uses)f(the)h(user) f(database)i(library)e(functions)150 2763 y(\(see)36 b(Section)g(12.5)g([Reading)g(the)f(User)g(Database],)k(page)d(201\))g (and)f(the)g(group)f(database)i(library)150 2872 y(functions)30 b(\(see)h(Section)g(12.6)h([Reading)f(the)g(Group)f(Database],)i(page)g (205\):)275 3010 y(The)c(program)h(is)h(fairly)f(straigh)m(tforw)m (ard.)41 b(All)30 b(the)g(w)m(ork)f(is)g(done)h(in)e(the)i Fz(BEGIN)e FB(rule.)40 b(The)29 b(user)150 3120 y(and)j(group)h(ID)g(n) m(um)m(b)s(ers)f(are)h(obtained)h(from)e Fz(PROCINFO)p FB(.)46 b(The)33 b(co)s(de)g(is)g(rep)s(etitiv)m(e.)50 b(The)33 b(en)m(try)g(in)150 3229 y(the)28 b(user)f(database)i(for)e (the)h(real)h(user)e(ID)h(n)m(um)m(b)s(er)e(is)i(split)g(in)m(to)h (parts)e(at)i(the)f(`)p Fz(:)p FB('.)40 b(The)27 b(name)h(is)g(the)150 3339 y(\014rst)i(\014eld.)40 b(Similar)30 b(co)s(de)h(is)f(used)g(for)g (the)h(e\013ectiv)m(e)i(user)c(ID)i(n)m(um)m(b)s(er)e(and)h(the)g (group)g(n)m(um)m(b)s(ers:)390 3477 y Fz(#)47 b(id.awk)g(---)f (implement)g(id)h(in)g(awk)390 3587 y(#)390 3696 y(#)g(Requires)f(user) h(and)g(group)f(library)g(functions)390 3915 y(#)h(output)g(is:)390 4025 y(#)g(uid=12\(foo\))e(euid=34\(bar\))g(gid=3\(baz\))g(\\)390 4134 y(#)620 b(egid=5\(blat\))45 b(groups=9\(nine\),2\(two\),1)o(\(one) o(\))390 4354 y(BEGIN)190 b(\\)390 4463 y({)581 4573 y(uid)47 b(=)g(PROCINFO["uid"])581 4682 y(euid)g(=)g(PROCINFO["euid"]) 581 4792 y(gid)g(=)g(PROCINFO["gid"])581 4902 y(egid)g(=)g (PROCINFO["egid"])581 5121 y(printf\("uid=\045d",)c(uid\))581 5230 y(pw)k(=)h(getpwuid\(uid\))581 5340 y(if)f(\(pw)g(!=)g(""\))g({)p eop end %%Page: 220 232 TeXDict begin 220 231 bop 150 -116 a FB(220)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)772 299 y Fz(split\(pw,)45 b(a,)i(":"\))772 408 y(printf\("\(\045s\)",)d (a[1]\))581 518 y(})581 737 y(if)j(\(euid)f(!=)i(uid\))e({)772 847 y(printf\(")f(euid=\045d",)h(euid\))772 956 y(pw)h(=)g (getpwuid\(euid\))772 1066 y(if)g(\(pw)g(!=)g(""\))g({)963 1176 y(split\(pw,)e(a,)i(":"\))963 1285 y(printf\("\(\045s\)",)d (a[1]\))772 1395 y(})581 1504 y(})581 1724 y(printf\(")h(gid=\045d",)h (gid\))581 1833 y(pw)h(=)h(getgrgid\(gid\))581 1943 y(if)f(\(pw)g(!=)g (""\))g({)772 2052 y(split\(pw,)e(a,)i(":"\))772 2162 y(printf\("\(\045s\)",)d(a[1]\))581 2271 y(})581 2491 y(if)j(\(egid)f(!=)i(gid\))e({)772 2600 y(printf\(")f(egid=\045d",)h (egid\))772 2710 y(pw)h(=)g(getgrgid\(egid\))772 2819 y(if)g(\(pw)g(!=)g(""\))g({)963 2929 y(split\(pw,)e(a,)i(":"\))963 3039 y(printf\("\(\045s\)",)d(a[1]\))772 3148 y(})581 3258 y(})581 3477 y(for)j(\(i)g(=)g(1;)h(\("group")d(i\))i(in)h (PROCINFO;)d(i++\))h({)772 3587 y(if)h(\(i)g(==)g(1\))963 3696 y(printf\(")e(groups="\))772 3806 y(group)h(=)i(PROCINFO["group") 43 b(i])772 3915 y(printf\("\045d",)h(group\))772 4025 y(pw)j(=)g(getgrgid\(group\))772 4134 y(if)g(\(pw)g(!=)g(""\))g({)963 4244 y(split\(pw,)e(a,)i(":"\))963 4354 y(printf\("\(\045s\)",)d (a[1]\))772 4463 y(})772 4573 y(if)j(\(\("group")e(\(i+1\)\))h(in)i (PROCINFO\))963 4682 y(printf\(","\))581 4792 y(})581 5011 y(print)e("")390 5121 y(})p eop end %%Page: 221 233 TeXDict begin 221 232 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(221)275 299 y(The)33 b(test)i(in)f(the)h Fz(for)e FB(lo)s(op)h(is)h(w)m(orth)f (noting.)52 b(An)m(y)35 b(supplemen)m(tary)e(groups)h(in)g(the)g Fz(PROCINFO)150 408 y FB(arra)m(y)i(ha)m(v)m(e)i(the)e(indices)g Fz("group1")d FB(through)i Fz("group)p Fk(N)11 b Fz(")34 b FB(for)h(some)i Fx(N)p FB(,)f(i.e.,)i(the)e(total)i(n)m(um)m(b)s(er)d (of)150 518 y(supplemen)m(tary)25 b(groups.)38 b(Ho)m(w)m(ev)m(er,)29 b(w)m(e)c(don't)h(kno)m(w)f(in)g(adv)-5 b(ance)26 b(ho)m(w)f(man)m(y)g (of)g(these)h(groups)f(there)150 628 y(are.)275 766 y(This)38 b(lo)s(op)h(w)m(orks)g(b)m(y)h(starting)f(at)h(one,)i(concatenating)g (the)d(v)-5 b(alue)40 b(with)f Fz("group")p FB(,)h(and)e(then)150 875 y(using)26 b Fz(in)g FB(to)h(see)g(if)g(that)g(v)-5 b(alue)27 b(is)f(in)h(the)f(arra)m(y)-8 b(.)41 b(Ev)m(en)m(tually)-8 b(,)29 b Fz(i)d FB(is)h(incremen)m(ted)g(past)f(the)h(last)g(group)150 985 y(in)j(the)h(arra)m(y)g(and)e(the)i(lo)s(op)f(exits.)275 1123 y(The)c(lo)s(op)h(is)g(also)h(correct)g(if)f(there)h(are)f Fw(no)33 b FB(supplemen)m(tary)27 b(groups;)h(then)e(the)i(condition)f (is)g(false)150 1232 y(the)k(\014rst)e(time)i(it's)g(tested,)h(and)d (the)i(lo)s(op)g(b)s(o)s(dy)d(nev)m(er)j(executes.)150 1435 y Fj(13.2.4)63 b(Splitting)42 b(a)e(Large)h(File)g(in)m(to)g (Pieces)150 1582 y FB(The)30 b Fz(split)f FB(program)h(splits)g(large)i (text)f(\014les)g(in)m(to)g(smaller)g(pieces.)41 b(Usage)32 b(is)e(as)h(follo)m(ws:)390 1720 y Fz(split)46 b FB([)p Fz(-)p Fk(count)11 b FB(])46 b Fz(file)h FB([)h Fk(prefix)57 b FB(])275 1858 y(By)33 b(default,)h(the)f(output)f(\014les)h(are)h (named)e(`)p Fz(xaa)p FB(',)i(`)p Fz(xab)p FB(',)f(and)f(so)h(on.)49 b(Eac)m(h)33 b(\014le)g(has)g(1000)i(lines)150 1967 y(in)e(it,)j(with)d (the)h(lik)m(ely)i(exception)e(of)g(the)g(last)h(\014le.)51 b(T)-8 b(o)34 b(c)m(hange)h(the)f(n)m(um)m(b)s(er)e(of)i(lines)g(in)g (eac)m(h)h(\014le,)150 2077 y(supply)h(a)j(n)m(um)m(b)s(er)d(on)i(the)g (command)g(line)g(preceded)g(with)f(a)i(min)m(us;)i(e.g.,)g(`)p Fz(-500)p FB(')d(for)f(\014les)h(with)150 2186 y(500)h(lines)f(in)g (them)f(instead)h(of)g(1000.)65 b(T)-8 b(o)38 b(c)m(hange)h(the)f(name) g(of)g(the)g(output)f(\014les)h(to)g(something)150 2296 y(lik)m(e)27 b(`)p Fz(myfileaa)p FB(',)e(`)p Fz(myfileab)p FB(',)g(and)h(so)g(on,)g(supply)f(an)g(additional)i(argumen)m(t)f(that) g(sp)s(eci\014es)g(the)g(\014le)150 2406 y(name)k(pre\014x.)275 2544 y(Here)44 b(is)h(a)f(v)m(ersion)h(of)g Fz(split)d FB(in)i Fz(awk)p FB(.)82 b(It)44 b(uses)g(the)h Fz(ord)e FB(and)h Fz(chr)f FB(functions)h(presen)m(ted)g(in)150 2653 y(Section)31 b(12.2.6)i([T)-8 b(ranslating)31 b(Bet)m(w)m(een)i (Characters)d(and)g(Num)m(b)s(ers],)g(page)h(188.)275 2791 y(The)f(program)g(\014rst)g(sets)h(its)g(defaults,)g(and)f(then)h (tests)g(to)h(mak)m(e)f(sure)f(there)h(are)g(not)g(to)s(o)h(man)m(y)150 2901 y(argumen)m(ts.)50 b(It)34 b(then)f(lo)s(oks)h(at)g(eac)m(h)h (argumen)m(t)f(in)f(turn.)49 b(The)33 b(\014rst)g(argumen)m(t)g(could)h (b)s(e)f(a)h(min)m(us)150 3010 y(sign)j(follo)m(w)m(ed)h(b)m(y)f(a)g(n) m(um)m(b)s(er.)59 b(If)36 b(it)i(is,)g(this)f(happ)s(ens)e(to)i(lo)s (ok)h(lik)m(e)g(a)f(negativ)m(e)i(n)m(um)m(b)s(er,)f(so)f(it)g(is)150 3120 y(made)d(p)s(ositiv)m(e,)i(and)e(that)h(is)f(the)g(coun)m(t)h(of)f (lines.)52 b(The)34 b(data)h(\014le)f(name)g(is)g(skipp)s(ed)f(o)m(v)m (er)i(and)f(the)150 3229 y(\014nal)c(argumen)m(t)h(is)f(used)g(as)g (the)h(pre\014x)e(for)h(the)h(output)f(\014le)g(names:)390 3367 y Fz(#)47 b(split.awk)f(---)h(do)g(split)f(in)h(awk)390 3477 y(#)390 3587 y(#)g(Requires)f(ord)h(and)g(chr)g(library)f (functions)390 3806 y(#)h(usage:)g(split)f([-num])g([file])g([outname]) 390 4025 y(BEGIN)g({)581 4134 y(outfile)g(=)h("x")190 b(#)48 b(default)581 4244 y(count)e(=)i(1000)581 4354 y(if)f(\(ARGC)f(>)i(4\))772 4463 y(usage\(\))581 4682 y(i)f(=)h(1)581 4792 y(if)f(\(ARGV[i])f(~)h(/^-[0-9]+$/\))e({)772 4902 y(count)h(=)i(-ARGV[i])772 5011 y(ARGV[i])e(=)h("")772 5121 y(i++)581 5230 y(})581 5340 y(#)g(test)g(argv)g(in)g(case)f (reading)g(from)h(stdin)f(instead)g(of)h(file)p eop end %%Page: 222 234 TeXDict begin 222 233 bop 150 -116 a FB(222)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)581 299 y Fz(if)47 b(\(i)g(in)g(ARGV\))772 408 y(i++)190 b(#)47 b(skip)g(data)g(file)f(name)581 518 y(if)h(\(i)g(in)g(ARGV\))g ({)772 628 y(outfile)f(=)h(ARGV[i])772 737 y(ARGV[i])f(=)h("")581 847 y(})581 1066 y(s1)g(=)h(s2)f(=)g("a")581 1176 y(out)g(=)g (\(outfile)f(s1)h(s2\))390 1285 y(})275 1431 y FB(The)29 b(next)h(rule)f(do)s(es)g(most)i(of)e(the)h(w)m(ork.)41 b Fz(tcount)28 b FB(\(temp)s(orary)i(coun)m(t\))g(trac)m(ks)h(ho)m(w)f (man)m(y)g(lines)150 1541 y(ha)m(v)m(e)36 b(b)s(een)d(prin)m(ted)h(to)h (the)g(output)f(\014le)g(so)h(far.)53 b(If)34 b(it)h(is)f(greater)i (than)e Fz(count)p FB(,)g(it)h(is)f(time)h(to)h(close)150 1650 y(the)30 b(curren)m(t)g(\014le)g(and)f(start)h(a)h(new)e(one.)41 b Fz(s1)29 b FB(and)h Fz(s2)f FB(trac)m(k)i(the)f(curren)m(t)g (su\016xes)f(for)h(the)g(\014le)g(name.)150 1760 y(If)j(they)h(are)f(b) s(oth)g(`)p Fz(z)p FB(',)i(the)e(\014le)h(is)f(just)g(to)s(o)h(big.)50 b(Otherwise,)34 b Fz(s1)f FB(mo)m(v)m(es)i(to)f(the)f(next)h(letter)h (in)e(the)150 1870 y(alphab)s(et)d(and)g Fz(s2)g FB(starts)h(o)m(v)m (er)g(again)h(at)f(`)p Fz(a)p FB(':)390 2016 y Fz({)581 2125 y(if)47 b(\(++tcount)e(>)j(count\))e({)772 2235 y(close\(out\))772 2345 y(if)h(\(s2)g(==)g("z"\))g({)963 2454 y(if)g(\(s1)g(==)g("z"\))g({)1154 2564 y(printf\("split:)d(\045s)j (is)g(too)g(large)f(to)h(split\\n",)1488 2673 y(FILENAME\))e(>)i ("/dev/stderr")1154 2783 y(exit)f(1)963 2892 y(})963 3002 y(s1)h(=)g(chr\(ord\(s1\))e(+)j(1\))963 3112 y(s2)f(=)g("a")772 3221 y(})772 3331 y(else)963 3440 y(s2)g(=)g(chr\(ord\(s2\))e(+)j(1\)) 772 3550 y(out)f(=)g(\(outfile)f(s1)h(s2\))772 3660 y(tcount)f(=)h(1) 581 3769 y(})581 3879 y(print)f(>)i(out)390 3988 y(})150 4134 y FB(The)30 b Fz(usage)f FB(function)h(simply)g(prin)m(ts)g(an)g (error)g(message)h(and)f(exits:)390 4281 y Fz(function)46 b(usage\()141 b(e\))390 4390 y({)581 4500 y(e)47 b(=)h("usage:)e(split) g([-num])g([file])g([outname]")581 4609 y(print)g(e)i(>)f ("/dev/stderr")581 4719 y(exit)g(1)390 4829 y(})150 4975 y FB(The)30 b(v)-5 b(ariable)31 b Fz(e)f FB(is)g(used)g(so)h(that)g (the)f(function)g(\014ts)g(nicely)h(on)g(the)f(page.)275 5121 y(This)f(program)i(is)f(a)h(bit)g(slopp)m(y;)f(it)h(relies)h(on)e Fz(awk)g FB(to)h(automatically)i(close)f(the)f(last)g(\014le)g(instead) 150 5230 y(of)h(doing)g(it)g(in)g(an)g Fz(END)e FB(rule.)45 b(It)32 b(also)h(assumes)f(that)g(letters)h(are)f(con)m(tiguous)h(in)f (the)g(c)m(haracter)h(set,)150 5340 y(whic)m(h)d(isn't)h(true)f(for)g (EBCDIC)g(systems.)p eop end %%Page: 223 235 TeXDict begin 223 234 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(223)150 299 y Fj(13.2.5)63 b(Duplicating)41 b(Output)g(in)m(to)g(Multiple)h (Files)150 446 y FB(The)25 b Fz(tee)h FB(program)f(is)h(kno)m(wn)g(as)g (a)g(\\pip)s(e)g(\014tting.")40 b Fz(tee)25 b FB(copies)i(its)f (standard)g(input)f(to)h(its)h(standard)150 555 y(output)d(and)f(also)i (duplicates)g(it)f(to)h(the)f(\014les)g(named)g(on)g(the)g(command)g (line.)39 b(Its)24 b(usage)g(is)g(as)h(follo)m(ws:)390 691 y Fz(tee)47 b FB([)p Fz(-a)p FB(])h Fz(file)e(...)275 827 y FB(The)31 b(`)p Fz(-a)p FB(')h(option)g(tells)h Fz(tee)e FB(to)i(app)s(end)d(to)i(the)g(named)g(\014les,)g(instead)g (of)h(truncating)f(them)g(and)150 936 y(starting)f(o)m(v)m(er.)275 1072 y(The)41 b Fz(BEGIN)f FB(rule)h(\014rst)g(mak)m(es)h(a)g(cop)m(y)g (of)g(all)g(the)g(command-line)g(argumen)m(ts)g(in)m(to)g(an)f(arra)m (y)150 1181 y(named)33 b Fz(copy)p FB(.)47 b Fz(ARGV[0])31 b FB(is)i(not)h(copied,)g(since)g(it)f(is)g(not)h(needed.)48 b Fz(tee)32 b FB(cannot)i(use)f Fz(ARGV)f FB(directly)-8 b(,)150 1291 y(since)31 b Fz(awk)e FB(attempts)j(to)f(pro)s(cess)f(eac) m(h)h(\014le)g(name)f(in)g Fz(ARGV)f FB(as)i(input)e(data.)275 1426 y(If)21 b(the)h(\014rst)f(argumen)m(t)i(is)f(`)p Fz(-a)p FB(',)h(then)f(the)g(\015ag)h(v)-5 b(ariable)22 b Fz(append)f FB(is)h(set)g(to)h(true,)g(and)f(b)s(oth)f Fz(ARGV[1])150 1536 y FB(and)36 b Fz(copy[1])e FB(are)i(deleted.)59 b(If)36 b Fz(ARGC)e FB(is)j(less)f(than)g(t)m(w)m(o,)j(then)d(no)g (\014le)g(names)g(w)m(ere)h(supplied)e(and)150 1646 y Fz(tee)30 b FB(prin)m(ts)h(a)h(usage)f(message)i(and)d(exits.)44 b(Finally)-8 b(,)33 b Fz(awk)e FB(is)g(forced)g(to)h(read)f(the)g (standard)g(input)f(b)m(y)150 1755 y(setting)h Fz(ARGV[1])e FB(to)i Fz("-")e FB(and)h Fz(ARGC)f FB(to)j(t)m(w)m(o:)390 1891 y Fz(#)47 b(tee.awk)f(---)h(tee)g(in)g(awk)390 2110 y(BEGIN)190 b(\\)390 2220 y({)581 2329 y(for)47 b(\(i)g(=)g(1;)h(i)f(<) h(ARGC;)e(i++\))772 2439 y(copy[i])g(=)h(ARGV[i])581 2658 y(if)g(\(ARGV[1])f(==)h("-a"\))f({)772 2767 y(append)g(=)h(1)772 2877 y(delete)f(ARGV[1])772 2987 y(delete)g(copy[1])772 3096 y(ARGC--)581 3206 y(})581 3315 y(if)h(\(ARGC)f(<)i(2\))f({)772 3425 y(print)f("usage:)g(tee)h([-a])g(file)f(...")h(>)g("/dev/stderr") 772 3535 y(exit)f(1)581 3644 y(})581 3754 y(ARGV[1])g(=)h("-")581 3863 y(ARGC)g(=)g(2)390 3973 y(})275 4109 y FB(The)31 b(single)h(rule)g(do)s(es)f(all)i(the)f(w)m(ork.)45 b(Since)32 b(there)g(is)g(no)g(pattern,)g(it)g(is)g(executed)h(for)f(eac)m(h)h (line)150 4218 y(of)i(input.)52 b(The)34 b(b)s(o)s(dy)f(of)i(the)g (rule)f(simply)h(prin)m(ts)f(the)h(line)f(in)m(to)i(eac)m(h)g(\014le)f (on)f(the)h(command)f(line,)150 4328 y(and)c(then)g(to)h(the)g (standard)e(output:)390 4463 y Fz({)581 4573 y(#)47 b(moving)f(the)h (if)h(outside)d(the)i(loop)g(makes)f(it)h(run)g(faster)581 4682 y(if)g(\(append\))772 4792 y(for)g(\(i)g(in)g(copy\))963 4902 y(print)f(>>)h(copy[i])581 5011 y(else)772 5121 y(for)g(\(i)g(in)g(copy\))963 5230 y(print)f(>)i(copy[i])581 5340 y(print)p eop end %%Page: 224 236 TeXDict begin 224 235 bop 150 -116 a FB(224)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(})150 431 y FB(It)g(is)h(also)g(p)s(ossible)f(to)h(write)g (the)f(lo)s(op)h(this)f(w)m(a)m(y:)390 563 y Fz(for)47 b(\(i)g(in)g(copy\))581 672 y(if)g(\(append\))772 782 y(print)f(>>)h(copy[i])581 891 y(else)772 1001 y(print)f(>)i(copy[i]) 150 1133 y FB(This)33 b(is)g(more)h(concise)h(but)e(it)h(is)g(also)g (less)g(e\016cien)m(t.)52 b(The)33 b(`)p Fz(if)p FB(')h(is)f(tested)i (for)e(eac)m(h)i(record)e(and)g(for)150 1243 y(eac)m(h)h(output)e (\014le.)47 b(By)33 b(duplicating)g(the)g(lo)s(op)g(b)s(o)s(dy)-8 b(,)32 b(the)g(`)p Fz(if)p FB(')h(is)g(only)f(tested)i(once)f(for)f (eac)m(h)i(input)150 1352 y(record.)47 b(If)31 b(there)i(are)g Fx(N)42 b FB(input)31 b(records)i(and)e Fx(M)43 b FB(output)32 b(\014les,)h(the)f(\014rst)g(metho)s(d)g(only)g(executes)i Fx(N)150 1462 y FB(`)p Fz(if)p FB(')c(statemen)m(ts,)j(while)d(the)h (second)f(executes)i Fx(N)10 b Fz(*)p Fx(M)40 b FB(`)p Fz(if)p FB(')30 b(statemen)m(ts.)275 1594 y(Finally)-8 b(,)32 b(the)e Fz(END)g FB(rule)g(cleans)h(up)e(b)m(y)h(closing)i(all)f (the)g(output)f(\014les:)390 1726 y Fz(END)190 b(\\)390 1835 y({)581 1945 y(for)47 b(\(i)g(in)g(copy\))772 2054 y(close\(copy[i]\))390 2164 y(})150 2358 y Fj(13.2.6)63 b(Prin)m(ting)41 b(Nonduplicated)g(Lines)h(of)f(T)-10 b(ext)150 2505 y FB(The)34 b Fz(uniq)f FB(utilit)m(y)j(reads)f(sorted)f (lines)h(of)g(data)g(on)g(its)g(standard)e(input,)i(and)f(b)m(y)h (default)g(remo)m(v)m(es)150 2615 y(duplicate)h(lines.)57 b(In)35 b(other)g(w)m(ords,)i(it)f(only)g(prin)m(ts)f(unique)g (lines|hence)h(the)f(name.)57 b Fz(uniq)34 b FB(has)i(a)150 2724 y(n)m(um)m(b)s(er)29 b(of)i(options.)41 b(The)30 b(usage)g(is)h(as)g(follo)m(ws:)390 2856 y Fz(uniq)47 b FB([)p Fz(-udc)g FB([)p Fz(-)p Fk(n)11 b FB(]])47 b([)p Fz(+)p Fk(n)11 b FB(])47 b([)h Fk(input)f(file)57 b FB([)48 b Fk(output)e(file)57 b FB(]])275 2988 y(The)29 b(options)i(for)f Fz(uniq)f FB(are:)150 3142 y Fz(-d)384 b FB(Pnly)30 b(prin)m(t)g(only)g (rep)s(eated)h(lines.)150 3296 y Fz(-u)384 b FB(Prin)m(t)30 b(only)h(nonrep)s(eated)f(lines.)150 3451 y Fz(-c)384 b FB(Coun)m(t)20 b(lines.)38 b(This)19 b(option)i(o)m(v)m(errides)g(`)p Fz(-d)p FB(')f(and)g(`)p Fz(-u)p FB('.)37 b(Both)21 b(rep)s(eated)g (and)e(nonrep)s(eated)630 3560 y(lines)31 b(are)f(coun)m(ted.)150 3714 y Fz(-)p Fk(n)384 b FB(Skip)30 b Fx(n)g FB(\014elds)h(b)s(efore)f (comparing)i(lines.)42 b(The)31 b(de\014nition)f(of)h(\014elds)g(is)g (similar)g(to)h Fz(awk)p FB('s)630 3824 y(default:)41 b(non)m(whitespace)31 b(c)m(haracters)h(separated)f(b)m(y)f(runs)f(of)h (spaces)h(and/or)f(tabs.)150 3978 y Fz(+)p Fk(n)384 b FB(Skip)40 b Fx(n)g FB(c)m(haracters)i(b)s(efore)e(comparing)h(lines.) 71 b(An)m(y)41 b(\014elds)f(sp)s(eci\014ed)f(with)i(`)p Fz(-)p Fk(n)11 b FB(')40 b(are)630 4088 y(skipp)s(ed)29 b(\014rst.)150 4242 y Fk(input)g(file)630 4352 y FB(Data)36 b(is)e(read)g(from)f(the)h(input)f(\014le)h(named)g(on)g(the)g(command) g(line,)h(instead)f(of)g(from)630 4461 y(the)d(standard)e(input.)150 4615 y Fk(output)g(file)630 4725 y FB(The)21 b(generated)h(output)f(is) g(sen)m(t)h(to)g(the)g(named)f(output)g(\014le,)i(instead)f(of)f(to)h (the)g(standard)630 4835 y(output.)275 4989 y(Normally)31 b Fz(uniq)e FB(b)s(eha)m(v)m(es)i(as)f(if)h(b)s(oth)e(the)i(`)p Fz(-d)p FB(')f(and)g(`)p Fz(-u)p FB(')g(options)h(are)g(pro)m(vided.) 275 5121 y Fz(uniq)26 b FB(uses)i(the)g Fz(getopt)f FB(library)g (function)h(\(see)h(Section)g(12.4)h([Pro)s(cessing)e(Command-Line)f (Op-)150 5230 y(tions],)33 b(page)g(196\))g(and)e(the)h Fz(join)f FB(library)g(function)h(\(see)h(Section)f(12.2.7)i([Merging)f (an)f(Arra)m(y)g(in)m(to)150 5340 y(a)f(String],)f(page)h(190\).)p eop end %%Page: 225 237 TeXDict begin 225 236 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(225)275 299 y(The)32 b(program)h(b)s(egins)f(with)h(a)g Fz(usage)e FB(function)i(and)f(then)h(a)g(brief)g(outline)g(of)g(the)g(options)h (and)150 408 y(their)28 b(meanings)g(in)g(a)g(commen)m(t.)41 b(The)27 b Fz(BEGIN)g FB(rule)h(deals)g(with)g(the)g(command-line)g (argumen)m(ts)h(and)150 518 y(options.)61 b(It)37 b(uses)g(a)g(tric)m (k)h(to)g(get)g Fz(getopt)e FB(to)h(handle)g(options)g(of)h(the)f(form) f(`)p Fz(-25)p FB(',)j(treating)f(suc)m(h)150 628 y(an)g(option)h(as)g (the)g(option)g(letter)g(`)p Fz(2)p FB(')g(with)f(an)h(argumen)m(t)g (of)f(`)p Fz(5)p FB('.)65 b(If)38 b(indeed)g(t)m(w)m(o)i(or)f(more)f (digits)150 737 y(are)f(supplied)e(\()p Fz(Optarg)h FB(lo)s(oks)h(lik)m (e)h(a)f(n)m(um)m(b)s(er\),)g Fz(Optarg)e FB(is)i(concatenated)i(with)d (the)h(option)g(digit)150 847 y(and)30 b(then)h(the)g(result)f(is)h (added)f(to)i(zero)f(to)h(mak)m(e)g(it)f(in)m(to)h(a)f(n)m(um)m(b)s (er.)41 b(If)30 b(there)h(is)g(only)g(one)g(digit)g(in)150 956 y(the)i(option,)h(then)e Fz(Optarg)f FB(is)i(not)g(needed.)47 b(In)32 b(this)g(case,)j Fz(Optind)c FB(m)m(ust)h(b)s(e)g(decremen)m (ted)h(so)g(that)150 1066 y Fz(getopt)c FB(pro)s(cesses)h(it)h(next)f (time.)42 b(This)29 b(co)s(de)i(is)f(admittedly)h(a)g(bit)g(tric)m(ky) -8 b(.)275 1230 y(If)31 b(no)g(options)h(are)g(supplied,)f(then)g(the)h (default)f(is)h(tak)m(en,)h(to)g(prin)m(t)e(b)s(oth)g(rep)s(eated)g (and)g(nonre-)150 1340 y(p)s(eated)25 b(lines.)39 b(The)25 b(output)g(\014le,)h(if)f(pro)m(vided,)i(is)e(assigned)g(to)h Fz(outputfile)p FB(.)36 b(Early)25 b(on,)i Fz(outputfile)150 1450 y FB(is)j(initialized)j(to)e(the)f(standard)g(output,)g(`)p Fz(/dev/stdout)p FB(':)390 1614 y Fz(#)47 b(uniq.awk)f(---)h(do)g(uniq) g(in)g(awk)390 1724 y(#)390 1833 y(#)g(Requires)f(getopt)g(and)h(join)g (library)e(functions)390 2052 y(function)h(usage\()189 b(e\))390 2162 y({)581 2271 y(e)47 b(=)h("Usage:)e(uniq)g([-udc)h ([-n]])f([+n])h([)g(in)g([)h(out)f(]]")581 2381 y(print)f(e)i(>)f ("/dev/stderr")581 2491 y(exit)g(1)390 2600 y(})390 2819 y(#)g(-c)191 b(count)46 b(lines.)g(overrides)g(-d)h(and)g(-u)390 2929 y(#)g(-d)191 b(only)46 b(repeated)g(lines)390 3039 y(#)h(-u)191 b(only)46 b(non-repeated)f(lines)390 3148 y(#)i(-n)191 b(skip)46 b(n)i(fields)390 3258 y(#)f(+n)191 b(skip)46 b(n)i(characters,)d(skip)h(fields)g(first)390 3477 y(BEGIN)142 b(\\)390 3587 y({)581 3696 y(count)46 b(=)i(1)581 3806 y(outputfile)d(=)i("/dev/stdout")581 3915 y(opts)g(=)g("udc0:1:2:3:4:5:6:7:8:9:)o(")581 4025 y(while)f(\(\(c)h(=)h(getopt\(ARGC,)c(ARGV,)i(opts\)\))h(!=)g(-1\))g({) 772 4134 y(if)g(\(c)g(==)g("u"\))963 4244 y(non_repeated_only++)772 4354 y(else)f(if)i(\(c)f(==)g("d"\))963 4463 y(repeated_only++)772 4573 y(else)f(if)i(\(c)f(==)g("c"\))963 4682 y(do_count++)772 4792 y(else)f(if)i(\(index\("0123456789",)42 b(c\))47 b(!=)g(0\))g({)963 4902 y(#)g(getopt)f(requires)g(args)g(to)i(options) 963 5011 y(#)f(this)g(messes)f(us)h(up)g(for)g(things)f(like)h(-5)963 5121 y(if)g(\(Optarg)f(~)h(/^[0-9]+$/\))1154 5230 y(fcount)f(=)h(\(c)g (Optarg\))f(+)i(0)963 5340 y(else)e({)p eop end %%Page: 226 238 TeXDict begin 226 237 bop 150 -116 a FB(226)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)1154 299 y Fz(fcount)46 b(=)h(c)h(+)f(0)1154 408 y(Optind--)963 518 y(})772 628 y(})g(else)963 737 y(usage\(\))581 847 y(})581 1066 y(if)g(\(ARGV[Optind])d(~)k(/^\\+[0-9]+$/\))c({)772 1176 y(charcount)h(=)j(substr\(ARGV[Optind],)42 b(2\))47 b(+)g(0)772 1285 y(Optind++)581 1395 y(})581 1614 y(for)g(\(i)g(=)g(1;) h(i)f(<)h(Optind;)d(i++\))772 1724 y(ARGV[i])h(=)h("")581 1943 y(if)g(\(repeated_only)d(==)j(0)h(&&)f(non_repeated_only)c(==)k (0\))772 2052 y(repeated_only)d(=)j(non_repeated_only)d(=)j(1)581 2271 y(if)g(\(ARGC)f(-)i(Optind)e(==)h(2\))g({)772 2381 y(outputfile)e(=)i(ARGV[ARGC)f(-)h(1])772 2491 y(ARGV[ARGC)e(-)j(1])f (=)g("")581 2600 y(})390 2710 y(})275 2874 y FB(The)31 b(follo)m(wing)j(function,)e Fz(are_equal)p FB(,)e(compares)j(the)f (curren)m(t)g(line,)h Fz($0)p FB(,)f(to)h(the)f(previous)f(line,)150 2984 y Fz(last)p FB(.)55 b(It)36 b(handles)f(skipping)f(\014elds)h(and) g(c)m(haracters.)58 b(If)35 b(no)h(\014eld)f(coun)m(t)h(and)f(no)g(c)m (haracter)i(coun)m(t)150 3093 y(are)32 b(sp)s(eci\014ed,)f Fz(are_equal)d FB(simply)j(returns)f(one)i(or)f(zero)h(dep)s(ending)e (up)s(on)f(the)j(result)f(of)g(a)h(simple)150 3203 y(string)h (comparison)g(of)h Fz(last)e FB(and)g Fz($0)p FB(.)49 b(Otherwise,)33 b(things)g(get)i(more)e(complicated.)50 b(If)33 b(\014elds)g(ha)m(v)m(e)150 3313 y(to)42 b(b)s(e)f(skipp)s(ed,) i(eac)m(h)g(line)e(is)h(brok)m(en)f(in)m(to)i(an)e(arra)m(y)h(using)f Fz(split)f FB(\(see)i(Section)h(8.1.3)g([String-)150 3422 y(Manipulation)28 b(F)-8 b(unctions],)28 b(page)g(129\);)i(the)d (desired)f(\014elds)g(are)h(then)g(joined)g(bac)m(k)g(in)m(to)h(a)f (line)g(using)150 3532 y Fz(join)p FB(.)43 b(The)31 b(joined)g(lines)g (are)h(stored)g(in)f Fz(clast)f FB(and)h Fz(cline)p FB(.)42 b(If)31 b(no)g(\014elds)g(are)h(skipp)s(ed,)f Fz(clast)f FB(and)150 3641 y Fz(cline)36 b FB(are)i(set)g(to)h Fz(last)d FB(and)h Fz($0)p FB(,)j(resp)s(ectiv)m(ely)-8 b(.)64 b(Finally)-8 b(,)41 b(if)d(c)m(haracters)h(are)f(skipp)s(ed,)g Fz(substr)e FB(is)150 3751 y(used)26 b(to)h(strip)f(o\013)i(the)e (leading)i Fz(charcount)c FB(c)m(haracters)k(in)e Fz(clast)g FB(and)g Fz(cline)p FB(.)38 b(The)26 b(t)m(w)m(o)i(strings)f(are)150 3861 y(then)j(compared)g(and)g Fz(are_equal)e FB(returns)h(the)i (result:)390 4025 y Fz(function)46 b(are_equal\()188 b(n,)47 b(m,)g(clast,)f(cline,)g(alast,)g(aline\))390 4134 y({)581 4244 y(if)h(\(fcount)f(==)h(0)h(&&)f(charcount)e(==)i(0\)) 772 4354 y(return)f(\(last)g(==)h($0\))581 4573 y(if)g(\(fcount)f(>)h (0\))h({)772 4682 y(n)f(=)h(split\(last,)c(alast\))772 4792 y(m)j(=)h(split\($0,)d(aline\))772 4902 y(clast)h(=)i (join\(alast,)c(fcount+1,)i(n\))772 5011 y(cline)g(=)i(join\(aline,)c (fcount+1,)i(m\))581 5121 y(})h(else)g({)772 5230 y(clast)f(=)i(last) 772 5340 y(cline)e(=)i($0)p eop end %%Page: 227 239 TeXDict begin 227 238 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(227)581 299 y Fz(})581 408 y(if)47 b(\(charcount\))e({)772 518 y(clast)h(=)i(substr\(clast,)c(charcount)h(+)j(1\))772 628 y(cline)e(=)i(substr\(cline,)c(charcount)h(+)j(1\))581 737 y(})581 956 y(return)e(\(clast)g(==)h(cline\))390 1066 y(})275 1198 y FB(The)29 b(follo)m(wing)j(t)m(w)m(o)g(rules)e(are) h(the)f(b)s(o)s(dy)f(of)i(the)f(program.)41 b(The)30 b(\014rst)f(one)i(is)f(executed)i(only)e(for)150 1307 y(the)35 b(v)m(ery)g(\014rst)f(line)g(of)h(data.)54 b(It)35 b(sets)g Fz(last)e FB(equal)i(to)h Fz($0)p FB(,)f(so)g(that)g (subsequen)m(t)f(lines)g(of)h(text)h(ha)m(v)m(e)150 1417 y(something)31 b(to)g(b)s(e)f(compared)g(to.)275 1548 y(The)g(second)i(rule)f(do)s(es)g(the)g(w)m(ork.)44 b(The)31 b(v)-5 b(ariable)32 b Fz(equal)e FB(is)h(one)h(or)f(zero,)i(dep)s (ending)d(up)s(on)g(the)150 1658 y(results)39 b(of)g Fz(are_equal)p FB('s)d(comparison.)66 b(If)39 b Fz(uniq)e FB(is)i(coun)m(ting)h(rep)s(eated)f(lines,)i(and)d(the)h(lines)h(are) 150 1767 y(equal,)28 b(then)e(it)h(incremen)m(ts)f(the)h Fz(count)e FB(v)-5 b(ariable.)40 b(Otherwise,)27 b(it)g(prin)m(ts)f (the)g(line)h(and)e(resets)i Fz(count)p FB(,)150 1877 y(since)k(the)f(t)m(w)m(o)i(lines)f(are)f(not)h(equal.)275 2008 y(If)38 b Fz(uniq)g FB(is)h(not)g(coun)m(ting,)k(and)38 b(if)h(the)g(lines)h(are)f(equal,)j Fz(count)c FB(is)h(incremen)m(ted.) 67 b(Nothing)40 b(is)150 2118 y(prin)m(ted,)e(since)f(the)g(p)s(oin)m (t)g(is)g(to)h(remo)m(v)m(e)g(duplicates.)60 b(Otherwise,)39 b(if)e Fz(uniq)e FB(is)i(coun)m(ting)h(rep)s(eated)150 2228 y(lines)31 b(and)f(more)h(than)g(one)g(line)g(is)g(seen,)g(or)g (if)f Fz(uniq)g FB(is)h(coun)m(ting)g(nonrep)s(eated)g(lines)g(and)f (only)h(one)150 2337 y(line)g(is)f(seen,)h(then)f(the)g(line)h(is)g (prin)m(ted,)f(and)g Fz(count)e FB(is)j(reset.)275 2469 y(Finally)-8 b(,)32 b(similar)e(logic)i(is)f(used)e(in)h(the)h Fz(END)f FB(rule)g(to)h(prin)m(t)f(the)g(\014nal)g(line)h(of)g(input)e (data:)390 2600 y Fz(NR)47 b(==)g(1)h({)581 2710 y(last)f(=)g($0)581 2819 y(next)390 2929 y(})390 3148 y({)581 3258 y(equal)f(=)i (are_equal\(\))581 3477 y(if)f(\(do_count\))e({)191 b(#)47 b(overrides)e(-d)j(and)f(-u)772 3587 y(if)g(\(equal\))963 3696 y(count++)772 3806 y(else)f({)963 3915 y(printf\("\0454d)e (\045s\\n",)j(count,)f(last\))g(>)h(outputfile)963 4025 y(last)f(=)i($0)963 4134 y(count)e(=)i(1)190 b(#)48 b(reset)772 4244 y(})772 4354 y(next)581 4463 y(})581 4682 y(if)f(\(equal\))772 4792 y(count++)581 4902 y(else)g({)772 5011 y(if)g(\(\(repeated_only)d (&&)j(count)f(>)i(1\))f(||)963 5121 y(\(non_repeated_only)c(&&)k(count) f(==)h(1\)\))1154 5230 y(print)f(last)h(>)g(outputfile)772 5340 y(last)f(=)i($0)p eop end %%Page: 228 240 TeXDict begin 228 239 bop 150 -116 a FB(228)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)772 299 y Fz(count)46 b(=)i(1)581 408 y(})390 518 y(})390 737 y(END)f({)581 847 y(if)g(\(do_count\))772 956 y(printf\("\0454d)e (\045s\\n",)h(count,)g(last\))g(>)i(outputfile)581 1066 y(else)f(if)g(\(\(repeated_only)c(&&)48 b(count)e(>)h(1\))h(||)963 1176 y(\(non_repeated_only)43 b(&&)k(count)f(==)h(1\)\))772 1285 y(print)f(last)h(>)g(outputfile)390 1395 y(})150 1589 y Fj(13.2.7)63 b(Coun)m(ting)41 b(Things)150 1736 y FB(The)31 b Fz(wc)h FB(\(w)m(ord)f(coun)m(t\))i(utilit)m(y)h(coun)m (ts)e(lines,)h(w)m(ords,)f(and)f(c)m(haracters)i(in)f(one)g(or)g(more)g (input)f(\014les.)150 1846 y(Its)f(usage)h(is)g(as)f(follo)m(ws:)390 1978 y Fz(wc)47 b FB([)p Fz(-lwc)p FB(])g([)h Fk(files)57 b Fz(...)47 b FB(])275 2110 y(If)33 b(no)h(\014les)h(are)f(sp)s (eci\014ed)g(on)g(the)g(command)g(line,)i Fz(wc)e FB(reads)g(its)g (standard)g(input.)51 b(If)34 b(there)h(are)150 2220 y(m)m(ultiple)h(\014les,)h(it)g(also)f(prin)m(ts)f(total)j(coun)m(ts)e (for)f(all)i(the)f(\014les.)56 b(The)35 b(options)h(and)f(their)h (meanings)150 2329 y(are)31 b(sho)m(wn)f(in)g(the)g(follo)m(wing)i (list:)150 2484 y Fz(-l)384 b FB(Coun)m(t)30 b(only)h(lines.)150 2639 y Fz(-w)384 b FB(Coun)m(t)33 b(only)f(w)m(ords.)48 b(A)33 b(\\w)m(ord")g(is)g(a)g(con)m(tiguous)h(sequence)f(of)g(non)m (whitespace)g(c)m(har-)630 2748 y(acters,)38 b(separated)f(b)m(y)f (spaces)g(and/or)g(tabs.)57 b(Luc)m(kily)-8 b(,)38 b(this)e(is)g(the)g (normal)g(w)m(a)m(y)h Fz(awk)630 2858 y FB(separates)31 b(\014elds)f(in)g(its)h(input)e(data.)150 3013 y Fz(-c)384 b FB(Coun)m(t)30 b(only)h(c)m(haracters.)275 3167 y(Implemen)m(ting)h Fz(wc)f FB(in)h Fz(awk)f FB(is)h(particularly)h(elegan)m(t,)i(since)d Fz(awk)g FB(do)s(es)f(a)i(lot)g(of)f(the)g(w)m(ork)h(for)e(us;)150 3277 y(it)h(splits)g(lines)f(in)m(to)i(w)m(ords)e(\(i.e.,)i(\014elds\)) e(and)g(coun)m(ts)h(them,)g(it)g(coun)m(ts)g(lines)g(\(i.e.,)h (records\),)g(and)d(it)150 3387 y(can)h(easily)g(tell)h(us)d(ho)m(w)i (long)g(a)g(line)f(is.)275 3519 y(This)e(uses)h(the)g Fz(getopt)f FB(library)h(function)g(\(see)h(Section)g(12.4)h([Pro)s (cessing)f(Command-Line)e(Op-)150 3628 y(tions],)48 b(page)c(196\))h (and)e(the)h(\014le-transition)g(functions)f(\(see)i(Section)f(12.3.1)i ([Noting)f(Data)g(File)150 3738 y(Boundaries],)31 b(page)g(192\).)275 3870 y(This)f(v)m(ersion)i(has)f(one)h(notable)g(di\013erence)g(from)f (traditional)h(v)m(ersions)g(of)g Fz(wc)p FB(:)42 b(it)32 b(alw)m(a)m(ys)g(prin)m(ts)150 3980 y(the)f(coun)m(ts)g(in)g(the)g (order)f(lines,)h(w)m(ords,)g(and)f(c)m(haracters.)43 b(T)-8 b(raditional)32 b(v)m(ersions)f(note)h(the)f(order)f(of)150 4089 y(the)h(`)p Fz(-l)p FB(',)f(`)p Fz(-w)p FB(',)h(and)e(`)p Fz(-c)p FB(')i(options)f(on)h(the)f(command)g(line,)h(and)f(prin)m(t)g (the)h(coun)m(ts)f(in)h(that)f(order.)275 4222 y(The)25 b Fz(BEGIN)g FB(rule)h(do)s(es)g(the)g(argumen)m(t)h(pro)s(cessing.)39 b(The)25 b(v)-5 b(ariable)27 b Fz(print_total)c FB(is)k(true)f(if)g (more)150 4331 y(than)k(one)h(\014le)f(is)h(named)f(on)g(the)g(command) h(line:)390 4463 y Fz(#)47 b(wc.awk)g(---)f(count)h(lines,)f(words,)g (characters)390 4792 y(#)h(Options:)390 4902 y(#)191 b(-l)f(only)47 b(count)f(lines)390 5011 y(#)191 b(-w)f(only)47 b(count)f(words)390 5121 y(#)191 b(-c)f(only)47 b(count)f(characters) 390 5230 y(#)390 5340 y(#)h(Default)f(is)h(to)h(count)e(lines,)g (words,)g(characters)p eop end %%Page: 229 241 TeXDict begin 229 240 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(229)390 299 y Fz(#)390 408 y(#)47 b(Requires)f(getopt)g(and)h(file)g (transition)e(library)g(functions)390 628 y(BEGIN)h({)581 737 y(#)h(let)g(getopt)f(print)h(a)g(message)f(about)581 847 y(#)h(invalid)f(options.)g(we)h(ignore)f(them)581 956 y(while)g(\(\(c)h(=)h(getopt\(ARGC,)c(ARGV,)i("lwc"\)\))g(!=)h (-1\))g({)772 1066 y(if)g(\(c)g(==)g("l"\))963 1176 y(do_lines)e(=)j(1) 772 1285 y(else)e(if)i(\(c)f(==)g("w"\))963 1395 y(do_words)e(=)j(1)772 1504 y(else)e(if)i(\(c)f(==)g("c"\))963 1614 y(do_chars)e(=)j(1)581 1724 y(})581 1833 y(for)f(\(i)g(=)g(1;)h(i)f(<)h(Optind;)d(i++\))772 1943 y(ARGV[i])h(=)h("")581 2162 y(#)g(if)h(no)f(options,)e(do)i(all) 581 2271 y(if)g(\(!)g(do_lines)f(&&)h(!)g(do_words)f(&&)h(!)h (do_chars\))772 2381 y(do_lines)d(=)j(do_words)d(=)j(do_chars)d(=)j(1) 581 2600 y(print_total)d(=)i(\(ARGC)f(-)i(i)f(>)h(2\))390 2710 y(})275 2855 y FB(The)22 b Fz(beginfile)f FB(function)i(is)g (simple;)j(it)d(just)g(resets)g(the)h(coun)m(ts)f(of)h(lines,)h(w)m (ords,)f(and)e(c)m(haracters)150 2965 y(to)31 b(zero,)h(and)d(sa)m(v)m (es)j(the)f(curren)m(t)f(\014le)g(name)h(in)f Fz(fname)p FB(:)390 3110 y Fz(function)46 b(beginfile\(file\))390 3220 y({)581 3329 y(chars)g(=)i(lines)e(=)i(words)e(=)h(0)581 3439 y(fname)f(=)i(FILENAME)390 3549 y(})275 3694 y FB(The)40 b Fz(endfile)g FB(function)h(adds)f(the)i(curren)m(t)f(\014le's)h(n)m (um)m(b)s(ers)e(to)i(the)f(running)f(totals)j(of)e(lines,)150 3804 y(w)m(ords,)30 b(and)g(c)m(haracters.)1039 3771 y Fo(2)1118 3804 y FB(It)h(then)f(prin)m(ts)f(out)i(those)g(n)m(um)m(b) s(ers)e(for)h(the)g(\014le)h(that)g(w)m(as)f(just)g(read.)41 b(It)150 3913 y(relies)31 b(on)f Fz(beginfile)e FB(to)j(reset)g(the)g (n)m(um)m(b)s(ers)e(for)h(the)g(follo)m(wing)i(data)f(\014le:)390 4059 y Fz(function)46 b(endfile\(file\))390 4168 y({)581 4278 y(tchars)g(+=)h(chars)581 4387 y(tlines)f(+=)h(lines)581 4497 y(twords)f(+=)h(words)581 4607 y(if)g(\(do_lines\))772 4716 y(printf)f("\\t\045d",)g(lines)581 4826 y(if)h(\(do_words\))772 4935 y(printf)f("\\t\045d",)g(words)581 5045 y(if)h(\(do_chars\))p 150 5154 1200 4 v 199 5221 a Fo(2)275 5253 y Fm(wc)28 b Fn(can't)h(just)g(use)g(the)f(v)l(alue)g(of)i Fm(FNR)f Fn(in)f Fm(endfile)p Fn(.)45 b(If)29 b(y)n(ou)f(examine)g(the)h(co)r (de)g(in)f(Section)h(12.3.1)i([Noting)e(Data)275 5340 y(File)d(Boundaries],)h(page)g(192,)g(y)n(ou)e(will)i(see)f(that)f Fm(FNR)i Fn(has)f(already)g(b)r(een)f(reset)h(b)n(y)f(the)g(time)h Fm(endfile)h Fn(is)g(called.)p eop end %%Page: 230 242 TeXDict begin 230 241 bop 150 -116 a FB(230)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)772 299 y Fz(printf)46 b("\\t\045d",)g(chars)581 408 y(printf)g ("\\t\045s\\n",)f(fname)390 518 y(})275 664 y FB(There)34 b(is)h(one)g(rule)f(that)i(is)f(executed)g(for)g(eac)m(h)h(line.)54 b(It)35 b(adds)f(the)i(length)f(of)g(the)g(record,)h(plus)150 774 y(one,)c(to)h Fz(chars)p FB(.)42 b(Adding)31 b(one)h(plus)e(the)i (record)f(length)h(is)g(needed)f(b)s(ecause)g(the)h(newline)f(c)m (haracter)150 883 y(separating)j(records)f(\(the)h(v)-5 b(alue)34 b(of)g Fz(RS)p FB(\))f(is)g(not)h(part)f(of)g(the)h(record)f (itself,)i(and)e(th)m(us)g(not)h(included)150 993 y(in)f(its)g(length.) 49 b(Next,)34 b Fz(lines)e FB(is)h(incremen)m(ted)g(for)g(eac)m(h)h (line)f(read,)h(and)e Fz(words)g FB(is)h(incremen)m(ted)g(b)m(y)150 1103 y(the)e(v)-5 b(alue)30 b(of)h Fz(NF)p FB(,)f(whic)m(h)g(is)g(the)h (n)m(um)m(b)s(er)e(of)i(\\w)m(ords")f(on)h(this)f(line:)390 1249 y Fz(#)47 b(do)h(per)f(line)390 1358 y({)581 1468 y(chars)f(+=)h(length\($0\))e(+)j(1)191 b(#)47 b(get)g(newline)581 1577 y(lines++)581 1687 y(words)f(+=)h(NF)390 1797 y(})275 1943 y FB(Finally)-8 b(,)32 b(the)e Fz(END)g FB(rule)g(simply)g(prin)m (ts)f(the)i(totals)h(for)e(all)h(the)g(\014les:)390 2089 y Fz(END)47 b({)581 2198 y(if)g(\(print_total\))d({)772 2308 y(if)j(\(do_lines\))963 2418 y(printf)f("\\t\045d",)g(tlines)772 2527 y(if)h(\(do_words\))963 2637 y(printf)f("\\t\045d",)g(twords)772 2746 y(if)h(\(do_chars\))963 2856 y(printf)f("\\t\045d",)g(tchars)772 2966 y(print)g("\\ttotal")581 3075 y(})390 3185 y(})150 3435 y FA(13.3)68 b(A)45 b(Grab)f(Bag)h(of)h Fq(awk)d FA(Programs)150 3594 y FB(This)28 b(section)i(is)f(a)g(large)h(\\grab)f (bag")h(of)f(miscellaneous)h(programs.)39 b(W)-8 b(e)30 b(hop)s(e)f(y)m(ou)g(\014nd)e(them)i(b)s(oth)150 3704 y(in)m(teresting)j(and)d(enjo)m(y)m(able.)150 3914 y Fj(13.3.1)63 b(Finding)42 b(Duplicated)f(W)-10 b(ords)41 b(in)g(a)g(Do)s(cumen)m(t)150 4061 y FB(A)c(common)g(error)f(when)f (writing)i(large)h(amoun)m(ts)f(of)f(prose)h(is)f(to)i(acciden)m(tally) h(duplicate)e(w)m(ords.)150 4171 y(T)m(ypically)25 b(y)m(ou)f(will)g (see)h(this)f(in)f(text)i(as)f(something)h(lik)m(e)g(\\the)f(the)g (program)g(do)s(es)g(the)g(follo)m(wing)6 b(.)23 b(.)f(.)12 b(")150 4281 y(When)35 b(the)g(text)i(is)e(online,)i(often)e(the)h (duplicated)f(w)m(ords)g(o)s(ccur)g(at)h(the)f(end)g(of)g(one)h(line)f (and)g(the)150 4390 y(b)s(eginning)30 b(of)g(another,)h(making)g(them)f (v)m(ery)h(di\016cult)f(to)h(sp)s(ot.)275 4536 y(This)42 b(program,)47 b(`)p Fz(dupword.awk)p FB(',)e(scans)f(through)f(a)h (\014le)f(one)h(line)g(at)h(a)f(time)g(and)f(lo)s(oks)h(for)150 4646 y(adjacen)m(t)29 b(o)s(ccurrences)e(of)h(the)f(same)h(w)m(ord.)40 b(It)27 b(also)h(sa)m(v)m(es)h(the)f(last)g(w)m(ord)f(on)g(a)h(line)g (\(in)g(the)f(v)-5 b(ariable)150 4755 y Fz(prev)p FB(\))30 b(for)g(comparison)g(with)g(the)h(\014rst)f(w)m(ord)g(on)g(the)g(next)h (line.)275 4902 y(The)i(\014rst)f(t)m(w)m(o)j(statemen)m(ts)h(mak)m(e)e (sure)f(that)h(the)g(line)g(is)f(all)i(lo)m(w)m(ercase,)i(so)c(that,)j (for)d(example,)150 5011 y(\\The")i(and)e(\\the")j(compare)f(equal)g (to)g(eac)m(h)g(other.)53 b(The)34 b(next)g(statemen)m(t)i(replaces)g (nonalphan)m(u-)150 5121 y(meric)h(and)e(non)m(whitespace)i(c)m (haracters)h(with)d(spaces,)k(so)d(that)h(punctuation)f(do)s(es)g(not)g (a\013ect)i(the)150 5230 y(comparison)j(either.)73 b(The)41 b(c)m(haracters)h(are)f(replaced)h(with)f(spaces)g(so)g(that)h (formatting)g(con)m(trols)150 5340 y(don't)36 b(create)i(nonsense)e(w)m (ords)g(\(e.g.,)k(the)d(T)-8 b(exinfo)37 b(`)p Fz(@code{NF})p FB(')d(b)s(ecomes)j(`)p Fz(codeNF)p FB(')e(if)h(punctua-)p eop end %%Page: 231 243 TeXDict begin 231 242 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(231)150 299 y(tion)30 b(is)f(simply)f(deleted\).)42 b(The)28 b(record)h(is)g(then)g(resplit)g(in)m(to)i(\014elds,)e(yielding)g(just) g(the)g(actual)h(w)m(ords)150 408 y(on)g(the)h(line,)g(and)f(ensuring)f (that)i(there)g(are)f(no)h(empt)m(y)f(\014elds.)275 550 y(If)22 b(there)g(are)h(no)g(\014elds)f(left)h(after)g(remo)m(ving)g (all)h(the)e(punctuation,)i(the)f(curren)m(t)f(record)h(is)f(skipp)s (ed.)150 660 y(Otherwise,)30 b(the)h(program)f(lo)s(ops)g(through)g (eac)m(h)i(w)m(ord,)e(comparing)h(it)f(to)i(the)e(previous)g(one:)390 802 y Fz(#)47 b(dupword.awk)e(---)i(find)g(duplicate)e(words)h(in)i (text)390 1021 y({)581 1131 y($0)f(=)h(tolower\($0\))581 1240 y(gsub\(/[^[:alnum:][:blank)o(:]]/)o(,)42 b(")47 b("\);)581 1350 y($0)g(=)h($0)429 b(#)47 b(re-split)581 1460 y(if)g(\(NF)g(==)g(0\))772 1569 y(next)581 1679 y(if)g(\($1)g(==)g(prev\))772 1788 y(printf\("\045s:\045d:)d(duplicate) h(\045s\\n",)963 1898 y(FILENAME,)g(FNR,)i($1\))581 2007 y(for)g(\(i)g(=)g(2;)h(i)f(<=)g(NF;)g(i++\))772 2117 y(if)g(\($i)g(==)g($\(i-1\)\))963 2227 y(printf\("\045s:\045d:)d (duplicate)h(\045s\\n",)1154 2336 y(FILENAME,)g(FNR,)i($i\))581 2446 y(prev)g(=)g($NF)390 2555 y(})150 2762 y Fj(13.3.2)63 b(An)41 b(Alarm)f(Clo)s(c)m(k)h(Program)390 2909 y Fw(Nothing)33 b(cur)-5 b(es)33 b(insomnia)h(like)e(a)h(ringing)g(alarm)h(clo)-5 b(ck.)390 3019 y FB(Arnold)30 b(Robbins)275 3161 y(The)c(follo)m(wing)i (program)e(is)h(a)g(simple)g(\\alarm)g(clo)s(c)m(k")i(program.)39 b(Y)-8 b(ou)27 b(giv)m(e)h(it)f(a)g(time)h(of)f(da)m(y)g(and)150 3270 y(an)32 b(optional)i(message.)49 b(A)m(t)33 b(the)g(sp)s (eci\014ed)f(time,)i(it)f(prin)m(ts)f(the)g(message)i(on)f(the)f (standard)g(output.)150 3380 y(In)h(addition,)i(y)m(ou)g(can)f(giv)m(e) h(it)g(the)f(n)m(um)m(b)s(er)e(of)i(times)h(to)f(rep)s(eat)g(the)h (message)g(as)f(w)m(ell)h(as)f(a)g(dela)m(y)150 3489 y(b)s(et)m(w)m(een)d(rep)s(etitions.)275 3631 y(This)d(program)h(uses)g (the)h Fz(gettimeofday)c FB(function)j(from)g(Section)h(12.2.8)h ([Managing)g(the)f(Time)150 3741 y(of)h(Da)m(y],)h(page)f(190.)275 3883 y(All)g(the)g(w)m(ork)g(is)g(done)g(in)f(the)h Fz(BEGIN)f FB(rule.)42 b(The)30 b(\014rst)g(part)h(is)g(argumen)m(t)g(c)m(hec)m (king)i(and)d(setting)150 3993 y(of)i(defaults:)44 b(the)32 b(dela)m(y)-8 b(,)33 b(the)f(coun)m(t,)h(and)f(the)g(message)h(to)f (prin)m(t.)45 b(If)31 b(the)h(user)f(supplied)g(a)h(message)150 4102 y(without)d(the)h(ASCI)s(I)e(BEL)h(c)m(haracter)i(\(kno)m(wn)e(as) h(the)g(\\alert")h(c)m(haracter,)g Fz("\\a")p FB(\),)e(then)g(it)h(is)g (added)150 4212 y(to)38 b(the)f(message.)61 b(\(On)37 b(man)m(y)g(systems,)i(prin)m(ting)d(the)h(ASCI)s(I)f(BEL)h(generates)h (an)f(audible)g(alert.)150 4321 y(Th)m(us)f(when)f(the)i(alarm)h(go)s (es)f(o\013,)i(the)e(system)g(calls)h(atten)m(tion)h(to)e(itself)h(in)e (case)i(the)f(user)f(is)h(not)150 4431 y(lo)s(oking)31 b(at)g(the)g(computer)f(or)h(terminal.\))41 b(Here)31 b(is)f(the)h(program:)390 4573 y Fz(#)47 b(alarm.awk)f(---)h(set)g(an)g (alarm)390 4682 y(#)390 4792 y(#)g(Requires)f(gettimeofday)e(library)i (function)390 5011 y(#)h(usage:)g(alarm)f(time)h([)g("message")e([)j (count)e([)i(delay)e(])h(])h(])390 5230 y(BEGIN)190 b(\\)390 5340 y({)p eop end %%Page: 232 244 TeXDict begin 232 243 bop 150 -116 a FB(232)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)581 299 y Fz(#)47 b(Initial)f(argument)g(sanity)g(checking)581 408 y(usage1)g(=)h("usage:)f(alarm)h(time)f(['message')f([count)h ([delay]]]")581 518 y(usage2)g(=)h(sprintf\("\\t\(\045s\))d(time)j(::=) g(hh:mm",)e(ARGV[1]\))581 737 y(if)i(\(ARGC)f(<)i(2\))f({)772 847 y(print)f(usage1)g(>)i("/dev/stderr")772 956 y(print)e(usage2)g(>)i ("/dev/stderr")772 1066 y(exit)e(1)581 1176 y(})h(else)g(if)g(\(ARGC)g (==)g(5\))g({)772 1285 y(delay)f(=)i(ARGV[4])d(+)j(0)772 1395 y(count)e(=)i(ARGV[3])d(+)j(0)772 1504 y(message)e(=)h(ARGV[2])581 1614 y(})g(else)g(if)g(\(ARGC)g(==)g(4\))g({)772 1724 y(count)f(=)i(ARGV[3])d(+)j(0)772 1833 y(message)e(=)h(ARGV[2])581 1943 y(})g(else)g(if)g(\(ARGC)g(==)g(3\))g({)772 2052 y(message)f(=)h(ARGV[2])581 2162 y(})g(else)g(if)g(\(ARGV[1])f(!~)h (/[0-9]?[0-9]:[0-9][0-9]/)o(\))42 b({)772 2271 y(print)k(usage1)g(>)i ("/dev/stderr")772 2381 y(print)e(usage2)g(>)i("/dev/stderr")772 2491 y(exit)e(1)581 2600 y(})581 2819 y(#)h(set)g(defaults)f(for)h (once)f(we)i(reach)e(the)h(desired)f(time)581 2929 y(if)h(\(delay)f(==) h(0\))772 3039 y(delay)f(=)i(180)190 b(#)47 b(3)h(minutes)581 3148 y(if)f(\(count)f(==)h(0\))772 3258 y(count)f(=)i(5)581 3367 y(if)f(\(message)f(==)h(""\))772 3477 y(message)f(=)h (sprintf\("\\aIt)d(is)j(now)g(\045s!\\a",)f(ARGV[1]\))581 3587 y(else)h(if)g(\(index\(message,)c("\\a"\))k(==)g(0\))772 3696 y(message)f(=)h("\\a")g(message)f("\\a")275 3861 y FB(The)36 b(next)g(section)i(of)f(co)s(de)g(turns)e(the)i(alarm)g (time)h(in)m(to)f(hours)f(and)g(min)m(utes,)i(con)m(v)m(erts)g(it)g (\(if)150 3970 y(necessary\))d(to)h(a)f(24-hour)f(clo)s(c)m(k,)k(and)c (then)g(turns)f(that)j(time)f(in)m(to)g(a)g(coun)m(t)h(of)e(the)h (seconds)g(since)150 4080 y(midnigh)m(t.)75 b(Next)42 b(it)g(turns)f(the)h(curren)m(t)f(time)h(in)m(to)h(a)f(coun)m(t)g(of)g (seconds)g(since)g(midnigh)m(t.)74 b(The)150 4189 y(di\013erence)31 b(b)s(et)m(w)m(een)g(the)f(t)m(w)m(o)i(is)f(ho)m(w)f(long)h(to)g(w)m (ait)g(b)s(efore)f(setting)i(o\013)f(the)f(alarm:)581 4354 y Fz(#)47 b(split)g(up)g(alarm)f(time)581 4463 y(split\(ARGV[1],)e (atime,)i(":"\))581 4573 y(hour)h(=)g(atime[1])f(+)h(0)191 b(#)47 b(force)f(numeric)581 4682 y(minute)g(=)h(atime[2])f(+)h(0)96 b(#)47 b(force)f(numeric)581 4902 y(#)h(get)g(current)f(broken)g(down)h (time)581 5011 y(gettimeofday\(now\))581 5230 y(#)g(if)h(time)e(given)h (is)g(12-hour)f(hours)g(and)h(it's)f(after)h(that)581 5340 y(#)g(hour,)g(e.g.,)f(`alarm)g(5:30')h(at)g(9)g(a.m.)g(means)f (5:30)h(p.m.,)p eop end %%Page: 233 245 TeXDict begin 233 244 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(233)581 299 y Fz(#)47 b(then)g(add)g(12)g(to)g(real)g(hour)581 408 y(if)g(\(hour)f(<)i(12)f(&&)g(now["hour"])e(>)i(hour\))772 518 y(hour)f(+=)i(12)581 737 y(#)f(set)g(target)f(time)h(in)g(seconds)f (since)g(midnight)581 847 y(target)g(=)h(\(hour)g(*)g(60)g(*)h(60\))f (+)g(\(minute)f(*)i(60\))581 1066 y(#)f(get)g(current)f(time)h(in)g (seconds)f(since)g(midnight)581 1176 y(current)g(=)h(\(now["hour"])e(*) i(60)g(*)h(60\))f(+)g(\\)1106 1285 y(\(now["minute"])d(*)j(60\))g(+)h (now["second"])581 1504 y(#)f(how)g(long)g(to)g(sleep)f(for)581 1614 y(naptime)g(=)h(target)f(-)i(current)581 1724 y(if)f(\(naptime)f (<=)h(0\))g({)772 1833 y(print)f("time)h(is)g(in)g(the)g(past!")f(>)h ("/dev/stderr")772 1943 y(exit)f(1)581 2052 y(})275 2301 y FB(Finally)-8 b(,)37 b(the)e(program)g(uses)f(the)h Fz(system)f FB(function)g(\(see)i(Section)g(8.1.4)g([Input/Output)e(F) -8 b(unc-)150 2410 y(tions],)38 b(page)f(140\))h(to)f(call)g(the)f Fz(sleep)f FB(utilit)m(y)-8 b(.)59 b(The)36 b Fz(sleep)e FB(utilit)m(y)k(simply)d(pauses)h(for)g(the)g(giv)m(en)150 2520 y(n)m(um)m(b)s(er)i(of)h(seconds.)68 b(If)39 b(the)g(exit)h (status)g(is)f(not)h(zero,)i(the)e(program)f(assumes)g(that)h Fz(sleep)e FB(w)m(as)150 2630 y(in)m(terrupted)33 b(and)f(exits.)50 b(If)32 b Fz(sleep)g FB(exited)i(with)f(an)g(OK)f(status)i(\(zero\),)h (then)e(the)h(program)e(prin)m(ts)150 2739 y(the)d(message)h(in)e(a)h (lo)s(op,)h(again)f(using)g Fz(sleep)e FB(to)i(dela)m(y)h(for)f(ho)m(w) m(ev)m(er)h(man)m(y)f(seconds)f(are)h(necessary:)581 2988 y Fz(#)47 b(zzzzzz.....)e(go)i(away)g(if)g(interrupted)581 3097 y(if)g(\(system\(sprintf\("sleep)42 b(\045d",)k(naptime\)\))g(!=)h (0\))772 3207 y(exit)f(1)581 3426 y(#)h(time)g(to)g(notify!)581 3535 y(command)f(=)h(sprintf\("sleep)d(\045d",)j(delay\))581 3645 y(for)g(\(i)g(=)g(1;)h(i)f(<=)g(count;)f(i++\))h({)772 3755 y(print)f(message)772 3864 y(#)h(if)g(sleep)g(command)f (interrupted,)e(go)j(away)772 3974 y(if)g(\(system\(command\))c(!=)48 b(0\))963 4083 y(break)581 4193 y(})581 4412 y(exit)f(0)390 4522 y(})150 4835 y Fj(13.3.3)63 b(T)-10 b(ransliterating)41 b(Characters)150 4982 y FB(The)26 b(system)i Fz(tr)e FB(utilit)m(y)i(transliterates)h(c)m(haracters.)41 b(F)-8 b(or)28 b(example,)g(it)g(is)f(often)g(used)f(to)i(map)f(upp)s(er-)150 5092 y(case)k(letters)h(in)m(to)f(lo)m(w)m(ercase)i(for)d(further)f (pro)s(cessing:)390 5340 y Fk(generate)46 b(data)57 b Fz(|)47 b(tr)g('A-Z')g('a-z')f(|)i Fk(process)d(data)57 b Fz(...)p eop end %%Page: 234 246 TeXDict begin 234 245 bop 150 -116 a FB(234)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y Fz(tr)36 b FB(requires)g(t)m(w)m(o)i(lists)f(of)f(c)m(haracters.) 1662 266 y Fo(3)1760 299 y FB(When)h(pro)s(cessing)f(the)h(input,)g (the)g(\014rst)f(c)m(haracter)i(in)150 408 y(the)c(\014rst)e(list)i(is) g(replaced)g(with)f(the)g(\014rst)g(c)m(haracter)i(in)e(the)h(second)f (list,)i(the)f(second)f(c)m(haracter)i(in)150 518 y(the)29 b(\014rst)f(list)h(is)g(replaced)g(with)f(the)h(second)g(c)m(haracter)h (in)f(the)g(second)f(list,)i(and)e(so)h(on.)40 b(If)29 b(there)g(are)150 628 y(more)g(c)m(haracters)g(in)f(the)h(\\from")g (list)g(than)f(in)g(the)g(\\to")i(list,)g(the)f(last)g(c)m(haracter)h (of)e(the)h(\\to")h(list)f(is)150 737 y(used)h(for)g(the)g(remaining)h (c)m(haracters)h(in)e(the)g(\\from")h(list.)275 872 y(Some)26 b(time)h(ago,)i(a)e(user)e(prop)s(osed)h(that)h(a)g(transliteration)h (function)e(should)f(b)s(e)h(added)g(to)h Fz(gawk)p FB(.)150 981 y(The)36 b(follo)m(wing)i(program)e(w)m(as)h(written)f(to)h(pro)m (v)m(e)g(that)g(c)m(haracter)h(transliteration)g(could)e(b)s(e)g(done) 150 1091 y(with)31 b(a)g(user-lev)m(el)h(function.)42 b(This)31 b(program)f(is)h(not)g(as)h(complete)g(as)f(the)g(system)h Fz(tr)e FB(utilit)m(y)i(but)e(it)150 1200 y(do)s(es)g(most)h(of)f(the)h (job.)275 1335 y(The)c Fz(translate)d FB(program)k(demonstrates)g(one)f (of)h(the)g(few)f(w)m(eaknesses)h(of)g(standard)f Fz(awk)p FB(:)38 b(deal-)150 1444 y(ing)29 b(with)f(individual)g(c)m(haracters)i (is)f(v)m(ery)g(painful,)g(requiring)f(rep)s(eated)g(use)h(of)g(the)g Fz(substr)p FB(,)e Fz(index)p FB(,)150 1554 y(and)i Fz(gsub)g FB(built-in)h(functions)f(\(see)i(Section)g(8.1.3)g ([String-Manipulation)g(F)-8 b(unctions],)31 b(page)g(129\).)3711 1521 y Fo(4)150 1664 y FB(There)f(are)h(t)m(w)m(o)g(functions.)41 b(The)30 b(\014rst,)f Fz(stranslate)p FB(,)f(tak)m(es)k(three)f (argumen)m(ts:)150 1823 y Fz(from)288 b FB(A)30 b(list)i(of)e(c)m (haracters)i(from)e(whic)m(h)g(to)h(translate.)150 1982 y Fz(to)384 b FB(A)30 b(list)i(of)e(c)m(haracters)i(to)f(whic)m(h)f(to) h(translate.)150 2141 y Fz(target)192 b FB(The)30 b(string)g(on)g(whic) m(h)h(to)g(do)f(the)h(translation.)275 2300 y(Asso)s(ciativ)m(e)e(arra) m(ys)f(mak)m(e)g(the)f(translation)h(part)f(fairly)h(easy)-8 b(.)40 b Fz(t_ar)26 b FB(holds)h(the)g(\\to")i(c)m(haracters,)150 2410 y(indexed)36 b(b)m(y)g(the)g(\\from")h(c)m(haracters.)59 b(Then)35 b(a)i(simple)f(lo)s(op)g(go)s(es)h(through)e Fz(from)p FB(,)i(one)f(c)m(haracter)150 2520 y(at)d(a)f(time.)46 b(F)-8 b(or)33 b(eac)m(h)g(c)m(haracter)h(in)d Fz(from)p FB(,)h(if)g(the)g(c)m(haracter)h(app)s(ears)f(in)f Fz(target)p FB(,)g Fz(gsub)g FB(is)h(used)f(to)150 2629 y(c)m(hange)h(it)e(to)i (the)e(corresp)s(onding)f Fz(to)h FB(c)m(haracter.)275 2764 y(The)40 b Fz(translate)f FB(function)i(simply)g(calls)h Fz(stranslate)d FB(using)i Fz($0)f FB(as)i(the)f(target.)75 b(The)41 b(main)150 2873 y(program)30 b(sets)g(t)m(w)m(o)i(global)f(v) -5 b(ariables,)31 b Fz(FROM)e FB(and)g Fz(TO)p FB(,)h(from)f(the)h (command)g(line,)h(and)e(then)h(c)m(hanges)150 2983 y Fz(ARGV)f FB(so)i(that)g Fz(awk)e FB(reads)h(from)g(the)h(standard)e (input.)275 3117 y(Finally)-8 b(,)32 b(the)e(pro)s(cessing)g(rule)g (simply)g(calls)i Fz(translate)c FB(for)i(eac)m(h)h(record:)390 3252 y Fz(#)47 b(translate.awk)e(---)i(do)g(tr-like)f(stuff)390 3471 y(#)h(Bugs:)g(does)f(not)h(handle)f(things)h(like:)f(tr)h(A-Z)g (a-z,)g(it)g(has)390 3580 y(#)g(to)h(be)f(spelled)f(out.)g(However,)g (if)h(`to')g(is)g(shorter)f(than)g(`from',)390 3690 y(#)h(the)g(last)g (character)e(in)i(`to')g(is)g(used)g(for)g(the)g(rest)f(of)i(`from'.) 390 3909 y(function)e(stranslate\(from,)d(to,)k(target,)237 b(lf,)46 b(lt,)h(t_ar,)g(i,)g(c\))390 4019 y({)581 4128 y(lf)g(=)h(length\(from\))581 4238 y(lt)f(=)h(length\(to\))581 4348 y(for)f(\(i)g(=)g(1;)h(i)f(<=)g(lt;)g(i++\))772 4457 y(t_ar[substr\(from,)c(i,)k(1\)])g(=)g(substr\(to,)e(i,)j(1\))581 4567 y(if)f(\(lt)g(<)g(lf\))772 4676 y(for)g(\(;)g(i)g(<=)h(lf;)e (i++\))963 4786 y(t_ar[substr\(from,)d(i,)k(1\)])g(=)g(substr\(to,)e (lt,)i(1\))p 150 4876 1200 4 v 199 4944 a Fo(3)275 4975 y Fn(On)22 b(some)j(older)f(System)f(V)g(systems,)i Fm(tr)f Fn(ma)n(y)f(require)g(that)g(the)h(lists)g(b)r(e)g(written)g(as)g (range)g(expressions)g(enclosed)275 5063 y(in)31 b(square)h(brac)n(k)n (ets)g(\(`)p Fm([a-z])p Fn('\))h(and)e(quoted,)i(to)f(prev)n(en)n(t)f (the)g(shell)i(from)g(attempting)f(a)g(\014le)g(name)g(expansion.)275 5150 y(This)26 b(is)g(not)g(a)g(feature.)199 5221 y Fo(4)275 5253 y Fn(This)20 b(program)h(w)n(as)g(written)f(b)r(efore)h Fm(gawk)g Fn(acquired)f(the)g(abilit)n(y)g(to)g(split)g(eac)n(h)h(c)n (haracter)f(in)g(a)g(string)h(in)n(to)f(separate)275 5340 y(arra)n(y)25 b(elemen)n(ts.)p eop end %%Page: 235 247 TeXDict begin 235 246 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(235)581 299 y Fz(for)47 b(\(i)g(=)g(1;)h(i)f(<=)g(lf;)g(i++\))g({)772 408 y(c)g(=)h(substr\(from,)c(i,)j(1\))772 518 y(if)g(\(index\(target,) d(c\))j(>)h(0\))963 628 y(gsub\(c,)e(t_ar[c],)f(target\))581 737 y(})581 847 y(return)h(target)390 956 y(})390 1176 y(function)g(translate\(from,)d(to\))390 1285 y({)581 1395 y(return)j($0)h(=)h(stranslate\(from,)43 b(to,)k($0\))390 1504 y(})390 1724 y(#)g(main)g(program)390 1833 y(BEGIN)f({)581 1943 y(if)h(\(ARGC)f(<)i(3\))f({)772 2052 y(print)f("usage:)g (translate)f(from)i(to")g(>)g("/dev/stderr")772 2162 y(exit)581 2271 y(})581 2381 y(FROM)g(=)g(ARGV[1])581 2491 y(TO)g(=)h(ARGV[2])581 2600 y(ARGC)f(=)g(2)581 2710 y(ARGV[1])f(=)h("-")390 2819 y(})390 3039 y({)581 3148 y(translate\(FROM,)d(TO\))581 3258 y(print)390 3367 y(})275 3496 y FB(While)f(it)h(is)f(p)s(ossible)f(to)i(do)e(c)m(haracter)j (transliteration)f(in)f(a)g(user-lev)m(el)h(function,)i(it)e(is)f(not) 150 3606 y(necessarily)33 b(e\016cien)m(t,)i(and)d(w)m(e)h(\(the)g Fz(gawk)e FB(authors\))h(started)h(to)g(consider)f(adding)g(a)h (built-in)g(func-)150 3716 y(tion.)41 b(Ho)m(w)m(ev)m(er,)32 b(shortly)e(after)h(writing)f(this)f(program,)h(w)m(e)h(learned)f(that) g(the)g(System)g(V)g(Release)i(4)150 3825 y Fz(awk)c FB(had)f(added)h(the)h Fz(toupper)d FB(and)i Fz(tolower)f FB(functions)h(\(see)h(Section)h(8.1.3)g([String-Manipulation)150 3935 y(F)-8 b(unctions],)30 b(page)g(129\).)42 b(These)28 b(functions)h(handle)f(the)h(v)-5 b(ast)29 b(ma)5 b(jorit)m(y)30 b(of)f(the)g(cases)h(where)e(c)m(harac-)150 4044 y(ter)35 b(transliteration)h(is)f(necessary)-8 b(,)37 b(and)d(so)g(w)m(e)h(c)m (hose)h(to)f(simply)g(add)f(those)h(functions)f(to)h Fz(gawk)f FB(as)150 4154 y(w)m(ell)d(and)f(then)g(lea)m(v)m(e)j(w)m (ell)e(enough)f(alone.)275 4283 y(An)g(ob)m(vious)i(impro)m(v)m(emen)m (t)g(to)g(this)e(program)h(w)m(ould)g(b)s(e)f(to)i(set)f(up)f(the)i Fz(t_ar)d FB(arra)m(y)j(only)f(once,)150 4393 y(in)36 b(a)h Fz(BEGIN)e FB(rule.)58 b(Ho)m(w)m(ev)m(er,)40 b(this)c(assumes)g (that)h(the)f(\\from")h(and)f(\\to")i(lists)f(will)f(nev)m(er)h(c)m (hange)150 4502 y(throughout)30 b(the)h(lifetime)g(of)g(the)f(program.) 150 4691 y Fj(13.3.4)63 b(Prin)m(ting)41 b(Mailing)h(Lab)s(els)150 4838 y FB(Here)22 b(is)f(a)h(\\real)g(w)m(orld")983 4805 y Fo(5)1042 4838 y FB(program.)38 b(This)20 b(script)i(reads)f(lists)h (of)f(names)g(and)g(addresses)g(and)g(generates)150 4947 y(mailing)27 b(lab)s(els.)39 b(Eac)m(h)27 b(page)g(of)f(lab)s(els)g (has)g(20)g(lab)s(els)h(on)f(it,)h(2)g(across)f(and)f(10)i(do)m(wn.)39 b(The)26 b(addresses)150 5057 y(are)i(guaran)m(teed)g(to)h(b)s(e)e(no)g (more)h(than)f(5)h(lines)g(of)f(data.)41 b(Eac)m(h)28 b(address)e(is)i(separated)g(from)f(the)h(next)150 5167 y(b)m(y)i(a)h(blank)f(line.)p 150 5241 1200 4 v 199 5308 a Fo(5)275 5340 y Fn(\\Real)c(w)n(orld")h(is)f(de\014ned)e(as)j(\\a)f (program)h(actually)f(used)f(to)h(get)g(something)h(done.")p eop end %%Page: 236 248 TeXDict begin 236 247 bop 150 -116 a FB(236)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(The)d(basic)i(idea)f(is)g(to)h(read)f(20)h(lab)s(els)f(w)m (orth)h(of)f(data.)40 b(Eac)m(h)29 b(line)g(of)f(eac)m(h)h(lab)s(el)g (is)f(stored)g(in)g(the)150 408 y Fz(line)h FB(arra)m(y)-8 b(.)41 b(The)30 b(single)h(rule)f(tak)m(es)h(care)g(of)f(\014lling)h (the)f Fz(line)f FB(arra)m(y)h(and)g(prin)m(ting)g(the)g(page)h(when) 150 518 y(20)g(lab)s(els)g(ha)m(v)m(e)g(b)s(een)f(read.)275 664 y(The)i Fz(BEGIN)g FB(rule)h(simply)g(sets)h Fz(RS)f FB(to)h(the)g(empt)m(y)f(string,)i(so)e(that)h Fz(awk)f FB(splits)g(records)g(at)h(blank)150 774 y(lines)d(\(see)g(Section)g (3.1)h([Ho)m(w)f(Input)e(Is)h(Split)h(in)m(to)g(Records],)g(page)g (36\).)43 b(It)30 b(sets)h Fz(MAXLINES)d FB(to)j(100,)150 883 y(since)g(100)g(is)g(the)f(maxim)m(um)h(n)m(um)m(b)s(er)e(of)h (lines)h(on)f(the)h(page)g(\(20)g(*)g(5)g(=)f(100\).)275 1029 y(Most)h(of)g(the)g(w)m(ork)g(is)f(done)h(in)f(the)h Fz(printpage)d FB(function.)41 b(The)30 b(lab)s(el)h(lines)g(are)g (stored)g(sequen-)150 1139 y(tially)39 b(in)e(the)h Fz(line)f FB(arra)m(y)-8 b(.)63 b(But)38 b(they)g(ha)m(v)m(e)h(to)f(prin)m(t)f (horizon)m(tally;)44 b Fz(line[1])35 b FB(next)j(to)h Fz(line[6])p FB(,)150 1249 y Fz(line[2])33 b FB(next)j(to)g Fz(line[7])p FB(,)f(and)g(so)h(on.)56 b(Tw)m(o)35 b(lo)s(ops)h(are)g (used)e(to)j(accomplish)f(this.)56 b(The)35 b(outer)150 1358 y(lo)s(op,)f(con)m(trolled)g(b)m(y)f Fz(i)p FB(,)g(steps)g (through)f(ev)m(ery)h(10)h(lines)f(of)g(data;)i(this)e(is)f(eac)m(h)i (ro)m(w)f(of)g(lab)s(els.)48 b(The)150 1468 y(inner)32 b(lo)s(op,)i(con)m(trolled)g(b)m(y)f Fz(j)p FB(,)g(go)s(es)g(through)g (the)g(lines)f(within)h(the)g(ro)m(w.)48 b(As)32 b Fz(j)h FB(go)s(es)g(from)g(0)g(to)g(4,)150 1577 y(`)p Fz(i+j)p FB(')h(is)g(the)h Fz(j)p FB(-th)f(line)g(in)g(the)h(ro)m(w,)g(and)f(`)p Fz(i+j+5)p FB(')f(is)i(the)f(en)m(try)h(next)f(to)h(it.)53 b(The)34 b(output)g(ends)f(up)150 1687 y(lo)s(oking)e(something)g(lik)m (e)h(this:)390 1833 y Fz(line)47 b(1)477 b(line)46 b(6)390 1943 y(line)h(2)477 b(line)46 b(7)390 2052 y(line)h(3)477 b(line)46 b(8)390 2162 y(line)h(4)477 b(line)46 b(9)390 2271 y(line)h(5)477 b(line)46 b(10)390 2381 y(...)275 2527 y FB(As)37 b(a)i(\014nal)e(note,)k(an)d(extra)h(blank)e(line)h(is) g(prin)m(ted)g(at)h(lines)f(21)h(and)e(61,)k(to)e(k)m(eep)f(the)g (output)150 2637 y(lined)29 b(up)f(on)i(the)f(lab)s(els.)41 b(This)28 b(is)i(dep)s(enden)m(t)e(on)h(the)h(particular)f(brand)f(of)i (lab)s(els)f(in)g(use)g(when)g(the)150 2746 y(program)e(w)m(as)h (written.)40 b(Y)-8 b(ou)28 b(will)f(also)i(note)f(that)g(there)f(are)h (2)g(blank)f(lines)g(at)i(the)e(top)h(and)f(2)g(blank)150 2856 y(lines)k(at)g(the)f(b)s(ottom.)275 3002 y(The)d Fz(END)h FB(rule)g(arranges)g(to)i(\015ush)c(the)j(\014nal)f(page)h(of) f(lab)s(els;)i(there)e(ma)m(y)h(not)g(ha)m(v)m(e)g(b)s(een)f(an)g(ev)m (en)150 3112 y(m)m(ultiple)j(of)g(20)g(lab)s(els)f(in)g(the)h(data:)390 3258 y Fz(#)47 b(labels.awk)e(---)i(print)g(mailing)f(labels)390 3587 y(#)h(Each)g(label)f(is)i(5)f(lines)f(of)i(data)e(that)h(may)g (have)f(blank)h(lines.)390 3696 y(#)g(The)g(label)g(sheets)f(have)g(2)i (blank)e(lines)h(at)g(the)g(top)g(and)g(2)g(at)390 3806 y(#)g(the)g(bottom.)390 4025 y(BEGIN)190 b({)47 b(RS)g(=)h("")f(;)g (MAXLINES)f(=)h(100)g(})390 4244 y(function)f(printpage\()188 b(i,)47 b(j\))390 4354 y({)581 4463 y(if)g(\(Nlines)f(<=)h(0\))772 4573 y(return)581 4792 y(printf)f("\\n\\n")380 b(#)48 b(header)581 5011 y(for)f(\(i)g(=)g(1;)h(i)f(<=)g(Nlines;)f(i)i(+=)f (10\))g({)772 5121 y(if)g(\(i)g(==)g(21)h(||)f(i)g(==)g(61\))963 5230 y(print)f("")772 5340 y(for)h(\(j)g(=)g(0;)h(j)f(<)g(5;)h(j++\))e ({)p eop end %%Page: 237 249 TeXDict begin 237 248 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(237)963 299 y Fz(if)47 b(\(i)g(+)h(j)f(>)g(MAXLINES\))1154 408 y(break)963 518 y(printf)f(")143 b(\045-41s)46 b(\045s\\n",)g (line[i+j],)f(line[i+j+5])772 628 y(})772 737 y(print)h("")581 847 y(})581 1066 y(printf)g("\\n\\n")380 b(#)48 b(footer)581 1285 y(for)f(\(i)g(in)g(line\))772 1395 y(line[i])f(=)h("")390 1504 y(})390 1724 y(#)g(main)g(rule)390 1833 y({)581 1943 y(if)g(\(Count)f(>=)h(20\))g({)772 2052 y(printpage\(\))772 2162 y(Count)f(=)i(0)772 2271 y(Nlines)e(=)h(0)581 2381 y(})581 2491 y(n)g(=)h(split\($0,)d(a,)i("\\n"\))581 2600 y(for)g(\(i)g(=)g(1;)h(i)f(<=)g(n;)g(i++\))772 2710 y(line[++Nlines])d(=)j(a[i])581 2819 y(for)g(\(;)g(i)g(<=)h(5;)f(i++\)) 772 2929 y(line[++Nlines])d(=)j("")581 3039 y(Count++)390 3148 y(})390 3367 y(END)190 b(\\)390 3477 y({)581 3587 y(printpage\(\))390 3696 y(})150 3929 y Fj(13.3.5)63 b(Generating)42 b(W)-10 b(ord-Usage)41 b(Coun)m(ts)150 4076 y FB(The)f(follo)m(wing)j Fz(awk)d FB(program)h(prin)m(ts)f(the)h (n)m(um)m(b)s(er)f(of)h(o)s(ccurrences)g(of)g(eac)m(h)h(w)m(ord)f(in)f (its)i(input.)150 4186 y(It)e(illustrates)h(the)f(asso)s(ciativ)m(e)i (nature)e(of)g Fz(awk)f FB(arra)m(ys)h(b)m(y)f(using)h(strings)f(as)h (subscripts.)68 b(It)40 b(also)150 4295 y(demonstrates)35 b(the)g(`)p Fz(for)30 b Fk(index)39 b Fz(in)30 b Fk(array)11 b FB(')33 b(mec)m(hanism.)54 b(Finally)-8 b(,)38 b(it)d(sho)m(ws)g(ho)m (w)g Fz(awk)e FB(is)i(used)f(in)150 4405 y(conjunction)43 b(with)g(other)g(utilit)m(y)h(programs)f(to)g(do)g(a)g(useful)f(task)i (of)f(some)g(complexit)m(y)i(with)e(a)150 4514 y(minim)m(um)30 b(of)g(e\013ort.)42 b(Some)30 b(explanations)h(follo)m(w)h(the)f (program)f(listing:)390 4682 y Fz(#)47 b(Print)g(list)f(of)i(word)e (frequencies)390 4792 y({)581 4902 y(for)h(\(i)g(=)g(1;)h(i)f(<=)g(NF;) g(i++\))772 5011 y(freq[$i]++)390 5121 y(})390 5340 y(END)g({)p eop end %%Page: 238 250 TeXDict begin 238 249 bop 150 -116 a FB(238)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)581 299 y Fz(for)47 b(\(word)f(in)h(freq\))772 408 y(printf)f ("\045s\\t\045d\\n",)f(word,)h(freq[word])390 518 y(})275 662 y FB(This)26 b(program)h(has)g(t)m(w)m(o)h(rules.)39 b(The)27 b(\014rst)g(rule,)g(b)s(ecause)g(it)h(has)f(an)g(empt)m(y)h (pattern,)g(is)f(executed)150 772 y(for)37 b(ev)m(ery)g(input)f(line.) 61 b(It)36 b(uses)h Fz(awk)p FB('s)f(\014eld-accessing)i(mec)m(hanism)f (\(see)h(Section)g(3.2)g([Examining)150 881 y(Fields],)29 b(page)e(39\))h(to)f(pic)m(k)h(out)f(the)g(individual)f(w)m(ords)g (from)g(the)h(line,)h(and)e(the)h(built-in)g(v)-5 b(ariable)28 b Fz(NF)150 991 y FB(\(see)33 b(Section)f(6.5)h([Built-in)f(V)-8 b(ariables],)34 b(page)e(107\))h(to)g(kno)m(w)e(ho)m(w)h(man)m(y)g (\014elds)f(are)g(a)m(v)-5 b(ailable.)47 b(F)-8 b(or)150 1100 y(eac)m(h)36 b(input)f(w)m(ord,)h(it)g(incremen)m(ts)f(an)g (elemen)m(t)i(of)e(the)h(arra)m(y)f Fz(freq)f FB(to)i(re\015ect)g(that) g(the)f(w)m(ord)g(has)150 1210 y(b)s(een)30 b(seen)g(an)g(additional)i (time.)275 1354 y(The)25 b(second)h(rule,)h(b)s(ecause)f(it)g(has)g (the)g(pattern)g Fz(END)p FB(,)g(is)g(not)g(executed)h(un)m(til)f(the)g (input)f(has)h(b)s(een)150 1463 y(exhausted.)55 b(It)35 b(prin)m(ts)g(out)g(the)g(con)m(ten)m(ts)i(of)f(the)f Fz(freq)f FB(table)i(that)g(has)f(b)s(een)f(built)h(up)f(inside)h(the) 150 1573 y(\014rst)29 b(action.)41 b(This)29 b(program)g(has)g(sev)m (eral)i(problems)e(that)h(w)m(ould)f(prev)m(en)m(t)h(it)g(from)e(b)s (eing)h(useful)g(b)m(y)150 1683 y(itself)i(on)f(real)h(text)h(\014les:) 225 1826 y Fy(\017)60 b FB(W)-8 b(ords)35 b(are)g(detected)g(using)f (the)h Fz(awk)f FB(con)m(v)m(en)m(tion)i(that)f(\014elds)f(are)h (separated)g(just)f(b)m(y)h(white-)330 1936 y(space.)40 b(Other)28 b(c)m(haracters)h(in)f(the)g(input)f(\(except)j(newlines\))e (don't)g(ha)m(v)m(e)h(an)m(y)f(sp)s(ecial)h(meaning)330 2046 y(to)i Fz(awk)p FB(.)40 b(This)30 b(means)g(that)h(punctuation)f (c)m(haracters)i(coun)m(t)f(as)f(part)h(of)f(w)m(ords.)225 2185 y Fy(\017)60 b FB(The)28 b Fz(awk)g FB(language)j(considers)d(upp) s(er-)g(and)g(lo)m(w)m(ercase)j(c)m(haracters)f(to)g(b)s(e)e(distinct.) 41 b(Therefore,)330 2294 y(\\bartender")35 b(and)f(\\Bartender")i(are)f (not)g(treated)h(as)e(the)h(same)g(w)m(ord.)54 b(This)34 b(is)g(undesirable,)330 2404 y(since)39 b(in)f(normal)h(text,)j(w)m (ords)c(are)h(capitalized)i(if)d(they)h(b)s(egin)f(sen)m(tences,)k(and) c(a)h(frequency)330 2514 y(analyzer)31 b(should)f(not)g(b)s(e)g (sensitiv)m(e)i(to)f(capitalization.)225 2653 y Fy(\017)60 b FB(The)22 b(output)g(do)s(es)g(not)h(come)g(out)g(in)f(an)m(y)h (useful)f(order.)38 b(Y)-8 b(ou're)23 b(more)g(lik)m(ely)h(to)f(b)s(e)f (in)m(terested)h(in)330 2762 y(whic)m(h)g(w)m(ords)h(o)s(ccur)f(most)h (frequen)m(tly)g(or)f(in)h(ha)m(ving)g(an)g(alphab)s(etized)g(table)g (of)g(ho)m(w)g(frequen)m(tly)330 2872 y(eac)m(h)32 b(w)m(ord)e(o)s (ccurs.)275 3045 y(The)g(w)m(a)m(y)h(to)h(solv)m(e)g(these)f(problems)f (is)g(to)i(use)e(some)h(of)g Fz(awk)p FB('s)f(more)h(adv)-5 b(anced)30 b(features.)42 b(First,)150 3155 y(w)m(e)f(use)e Fz(tolower)f FB(to)j(remo)m(v)m(e)h(case)f(distinctions.)70 b(Next,)44 b(w)m(e)c(use)g Fz(gsub)f FB(to)i(remo)m(v)m(e)g (punctuation)150 3265 y(c)m(haracters.)h(Finally)-8 b(,)32 b(w)m(e)f(use)f(the)g(system)g Fz(sort)f FB(utilit)m(y)j(to)f(pro)s (cess)f(the)g(output)g(of)g(the)g Fz(awk)g FB(script.)150 3374 y(Here)h(is)f(the)h(new)f(v)m(ersion)h(of)f(the)h(program:)390 3518 y Fz(#)47 b(wordfreq.awk)e(---)i(print)f(list)h(of)g(word)g (frequencies)390 3737 y({)581 3847 y($0)g(=)h(tolower\($0\))187 b(#)48 b(remove)e(case)h(distinctions)581 3956 y(#)g(remove)f (punctuation)581 4066 y(gsub\(/[^[:alnum:]_[:blan)o(k:]])o(/,)41 b("",)47 b($0\))581 4176 y(for)g(\(i)g(=)g(1;)h(i)f(<=)g(NF;)g(i++\)) 772 4285 y(freq[$i]++)390 4395 y(})390 4614 y(END)g({)581 4723 y(for)g(\(word)f(in)h(freq\))772 4833 y(printf)f ("\045s\\t\045d\\n",)f(word,)h(freq[word])390 4943 y(})275 5087 y FB(Assuming)23 b(w)m(e)j(ha)m(v)m(e)f(sa)m(v)m(ed)h(this)f (program)f(in)g(a)h(\014le)g(named)f(`)p Fz(wordfreq.awk)p FB(',)f(and)h(that)h(the)g(data)150 5196 y(is)30 b(in)g(`)p Fz(file1)p FB(',)g(the)h(follo)m(wing)h(pip)s(eline:)390 5340 y Fz(awk)47 b(-f)g(wordfreq.awk)e(file1)h(|)h(sort)g(-k)g(2nr)p eop end %%Page: 239 251 TeXDict begin 239 250 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(239)150 299 y(pro)s(duces)33 b(a)i(table)g(of)f(the)h(w)m(ords)f(app)s(earing)f (in)h(`)p Fz(file1)p FB(')g(in)g(order)g(of)g(decreasing)h(frequency)-8 b(.)52 b(The)150 408 y Fz(awk)26 b FB(program)h(suitably)g(massages)h (the)g(data)g(and)e(pro)s(duces)g(a)h(w)m(ord)g(frequency)g(table,)i (whic)m(h)e(is)g(not)150 518 y(ordered.)275 656 y(The)k Fz(awk)g FB(script's)g(output)h(is)f(then)h(sorted)f(b)m(y)h(the)g Fz(sort)e FB(utilit)m(y)j(and)e(prin)m(ted)h(on)f(the)h(terminal.)150 766 y(The)20 b(options)i(giv)m(en)g(to)f Fz(sort)f FB(sp)s(ecify)h(a)g (sort)g(that)h(uses)e(the)h(second)g(\014eld)g(of)g(eac)m(h)h(input)e (line)h(\(skipping)150 875 y(one)30 b(\014eld\),)f(that)h(the)g(sort)f (k)m(eys)h(should)f(b)s(e)f(treated)j(as)e(n)m(umeric)g(quan)m(tities)i (\(otherwise)f(`)p Fz(15)p FB(')f(w)m(ould)150 985 y(come)i(b)s(efore)f (`)p Fz(5)p FB('\),)h(and)f(that)h(the)g(sorting)g(should)e(b)s(e)h (done)g(in)g(descending)g(\(rev)m(erse\))i(order.)275 1123 y(The)d Fz(sort)h FB(could)g(ev)m(en)h(b)s(e)f(done)g(from)g (within)g(the)g(program,)h(b)m(y)f(c)m(hanging)h(the)g Fz(END)e FB(action)j(to:)390 1261 y Fz(END)47 b({)581 1370 y(sort)g(=)g("sort)f(-k)i(2nr")581 1480 y(for)f(\(word)f(in)h (freq\))772 1589 y(printf)f("\045s\\t\045d\\n",)f(word,)h(freq[word])f (|)i(sort)581 1699 y(close\(sort\))390 1809 y(})275 1946 y FB(This)20 b(w)m(a)m(y)j(of)f(sorting)g(m)m(ust)g(b)s(e)f(used)f(on)i (systems)g(that)g(do)g(not)g(ha)m(v)m(e)g(true)g(pip)s(es)f(at)h(the)g (command-)150 2056 y(line)35 b(\(or)h(batc)m(h-\014le\))g(lev)m(el.)56 b(See)36 b(the)f(general)h(op)s(erating)f(system)g(do)s(cumen)m(tation) h(for)f(more)g(infor-)150 2166 y(mation)c(on)f(ho)m(w)h(to)g(use)f(the) g Fz(sort)g FB(program.)150 2368 y Fj(13.3.6)63 b(Remo)m(ving)41 b(Duplicates)g(from)h(Unsorted)g(T)-10 b(ext)150 2515 y FB(The)35 b Fz(uniq)f FB(program)h(\(see)h(Section)g(13.2.6)h([Prin)m (ting)f(Nonduplicated)f(Lines)g(of)g(T)-8 b(ext],)38 b(page)e(224\),)150 2625 y(remo)m(v)m(es)c(duplicate)f(lines)f(from)g Fw(sorte)-5 b(d)42 b FB(data.)275 2763 y(Supp)s(ose,)25 b(ho)m(w)m(ev)m(er,)k(y)m(ou)e(need)f(to)h(remo)m(v)m(e)g(duplicate)g (lines)g(from)f(a)g(data)h(\014le)g(but)e(that)i(y)m(ou)g(w)m(an)m(t) 150 2872 y(to)32 b(preserv)m(e)f(the)g(order)f(the)h(lines)g(are)h(in.) 41 b(A)31 b(go)s(o)s(d)g(example)h(of)f(this)g(migh)m(t)g(b)s(e)f(a)i (shell)f(history)g(\014le.)150 2982 y(The)h(history)h(\014le)f(k)m (eeps)i(a)f(cop)m(y)g(of)g(all)g(the)g(commands)f(y)m(ou)h(ha)m(v)m(e)h (en)m(tered,)g(and)e(it)h(is)g(not)g(un)m(usual)150 3092 y(to)41 b(rep)s(eat)f(a)h(command)f(sev)m(eral)i(times)f(in)f(a)g(ro)m (w.)71 b(Occasionally)42 b(y)m(ou)f(migh)m(t)g(w)m(an)m(t)g(to)g (compact)150 3201 y(the)34 b(history)f(b)m(y)g(remo)m(ving)h(duplicate) g(en)m(tries.)51 b(Y)-8 b(et)34 b(it)g(is)g(desirable)f(to)h(main)m (tain)h(the)e(order)g(of)h(the)150 3311 y(original)e(commands.)275 3449 y(This)k(simple)h(program)g(do)s(es)g(the)g(job.)60 b(It)38 b(uses)e(t)m(w)m(o)j(arra)m(ys.)61 b(The)37 b Fz(data)f FB(arra)m(y)h(is)g(indexed)g(b)m(y)150 3558 y(the)d(text)h(of)f(eac)m(h)h(line.)52 b(F)-8 b(or)34 b(eac)m(h)h(line,)h Fz(data[$0])31 b FB(is)j(incremen)m(ted.)52 b(If)33 b(a)i(particular)f(line)g(has)g(not)150 3668 y(b)s(een)41 b(seen)h(b)s(efore,)j(then)c Fz(data[$0])f FB(is)i(zero.)76 b(In)41 b(this)h(case,)k(the)c(text)h(of)f(the)g(line) g(is)g(stored)g(in)150 3777 y Fz(lines[count])p FB(.)67 b(Eac)m(h)41 b(elemen)m(t)h(of)e Fz(lines)f FB(is)h(a)h(unique)f (command,)i(and)e(the)h(indices)f(of)g Fz(lines)150 3887 y FB(indicate)30 b(the)e(order)g(in)h(whic)m(h)f(those)h(lines)g(are)f (encoun)m(tered.)41 b(The)28 b Fz(END)g FB(rule)g(simply)g(prin)m(ts)g (out)h(the)150 3997 y(lines,)i(in)f(order:)390 4134 y Fz(#)47 b(histsort.awk)e(---)i(compact)f(a)h(shell)f(history)g(file)390 4244 y(#)h(Thanks)g(to)g(Byron)f(Rakitzis)g(for)h(the)f(general)g(idea) 390 4463 y({)581 4573 y(if)h(\(data[$0]++)e(==)i(0\))772 4682 y(lines[++count])d(=)j($0)390 4792 y(})390 5011 y(END)g({)581 5121 y(for)g(\(i)g(=)g(1;)h(i)f(<=)g(count;)f(i++\))772 5230 y(print)g(lines[i])390 5340 y(})p eop end %%Page: 240 252 TeXDict begin 240 251 bop 150 -116 a FB(240)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(This)36 b(program)h(also)g(pro)m(vides)g(a)h(foundation)f(for) f(generating)j(other)e(useful)f(information.)61 b(F)-8 b(or)150 408 y(example,)24 b(using)c(the)h(follo)m(wing)h Fz(print)d FB(statemen)m(t)k(in)d(the)h Fz(END)f FB(rule)h(indicates)g (ho)m(w)g(often)g(a)h(particular)150 518 y(command)30 b(is)h(used:)390 656 y Fz(print)46 b(data[lines[i]],)e(lines[i])275 794 y FB(This)29 b(w)m(orks)h(b)s(ecause)h Fz(data[$0])d FB(is)i(incremen)m(ted)h(eac)m(h)h(time)f(a)g(line)f(is)h(seen.)150 997 y Fj(13.3.7)63 b(Extracting)40 b(Programs)i(from)g(T)-10 b(exinfo)42 b(Source)f(Files)150 1144 y FB(Both)j(this)g(c)m(hapter)h (and)e(the)h(previous)f(c)m(hapter)i(\(Chapter)e(12)i([A)f(Library)f (of)h Fz(awk)f FB(F)-8 b(unctions],)150 1254 y(page)34 b(181\))h(presen)m(t)e(a)h(large)g(n)m(um)m(b)s(er)e(of)i Fz(awk)e FB(programs.)49 b(If)33 b(y)m(ou)h(w)m(an)m(t)g(to)g(exp)s (erimen)m(t)f(with)g(these)150 1363 y(programs,)g(it)g(is)g(tedious)g (to)g(ha)m(v)m(e)h(to)f(t)m(yp)s(e)g(them)g(in)f(b)m(y)h(hand.)46 b(Here)33 b(w)m(e)g(presen)m(t)g(a)g(program)f(that)150 1473 y(can)f(extract)h(parts)e(of)g(a)h(T)-8 b(exinfo)31 b(input)e(\014le)i(in)m(to)g(separate)g(\014les.)275 1611 y(This)i(b)s(o)s(ok)h(is)g(written)g(in)g(T)-8 b(exinfo,)36 b(the)f(GNU)g(pro)5 b(ject's)35 b(do)s(cumen)m(t)f(formatting)h (language.)54 b(A)150 1720 y(single)35 b(T)-8 b(exinfo)34 b(source)h(\014le)f(can)h(b)s(e)e(used)h(to)g(pro)s(duce)g(b)s(oth)f (prin)m(ted)h(and)f(online)i(do)s(cumen)m(tation.)150 1830 y(T)-8 b(exinfo)28 b(is)g(fully)f(do)s(cumen)m(ted)g(in)g(the)h(b) s(o)s(ok)f Fx(T)-8 b(exinfo|The)28 b(GNU)g(Do)s(cumen)m(tation)h(F)-8 b(ormat)p FB(,)30 b(a)m(v)-5 b(ail-)150 1940 y(able)31 b(from)f(the)g(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation.)275 2078 y(F)g(or)31 b(our)f(purp)s(oses,)e(it)j(is)g (enough)f(to)h(kno)m(w)f(three)h(things)f(ab)s(out)g(T)-8 b(exinfo)31 b(input)e(\014les:)225 2216 y Fy(\017)60 b FB(The)29 b(\\at")i(sym)m(b)s(ol)f(\(`)p Fz(@)p FB('\))g(is)g(sp)s (ecial)g(in)g(T)-8 b(exinfo,)30 b(m)m(uc)m(h)g(as)g(the)g(bac)m(kslash) g(\(`)p Fz(\\)p FB('\))h(is)e(in)h(C)f(or)h Fz(awk)p FB(.)330 2325 y(Literal)h(`)p Fz(@)p FB(')g(sym)m(b)s(ols)f(are)h (represen)m(ted)f(in)g(T)-8 b(exinfo)31 b(source)f(\014les)h(as)f(`)p Fz(@@)p FB('.)225 2461 y Fy(\017)60 b FB(Commen)m(ts)32 b(start)g(with)f(either)h(`)p Fz(@c)p FB(')f(or)h(`)p Fz(@comment)p FB('.)42 b(The)32 b(\014le-extraction)h(program)f(w)m (orks)f(b)m(y)330 2571 y(using)f(sp)s(ecial)h(commen)m(ts)g(that)g (start)g(at)g(the)g(b)s(eginning)e(of)i(a)g(line.)225 2707 y Fy(\017)60 b FB(Lines)49 b(con)m(taining)i(`)p Fz(@group)p FB(')d(and)h(`)p Fz(@end)30 b(group)p FB(')48 b(commands)h(brac)m(k)m(et)i(example)f(text)g(that)330 2817 y(should)36 b(not)g(b)s(e)g(split)h(across)g(a)g(page)g(b)s (oundary)-8 b(.)57 b(\(Unfortunately)-8 b(,)40 b(T)2862 2837 y(E)2912 2817 y(X)c(isn't)h(alw)m(a)m(ys)h(smart)330 2927 y(enough)30 b(to)h(do)g(things)f(exactly)i(righ)m(t,)f(and)f(w)m (e)h(ha)m(v)m(e)g(to)g(giv)m(e)h(it)f(some)g(help.\))275 3091 y(The)25 b(follo)m(wing)j(program,)f(`)p Fz(extract.awk)p FB(',)e(reads)h(through)g(a)g(T)-8 b(exinfo)27 b(source)g(\014le)f(and) g(do)s(es)g(t)m(w)m(o)150 3201 y(things,)d(based)e(on)h(the)f(sp)s (ecial)h(commen)m(ts.)39 b(Up)s(on)20 b(seeing)j(`)p Fz(@c)30 b(system)e(...)p FB(',)23 b(it)f(runs)e(a)i(command,)h(b)m(y) 150 3310 y(extracting)28 b(the)e(command)g(text)h(from)f(the)g(con)m (trol)h(line)g(and)e(passing)h(it)h(on)f(to)h(the)f Fz(system)e FB(function)150 3420 y(\(see)33 b(Section)g(8.1.4)i([Input/Output)30 b(F)-8 b(unctions],)34 b(page)f(140\).)48 b(Up)s(on)32 b(seeing)h(`)p Fz(@c)d(file)f Fk(filename)11 b FB(',)150 3530 y(eac)m(h)25 b(subsequen)m(t)e(line)h(is)g(sen)m(t)h(to)f(the)g (\014le)g Fx(\014lename)p FB(,)i(un)m(til)e(`)p Fz(@c)30 b(endfile)p FB(')22 b(is)i(encoun)m(tered.)39 b(The)23 b(rules)150 3639 y(in)30 b(`)p Fz(extract.awk)p FB(')d(matc)m(h)32 b(either)e(`)p Fz(@c)p FB(')g(or)g(`)p Fz(@comment)p FB(')f(b)m(y)h(letting)i(the)e(`)p Fz(omment)p FB(')f(part)h(b)s(e)g (optional.)150 3749 y(Lines)36 b(con)m(taining)i(`)p Fz(@group)p FB(')d(and)g(`)p Fz(@end)30 b(group)p FB(')35 b(are)h(simply)g(remo)m(v)m(ed.)59 b(`)p Fz(extract.awk)p FB(')34 b(uses)i(the)150 3858 y Fz(join)29 b FB(library)h(function)g (\(see)i(Section)f(12.2.7)h([Merging)g(an)e(Arra)m(y)h(in)m(to)g(a)g (String],)f(page)i(190\).)275 3996 y(The)39 b(example)h(programs)f(in)h (the)g(online)f(T)-8 b(exinfo)41 b(source)e(for)h Fx(GA)-10 b(WK:)40 b(E\013ectiv)m(e)i(A)-10 b(WK)40 b(Pro-)150 4106 y(gramming)46 b FB(\(`)p Fz(gawk.texi)p FB('\))37 b(ha)m(v)m(e)i(all)f(b)s(een)g(brac)m(k)m(eted)h(inside)f(`)p Fz(file)p FB(')f(and)g(`)p Fz(endfile)p FB(')g(lines.)63 b(The)150 4216 y Fz(gawk)29 b FB(distribution)g(uses)g(a)h(cop)m(y)g (of)g(`)p Fz(extract.awk)p FB(')d(to)k(extract)g(the)f(sample)g (programs)f(and)g(install)150 4325 y(man)m(y)37 b(of)g(them)f(in)g(a)h (standard)f(directory)h(where)g Fz(gawk)e FB(can)i(\014nd)e(them.)60 b(The)36 b(T)-8 b(exinfo)37 b(\014le)f(lo)s(oks)150 4435 y(something)31 b(lik)m(e)h(this:)390 4573 y Fz(...)390 4682 y(This)47 b(program)e(has)i(a)h(@code{BEGIN})c(rule,)390 4792 y(that)j(prints)f(a)h(nice)g(message:)390 5011 y(@example)390 5121 y(@c)g(file)g(examples/messages.awk)390 5230 y(BEGIN)f(@{)i(print) e("Don't)g(panic!")g(@})390 5340 y(@c)h(end)g(file)p eop end %%Page: 241 253 TeXDict begin 241 252 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(241)390 299 y Fz(@end)47 b(example)390 518 y(It)g(also)g(prints)f(some)h(final) f(advice:)390 737 y(@example)390 847 y(@c)h(file)g (examples/messages.awk)390 956 y(END)g(@{)g(print)f("Always)g(avoid)h (bored)f(archeologists!")e(@})390 1066 y(@c)j(end)g(file)390 1176 y(@end)g(example)390 1285 y(...)275 1413 y FB(`)p Fz(extract.awk)p FB(')22 b(b)s(egins)j(b)m(y)g(setting)h Fz(IGNORECASE)c FB(to)k(one,)h(so)e(that)h(mixed)f(upp)s(er-)e(and)i (lo)m(w)m(ercase)150 1523 y(letters)32 b(in)e(the)g(directiv)m(es)i(w)m (on't)f(matter.)275 1650 y(The)h(\014rst)f(rule)i(handles)e(calling)j Fz(system)p FB(,)e(c)m(hec)m(king)i(that)f(a)g(command)g(is)f(giv)m(en) i(\()p Fz(NF)e FB(is)g(at)i(least)150 1760 y(three\))d(and)f(also)h(c)m (hec)m(king)h(that)f(the)g(command)f(exits)h(with)f(a)h(zero)g(exit)g (status,)g(signifying)g(OK:)390 1888 y Fz(#)47 b(extract.awk)e(---)i (extract)f(files)g(and)h(run)g(programs)390 1998 y(#)811 b(from)47 b(texinfo)f(files)390 2217 y(BEGIN)190 b({)47 b(IGNORECASE)e(=)i(1)h(})390 2436 y(/^@c\(omment\)?[)c(\\t]+system/)188 b(\\)390 2545 y({)581 2655 y(if)47 b(\(NF)g(<)g(3\))h({)772 2765 y(e)f(=)h(\(FILENAME)d(":")i(FNR\))772 2874 y(e)g(=)h(\(e)95 b(":)47 b(badly)f(formed)g(`system')g(line"\))772 2984 y(print)g(e)i(>)f("/dev/stderr")772 3093 y(next)581 3203 y(})581 3313 y($1)g(=)h("")581 3422 y($2)f(=)h("")581 3532 y(stat)f(=)g(system\($0\))581 3641 y(if)g(\(stat)f(!=)i(0\))f({) 772 3751 y(e)g(=)h(\(FILENAME)d(":")i(FNR\))772 3861 y(e)g(=)h(\(e)f(":)g(warning:)f(system)g(returned)f(")j(stat\))772 3970 y(print)e(e)i(>)f("/dev/stderr")581 4080 y(})390 4189 y(})150 4317 y FB(The)30 b(v)-5 b(ariable)31 b Fz(e)f FB(is)g(used)g(so)h(that)g(the)f(function)g(\014ts)g(nicely)h(on)g(the) f(page.)275 4445 y(The)25 b(second)i(rule)e(handles)h(mo)m(ving)h(data) g(in)m(to)g(\014les.)39 b(It)27 b(v)m(eri\014es)f(that)h(a)g(\014le)f (name)g(is)h(giv)m(en)g(in)f(the)150 4555 y(directiv)m(e.)52 b(If)33 b(the)h(\014le)g(named)f(is)h(not)g(the)g(curren)m(t)f(\014le,) i(then)e(the)h(curren)m(t)g(\014le)g(is)f(closed.)52 b(Keeping)150 4664 y(the)31 b(curren)m(t)f(\014le)g(op)s(en)g(un)m(til) h(a)g(new)f(\014le)g(is)h(encoun)m(tered)g(allo)m(ws)g(the)g(use)f(of)h (the)f(`)p Fz(>)p FB(')h(redirection)g(for)150 4774 y(prin)m(ting)f (the)h(con)m(ten)m(ts,)h(k)m(eeping)f(op)s(en)f(\014le)h(managemen)m(t) g(simple.)275 4902 y(The)37 b(`)p Fz(for)p FB(')g(lo)s(op)g(do)s(es)h (the)f(w)m(ork.)63 b(It)38 b(reads)f(lines)h(using)f Fz(getline)e FB(\(see)k(Section)f(3.8)h([Explicit)150 5011 y(Input)28 b(with)h Fz(getline)p FB(],)g(page)h(51\).)42 b(F)-8 b(or)30 b(an)f(unexp)s(ected)g(end)g(of)h(\014le,)g(it)g(calls)h (the)f Fz(unexpected_eof)150 5121 y FB(function.)60 b(If)36 b(the)h(line)g(is)g(an)f(\\end\014le")i(line,)h(then)d(it)h(breaks)g (out)g(of)g(the)g(lo)s(op.)60 b(If)36 b(the)h(line)g(is)g(an)150 5230 y(`)p Fz(@group)p FB(')g(or)h(`)p Fz(@end)29 b(group)p FB(')37 b(line,)j(then)e(it)g(ignores)h(it)f(and)f(go)s(es)i(on)f(to)g (the)g(next)g(line.)64 b(Similarly)-8 b(,)150 5340 y(commen)m(ts)31 b(within)f(examples)h(are)g(also)g(ignored.)p eop end %%Page: 242 254 TeXDict begin 242 253 bop 150 -116 a FB(242)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(Most)c(of)g(the)g(w)m(ork)f(is)h(in)f(the)h(follo)m(wing)h (few)f(lines.)39 b(If)25 b(the)h(line)g(has)g(no)f(`)p Fz(@)p FB(')h(sym)m(b)s(ols,)g(the)g(program)150 408 y(can)35 b(prin)m(t)g(it)g(directly)-8 b(.)56 b(Otherwise,)36 b(eac)m(h)g(leading)g(`)p Fz(@)p FB(')f(m)m(ust)f(b)s(e)h(stripp)s(ed)e (o\013.)55 b(T)-8 b(o)35 b(remo)m(v)m(e)i(the)e(`)p Fz(@)p FB(')150 518 y(sym)m(b)s(ols,)j(the)f(line)g(is)g(split)g(in)m(to)h (separate)g(elemen)m(ts)g(of)f(the)g(arra)m(y)g Fz(a)p FB(,)i(using)d(the)h Fz(split)e FB(function)150 628 y(\(see)27 b(Section)f(8.1.3)h([String-Manipulation)g(F)-8 b(unctions],)27 b(page)g(129\).)40 b(The)26 b(`)p Fz(@)p FB(')f(sym)m(b)s(ol)h(is)f (used)g(as)h(the)150 737 y(separator)34 b(c)m(haracter.)50 b(Eac)m(h)34 b(elemen)m(t)h(of)e Fz(a)g FB(that)g(is)h(empt)m(y)f (indicates)h(t)m(w)m(o)h(successiv)m(e)f(`)p Fz(@)p FB(')f(sym)m(b)s (ols)150 847 y(in)d(the)h(original)g(line.)42 b(F)-8 b(or)31 b(eac)m(h)h(t)m(w)m(o)g(empt)m(y)e(elemen)m(ts)i(\(`)p Fz(@@)p FB(')f(in)f(the)h(original)g(\014le\),)h(w)m(e)f(ha)m(v)m(e)g (to)h(add)150 956 y(a)f(single)g(`)p Fz(@)p FB(')f(sym)m(b)s(ol)g(bac)m (k)i(in.)275 1121 y(When)c(the)h(pro)s(cessing)f(of)h(the)g(arra)m(y)g (is)f(\014nished,)g Fz(join)f FB(is)i(called)h(with)e(the)h(v)-5 b(alue)29 b(of)g Fz(SUBSEP)p FB(,)e(to)150 1230 y(rejoin)j(the)h (pieces)g(bac)m(k)g(in)m(to)g(a)g(single)g(line.)41 b(That)31 b(line)f(is)h(then)f(prin)m(ted)g(to)h(the)f(output)g(\014le:)390 1395 y Fz(/^@c\(omment\)?[)44 b(\\t]+file/)188 b(\\)390 1504 y({)581 1614 y(if)47 b(\(NF)g(!=)g(3\))g({)772 1724 y(e)g(=)h(\(FILENAME)d(":")i(FNR)g(":)g(badly)f(formed)g(`file')h (line"\))772 1833 y(print)f(e)i(>)f("/dev/stderr")772 1943 y(next)581 2052 y(})581 2162 y(if)g(\($3)g(!=)g(curfile\))f({)772 2271 y(if)h(\(curfile)f(!=)h(""\))963 2381 y(close\(curfile\))772 2491 y(curfile)f(=)h($3)581 2600 y(})581 2819 y(for)g(\(;;\))f({)772 2929 y(if)h(\(\(getline)e(line\))i(<=)g(0\))963 3039 y(unexpected_eof\(\))772 3148 y(if)g(\(line)f(~)i(/^@c\(omment\)?[)c (\\t]+endfile/\))963 3258 y(break)772 3367 y(else)i(if)i(\(line)e(~)h (/^@\(end[)f(\\t]+\)?group/\))963 3477 y(continue)772 3587 y(else)g(if)i(\(line)e(~)h(/^@c\(omment+\)?[)d(\\t]+/\))963 3696 y(continue)772 3806 y(if)j(\(index\(line,)d("@"\))j(==)g(0\))g({) 963 3915 y(print)f(line)h(>)g(curfile)963 4025 y(continue)772 4134 y(})772 4244 y(n)g(=)h(split\(line,)c(a,)k("@"\))772 4354 y(#)f(if)g(a[1])g(==)g("",)g(means)g(leading)e(@,)772 4463 y(#)i(don't)g(add)g(one)f(back)h(in.)772 4573 y(for)g(\(i)g(=)g (2;)h(i)f(<=)g(n;)g(i++\))g({)963 4682 y(if)g(\(a[i])f(==)h(""\))g({)h (#)f(was)g(an)g(@@)1154 4792 y(a[i])f(=)i("@")1154 4902 y(if)f(\(a[i+1])f(==)h(""\))1345 5011 y(i++)963 5121 y(})772 5230 y(})772 5340 y(print)f(join\(a,)g(1,)h(n,)g(SUBSEP\))f(>)i (curfile)p eop end %%Page: 243 255 TeXDict begin 243 254 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(243)581 299 y Fz(})390 408 y(})275 546 y FB(An)42 b(imp)s(ortan)m(t)i(thing)f (to)h(note)f(is)g(the)h(use)f(of)g(the)g(`)p Fz(>)p FB(')g (redirection.)80 b(Output)42 b(done)h(with)g(`)p Fz(>)p FB(')150 656 y(only)34 b(op)s(ens)f(the)i(\014le)f(once;)j(it)d(sta)m (ys)h(op)s(en)f(and)f(subsequen)m(t)h(output)f(is)h(app)s(ended)f(to)i (the)f(\014le)g(\(see)150 766 y(Section)39 b(4.6)g([Redirecting)h (Output)d(of)h Fz(print)f FB(and)h Fz(printf)p FB(],)h(page)g(65\).)65 b(This)38 b(mak)m(es)h(it)f(easy)h(to)150 875 y(mix)30 b(program)f(text)i(and)e(explanatory)h(prose)g(for)f(the)h(same)g (sample)g(source)g(\014le)g(\(as)g(has)f(b)s(een)g(done)150 985 y(here!\))40 b(without)28 b(an)m(y)h(hassle.)40 b(The)27 b(\014le)h(is)g(only)h(closed)f(when)g(a)g(new)f(data)i(\014le)f(name)g (is)g(encoun)m(tered)150 1094 y(or)i(at)h(the)g(end)f(of)g(the)h(input) e(\014le.)275 1232 y(Finally)-8 b(,)48 b(the)43 b(function)h Fz(unexpected_eof)39 b FB(prin)m(ts)k(an)g(appropriate)h(error)f (message)h(and)f(then)150 1342 y(exits.)f(The)29 b Fz(END)h FB(rule)g(handles)g(the)g(\014nal)g(clean)m(up,)h(closing)h(the)e(op)s (en)g(\014le:)390 1480 y Fz(function)46 b(unexpected_eof\(\))d({)581 1589 y(printf\("\045s:\045d:)h(unexpected)h(EOF)i(or)g(error\\n",)772 1699 y(FILENAME,)e(FNR\))i(>)g("/dev/stderr")581 1809 y(exit)g(1)390 1918 y(})390 2137 y(END)g({)581 2247 y(if)g(\(curfile\)) 772 2356 y(close\(curfile\))390 2466 y(})150 2669 y Fj(13.3.8)63 b(A)41 b(Simple)g(Stream)g(Editor)150 2816 y FB(The)26 b Fz(sed)g FB(utilit)m(y)i(is)e(a)h(stream)g(editor,)h(a)f(program)g (that)g(reads)f(a)h(stream)g(of)g(data,)h(mak)m(es)g(c)m(hanges)f(to) 150 2925 y(it,)j(and)f(passes)g(it)g(on.)40 b(It)30 b(is)f(often)g (used)g(to)h(mak)m(e)g(global)g(c)m(hanges)g(to)g(a)f(large)i(\014le)e (or)g(to)h(a)f(stream)h(of)150 3035 y(data)g(generated)g(b)m(y)e(a)i (pip)s(eline)e(of)h(commands.)40 b(While)30 b Fz(sed)e FB(is)h(a)h(complicated)g(program)f(in)g(its)g(o)m(wn)150 3144 y(righ)m(t,)i(its)g(most)g(common)f(use)g(is)h(to)g(p)s(erform)e (global)j(substitutions)d(in)i(the)f(middle)g(of)h(a)f(pip)s(eline:)390 3282 y Fz(command1)46 b(<)h(orig.data)e(|)j(sed)f('s/old/new/g')d(|)j (command2)f(>)h(result)275 3420 y FB(Here,)26 b(`)p Fz(s/old/new/g)p FB(')c(tells)j Fz(sed)f FB(to)h(lo)s(ok)g(for)g(the)f(regexp)h(`)p Fz(old)p FB(')f(on)g(eac)m(h)i(input)e(line)h(and)e(globally)150 3530 y(replace)38 b(it)g(with)f(the)g(text)h(`)p Fz(new)p FB(',)h(i.e.,)i(all)d(the)f(o)s(ccurrences)g(on)g(a)h(line.)62 b(This)36 b(is)h(similar)h(to)g Fz(awk)p FB('s)150 3639 y Fz(gsub)29 b FB(function)h(\(see)i(Section)f(8.1.3)h ([String-Manipulation)f(F)-8 b(unctions],)32 b(page)f(129\).)275 3777 y(The)21 b(follo)m(wing)j(program,)g(`)p Fz(awksed.awk)p FB(',)e(accepts)i(at)f(least)h(t)m(w)m(o)g(command-line)f(argumen)m (ts:)37 b(the)150 3887 y(pattern)d(to)g(lo)s(ok)g(for)f(and)g(the)h (text)g(to)g(replace)h(it)f(with.)49 b(An)m(y)34 b(additional)g (argumen)m(ts)g(are)g(treated)150 3997 y(as)d(data)g(\014le)f(names)g (to)i(pro)s(cess.)40 b(If)30 b(none)g(are)h(pro)m(vided,)f(the)g (standard)g(input)f(is)i(used:)390 4134 y Fz(#)47 b(awksed.awk)e(---)i (do)h(s/foo/bar/g)c(using)j(just)f(print)390 4244 y(#)191 b(Thanks)46 b(to)h(Michael)f(Brennan)g(for)g(the)h(idea)390 4463 y(function)f(usage\(\))390 4573 y({)581 4682 y(print)g("usage:)g (awksed)g(pat)h(repl)g([files...]")d(>)k("/dev/stderr")581 4792 y(exit)f(1)390 4902 y(})390 5121 y(BEGIN)f({)581 5230 y(#)h(validate)f(arguments)581 5340 y(if)h(\(ARGC)f(<)i(3\))p eop end %%Page: 244 256 TeXDict begin 244 255 bop 150 -116 a FB(244)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)772 299 y Fz(usage\(\))581 518 y(RS)47 b(=)h(ARGV[1])581 628 y(ORS)f(=)g(ARGV[2])581 847 y(#)g(don't)g(use)g(arguments)e(as)i (files)581 956 y(ARGV[1])f(=)h(ARGV[2])f(=)h("")390 1066 y(})390 1285 y(#)g(look)g(ma,)g(no)g(hands!)390 1395 y({)581 1504 y(if)g(\(RT)g(==)g(""\))772 1614 y(printf)f("\045s",)g($0) 581 1724 y(else)772 1833 y(print)390 1943 y(})275 2085 y FB(The)28 b(program)h(relies)h(on)e Fz(gawk)p FB('s)g(abilit)m(y)j (to)f(ha)m(v)m(e)g Fz(RS)e FB(b)s(e)h(a)g(regexp,)h(as)f(w)m(ell)h(as)g (on)e(the)i(setting)g(of)150 2194 y Fz(RT)k FB(to)h(the)f(actual)i (text)f(that)g(terminates)g(the)g(record)f(\(see)h(Section)g(3.1)h([Ho) m(w)f(Input)e(Is)h(Split)g(in)m(to)150 2304 y(Records],)d(page)g(36\).) 275 2446 y(The)26 b(idea)i(is)g(to)g(ha)m(v)m(e)g Fz(RS)f FB(b)s(e)g(the)g(pattern)h(to)g(lo)s(ok)g(for.)39 b Fz(gawk)27 b FB(automatically)j(sets)e Fz($0)e FB(to)i(the)g(text)150 2555 y(b)s(et)m(w)m(een)k(matc)m(hes)h(of)f(the)g(pattern.)45 b(This)31 b(is)h(text)h(that)f(w)m(e)h(w)m(an)m(t)f(to)h(k)m(eep,)g (unmo)s(di\014ed.)43 b(Then,)31 b(b)m(y)150 2665 y(setting)f Fz(ORS)d FB(to)i(the)g(replacemen)m(t)h(text,)g(a)f(simple)f Fz(print)f FB(statemen)m(t)j(outputs)e(the)h(text)g(w)m(e)g(w)m(an)m(t) g(to)150 2775 y(k)m(eep,)i(follo)m(w)m(ed)h(b)m(y)f(the)f(replacemen)m (t)i(text.)275 2917 y(There)g(is)h(one)g(wrinkle)g(to)h(this)e(sc)m (heme,)j(whic)m(h)e(is)g(what)g(to)g(do)g(if)g(the)g(last)h(record)f (do)s(esn't)g(end)150 3026 y(with)24 b(text)i(that)f(matc)m(hes)g Fz(RS)p FB(.)38 b(Using)25 b(a)g Fz(print)e FB(statemen)m(t)j (unconditionally)f(prin)m(ts)f(the)g(replacemen)m(t)150 3136 y(text,)37 b(whic)m(h)d(is)g(not)h(correct.)54 b(Ho)m(w)m(ev)m (er,)38 b(if)c(the)h(\014le)f(did)g(not)g(end)g(in)g(text)i(that)f (matc)m(hes)g Fz(RS)p FB(,)g Fz(RT)f FB(is)150 3245 y(set)i(to)h(the)f (n)m(ull)g(string.)57 b(In)35 b(this)h(case,)i(w)m(e)f(can)f(prin)m(t)f Fz($0)h FB(using)f Fz(printf)f FB(\(see)j(Section)g(4.5)f([Using)150 3355 y Fz(printf)29 b FB(Statemen)m(ts)i(for)g(F)-8 b(ancier)31 b(Prin)m(ting],)g(page)g(60\).)275 3497 y(The)21 b Fz(BEGIN)g FB(rule)i(handles)e(the)i(setup,)h(c)m(hec)m(king)g(for)e(the)h(righ)m (t)g(n)m(um)m(b)s(er)e(of)i(argumen)m(ts)g(and)e(calling)150 3606 y Fz(usage)35 b FB(if)i(there)g(is)f(a)i(problem.)59 b(Then)35 b(it)i(sets)h Fz(RS)e FB(and)g Fz(ORS)f FB(from)i(the)f (command-line)i(argumen)m(ts)150 3716 y(and)28 b(sets)g Fz(ARGV[1])e FB(and)i Fz(ARGV[2])e FB(to)j(the)g(n)m(ull)f(string,)g (so)h(that)g(they)f(are)h(not)f(treated)h(as)g(\014le)f(names)150 3826 y(\(see)j(Section)h(6.5.3)g([Using)e Fz(ARGC)g FB(and)f Fz(ARGV)p FB(],)h(page)h(113\).)275 3968 y(The)i Fz(usage)g FB(function)h(prin)m(ts)g(an)g(error)g(message)h(and)f(exits.)53 b(Finally)-8 b(,)37 b(the)e(single)g(rule)f(handles)150 4077 y(the)26 b(prin)m(ting)g(sc)m(heme)h(outlined)g(ab)s(o)m(v)m(e,)h (using)e Fz(print)f FB(or)h Fz(printf)e FB(as)j(appropriate,)g(dep)s (ending)e(up)s(on)150 4187 y(the)31 b(v)-5 b(alue)30 b(of)h Fz(RT)p FB(.)150 4394 y Fj(13.3.9)63 b(An)41 b(Easy)f(W)-10 b(a)m(y)40 b(to)h(Use)g(Library)g(F)-10 b(unctions)150 4540 y FB(Using)40 b(library)f(functions)g(in)g Fz(awk)f FB(can)i(b)s(e)f(v)m(ery)h(b)s(ene\014cial.)68 b(It)40 b(encourages)g(co)s(de)g(reuse)f(and)g(the)150 4650 y(writing)d(of)f (general)i(functions.)56 b(Programs)35 b(are)h(smaller)g(and)f (therefore)h(clearer.)57 b(Ho)m(w)m(ev)m(er,)39 b(using)150 4760 y(library)29 b(functions)f(is)h(only)g(easy)h(when)e(writing)h Fz(awk)f FB(programs;)h(it)g(is)g(painful)g(when)f(running)f(them,)150 4869 y(requiring)j(m)m(ultiple)i(`)p Fz(-f)p FB(')f(options.)43 b(If)30 b Fz(gawk)g FB(is)h(una)m(v)-5 b(ailable,)33 b(then)d(so)i(to)s(o)f(is)g(the)h Fz(AWKPATH)d FB(en)m(viron-)150 4979 y(men)m(t)f(v)-5 b(ariable)29 b(and)f(the)g(abilit)m(y)h(to)g(put) e Fz(awk)h FB(functions)f(in)m(to)i(a)f(library)g(directory)h(\(see)g (Section)f(11.2)150 5088 y([Command-Line)j(Options],)g(page)h(173\).)44 b(It)31 b(w)m(ould)g(b)s(e)f(nice)i(to)f(b)s(e)g(able)g(to)h(write)f (programs)g(in)g(the)150 5198 y(follo)m(wing)h(manner:)390 5340 y Fz(#)47 b(library)f(functions)p eop end %%Page: 245 257 TeXDict begin 245 256 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(245)390 299 y Fz(@include)46 b(getopt.awk)390 408 y(@include)g(join.awk)390 518 y(...)390 737 y(#)h(main)g(program)390 847 y(BEGIN)f({)581 956 y(while)g(\(\(c)h(=)h(getopt\(ARGC,)c(ARGV,)i("a:b:cde"\)\))f(!=)i (-1\))772 1066 y(...)581 1176 y(...)390 1285 y(})275 1425 y FB(The)31 b(follo)m(wing)h(program,)g(`)p Fz(igawk.sh)p FB(',)f(pro)m(vides)g(this)g(service.)45 b(It)32 b(sim)m(ulates)h Fz(gawk)p FB('s)d(searc)m(hing)150 1535 y(of)38 b(the)g Fz(AWKPATH)e FB(v)-5 b(ariable)39 b(and)f(also)h(allo)m(ws)g Fx(nested)j FB(includes;)f(i.e.,)h(a)c(\014le)g(that)h(is)f(included)f (with)150 1645 y(`)p Fz(@include)p FB(')19 b(can)h(con)m(tain)i (further)d(`)p Fz(@include)p FB(')f(statemen)m(ts.)39 b Fz(igawk)19 b FB(mak)m(es)i(an)g(e\013ort)g(to)g(only)f(include)150 1754 y(\014les)30 b(once,)i(so)e(that)h(nested)g(includes)f(don't)g (acciden)m(tally)j(include)d(a)h(library)f(function)g(t)m(wice.)275 1894 y Fz(igawk)c FB(should)h(b)s(eha)m(v)m(e)h(just)f(lik)m(e)i Fz(gawk)e FB(externally)-8 b(.)41 b(This)27 b(means)h(it)g(should)f (accept)i(all)g(of)f Fz(gawk)p FB('s)150 2004 y(command-line)39 b(argumen)m(ts,)i(including)d(the)g(abilit)m(y)i(to)f(ha)m(v)m(e)h(m)m (ultiple)f(source)f(\014les)h(sp)s(eci\014ed)e(via)150 2114 y(`)p Fz(-f)p FB(',)31 b(and)e(the)i(abilit)m(y)h(to)f(mix)f (command-line)h(and)f(library)g(source)g(\014les.)275 2254 y(The)35 b(program)h(is)g(written)g(using)f(the)h(POSIX)f(Shell)h (\()p Fz(sh)p FB(\))g(command)g(language.)3205 2221 y Fo(6)3301 2254 y FB(It)g(w)m(orks)g(as)150 2364 y(follo)m(ws:)199 2504 y(1.)61 b(Lo)s(op)32 b(through)h(the)f(argumen)m(ts,)i(sa)m(ving)g (an)m(ything)f(that)h(do)s(esn't)e(represen)m(t)h Fz(awk)f FB(source)h(co)s(de)330 2613 y(for)d(later,)i(when)d(the)i(expanded)e (program)h(is)h(run.)199 2751 y(2.)61 b(F)-8 b(or)31 b(an)m(y)f(argumen)m(ts)g(that)h(do)f(represen)m(t)g Fz(awk)f FB(text,)i(put)e(the)h(argumen)m(ts)h(in)m(to)g(a)f(shell)g(v) -5 b(ariable)330 2860 y(that)31 b(will)g(b)s(e)e(expanded.)40 b(There)30 b(are)h(t)m(w)m(o)h(cases:)379 2998 y(a.)61 b(Literal)30 b(text,)g(pro)m(vided)e(with)g(`)p Fz(--source)p FB(')f(or)h(`)p Fz(--source=)p FB('.)38 b(This)28 b(text)h(is)g(just)f (app)s(ended)510 3107 y(directly)-8 b(.)374 3245 y(b.)60 b(Source)30 b(\014le)g(names,)g(pro)m(vided)g(with)g(`)p Fz(-f)p FB('.)40 b(W)-8 b(e)31 b(use)f(a)g(neat)h(tric)m(k)g(and)f(app) s(end)e(`)p Fz(@include)510 3354 y Fk(filename)11 b FB(')29 b(to)i(the)h(shell)f(v)-5 b(ariable's)32 b(con)m(ten)m(ts.)44 b(Since)31 b(the)h(\014le-inclusion)f(program)g(w)m(orks)510 3464 y(the)h(w)m(a)m(y)h Fz(gawk)e FB(do)s(es,)h(this)g(gets)g(the)g (text)h(of)f(the)g(\014le)g(included)g(in)m(to)g(the)g(program)g(at)h (the)510 3573 y(correct)f(p)s(oin)m(t.)199 3711 y(3.)61 b(Run)22 b(an)i Fz(awk)e FB(program)h(\(naturally\))i(o)m(v)m(er)f(the) g(shell)f(v)-5 b(ariable's)25 b(con)m(ten)m(ts)g(to)f(expand)f(`)p Fz(@include)p FB(')330 3820 y(statemen)m(ts.)42 b(The)30 b(expanded)g(program)g(is)g(placed)h(in)f(a)h(second)g(shell)f(v)-5 b(ariable.)199 3958 y(4.)61 b(Run)25 b(the)h(expanded)g(program)g(with) f Fz(gawk)g FB(and)h(an)m(y)g(other)h(original)g(command-line)g (argumen)m(ts)330 4067 y(that)k(the)g(user)e(supplied)g(\(suc)m(h)i(as) f(the)h(data)g(\014le)f(names\).)275 4236 y(This)g(program)h(uses)g (shell)h(v)-5 b(ariables)32 b(extensiv)m(ely;)i(for)e(storing)f (command)h(line)f(argumen)m(ts,)i(the)150 4345 y(text)24 b(of)f(the)h Fz(awk)e FB(program)h(that)g(will)h(expand)e(the)h(user's) g(program,)h(for)f(the)g(user's)g(original)h(program,)150 4455 y(and)i(for)h(the)g(expanded)f(program.)39 b(Doing)28 b(so)f(remo)m(v)m(es)h(some)f(p)s(oten)m(tial)h(problems)f(that)g(migh) m(t)g(arise)150 4564 y(w)m(ere)38 b(w)m(e)g(to)h(use)e(temp)s(orary)g (\014les)h(instead,)i(at)e(the)g(cost)h(of)e(making)h(the)g(script)g (somewhat)g(more)150 4674 y(complicated.)275 4814 y(The)29 b(initial)j(part)e(of)h(the)f(program)g(turns)g(on)g(shell)g(tracing)i (if)e(the)h(\014rst)e(argumen)m(t)i(is)g(`)p Fz(debug)p FB('.)275 4954 y(The)i(next)h(part)g(lo)s(ops)g(through)f(all)i(the)f (command-line)g(argumen)m(ts.)52 b(There)33 b(are)i(sev)m(eral)g(cases) 150 5064 y(of)c(in)m(terest:)p 150 5154 1200 4 v 199 5221 a Fo(6)275 5253 y Fn(F)-6 b(ully)17 b(explaining)h(the)f Fm(sh)h Fn(language)h(is)f(b)r(ey)n(ond)e(the)h(scop)r(e)i(of)f(this)g (b)r(o)r(ok.)32 b(W)-6 b(e)17 b(pro)n(vide)g(some)h(minimal)h (explanations,)275 5340 y(but)24 b(see)j(a)f(go)r(o)r(d)g(shell)h (programming)g(b)r(o)r(ok)e(if)i(y)n(ou)e(wish)h(to)g(understand)f (things)h(in)f(more)h(depth.)p eop end %%Page: 246 258 TeXDict begin 246 257 bop 150 -116 a FB(246)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz(--)384 b FB(This)33 b(ends)g(the)h(argumen)m(ts)g(to)h Fz(igawk)p FB(.)49 b(An)m(ything)34 b(else)h(should)e(b)s(e)g(passed)g (on)h(to)h(the)630 408 y(user's)30 b Fz(awk)f FB(program)h(without)h(b) s(eing)f(ev)-5 b(aluated.)150 565 y Fz(-W)384 b FB(This)42 b(indicates)h(that)g(the)g(next)f(option)h(is)g(sp)s(eci\014c)f(to)h Fz(gawk)p FB(.)76 b(T)-8 b(o)43 b(mak)m(e)g(argumen)m(t)630 675 y(pro)s(cessing)28 b(easier,)j(the)e(`)p Fz(-W)p FB(')f(is)h(app)s(ended)e(to)i(the)g(fron)m(t)g(of)g(the)g(remaining)g (argumen)m(ts)630 784 y(and)i(the)g(lo)s(op)g(con)m(tin)m(ues.)45 b(\(This)30 b(is)h(an)h Fz(sh)e FB(programming)h(tric)m(k.)44 b(Don't)32 b(w)m(orry)f(ab)s(out)630 894 y(it)g(if)f(y)m(ou)h(are)g (not)f(familiar)h(with)g Fz(sh)p FB(.\))150 1050 y Fz(-v)p FB(,)f Fz(-F)233 b FB(These)30 b(are)h(sa)m(v)m(ed)g(and)f(passed)g(on) g(to)h Fz(gawk)p FB(.)150 1207 y Fz(-f)p FB(,)f Fz(--file)p FB(,)f Fz(--file=)p FB(,)g Fz(-Wfile=)630 1316 y FB(The)38 b(\014le)g(name)g(is)h(app)s(ended)d(to)j(the)g(shell)f(v)-5 b(ariable)39 b Fz(program)e FB(with)h(an)g(`)p Fz(@include)p FB(')630 1426 y(statemen)m(t.)59 b(The)35 b Fz(expr)g FB(utilit)m(y)i(is)f(used)f(to)h(remo)m(v)m(e)h(the)f(leading)h(option) f(part)g(of)g(the)630 1536 y(argumen)m(t)23 b(\(e.g.,)j(`)p Fz(--file=)p FB('\).)38 b(\(T)m(ypical)24 b Fz(sh)e FB(usage)h(w)m (ould)g(b)s(e)f(to)h(use)g(the)g Fz(echo)f FB(and)g Fz(sed)630 1645 y FB(utilities)32 b(to)f(do)g(this)g(w)m(ork.)41 b(Unfortunately)-8 b(,)32 b(some)f(v)m(ersions)g(of)g Fz(echo)e FB(ev)-5 b(aluate)32 b(escap)s(e)630 1755 y(sequences)d(in)e (their)i(argumen)m(ts,)g(p)s(ossibly)e(mangling)i(the)g(program)f (text.)41 b(Using)28 b Fz(expr)630 1864 y FB(a)m(v)m(oids)k(this)e (problem.\))150 2021 y Fz(--source)p FB(,)e Fz(--source=)p FB(,)g Fz(-Wsource=)630 2131 y FB(The)i(source)g(text)i(is)e(app)s (ended)f(to)i Fz(program)p FB(.)150 2287 y Fz(--version)p FB(,)d Fz(-Wversion)630 2397 y(igawk)c FB(prin)m(ts)h(its)g(v)m(ersion) h(n)m(um)m(b)s(er,)f(runs)f(`)p Fz(gawk)29 b(--version)p FB(')23 b(to)j(get)h(the)e Fz(gawk)f FB(v)m(ersion)630 2506 y(information,)31 b(and)f(then)g(exits.)275 2663 y(If)21 b(none)i(of)f(the)h(`)p Fz(-f)p FB(',)h(`)p Fz(--file)p FB(',)f(`)p Fz(-Wfile)p FB(',)g(`)p Fz(--source)p FB(',)f(or)h(`)p Fz(-Wsource)p FB(')d(argumen)m(ts)j(are)g(supplied,)150 2772 y(then)34 b(the)g(\014rst)f(nonoption)g(argumen)m(t)i(should)d(b)s (e)i(the)g Fz(awk)f FB(program.)51 b(If)33 b(there)h(are)g(no)g (command-)150 2882 y(line)28 b(argumen)m(ts)g(left,)i Fz(igawk)c FB(prin)m(ts)h(an)h(error)f(message)i(and)f(exits.)40 b(Otherwise,)28 b(the)g(\014rst)f(argumen)m(t)150 2992 y(is)35 b(app)s(ended)f(to)i Fz(program)p FB(.)54 b(In)35 b(an)m(y)g(case,)j(after)e(the)g(argumen)m(ts)f(ha)m(v)m(e)i(b)s(een)e (pro)s(cessed,)h Fz(program)150 3101 y FB(con)m(tains)c(the)e(complete) i(text)f(of)g(the)f(original)i Fz(awk)d FB(program.)275 3234 y(The)g(program)i(is)f(as)h(follo)m(ws:)390 3367 y Fz(#!)47 b(/bin/sh)390 3477 y(#)g(igawk)g(---)g(like)f(gawk)h(but)g (do)g(@include)f(processing)390 3696 y(if)h([)h("$1")e(=)i(debug)e(]) 390 3806 y(then)581 3915 y(set)h(-x)581 4025 y(shift)390 4134 y(fi)390 4354 y(#)g(A)h(literal)e(newline,)f(so)i(that)g(program)f (text)h(is)g(formmatted)e(correctly)390 4463 y(n=')390 4573 y(')390 4792 y(#)i(Initialize)e(variables)h(to)h(empty)390 4902 y(program=)390 5011 y(opts=)390 5230 y(while)f([)i($#)f(-ne)g(0)g (])h(#)f(loop)g(over)g(arguments)390 5340 y(do)p eop end %%Page: 247 259 TeXDict begin 247 258 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(247)581 299 y Fz(case)47 b($1)g(in)581 408 y(--\))238 b(shift;)46 b(break;;)581 628 y(-W\))238 b(shift)963 737 y(#)47 b(The)g (${x?'message)e(here'})h(construct)f(prints)h(a)963 847 y(#)h(diagnostic)e(if)i($x)h(is)f(the)g(null)f(string)963 956 y(set)h(--)g(-W"${@?'missing)c(operand'}")963 1066 y(continue;;)581 1285 y(-[vF]\))94 b(opts="$opts)44 b($1)k ('${2?'missing)c(operand'}'")963 1395 y(shift;;)581 1614 y(-[vF]*\))i(opts="$opts)e('$1'")j(;;)581 1833 y(-f\))238 b(program="$program$n@inc)o(lude)41 b(${2?'missing)k(operand'}")963 1943 y(shift;;)581 2162 y(-f*\))190 b(f=`expr)46 b("$1")g(:)i ('-f\\\(.*\\\)'`)963 2271 y(program="$program$n@inc)o(lude)41 b($f";;)581 2491 y(-[W-]file=*\))963 2600 y(f=`expr)46 b("$1")g(:)i('-.file=\\\(.*\\\)'`)963 2710 y(program="$program$n@inc)o (lude)41 b($f";;)581 2929 y(-[W-]file\))963 3039 y (program="$program$n@inc)o(lude)g(${2?'missing)k(operand'}")963 3148 y(shift;;)581 3367 y(-[W-]source=*\))963 3477 y(t=`expr)h("$1")g (:)i('-.source=\\\(.*\\\)'`)963 3587 y(program="$program$n$t";)o(;)581 3806 y(-[W-]source\))963 3915 y(program="$program$n${2?)o('mis)o(sing) 41 b(operand'}")963 4025 y(shift;;)581 4244 y(-[W-]version\))963 4354 y(echo)46 b(igawk:)g(version)g(2.0)h(1>&2)963 4463 y(gawk)f(--version)963 4573 y(exit)g(0)i(;;)581 4792 y(-[W-]*\))e(opts="$opts)e('$1'")j(;;)581 5011 y(*\))286 b(break;;)581 5121 y(esac)581 5230 y(shift)390 5340 y(done)p eop end %%Page: 248 260 TeXDict begin 248 259 bop 150 -116 a FB(248)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 408 y Fz(if)47 b([)h(-z)f("$program")e(])390 518 y(then)629 628 y(program=${1?'missing)d(program'})629 737 y(shift)390 847 y(fi)390 1066 y(#)47 b(At)h(this)e(point,)g(`program')g(has)h(the)f (program.)275 1210 y FB(The)25 b Fz(awk)g FB(program)h(to)h(pro)s(cess) f(`)p Fz(@include)p FB(')e(directiv)m(es)k(is)e(stored)g(in)g(the)h (shell)f(v)-5 b(ariable)27 b Fz(expand_)150 1320 y(prog)p FB(.)38 b(Doing)28 b(this)f(k)m(eeps)g(the)g(shell)g(script)f (readable.)41 b(The)26 b Fz(awk)g FB(program)g(reads)h(through)f(the)h (user's)150 1429 y(program,)j(one)g(line)h(at)f(a)h(time,)g(using)e Fz(getline)f FB(\(see)j(Section)g(3.8)g([Explicit)g(Input)e(with)g Fz(getline)p FB(],)150 1539 y(page)j(51\).)46 b(The)31 b(input)g(\014le)h(names)f(and)g(`)p Fz(@include)p FB(')f(statemen)m (ts)k(are)e(managed)g(using)f(a)h(stac)m(k.)46 b(As)150 1648 y(eac)m(h)26 b(`)p Fz(@include)p FB(')c(is)j(encoun)m(tered,)h (the)f(curren)m(t)f(\014le)h(name)f(is)h(\\pushed")e(on)m(to)j(the)e (stac)m(k)i(and)e(the)h(\014le)150 1758 y(named)33 b(in)g(the)h(`)p Fz(@include)p FB(')d(directiv)m(e)k(b)s(ecomes)f(the)g(curren)m(t)f (\014le)g(name.)50 b(As)34 b(eac)m(h)g(\014le)g(is)f(\014nished,)150 1867 y(the)26 b(stac)m(k)i(is)e(\\p)s(opp)s(ed,")g(and)f(the)h (previous)g(input)f(\014le)h(b)s(ecomes)g(the)g(curren)m(t)g(input)f (\014le)h(again.)40 b(The)150 1977 y(pro)s(cess)30 b(is)g(started)h(b)m (y)f(making)h(the)g(original)g(\014le)g(the)f(\014rst)g(one)h(on)f(the) g(stac)m(k.)275 2121 y(The)e Fz(pathto)g FB(function)g(do)s(es)h(the)g (w)m(ork)h(of)f(\014nding)f(the)h(full)g(path)g(to)h(a)f(\014le.)41 b(It)29 b(sim)m(ulates)h Fz(gawk)p FB('s)150 2231 y(b)s(eha)m(vior)e (when)e(searc)m(hing)j(the)f Fz(AWKPATH)d FB(en)m(vironmen)m(t)k(v)-5 b(ariable)28 b(\(see)h(Section)f(11.4)i([The)d Fz(AWKPATH)150 2340 y FB(En)m(vironmen)m(t)37 b(V)-8 b(ariable],)41 b(page)d(179\).)63 b(If)37 b(a)h(\014le)f(name)h(has)f(a)g(`)p Fz(/)p FB(')h(in)f(it,)i(no)f(path)f(searc)m(h)h(is)f(done.)150 2450 y(Otherwise,)31 b(the)g(\014le)g(name)g(is)h(concatenated)h(with)d (the)i(name)f(of)g(eac)m(h)h(directory)f(in)g(the)g(path,)h(and)150 2559 y(an)g(attempt)i(is)e(made)g(to)h(op)s(en)f(the)h(generated)g (\014le)f(name.)47 b(The)32 b(only)g(w)m(a)m(y)h(to)g(test)h(if)e(a)h (\014le)f(can)h(b)s(e)150 2669 y(read)g(in)f Fz(awk)g FB(is)h(to)h(go)g(ahead)f(and)f(try)h(to)g(read)g(it)h(with)e Fz(getline)p FB(;)h(this)f(is)h(what)g Fz(pathto)e FB(do)s(es.)3604 2636 y Fo(7)3689 2669 y FB(If)150 2779 y(the)g(\014le)f(can)h(b)s(e)e (read,)i(it)g(is)f(closed)h(and)f(the)h(\014le)f(name)h(is)f(returned:) 390 2922 y Fz(expand_prog=')390 3142 y(function)46 b(pathto\(file,)187 b(i,)47 b(t,)h(junk\))390 3251 y({)581 3361 y(if)f(\(index\(file,)e ("/"\))h(!=)h(0\))772 3470 y(return)f(file)581 3690 y(for)h(\(i)g(=)g (1;)h(i)f(<=)g(ndirs;)f(i++\))h({)772 3799 y(t)g(=)h(\(pathlist[i])c ("/")j(file\))772 3909 y(if)g(\(\(getline)e(junk)i(<)g(t\))h(>)f(0\))g ({)963 4018 y(#)g(found)g(it)963 4128 y(close\(t\))963 4238 y(return)f(t)772 4347 y(})581 4457 y(})581 4566 y(return)g("")390 4676 y(})275 4820 y FB(The)32 b(main)g(program)h(is)f (con)m(tained)i(inside)f(one)f Fz(BEGIN)g FB(rule.)47 b(The)32 b(\014rst)g(thing)h(it)g(do)s(es)f(is)h(set)g(up)150 4929 y(the)39 b Fz(pathlist)d FB(arra)m(y)j(that)g Fz(pathto)e FB(uses.)65 b(After)39 b(splitting)g(the)g(path)g(on)f(`)p Fz(:)p FB(',)j(n)m(ull)e(elemen)m(ts)h(are)150 5039 y(replaced)31 b(with)f Fz(".")p FB(,)g(whic)m(h)g(represen)m(ts)g(the)h(curren)m(t)f (directory:)p 150 5154 1200 4 v 199 5221 a Fo(7)275 5253 y Fn(On)f(some)i(v)n(ery)e(old)i(v)n(ersions)g(of)g Fm(awk)p Fn(,)h(the)e(test)g(`)p Fm(getline)e(junk)e(<)g(t)p Fn(')31 b(can)f(lo)r(op)h(forev)n(er)g(if)g(the)f(\014le)g(exists)h(but)e(is) 275 5340 y(empt)n(y)-6 b(.)33 b(Ca)n(v)n(eat)26 b(emptor.)p eop end %%Page: 249 261 TeXDict begin 249 260 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(249)390 299 y Fz(BEGIN)46 b({)581 408 y(path)h(=)g(ENVIRON["AWKPATH"])581 518 y(ndirs)f(=)i(split\(path,)c(pathlist,)i(":"\))581 628 y(for)h(\(i)g(=)g(1;)h(i)f(<=)g(ndirs;)f(i++\))h({)772 737 y(if)g(\(pathlist[i])d(==)k(""\))963 847 y(pathlist[i])c(=)k(".") 581 956 y(})275 1093 y FB(The)25 b(stac)m(k)j(is)e(initialized)i(with)d Fz(ARGV[1])p FB(,)h(whic)m(h)f(will)i(b)s(e)e(`)p Fz(/dev/stdin)p FB('.)37 b(The)26 b(main)g(lo)s(op)g(comes)150 1203 y(next.)39 b(Input)24 b(lines)h(are)h(read)e(in)h(succession.)40 b(Lines)24 b(that)i(do)f(not)g(start)h(with)f(`)p Fz(@include)p FB(')e(are)i(prin)m(ted)150 1313 y(v)m(erbatim.)41 b(If)30 b(the)g(line)g(do)s(es)g(start)g(with)g(`)p Fz(@include)p FB(',)e(the)i(\014le)g(name)g(is)g(in)g Fz($2)p FB(.)40 b Fz(pathto)28 b FB(is)i(called)h(to)150 1422 y(generate)h(the)e(full)h (path.)40 b(If)30 b(it)h(cannot,)g(then)f(w)m(e)h(prin)m(t)f(an)g (error)g(message)i(and)d(con)m(tin)m(ue.)275 1559 y(The)c(next)g(thing) h(to)h(c)m(hec)m(k)g(is)e(if)h(the)g(\014le)g(is)f(included)g(already) -8 b(.)40 b(The)25 b Fz(processed)f FB(arra)m(y)i(is)f(indexed)150 1669 y(b)m(y)30 b(the)h(full)f(\014le)g(name)g(of)h(eac)m(h)g(included) f(\014le)g(and)g(it)h(trac)m(ks)g(this)f(information)h(for)f(us.)40 b(If)30 b(the)g(\014le)h(is)150 1778 y(seen)g(again,)g(a)g(w)m(arning)g (message)g(is)g(prin)m(ted.)40 b(Otherwise,)31 b(the)g(new)f(\014le)g (name)h(is)f(pushed)f(on)m(to)j(the)150 1888 y(stac)m(k)g(and)e(pro)s (cessing)g(con)m(tin)m(ues.)275 2025 y(Finally)-8 b(,)42 b(when)37 b Fz(getline)g FB(encoun)m(ters)i(the)f(end)g(of)h(the)f (input)g(\014le,)j(the)d(\014le)h(is)g(closed)g(and)f(the)150 2134 y(stac)m(k)32 b(is)e(p)s(opp)s(ed.)39 b(When)30 b Fz(stackptr)e FB(is)j(less)f(than)g(zero,)i(the)e(program)g(is)h (done:)581 2271 y Fz(stackptr)45 b(=)j(0)581 2381 y(input[stackptr])c (=)j(ARGV[1])f(#)h(ARGV[1])f(is)h(first)g(file)581 2600 y(for)g(\(;)g(stackptr)f(>=)h(0;)g(stackptr--\))e({)772 2710 y(while)h(\(\(getline)f(<)j(input[stackptr]\))43 b(>)48 b(0\))f({)963 2819 y(if)g(\(tolower\($1\))d(!=)k("@include"\))c ({)1154 2929 y(print)1154 3039 y(continue)963 3148 y(})963 3258 y(fpath)i(=)i(pathto\($2\))963 3367 y(if)f(\(fpath)f(==)h(""\))g ({)1154 3477 y(printf\("igawk:\045s:\045d:)42 b(cannot)k(find)h (\045s\\n",)1345 3587 y(input[stackptr],)c(FNR,)k($2\))f(>)i ("/dev/stderr")1154 3696 y(continue)963 3806 y(})963 3915 y(if)f(\(!)g(\(fpath)f(in)h(processed\)\))e({)1154 4025 y(processed[fpath])e(=)k(input[stackptr])1154 4134 y(input[++stackptr])c(=)k(fpath)94 b(#)48 b(push)e(onto)h(stack)963 4244 y(})g(else)1154 4354 y(print)f($2,)h("included)e(in",)i (input[stackptr],)1345 4463 y("already)e(included)h(in",)1345 4573 y(processed[fpath])d(>)k("/dev/stderr")772 4682 y(})772 4792 y(close\(input[stackptr]\))581 4902 y(})390 5011 y(}')95 b(#)47 b(close)g(quote)f(ends)h(`expand_prog')d(variable) 390 5230 y(processed_program=`gawk)d(--)48 b("$expand_prog")c (/dev/stdin)h(<<EOF)390 5340 y($program)p eop end %%Page: 250 262 TeXDict begin 250 261 bop 150 -116 a FB(250)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz(EOF)390 408 y(`)275 541 y FB(The)h(shell)i(construct)g(`)p Fk(command)39 b Fz(<<)30 b Fk(marker)11 b FB(')30 b(is)i(called)i(a)f Fx(here)f(do)s(cumen)m(t)p FB(.)46 b(Ev)m(erything)33 b(in)f(the)150 651 y(shell)e(script)g(up)f(to)i(the)f Fx(mark)m(er)36 b FB(is)30 b(fed)g(to)h Fx(command)i FB(as)d(input.)40 b(The)29 b(shell)h(pro)s(cesses)g(the)g(con)m(ten)m (ts)150 760 y(of)g(the)g(here)g(do)s(cumen)m(t)f(for)h(v)-5 b(ariable)30 b(and)g(command)f(substitution)h(\(and)f(p)s(ossibly)g (other)h(things)g(as)150 870 y(w)m(ell,)i(dep)s(ending)c(up)s(on)h(the) i(shell\).)275 1003 y(The)23 b(shell)h(construct)h(`)p Fz(`...)o(`)p FB(')f(is)g(called)h Fx(command)f(substitution)p FB(.)38 b(The)24 b(output)g(of)g(the)g(command)150 1112 y(b)s(et)m(w)m(een)f(the)f(t)m(w)m(o)i(bac)m(kquotes)f(\(gra)m(v)m(e)i (accen)m(ts\))f(is)f(substituted)e(in)m(to)i(the)g(command)f(line.)38 b(It)23 b(is)f(sa)m(v)m(ed)150 1222 y(as)31 b(a)f(single)h(string,)g (ev)m(en)g(if)f(the)h(results)f(con)m(tain)i(whitespace.)275 1354 y(The)e(expanded)h(program)g(is)h(sa)m(v)m(ed)g(in)f(the)h(v)-5 b(ariable)32 b Fz(processed_program)p FB(.)39 b(It's)32 b(done)f(in)g(these)150 1464 y(steps:)199 1597 y(1.)61 b(Run)25 b Fz(gawk)g FB(with)h(the)g(`)p Fz(@include)p FB('-pro)s(cessing)e(program)i(\(the)h(v)-5 b(alue)26 b(of)g(the)h Fz(expand_prog)c FB(shell)330 1706 y(v)-5 b(ariable\))32 b(on)e(standard)f(input.)199 1839 y(2.)61 b(Standard)29 b(input)g(is)h(the)g(con)m(ten)m(ts)h(of)f(the)g(user's)g (program,)f(from)h(the)g(shell)g(v)-5 b(ariable)31 b Fz(program)p FB(.)330 1948 y(Its)f(con)m(ten)m(ts)i(are)f(fed)f(to)h Fz(gawk)f FB(via)h(a)f(here)g(do)s(cumen)m(t.)199 2081 y(3.)61 b(The)36 b(results)h(of)g(this)g(pro)s(cessing)g(are)g(sa)m(v)m (ed)h(in)f(the)g(shell)g(v)-5 b(ariable)38 b Fz(processed_program)32 b FB(b)m(y)330 2191 y(using)e(command)g(substitution.)275 2346 y(The)c(last)i(step)f(is)g(to)h(call)g Fz(gawk)e FB(with)h(the)g(expanded)g(program,)g(along)h(with)f(the)g(original)i (options)150 2456 y(and)h(command-line)h(argumen)m(ts)f(that)h(the)g (user)f(supplied.)390 2589 y Fz(eval)47 b(gawk)f($opts)h(--)g ('"$processed_program"')42 b('"$@"')275 2721 y FB(The)c Fz(eval)g FB(command)h(is)g(a)g(shell)g(construct)h(that)f(reruns)f (the)h(shell's)g(parsing)g(pro)s(cess.)66 b(This)150 2831 y(k)m(eeps)31 b(things)f(prop)s(erly)f(quoted.)275 2964 y(This)d(v)m(ersion)h(of)h Fz(igawk)d FB(represen)m(ts)i(m)m(y)h (fourth)e(attempt)i(at)g(this)f(program.)40 b(There)26 b(are)i(four)e(k)m(ey)150 3073 y(simpli\014cations)31 b(that)g(mak)m(e)g(the)g(program)f(w)m(ork)g(b)s(etter:)225 3206 y Fy(\017)60 b FB(Using)27 b(`)p Fz(@include)p FB(')e(ev)m(en)i (for)f(the)h(\014les)g(named)f(with)g(`)p Fz(-f)p FB(')h(mak)m(es)g (building)f(the)h(initial)h(collected)330 3315 y Fz(awk)h FB(program)i(m)m(uc)m(h)f(simpler;)g(all)i(the)e(`)p Fz(@include)p FB(')f(pro)s(cessing)h(can)g(b)s(e)g(done)g(once.)225 3448 y Fy(\017)60 b FB(Not)30 b(trying)f(to)h(sa)m(v)m(e)h(the)e(line)h (read)f(with)g Fz(getline)e FB(in)i(the)g Fz(pathto)f FB(function)h(when)f(testing)i(for)330 3558 y(the)h(\014le's)f (accessibilit)m(y)j(for)d(use)g(with)g(the)h(main)f(program)g (simpli\014es)g(things)h(considerably)-8 b(.)225 3690 y Fy(\017)60 b FB(Using)31 b(a)h Fz(getline)d FB(lo)s(op)i(in)g(the)g Fz(BEGIN)e FB(rule)i(do)s(es)g(it)h(all)f(in)g(one)h(place.)43 b(It)31 b(is)g(not)h(necessary)f(to)330 3800 y(call)h(out)e(to)h(a)g (separate)g(lo)s(op)g(for)f(pro)s(cessing)g(nested)h(`)p Fz(@include)p FB(')d(statemen)m(ts.)225 3933 y Fy(\017)60 b FB(Instead)22 b(of)g(sa)m(ving)h(the)f(expanded)g(program)f(in)h(a)h (temp)s(orary)e(\014le,)j(putting)e(it)h(in)e(a)i(shell)f(v)-5 b(ariable)330 4042 y(a)m(v)m(oids)22 b(some)f(p)s(oten)m(tial)i (securit)m(y)e(problems.)37 b(This)20 b(has)h(the)g(disadv)-5 b(an)m(tage)22 b(that)f(the)g(script)g(relies)330 4152 y(up)s(on)26 b(more)h(features)h(of)g(the)f Fz(sh)g FB(language,)j (making)d(it)h(harder)f(to)h(follo)m(w)g(for)g(those)f(who)g(aren't)330 4261 y(familiar)k(with)f Fz(sh)p FB(.)275 4417 y(Also,)40 b(this)e(program)f(illustrates)i(that)f(it)g(is)g(often)g(w)m(orth)m (while)g(to)h(com)m(bine)f Fz(sh)f FB(and)g Fz(awk)g FB(pro-)150 4527 y(gramming)g(together.)61 b(Y)-8 b(ou)38 b(can)f(usually)f(accomplish)i(quite)f(a)g(lot,)j(without)c(ha)m(ving)i (to)f(resort)g(to)150 4636 y(lo)m(w-lev)m(el)32 b(programming)d(in)g(C) g(or)g(C)p Fz(++)p FB(,)g(and)g(it)h(is)f(frequen)m(tly)h(easier)g(to)g (do)f(certain)h(kinds)f(of)g(string)150 4746 y(and)h(argumen)m(t)h (manipulation)f(using)g(the)h(shell)f(than)g(it)h(is)g(in)f Fz(awk)p FB(.)275 4879 y(Finally)-8 b(,)33 b Fz(igawk)e FB(sho)m(ws)g(that)i(it)f(is)g(not)g(alw)m(a)m(ys)h(necessary)f(to)h (add)e(new)g(features)h(to)h(a)f(program;)150 4988 y(they)g(can)g (often)g(b)s(e)f(la)m(y)m(ered)j(on)d(top.)45 b(With)33 b Fz(igawk)p FB(,)e(there)h(is)f(no)h(real)g(reason)g(to)h(build)e(`)p Fz(@include)p FB(')150 5098 y(pro)s(cessing)f(in)m(to)h Fz(gawk)f FB(itself.)275 5230 y(As)h(an)h(additional)h(example)g(of)f (this,)g(consider)g(the)g(idea)h(of)f(ha)m(ving)h(t)m(w)m(o)g(\014les)f (in)f(a)i(directory)f(in)150 5340 y(the)f(searc)m(h)g(path:)p eop end %%Page: 251 263 TeXDict begin 251 262 bop 2062 -116 a Fr(Chapter)30 b(13:)41 b(Practical)33 b Fz(awk)c Fr(Programs)92 b FB(251)150 299 y(`)p Fz(default.awk)p FB(')630 408 y(This)25 b(\014le)i(con)m (tains)g(a)g(set)g(of)f(default)h(library)f(functions,)h(suc)m(h)f(as)g Fz(getopt)f FB(and)g Fz(assert)p FB(.)150 568 y(`)p Fz(site.awk)p FB(')630 677 y(This)40 b(\014le)g(con)m(tains)i(library)e(functions)g (that)h(are)g(sp)s(eci\014c)f(to)h(a)g(site)g(or)g(installation;)630 787 y(i.e.,)28 b(lo)s(cally)g(dev)m(elop)s(ed)f(functions.)39 b(Ha)m(ving)27 b(a)g(separate)g(\014le)f(allo)m(ws)i(`)p Fz(default.awk)p FB(')23 b(to)630 897 y(c)m(hange)33 b(with)e(new)g Fz(gawk)g FB(releases,)i(without)f(requiring)f(the)h (system)g(administrator)g(to)630 1006 y(up)s(date)e(it)g(eac)m(h)i (time)f(b)m(y)f(adding)g(the)h(lo)s(cal)h(functions.)275 1166 y(One)23 b(user)h(suggested)h(that)g Fz(gawk)e FB(b)s(e)h(mo)s (di\014ed)f(to)j(automatically)h(read)d(these)h(\014les)f(up)s(on)f (startup.)150 1275 y(Instead,)j(it)f(w)m(ould)f(b)s(e)g(v)m(ery)h (simple)g(to)g(mo)s(dify)f Fz(igawk)f FB(to)i(do)g(this.)38 b(Since)25 b Fz(igawk)e FB(can)i(pro)s(cess)f(nested)150 1385 y(`)p Fz(@include)p FB(')35 b(directiv)m(es,)41 b(`)p Fz(default.awk)p FB(')34 b(could)j(simply)g(con)m(tain)h(`)p Fz(@include)p FB(')d(statemen)m(ts)k(for)e(the)150 1494 y(desired)30 b(library)g(functions.)p eop end %%Page: 252 264 TeXDict begin 252 263 bop 150 -116 a FB(252)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fu(App)t(endix)52 b(A)81 b(The)53 b(Ev)l(olution)f(of)i(the)f Fi(awk)g Fu(Language)150 563 y FB(This)20 b(b)s(o)s(ok)h(describ)s(es)f (the)i(GNU)g(implemen)m(tation)g(of)g Fz(awk)p FB(,)g(whic)m(h)f(follo) m(ws)h(the)g(POSIX)e(sp)s(eci\014cation.)150 673 y(Man)m(y)31 b(long-time)h Fz(awk)e FB(users)g(learned)g Fz(awk)g FB(programming)g(with)g(the)h(original)h Fz(awk)d FB(implemen)m(tation) 150 782 y(in)k(V)-8 b(ersion)33 b(7)g(Unix.)48 b(\(This)33 b(implemen)m(tation)h(w)m(as)f(the)g(basis)g(for)g Fz(awk)f FB(in)g(Berk)m(eley)j(Unix,)f(through)150 892 y(4.3-Reno.)61 b(Subsequen)m(t)36 b(v)m(ersions)h(of)g(Berk)m(eley)h(Unix,)g(and)f (systems)f(deriv)m(ed)h(from)f(4.4BSD-Lite,)150 1002 y(use)c(v)-5 b(arious)33 b(v)m(ersions)g(of)g Fz(gawk)e FB(for)h(their)h Fz(awk)p FB(.\))47 b(This)32 b(c)m(hapter)h(brie\015y) f(describ)s(es)g(the)h(ev)m(olution)h(of)150 1111 y(the)29 b Fz(awk)e FB(language,)k(with)d(cross-references)h(to)g(other)g(parts) f(of)g(the)h(b)s(o)s(ok)f(where)g(y)m(ou)g(can)h(\014nd)e(more)150 1221 y(information.)150 1468 y FA(A.1)67 b(Ma)7 b(jor)46 b(Changes)f(Bet)l(w)l(een)i(V7)d(and)h(SVR3.1)150 1628 y FB(The)34 b Fz(awk)g FB(language)j(ev)m(olv)m(ed)f(considerably)f(b)s (et)m(w)m(een)h(the)f(release)h(of)f(V)-8 b(ersion)35 b(7)h(Unix)e(\(1978\))k(and)150 1737 y(the)h(new)f(v)m(ersion)h(that)g (w)m(as)g(\014rst)f(made)h(generally)h(a)m(v)-5 b(ailable)41 b(in)d(System)g(V)h(Release)h(3.1)g(\(1987\).)150 1847 y(This)30 b(section)h(summarizes)f(the)h(c)m(hanges,)g(with)g (cross-references)g(to)g(further)e(details:)225 1992 y Fy(\017)60 b FB(The)38 b(requiremen)m(t)g(for)g(`)p Fz(;)p FB(')g(to)h(separate)h(rules)d(on)h(a)h(line)g(\(see)g(Section)g (1.6)g([)p Fz(awk)f FB(Statemen)m(ts)330 2101 y(V)-8 b(ersus)30 b(Lines],)h(page)g(20\).)225 2241 y Fy(\017)60 b FB(User-de\014ned)29 b(functions)g(and)g(the)h Fz(return)f FB(statemen)m(t)i(\(see)g(Section)g(8.2)f([User-De\014ned)h(F)-8 b(unc-)330 2350 y(tions],)31 b(page)g(149\).)225 2490 y Fy(\017)60 b FB(The)30 b Fz(delete)f FB(statemen)m(t)j(\(see)f (Section)g(7.6)h([The)e Fz(delete)f FB(Statemen)m(t],)j(page)f(120\).) 225 2629 y Fy(\017)60 b FB(The)30 b Fz(do)p FB(-)p Fz(while)f FB(statemen)m(t)j(\(see)f(Section)g(6.4.3)h([The)f Fz(do)p FB(-)p Fz(while)d FB(Statemen)m(t],)33 b(page)e(101\).)225 2769 y Fy(\017)60 b FB(The)34 b(built-in)h(functions)f Fz(atan2)p FB(,)g Fz(cos)p FB(,)h Fz(sin)p FB(,)g Fz(rand)p FB(,)g(and)f Fz(srand)f FB(\(see)j(Section)f(8.1.2)i([Numeric)330 2879 y(F)-8 b(unctions],)31 b(page)h(127\).)225 3018 y Fy(\017)60 b FB(The)37 b(built-in)h(functions)f Fz(gsub)p FB(,)i Fz(sub)p FB(,)g(and)e Fz(match)g FB(\(see)i(Section)f(8.1.3)i ([String-Manipulation)330 3128 y(F)-8 b(unctions],)31 b(page)h(129\).)225 3267 y Fy(\017)60 b FB(The)29 b(built-in)g (functions)f Fz(close)g FB(and)h Fz(system)e FB(\(see)j(Section)g (8.1.4)h([Input/Output)d(F)-8 b(unctions],)330 3377 y(page)31 b(140\).)225 3516 y Fy(\017)60 b FB(The)30 b Fz(ARGC)p FB(,)f Fz(ARGV)p FB(,)h Fz(FNR)p FB(,)f Fz(RLENGTH)p FB(,)g Fz(RSTART)p FB(,)g(and)h Fz(SUBSEP)e FB(built-in)i(v)-5 b(ariables)31 b(\(see)h(Section)f(6.5)330 3626 y([Built-in)g(V)-8 b(ariables],)33 b(page)e(107\).)225 3766 y Fy(\017)60 b FB(The)37 b(conditional)i(expression)f(using)f(the)h(ternary)g(op)s (erator)g(`)p Fz(?:)p FB(')f(\(see)i(Section)g(5.12)g([Condi-)330 3875 y(tional)32 b(Expressions],)e(page)h(89\).)225 4015 y Fy(\017)60 b FB(The)29 b(exp)s(onen)m(tiation)i(op)s(erator)f(`)p Fz(^)p FB(')g(\(see)g(Section)g(5.5)h([Arithmetic)g(Op)s(erators],)e (page)i(78\))g(and)330 4124 y(its)f(assignmen)m(t)h(op)s(erator)f(form) f(`)p Fz(^=)p FB(')h(\(see)h(Section)g(5.7)g([Assignmen)m(t)f (Expressions],)g(page)g(81\).)225 4264 y Fy(\017)60 b FB(C-compatible)48 b(op)s(erator)e(precedence,)52 b(whic)m(h)46 b(breaks)g(some)h(old)f Fz(awk)g FB(programs)g(\(see)h(Sec-)330 4373 y(tion)31 b(5.14)h([Op)s(erator)e(Precedence)h(\(Ho)m(w)h(Op)s (erators)d(Nest\)],)j(page)f(90\).)225 4513 y Fy(\017)60 b FB(Regexps)41 b(as)f(the)g(v)-5 b(alue)41 b(of)f Fz(FS)g FB(\(see)h(Section)g(3.5)g([Sp)s(ecifying)f(Ho)m(w)h(Fields)g(Are)f (Separated],)330 4623 y(page)c(43\))g(and)e(as)h(the)g(third)f(argumen) m(t)i(to)f(the)g Fz(split)f FB(function)g(\(see)i(Section)g(8.1.3)h ([String-)330 4732 y(Manipulation)31 b(F)-8 b(unctions],)32 b(page)f(129\).)225 4872 y Fy(\017)60 b FB(Dynamic)26 b(regexps)g(as)g(op)s(erands)f(of)h(the)g(`)p Fz(~)p FB(')g(and)f(`)p Fz(!~)p FB(')g(op)s(erators)h(\(see)h(Section)g(2.1)f ([Ho)m(w)h(to)g(Use)330 4981 y(Regular)k(Expressions],)f(page)h(24\).) 225 5121 y Fy(\017)60 b FB(The)26 b(escap)s(e)i(sequences)f(`)p Fz(\\b)p FB(',)h(`)p Fz(\\f)p FB(',)g(and)e(`)p Fz(\\r)p FB(')h(\(see)h(Section)g(2.2)g([Escap)s(e)f(Sequences],)h(page)f(25\).) 330 5230 y(\(Some)j(v)m(endors)g(ha)m(v)m(e)h(up)s(dated)e(their)h(old) g(v)m(ersions)h(of)f Fz(awk)f FB(to)i(recognize)h(`)p Fz(\\b)p FB(',)e(`)p Fz(\\f)p FB(',)g(and)g(`)p Fz(\\r)p FB(',)330 5340 y(but)g(this)g(is)g(not)h(something)g(y)m(ou)g(can)f (rely)h(on.\))p eop end %%Page: 253 265 TeXDict begin 253 264 bop 1567 -116 a Fr(App)s(endix)28 b(A:)i(The)g(Ev)m(olution)i(of)e(the)h Fz(awk)e Fr(Language)92 b FB(253)225 299 y Fy(\017)60 b FB(Redirection)42 b(of)g(input)e(for)h (the)g Fz(getline)f FB(function)h(\(see)h(Section)g(3.8)g([Explicit)g (Input)e(with)330 408 y Fz(getline)p FB(],)29 b(page)i(51\).)225 541 y Fy(\017)60 b FB(Multiple)29 b Fz(BEGIN)d FB(and)i Fz(END)f FB(rules)g(\(see)i(Section)g(6.1.4)h([The)d Fz(BEGIN)g FB(and)g Fz(END)g FB(Sp)s(ecial)i(P)m(atterns],)330 650 y(page)i(96\).)225 783 y Fy(\017)60 b FB(Multidimensional)31 b(arra)m(ys)g(\(see)g(Section)g(7.9)h([Multidimensional)f(Arra)m(ys],)g (page)g(122\).)150 1011 y FA(A.2)67 b(Changes)46 b(Bet)l(w)l(een)g (SVR3.1)f(and)g(SVR4)150 1170 y FB(The)34 b(System)h(V)g(Release)i(4)e (\(1989\))i(v)m(ersion)f(of)f(Unix)g Fz(awk)f FB(added)g(these)h (features)g(\(some)h(of)f(whic)m(h)150 1280 y(originated)d(in)e Fz(gawk)p FB(\):)225 1412 y Fy(\017)60 b FB(The)30 b Fz(ENVIRON)e FB(v)-5 b(ariable)31 b(\(see)h(Section)f(6.5)g([Built-in)h (V)-8 b(ariables],)32 b(page)f(107\).)225 1544 y Fy(\017)60 b FB(Multiple)28 b(`)p Fz(-f)p FB(')f(options)h(on)f(the)g(command)g (line)h(\(see)g(Section)g(11.2)h([Command-Line)e(Options],)330 1654 y(page)k(173\).)225 1786 y Fy(\017)60 b FB(The)20 b(`)p Fz(-v)p FB(')g(option)h(for)g(assigning)g(v)-5 b(ariables)21 b(b)s(efore)f(program)g(execution)i(b)s(egins)e(\(see)h (Section)g(11.2)330 1896 y([Command-Line)30 b(Options],)g(page)h (173\).)225 2028 y Fy(\017)60 b FB(The)30 b(`)p Fz(--)p FB(')g(option)h(for)f(terminating)h(command-line)g(options.)225 2160 y Fy(\017)60 b FB(The)26 b(`)p Fz(\\a)p FB(',)i(`)p Fz(\\v)p FB(',)g(and)e(`)p Fz(\\x)p FB(')h(escap)s(e)h(sequences)f (\(see)h(Section)g(2.2)g([Escap)s(e)f(Sequences],)h(page)f(25\).)225 2292 y Fy(\017)60 b FB(A)45 b(de\014ned)e(return)h(v)-5 b(alue)45 b(for)g(the)g Fz(srand)e FB(built-in)h(function)h(\(see)h (Section)f(8.1.2)i([Numeric)330 2402 y(F)-8 b(unctions],)31 b(page)h(127\).)225 2534 y Fy(\017)60 b FB(The)71 b Fz(toupper)e FB(and)i Fz(tolower)e FB(built-in)j(string)f(functions)g(for)g(case)i (translation)f(\(see)330 2644 y(Section)31 b(8.1.3)h ([String-Manipulation)g(F)-8 b(unctions],)31 b(page)g(129\).)225 2776 y Fy(\017)60 b FB(A)38 b(cleaner)h(sp)s(eci\014cation)g(for)f(the) g(`)p Fz(\045c)p FB(')g(format-con)m(trol)i(letter)f(in)f(the)g Fz(printf)e FB(function)i(\(see)330 2886 y(Section)31 b(4.5.2)h([F)-8 b(ormat-Con)m(trol)33 b(Letters],)f(page)f(60\).)225 3018 y Fy(\017)60 b FB(The)21 b(abilit)m(y)j(to)e(dynamically)h(pass)e (the)h(\014eld)g(width)f(and)g(precision)h(\()p Fz("\045*.*d")p FB(\))f(in)g(the)h(argumen)m(t)330 3127 y(list)31 b(of)g(the)f Fz(printf)f FB(function)h(\(see)h(Section)g(4.5.2)i([F)-8 b(ormat-Con)m(trol)33 b(Letters],)e(page)g(60\).)225 3260 y Fy(\017)60 b FB(The)31 b(use)g(of)g(regexp)h(constan)m(ts,)g (suc)m(h)f(as)h Fz(/foo/)p FB(,)e(as)h(expressions,)h(where)e(they)i (are)f(equiv)-5 b(alen)m(t)330 3369 y(to)43 b(using)f(the)h(matc)m (hing)g(op)s(erator,)j(as)d(in)f(`)p Fz($0)30 b(~)g(/foo/)p FB(')41 b(\(see)j(Section)f(5.2)h([Using)e(Regular)330 3479 y(Expression)30 b(Constan)m(ts],)h(page)g(74\).)225 3611 y Fy(\017)60 b FB(Pro)s(cessing)46 b(of)f(escap)s(e)h(sequences)g (inside)f(command-line)h(v)-5 b(ariable)46 b(assignmen)m(ts)g(\(see)g (Sec-)330 3721 y(tion)31 b(5.3.2)h([Assigning)f(V)-8 b(ariables)32 b(on)e(the)g(Command)g(Line],)h(page)g(76\).)150 3949 y FA(A.3)67 b(Changes)46 b(Bet)l(w)l(een)g(SVR4)f(and)f(POSIX)h Fq(awk)150 4108 y FB(The)31 b(POSIX)f(Command)g(Language)j(and)d (Utilities)k(standard)c(for)h Fz(awk)f FB(\(1992\))k(in)m(tro)s(duced)d (the)g(fol-)150 4218 y(lo)m(wing)g(c)m(hanges)h(in)m(to)f(the)g (language:)225 4350 y Fy(\017)60 b FB(The)34 b(use)h(of)f(`)p Fz(-W)p FB(')h(for)f(implemen)m(tation-sp)s(eci\014c)j(options)e(\(see) h(Section)f(11.2)h([Command-Line)330 4460 y(Options],)30 b(page)i(173\).)225 4592 y Fy(\017)60 b FB(The)25 b(use)f(of)h Fz(CONVFMT)e FB(for)i(con)m(trolling)i(the)e(con)m(v)m(ersion)i(of)e(n) m(um)m(b)s(ers)e(to)j(strings)f(\(see)h(Section)g(5.4)330 4701 y([Con)m(v)m(ersion)31 b(of)g(Strings)f(and)f(Num)m(b)s(ers],)h (page)h(77\).)225 4834 y Fy(\017)60 b FB(The)35 b(concept)h(of)f(a)g(n) m(umeric)g(string)g(and)g(tigh)m(ter)h(comparison)g(rules)e(to)i(go)g (with)f(it)g(\(see)h(Sec-)330 4943 y(tion)31 b(5.10)h([V)-8 b(ariable)32 b(T)m(yping)e(and)g(Comparison)g(Expressions],)g(page)h (85\).)225 5075 y Fy(\017)60 b FB(More)27 b(complete)g(do)s(cumen)m (tation)g(of)f(man)m(y)g(of)g(the)g(previously)g(undo)s(cumen)m(ted)e (features)j(of)f(the)330 5185 y(language.)275 5340 y(The)j(follo)m (wing)j(common)f(extensions)g(are)g(not)f(p)s(ermitted)g(b)m(y)g(the)h (POSIX)e(standard:)p eop end %%Page: 254 266 TeXDict begin 254 265 bop 150 -116 a FB(254)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)225 299 y Fy(\017)60 b Fz(\\x)30 b FB(escap)s(e)h(sequences)f(are)h(not)g (recognized)g(\(see)h(Section)f(2.2)g([Escap)s(e)g(Sequences],)g(page)g (25\).)225 449 y Fy(\017)60 b FB(Newlines)29 b(do)g(not)g(act)h(as)g (whitespace)f(to)h(separate)g(\014elds)e(when)g Fz(FS)g FB(is)h(equal)h(to)f(a)h(single)f(space)330 559 y(\(see)i(Section)h (3.2)f([Examining)g(Fields],)g(page)g(39\).)225 709 y Fy(\017)60 b FB(Newlines)38 b(are)h(not)f(allo)m(w)m(ed)h(after)g(`)p Fz(?)p FB(')f(or)g(`)p Fz(:)p FB(')g(\(see)h(Section)f(5.12)i ([Conditional)e(Expressions],)330 819 y(page)31 b(89\).)225 969 y Fy(\017)60 b FB(The)45 b(synon)m(ym)f Fz(func)g FB(for)h(the)h(k)m(eyw)m(ord)g Fz(function)d FB(is)i(not)g(recognized)i (\(see)f(Section)g(8.2.1)330 1079 y([F)-8 b(unction)31 b(De\014nition)g(Syn)m(tax],)g(page)g(149\).)225 1230 y Fy(\017)60 b FB(The)35 b(op)s(erators)h(`)p Fz(**)p FB(')f(and)g(`)p Fz(**=)p FB(')h(cannot)g(b)s(e)f(used)g(in)g(place)i (of)e(`)p Fz(^)p FB(')h(and)f(`)p Fz(^=)p FB(')h(\(see)g(Section)h(5.5) 330 1339 y([Arithmetic)32 b(Op)s(erators],)e(page)h(78,)g(and)f (Section)h(5.7)h([Assignmen)m(t)f(Expressions],)f(page)h(81\).)225 1490 y Fy(\017)60 b FB(Sp)s(ecifying)30 b(`)p Fz(-Ft)p FB(')h(on)f(the)h(command)g(line)g(do)s(es)f(not)h(set)h(the)f(v)-5 b(alue)31 b(of)g Fz(FS)f FB(to)i(b)s(e)e(a)h(single)g(T)-8 b(AB)330 1599 y(c)m(haracter)32 b(\(see)f(Section)g(3.5)h([Sp)s (ecifying)e(Ho)m(w)h(Fields)g(Are)g(Separated],)g(page)g(43\).)225 1750 y Fy(\017)60 b FB(The)30 b Fz(fflush)f FB(built-in)h(function)g (is)h(not)g(supp)s(orted)e(\(see)i(Section)g(8.1.4)i([Input/Output)c(F) -8 b(unc-)330 1859 y(tions],)31 b(page)g(140\).)150 2140 y FA(A.4)67 b(Extensions)46 b(in)f(the)g(Bell)h(Lab)t(oratories)g Fq(awk)150 2299 y FB(Brian)31 b(Kernighan,)g(one)g(of)h(the)f(original) h(designers)f(of)g(Unix)g Fz(awk)p FB(,)g(has)f(made)h(his)g(v)m (ersion)h(a)m(v)-5 b(ailable)150 2409 y(via)24 b(his)e(home)h(page)h (\(see)f(Section)h(B.6)g([Other)f(F)-8 b(reely)24 b(Av)-5 b(ailable)24 b Fz(awk)e FB(Implemen)m(tations],)k(page)e(277\).)150 2518 y(This)30 b(section)h(describ)s(es)f(extensions)h(in)f(his)g(v)m (ersion)g(of)h Fz(awk)e FB(that)i(are)g(not)g(in)f(POSIX)f Fz(awk)p FB(:)225 2685 y Fy(\017)60 b FB(The)35 b(`)p Fz(-mf)29 b Fk(N)11 b FB(')35 b(and)f(`)p Fz(-mr)c Fk(N)11 b FB(')34 b(command-line)i(options)f(to)h(set)f(the)h(maxim)m(um)f(n)m (um)m(b)s(er)e(of)i(\014elds)330 2794 y(and)26 b(the)h(maxim)m(um)g (record)g(size,)i(resp)s(ectiv)m(ely)f(\(see)g(Section)g(11.2)g ([Command-Line)f(Options],)330 2904 y(page)h(173\).)42 b(As)27 b(a)h(side)f(note,)i(his)e Fz(awk)g FB(no)g(longer)i(needs)e (these)h(options;)h(it)f(con)m(tin)m(ues)g(to)g(accept)330 3013 y(them)i(to)h(a)m(v)m(oid)h(breaking)f(old)f(programs.)225 3164 y Fy(\017)60 b FB(The)72 b Fz(fflush)f FB(built-in)i(function)f (for)g(\015ushing)f(bu\013ered)h(output)g(\(see)i(Section)f(8.1.4)330 3274 y([Input/Output)29 b(F)-8 b(unctions],)31 b(page)g(140\).)225 3424 y Fy(\017)60 b FB(The)43 b(`)p Fz(**)p FB(')g(and)g(`)p Fz(**=)p FB(')g(op)s(erators)h(\(see)h(Section)f(5.5)g([Arithmetic)h (Op)s(erators],)i(page)d(78)h(and)330 3534 y(Section)31 b(5.7)h([Assignmen)m(t)f(Expressions],)f(page)h(81\).)225 3684 y Fy(\017)60 b FB(The)24 b(use)f(of)i Fz(func)e FB(as)h(an)g(abbreviation)h(for)f Fz(function)d FB(\(see)k(Section)g (8.2.1)h([F)-8 b(unction)25 b(De\014nition)330 3794 y(Syn)m(tax],)31 b(page)g(149\).)275 4001 y(The)19 b(Bell)j(Lab)s(oratories)f Fz(awk)e FB(also)j(incorp)s(orates)e(the)h(follo)m(wing)h(extensions,)h (originally)f(dev)m(elop)s(ed)150 4111 y(for)30 b Fz(gawk)p FB(:)225 4277 y Fy(\017)60 b FB(The)30 b(`)p Fz(\\x)p FB(')g(escap)s(e)h(sequence)g(\(see)g(Section)g(2.2)h([Escap)s(e)e (Sequences],)h(page)g(25\).)225 4427 y Fy(\017)60 b FB(The)45 b(`)p Fz(/dev/stdin)p FB(',)i(`)p Fz(/dev/stdout)p FB(',)f(and)f(`)p Fz(/dev/stderr)p FB(')e(sp)s(ecial)i(\014les)h(\(see)g(Section)g(4.7) 330 4537 y([Sp)s(ecial)31 b(File)g(Names)g(in)f Fz(gawk)p FB(],)g(page)h(67\).)225 4688 y Fy(\017)60 b FB(The)39 b(abilit)m(y)i(for)e Fz(FS)g FB(and)g(for)g(the)h(third)f(argumen)m(t)h (to)g Fz(split)e FB(to)i(b)s(e)f(n)m(ull)h(strings)f(\(see)h(Sec-)330 4797 y(tion)31 b(3.5.2)h([Making)g(Eac)m(h)f(Character)f(a)h(Separate)g (Field],)h(page)f(44\).)225 4948 y Fy(\017)60 b FB(The)e Fz(nextfile)d FB(statemen)m(t)60 b(\(see)f(Section)g(6.4.9)h([Using)e Fz(gawk)p FB('s)f Fz(nextfile)f FB(Statemen)m(t],)330 5057 y(page)31 b(106\).)225 5208 y Fy(\017)60 b FB(The)29 b(abilit)m(y)h(to)g(delete)h(all)f(of)f(an)g(arra)m(y)h(at)g(once)g (with)e(`)p Fz(delete)h Fk(array)11 b FB(')28 b(\(see)i(Section)g(7.6)g ([The)330 5317 y Fz(delete)f FB(Statemen)m(t],)j(page)f(120\).)p eop end %%Page: 255 267 TeXDict begin 255 266 bop 1567 -116 a Fr(App)s(endix)28 b(A:)i(The)g(Ev)m(olution)i(of)e(the)h Fz(awk)e Fr(Language)92 b FB(255)150 299 y FA(A.5)67 b(Extensions)46 b(in)f Fq(gawk)e FA(Not)j(in)f(POSIX)f Fq(awk)150 458 y FB(The)24 b(GNU)h(implemen)m (tation,)j Fz(gawk)p FB(,)d(adds)e(a)i(large)h(n)m(um)m(b)s(er)d(of)i (features.)39 b(This)24 b(section)i(lists)f(them)f(in)150 568 y(the)d(order)f(they)g(w)m(ere)h(added)f(to)h Fz(gawk)p FB(.)36 b(They)20 b(can)h(all)g(b)s(e)f(disabled)g(with)g(either)h(the) g(`)p Fz(--traditional)p FB(')150 677 y(or)30 b(`)p Fz(--posix)p FB(')f(options)i(\(see)g(Section)g(11.2)h([Command-Line)e(Options],)h (page)g(173\).)275 811 y(V)-8 b(ersion)31 b(2.10)g(of)g Fz(gawk)e FB(in)m(tro)s(duced)h(the)h(follo)m(wing)g(features:)225 945 y Fy(\017)60 b FB(The)29 b Fz(AWKPATH)f FB(en)m(vironmen)m(t)j(v)-5 b(ariable)30 b(for)g(sp)s(ecifying)f(a)i(path)e(searc)m(h)i(for)e(the)h (`)p Fz(-f)p FB(')g(command-)330 1055 y(line)h(option)g(\(see)g (Section)g(11.2)h([Command-Line)e(Options],)g(page)h(173\).)225 1189 y Fy(\017)60 b FB(The)25 b Fz(IGNORECASE)d FB(v)-5 b(ariable)26 b(and)f(its)g(e\013ects)i(\(see)f(Section)g(2.6)g([Case)g (Sensitivit)m(y)g(in)f(Matc)m(hing],)330 1298 y(page)31 b(32\).)225 1432 y Fy(\017)60 b FB(The)33 b(`)p Fz(/dev/stdin)p FB(',)f(`)p Fz(/dev/stdout)p FB(',)g(`)p Fz(/dev/stderr)p FB(')e(and)j(`)p Fz(/dev/fd/)p Fk(N)11 b FB(')31 b(sp)s(ecial)j(\014le) f(names)330 1542 y(\(see)e(Section)h(4.7)f([Sp)s(ecial)g(File)g(Names)g (in)f Fz(gawk)p FB(],)g(page)h(67\).)275 1700 y(V)-8 b(ersion)31 b(2.13)g(of)g Fz(gawk)e FB(in)m(tro)s(duced)h(the)h(follo)m (wing)g(features:)225 1834 y Fy(\017)60 b FB(The)25 b Fz(FIELDWIDTHS)d FB(v)-5 b(ariable)26 b(and)f(its)h(e\013ects)h(\(see)f (Section)g(3.6)h([Reading)f(Fixed-Width)g(Data],)330 1944 y(page)31 b(47\).)225 2077 y Fy(\017)60 b FB(The)34 b Fz(systime)f FB(and)h Fz(strftime)e FB(built-in)j(functions)f(for)h (obtaining)g(and)f(prin)m(ting)g(timestamps)330 2187 y(\(see)d(Section)h(8.1.5)g([Using)e Fz(gawk)p FB('s)g(Timestamp)g(F)-8 b(unctions],)32 b(page)f(142\).)225 2321 y Fy(\017)60 b FB(The)25 b(`)p Fz(-W)30 b(lint)p FB(')24 b(option)h(to)h(pro)m(vide) g(error)e(and)h(p)s(ortabilit)m(y)h(c)m(hec)m(king)h(for)e(b)s(oth)f (the)h(source)h(co)s(de)330 2430 y(and)k(at)h(run)m(time)f(\(see)h (Section)h(11.2)f([Command-Line)f(Options],)h(page)g(173\).)225 2564 y Fy(\017)60 b FB(The)32 b(`)p Fz(-W)e(compat)p FB(')h(option)i(to)g(turn)f(o\013)h(the)f(GNU)h(extensions)h(\(see)f (Section)g(11.2)h([Command-)330 2674 y(Line)c(Options],)h(page)g (173\).)225 2808 y Fy(\017)60 b FB(The)39 b(`)p Fz(-W)30 b(posix)p FB(')39 b(option)h(for)f(full)g(POSIX)g(compliance)i(\(see)g (Section)f(11.2)h([Command-Line)330 2917 y(Options],)30 b(page)i(173\).)275 3076 y(V)-8 b(ersion)31 b(2.14)g(of)g Fz(gawk)e FB(in)m(tro)s(duced)h(the)h(follo)m(wing)g(feature:)225 3210 y Fy(\017)60 b FB(The)36 b Fz(next)29 b(file)35 b FB(statemen)m(t)j(for)d(skipping)h(to)g(the)h(next)f(data)h(\014le)f (\(see)h(Section)g(6.4.9)g([Using)330 3319 y Fz(gawk)p FB('s)29 b Fz(nextfile)f FB(Statemen)m(t],)33 b(page)e(106\).)275 3477 y(V)-8 b(ersion)31 b(2.15)g(of)g Fz(gawk)e FB(in)m(tro)s(duced)h (the)h(follo)m(wing)g(features:)225 3611 y Fy(\017)60 b FB(The)30 b Fz(ARGIND)g FB(v)-5 b(ariable,)32 b(whic)m(h)e(trac)m(ks) i(the)f(mo)m(v)m(emen)m(t)i(of)e Fz(FILENAME)e FB(through)h Fz(ARGV)g FB(\(see)h(Sec-)330 3721 y(tion)g(6.5)g([Built-in)h(V)-8 b(ariables],)32 b(page)f(107\).)225 3855 y Fy(\017)60 b FB(The)36 b Fz(ERRNO)e FB(v)-5 b(ariable,)39 b(whic)m(h)d(con)m (tains)h(the)g(system)f(error)g(message)h(when)e Fz(getline)f FB(returns)330 3964 y Fy(\000)p FB(1)c(or)h Fz(close)e FB(fails)i(\(see)g(Section)g(6.5)h([Built-in)f(V)-8 b(ariables],)32 b(page)f(107\).)225 4098 y Fy(\017)60 b FB(The)24 b(`)p Fz(/dev/pid)p FB(',)g(`)p Fz(/dev/ppid)p FB(',)f(`)p Fz(/dev/pgrpid)p FB(',)g(and)h(`)p Fz(/dev/user)p FB(')e(\014le)i(name) h(in)m(terpretation)330 4208 y(\(see)31 b(Section)h(4.7)f([Sp)s(ecial)g (File)g(Names)g(in)f Fz(gawk)p FB(],)g(page)h(67\).)225 4342 y Fy(\017)60 b FB(The)29 b(abilit)m(y)h(to)g(delete)h(all)f(of)f (an)g(arra)m(y)h(at)g(once)g(with)e(`)p Fz(delete)h Fk(array)11 b FB(')28 b(\(see)i(Section)g(7.6)g([The)330 4451 y Fz(delete)f FB(Statemen)m(t],)j(page)f(120\).)225 4585 y Fy(\017)60 b FB(The)27 b(abilit)m(y)i(to)f(use)f(GNU-st)m(yle)j(long-named)e (options)g(that)g(start)g(with)f(`)p Fz(--)p FB(')h(\(see)g(Section)g (11.2)330 4695 y([Command-Line)i(Options],)g(page)h(173\).)225 4829 y Fy(\017)60 b FB(The)31 b(`)p Fz(--source)p FB(')e(option)j(for)f (mixing)h(command-line)g(and)f(library-\014le)g(source)g(co)s(de)h (\(see)g(Sec-)330 4938 y(tion)f(11.2)h([Command-Line)e(Options],)g (page)h(173\).)275 5096 y(V)-8 b(ersion)31 b(3.0)g(of)g Fz(gawk)e FB(in)m(tro)s(duced)h(the)g(follo)m(wing)i(features:)225 5230 y Fy(\017)60 b Fz(IGNORECASE)29 b FB(c)m(hanged,)k(no)m(w)f (applying)f(to)i(string)e(comparison)h(as)g(w)m(ell)h(as)f(regexp)g(op) s(erations)330 5340 y(\(see)f(Section)h(2.6)f([Case)g(Sensitivit)m(y)g (in)f(Matc)m(hing],)j(page)e(32\).)p eop end %%Page: 256 268 TeXDict begin 256 267 bop 150 -116 a FB(256)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)225 299 y Fy(\017)60 b FB(The)36 b Fz(RT)g FB(v)-5 b(ariable)37 b(that)g(con)m(tains)h(the)f(input)f(text)h(that)g(matc)m(hed)h Fz(RS)d FB(\(see)j(Section)f(3.1)h([Ho)m(w)330 408 y(Input)29 b(Is)h(Split)g(in)m(to)i(Records],)e(page)i(36\).)225 545 y Fy(\017)60 b FB(F)-8 b(ull)31 b(supp)s(ort)d(for)i(b)s(oth)g (POSIX)f(and)h(GNU)h(regexps)f(\(see)h(Chapter)f(2)g([Regular)h (Expressions],)330 655 y(page)g(24\).)225 792 y Fy(\017)60 b FB(The)36 b Fz(gensub)e FB(function)i(for)g(more)g(p)s(o)m(w)m(erful) g(text)h(manipulation)g(\(see)g(Section)g(8.1.3)h([String-)330 901 y(Manipulation)31 b(F)-8 b(unctions],)32 b(page)f(129\).)225 1038 y Fy(\017)60 b FB(The)35 b Fz(strftime)f FB(function)i(acquired)g (a)g(default)g(time)g(format,)i(allo)m(wing)g(it)e(to)h(b)s(e)e(called) i(with)330 1148 y(no)30 b(argumen)m(ts)h(\(see)g(Section)g(8.1.5)i ([Using)d Fz(gawk)p FB('s)g(Timestamp)g(F)-8 b(unctions],)31 b(page)h(142\).)225 1284 y Fy(\017)60 b FB(The)39 b(abilit)m(y)i(for)e Fz(FS)g FB(and)g(for)g(the)h(third)f(argumen)m(t)h(to)g Fz(split)e FB(to)i(b)s(e)f(n)m(ull)h(strings)f(\(see)h(Sec-)330 1394 y(tion)31 b(3.5.2)h([Making)g(Eac)m(h)f(Character)f(a)h(Separate)g (Field],)h(page)f(44\).)225 1531 y Fy(\017)60 b FB(The)35 b(abilit)m(y)j(for)d Fz(RS)h FB(to)g(b)s(e)g(a)g(regexp)g(\(see)h (Section)g(3.1)g([Ho)m(w)g(Input)d(Is)i(Split)f(in)m(to)i(Records],)330 1640 y(page)31 b(36\).)225 1777 y Fy(\017)60 b FB(The)27 b Fz(next)i(file)d FB(statemen)m(t)j(b)s(ecame)e Fz(nextfile)e FB(\(see)k(Section)e(6.4.9)i([Using)f Fz(gawk)p FB('s)e Fz(nextfile)330 1887 y FB(Statemen)m(t],)32 b(page)f(106\).)225 2023 y Fy(\017)60 b FB(The)32 b(`)p Fz(--lint-old)p FB(')f(option)i(to) h(w)m(arn)e(ab)s(out)h(constructs)g(that)g(are)g(not)g(a)m(v)-5 b(ailable)35 b(in)e(the)g(orig-)330 2133 y(inal)h(V)-8 b(ersion)35 b(7)f(Unix)g(v)m(ersion)h(of)f Fz(awk)f FB(\(see)i(Section) g(A.1)f([Ma)5 b(jor)35 b(Changes)f(Bet)m(w)m(een)i(V7)f(and)330 2242 y(SVR3.1],)d(page)f(252\).)225 2379 y Fy(\017)60 b FB(The)34 b(`)p Fz(-m)p FB(')h(option)g(and)e(the)i Fz(fflush)e FB(function)h(from)g(the)h(Bell)h(Lab)s(oratories)f (researc)m(h)g(v)m(ersion)330 2489 y(of)42 b Fz(awk)g FB(\(see)h(Section)g(11.2)g([Command-Line)f(Options],)j(page)e(173;)49 b(also)43 b(see)g(Section)g(8.1.4)330 2598 y([Input/Output)29 b(F)-8 b(unctions],)31 b(page)g(140\).)225 2735 y Fy(\017)60 b FB(The)26 b(`)p Fz(--re-interval)p FB(')e(option)k(to)f(pro)m(vide)h (in)m(terv)-5 b(al)28 b(expressions)e(in)h(regexps)g(\(see)h(Section)g (2.3)330 2845 y([Regular)j(Expression)f(Op)s(erators],)g(page)h(27\).) 225 2982 y Fy(\017)60 b FB(The)43 b(`)p Fz(--traditional)p FB(')e(option)j(w)m(as)g(added)f(as)h(a)g(b)s(etter)g(name)g(for)g(`)p Fz(--compat)p FB(')e(\(see)i(Sec-)330 3091 y(tion)31 b(11.2)h([Command-Line)e(Options],)g(page)h(173\).)225 3228 y Fy(\017)60 b FB(The)24 b(use)f(of)i(GNU)f(Auto)s(conf)g(to)h (con)m(trol)h(the)e(con\014guration)g(pro)s(cess)g(\(see)h(Section)g (B.2.1)h([Com-)330 3337 y(piling)31 b Fz(gawk)e FB(for)h(Unix],)h(page) g(264\).)225 3474 y Fy(\017)60 b FB(Amiga)31 b(supp)s(ort)e(\(see)i (Section)h(B.3.1)g([Installing)f Fz(gawk)e FB(on)h(an)h(Amiga],)h(page) f(266\).)275 3640 y(V)-8 b(ersion)31 b(3.1)g(of)g Fz(gawk)e FB(in)m(tro)s(duced)h(the)g(follo)m(wing)i(features:)225 3779 y Fy(\017)60 b FB(The)42 b Fz(BINMODE)e FB(sp)s(ecial)j(v)-5 b(ariable)43 b(for)f(non-POSIX)f(systems,)46 b(whic)m(h)c(allo)m(ws)h (binary)f(I/O)g(for)330 3889 y(input)29 b(and/or)h(output)g(\014les)g (\(see)h(Section)g(B.3.3.4)h([Using)f Fz(gawk)e FB(on)h(PC)f(Op)s (erating)h(Systems],)330 3999 y(page)h(269\).)225 4135 y Fy(\017)60 b FB(The)37 b Fz(LINT)e FB(sp)s(ecial)j(v)-5 b(ariable,)40 b(whic)m(h)c(dynamically)i(con)m(trols)h(lin)m(t)e(w)m (arnings)g(\(see)h(Section)g(6.5)330 4245 y([Built-in)31 b(V)-8 b(ariables],)33 b(page)e(107\).)225 4382 y Fy(\017)60 b FB(The)25 b Fz(PROCINFO)e FB(arra)m(y)i(for)g(pro)m(viding)g(pro)s (cess-related)h(information)g(\(see)g(Section)g(6.5)g([Built-in)330 4491 y(V)-8 b(ariables],)32 b(page)f(107\).)225 4628 y Fy(\017)60 b FB(The)33 b Fz(TEXTDOMAIN)e FB(sp)s(ecial)j(v)-5 b(ariable)34 b(for)g(setting)g(an)g(application's)h(in)m (ternationalization)i(text)330 4738 y(domain)f(\(see)g(Section)h(6.5)f ([Built-in)h(V)-8 b(ariables],)39 b(page)d(107,)j(and)c(Chapter)g(9)h ([In)m(ternational-)330 4847 y(ization)c(with)e Fz(gawk)p FB(],)g(page)h(156\).)225 4984 y Fy(\017)60 b FB(The)36 b(abilit)m(y)h(to)g(use)f(o)s(ctal)i(and)e(hexadecimal)h(constan)m(ts)h (in)e Fz(awk)f FB(program)h(source)g(co)s(de)h(\(see)330 5094 y(Section)31 b(5.1.2)h([Octal)g(and)e(Hexadecimal)i(Num)m(b)s (ers],)e(page)h(73\).)225 5230 y Fy(\017)60 b FB(The)26 b(`)p Fz(|&)p FB(')h(op)s(erator)h(for)e(t)m(w)m(o-w)m(a)m(y)k(I/O)d (to)h(a)f(copro)s(cess)g(\(see)h(Section)g(10.2)h([Tw)m(o-W)-8 b(a)m(y)29 b(Comm)m(u-)330 5340 y(nications)i(with)f(Another)h(Pro)s (cess],)g(page)g(166\).)p eop end %%Page: 257 269 TeXDict begin 257 268 bop 1567 -116 a Fr(App)s(endix)28 b(A:)i(The)g(Ev)m(olution)i(of)e(the)h Fz(awk)e Fr(Language)92 b FB(257)225 299 y Fy(\017)60 b FB(The)39 b(`)p Fz(/inet)p FB(')f(sp)s(ecial)i(\014les)g(for)f(TCP/IP)f(net)m(w)m(orking)j(using)e (`)p Fz(|&)p FB(')g(\(see)h(Section)h(10.3)f([Using)330 408 y Fz(gawk)29 b FB(for)h(Net)m(w)m(ork)i(Programming],)f(page)g (168\).)225 540 y Fy(\017)60 b FB(The)29 b(optional)i(second)f(argumen) m(t)g(to)g Fz(close)f FB(that)h(allo)m(ws)h(closing)g(one)f(end)f(of)g (a)h(t)m(w)m(o-w)m(a)m(y)j(pip)s(e)330 650 y(to)41 b(a)f(copro)s(cess)g (\(see)h(Section)f(10.2)i([Tw)m(o-W)-8 b(a)m(y)42 b(Comm)m(unications)e (with)g(Another)g(Pro)s(cess],)330 759 y(page)31 b(166\).)225 891 y Fy(\017)60 b FB(The)26 b(optional)i(third)e(argumen)m(t)h(to)h (the)f Fz(match)e FB(function)h(for)h(capturing)g(text-matc)m(hing)i (sub)s(ex-)330 1000 y(pressions)23 b(within)f(a)i(regexp)g(\(see)g (Section)g(8.1.3)h([String-Manipulation)f(F)-8 b(unctions],)26 b(page)e(129\).)225 1132 y Fy(\017)60 b FB(P)m(ositional)29 b(sp)s(eci\014ers)c(in)i Fz(printf)e FB(formats)h(for)h(making)f (translations)i(easier)f(\(see)h(Section)f(9.4.2)330 1241 y([Rearranging)k Fz(printf)e FB(Argumen)m(ts],)i(page)g(160\).)225 1373 y Fy(\017)60 b FB(The)38 b Fz(asort)f FB(and)h Fz(asorti)e FB(functions)i(for)g(sorting)h(arra)m(ys)g(\(see)g(Section)g(7.11)h ([Sorting)f(Arra)m(y)330 1482 y(V)-8 b(alues)31 b(and)f(Indices)g(with) g Fz(gawk)p FB(],)g(page)h(124\).)225 1614 y Fy(\017)60 b FB(The)38 b Fz(bindtextdomain)p FB(,)f Fz(dcgettext)f FB(and)i Fz(dcngettext)d FB(functions)j(for)g(in)m(ternationalization) 330 1724 y(\(see)31 b(Section)h(9.3)f([In)m(ternationalizing)i Fz(awk)c FB(Programs],)i(page)g(158\).)225 1855 y Fy(\017)60 b FB(The)29 b Fz(extension)e FB(built-in)i(function)g(and)g(the)g (abilit)m(y)i(to)f(add)f(new)f(built-in)i(functions)e(dynam-)330 1965 y(ically)k(\(see)f(Section)g(C.3)g([Adding)f(New)h(Built-in)g(F)-8 b(unctions)31 b(to)g Fz(gawk)p FB(],)e(page)j(282\).)225 2096 y Fy(\017)60 b FB(The)31 b Fz(mktime)f FB(built-in)h(function)h (for)f(creating)i(timestamps)f(\(see)g(Section)h(8.1.5)g([Using)f Fz(gawk)p FB('s)330 2206 y(Timestamp)e(F)-8 b(unctions],)32 b(page)f(142\).)225 2337 y Fy(\017)60 b FB(The)34 b Fz(and)p FB(,)h Fz(or)p FB(,)h Fz(xor)p FB(,)f Fz(compl)p FB(,)g Fz(lshift)p FB(,)f Fz(rshift)p FB(,)g(and)g Fz(strtonum)f FB(built-in)h(functions)h(\(see)g(Sec-)330 2447 y(tion)c(8.1.6)h ([Bit-Manipulation)h(F)-8 b(unctions)31 b(of)f Fz(gawk)p FB(],)g(page)h(147\).)225 2578 y Fy(\017)60 b FB(The)33 b(supp)s(ort)f(for)i(`)p Fz(next)29 b(file)p FB(')k(as)h(t)m(w)m(o)h(w) m(ords)e(w)m(as)h(remo)m(v)m(ed)h(completely)g(\(see)g(Section)f(6.4.9) 330 2688 y([Using)d Fz(gawk)p FB('s)e Fz(nextfile)f FB(Statemen)m(t],) 33 b(page)e(106\).)225 2819 y Fy(\017)60 b FB(The)30 b(`)p Fz(--dump-variables)p FB(')d(option)k(to)h(prin)m(t)e(a)h(list)h (of)f(all)h(global)g(v)-5 b(ariables)31 b(\(see)h(Section)f(11.2)330 2929 y([Command-Line)f(Options],)g(page)h(173\).)225 3061 y Fy(\017)60 b FB(The)42 b(`)p Fz(--gen-po)p FB(')f(command-line)i (option)g(and)f(the)h(use)g(of)f(a)i(leading)f(underscore)f(to)h(mark) 330 3170 y(strings)53 b(that)h(should)f(b)s(e)f(translated)i(\(see)h (Section)f(9.4.1)h([Extracting)g(Mark)m(ed)f(Strings],)330 3280 y(page)31 b(160\).)225 3411 y Fy(\017)60 b FB(The)34 b(`)p Fz(--non-decimal-data)p FB(')c(option)35 b(to)h(allo)m(w)g (non-decimal)f(input)f(data)h(\(see)h(Section)f(10.1)330 3521 y([Allo)m(wing)d(Nondecimal)g(Input)d(Data],)j(page)f(165\).)225 3652 y Fy(\017)60 b FB(The)28 b(`)p Fz(--profile)p FB(')f(option)i(and) e Fz(pgawk)p FB(,)h(the)h(pro\014ling)f(v)m(ersion)h(of)g Fz(gawk)p FB(,)f(for)g(pro)s(ducing)f(execu-)330 3762 y(tion)22 b(pro\014les)f(of)h Fz(awk)f FB(programs)g(\(see)h(Section)h (10.5)g([Pro\014ling)f(Y)-8 b(our)21 b Fz(awk)g FB(Programs],)j(page)e (169\).)225 3893 y Fy(\017)60 b FB(The)20 b(`)p Fz(--enable-portals)p FB(')c(con\014guration)21 b(option)g(to)g(enable)g(sp)s(ecial)g (treatmen)m(t)h(of)e(pathnames)330 4003 y(that)32 b(b)s(egin)f(with)g (`)p Fz(/p)p FB(')g(as)h(BSD)f(p)s(ortals)g(\(see)i(Section)f(10.4)h ([Using)e Fz(gawk)g FB(with)g(BSD)g(P)m(ortals],)330 4113 y(page)g(169\).)225 4244 y Fy(\017)60 b FB(The)42 b(use)f(of)i(GNU)f(Automak)m(e)i(to)f(help)f(in)f(standardizing)i(the)f (con\014guration)g(pro)s(cess)g(\(see)330 4354 y(Section)31 b(B.2.1)h([Compiling)f Fz(gawk)e FB(for)h(Unix],)h(page)g(264\).)225 4485 y Fy(\017)60 b FB(The)34 b(use)g(of)h(GNU)g Fz(gettext)d FB(for)i Fz(gawk)p FB('s)g(o)m(wn)g(message)i(output)e(\(see)h(Section) g(9.6)h([)p Fz(gawk)d FB(Can)330 4595 y(Sp)s(eak)d(Y)-8 b(our)30 b(Language],)i(page)f(163\).)225 4726 y Fy(\017)60 b FB(BeOS)30 b(supp)s(ort)f(\(see)i(Section)g(B.3.2)i([Installing)e Fz(gawk)e FB(on)h(BeOS],)h(page)g(266\).)225 4858 y Fy(\017)60 b FB(T)-8 b(andem)30 b(supp)s(ort)f(\(see)i(Section)g(B.4.2)h ([Installing)g Fz(gawk)d FB(on)h(a)h(T)-8 b(andem],)30 b(page)h(275\).)225 4989 y Fy(\017)60 b FB(The)25 b(A)m(tari)i(p)s(ort) e(b)s(ecame)h(o\016cially)h(unsupp)s(orted)c(\(see)k(Section)f(B.4.1)h ([Installing)g Fz(gawk)d FB(on)i(the)330 5099 y(A)m(tari)32 b(ST],)e(page)h(274\).)225 5230 y Fy(\017)60 b FB(The)27 b(source)g(co)s(de)h(no)m(w)f(uses)g(new-st)m(yle)i(function)e (de\014nitions,)h(with)f Fz(ansi2knr)e FB(to)j(con)m(v)m(ert)h(the)330 5340 y(co)s(de)i(on)f(systems)g(with)g(old)h(compilers.)p eop end %%Page: 258 270 TeXDict begin 258 269 bop 150 -116 a FB(258)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)225 299 y Fy(\017)60 b FB(The)38 b(`)p Fz(--disable-lint)p FB(')e(con\014guration)j(option)g(to)h(disable)f(lin)m(t)g(c)m(hec)m (king)i(at)e(compile)h(time)330 408 y(\(see)31 b(Section)h(B.2.2)g ([Additional)f(Con\014guration)f(Options],)g(page)h(264\).)225 541 y Fy(\017)60 b FB(POSIX)28 b(compliance)j(for)e Fz(sub)f FB(and)g Fz(gsub)g FB(\(see)j(Section)f(8.1.3.1)h([More)f(Ab)s(out)f(`) p Fz(\\)p FB(')g(and)g(`)p Fz(&)p FB(')g(with)330 651 y Fz(sub)p FB(,)h Fz(gsub)p FB(,)f(and)h Fz(gensub)p FB(],)f(page)i(137\).)225 784 y Fy(\017)60 b FB(The)21 b(`)p Fz(--exec)p FB(')g(option,)k(for)c(use)h(in)g(CGI)f(scripts.)38 b(\(see)23 b(Section)g(11.2)g([Command-Line)f(Options],)330 893 y(page)31 b(173\).)225 1026 y Fy(\017)60 b FB(The)24 b Fz(length)f FB(function)h(w)m(as)g(extended)h(to)g(accept)h(an)e (arra)m(y)h(argumen)m(t)g(and)e(return)h(the)g(n)m(um)m(b)s(er)330 1136 y(of)30 b(elemen)m(ts)g(in)f(the)h(arra)m(y)g(\(see)g(Section)h (8.1.3)g([String-Manipulation)f(F)-8 b(unctions],)31 b(page)f(129\).)150 1365 y FA(A.6)67 b(Ma)7 b(jor)46 b(Con)l(tributors)g(to)f Fq(gawk)390 1524 y Fw(A)n(lways)33 b(give)f(cr)-5 b(e)g(dit)34 b(wher)-5 b(e)34 b(cr)-5 b(e)g(dit)33 b(is)g(due.)390 1634 y FB(Anon)m(ymous)275 1767 y(This)j(section)j(names)e(the)h(ma)5 b(jor)37 b(con)m(tributors)h (to)g Fz(gawk)e FB(and/or)i(this)f(b)s(o)s(ok,)i(in)e(appro)m(ximate) 150 1876 y(c)m(hronological)c(order:)225 2009 y Fy(\017)60 b FB(Dr.)33 b(Alfred)f(V.)h(Aho,)h(Dr.)e(P)m(eter)i(J.)f(W)-8 b(ein)m(b)s(erger,)34 b(and)e(Dr.)h(Brian)f(W.)i(Kernighan,)e(all)i(of) f(Bell)330 2119 y(Lab)s(oratories,)d(designed)e(and)g(implemen)m(ted)g (Unix)h Fz(awk)p FB(,)f(from)g(whic)m(h)g Fz(gawk)f FB(gets)i(the)g(ma) 5 b(jorit)m(y)330 2228 y(of)31 b(its)f(feature)h(set.)225 2361 y Fy(\017)60 b FB(P)m(aul)27 b(Rubin)e(did)g(the)i(initial)g (design)f(and)g(implemen)m(tation)i(in)e(1986,)j(and)d(wrote)g(the)h (\014rst)e(draft)330 2471 y(\(around)30 b(40)h(pages\))g(of)g(this)f(b) s(o)s(ok.)225 2604 y Fy(\017)60 b FB(Ja)m(y)31 b(F)-8 b(enlason)31 b(\014nished)e(the)i(initial)g(implemen)m(tation.)225 2736 y Fy(\017)60 b FB(Diane)31 b(Close)g(revised)g(the)f(\014rst)g (draft)g(of)g(this)h(b)s(o)s(ok,)f(bringing)f(it)i(to)g(around)f(90)h (pages.)225 2869 y Fy(\017)60 b FB(Ric)m(hard)33 b(Stallman)h(help)s (ed)e(\014nish)g(the)h(implemen)m(tation)i(and)d(the)i(initial)g(draft) f(of)g(this)g(b)s(o)s(ok.)330 2979 y(He)e(is)f(also)i(the)e(founder)f (of)i(the)f(FSF)h(and)f(the)g(GNU)h(pro)5 b(ject.)225 3112 y Fy(\017)60 b FB(John)28 b(W)-8 b(o)s(o)s(ds)29 b(con)m(tributed)h(parts)f(of)g(the)g(co)s(de)g(\(mostly)h(\014xes\))g (in)e(the)i(initial)g(v)m(ersion)g(of)f Fz(gawk)p FB(.)225 3244 y Fy(\017)60 b FB(In)25 b(1988,)j(Da)m(vid)f(T)-8 b(rueman)25 b(to)s(ok)h(o)m(v)m(er)h(primary)d(main)m(tenance)j(of)f Fz(gawk)p FB(,)g(making)g(it)g(compatible)330 3354 y(with)k(\\new")h Fz(awk)p FB(,)f(and)f(greatly)j(impro)m(ving)f(its)f(p)s(erformance.) 225 3487 y Fy(\017)60 b FB(P)m(at)31 b(Rankin)f(pro)m(vided)g(the)h (VMS)f(p)s(ort)g(and)g(its)h(do)s(cumen)m(tation.)225 3620 y Fy(\017)60 b FB(Conrad)37 b(Kw)m(ok,)j(Scott)f(Gar\014nkle,)h (and)d(Ken)m(t)h(Williams)h(did)e(the)i(initial)g(p)s(orts)e(to)h (MS-DOS)330 3729 y(with)30 b(v)-5 b(arious)30 b(v)m(ersions)h(of)g (MSC.)225 3862 y Fy(\017)60 b FB(Hal)31 b(P)m(eterson)g(pro)m(vided)f (help)g(in)g(p)s(orting)g Fz(gawk)g FB(to)h(Cra)m(y)f(systems.)225 3995 y Fy(\017)60 b FB(Kai)31 b(Uw)m(e)g(Rommel)g(pro)m(vided)f(the)g (initial)i(p)s(ort)e(to)h(OS/2)f(and)g(its)h(do)s(cumen)m(tation.)225 4128 y Fy(\017)60 b FB(Mic)m(hal)42 b(Jaegermann)f(pro)m(vided)f(the)g (p)s(ort)g(to)h(A)m(tari)h(systems)e(and)g(its)h(do)s(cumen)m(tation.) 71 b(He)330 4237 y(con)m(tin)m(ues)29 b(to)f(pro)m(vide)f(p)s (ortabilit)m(y)i(c)m(hec)m(king)g(with)e(DEC)g(Alpha)h(systems,)g(and)f (has)g(done)g(a)h(lot)330 4347 y(of)j(w)m(ork)f(to)h(mak)m(e)g(sure)f Fz(gawk)f FB(w)m(orks)i(on)f(non-32-bit)h(systems.)225 4480 y Fy(\017)60 b FB(F)-8 b(red)31 b(Fish)f(pro)m(vided)g(the)g(p)s (ort)g(to)h(Amiga)h(systems)e(and)g(its)h(do)s(cumen)m(tation.)225 4613 y Fy(\017)60 b FB(Scott)31 b(Dei\014k)g(curren)m(tly)g(main)m (tains)g(the)f(MS-DOS)g(p)s(ort.)225 4746 y Fy(\017)60 b FB(Juan)29 b(Grigera)j(main)m(tains)f(the)g(p)s(ort)e(to)j(Windo)m (ws32)f(systems.)225 4878 y Fy(\017)60 b FB(Dr.)37 b(Darrel)h(Hank)m (erson)f(acts)h(as)f(co)s(ordinator)h(for)e(the)i(v)-5 b(arious)36 b(p)s(orts)h(to)g(di\013eren)m(t)h(PC)e(plat-)330 4988 y(forms)h(and)g(creates)i(binary)e(distributions)g(for)g(v)-5 b(arious)38 b(PC)f(op)s(erating)h(systems.)62 b(He)38 b(is)g(also)330 5098 y(instrumen)m(tal)31 b(in)f(k)m(eeping)h(the)f(do) s(cumen)m(tation)i(up)d(to)i(date)g(for)f(the)h(v)-5 b(arious)30 b(PC)g(platforms.)225 5230 y Fy(\017)60 b FB(Christos)30 b(Zoulas)g(pro)m(vided)g(the)g Fz(extension)e FB(built-in)i(function)g(for)g(dynamically)h(adding)e(new)330 5340 y(mo)s(dules.)p eop end %%Page: 259 271 TeXDict begin 259 270 bop 1567 -116 a Fr(App)s(endix)28 b(A:)i(The)g(Ev)m(olution)i(of)e(the)h Fz(awk)e Fr(Language)92 b FB(259)225 299 y Fy(\017)60 b FB(J)s(\177)-48 b(urgen)29 b(Kahrs)f(con)m(tributed)i(the)g(initial)g(v)m(ersion)g(of)g(the)g (TCP/IP)f(net)m(w)m(orking)h(co)s(de)g(and)f(do)s(c-)330 408 y(umen)m(tation,)j(and)d(motiv)-5 b(ated)32 b(the)f(inclusion)f(of) h(the)f(`)p Fz(|&)p FB(')g(op)s(erator.)225 543 y Fy(\017)60 b FB(Stephen)29 b(Da)m(vies)k(pro)m(vided)d(the)g(p)s(ort)g(to)h(T)-8 b(andem)30 b(systems)g(and)g(its)h(do)s(cumen)m(tation.)225 677 y Fy(\017)60 b FB(Martin)31 b(Bro)m(wn)f(pro)m(vided)g(the)h(p)s (ort)f(to)h(BeOS)f(and)g(its)g(do)s(cumen)m(tation.)225 812 y Fy(\017)60 b FB(Arno)29 b(P)m(eters)h(did)e(the)h(initial)i(w)m (ork)e(to)h(con)m(v)m(ert)g Fz(gawk)e FB(to)i(use)f(GNU)h(Automak)m(e)g (and)f Fz(gettext)p FB(.)225 946 y Fy(\017)60 b FB(Alan)35 b(J.)f(Bro)s(der)g(pro)m(vided)g(the)h(initial)h(v)m(ersion)f(of)g(the) f Fz(asort)g FB(function)g(as)h(w)m(ell)g(as)g(the)g(co)s(de)330 1056 y(for)30 b(the)h(new)f(optional)h(third)f(argumen)m(t)g(to)i(the)e Fz(match)f FB(function.)225 1191 y Fy(\017)60 b FB(Andreas)30 b(Buening)g(up)s(dated)f(the)i Fz(gawk)e FB(p)s(ort)h(for)g(OS/2.)330 1325 y(Isam)m(u)g(Hasega)m(w)m(a,)k(of)c(IBM)h(in)f(Japan,)g(con)m (tributed)h(supp)s(ort)d(for)j(m)m(ultib)m(yte)g(c)m(haracters.)330 1460 y(Mic)m(hael)h(Benzinger)g(con)m(tributed)e(the)h(initial)g(co)s (de)g(for)f Fz(switch)f FB(statemen)m(ts.)330 1594 y(P)m(atric)m(k)g (T.J.)f(McPhee)g(con)m(tributed)g(the)g(co)s(de)g(for)g(dynamic)f (loading)i(in)e(Windo)m(ws32)i(en)m(viron-)330 1704 y(men)m(ts.)225 1838 y Fy(\017)60 b FB(Arnold)27 b(Robbins)g(has)g(b)s(een)g(w)m (orking)h(on)g Fz(gawk)e FB(since)i(1988,)j(at)d(\014rst)f(helping)h (Da)m(vid)g(T)-8 b(rueman,)330 1948 y(and)30 b(as)g(the)h(primary)e (main)m(tainer)j(since)e(around)g(1994.)p eop end %%Page: 260 272 TeXDict begin 260 271 bop 150 -116 a FB(260)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fu(App)t(endix)52 b(B)81 b(Installing)52 b Fi(gawk)150 543 y FB(This)35 b(app)s(endix)g(pro)m(vides)h(instructions)g(for)g (installing)h Fz(gawk)e FB(on)h(the)g(v)-5 b(arious)36 b(platforms)g(that)h(are)150 653 y(supp)s(orted)i(b)m(y)h(the)h(dev)m (elop)s(ers.)72 b(The)40 b(primary)f(dev)m(elop)s(er)i(supp)s(orts)e (GNU/Lin)m(ux)i(\(and)f(Unix\),)150 762 y(whereas)32 b(the)h(other)f(p)s(orts)g(are)h(con)m(tributed.)47 b(See)32 b(Section)i(B.5)f([Rep)s(orting)g(Problems)f(and)f(Bugs],)150 872 y(page)g(276,)h(for)e(the)h(electronic)h(mail)f(addresses)f(of)g (the)h(p)s(eople)f(who)g(did)g(the)g(resp)s(ectiv)m(e)i(p)s(orts.)150 1110 y FA(B.1)67 b(The)45 b Fq(gawk)e FA(Distribution)150 1269 y FB(This)32 b(section)j(describ)s(es)d(ho)m(w)h(to)h(get)g(the)f Fz(gawk)f FB(distribution,)i(ho)m(w)f(to)h(extract)g(it,)h(and)d(then)h (what)150 1379 y(is)d(in)g(the)h(v)-5 b(arious)30 b(\014les)h(and)e (sub)s(directories.)150 1581 y Fj(B.1.1)63 b(Getting)41 b(the)g Fh(gawk)g Fj(Distribution)150 1728 y FB(There)30 b(are)h(three)f(w)m(a)m(ys)h(to)h(get)f(GNU)g(soft)m(w)m(are:)225 1866 y Fy(\017)60 b FB(Cop)m(y)30 b(it)h(from)f(someone)h(else)h(who)d (already)i(has)g(it.)225 2002 y Fy(\017)60 b FB(Order)39 b Fz(gawk)h FB(directly)h(from)f(the)h(F)-8 b(ree)41 b(Soft)m(w)m(are)h(F)-8 b(oundation.)72 b(Soft)m(w)m(are)42 b(distributions)e(are)330 2112 y(a)m(v)-5 b(ailable)36 b(for)e(Gn)m(u/Lin)m(ux,)g(Unix,)h(and)e(MS-Windo)m(ws,)i(in)e(sev)m (eral)i(CD)f(pac)m(k)-5 b(ages.)53 b(Their)33 b(ad-)330 2222 y(dress)d(is:)570 2358 y(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation)570 2467 y(51)31 b(F)-8 b(ranklin)31 b(Street,)g(Fifth)g (Flo)s(or)570 2577 y(Boston,)h(MA)61 b(02110-1301)34 b(USA)570 2687 y(Phone:)c Fz(+)p FB(1-617-542-5942)570 2796 y(F)-8 b(ax)32 b(\(including)e(Japan\):)g Fz(+)p FB(1-617-542-2652)570 2906 y(Email:)h Fz(gnu@gnu.org)570 3015 y FB(URL:)f Fz(http://www.gnu.org)330 3152 y FB(Ordering)36 b(from)g(the)h(FSF)f(directly)i(con)m(tributes)f(to)g(the)g(supp)s(ort) e(of)i(the)g(foundation)f(and)g(to)330 3261 y(the)31 b(pro)s(duction)e(of)h(more)h(free)f(soft)m(w)m(are.)225 3397 y Fy(\017)60 b FB(Retriev)m(e)37 b Fz(gawk)d FB(b)m(y)h(using)f (anon)m(ymous)h Fz(ftp)g FB(to)g(the)h(In)m(ternet)f(host)g Fz(ftp.gnu.org)p FB(,)f(in)h(the)g(di-)330 3507 y(rectory)c(`)p Fz(/gnu/gawk)p FB('.)275 3672 y(The)g(GNU)i(soft)m(w)m(are)g(arc)m(hiv) m(e)h(is)e(mirrored)g(around)f(the)h(w)m(orld.)46 b(The)31 b(up-to-date)j(list)e(of)h(mirror)150 3781 y(sites)23 b(is)g(a)m(v)-5 b(ailable)25 b(from)e(the)g(main)f(FSF)h(w)m(eb)g(site) h(\()p Fz(http://www.gnu.org/order)o(/ft)o(p.ht)o(ml)p FB(\).)32 b(T)-8 b(ry)150 3891 y(to)28 b(use)f(one)h(of)f(the)h (mirrors;)f(they)h(will)g(b)s(e)e(less)i(busy)-8 b(,)27 b(and)g(y)m(ou)h(can)f(usually)g(\014nd)f(one)i(closer)g(to)g(y)m(our) 150 4000 y(site.)150 4203 y Fj(B.1.2)63 b(Extracting)39 b(the)i(Distribution)150 4350 y Fz(gawk)29 b FB(is)i(distributed)e(as)i (a)f Fz(tar)g FB(\014le)g(compressed)g(with)g(the)h(GNU)g(Zip)f (program,)g Fz(gzip)p FB(.)275 4488 y(Once)23 b(y)m(ou)h(ha)m(v)m(e)g (the)g(distribution)f(\(for)g(example,)j(`)p Fz(gawk-3.1.5.tar.gz)p FB('\),)21 b(use)i Fz(gzip)f FB(to)j(expand)150 4597 y(the)34 b(\014le)f(and)g(then)g(use)g Fz(tar)g FB(to)h(extract)h(it.) 51 b(Y)-8 b(ou)34 b(can)f(use)h(the)f(follo)m(wing)i(pip)s(eline)e(to)h (pro)s(duce)f(the)150 4707 y Fz(gawk)c FB(distribution:)390 4845 y Fz(#)47 b(Under)g(System)f(V,)h(add)g('o')g(to)g(the)g(tar)g (options)390 4955 y(gzip)g(-d)g(-c)g(gawk-3.1.5.tar.gz)c(|)48 b(tar)e(-xvpf)h(-)150 5092 y FB(This)30 b(creates)h(a)g(directory)g (named)f(`)p Fz(gawk-3.1.5)p FB(')e(in)i(the)h(curren)m(t)f(directory) -8 b(.)275 5230 y(The)34 b(distribution)f(\014le)i(name)g(is)f(of)h (the)g(form)f(`)p Fz(gawk-)p Fk(V)p Fz(.)p Fk(R)p Fz(.)p Fk(P)p Fz(.tar.gz)p FB('.)49 b(The)34 b Fx(V)46 b FB(represen)m(ts)35 b(the)150 5340 y(ma)5 b(jor)22 b(v)m(ersion)g(of)g Fz(gawk)p FB(,)g(the)g Fx(R)g FB(represen)m(ts)f(the)h(curren)m(t)f(release)i(of) f(v)m(ersion)g Fx(V)p FB(,)g(and)f(the)h Fx(P)27 b FB(represen)m(ts)p eop end %%Page: 261 273 TeXDict begin 261 272 bop 2388 -116 a Fr(App)s(endix)28 b(B:)j(Installing)g Fz(gawk)90 b FB(261)150 299 y(a)34 b Fx(patc)m(h)f(lev)m(el)p FB(,)j(meaning)d(that)h(minor)f(bugs)f(ha)m (v)m(e)i(b)s(een)f(\014xed)f(in)h(the)g(release.)51 b(The)32 b(curren)m(t)h(patc)m(h)150 408 y(lev)m(el)39 b(is)f(5,)i(but)d(when)f (retrieving)i(distributions,)h(y)m(ou)f(should)e(get)j(the)f(v)m (ersion)g(with)f(the)h(highest)150 518 y(v)m(ersion,)30 b(release,)h(and)d(patc)m(h)h(lev)m(el.)42 b(\(Note,)31 b(ho)m(w)m(ev)m(er,)g(that)e(patc)m(h)h(lev)m(els)g(greater)g(than)f (or)g(equal)g(to)150 628 y(80)g(denote)g(\\b)s(eta")h(or)e(nonpro)s (duction)f(soft)m(w)m(are;)k(y)m(ou)e(migh)m(t)g(not)f(w)m(an)m(t)i(to) f(retriev)m(e)h(suc)m(h)e(a)g(v)m(ersion)150 737 y(unless)h(y)m(ou)i (don't)f(mind)f(exp)s(erimen)m(ting.\))41 b(If)30 b(y)m(ou)h(are)f(not) h(on)f(a)g(Unix)g(system,)h(y)m(ou)f(need)g(to)h(mak)m(e)150 847 y(other)g(arrangemen)m(ts)g(for)f(getting)i(and)d(extracting)j(the) f Fz(gawk)e FB(distribution.)40 b(Y)-8 b(ou)31 b(should)e(consult)i(a) 150 956 y(lo)s(cal)h(exp)s(ert.)150 1225 y Fj(B.1.3)63 b(Con)m(ten)m(ts)40 b(of)i(the)e Fh(gawk)i Fj(Distribution)150 1372 y FB(The)33 b Fz(gawk)f FB(distribution)h(has)g(a)h(n)m(um)m(b)s (er)e(of)i(C)f(source)g(\014les,)i(do)s(cumen)m(tation)f(\014les,)g (sub)s(directories,)150 1482 y(and)40 b(\014les)h(related)g(to)h(the)e (con\014guration)h(pro)s(cess)g(\(see)g(Section)h(B.2)f([Compiling)g (and)f(Installing)150 1591 y Fz(gawk)e FB(on)g(Unix],)j(page)f(264\),)i (as)d(w)m(ell)h(as)f(sev)m(eral)h(sub)s(directories)e(related)i(to)f (di\013eren)m(t)g(non-Unix)150 1701 y(op)s(erating)31 b(systems:)150 1965 y(V)-8 b(arious)31 b(`)p Fz(.c)p FB(',)g(`)p Fz(.y)p FB(',)f(and)g(`)p Fz(.h)p FB(')g(\014les)630 2074 y(The)g(actual)i Fz(gawk)d FB(source)h(co)s(de.)150 2303 y(`)p Fz(README)p FB(')150 2413 y(`)p Fz(README_d/README.*)p FB(')630 2522 y(Descriptiv)m(e)42 b(\014les:)62 b(`)p Fz(README)p FB(')39 b(for)h Fz(gawk)g FB(under)f(Unix)h(and)g(the)h (rest)g(for)f(the)h(v)-5 b(arious)630 2632 y(hardw)m(are)30 b(and)g(soft)m(w)m(are)i(com)m(binations.)150 2861 y(`)p Fz(INSTALL)p FB(')94 b(A)30 b(\014le)h(pro)m(viding)f(an)h(o)m(v)m (erview)g(of)g(the)g(con\014guration)f(and)g(installation)i(pro)s (cess.)150 3090 y(`)p Fz(ChangeLog)p FB(')630 3199 y(A)c(detailed)i (list)e(of)h(source)f(co)s(de)h(c)m(hanges)g(as)f(bugs)g(are)g(\014xed) g(or)g(impro)m(v)m(emen)m(ts)i(made.)150 3428 y(`)p Fz(NEWS)p FB(')238 b(A)30 b(list)i(of)e(c)m(hanges)h(to)h Fz(gawk)d FB(since)h(the)h(last)g(release)h(or)e(patc)m(h.)150 3657 y(`)p Fz(COPYING)p FB(')94 b(The)30 b(GNU)h(General)g(Public)f (License.)150 3886 y(`)p Fz(FUTURES)p FB(')94 b(A)26 b(brief)g(list)h(of)g(features)f(and)g(c)m(hanges)h(b)s(eing)f(con)m (templated)i(for)e(future)g(releases,)i(with)630 3996 y(some)j(indication)g(of)g(the)f(time)h(frame)f(for)h(the)f(feature,)h (based)f(on)h(its)f(di\016cult)m(y)-8 b(.)150 4225 y(`)p Fz(LIMITATIONS)p FB(')630 4334 y(A)31 b(list)g(of)f(those)h(factors)g (that)h(limit)f Fz(gawk)p FB('s)e(p)s(erformance.)40 b(Most)32 b(of)e(these)h(dep)s(end)e(on)630 4444 y(the)i(hardw)m(are)f (or)g(op)s(erating)h(system)f(soft)m(w)m(are)i(and)e(are)h(not)f (limits)h(in)f Fz(gawk)g FB(itself.)150 4673 y(`)p Fz(POSIX.STD)p FB(')630 4782 y(A)h(description)g(of)g(one)g(area)h(in)f(whic)m(h)f (the)h(POSIX)f(standard)g(for)h Fz(awk)f FB(is)h(incorrect)h(as)630 4892 y(w)m(ell)f(as)g(ho)m(w)f Fz(gawk)g FB(handles)f(the)i(problem.) 150 5121 y(`)p Fz(doc/awkforai.txt)p FB(')630 5230 y(A)f(short)g (article)i(describing)f(wh)m(y)e Fz(gawk)h FB(is)g(a)h(go)s(o)s(d)f (language)i(for)e(AI)g(\(Arti\014cial)i(In)m(tel-)630 5340 y(ligence\))g(programming.)p eop end %%Page: 262 274 TeXDict begin 262 273 bop 150 -116 a FB(262)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(`)p Fz(doc/README.card)p FB(')150 408 y(`)p Fz(doc/ad.block)p FB(')150 518 y(`)p Fz(doc/awkcard.in)p FB(')150 628 y(`)p Fz(doc/cardfonts)p FB(')150 737 y(`)p Fz(doc/colors)p FB(')150 847 y(`)p Fz(doc/macros)p FB(')150 956 y(`)p Fz(doc/no.colors)p FB(')150 1066 y(`)p Fz(doc/setter.outline) p FB(')630 1176 y(The)22 b Fz(troff)g FB(source)h(for)g(a)g(\014v)m (e-color)i Fz(awk)d FB(reference)h(card.)38 b(A)23 b(mo)s(dern)f(v)m (ersion)h(of)g Fz(troff)630 1285 y FB(suc)m(h)j(as)h(GNU)g Fz(troff)e FB(\()p Fz(groff)p FB(\))h(is)g(needed)g(to)h(pro)s(duce)f (the)g(color)i(v)m(ersion.)40 b(See)26 b(the)h(\014le)630 1395 y(`)p Fz(README.card)p FB(')h(for)i(instructions)g(if)g(y)m(ou)h (ha)m(v)m(e)h(an)e(older)h Fz(troff)p FB(.)150 1655 y(`)p Fz(doc/gawk.1)p FB(')630 1765 y(The)k Fz(troff)g FB(source)h(for)g(a)g (man)m(ual)g(page)h(describing)f Fz(gawk)p FB(.)56 b(This)35 b(is)h(distributed)f(for)630 1874 y(the)c(con)m(v)m(enience)h(of)f (Unix)f(users.)150 2134 y(`)p Fz(doc/gawk.texi)p FB(')630 2244 y(The)43 b(T)-8 b(exinfo)44 b(source)g(\014le)g(for)f(this)h(b)s (o)s(ok.)80 b(It)44 b(should)f(b)s(e)g(pro)s(cessed)g(with)g(T)3507 2264 y(E)3557 2244 y(X)h(to)630 2354 y(pro)s(duce)28 b(a)i(prin)m(ted)e(do)s(cumen)m(t,)i(and)e(with)h Fz(makeinfo)e FB(to)j(pro)s(duce)e(an)h(Info)g(or)g(HTML)630 2463 y(\014le.)150 2724 y(`)p Fz(doc/gawk.info)p FB(')630 2833 y(The)h(generated)h(Info)f (\014le)h(for)f(this)g(b)s(o)s(ok.)150 3093 y(`)p Fz(doc/gawkinet.texi) p FB(')630 3203 y(The)36 b(T)-8 b(exinfo)36 b(source)h(\014le)f(for)g Fx(TCP/IP)g(In)m(ternet)m(w)m(orking)h(with)f Fz(gawk)p FB(.)57 b(It)36 b(should)g(b)s(e)630 3313 y(pro)s(cessed)44 b(with)h(T)1325 3332 y(E)1375 3313 y(X)g(to)h(pro)s(duce)e(a)h(prin)m (ted)g(do)s(cumen)m(t)f(and)h(with)f Fz(makeinfo)f FB(to)630 3422 y(pro)s(duce)29 b(an)h(Info)g(or)h(HTML)f(\014le.)150 3682 y(`)p Fz(doc/gawkinet.info)p FB(')630 3792 y(The)g(generated)h (Info)f(\014le)h(for)f Fx(TCP/IP)f(In)m(ternet)m(w)m(orking)j(with)e Fz(gawk)p FB(.)150 4052 y(`)p Fz(doc/igawk.1)p FB(')630 4162 y(The)k Fz(troff)e FB(source)j(for)e(a)i(man)m(ual)f(page)h (describing)f(the)g Fz(igawk)f FB(program)h(presen)m(ted)630 4271 y(in)c(Section)h(13.3.9)i([An)d(Easy)h(W)-8 b(a)m(y)32 b(to)f(Use)g(Library)e(F)-8 b(unctions],)31 b(page)h(244.)150 4532 y(`)p Fz(doc/Makefile.in)p FB(')630 4641 y(The)44 b(input)f(\014le)h(used)f(during)g(the)h(con\014guration)g(pro)s(cess)g (to)h(generate)g(the)g(actual)630 4751 y(`)p Fz(Makefile)p FB(')29 b(for)h(creating)i(the)e(do)s(cumen)m(tation.)150 5011 y(`)p Fz(Makefile.am)p FB(')150 5121 y(`)p Fz(*/Makefile.am)p FB(')630 5230 y(Files)40 b(used)f(b)m(y)g(the)h(GNU)g Fz(automake)d FB(soft)m(w)m(are)k(for)e(generating)i(the)f(`)p Fz(Makefile.in)p FB(')630 5340 y(\014les)30 b(used)g(b)m(y)g Fz(autoconf)e FB(and)i Fz(configure)p FB(.)p eop end %%Page: 263 275 TeXDict begin 263 274 bop 2388 -116 a Fr(App)s(endix)28 b(B:)j(Installing)g Fz(gawk)90 b FB(263)150 299 y(`)p Fz(Makefile.in)p FB(')150 408 y(`)p Fz(acconfig.h)p FB(')150 518 y(`)p Fz(acinclude.m4)p FB(')150 628 y(`)p Fz(aclocal.m4)p FB(')150 737 y(`)p Fz(configh.in)p FB(')150 847 y(`)p Fz(configure.in)p FB(')150 956 y(`)p Fz(configure)p FB(')150 1066 y(`)p Fz(custom.h)p FB(')150 1176 y(`)p Fz(missing_d/*)p FB(')150 1285 y(`)p Fz(m4/*)p FB(')238 b(These)29 b(\014les)g(and)g (sub)s(directories)g(are)g(used)g(when)f(con\014guring)h Fz(gawk)f FB(for)h(v)-5 b(arious)29 b(Unix)630 1395 y(systems.)42 b(They)30 b(are)h(explained)g(in)f(Section)i(B.2)f([Compiling)g(and)f (Installing)i Fz(gawk)d FB(on)630 1504 y(Unix],)i(page)g(264.)150 1694 y(`)p Fz(po/*)p FB(')238 b(The)30 b(`)p Fz(po)p FB(')g(library)g(con)m(tains)i(message)f(translations.)150 1884 y(`)p Fz(awklib/extract.awk)p FB(')150 1993 y(`)p Fz(awklib/Makefile.am)p FB(')150 2103 y(`)p Fz(awklib/Makefile.in)p FB(')150 2212 y(`)p Fz(awklib/eg/*)p FB(')630 2322 y(The)39 b(`)p Fz(awklib)p FB(')g(directory)h(con)m(tains)g(a)g(cop)m(y)h(of)f (`)p Fz(extract.awk)p FB(')d(\(see)j(Section)h(13.3.7)630 2431 y([Extracting)28 b(Programs)f(from)f(T)-8 b(exinfo)27 b(Source)g(Files],)i(page)f(240\),)h(whic)m(h)e(can)g(b)s(e)f(used)630 2541 y(to)d(extract)g(the)f(sample)h(programs)e(from)h(the)g(T)-8 b(exinfo)23 b(source)f(\014le)g(for)g(this)g(b)s(o)s(ok.)37 b(It)22 b(also)630 2651 y(con)m(tains)30 b(a)g(`)p Fz(Makefile.in)p FB(')d(\014le,)j(whic)m(h)f Fz(configure)d FB(uses)j(to)h(generate)h(a) e(`)p Fz(Makefile)p FB('.)630 2760 y(`)p Fz(Makefile.am)p FB(')22 b(is)i(used)f(b)m(y)h(GNU)h(Automak)m(e)g(to)g(create)h(`)p Fz(Makefile.in)p FB('.)36 b(The)23 b(library)630 2870 y(functions)41 b(from)g(Chapter)f(12)i([A)g(Library)f(of)g Fz(awk)f FB(F)-8 b(unctions],)45 b(page)d(181,)k(and)41 b(the)630 2979 y Fz(igawk)32 b FB(program)i(from)g(Section)g(13.3.9)i ([An)e(Easy)g(W)-8 b(a)m(y)36 b(to)f(Use)f(Library)f(F)-8 b(unctions],)630 3089 y(page)32 b(244,)i(are)e(included)f(as)g (ready-to-use)i(\014les)e(in)h(the)f Fz(gawk)g FB(distribution.)43 b(They)32 b(are)630 3199 y(installed)37 b(as)f(part)f(of)h(the)g (installation)i(pro)s(cess.)57 b(The)35 b(rest)h(of)g(the)g(programs)g (in)f(this)630 3308 y(b)s(o)s(ok)30 b(are)h(a)m(v)-5 b(ailable)32 b(in)e(appropriate)h(sub)s(directories)f(of)g(`)p Fz(awklib/eg)p FB('.)150 3498 y(`)p Fz(unsupported/atari/*)p FB(')630 3607 y(Files)41 b(needed)f(for)g(building)f Fz(gawk)g FB(on)h(an)g(A)m(tari)h(ST)e(\(see)i(Section)g(B.4.1)h ([Installing)630 3717 y Fz(gawk)29 b FB(on)h(the)h(A)m(tari)h(ST],)e (page)h(274,)h(for)e(details\).)150 3906 y(`)p Fz(unsupported/tandem/*) p FB(')630 4016 y(Files)g(needed)e(for)g(building)g Fz(gawk)g FB(on)g(a)h(T)-8 b(andem)28 b(\(see)i(Section)f(B.4.2)i([Installing)e Fz(gawk)630 4126 y FB(on)h(a)h(T)-8 b(andem],)31 b(page)g(275,)h(for)e (details\).)150 4315 y(`)p Fz(posix/*)p FB(')94 b(Files)31 b(needed)f(for)h(building)e Fz(gawk)g FB(on)i(POSIX-complian)m(t)g (systems.)150 4505 y(`)p Fz(pc/*)p FB(')238 b(Files)39 b(needed)g(for)f(building)f Fz(gawk)h FB(under)f(MS-DOS,)h(MS)g(Windo)m (ws)h(and)e(OS/2)i(\(see)630 4614 y(Section)31 b(B.3.3)h([Installation) g(on)f(PC)e(Op)s(erating)i(Systems],)f(page)h(266,)h(for)e(details\).) 150 4804 y(`)p Fz(vms/*)p FB(')190 b(Files)30 b(needed)f(for)h (building)e Fz(gawk)g FB(under)g(VMS)i(\(see)g(Section)g(B.3.4)h([Ho)m (w)g(to)f(Compile)630 4914 y(and)g(Install)h Fz(gawk)e FB(on)h(VMS],)h(page)g(271,)h(for)e(details\).)150 5103 y(`)p Fz(test/*)p FB(')142 b(A)38 b(test)h(suite)f(for)f Fz(gawk)p FB(.)62 b(Y)-8 b(ou)39 b(can)f(use)g(`)p Fz(make)29 b(check)p FB(')37 b(from)g(the)h(top-lev)m(el)i Fz(gawk)d FB(di-)630 5213 y(rectory)c(to)f(run)e(y)m(our)i(v)m(ersion)g(of)g Fz(gawk)f FB(against)i(the)f(test)h(suite.)45 b(If)31 b Fz(gawk)g FB(successfully)630 5322 y(passes)f(`)p Fz(make)g(check)p FB(',)f(then)h(y)m(ou)h(can)g(b)s(e)e(con\014den)m(t)i(of)f(a)h (successful)f(p)s(ort.)p eop end %%Page: 264 276 TeXDict begin 264 275 bop 150 -116 a FB(264)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FA(B.2)67 b(Compiling)47 b(and)d(Installing)j Fq(gawk)42 b FA(on)j(Unix)150 458 y FB(Usually)-8 b(,)34 b(y)m(ou)e(can)g(compile) i(and)d(install)i Fz(gawk)e FB(b)m(y)h(t)m(yping)g(only)h(t)m(w)m(o)g (commands.)46 b(Ho)m(w)m(ev)m(er,)35 b(if)d(y)m(ou)150 568 y(use)e(an)g(un)m(usual)g(system,)g(y)m(ou)h(ma)m(y)g(need)f(to)h (con\014gure)g Fz(gawk)e FB(for)h(y)m(our)g(system)h(y)m(ourself.)150 773 y Fj(B.2.1)63 b(Compiling)42 b Fh(gawk)f Fj(for)h(Unix)150 920 y FB(After)32 b(y)m(ou)g(ha)m(v)m(e)g(extracted)h(the)f Fz(gawk)e FB(distribution,)h Fz(cd)g FB(to)h(`)p Fz(gawk-3.1.5)p FB('.)42 b(Lik)m(e)32 b(most)g(GNU)g(soft-)150 1030 y(w)m(are,)43 b Fz(gawk)38 b FB(is)i(con\014gured)f(automatically)j(for)e(y)m(our)f (Unix)h(system)f(b)m(y)h(running)e(the)h Fz(configure)150 1139 y FB(program.)g(This)27 b(program)g(is)g(a)h(Bourne)f(shell)h (script)f(that)h(is)f(generated)h(automatically)j(using)26 b(GNU)150 1249 y Fz(autoconf)p FB(.)40 b(\(The)31 b Fz(autoconf)d FB(soft)m(w)m(are)k(is)f(describ)s(ed)f(fully)h(in)f Fx(Auto)s(conf|Generating)i(Automatic)150 1359 y(Con\014guration)e (Scripts)p FB(,)g(whic)m(h)g(is)h(a)m(v)-5 b(ailable)32 b(from)e(the)h(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation.\))275 1499 y(T)g(o)30 b(con\014gure)h Fz(gawk)p FB(,)e(simply)h(run)f Fz(configure)p FB(:)390 1640 y Fz(sh)47 b(./configure)275 1781 y FB(This)37 b(pro)s(duces)g(a)h(`)p Fz(Makefile)p FB(')e(and)i(`)p Fz(config.h)p FB(')e(tailored)j(to)g(y)m (our)f(system.)64 b(The)38 b(`)p Fz(config.h)p FB(')150 1890 y(\014le)d(describ)s(es)f(v)-5 b(arious)35 b(facts)h(ab)s(out)f(y) m(our)f(system.)55 b(Y)-8 b(ou)35 b(migh)m(t)h(w)m(an)m(t)g(to)g(edit)f (the)g(`)p Fz(Makefile)p FB(')e(to)150 2000 y(c)m(hange)38 b(the)f Fz(CFLAGS)e FB(v)-5 b(ariable,)39 b(whic)m(h)e(con)m(trols)h (the)f(command-line)g(options)g(that)h(are)f(passed)f(to)150 2109 y(the)31 b(C)f(compiler)g(\(suc)m(h)h(as)f(optimization)j(lev)m (els)f(or)e(compiling)h(for)f(debugging\).)275 2250 y(Alternativ)m(ely) -8 b(,)42 b(y)m(ou)c(can)g(add)f(y)m(our)h(o)m(wn)g(v)-5 b(alues)38 b(for)g(most)g Fz(make)e FB(v)-5 b(ariables)39 b(on)e(the)h(command)150 2360 y(line,)31 b(suc)m(h)f(as)h Fz(CC)e FB(and)h Fz(CFLAGS)p FB(,)f(when)g(running)g Fz(configure)p FB(:)390 2500 y Fz(CC=cc)46 b(CFLAGS=-g)g(sh)h (./configure)150 2641 y FB(See)31 b(the)f(\014le)h(`)p Fz(INSTALL)p FB(')e(in)h(the)g Fz(gawk)f FB(distribution)h(for)g(all)h (the)g(details.)275 2782 y(After)f(y)m(ou)h(ha)m(v)m(e)g(run)e Fz(configure)f FB(and)i(p)s(ossibly)f(edited)i(the)g(`)p Fz(Makefile)p FB(',)e(t)m(yp)s(e:)390 2922 y Fz(make)150 3063 y FB(Shortly)g(thereafter,)i(y)m(ou)f(should)f(ha)m(v)m(e)h(an)g (executable)h(v)m(ersion)f(of)g Fz(gawk)p FB(.)39 b(That's)30 b(all)g(there)g(is)g(to)g(it!)150 3173 y(T)-8 b(o)23 b(v)m(erify)h(that)f Fz(gawk)f FB(is)h(w)m(orking)g(prop)s(erly)-8 b(,)24 b(run)e(`)p Fz(make)29 b(check)p FB('.)37 b(All)24 b(of)f(the)g(tests)h(should)e(succeed.)38 b(If)150 3282 y(these)26 b(steps)g(do)g(not)g(w)m(ork,)h(or)e(if)h(an)m(y)g(of)g(the) g(tests)g(fail,)i(c)m(hec)m(k)f(the)f(\014les)g(in)f(the)h(`)p Fz(README_d)p FB(')e(directory)150 3392 y(to)30 b(see)f(if)g(y)m(ou'v)m (e)h(found)e(a)h(kno)m(wn)f(problem.)40 b(If)28 b(the)h(failure)g(is)g (not)g(describ)s(ed)f(there,)i(please)f(send)f(in)150 3501 y(a)j(bug)f(rep)s(ort)f(\(see)j(Section)f(B.5)g([Rep)s(orting)g (Problems)f(and)g(Bugs],)h(page)g(276.\))150 3707 y Fj(B.2.2)63 b(Additional)41 b(Con\014guration)h(Options)150 3854 y FB(There)36 b(are)h(sev)m(eral)g(additional)g(options)g(y)m(ou)g(ma)m (y)g(use)f(on)g(the)g Fz(configure)e FB(command)i(line)h(when)150 3963 y(compiling)31 b Fz(gawk)e FB(from)h(scratc)m(h,)i(including:)150 4132 y Fz(--enable-portals)630 4242 y FB(T)-8 b(reat)31 b(pathnames)f(that)h(b)s(egin)f(with)g(`)p Fz(/p)p FB(')g(as)h(BSD)g(p) s(ortal)f(\014les)g(when)g(doing)g(t)m(w)m(o-w)m(a)m(y)630 4351 y(I/O)37 b(with)h(the)f(`)p Fz(|&)p FB(')h(op)s(erator)f(\(see)i (Section)f(10.4)h([Using)f Fz(gawk)e FB(with)h(BSD)h(P)m(ortals],)630 4461 y(page)31 b(169\).)150 4626 y Fz(--enable-switch)630 4736 y FB(Enable)d(the)h(recognition)h(and)d(execution)j(of)e(C-st)m (yle)i Fz(switch)d FB(statemen)m(ts)j(in)e Fz(awk)f FB(pro-)630 4846 y(grams)j(\(see)i(Section)f(6.4.5)h([The)e Fz(switch)f FB(Statemen)m(t],)j(page)f(102.\))150 5011 y Fz(--disable-lint)630 5121 y FB(This)62 b(option)i(disables)f(all)h(lin)m(t)g(c)m(hec)m(king) h(within)e Fz(gawk)p FB(.)138 b(The)63 b(`)p Fz(--lint)p FB(')f(and)630 5230 y(`)p Fz(--lint-old)p FB(')41 b(options)i(\(see)h (Section)g(11.2)h([Command-Line)d(Options],)k(page)e(173\))630 5340 y(are)32 b(accepted,)i(but)d(silen)m(tly)i(do)f(nothing.)45 b(Similarly)-8 b(,)34 b(setting)f(the)f Fz(LINT)e FB(v)-5 b(ariable)33 b(\(see)p eop end %%Page: 265 277 TeXDict begin 265 276 bop 2388 -116 a Fr(App)s(endix)28 b(B:)j(Installing)g Fz(gawk)90 b FB(265)630 299 y(Section)32 b(6.5.1)g([Built-in)g(V)-8 b(ariables)33 b(That)e(Con)m(trol)g Fz(awk)p FB(],)g(page)g(107\))i(has)e(no)g(e\013ect)h(on)630 408 y(the)f(running)d Fz(awk)i FB(program.)630 541 y(When)k(used)g (with)g(GCC's)g(automatic)i(dead-co)s(de-elimination,)i(this)c(option)h (cuts)f(al-)630 651 y(most)23 b(200K)g(b)m(ytes)g(o\013)g(the)f(size)i (of)e(the)h Fz(gawk)e FB(executable)j(on)e(GNU/Lin)m(ux)h(x86)h (systems.)630 760 y(Results)h(on)g(other)h(systems)f(and)g(with)g (other)g(compilers)h(are)g(lik)m(ely)g(to)g(v)-5 b(ary)d(.)40 b(Using)25 b(this)630 870 y(option)31 b(ma)m(y)g(bring)e(y)m(ou)i(some) g(sligh)m(t)g(p)s(erformance)f(impro)m(v)m(emen)m(t.)630 1003 y(Using)40 b(this)f(option)h(will)f(cause)h(some)g(of)g(the)f (tests)h(in)g(the)f(test)h(suite)g(to)g(fail.)69 b(This)630 1112 y(option)31 b(ma)m(y)g(b)s(e)f(remo)m(v)m(ed)h(at)g(a)g(later)g (date.)150 1268 y Fz(--disable-nls)630 1378 y FB(Disable)37 b(all)f(message-translation)j(facilities.)59 b(This)35 b(is)g(usually)h(not)g(desirable,)h(but)e(it)630 1488 y(ma)m(y)c(bring)f(y)m(ou)g(some)h(sligh)m(t)h(p)s(erformance)d(impro)m (v)m(emen)m(t.)275 1644 y(As)35 b(of)i(v)m(ersion)f(3.1.5,)j(the)e(`)p Fz(--with-included-gettext)p FB(')30 b(con\014guration)36 b(option)g(is)g(no)g(longer)150 1753 y(a)m(v)-5 b(ailable,)28 b(since)c Fz(gawk)e FB(exp)s(ects)i(the)g(GNU)g Fz(gettext)e FB(library)h(to)h(b)s(e)f(installed)i(as)f(an)f(external)i(library)-8 b(.)150 1949 y Fj(B.2.3)63 b(The)41 b(Con\014guration)h(Pro)s(cess)150 2096 y FB(This)30 b(section)i(is)f(of)g(in)m(terest)h(only)f(if)g(y)m (ou)g(kno)m(w)g(something)h(ab)s(out)e(using)h(the)g(C)f(language)i (and)f(the)150 2205 y(Unix)f(op)s(erating)h(system.)275 2338 y(The)38 b(source)g(co)s(de)h(for)g Fz(gawk)e FB(generally)j (attempts)f(to)h(adhere)e(to)h(formal)g(standards)f(wherev)m(er)150 2448 y(p)s(ossible.)84 b(This)44 b(means)h(that)g Fz(gawk)f FB(uses)g(library)h(routines)g(that)g(are)g(sp)s(eci\014ed)g(b)m(y)f (the)h(ISO)f(C)150 2557 y(standard)35 b(and)f(b)m(y)i(the)f(POSIX)g(op) s(erating)g(system)h(in)m(terface)h(standard.)55 b(When)35 b(using)g(an)g(ISO)f(C)150 2667 y(compiler,)d(function)f(protot)m(yp)s (es)h(are)g(used)e(to)i(help)f(impro)m(v)m(e)i(the)e(compile-time)j(c)m (hec)m(king.)275 2800 y(Man)m(y)f(Unix)f(systems)g(do)h(not)f(supp)s (ort)f(all)i(of)g(either)g(the)g(ISO)e(or)h(the)h(POSIX)e(standards.)43 b(The)150 2909 y(`)p Fz(missing_d)p FB(')35 b(sub)s(directory)g(in)i (the)g Fz(gawk)e FB(distribution)h(con)m(tains)i(replacemen)m(t)g(v)m (ersions)g(of)e(those)150 3019 y(functions)30 b(that)h(are)g(most)f (lik)m(ely)i(to)f(b)s(e)f(missing.)275 3152 y(The)36 b(`)p Fz(config.h)p FB(')e(\014le)j(that)g Fz(configure)d FB(creates)k(con)m(tains)g(de\014nitions)e(that)i(describ)s(e)e (features)150 3261 y(of)f(the)g(particular)g(op)s(erating)g(system)g (where)f(y)m(ou)h(are)h(attempting)g(to)f(compile)h Fz(gawk)p FB(.)52 b(The)35 b(three)150 3371 y(things)23 b(describ)s(ed)e(b)m(y)i (this)g(\014le)g(are:)37 b(what)23 b(header)f(\014les)h(are)g(a)m(v)-5 b(ailable,)27 b(so)c(that)g(they)g(can)g(b)s(e)g(correctly)150 3481 y(included,)36 b(what)e(\(supp)s(osedly\))g(standard)g(functions)h (are)g(actually)h(a)m(v)-5 b(ailable)38 b(in)c(y)m(our)h(C)g (libraries,)150 3590 y(and)27 b(v)-5 b(arious)28 b(miscellaneous)h (facts)f(ab)s(out)f(y)m(our)h(v)-5 b(arian)m(t)29 b(of)e(Unix.)40 b(F)-8 b(or)28 b(example,)i(there)d(ma)m(y)i(not)f(b)s(e)150 3700 y(an)23 b Fz(st_blksize)d FB(elemen)m(t)k(in)e(the)h Fz(stat)f FB(structure.)38 b(In)22 b(this)g(case,)k(`)p Fz(HAVE_ST_BLKSIZE)p FB(')19 b(is)k(unde\014ned.)275 3832 y(It)g(is)g(p)s(ossible)g(for)g(y)m(our)g(C)g(compiler)h(to)g(lie) g(to)g Fz(configure)p FB(.)35 b(It)24 b(ma)m(y)g(do)f(so)g(b)m(y)g(not) h(exiting)g(with)f(an)150 3942 y(error)31 b(when)f(a)h(library)g (function)f(is)h(not)h(a)m(v)-5 b(ailable.)45 b(T)-8 b(o)31 b(get)h(around)e(this,)i(edit)f(the)g(\014le)g(`)p Fz(custom.h)p FB('.)150 4052 y(Use)26 b(an)g(`)p Fz(#ifdef)p FB(')f(that)i(is)f(appropriate)g(for)g(y)m(our)g(system,)h(and)e (either)i Fz(#define)d FB(an)m(y)i(constan)m(ts)h(that)150 4161 y Fz(configure)22 b FB(should)h(ha)m(v)m(e)i(de\014ned)e(but)h (didn't,)h(or)f Fz(#undef)f FB(an)m(y)h(constan)m(ts)i(that)e Fz(configure)e FB(de\014ned)150 4271 y(and)30 b(should)f(not)i(ha)m(v)m (e.)42 b(`)p Fz(custom.h)p FB(')28 b(is)j(automatically)i(included)d(b) m(y)g(`)p Fz(config.h)p FB('.)275 4404 y(It)f(is)f(also)i(p)s(ossible)f (that)g(the)g Fz(configure)e FB(program)h(generated)i(b)m(y)f Fz(autoconf)e FB(will)i(not)g(w)m(ork)g(on)150 4513 y(y)m(our)36 b(system)h(in)f(some)g(other)h(fashion.)58 b(If)36 b(y)m(ou)h(do)f(ha)m (v)m(e)h(a)g(problem,)h(the)e(\014le)g(`)p Fz(configure.in)p FB(')e(is)150 4623 y(the)i(input)f(for)g Fz(autoconf)p FB(.)55 b(Y)-8 b(ou)36 b(ma)m(y)h(b)s(e)e(able)h(to)h(c)m(hange)g(this) f(\014le)f(and)h(generate)h(a)f(new)f(v)m(ersion)150 4732 y(of)c Fz(configure)d FB(that)j(w)m(orks)f(on)h(y)m(our)f(system)h (\(see)h(Section)f(B.5)g([Rep)s(orting)g(Problems)f(and)g(Bugs],)150 4842 y(page)46 b(276,)j(for)c(information)g(on)g(ho)m(w)g(to)g(rep)s (ort)f(problems)g(in)h(con\014guring)f Fz(gawk)p FB(\).)83 b(The)45 b(same)150 4952 y(mec)m(hanism)31 b(ma)m(y)g(b)s(e)e(used)h (to)h(send)f(in)g(up)s(dates)f(to)i(`)p Fz(configure.in)p FB(')d(and/or)i(`)p Fz(custom.h)p FB('.)150 5181 y FA(B.3)67 b(Installation)48 b(on)c(Other)i(Op)t(erating)f(Systems)150 5340 y FB(This)30 b(section)h(describ)s(es)f(ho)m(w)g(to)h(install)g Fz(gawk)f FB(on)g(v)-5 b(arious)30 b(non-Unix)g(systems.)p eop end %%Page: 266 278 TeXDict begin 266 277 bop 150 -116 a FB(266)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fj(B.3.1)63 b(Installing)41 b Fh(gawk)g Fj(on)h(an)f(Amiga)150 446 y FB(Y)-8 b(ou)35 b(can)g(install)h Fz(gawk)e FB(on)g(an)h(Amiga)h (system)f(using)f(a)h(Unix)g(em)m(ulation)h(en)m(vironmen)m(t,)h(a)m(v) -5 b(ailable)150 555 y(via)39 b(anon)m(ymous)f Fz(ftp)f FB(from)h Fz(ftp.ninemoons.com)c FB(in)k(the)g(directory)h(`)p Fz(pub/ade/current)p FB('.)61 b(This)150 665 y(includes)38 b(a)g(shell)g(based)g(on)g Fz(pdksh)p FB(.)63 b(The)37 b(primary)g(comp)s(onen)m(t)i(of)f(this)g(en)m(vironmen)m(t)h(is)f(a)g (Unix)150 775 y(em)m(ulation)32 b(library)-8 b(,)30 b(`)p Fz(ixemul.lib)p FB('.)275 908 y(A)c(more)g(complete)h(distribution)e (for)h(the)g(Amiga)h(is)f(a)m(v)-5 b(ailable)28 b(on)e(the)g(Geek)h (Gadgets)g(CD-R)m(OM,)150 1018 y(a)m(v)-5 b(ailable)33 b(from:)390 1151 y(CR)m(ONUS)390 1260 y(1840)f(E.)f(W)-8 b(arner)30 b(Road)h(#105-265)390 1370 y(T)-8 b(emp)s(e,)30 b(AZ)g(85284)63 b(USA)390 1480 y(US)30 b(T)-8 b(oll)31 b(F)-8 b(ree:)32 b(\(800\))g(804-0833)390 1589 y(Phone:)e Fz(+)p FB(1-602-491-0442)390 1699 y(F)-10 b(AX:)31 b Fz(+)p FB(1-602-491-0048)390 1808 y(Email:)g Fz(info@ninemoons.com)390 1918 y FB(WWW:)h Fz(http://www.ninemoons.com)390 2028 y FB(Anon)m(ymous)e Fz(ftp)f FB(site:)j Fz(ftp.ninemoons.com)275 2161 y FB(Once)e(y)m(ou)h(ha)m(v)m(e)g(the)g(distribution,)f(y)m(ou)g (can)h(con\014gure)f Fz(gawk)f FB(simply)h(b)m(y)h(running)d Fz(configure)p FB(:)390 2294 y Fz(configure)45 b(-v)i(m68k-amigaos)275 2428 y FB(Then)32 b(run)h Fz(make)g FB(and)g(y)m(ou)h(should)f(b)s(e)g (all)i(set!)52 b(If)33 b(these)h(steps)g(do)g(not)g(w)m(ork,)h(please)g (send)e(in)h(a)150 2537 y(bug)c(rep)s(ort)g(\(see)h(Section)g(B.5)g ([Rep)s(orting)g(Problems)f(and)g(Bugs],)h(page)g(276\).)150 2734 y Fj(B.3.2)63 b(Installing)41 b Fh(gawk)g Fj(on)h(BeOS)150 2881 y FB(Since)28 b(BeOS)f(DR9,)j(all)e(the)g(to)s(ols)h(that)f(y)m (ou)g(should)f(need)g(to)i(build)e Fz(gawk)f FB(are)i(included)f(with)h (BeOS.)150 2991 y(The)f(pro)s(cess)g(is)g(basically)i(iden)m(tical)g (to)f(the)g(Unix)f(pro)s(cess)g(of)g(running)f Fz(configure)f FB(and)i(then)g Fz(make)p FB(.)150 3100 y(F)-8 b(ull)31 b(instructions)f(are)h(giv)m(en)g(b)s(elo)m(w.)275 3234 y(Y)-8 b(ou)44 b(can)g(compile)g Fz(gawk)f FB(under)f(BeOS)h(b)m(y)h (extracting)h(the)f(standard)f(sources)h(and)f(running)150 3343 y Fz(configure)p FB(.)48 b(Y)-8 b(ou)35 b Fw(must)43 b FB(sp)s(ecify)33 b(the)h(lo)s(cation)h(pre\014x)e(for)h(the)g (installation)h(directory)-8 b(.)52 b(F)-8 b(or)35 b(BeOS)150 3453 y(DR9)44 b(and)e(b)s(ey)m(ond,)k(the)d(b)s(est)f(directory)i(to)f (use)g(is)g(`)p Fz(/boot/home/config)p FB(',)f(so)h(the)g Fz(configure)150 3562 y FB(command)30 b(is:)390 3696 y Fz(configure)45 b(--prefix=/boot/home/confi)o(g)275 3829 y FB(This)31 b(installs)h(the)g(compiled)h(application)g(in)m(to)g (`)p Fz(/boot/home/config/bin)p FB(',)27 b(whic)m(h)k(is)h(already)150 3939 y(sp)s(eci\014ed)e(in)g(the)g(standard)g Fz(PATH)p FB(.)275 4072 y(Once)21 b(the)h(con\014guration)h(pro)s(cess)e(is)h (completed,)j(y)m(ou)d(can)g(run)e Fz(make)p FB(,)j(and)e(then)h(`)p Fz(make)29 b(install)p FB(':)390 4205 y Fz($)47 b(make)390 4315 y(...)390 4424 y($)g(make)g(install)275 4558 y FB(BeOS)28 b(uses)h Fz(bash)f FB(as)h(its)g(shell;)h(th)m(us,)f(y)m(ou)g(use)g Fz(gawk)f FB(the)h(same)g(w)m(a)m(y)h(y)m(ou)f(w)m(ould)g(under)e (Unix.)40 b(If)150 4667 y(these)31 b(steps)g(do)f(not)h(w)m(ork,)g (please)g(send)f(in)g(a)h(bug)f(rep)s(ort)g(\(see)i(Section)f(B.5)h ([Rep)s(orting)e(Problems)150 4777 y(and)g(Bugs],)h(page)g(276\).)150 4974 y Fj(B.3.3)63 b(Installation)40 b(on)i(PC)e(Op)s(erating)i (Systems)150 5121 y FB(This)h(section)j(co)m(v)m(ers)g(installation)g (and)d(usage)i(of)f Fz(gawk)f FB(on)h(x86)h(mac)m(hines)g(running)e (DOS,)h(an)m(y)150 5230 y(v)m(ersion)f(of)g(Windo)m(ws,)k(or)c(OS/2.)78 b(In)42 b(this)h(section,)48 b(the)43 b(term)g(\\Windo)m(ws32")h (refers)f(to)h(an)m(y)f(of)150 5340 y(Windo)m(ws-95/98/ME/NT/2000.)p eop end %%Page: 267 279 TeXDict begin 267 278 bop 2388 -116 a Fr(App)s(endix)28 b(B:)j(Installing)g Fz(gawk)90 b FB(267)275 299 y(The)21 b(limitations)i(of)e(DOS)g(\(and)h(DOS)f(shells)g(under)f(Windo)m(ws)i (or)f(OS/2\))h(has)f(mean)m(t)i(that)f(v)-5 b(arious)150 408 y(\\DOS)34 b(extenders")g(are)g(often)h(used)e(with)g(programs)h (suc)m(h)f(as)i Fz(gawk)p FB(.)50 b(The)33 b(v)-5 b(arying)34 b(capabilities)i(of)150 518 y(Microsoft)f(Windo)m(ws)f(3.1)g(and)f (Windo)m(ws32)i(can)e(add)g(to)i(the)e(confusion.)50 b(F)-8 b(or)34 b(an)g(o)m(v)m(erview)h(of)f(the)150 628 y(considerations,)d(please)h(refer)e(to)h(`)p Fz(README_d/README.pc)p FB(')26 b(in)k(the)g(distribution.)150 840 y Fj(B.3.3.1)63 b(Installing)41 b(a)g(Prepared)g(Distribution)h(for)g(PC)e(Systems)150 987 y FB(If)26 b(y)m(ou)h(ha)m(v)m(e)g(receiv)m(ed)h(a)f(binary)f (distribution)f(prepared)h(b)m(y)g(the)h(DOS)f(main)m(tainers,)i(then)e Fz(gawk)g FB(and)150 1097 y(the)i(necessary)h(supp)s(ort)d(\014les)i (app)s(ear)f(under)g(the)h(`)p Fz(gnu)p FB(')g(directory)-8 b(,)29 b(with)f(executables)h(in)f(`)p Fz(gnu/bin)p FB(',)150 1206 y(libraries)36 b(in)g(`)p Fz(gnu/lib/awk)p FB(',)g(and)f(man)m (ual)i(pages)f(under)f(`)p Fz(gnu/man)p FB('.)57 b(This)35 b(is)h(designed)g(for)g(easy)150 1316 y(installation)26 b(to)e(a)g(`)p Fz(/gnu)p FB(')g(directory)g(on)g(y)m(our)f(driv)m(e|ho) m(w)m(ev)m(er,)k(the)d(\014les)g(can)g(b)s(e)f(installed)i(an)m(ywhere) 150 1425 y(pro)m(vided)34 b Fz(AWKPATH)e FB(is)i(set)g(prop)s(erly)-8 b(.)51 b(Regardless)35 b(of)f(the)g(installation)i(directory)-8 b(,)36 b(the)e(\014rst)f(line)i(of)150 1535 y(`)p Fz(igawk.cmd)p FB(')28 b(and)i(`)p Fz(igawk.bat)p FB(')e(\(in)j(`)p Fz(gnu/bin)p FB('\))e(ma)m(y)i(need)f(to)h(b)s(e)f(edited.)275 1683 y(The)d(binary)f(distribution)h(con)m(tains)i(a)f(separate)h (\014le)e(describing)h(the)f(con)m(ten)m(ts.)42 b(In)27 b(particular,)h(it)150 1792 y(ma)m(y)j(include)f(more)h(than)f(one)g(v) m(ersion)h(of)g(the)f Fz(gawk)g FB(executable.)275 1940 y(OS/2)k(\(32)h(bit,)g(EMX\))g(binary)e(distributions)g(are)h(prepared) f(for)h(the)g(`)p Fz(/usr)p FB(')f(directory)i(of)f(y)m(our)150 2050 y(preferred)h(driv)m(e.)57 b(Set)36 b Fz(UNIXROOT)e FB(to)j(y)m(our)e(installation)j(driv)m(e)e(\(e.g.,)j(`)p Fz(e:)p FB('\))e(if)e(y)m(ou)i(w)m(an)m(t)f(to)h(install)150 2159 y Fz(gawk)22 b FB(on)m(to)i(another)f(driv)m(e)g(than)g(the)g (hardco)s(ded)f(default)h(`)p Fz(c:)p FB('.)38 b(Executables)24 b(app)s(ear)f(in)f(`)p Fz(/usr/bin)p FB(',)150 2269 y(libraries)29 b(under)e(`)p Fz(/usr/share/awk)p FB(',)f(man)m(ual)j(pages)g(under)e (`)p Fz(/usr/man)p FB(',)h(T)-8 b(exinfo)29 b(do)s(cumen)m(tation)150 2379 y(under)36 b(`)p Fz(/usr/info)p FB(')f(and)i(NLS)f(\014les)i (under)d(`)p Fz(/usr/share/locale)p FB('.)57 b(If)37 b(y)m(ou)h(already)g(ha)m(v)m(e)g(a)g(\014le)150 2488 y(`)p Fz(/usr/info/dir)p FB(')f(from)j(another)h(pac)m(k)-5 b(age)42 b Fw(do)h(not)f(overwrite)h(it!)82 b FB(Instead)40 b(en)m(ter)h(the)f(follo)m(wing)150 2598 y(commands)30 b(at)h(y)m(our)f(prompt)g(\(replace)i(`)p Fz(x:)p FB(')e(b)m(y)g(y)m (our)g(installation)j(driv)m(e\):)390 2746 y Fz(install-info)44 b(--info-dir=x:/usr/info)e(x:/usr/info/gawk.info)390 2855 y(install-info)i(--info-dir=x:/usr/info)e (x:/usr/info/gawkinet.info)275 3003 y FB(Ho)m(w)m(ev)m(er,)32 b(the)f(\014les)f(can)h(b)s(e)e(installed)j(an)m(ywhere)e(pro)m(vided)g Fz(AWKPATH)e FB(is)j(set)g(prop)s(erly)-8 b(.)275 3151 y(The)20 b(binary)g(distribution)g(ma)m(y)h(con)m(tain)h(a)g(separate)f (\014le)g(con)m(taining)h(additional)g(or)f(more)g(detailed)150 3260 y(installation)32 b(instructions.)150 3473 y Fj(B.3.3.2)63 b(Compiling)42 b Fh(gawk)g Fj(for)f(PC)g(Op)s(erating)h(Systems)150 3620 y Fz(gawk)37 b FB(can)h(b)s(e)g(compiled)h(for)f(MS-DOS,)g(Windo)m (ws32,)j(and)d(OS/2)g(using)f(the)i(GNU)g(dev)m(elopmen)m(t)150 3729 y(to)s(ols)27 b(from)f(DJ)g(Delorie)i(\(DJGPP;)f(MS-DOS)f(only\))g (or)g(Eb)s(erhard)e(Mattes)k(\(EMX;)f(MS-DOS,)g(Win-)150 3839 y(do)m(ws32)38 b(and)e(OS/2\).)61 b(Microsoft)39 b(Visual)e(C/C)p Fz(++)f FB(can)i(b)s(e)e(used)g(to)i(build)e(a)h (Windo)m(ws32)h(v)m(ersion,)150 3949 y(and)32 b(Microsoft)j(C/C)p Fz(++)d FB(can)h(b)s(e)g(used)f(to)i(build)e(16-bit)i(v)m(ersions)g (for)e(MS-DOS)h(and)g(OS/2.)48 b(\(As)34 b(of)150 4058 y Fz(gawk)g FB(3.1.2,)39 b(the)d(MSC)f(v)m(ersion)h(do)s(esn't)f(w)m (ork.)57 b(Ho)m(w)m(ev)m(er,)39 b(the)d(main)m(tainer)g(is)g(w)m (orking)g(on)f(\014xing)150 4168 y(it.\))41 b(The)29 b(\014le)h(`)p Fz(README_d/README.pc)p FB(')25 b(in)k(the)g Fz(gawk)g FB(distribution)f(con)m(tains)j(additional)f(notes,)h(and)150 4277 y(`)p Fz(pc/Makefile)p FB(')d(con)m(tains)j(imp)s(ortan)m(t)g (information)g(on)f(compilation)i(options.)275 4425 y(T)-8 b(o)32 b(build)f Fz(gawk)g FB(for)h(MS-DOS,)g(Windo)m(ws32,)i(and)e (OS/2)g(\(16)i(bit)e(only;)h(for)f(32)h(bit)f(\(EMX\))i(y)m(ou)150 4535 y(can)25 b(use)g(the)g Fz(configure)e FB(script)i(and)g(skip)f (the)i(follo)m(wing)g(paragraphs;)h(for)d(details)j(see)e(b)s(elo)m (w\),)i(cop)m(y)150 4644 y(the)k(\014les)g(in)g(the)g(`)p Fz(pc)p FB(')g(directory)h(\()p Fw(exc)-5 b(ept)40 b FB(for)31 b(`)p Fz(ChangeLog)p FB('\))f(to)h(the)h(directory)f(with)g (the)g(rest)h(of)f(the)150 4754 y Fz(gawk)38 b FB(sources.)67 b(The)39 b(`)p Fz(Makefile)p FB(')f(con)m(tains)i(a)g(con\014guration)f (section)i(with)e(commen)m(ts)h(and)e(ma)m(y)150 4863 y(need)30 b(to)h(b)s(e)f(edited)h(in)f(order)g(to)h(w)m(ork)f(with)g(y) m(our)h Fz(make)e FB(utilit)m(y)-8 b(.)275 5011 y(The)26 b(`)p Fz(Makefile)p FB(')f(con)m(tains)j(a)f(n)m(um)m(b)s(er)e(of)i (targets)i(for)d(building)g(v)-5 b(arious)27 b(MS-DOS,)g(Windo)m(ws32,) 150 5121 y(and)38 b(OS/2)h(v)m(ersions.)65 b(A)39 b(list)g(of)g (targets)h(is)f(prin)m(ted)f(if)g(the)h Fz(make)e FB(command)i(is)f (giv)m(en)i(without)f(a)150 5230 y(target.)61 b(As)37 b(an)g(example,)i(to)e(build)f Fz(gawk)f FB(using)i(the)f(DJGPP)h(to)s (ols,)j(en)m(ter)d(`)p Fz(make)30 b(djgpp)p FB('.)58 b(\(The)150 5340 y(DJGPP)31 b(to)s(ols)g(ma)m(y)g(b)s(e)e(found)h(at)h Fz(ftp://ftp.delorie.com/p)o(ub/d)o(jgp)o(p/cu)o(rren)o(t/v)o(2gnu)o(/) p FB(.\))p eop end %%Page: 268 280 TeXDict begin 268 279 bop 150 -116 a FB(268)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(Using)35 b Fz(make)e FB(to)j(run)e(the)h(standard)f(tests)i (and)e(to)i(install)f Fz(gawk)f FB(requires)h(additional)g(Unix-lik)m (e)150 408 y(to)s(ols,)27 b(including)d Fz(sh)p FB(,)h Fz(sed)p FB(,)g(and)f Fz(cp)p FB(.)38 b(In)24 b(order)g(to)i(run)d(the) h(tests,)j(the)e(`)p Fz(test/*.ok)p FB(')d(\014les)j(ma)m(y)g(need)f (to)150 518 y(b)s(e)31 b(con)m(v)m(erted)h(so)g(that)g(they)f(ha)m(v)m (e)h(the)g(usual)f(DOS-st)m(yle)h(end-of-line)g(mark)m(ers.)43 b(Most)32 b(of)g(the)f(tests)150 628 y(w)m(ork)40 b(prop)s(erly)e(with) i(Stew)m(artson's)g(shell)g(along)h(with)f(the)g(companion)g(utilities) h(or)f(appropriate)150 737 y(GNU)34 b(utilities.)53 b(Ho)m(w)m(ev)m (er,)37 b(some)d(editing)g(of)g(`)p Fz(test/Makefile)p FB(')d(is)j(required.)50 b(It)33 b(is)h(recommended)150 847 y(that)f(y)m(ou)h(cop)m(y)f(the)g(\014le)g(`)p Fz(pc/Makefile.tst)p FB(')d(o)m(v)m(er)k(the)f(\014le)g(`)p Fz(test/Makefile)p FB(')d(as)j(a)g(replacemen)m(t.)150 956 y(Details)f(can)f(b)s(e)f (found)f(in)h(`)p Fz(README_d/README.pc)p FB(')c(and)j(in)i(the)f (\014le)h(`)p Fz(pc/Makefile.tst)p FB('.)275 1106 y(The)f(32)h(bit)f (EMX)h(v)m(ersion)g(of)g Fz(gawk)e FB(w)m(orks)i(\\out)g(of)g(the)g(b)s (o)m(x")f(under)f(OS/2.)42 b(In)29 b(principle,)i(it)g(is)150 1215 y(p)s(ossible)f(to)h(compile)g Fz(gawk)f FB(the)g(follo)m(wing)i (w)m(a)m(y:)390 1365 y Fz($)47 b(./configure)390 1474 y($)g(make)275 1624 y FB(This)d(is)h(not)g(recommended,)k(though.)85 b(T)-8 b(o)45 b(get)h(an)f(OMF)h(executable)g(y)m(ou)g(should)e(use)h (the)150 1733 y(follo)m(wing)32 b(commands)e(at)h(y)m(our)f Fz(sh)g FB(prompt:)390 1883 y Fz($)47 b(CPPFLAGS="-D__ST_MT_ERRNO_)o (_")390 1993 y($)g(export)g(CPPFLAGS)390 2102 y($)g(CFLAGS="-O2)e (-Zomf)i(-Zmt")390 2212 y($)g(export)g(CFLAGS)390 2321 y($)g(LDFLAGS="-s)e(-Zcrtdll)h(-Zlinker)f(/exepack:2)g(-Zlinker)h (/pm:vio)g(-Zstack)f(0x6000")390 2431 y($)i(export)g(LDFLAGS)390 2540 y($)g(RANLIB="echo")390 2650 y($)g(export)g(RANLIB)390 2760 y($)g(./configure)e(--prefix=c:/usr)f(--without-included-gette)o (xt)390 2869 y($)j(make)g(AR=emxomfar)275 3019 y FB(These)32 b(are)g(just)g(suggestions.)48 b(Y)-8 b(ou)33 b(ma)m(y)g(use)f(an)m(y)g (other)h(set)g(of)f(\(self-consisten)m(t\))j(en)m(vironmen)m(t)150 3128 y(v)-5 b(ariables)31 b(and)f(compiler)h(\015ags.)275 3278 y(T)-8 b(o)56 b(get)h(an)f(FHS-complian)m(t)i(\014le)e(hierarc)m (h)m(y)h(it)f(is)g(recommended)g(to)h(use)f(the)g(additional)150 3387 y Fz(configure)29 b FB(options)k(`)p Fz(--infodir=c:/usr/share/)o (info)o FB(',)27 b(`)p Fz(--mandir=c:/usr/share/man)o FB(')g(and)150 3497 y(`)p Fz(--libexecdir=c:/usr/lib)p FB('.)275 3646 y(If)i(y)m(ou)i(use)f(GCC)g(2.95)i(it)f(is)f (recommended)g(to)i(use)e(also:)390 3796 y Fz($)47 b(LIBS="-lgcc")390 3905 y($)g(export)g(LIBS)275 4055 y FB(Y)-8 b(ou)30 b(can)h(also)g(get) h(an)e Fz(a.out)f FB(executable)j(if)e(y)m(ou)h(prefer:)390 4204 y Fz($)47 b(CPPFLAGS="-D__ST_MT_ERRNO_)o(_")390 4314 y($)g(export)g(CPPFLAGS)390 4423 y($)g(CFLAGS="-O2)e(-Zmt")390 4533 y($)i(export)g(CFLAGS)390 4643 y($)g(LDFLAGS="-s)e(-Zstack)h (0x6000")390 4752 y($)h(LIBS="-lgcc")390 4862 y($)g(unset)g(RANLIB)390 4971 y($)g(./configure)e(--prefix=c:/usr)390 5081 y($)i(make)390 5230 y Fr(NOTE:)25 b FB(V)-8 b(ersions)26 b(later)g(than)f(GCC)f(2.95,) k(i.e.,)g(GCC)c(3.x)i(using)e(the)i(Innotek)f(lib)s(c)f(w)m(ere)390 5340 y(not)31 b(tested.)p eop end %%Page: 269 281 TeXDict begin 269 280 bop 2388 -116 a Fr(App)s(endix)28 b(B:)j(Installing)g Fz(gawk)90 b FB(269)390 299 y Fr(NOTE:)44 b FB(Ev)m(en)f(if)g(the)g(compiled)h Fz(gawk.exe)d FB(\()p Fz(a.out)p FB(\))i(executable)h(con)m(tains)h(a)e(DOS)390 408 y(header,)34 b(it)g(do)s(es)f Fw(not)43 b FB(w)m(ork)34 b(under)e(DOS.)h(T)-8 b(o)34 b(compile)g(an)g(executable)h(that)f(runs) e(un-)390 518 y(der)f(DOS,)h Fz("-DPIPES_SIMULATED")27 b FB(m)m(ust)32 b(b)s(e)f(added)h(to)g Fz(CPPFLAGS)p FB(.)44 b(But)32 b(then)g(some)390 628 y(nonstandard)d(extensions)i(of) f Fz(gawk)g FB(\(e.g.,)i(`)p Fz(|&)p FB('\))f(do)f(not)g(w)m(ork!)275 797 y(After)37 b(compilation)j(the)d(in)m(ternal)i(tests)f(can)g(b)s(e) f(p)s(erformed.)61 b(En)m(ter)38 b(`)p Fz(make)30 b(check)e(CMP="diff) 150 906 y(-a")p FB(')40 b(at)i(y)m(our)f(command)g(prompt.)72 b(All)42 b(tests)g(except)g(for)f(the)g Fz(pid)f FB(test)i(are)g(exp)s (ected)f(to)h(w)m(ork)150 1016 y(prop)s(erly)-8 b(.)40 b(The)30 b Fz(pid)f FB(test)j(fails)e(b)s(ecause)h(c)m(hild)g(pro)s (cesses)f(are)g(not)h(started)g(b)m(y)f Fz(fork\(\))p FB(.)275 1185 y(`)p Fz(make)f(install)p FB(')g(w)m(orks)h(as)h(exp)s (ected.)390 1354 y Fr(NOTE:)72 b FB(Most)h(OS/2)e(p)s(orts)g(of)h(GNU)g Fz(make)f FB(are)h(not)g(able)g(to)h(handle)e(the)390 1464 y(Mak)m(e\014les)d(of)e(this)g(pac)m(k)-5 b(age.)150 b(If)66 b(y)m(ou)h(encoun)m(ter)f(an)m(y)h(problems)e(with)h Fz(make)390 1573 y FB(try)i(GNU)h(Mak)m(e)g(3.79.1)i(or)d(later)h(v)m (ersions.)154 b(Y)-8 b(ou)68 b(should)g(\014nd)e(the)i(latest)390 1683 y(v)m(ersion)142 b(on)e Fz(http://www.unixos2.org/sw/)o(pub/)o (bin)o(ary/)o(make)o(/)135 b FB(or)141 b(on)390 1792 y Fz(ftp://hobbes.nmsu.edu/pu)o(b/os)o(2/)p FB(.)150 2026 y Fj(B.3.3.3)63 b(Compiling)42 b Fh(gawk)g Fj(F)-10 b(or)41 b(Dynamic)f(Libraries)150 2173 y FB(T)-8 b(o)24 b(compile)h Fz(gawk)d FB(with)i(dynamic)f(extension)h(supp)s(ort,)g (uncommen)m(t)f(the)h(de\014nitions)f(of)h Fz(DYN_FLAGS)p FB(,)150 2283 y Fz(DYN_EXP)p FB(,)31 b Fz(DYN_OBJ)p FB(,)h(and)g Fz(DYN_MAKEXP)d FB(in)j(the)h(con\014guration)g(section)h(of)e(the)h(`) p Fz(Makefile)p FB('.)45 b(There)150 2392 y(are)31 b(t)m(w)m(o)g (de\014nitions)f(for)h Fz(DYN_MAKEXP)p FB(:)37 b(pic)m(k)31 b(the)g(one)g(that)g(matc)m(hes)g(y)m(our)f(target.)275 2562 y(T)-8 b(o)27 b(build)e(some)i(of)g(the)g(example)g(extension)g (libraries,)h Fz(cd)e FB(to)h(the)g(extension)g(directory)g(and)f(cop)m (y)150 2671 y(`)p Fz(Makefile.pc)p FB(')k(to)i(`)p Fz(Makefile)p FB('.)45 b(Y)-8 b(ou)32 b(can)h(then)f(build)f(using)h(the)g(same)g(t)m (w)m(o)i(targets.)47 b(T)-8 b(o)33 b(run)e(the)150 2781 y(example)22 b Fz(awk)e FB(scripts,)j(y)m(ou'll)g(need)d(to)i(either)g (c)m(hange)g(the)g(call)g(to)g(the)g Fz(extension)c FB(function)j(to)h (matc)m(h)150 2890 y(the)35 b(name)g(of)g(the)g(library)f(\(for)h (instance,)i(c)m(hange)f Fz("./ordchr.so")31 b FB(to)k Fz("ordchr.dll")d FB(or)i(simply)150 3000 y Fz("ordchr")p FB(\),)d(or)h(rename)g(the)h(library)e(to)i(matc)m(h)g(the)g(call)g (\(for)g(instance,)g(rename)f(`)p Fz(ordchr.dll)p FB(')e(to)150 3109 y(`)p Fz(ordchr.so)p FB('\).)275 3279 y(If)25 b(y)m(ou)i(build)e Fz(gawk.exe)e FB(with)j(one)h(compiler)f(but)g(w)m(an)m(t)h(to)f(build) g(an)g(extension)g(library)g(with)g(the)150 3388 y(other,)i(y)m(ou)g (need)f(to)h(cop)m(y)f(the)h(imp)s(ort)e(library)-8 b(.)40 b(Visual)28 b(C)e(uses)h(a)h(library)e(called)j(`)p Fz(gawk.lib)p FB(',)d(while)150 3498 y(MinGW)33 b(uses)e(a)h(library)g(called)h(`)p Fz(libgawk.a)p FB('.)43 b(These)31 b(\014les)h(are)g(equiv)-5 b(alen)m(t)33 b(and)f(will)g(in)m(terop)s(erate)150 3607 y(if)e(y)m(ou)h(giv)m(e)h(them)e(the)h(correct)g(name.)41 b(The)30 b(resulting)g(shared)g(libraries)h(are)f(also)i(in)m(terop)s (erable.)275 3776 y(T)-8 b(o)55 b(create)i(y)m(our)f(o)m(wn)f (extension)h(library)-8 b(,)62 b(y)m(ou)56 b(can)g(use)f(the)g (examples)h(as)g(mo)s(dels,)62 b(but)150 3886 y(y)m(ou're)56 b(essen)m(tially)i(on)d(y)m(our)h(o)m(wn.)117 b(P)m(ost)56 b(to)h Fz(comp.lang.awk)52 b FB(or)j(send)g(electronic)j(mail)e(to)150 3996 y Fz(ptjm@interlog.com)28 b FB(if)33 b(y)m(ou)g(ha)m(v)m(e)h (problems)f(getting)h(started.)49 b(If)33 b(y)m(ou)g(need)f(to)i (access)g(functions)150 4105 y(or)c(v)-5 b(ariables)30 b(whic)m(h)f(are)h(not)g(exp)s(orted)f(b)m(y)g Fz(gawk.exe)p FB(,)f(add)h(them)h(to)g(`)p Fz(gawkw32.def)p FB(')d(and)i(rebuild.)150 4215 y(Y)-8 b(ou)38 b(should)f(also)i(add)f Fz(ATTRIBUTE_EXPORTED)33 b FB(to)38 b(the)h(declaration)g(in)f(`)p Fz(awk.h)p FB(')f(of)h(an)m(y)g(v)-5 b(ariables)150 4324 y(y)m(ou)31 b(add)e(to)j(`)p Fz(gawkw32.def)p FB('.)275 4493 y(Note)37 b(that)h(extension)f(libraries)g(ha)m(v)m(e)g(the)g(name)g(of)g(the)f Fz(awk)g FB(executable)i(em)m(b)s(edded)e(in)g(them)150 4603 y(at)e(link)f(time,)i(so)e(they)h(will)f(w)m(ork)h(only)f(with)g Fz(gawk.exe)p FB(.)47 b(In)32 b(particular,)j(they)e(w)m(on't)h(w)m (ork)f(if)h(y)m(ou)150 4713 y(rename)28 b Fz(gawk.exe)d FB(to)k Fz(awk.exe)d FB(or)h(if)h(y)m(ou)g(try)g(to)g(use)g Fz(pgawk.exe)p FB(.)37 b(Y)-8 b(ou)28 b(can)g(p)s(erform)f(pro\014ling) g(b)m(y)150 4822 y(temp)s(orarily)32 b(renaming)h Fz(pgawk.exe)d FB(to)j Fz(gawk.exe)p FB(.)44 b(Y)-8 b(ou)33 b(can)g(resolv)m(e)h(this) e(problem)g(b)m(y)g(c)m(hanging)150 4932 y(the)f(program)f(name)g(in)g (the)h(de\014nition)f(of)g Fz(DYN_MAKEXP)e FB(for)i(y)m(our)g (compiler.)275 5101 y(On)h(Windo)m(ws32,)j(libraries)e(are)g(sough)m(t) h(\014rst)f(in)f(the)i(curren)m(t)f(directory)-8 b(,)33 b(then)f(in)g(the)g(directory)150 5210 y(con)m(taining)g Fz(gawk.exe)p FB(,)c(and)i(\014nally)g(through)g(the)h Fz(PATH)e FB(en)m(vironmen)m(t)i(v)-5 b(ariable.)p eop end %%Page: 270 282 TeXDict begin 270 281 bop 150 -116 a FB(270)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fj(B.3.3.4)63 b(Using)42 b Fh(gawk)g Fj(on)f(PC)g(Op)s(erating)g (Systems)150 446 y FB(With)30 b(the)f(exception)h(of)g(the)f(Cygwin)g (en)m(vironmen)m(t,)h(the)f(`)p Fz(|&)p FB(')g(op)s(erator)h(and)e (TCP/IP)h(net)m(w)m(orking)150 555 y(\(see)k(Section)f(10.3)h([Using)f Fz(gawk)e FB(for)i(Net)m(w)m(ork)h(Programming],)f(page)h(168\))g(are)f (not)f(supp)s(orted)f(for)150 665 y(MS-DOS)g(or)g(MS-Windo)m(ws.)41 b(EMX)31 b(\(OS/2)g(only\))g(do)s(es)f(supp)s(ort)e(at)j(least)h(the)f (`)p Fz(|&)p FB(')f(op)s(erator.)275 801 y(The)50 b(OS/2)g(and)g (MS-DOS)h(v)m(ersions)g(of)g Fz(gawk)e FB(searc)m(h)i(for)g(program)f (\014les)h(as)g(describ)s(ed)e(in)150 911 y(Section)60 b(11.4)h([The)e Fz(AWKPATH)f FB(En)m(vironmen)m(t)h(V)-8 b(ariable],)69 b(page)60 b(179.)129 b(Ho)m(w)m(ev)m(er,)69 b(semicolons)150 1021 y(\(rather)45 b(than)g(colons\))h(separate)f (elemen)m(ts)h(in)f(the)g Fz(AWKPATH)e FB(v)-5 b(ariable.)84 b(If)45 b Fz(AWKPATH)e FB(is)h(not)h(set)150 1130 y(or)j(is)f(empt)m(y) -8 b(,)53 b(then)47 b(the)h(default)g(searc)m(h)g(path)f(for)h(OS/2)f (\(16)i(bit\))f(and)f(MS-DOS)g(v)m(ersions)h(is)150 1240 y Fz(".;c:/lib/awk;c:/gnu/lib)o(/awk)o(")-6 b FB(.)275 1376 y(The)36 b(searc)m(h)i(path)f(for)g(OS/2)g(\(32)i(bit,)g(EMX\))f (is)f(determined)g(b)m(y)g(the)g(pre\014x)g(directory)g(\(most)150 1486 y(lik)m(ely)26 b(`)p Fz(/usr)p FB(')f(or)g(`)p Fz(c:/usr)p FB('\))f(that)h(has)g(b)s(een)f(sp)s(eci\014ed)g(as)i(an)e(option)i(of) f(the)g Fz(configure)d FB(script)j(lik)m(e)h(it)150 1595 y(is)k(the)h(case)g(for)f(the)h(Unix)f(v)m(ersions.)41 b(If)30 b(`)p Fz(c:/usr)p FB(')f(is)h(the)g(pre\014x)g(directory)g (then)g(the)h(default)f(searc)m(h)150 1705 y(path)36 b(con)m(tains)i(`)p Fz(.)p FB(')f(and)e(`)p Fz(c:/usr/share/awk)p FB('.)56 b(Additionally)-8 b(,)39 b(to)e(supp)s(ort)e(binary)h (distributions)150 1815 y(of)31 b Fz(gawk)e FB(for)h(OS/2)h(systems)f (whose)g(driv)m(e)h(`)p Fz(c:)p FB(')f(migh)m(t)i(not)e(supp)s(ort)f (long)i(\014le)g(names)f(or)g(migh)m(t)i(not)150 1924 y(exist)g(at)g(all,)h(there)e(is)g(a)h(sp)s(ecial)g(en)m(vironmen)m(t)f (v)-5 b(ariable.)45 b(If)30 b Fz(UNIXROOT)f FB(sp)s(eci\014es)i(a)h (driv)m(e)f(then)g(this)150 2034 y(sp)s(eci\014c)c(driv)m(e)h(is)f (also)i(searc)m(hed)e(for)h(program)f(\014les.)40 b(E.g.,)29 b(if)e Fz(UNIXROOT)e FB(is)i(set)h(to)h(`)p Fz(e:)p FB(')e(the)g (complete)150 2143 y(default)k(searc)m(h)g(path)f(is)g Fz(".;c:/usr/share/awk;e:/us)o(r/s)o(hare)o(/awk)o(")-6 b FB(.)275 2280 y(An)33 b Fz(sh)p FB(-lik)m(e)h(shell)g(\(as)g(opp)s (osed)f(to)h Fz(command.com)c FB(under)i(MS-DOS)i(or)f Fz(cmd.exe)f FB(under)g(OS/2\))150 2389 y(ma)m(y)e(b)s(e)f(useful)g (for)h Fz(awk)f FB(programming.)40 b(Ian)29 b(Stew)m(artson)i(has)e (written)h(an)f(excellen)m(t)j(shell)e(for)g(MS-)150 2499 y(DOS)21 b(and)g(OS/2,)j(Daisuk)m(e)f(Ao)m(y)m(ama)h(has)d(p)s (orted)g(GNU)h Fz(bash)e FB(to)j(MS-DOS)e(using)g(the)h(DJGPP)g(to)s (ols,)150 2609 y(and)29 b(sev)m(eral)j(shells)e(are)h(a)m(v)-5 b(ailable)32 b(for)e(OS/2,)g(including)g Fz(ksh)p FB(.)40 b(The)29 b(\014le)i(`)p Fz(README_d/README.pc)p FB(')25 b(in)150 2718 y(the)35 b Fz(gawk)e FB(distribution)h(con)m(tains)h (information)g(on)f(these)h(shells.)53 b(Users)35 b(of)f(Stew)m (artson's)h(shell)g(on)150 2828 y(DOS)43 b(should)f(examine)i(its)f(do) s(cumen)m(tation)h(for)f(handling)f(command)h(lines;)50 b(in)43 b(particular,)k(the)150 2937 y(setting)40 b(for)e Fz(gawk)f FB(in)i(the)f(shell)h(con\014guration)g(ma)m(y)g(need)g(to)g (b)s(e)f(c)m(hanged)h(and)f(the)h Fz(ignoretype)150 3047 y FB(option)31 b(ma)m(y)g(also)g(b)s(e)f(of)g(in)m(terest.)275 3183 y(Under)h(OS/2)h(and)g(DOS,)g Fz(gawk)f FB(\(and)h(man)m(y)h (other)f(text)h(programs\))g(silen)m(tly)g(translate)h(end-of-)150 3293 y(line)g Fz("\\r\\n")e FB(to)i Fz("\\n")f FB(on)g(input)g(and)g Fz("\\n")g FB(to)h Fz("\\r\\n")e FB(on)h(output.)51 b(A)33 b(sp)s(ecial)h Fz(BINMODE)e FB(v)-5 b(ariable)150 3403 y(allo)m(ws)32 b(con)m(trol)g(o)m(v)m(er)f(these)g(translations)g(and)f (is)g(in)m(terpreted)h(as)g(follo)m(ws:)225 3539 y Fy(\017)60 b FB(If)28 b Fz(BINMODE)e FB(is)i(`)p Fz("r")p FB(',)g(or)g Fz(\(BINMODE)g(&)i(1\))d FB(is)h(nonzero,)h(then)f(binary)f(mo)s(de)h (is)g(set)g(on)g(read)g(\(i.e.,)330 3649 y(no)i(translations)h(on)g (reads\).)225 3784 y Fy(\017)60 b FB(If)29 b Fz(BINMODE)e FB(is)j Fz("w")p FB(,)f(or)g Fz(\(BINMODE)f(&)i(2\))f FB(is)g(nonzero,)h(then)f(binary)g(mo)s(de)g(is)g(set)h(on)g(write)f (\(i.e.,)330 3894 y(no)h(translations)h(on)g(writes\).)225 4029 y Fy(\017)60 b FB(If)43 b Fz(BINMODE)f FB(is)i Fz("rw")f FB(or)h Fz("wr")p FB(,)j(binary)c(mo)s(de)g(is)h(set)h(for)e(b)s(oth)h (read)g(and)f(write)h(\(same)h(as)330 4139 y Fz(\(BINMODE)28 b(&)i(3\))p FB(\).)225 4274 y Fy(\017)60 b Fz(BINMODE=)p Fk(non-null-string)37 b FB(is)32 b(the)g(same)h(as)g(`)p Fz(BINMODE=3)p FB(')d(\(i.e.,)35 b(no)d(translations)h(on)f(reads)330 4384 y(or)f(writes\).)42 b(Ho)m(w)m(ev)m(er,)33 b Fz(gawk)d FB(issues)g(a)i(w)m(arning)e(message)i(if)f(the)g(string)f(is)h(not)g (one)g(of)g Fz("rw")f FB(or)330 4493 y Fz("wr")p FB(.)150 4656 y(The)20 b(mo)s(des)h(for)g(standard)f(input)g(and)g(standard)g (output)h(are)g(set)h(one)f(time)h(only)f(\(after)h(the)f(command)150 4765 y(line)32 b(is)g(read,)h(but)e(b)s(efore)h(pro)s(cessing)f(an)m(y) i(of)f(the)g Fz(awk)f FB(program\).)45 b(Setting)33 b Fz(BINMODE)d FB(for)i(standard)150 4875 y(input)h(or)h(standard)g (output)f(is)h(accomplished)h(b)m(y)f(using)g(an)g(appropriate)g(`)p Fz(-v)c(BINMODE=)p Fk(N)11 b FB(')31 b(option)150 4984 y(on)36 b(the)h(command)f(line.)59 b Fz(BINMODE)35 b FB(is)h(set)h(at)g(the)g(time)g(a)f(\014le)h(or)f(pip)s(e)g(is)g(op)s (ened)g(and)g(cannot)h(b)s(e)150 5094 y(c)m(hanged)31 b(mid-stream.)275 5230 y(The)f(name)i Fz(BINMODE)d FB(w)m(as)j(c)m (hosen)g(to)g(matc)m(h)h Fz(mawk)d FB(\(see)j(Section)f(B.6)g([Other)g (F)-8 b(reely)32 b(Av)-5 b(ailable)150 5340 y Fz(awk)29 b FB(Implemen)m(tations],)i(page)f(277\).)42 b(Both)30 b Fz(mawk)e FB(and)h Fz(gawk)f FB(handle)h Fz(BINMODE)f FB(similarly;)i(ho)m(w)m(ev)m(er,)p eop end %%Page: 271 283 TeXDict begin 271 282 bop 2388 -116 a Fr(App)s(endix)28 b(B:)j(Installing)g Fz(gawk)90 b FB(271)150 299 y Fz(mawk)40 b FB(adds)g(a)i(`)p Fz(-W)30 b(BINMODE=)p Fk(N)11 b FB(')38 b(option)k(and)e(an)h(en)m(vironmen)m(t)h(v)-5 b(ariable)42 b(that)g(can)f(set)h Fz(BINMODE)p FB(,)150 408 y Fz(RS)p FB(,)31 b(and)f Fz(ORS)p FB(.)42 b(The)30 b(\014les)h(`)p Fz(binmode[1-3].awk)p FB(')c(\(under)j(`)p Fz(gnu/lib/awk)p FB(')e(in)i(some)i(of)f(the)g(prepared)150 518 y(distributions\))42 b(ha)m(v)m(e)i(b)s(een)e(c)m(hosen)i(to)f(matc)m(h)h Fz(mawk)p FB('s)e(`)p Fz(-W)30 b(BINMODE=)p Fk(N)11 b FB(')40 b(option.)78 b(These)42 b(can)i(b)s(e)150 628 y(c)m(hanged)33 b(or)f(discarded;)g(in)g(particular,)h(the)f(setting)h (of)g Fz(RS)e FB(giving)i(the)f(few)m(est)h(\\surprises")f(is)g(op)s (en)150 737 y(to)g(debate.)46 b Fz(mawk)30 b FB(uses)i(`)p Fz(RS)e(=)g("\\r\\n")p FB(')g(if)i(binary)f(mo)s(de)g(is)h(set)g(on)g (read,)g(whic)m(h)g(is)f(appropriate)h(for)150 847 y(\014les)e(with)g (the)h(DOS-st)m(yle)h(end-of-line.)275 976 y(T)-8 b(o)28 b(illustrate,)i(the)e(follo)m(wing)h(examples)g(set)f(binary)g(mo)s(de) f(on)h(writes)g(for)g(standard)f(output)h(and)150 1086 y(other)j(\014les,)f(and)g(set)h Fz(ORS)e FB(as)i(the)g(\\usual")f (DOS-st)m(yle)i(end-of-line:)390 1216 y Fz(gawk)47 b(-v)g(BINMODE=2)e (-v)i(ORS="\\r\\n")e(...)150 1345 y FB(or:)390 1475 y Fz(gawk)i(-v)g(BINMODE=w)e(-f)i(binmode2.awk)e(...)150 1604 y FB(These)25 b(giv)m(e)h(the)g(same)f(result)g(as)g(the)h(`)p Fz(-W)k(BINMODE=2)p FB(')22 b(option)k(in)f Fz(mawk)p FB(.)38 b(The)24 b(follo)m(wing)j(c)m(hanges)f(the)150 1714 y(record)35 b(separator)g(to)h Fz("\\r\\n")d FB(and)i(sets)g (binary)f(mo)s(de)h(on)g(reads,)h(but)e(do)s(es)h(not)g(a\013ect)h(the) f(mo)s(de)150 1824 y(on)30 b(standard)g(input:)390 1953 y Fz(gawk)47 b(-v)g(RS="\\r\\n")e(--source)h("BEGIN)g({)h(BINMODE)f(=)h (1)h(}")f(...)150 2083 y FB(or:)390 2212 y Fz(gawk)g(-f)g(binmode1.awk) d(...)150 2342 y FB(With)35 b(prop)s(er)f(quoting,)i(in)f(the)g (\014rst)f(example)h(the)g(setting)h(of)f Fz(RS)f FB(can)i(b)s(e)e(mo)m (v)m(ed)i(in)m(to)f(the)g Fz(BEGIN)150 2452 y FB(rule.)150 2641 y Fj(B.3.3.5)63 b(Using)42 b Fh(gawk)g Fj(In)e(The)i(Cygwin)f(En)m (vironmen)m(t)150 2788 y Fz(gawk)20 b FB(can)i(b)s(e)e(used)h(\\out)h (of)f(the)h(b)s(o)m(x")f(under)f(Windo)m(ws)h(if)h(y)m(ou)f(are)h (using)f(the)g(Cygwin)g(en)m(vironmen)m(t.)3712 2755 y Fo(1)150 2898 y FB(This)33 b(en)m(vironmen)m(t)i(pro)m(vides)g(an)f (excellen)m(t)i(sim)m(ulation)g(of)e(Unix,)h(using)f(the)h(GNU)f(to)s (ols,)j(suc)m(h)d(as)150 3007 y Fz(bash)p FB(,)22 b(the)g(GNU)g (Compiler)f(Collection)i(\(GCC\),)f(GNU)g(Mak)m(e,)i(and)d(other)h(GNU) g(to)s(ols.)38 b(Compilation)150 3117 y(and)30 b(installation)i(for)e (Cygwin)g(is)g(the)h(same)g(as)f(for)g(a)h(Unix)f(system:)390 3246 y Fz(tar)47 b(-xvpzf)f(gawk-3.1.5.tar.gz)390 3356 y(cd)h(gawk-3.1.5)390 3466 y(./configure)390 3575 y(make)275 3705 y FB(When)34 b(compared)g(to)h(GNU/Lin)m(ux)g(on)g(the)f(same)h (system,)h(the)e(`)p Fz(configure)p FB(')f(step)h(on)g(Cygwin)150 3814 y(tak)m(es)e(considerably)e(longer.)42 b(Ho)m(w)m(ev)m(er,)32 b(it)f(do)s(es)f(\014nish,)f(and)h(then)g(the)h(`)p Fz(make)p FB(')f(pro)s(ceeds)g(as)g(usual.)390 3944 y Fr(NOTE:)43 b FB(The)f(`)p Fz(|&)p FB(')g(op)s(erator)h(and)f(TCP/IP)g(net)m(w)m (orking)i(\(see)f(Section)g(10.3)h([Using)390 4053 y Fz(gawk)30 b FB(for)h(Net)m(w)m(ork)i(Programming],)f(page)g(168\))g (are)g(fully)f(supp)s(orted)e(in)i(the)g(Cygwin)390 4163 y(en)m(vironmen)m(t.)49 b(This)33 b(is)g(not)g(true)g(for)g(an)m(y)g (other)h(en)m(vironmen)m(t)f(for)g(MS-DOS)g(or)g(MS-)390 4273 y(Windo)m(ws.)150 4462 y Fj(B.3.4)63 b(Ho)m(w)40 b(to)h(Compile)h(and)e(Install)h Fh(gawk)h Fj(on)f(VMS)150 4609 y FB(This)30 b(subsection)g(describ)s(es)g(ho)m(w)g(to)h(compile)g (and)f(install)h Fz(gawk)f FB(under)e(VMS.)150 4799 y Fj(B.3.4.1)63 b(Compiling)42 b Fh(gawk)g Fj(on)f(VMS)150 4945 y FB(T)-8 b(o)23 b(compile)g Fz(gawk)e FB(under)g(VMS,)i(there)f (is)h(a)g Fz(DCL)e FB(command)h(pro)s(cedure)g(that)h(issues)f(all)h (the)g(necessary)150 5055 y Fz(CC)31 b FB(and)f Fz(LINK)g FB(commands.)43 b(There)31 b(is)g(also)h(a)g(`)p Fz(Makefile)p FB(')d(for)i(use)g(with)g(the)h Fz(MMS)e FB(utilit)m(y)-8 b(.)45 b(F)-8 b(rom)32 b(the)150 5165 y(source)f(directory)-8 b(,)31 b(use)f(either:)p 150 5241 1200 4 v 199 5308 a Fo(1)275 5340 y Fm(http://www.cygwin.com)p eop end %%Page: 272 284 TeXDict begin 272 283 bop 150 -116 a FB(272)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 299 y Fz($)47 b(@[.VMS]VMSBUILD.COM)150 434 y FB(or:)390 569 y Fz($)g(MMS/DESCRIPTION=[.VMS]DESC)o(RIP.)o(MMS)41 b(GAWK)275 704 y FB(Dep)s(ending)32 b(up)s(on)g(whic)m(h)h(C)g (compiler)h(y)m(ou)f(are)h(using,)g(follo)m(w)g(one)g(of)f(the)h(sets)g (of)f(instructions)150 813 y(in)d(this)g(table:)150 973 y(V)-10 b(AX)31 b(C)f(V3.x)630 1083 y(Use)100 b(either)f(`)p Fz(vmsbuild.com)p FB(')e(or)i(`)p Fz(descrip.mms)p FB(')d(as)k(is.)247 b(These)99 b(use)630 1192 y Fz(CC/OPTIMIZE=NOLINE)p FB(,)26 b(whic)m(h)k(is)g(essen)m(tial)i(for)e(V)-8 b(ersion)31 b(3.0.)150 1352 y(V)-10 b(AX)31 b(C)f(V2.x)630 1462 y(Y)-8 b(ou)57 b(m)m(ust)f(ha)m(v)m(e)i(V)-8 b(ersion)56 b(2.3)i(or)e(2.4;)71 b(older)56 b(ones)h(w)m(on't)g(w)m(ork.)118 b(Edit)56 b(either)630 1571 y(`)p Fz(vmsbuild.com)p FB(')40 b(or)j(`)p Fz(descrip.mms)p FB(')d(according)k(to)g(the)f(commen)m(ts)h(in)f (them.)78 b(F)-8 b(or)630 1681 y(`)p Fz(vmsbuild.com)p FB(',)60 b(this)c(just)g(en)m(tails)i(remo)m(ving)f(t)m(w)m(o)h(`)p Fz(!)p FB(')e(delimiters.)119 b(Also)57 b(edit)630 1791 y(`)p Fz(config.h)p FB(')30 b(\(whic)m(h)h(is)h(a)f(cop)m(y)h(of)g (\014le)f(`)p Fz([.config]vms-conf.h)p FB('\))c(and)k(commen)m(t)i(out) 630 1900 y(or)44 b(delete)h(the)e(t)m(w)m(o)i(lines)f(`)p Fz(#define)29 b(__STDC__)f(0)p FB(')44 b(and)f(`)p Fz(#define)28 b(VAXC_BUILTINS)p FB(')630 2010 y(near)i(the)h(end.)150 2170 y(GNU)40 b(C)176 b(Edit)39 b(`)p Fz(vmsbuild.com)p FB(')e(or)i(`)p Fz(descrip.mms)p FB(';)j(the)d(c)m(hanges)i(are)f (di\013eren)m(t)f(from)g(those)630 2279 y(for)g(V)-10 b(AX)39 b(C)g(V2.x)h(but)e(equally)i(straigh)m(tforw)m(ard.)67 b(No)40 b(c)m(hanges)g(to)f(`)p Fz(config.h)p FB(')f(are)630 2389 y(needed.)150 2549 y(DEC)51 b(C)187 b(Edit)51 b(`)p Fz(vmsbuild.com)p FB(')e(or)i(`)p Fz(descrip.mms)p FB(')e(according)k (to)f(their)f(commen)m(ts.)105 b(No)630 2658 y(c)m(hanges)31 b(to)g(`)p Fz(config.h)p FB(')e(are)i(needed.)275 2818 y Fz(gawk)e FB(has)i(b)s(een)f(tested)i(under)e(V)-10 b(AX/VMS)31 b(5.5-1)i(using)e(V)-10 b(AX)31 b(C)g(V3.2,)h(and)f(GNU)g (C)g(1.40)i(and)150 2928 y(2.3.)42 b(It)30 b(should)g(w)m(ork)g (without)h(mo)s(di\014cations)f(for)g(VMS)h(V4.6)g(and)f(up.)150 3127 y Fj(B.3.4.2)63 b(Installing)41 b Fh(gawk)h Fj(on)f(VMS)150 3274 y FB(T)-8 b(o)34 b(install)h Fz(gawk)p FB(,)e(all)i(y)m(ou)f(need) f(is)h(a)g(\\foreign")g(command,)h(whic)m(h)e(is)h(a)g Fz(DCL)f FB(sym)m(b)s(ol)g(whose)g(v)-5 b(alue)150 3384 y(b)s(egins)30 b(with)g(a)h(dollar)f(sign.)41 b(F)-8 b(or)31 b(example:)390 3519 y Fz($)47 b(GAWK)g(:==)g ($disk1:[gnubin]GAWK)150 3654 y FB(Substitute)31 b(the)h(actual)h(lo)s (cation)h(of)e Fz(gawk.exe)d FB(for)j(`)p Fz($disk1:[gnubin])p FB('.)41 b(The)31 b(sym)m(b)s(ol)h(should)f(b)s(e)150 3763 y(placed)24 b(in)f(the)h(`)p Fz(login.com)p FB(')e(of)i(an)m(y)g (user)f(who)g(w)m(an)m(ts)h(to)h(run)d Fz(gawk)p FB(,)i(so)g(that)g(it) h(is)e(de\014ned)g(ev)m(ery)h(time)150 3873 y(the)g(user)e(logs)j(on.) 38 b(Alternativ)m(ely)-8 b(,)28 b(the)23 b(sym)m(b)s(ol)h(ma)m(y)g(b)s (e)e(placed)i(in)f(the)h(system-wide)f(`)p Fz(sylogin.com)p FB(')150 3983 y(pro)s(cedure,)29 b(whic)m(h)i(allo)m(ws)g(all)h(users)d (to)i(run)e Fz(gawk)p FB(.)275 4117 y(Optionally)-8 b(,)31 b(the)g(help)f(en)m(try)g(can)h(b)s(e)f(loaded)h(in)m(to)g(a)g(VMS)f (help)g(library:)390 4252 y Fz($)47 b(LIBRARY/HELP)e(SYS$HELP:HELPLIB)e ([.VMS]GAWK.HLP)150 4387 y FB(\(Y)-8 b(ou)43 b(ma)m(y)f(w)m(an)m(t)g (to)h(substitute)e(a)h(site-sp)s(eci\014c)h(help)e(library)g(rather)h (than)f(the)h(standard)f(VMS)150 4497 y(library)30 b(`)p Fz(HELPLIB)p FB('.\))40 b(After)30 b(loading)h(the)g(help)f(text,)i (the)e(command:)390 4632 y Fz($)47 b(HELP)g(GAWK)150 4767 y FB(pro)m(vides)33 b(information)g(ab)s(out)f(b)s(oth)h(the)g Fz(gawk)e FB(implemen)m(tation)k(and)d(the)h Fz(awk)f FB(programming)g(lan-)150 4876 y(guage.)275 5011 y(The)e(logical)k (name)d(`)p Fz(AWK_LIBRARY)p FB(')e(can)i(designate)i(a)e(default)h(lo) s(cation)g(for)f Fz(awk)g FB(program)g(\014les.)150 5121 y(F)-8 b(or)28 b(the)g(`)p Fz(-f)p FB(')g(option,)h(if)f(the)g(sp)s (eci\014ed)f(\014le)g(name)h(has)g(no)f(device)i(or)f(directory)g(path) f(information)h(in)150 5230 y(it,)f Fz(gawk)c FB(lo)s(oks)i(in)f(the)h (curren)m(t)f(directory)h(\014rst,)h(then)e(in)g(the)h(directory)g(sp)s (eci\014ed)f(b)m(y)g(the)h(translation)150 5340 y(of)30 b(`)p Fz(AWK_LIBRARY)p FB(')e(if)i(the)g(\014le)g(is)h(not)f(found.)39 b(If,)30 b(after)h(searc)m(hing)g(in)f(b)s(oth)f(directories,)j(the)e (\014le)g(still)p eop end %%Page: 273 285 TeXDict begin 273 284 bop 2388 -116 a Fr(App)s(endix)28 b(B:)j(Installing)g Fz(gawk)90 b FB(273)150 299 y(is)34 b(not)g(found,)g Fz(gawk)e FB(app)s(ends)g(the)i(su\016x)f(`)p Fz(.awk)p FB(')g(to)i(the)f(\014lename)g(and)f(retries)i(the)f(\014le)g (searc)m(h.)51 b(If)150 408 y(`)p Fz(AWK_LIBRARY)p FB(')28 b(is)i(not)h(de\014ned,)e(that)i(p)s(ortion)f(of)h(the)f(\014le)h (searc)m(h)g(fails)g(b)s(enignly)-8 b(.)150 608 y Fj(B.3.4.3)63 b(Running)42 b Fh(gawk)f Fj(on)h(VMS)150 755 y FB(Command-line)23 b(parsing)g(and)f(quoting)i(con)m(v)m(en)m(tions)h(are)e(signi\014can)m (tly)i(di\013eren)m(t)e(on)g(VMS,)h(so)f(exam-)150 865 y(ples)30 b(in)g(this)g(b)s(o)s(ok)f(or)h(from)g(other)g(sources)g (often)g(need)g(minor)g(c)m(hanges.)41 b(They)30 b Fw(ar)-5 b(e)37 b FB(minor)30 b(though,)150 974 y(and)g(all)h Fz(awk)f FB(programs)g(should)f(run)g(correctly)-8 b(.)275 1109 y(Here)30 b(are)h(a)g(couple)g(of)f(trivial)i(tests:)390 1244 y Fz($)47 b(gawk)g(--)g("BEGIN)f({print)g(""Hello,)g(World!""}") 390 1354 y($)h(gawk)g(-"W")g(version)390 1464 y(!)g(could)g(also)f(be)i (-"W)f(version")e(or)i("-W)g(version")150 1599 y FB(Note)32 b(that)f(upp)s(ercase)e(and)h(mixed-case)i(text)f(m)m(ust)f(b)s(e)g (quoted.)275 1734 y(The)35 b(VMS)i(p)s(ort)e(of)i Fz(gawk)e FB(includes)h(a)h Fz(DCL)p FB(-st)m(yle)g(in)m(terface)h(in)e(addition) g(to)h(the)g(original)g(shell-)150 1843 y(st)m(yle)28 b(in)m(terface)g(\(see)g(the)f(help)g(en)m(try)g(for)f(details\).)41 b(One)27 b(side)f(e\013ect)j(of)e(dual)f(command-line)h(parsing)150 1953 y(is)41 b(that)g(if)f(there)h(is)f(only)h(a)g(single)g(parameter)g (\(as)g(in)f(the)h(quoted)f(string)h(program)f(ab)s(o)m(v)m(e\),)45 b(the)150 2062 y(command)d(b)s(ecomes)g(am)m(biguous.)77 b(T)-8 b(o)42 b(w)m(ork)h(around)e(this,)k(the)e(normally)f(optional)h (`)p Fz(--)p FB(')f(\015ag)h(is)150 2172 y(required)37 b(to)h(force)g(Unix)f(st)m(yle)h(rather)g(than)f Fz(DCL)f FB(parsing.)62 b(If)36 b(an)m(y)i(other)g(dash-t)m(yp)s(e)f(options)h (\(or)150 2282 y(m)m(ultiple)f(parameters)g(suc)m(h)f(as)h(data)g (\014les)f(to)i(pro)s(cess\))e(are)h(presen)m(t,)h(there)f(is)f(no)h (am)m(biguit)m(y)h(and)150 2391 y(`)p Fz(--)p FB(')30 b(can)h(b)s(e)f(omitted.)275 2526 y(The)c(default)h(searc)m(h)g(path,)h (when)e(lo)s(oking)i(for)e Fz(awk)g FB(program)h(\014les)g(sp)s (eci\014ed)f(b)m(y)g(the)h(`)p Fz(-f)p FB(')g(option,)150 2636 y(is)43 b Fz("SYS$DISK:[],AWK_LIBRARY)o(:")p FB(.)72 b(The)42 b(logical)k(name)c(`)p Fz(AWKPATH)p FB(')g(can)h(b)s(e)f(used) g(to)i(o)m(v)m(erride)150 2745 y(this)30 b(default.)41 b(The)30 b(format)h(of)f(`)p Fz(AWKPATH)p FB(')f(is)h(a)h (comma-separated)h(list)f(of)f(directory)h(sp)s(eci\014cations.)150 2855 y(When)e(de\014ning)f(it,)h(the)g(v)-5 b(alue)30 b(should)e(b)s(e)g(quoted)h(so)g(that)g(it)h(retains)f(a)g(single)h (translation)f(and)g(not)150 2965 y(a)i(m)m(ultitranslation)h Fz(RMS)d FB(searc)m(hlist.)150 3164 y Fj(B.3.4.4)63 b(Building)42 b(and)f(Using)i Fh(gawk)e Fj(on)g(VMS)h(POSIX)150 3311 y FB(Ignore)37 b(the)g(instructions)f(ab)s(o)m(v)m(e,)k(although)d(`)p Fz(vms/gawk.hlp)p FB(')c(should)j(still)i(b)s(e)e(made)g(a)m(v)-5 b(ailable)39 b(in)150 3421 y(a)34 b(help)g(library)-8 b(.)52 b(The)33 b(source)h(tree)h(should)e(b)s(e)g(unpac)m(k)m(ed)h(in) m(to)h(a)g(con)m(tainer)g(\014le)f(subsystem)f(rather)150 3530 y(than)h(in)m(to)h(the)g(ordinary)f(VMS)g(\014lesystem.)53 b(Mak)m(e)36 b(sure)e(that)h(the)f(t)m(w)m(o)i(scripts,)f(`)p Fz(configure)p FB(')e(and)150 3640 y(`)p Fz(vms/posix-cc.sh)p FB(',)26 b(are)k(executable;)h(use)e(`)p Fz(chmod)h(+x)p FB(')f(on)g(them)g(if)g(necessary)-8 b(.)42 b(Then)28 b(execute)j(the)150 3750 y(follo)m(wing)h(t)m(w)m(o)g(commands:)390 3885 y Fz(psx>)47 b(CC=vms/posix-cc.sh)42 b(configure)390 3994 y(psx>)47 b(make)f(CC=c89)g(gawk)150 4129 y FB(The)38 b(\014rst)g(command)h(constructs)g(\014les)g(`)p Fz(config.h)p FB(')e(and)h(`)p Fz(Makefile)p FB(')f(out)i(of)g(templates,)j(using)d (a)150 4239 y(script)25 b(to)i(mak)m(e)f(the)g(C)f(compiler)h(\014t)g Fz(configure)p FB('s)d(exp)s(ectations.)40 b(The)25 b(second)h(command) f(compiles)150 4348 y(and)32 b(links)h Fz(gawk)e FB(using)h(the)h(C)f (compiler)i(directly;)g(ignore)g(an)m(y)f(w)m(arnings)f(from)g Fz(make)g FB(ab)s(out)g(b)s(eing)150 4458 y(unable)27 b(to)h(rede\014ne)e Fz(CC)p FB(.)39 b Fz(configure)25 b FB(tak)m(es)j(a)g(v)m(ery)f(long)h(time)g(to)g(execute,)h(but)e(at)h (least)g(it)g(pro)m(vides)150 4568 y(incremen)m(tal)k(feedbac)m(k)f(as) g(it)f(runs.)275 4703 y(This)f(has)h(b)s(een)g(tested)h(with)f(V)-10 b(AX/VMS)31 b(V6.2,)h(VMS)f(POSIX)e(V2.0,)j(and)e(DEC)g(C)g(V5.2.)275 4838 y(Once)25 b(built,)i Fz(gawk)e FB(w)m(orks)g(lik)m(e)i(an)m(y)g (other)f(shell)g(utilit)m(y)-8 b(.)41 b(Unlik)m(e)26 b(the)g(normal)g(VMS)g(p)s(ort)f(of)h Fz(gawk)p FB(,)150 4947 y(no)k(sp)s(ecial)h(command-line)g(manipulation)g(is)f(needed)g (in)g(the)h(VMS)f(POSIX)f(en)m(vironmen)m(t.)150 5181 y FA(B.4)67 b(Unsupp)t(orted)45 b(Op)t(erating)g(System)h(P)l(orts)150 5340 y FB(This)30 b(sections)h(describ)s(es)f(systems)g(for)g(whic)m(h) g(the)h Fz(gawk)e FB(p)s(ort)h(is)g(no)g(longer)h(supp)s(orted.)p eop end %%Page: 274 286 TeXDict begin 274 285 bop 150 -116 a FB(274)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fj(B.4.1)63 b(Installing)41 b Fh(gawk)g Fj(on)h(the)f(A)m(tari)e (ST)150 446 y FB(The)c(A)m(tari)h(p)s(ort)e(is)h(no)g(longer)h(supp)s (orted.)53 b(It)35 b(is)g(included)f(for)h(those)h(who)e(migh)m(t)i(w)m (an)m(t)g(to)g(use)e(it)150 555 y(but)c(it)h(is)f(no)g(longer)h(b)s (eing)f(activ)m(ely)j(main)m(tained.)275 699 y(There)24 b(are)i(no)f(substan)m(tial)h(di\013erences)g(when)e(installing)i Fz(gawk)e FB(on)h(v)-5 b(arious)26 b(A)m(tari)g(mo)s(dels.)39 b(Com-)150 809 y(piled)30 b Fz(gawk)f FB(executables)j(do)e(not)g (require)g(a)h(large)g(amoun)m(t)g(of)f(memory)g(with)g(most)h Fz(awk)e FB(programs,)150 918 y(and)k(should)g(run)f(on)i(all)h (Motorola)h(pro)s(cessor-based)d(mo)s(dels)g(\(called)j(further)c(ST,)h (ev)m(en)i(if)f(that)g(is)150 1028 y(not)d(exactly)h(righ)m(t\).)275 1171 y(In)24 b(order)i(to)g(use)f Fz(gawk)p FB(,)h(y)m(ou)g(need)f(to)i (ha)m(v)m(e)g(a)f(shell,)h(either)f(text)g(or)g(graphics,)h(that)f(do)s (es)f(not)h(map)150 1281 y(all)34 b(the)f(c)m(haracters)h(of)g(a)f (command)g(line)g(to)h(upp)s(ercase.)47 b(Main)m(taining)35 b(case)f(distinction)g(in)e(option)150 1391 y(\015ags)g(is)h(v)m(ery)f (imp)s(ortan)m(t)h(\(see)g(Section)g(11.2)h([Command-Line)e(Options],)h (page)g(173\).)48 b(These)32 b(da)m(ys)150 1500 y(this)27 b(is)f(the)h(default)g(and)f(it)i(ma)m(y)f(only)g(b)s(e)f(a)h(problem)f (for)h(some)g(v)m(ery)g(old)g(mac)m(hines.)40 b(If)26 b(y)m(our)h(system)150 1610 y(do)s(es)h(not)g(preserv)m(e)g(the)g(case) i(of)e(option)g(\015ags,)h(y)m(ou)g(need)e(to)i(upgrade)f(y)m(our)g(to) s(ols.)40 b(Supp)s(ort)26 b(for)i(I/O)150 1719 y(redirection)33 b(is)e(necessary)i(to)f(mak)m(e)h(it)g(easy)f(to)h(imp)s(ort)e Fz(awk)g FB(programs)h(from)f(other)h(en)m(vironmen)m(ts.)150 1829 y(Pip)s(es)e(are)g(nice)h(to)g(ha)m(v)m(e)h(but)e(not)g(vital.)150 2037 y Fj(B.4.1.1)63 b(Compiling)42 b Fh(gawk)g Fj(on)f(the)g(A)m(tari) f(ST)150 2184 y FB(A)45 b(prop)s(er)f(compilation)j(of)e Fz(gawk)f FB(sources)h(when)f Fz(sizeof\(int\))e FB(di\013ers)j(from)f Fz(sizeof\(void)28 b(*\))150 2294 y FB(requires)33 b(an)h(ISO)f(C)h (compiler.)52 b(An)33 b(initial)j(p)s(ort)d(w)m(as)h(done)g(with)g Fz(gcc)p FB(.)50 b(Y)-8 b(ou)35 b(ma)m(y)f(actually)i(prefer)150 2403 y(executables)c(where)e Fz(int)p FB(s)f(are)i(four)e(b)m(ytes)i (wide)f(but)g(the)h(other)f(v)-5 b(arian)m(t)32 b(w)m(orks)e(as)h(w)m (ell.)275 2547 y(Y)-8 b(ou)26 b(ma)m(y)g(need)f(quite)h(a)g(bit)f(of)h (memory)f(when)g(trying)g(to)i(recompile)f(the)g Fz(gawk)e FB(sources,)j(as)f(some)150 2657 y(source)f(\014les)g(\(`)p Fz(regex.c)p FB(')f(in)h(particular\))h(are)f(quite)h(big.)39 b(If)25 b(y)m(ou)g(run)f(out)h(of)g(memory)g(compiling)h(suc)m(h)150 2766 y(a)31 b(\014le,)f(try)h(reducing)f(the)g(optimization)j(lev)m(el) f(for)e(this)g(particular)h(\014le,)f(whic)m(h)h(ma)m(y)f(help.)275 2910 y(With)21 b(a)h(reasonable)g(shell)g(\()p Fz(bash)e FB(will)i(do\),)i(y)m(ou)d(ha)m(v)m(e)i(a)e(prett)m(y)h(go)s(o)s(d)g(c) m(hance)g(that)g(the)f Fz(configure)150 3020 y FB(utilit)m(y)32 b(will)f(succeed,)h(and)e(in)g(particular)h(if)g(y)m(ou)g(run)e (GNU/Lin)m(ux,)j(MiNT)f(or)f(a)h(similar)g(op)s(erating)150 3129 y(system.)38 b(Otherwise)21 b(sample)g(v)m(ersions)g(of)h(`)p Fz(config.h)p FB(')d(and)i(`)p Fz(Makefile.st)p FB(')d(are)k(giv)m(en)g (in)f(the)g(`)p Fz(atari)p FB(')150 3239 y(sub)s(directory)37 b(and)g(can)h(b)s(e)f(edited)h(and)f(copied)h(to)g(the)g(corresp)s (onding)e(\014les)i(in)f(the)h(main)g(source)150 3348 y(directory)-8 b(.)69 b(Ev)m(en)39 b(if)h Fz(configure)c FB(pro)s(duces)i(something,)43 b(it)d(migh)m(t)g(b)s(e)f(advisable)h (to)g(compare)g(its)150 3458 y(results)30 b(with)g(the)h(sample)f(v)m (ersions)h(and)f(p)s(ossibly)f(mak)m(e)j(adjustmen)m(ts.)275 3601 y(Some)43 b Fz(gawk)g FB(source)g(co)s(de)h(fragmen)m(ts)g(dep)s (end)e(on)h(a)h(prepro)s(cessor)f(de\014ne)g(`)p Fz(atarist)p FB('.)79 b(This)150 3711 y(basically)34 b(assumes)d(the)i(TOS)e(en)m (vironmen)m(t)h(with)g Fz(gcc)p FB(.)46 b(Mo)s(dify)32 b(these)g(sections)h(as)g(appropriate)f(if)150 3821 y(they)f(are)h(not) g(righ)m(t)f(for)g(y)m(our)h(en)m(vironmen)m(t.)44 b(Also)32 b(see)f(the)h(remarks)f(ab)s(out)g Fz(AWKPATH)e FB(and)i Fz(envsep)150 3930 y FB(in)f(Section)h(B.4.1.2)i([Running)c Fz(gawk)g FB(on)i(the)f(A)m(tari)i(ST],)e(page)h(274.)275 4074 y(As)f(shipp)s(ed,)e(the)i(sample)g(`)p Fz(config.h)p FB(')e(claims)j(that)g(the)f Fz(system)f FB(function)g(is)h(missing)g (from)g(the)150 4183 y(libraries,)i(whic)m(h)f(is)h(not)g(true,)g(and)f (an)g(alternativ)m(e)j(implemen)m(tation)f(of)f(this)f(function)h(is)f (pro)m(vided)150 4293 y(in)i(`)p Fz(unsupported/atari/system)o(.c)p FB('.)42 b(Dep)s(ending)33 b(up)s(on)e(y)m(our)i(particular)g(com)m (bination)i(of)e(shell)150 4403 y(and)23 b(op)s(erating)g(system,)i(y)m (ou)f(migh)m(t)f(w)m(an)m(t)h(to)g(c)m(hange)g(the)g(\014le)f(to)h (indicate)g(that)g Fz(system)d FB(is)i(a)m(v)-5 b(ailable.)150 4611 y Fj(B.4.1.2)63 b(Running)42 b Fh(gawk)f Fj(on)h(the)e(A)m(tari)g (ST)150 4758 y FB(An)d(executable)i(v)m(ersion)f(of)g Fz(gawk)e FB(should)h(b)s(e)g(placed,)j(as)e(usual,)h(an)m(ywhere)e(in) h(y)m(our)f Fz(PATH)f FB(where)150 4868 y(y)m(our)30 b(shell)h(can)g(\014nd)d(it.)275 5011 y(While)33 b(executing,)i(the)e (A)m(tari)i(v)m(ersion)e(of)g Fz(gawk)f FB(creates)i(a)g(n)m(um)m(b)s (er)d(of)i(temp)s(orary)g(\014les.)48 b(When)150 5121 y(using)38 b Fz(gcc)g FB(libraries)h(for)f(TOS,)g Fz(gawk)g FB(lo)s(oks)h(for)f(either)i(of)e(the)h(en)m(vironmen)m(t)h(v)-5 b(ariables,)41 b Fz(TEMP)d FB(or)150 5230 y Fz(TMPDIR)p FB(,)i(in)f(that)g(order.)67 b(If)39 b(either)g(one)h(is)f(found,)h (its)f(v)-5 b(alue)40 b(is)f(assumed)g(to)h(b)s(e)e(a)i(directory)f (for)150 5340 y(temp)s(orary)33 b(\014les.)52 b(This)33 b(directory)h(m)m(ust)g(exist,)i(and)d(if)h(y)m(ou)g(can)g(spare)g(the) g(memory)-8 b(,)35 b(it)g(is)f(a)g(go)s(o)s(d)p eop end %%Page: 275 287 TeXDict begin 275 286 bop 2388 -116 a Fr(App)s(endix)28 b(B:)j(Installing)g Fz(gawk)90 b FB(275)150 299 y(idea)33 b(to)h(put)e(it)h(on)g(a)g(RAM)g(driv)m(e.)48 b(If)32 b(neither)g Fz(TEMP)g FB(nor)g Fz(TMPDIR)f FB(are)i(found,)g(then)f Fz(gawk)f FB(uses)i(the)150 408 y(curren)m(t)d(directory)h(for)f(its)h (temp)s(orary)f(\014les.)275 560 y(The)g(ST)g(v)m(ersion)h(of)g Fz(gawk)f FB(searc)m(hes)h(for)g(its)g(program)g(\014les,)g(as)g (describ)s(ed)f(in)g(Section)i(11.4)g([The)150 670 y Fz(AWKPATH)i FB(En)m(vironmen)m(t)i(V)-8 b(ariable],)39 b(page)e(179.)58 b(The)35 b(default)h(v)-5 b(alue)37 b(for)e(the)h Fz(AWKPATH)e FB(v)-5 b(ariable)37 b(is)150 779 y(tak)m(en)30 b(from)e Fz(DEFPATH)f FB(de\014ned)g(in)i(`)p Fz(Makefile)p FB('.)38 b(The)28 b(sample)h Fz(gcc)p FB(/TOS)e(`)p Fz(Makefile)p FB(')g(for)i(the)f(ST)g(in)150 889 y(the)34 b(distribution)e(sets)i Fz(DEFPATH)e FB(to)i Fz (".,c:\\lib\\awk,c:\\gnu\\li)o(b\\aw)o(k")-6 b FB(.)50 b(The)32 b(searc)m(h)i(path)g(can)150 998 y(b)s(e)e(mo)s(di\014ed)g(b)m (y)g(explicitly)i(setting)g Fz(AWKPATH)d FB(to)i(whatev)m(er)h(y)m(ou)f (w)m(an)m(t.)48 b(Note)34 b(that)g(colons)f(cannot)150 1108 y(b)s(e)h(used)g(on)g(the)h(ST)e(to)j(separate)f(elemen)m(ts)h(in) e(the)h Fz(AWKPATH)e FB(v)-5 b(ariable,)36 b(since)f(they)g(ha)m(v)m(e) h(another)150 1218 y(reserv)m(ed)28 b(meaning.)40 b(Instead,)29 b(y)m(ou)f(m)m(ust)g(use)g(a)g(comma)h(to)f(separate)h(elemen)m(ts)h (in)d(the)h(path.)40 b(When)150 1327 y(recompiling,)29 b(the)e(separating)h(c)m(haracter)h(can)f(b)s(e)e(mo)s(di\014ed)h(b)m (y)g(initializing)i(the)f Fz(envsep)d FB(v)-5 b(ariable)28 b(in)150 1437 y(`)p Fz(unsupported/atari/gawkmis)o(c.at)o(r)p FB(')d(to)31 b(another)f(v)-5 b(alue.)275 1588 y(Although)33 b Fz(awk)g FB(allo)m(ws)i(great)g(\015exibilit)m(y)g(in)e(doing)h(I/O)f (redirections)i(from)e(within)g(a)h(program,)150 1698 y(this)25 b(facilit)m(y)i(should)c(b)s(e)i(used)f(with)g(care)i(on)f (the)g(ST)e(running)h(under)f(TOS.)h(In)g(some)h(circumstances,)150 1808 y(the)42 b(OS)g(routines)g(for)g(\014le-handle)g(p)s(o)s(ol)g(pro) s(cessing)g(lose)h(trac)m(k)g(of)f(certain)h(ev)m(en)m(ts,)k(causing)c (the)150 1917 y(computer)32 b(to)g(crash)g(and)f(requiring)g(a)i(reb)s (o)s(ot.)44 b(Often)32 b(a)g(w)m(arm)g(reb)s(o)s(ot)f(is)h(su\016cien)m (t.)46 b(F)-8 b(ortunately)g(,)150 2027 y(this)30 b(happ)s(ens)e (infrequen)m(tly)i(and)g(in)g(rather)g(esoteric)i(situations.)41 b(In)29 b(particular,)i(a)m(v)m(oid)h(ha)m(ving)f(one)150 2136 y(part)22 b(of)g(an)g Fz(awk)f FB(program)h(using)g Fz(print)f FB(statemen)m(ts)i(explicitly)h(redirected)f(to)f(`)p Fz(/dev/stdout)p FB(',)g(while)150 2246 y(other)31 b Fz(print)f FB(statemen)m(ts)j(use)d(the)i(default)f(standard)f(output,) h(and)g(a)g(calling)i(shell)e(has)g(redirected)150 2356 y(standard)f(output)g(to)h(a)f(\014le.)275 2507 y(When)38 b Fz(gawk)f FB(is)h(compiled)h(with)f(the)h(ST)e(v)m(ersion)i(of)g Fz(gcc)e FB(and)h(its)h(usual)f(libraries,)j(it)e(accepts)150 2617 y(b)s(oth)27 b(`)p Fz(/)p FB(')h(and)f(`)p Fz(\\)p FB(')h(as)g(path)f(separators.)41 b(While)28 b(this)g(is)g(con)m(v)m (enien)m(t,)i(it)e(should)f(b)s(e)g(remem)m(b)s(ered)g(that)150 2726 y(this)35 b(remo)m(v)m(es)i(one)e(tec)m(hnically)i(v)-5 b(alid)36 b(c)m(haracter)h(\(`)p Fz(/)p FB('\))f(from)f(y)m(our)g (\014le)g(name.)55 b(It)35 b(ma)m(y)h(also)g(create)150 2836 y(problems)26 b(for)h(external)h(programs)e(called)j(via)e(the)g Fz(system)f FB(function,)h(whic)m(h)g(ma)m(y)h(not)f(supp)s(ort)e(this) 150 2946 y(con)m(v)m(en)m(tion.)44 b(Whenev)m(er)32 b(it)f(is)g(p)s (ossible)g(that)g(a)h(\014le)f(created)g(b)m(y)g Fz(gawk)f FB(will)h(b)s(e)g(used)f(b)m(y)g(some)i(other)150 3055 y(program,)h(use)f(only)h(bac)m(kslashes.)48 b(Also)34 b(remem)m(b)s(er)d(that)j(in)e Fz(awk)p FB(,)g(bac)m(kslashes)i(in)e (strings)g(ha)m(v)m(e)i(to)150 3165 y(b)s(e)27 b(doubled)g(in)g(order)g (to)h(get)h(literal)g(bac)m(kslashes)f(\(see)h(Section)f(2.2)h([Escap)s (e)f(Sequences],)g(page)g(25\).)150 3381 y Fj(B.4.2)63 b(Installing)41 b Fh(gawk)g Fj(on)h(a)e(T)-10 b(andem)150 3528 y FB(The)26 b(T)-8 b(andem)27 b(p)s(ort)f(is)h(only)g(minimally)g (supp)s(orted.)38 b(The)26 b(p)s(ort's)h(con)m(tributor)g(no)g(longer)g (has)g(access)150 3638 y(to)k(a)g(T)-8 b(andem)30 b(system.)275 3789 y(The)24 b(T)-8 b(andem)25 b(p)s(ort)f(w)m(as)i(done)f(on)g(a)g (Cyclone)h(mac)m(hine)g(running)d(D20.)40 b(The)25 b(p)s(ort)f(is)h (prett)m(y)h(clean)150 3899 y(and)31 b(all)i(facilities)h(seem)e(to)h (w)m(ork)e(except)i(for)f(the)g(I/O)f(piping)h(facilities)i(\(see)e (Section)h(3.8.5)g([Using)150 4008 y Fz(getline)c FB(from)h(a)h(Pip)s (e],)f(page)i(54,)g(Section)f(3.8.6)h([Using)f Fz(getline)e FB(in)m(to)j(a)f(V)-8 b(ariable)32 b(from)e(a)h(Pip)s(e],)150 4118 y(page)d(55,)h(and)d(Section)i(4.6)h([Redirecting)f(Output)e(of)h Fz(print)f FB(and)h Fz(printf)p FB(],)f(page)i(65\),)h(whic)m(h)e(is)h (just)150 4228 y(to)s(o)j(foreign)g(a)g(concept)g(for)f(T)-8 b(andem.)275 4379 y(T)g(o)23 b(build)f(a)h(T)-8 b(andem)23 b(executable)h(from)f(source,)h(do)m(wnload)f(all)h(of)f(the)g(\014les) g(so)g(that)h(the)f(\014le)g(names)150 4489 y(on)36 b(the)g(T)-8 b(andem)35 b(b)s(o)m(x)g(conform)h(to)h(the)e(restrictions)i(of)f(D20.) 58 b(F)-8 b(or)36 b(example,)i(`)p Fz(array.c)p FB(')d(b)s(ecomes)150 4598 y(`)p Fz(ARRAYC)p FB(',)27 b(and)f(`)p Fz(awk.h)p FB(')h(b)s(ecomes)g(`)p Fz(AWKH)p FB('.)39 b(The)27 b(totally)i(T)-8 b(andem-sp)s(eci\014c)27 b(\014les)g(are)h(in)f(the)g(`)p Fz(tandem)p FB(')150 4708 y(\\sub)m(v)m(olume")h(\(`)p Fz(unsupported/tandem)p FB(')23 b(in)j(the)i Fz(gawk)d FB(distribution\))i(and)f(should)g(b)s(e)h(copied)g(to)h(the)150 4818 y(main)i(source)h(directory)g(b)s(efore)f(building)f Fz(gawk)p FB(.)275 4969 y(The)f(\014le)i(`)p Fz(compit)p FB(')e(can)h(then)g(b)s(e)g(used)f(to)i(compile)g(and)f(bind)f(an)h (executable.)42 b(Alas,)30 b(there)g(is)f(no)150 5079 y Fz(configure)f FB(or)i Fz(make)p FB(.)275 5230 y(Usage)j(is)e(the)h (same)g(as)g(for)g(Unix,)g(except)h(that)f(D20)h(requires)e(all)i(`)p Fz({)p FB(')f(and)f(`)p Fz(})p FB(')h(c)m(haracters)h(to)g(b)s(e)150 5340 y(escap)s(ed)d(with)f(`)p Fz(~)p FB(')h(on)g(the)g(command)f(line) h(\(but)g Fw(not)39 b FB(in)29 b(script)h(\014les\).)41 b(Also,)30 b(the)g(standard)f(T)-8 b(andem)p eop end %%Page: 276 288 TeXDict begin 276 287 bop 150 -116 a FB(276)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(syn)m(tax)i(for)g(`)p Fz(/in)e(filename,out)d(filename/)p FB(')i(m)m(ust)j(b)s(e)f(used)g(instead)h(of)g(the)g(usual)g(Unix)g(`)p Fz(<)p FB(')g(and)150 408 y(`)p Fz(>)p FB(')f(for)f(\014le)g (redirection.)42 b(\(Redirection)31 b(options)g(on)f Fz(getline)p FB(,)f Fz(print)g FB(etc.,)j(are)f(supp)s(orted.\))275 543 y(The)37 b(`)p Fz(-mr)29 b Fk(val)11 b FB(')37 b(option)h(\(see)h (Section)f(11.2)i([Command-Line)d(Options],)i(page)g(173\))g(has)f(b)s (een)150 653 y(\\stolen")29 b(to)f(enable)f(T)-8 b(andem)27 b(users)g(to)h(pro)s(cess)e(\014xed-length)i(records)f(with)f(no)i (\\end-of-line")g(c)m(har-)150 763 y(acter.)42 b(That)30 b(is,)h(`)p Fz(-mr)f(74)p FB(')g(tells)h Fz(gawk)e FB(to)i(read)g(the)f (input)g(\014le)g(as)h(\014xed)e(74-b)m(yte)k(records.)150 996 y FA(B.5)67 b(Rep)t(orting)46 b(Problems)g(and)e(Bugs)390 1155 y Fw(Ther)-5 b(e)33 b(is)g(nothing)h(mor)-5 b(e)33 b(danger)-5 b(ous)35 b(than)e(a)g(b)-5 b(or)g(e)g(d)35 b(ar)-5 b(che)g(olo)g(gist.)390 1265 y FB(The)30 b(Hitc)m(hhik)m(er's)i (Guide)e(to)h(the)g(Galaxy)275 1400 y(If)f(y)m(ou)h(ha)m(v)m(e)h (problems)e(with)h Fz(gawk)e FB(or)i(think)f(that)i(y)m(ou)f(ha)m(v)m (e)h(found)d(a)j(bug,)e(please)i(rep)s(ort)e(it)h(to)150 1509 y(the)g(dev)m(elop)s(ers;)f(w)m(e)h(cannot)g(promise)f(to)i(do)e (an)m(ything)h(but)e(w)m(e)i(migh)m(t)g(w)m(ell)h(w)m(an)m(t)f(to)g (\014x)f(it.)275 1644 y(Before)h(rep)s(orting)e(a)i(bug,)f(mak)m(e)h (sure)e(y)m(ou)i(ha)m(v)m(e)g(actually)h(found)d(a)h(real)h(bug.)40 b(Carefully)30 b(reread)150 1754 y(the)g(do)s(cumen)m(tation)i(and)d (see)i(if)f(it)h(really)g(sa)m(ys)g(y)m(ou)g(can)g(do)f(what)g(y)m (ou're)h(trying)f(to)h(do.)41 b(If)30 b(it's)h(not)150 1863 y(clear)g(whether)e(y)m(ou)i(should)e(b)s(e)g(able)i(to)f(do)g (something)h(or)f(not,)g(rep)s(ort)g(that)g(to)s(o;)i(it's)e(a)h(bug)e (in)h(the)150 1973 y(do)s(cumen)m(tation!)275 2108 y(Before)25 b(rep)s(orting)f(a)h(bug)f(or)h(trying)g(to)g(\014x)f(it)h(y)m (ourself,)i(try)d(to)i(isolate)g(it)f(to)h(the)f(smallest)g(p)s (ossible)150 2217 y Fz(awk)32 b FB(program)g(and)g(input)g(data)h (\014le)g(that)g(repro)s(duces)f(the)h(problem.)47 b(Then)31 b(send)h(us)g(the)h(program)150 2327 y(and)26 b(data)i(\014le,)g(some)f (idea)g(of)g(what)g(kind)f(of)h(Unix)f(system)h(y)m(ou're)g(using,)h (the)f(compiler)g(y)m(ou)g(used)f(to)150 2436 y(compile)33 b Fz(gawk)p FB(,)f(and)g(the)g(exact)i(results)e Fz(gawk)g FB(ga)m(v)m(e)i(y)m(ou.)47 b(Also)33 b(sa)m(y)g(what)f(y)m(ou)h(exp)s (ected)g(to)g(o)s(ccur;)150 2546 y(this)d(helps)g(us)g(decide)h (whether)e(the)i(problem)f(is)g(really)h(in)f(the)h(do)s(cumen)m (tation.)275 2681 y(Once)f(y)m(ou)h(ha)m(v)m(e)g(a)g(precise)g (problem,)f(send)f(email)j(to)f Fz(bug-gawk@gnu.org)p FB(.)275 2816 y(Please)h(include)g(the)g(v)m(ersion)g(n)m(um)m(b)s(er)e (of)i Fz(gawk)e FB(y)m(ou)i(are)g(using.)44 b(Y)-8 b(ou)32 b(can)g(get)h(this)f(information)150 2925 y(with)41 b(the)h(command)g (`)p Fz(gawk)29 b(--version)p FB('.)72 b(Using)42 b(this)g(address)e (automatically)45 b(sends)c(a)h(carb)s(on)150 3035 y(cop)m(y)34 b(of)f(y)m(our)g(mail)h(to)g(me.)49 b(If)33 b(necessary)-8 b(,)35 b(I)e(can)g(b)s(e)g(reac)m(hed)h(directly)f(at)h Fz(arnold@gnu.org)p FB(.)45 b(The)150 3145 y(bug)31 b(rep)s(orting)g (address)f(is)i(preferred)e(since)i(the)f(email)i(list)f(is)f(arc)m (hiv)m(ed)h(at)g(the)g(GNU)g(Pro)5 b(ject.)45 b Fw(A)n(l)5 b(l)150 3254 y(email)33 b(should)h(b)-5 b(e)33 b(in)f(English,)h(sinc) -5 b(e)33 b(that)h(is)e(my)h(native)g(language.)275 3389 y Fr(Caution:)k FB(Do)24 b Fw(not)33 b FB(try)23 b(to)h(rep)s(ort)e (bugs)h(in)g Fz(gawk)f FB(b)m(y)h(p)s(osting)h(to)g(the)f(Usenet/In)m (ternet)i(newsgroup)150 3499 y Fz(comp.lang.awk)p FB(.)48 b(While)35 b(the)f Fz(gawk)f FB(dev)m(elop)s(ers)h(do)g(o)s (ccasionally)i(read)e(this)g(newsgroup,)g(there)g(is)150 3608 y(no)43 b(guaran)m(tee)h(that)g(w)m(e)g(will)f(see)h(y)m(our)f(p)s (osting.)78 b(The)43 b(steps)g(describ)s(ed)f(ab)s(o)m(v)m(e)i(are)f (the)g(o\016cial)150 3718 y(recognized)32 b(w)m(a)m(ys)f(for)f(rep)s (orting)g(bugs.)275 3853 y(Non-bug)38 b(suggestions)i(are)g(alw)m(a)m (ys)g(w)m(elcome)h(as)e(w)m(ell.)67 b(If)39 b(y)m(ou)g(ha)m(v)m(e)h (questions)f(ab)s(out)g(things)150 3962 y(that)26 b(are)g(unclear)f(in) g(the)h(do)s(cumen)m(tation)g(or)f(are)h(just)f(obscure)g(features,)h (ask)g(me;)h(I)e(will)h(try)f(to)h(help)150 4072 y(y)m(ou)k(out,)h (although)g(I)e(ma)m(y)i(not)f(ha)m(v)m(e)i(the)e(time)h(to)g(\014x)e (the)h(problem.)41 b(Y)-8 b(ou)30 b(can)g(send)g(me)g(electronic)150 4182 y(mail)h(at)g(the)g(In)m(ternet)f(address)g(noted)g(previously)-8 b(.)275 4316 y(If)37 b(y)m(ou)h(\014nd)e(bugs)h(in)g(one)h(of)g(the)f (non-Unix)h(p)s(orts)f(of)g Fz(gawk)p FB(,)i(please)f(send)f(an)h (electronic)h(mail)150 4426 y(message)c(to)g(the)g(p)s(erson)e(who)g (main)m(tains)i(that)g(p)s(ort.)52 b(They)33 b(are)i(named)f(in)g(the)g (follo)m(wing)i(list,)g(as)150 4536 y(w)m(ell)30 b(as)f(in)f(the)i(`)p Fz(README)p FB(')d(\014le)i(in)g(the)g Fz(gawk)e FB(distribution.)40 b(Information)29 b(in)f(the)h(`)p Fz(README)p FB(')f(\014le)h(should) 150 4645 y(b)s(e)h(considered)g(authoritativ)m(e)j(if)d(it)h (con\015icts)g(with)f(this)g(b)s(o)s(ok.)275 4780 y(The)f(p)s(eople)i (main)m(taining)g(the)g(non-Unix)f(p)s(orts)f(of)i Fz(gawk)e FB(are)i(as)g(follo)m(ws:)150 5025 y(Amiga)399 b(F)-8 b(red)31 b(Fish,)f Fz(fnf@ninemoons.com)p FB(.)150 5242 y(BeOS)432 b(Martin)31 b(Bro)m(wn,)g Fz(mc@whoever.com)p FB(.)p eop end %%Page: 277 289 TeXDict begin 277 288 bop 2388 -116 a Fr(App)s(endix)28 b(B:)j(Installing)g Fz(gawk)90 b FB(277)150 299 y(MS-DOS)303 b(Scott)56 b(Dei\014k,)61 b Fz(scottd@amgen.com)50 b FB(and)k(Darrel)h(Hank)m(erson,)808 408 y Fz(hankedr@mail.auburn.edu)p FB(.)150 626 y(MS-Windo)m(ws)130 b(Juan)30 b(Grigera,)h Fz(juan@biophnet.unlp.edu.ar)p FB(.)150 844 y(OS/2)446 b(The)28 b(Unix)h(for)f(OS/2)h(team,)h Fz(gawk-maintainer@unixos2.)o (org)o FB(.)150 1061 y(T)-8 b(andem)337 b(Stephen)30 b(Da)m(vies,)i Fz(scldad@sdc.com.au)p FB(.)150 1279 y(VMS)456 b(P)m(at)32 b(Rankin,)e Fz(rankin@pactechdata.com)p FB(.)275 1418 y(If)36 b(y)m(our)h(bug)g(is)g(also)h(repro)s(ducible)e(under)g (Unix,)j(please)f(send)e(a)i(cop)m(y)g(of)f(y)m(our)g(rep)s(ort)g(to)h (the)150 1528 y Fz(bug-gawk@gnu.org)26 b FB(email)31 b(list)g(as)g(w)m(ell.)150 1768 y FA(B.6)67 b(Other)46 b(F)-11 b(reely)45 b(Av)-7 b(ailable)46 b Fq(awk)d FA(Implemen)l (tations)390 1927 y Fw(It's)33 b(kind)g(of)f(fun)h(to)g(put)g(c)-5 b(omments)34 b(like)e(this)i(in)e(your)h(awk)h(c)-5 b(o)g(de.)572 2037 y Fz(//)30 b(Do)f(C++)h(comments)e(work?)h(answer:)f(yes!)h(of)h (course)390 2146 y FB(Mic)m(hael)i(Brennan)275 2285 y(There)22 b(are)i(three)f(other)h(freely)g(a)m(v)-5 b(ailable)25 b Fz(awk)e FB(implemen)m(tations.)39 b(This)23 b(section)h(brie\015y)f (describ)s(es)150 2395 y(where)30 b(to)h(get)h(them:)150 2562 y(Unix)41 b Fz(awk)114 b FB(Brian)41 b(Kernighan)f(has)h(made)g (his)f(implemen)m(tation)j(of)e Fz(awk)f FB(freely)i(a)m(v)-5 b(ailable.)74 b(Y)-8 b(ou)630 2671 y(can)35 b(retriev)m(e)h(this)f(v)m (ersion)g(via)g(the)g(W)-8 b(orld)35 b(Wide)h(W)-8 b(eb)35 b(from)f(his)h(home)f(page.)3494 2638 y Fo(2)3586 2671 y FB(It)h(is)630 2781 y(a)m(v)-5 b(ailable)33 b(in)d(sev)m(eral)i(arc)m (hiv)m(e)f(formats:)630 2945 y(Shell)f(arc)m(hiv)m(e)1110 3055 y Fz(http://cm.bell-labs.com/)o(who/)o(bwk/)o(awk)o(.sha)o(r)630 3219 y FB(Compressed)f Fz(tar)h FB(\014le)1110 3328 y Fz(http://cm.bell-labs.com/)o(who/)o(bwk/)o(awk)o(.tar)o(.gz)630 3492 y FB(Zip)g(\014le)202 b Fz(http://cm.bell-labs.com/)o(who/)o(bwk/) o(awk)o(.zip)630 3657 y FB(This)29 b(v)m(ersion)h(requires)f(an)h(ISO)f (C)g(\(1990)j(standard\))d(compiler;)i(the)f(C)f(compiler)h(from)630 3766 y(GCC)g(\(the)h(GNU)g(Compiler)f(Collection\))j(w)m(orks)d(quite)h (nicely)-8 b(.)630 3903 y(See)34 b(Section)g(A.4)h([Extensions)e(in)h (the)g(Bell)g(Lab)s(oratories)h Fz(awk)p FB(],)f(page)g(254,)i(for)d(a) h(list)630 4013 y(of)d(extensions)f(in)g(this)h Fz(awk)e FB(that)i(are)g(not)g(in)f(POSIX)f Fz(awk)p FB(.)150 4177 y Fz(mawk)288 b FB(Mic)m(hael)45 b(Brennan)d(has)g(written)h(an)f (indep)s(enden)m(t)g(implemen)m(tation)i(of)f Fz(awk)p FB(,)i(called)630 4286 y Fz(mawk)p FB(.)99 b(It)50 b(is)g(a)m(v)-5 b(ailable)52 b(under)d(the)h(GPL)g(\(see)h([GNU)g(General)g(Public)f (License],)630 4396 y(page)31 b(310\),)h(just)e(as)h Fz(gawk)e FB(is.)630 4533 y(Y)-8 b(ou)45 b(can)f(get)i(it)f(via)g(anon) m(ymous)f Fz(ftp)f FB(to)j(the)e(host)h Fz(ftp.whidbey.net)-5 b FB(.)83 b(Change)630 4643 y(directory)46 b(to)g(`)p Fz(/pub/brennan)p FB('.)84 b(Use)46 b(\\binary")g(or)f(\\image")j(mo)s (de,)i(and)45 b(retriev)m(e)630 4752 y(`)p Fz(mawk1.3.3.tar.gz)p FB(')26 b(\(or)31 b(the)g(latest)h(v)m(ersion)f(that)g(is)f(there\).) 630 4889 y Fz(gunzip)35 b FB(ma)m(y)i(b)s(e)f(used)g(to)h(decompress)g (this)f(\014le.)60 b(Installation)38 b(is)f(similar)g(to)g Fz(gawk)p FB('s)630 4999 y(\(see)31 b(Section)h(B.2)f([Compiling)g(and) e(Installing)i Fz(gawk)f FB(on)g(Unix],)h(page)g(264\).)630 5135 y Fz(mawk)e FB(has)h(the)h(follo)m(wing)h(extensions)f(that)g(are) f(not)h(in)f(POSIX)f Fz(awk)p FB(:)p 150 5241 1200 4 v 199 5308 a Fo(2)275 5340 y Fm(http://cm.bell-labs.com/who/bwk)p eop end %%Page: 278 290 TeXDict begin 278 289 bop 150 -116 a FB(278)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)705 299 y Fy(\017)60 b FB(The)24 b Fz(fflush)f FB(built-in)i(function)f (for)g(\015ushing)f(bu\013ered)h(output)g(\(see)i(Section)f(8.1.4)810 408 y([Input/Output)k(F)-8 b(unctions],)31 b(page)g(140\).)705 543 y Fy(\017)60 b FB(The)51 b(`)p Fz(**)p FB(')h(and)f(`)p Fz(**=)p FB(')g(op)s(erators)h(\(see)g(Section)g(5.5)h([Arithmetic)g (Op)s(erators],)810 653 y(page)31 b(78)g(and)f(also)h(see)g(Section)h (5.7)f([Assignmen)m(t)g(Expressions],)f(page)h(81\).)705 787 y Fy(\017)60 b FB(The)29 b(use)g(of)g Fz(func)g FB(as)g(an)g (abbreviation)h(for)g Fz(function)d FB(\(see)j(Section)g(8.2.1)h([F)-8 b(unc-)810 897 y(tion)31 b(De\014nition)g(Syn)m(tax],)g(page)g(149\).) 705 1031 y Fy(\017)60 b FB(The)30 b(`)p Fz(\\x)p FB(')g(escap)s(e)h (sequence)g(\(see)g(Section)g(2.2)h([Escap)s(e)e(Sequences],)h(page)g (25\).)705 1166 y Fy(\017)60 b FB(The)31 b(`)p Fz(/dev/stdout)p FB(',)g(and)g(`)p Fz(/dev/stderr)p FB(')e(sp)s(ecial)k(\014les)f(\(see) h(Section)f(4.7)i([Sp)s(e-)810 1275 y(cial)29 b(File)g(Names)f(in)f Fz(gawk)p FB(],)h(page)g(67\).)41 b(Use)28 b Fz("-")f FB(instead)h(of)g Fz("/dev/stdin")c FB(with)810 1385 y Fz(mawk)p FB(.)705 1519 y Fy(\017)60 b FB(The)33 b(abilit)m(y)h(for)g Fz(FS)e FB(and)h(for)g(the)g(third)g(argumen)m(t)g(to)h Fz(split)e FB(to)i(b)s(e)f(n)m(ull)g(strings)810 1629 y(\(see)e(Section)h(3.5.2)g([Making)f(Eac)m(h)g(Character)g(a)g (Separate)g(Field],)g(page)g(44\).)705 1763 y Fy(\017)60 b FB(The)45 b(abilit)m(y)h(to)g(delete)h(all)f(of)g(an)f(arra)m(y)h(at) g(once)f(with)g(`)p Fz(delete)29 b Fk(array)11 b FB(')44 b(\(see)810 1873 y(Section)31 b(7.6)h([The)e Fz(delete)e FB(Statemen)m(t],)33 b(page)e(120\).)705 2007 y Fy(\017)60 b FB(The)30 b(abilit)m(y)i(for)f Fz(RS)f FB(to)h(b)s(e)f(a)h(regexp)g (\(see)h(Section)f(3.1)h([Ho)m(w)g(Input)d(Is)h(Split)h(in)m(to)810 2117 y(Records],)g(page)g(36\).)705 2252 y Fy(\017)60 b FB(The)44 b Fz(BINMODE)e FB(sp)s(ecial)j(v)-5 b(ariable)45 b(for)f(non-Unix)g(op)s(erating)h(systems)f(\(see)h(Sec-)810 2361 y(tion)31 b(B.3.3.4)i([Using)d Fz(gawk)g FB(on)g(PC)g(Op)s (erating)g(Systems],)g(page)i(269\).)630 2521 y(The)e(next)g(v)m (ersion)h(of)g Fz(mawk)e FB(will)i(supp)s(ort)d Fz(nextfile)p FB(.)150 2680 y Fz(awka)288 b FB(W)-8 b(ritten)41 b(b)m(y)g(Andrew)d (Sumner,)k Fz(awka)d FB(translates)i Fz(awk)e FB(programs)h(in)m(to)h (C,)f(compiles)630 2790 y(them,)h(and)e(links)g(them)g(with)g(a)g (library)g(of)g(functions)g(that)h(pro)m(vides)f(the)g(core)h Fz(awk)630 2899 y FB(functionalit)m(y)-8 b(.)43 b(It)30 b(also)h(has)g(a)f(n)m(um)m(b)s(er)f(of)i(extensions.)630 3034 y(The)41 b Fz(awk)f FB(translator)i(is)f(released)h(under)d(the)i (GPL,)h(and)e(the)h(library)g(is)g(under)f(the)630 3143 y(LGPL.)630 3278 y(T)-8 b(o)39 b(get)i Fz(awka)p FB(,)f(go)g(to)f Fz(http://awka.sourceforge.ne)o(t)p FB(.)61 b(Y)-8 b(ou)39 b(can)g(reac)m(h)h(Andrew)630 3387 y(Sumner)29 b(at)i Fz(andrew@zbcom.net)p FB(.)150 3547 y Fz(pawk)288 b FB(Nelson)51 b(H.F.)h(Beeb)s(e)f(at)h(the)f(Univ)m(ersit)m(y)h(of)e(Utah)i(has)e(mo) s(di\014ed)g(the)g(Bell)i(Labs)630 3656 y Fz(awk)42 b FB(to)h(pro)m(vide)g(timing)g(and)f(pro\014ling)g(information.)77 b(It)43 b(is)f(di\013eren)m(t)h(from)f Fz(pgawk)630 3766 y FB(\(see)64 b(Section)f(10.5)h([Pro\014ling)f(Y)-8 b(our)63 b Fz(awk)f FB(Programs],)71 b(page)63 b(169\),)73 b(in)62 b(that)h(it)630 3875 y(uses)58 b(CPU-based)h(pro\014ling,)66 b(not)59 b(line-coun)m(t)h(pro\014ling.)126 b(Y)-8 b(ou)59 b(ma)m(y)g(\014nd)f(it)h(at)630 3985 y(either)141 b Fz (ftp://ftp.math.utah.edu/pu)o(b/pa)o(wk/)o(pawk)o(-200)o(202)o(10.t)o (ar.g)o(z)135 b FB(or)630 4095 y Fz(http://www.math.utah.edu)o(/pub)o (/paw)o(k/p)o(awk-)o(2002)o(021)o(0.ta)o(r.gz)o FB(.)p eop end %%Page: 279 291 TeXDict begin 279 290 bop 2089 -116 a Fr(App)s(endix)28 b(C:)i(Implemen)m(tation)i(Notes)93 b FB(279)150 299 y Fu(App)t(endix)52 b(C)81 b(Implemen)l(tation)52 b(Notes)150 568 y FB(This)30 b(app)s(endix)f(con)m(tains)i(information)g(mainly)f (of)h(in)m(terest)h(to)f(implemen)m(tors)g(and)f(main)m(tainers)h(of) 150 678 y Fz(gawk)p FB(.)40 b(Ev)m(erything)30 b(in)g(it)h(applies)g (sp)s(eci\014cally)g(to)g Fz(gawk)e FB(and)h(not)h(to)g(other)f (implemen)m(tations.)150 928 y FA(C.1)68 b(Do)l(wn)l(w)l(ard)46 b(Compatibilit)l(y)h(and)e(Debugging)150 1088 y FB(See)35 b(Section)g(A.5)h([Extensions)e(in)h Fz(gawk)e FB(Not)j(in)e(POSIX)f Fz(awk)p FB(],)j(page)f(255,)i(for)e(a)g(summary)e(of)i(the)150 1197 y(GNU)d(extensions)g(to)g(the)g Fz(awk)f FB(language)h(and)f (program.)44 b(All)32 b(of)g(these)g(features)g(can)f(b)s(e)g(turned)g (o\013)150 1307 y(b)m(y)f(in)m(v)m(oking)i Fz(gawk)d FB(with)h(the)h(`)p Fz(--traditional)p FB(')c(option)k(or)f(with)g(the) h(`)p Fz(--posix)p FB(')e(option.)275 1453 y(If)23 b Fz(gawk)g FB(is)i(compiled)g(for)f(debugging)g(with)g(`)p Fz(-DDEBUG)p FB(',)g(then)g(there)h(is)f(one)g(more)h(option)g(a)m(v)-5 b(ailable)150 1563 y(on)30 b(the)h(command)f(line:)150 1740 y Fz(-W)g(parsedebug)150 1849 y(--parsedebug)630 1959 y FB(Prin)m(ts)g(out)h(the)f(parse)h(stac)m(k)g(information)g(as)g (the)f(program)g(is)h(b)s(eing)f(parsed.)275 2136 y(This)38 b(option)i(is)f(in)m(tended)g(only)h(for)f(serious)g Fz(gawk)f FB(dev)m(elop)s(ers)i(and)f(not)g(for)h(the)f(casual)h(user.) 150 2246 y(It)i(probably)g(has)g(not)g(ev)m(en)h(b)s(een)f(compiled)g (in)m(to)i(y)m(our)e(v)m(ersion)h(of)f Fz(gawk)p FB(,)i(since)f(it)g (slo)m(ws)f(do)m(wn)150 2355 y(execution.)150 2605 y FA(C.2)68 b(Making)45 b(Additions)g(to)g Fq(gawk)150 2765 y FB(If)29 b(y)m(ou)g(\014nd)f(that)h(y)m(ou)h(w)m(an)m(t)g(to)f (enhance)g Fz(gawk)f FB(in)h(a)h(signi\014can)m(t)g(fashion,)f(y)m(ou)g (are)h(p)s(erfectly)f(free)g(to)150 2874 y(do)34 b(so.)54 b(That)34 b(is)h(the)g(p)s(oin)m(t)f(of)h(ha)m(ving)g(free)g(soft)m(w)m (are;)j(the)d(source)f(co)s(de)h(is)g(a)m(v)-5 b(ailable)37 b(and)d(y)m(ou)h(are)150 2984 y(free)30 b(to)i(c)m(hange)f(it)g(as)g(y) m(ou)f(w)m(an)m(t)i(\(see)f([GNU)g(General)g(Public)g(License],)g(page) g(310\).)275 3130 y(This)d(section)j(discusses)e(the)g(w)m(a)m(ys)i(y)m (ou)e(migh)m(t)i(w)m(an)m(t)f(to)g(c)m(hange)h Fz(gawk)d FB(as)i(w)m(ell)g(as)g(an)m(y)g(consider-)150 3240 y(ations)h(y)m(ou)g (should)e(b)s(ear)h(in)g(mind.)150 3451 y Fj(C.2.1)62 b(Adding)41 b(New)g(F)-10 b(eatures)150 3598 y FB(Y)i(ou)31 b(are)h(free)f(to)g(add)g(an)m(y)g(new)f(features)i(y)m(ou)f(lik)m(e)h (to)g Fz(gawk)p FB(.)41 b(Ho)m(w)m(ev)m(er,)33 b(if)e(y)m(ou)g(w)m(an)m (t)h(y)m(our)f(c)m(hanges)150 3707 y(to)f(b)s(e)e(incorp)s(orated)h(in) m(to)h(the)f Fz(gawk)f FB(distribution,)h(there)g(are)g(sev)m(eral)h (steps)f(that)h(y)m(ou)f(need)g(to)g(tak)m(e)150 3817 y(in)h(order)g(to)h(mak)m(e)g(it)g(p)s(ossible)f(for)g(me)h(to)g (include)f(y)m(our)g(c)m(hanges:)199 3963 y(1.)61 b(Before)40 b(building)e(the)h(new)g(feature)g(in)m(to)h Fz(gawk)e FB(itself,)k(consider)d(writing)g(it)g(as)g(an)g(extension)330 4073 y(mo)s(dule)28 b(\(see)h(Section)h(C.3)e([Adding)h(New)f(Built-in) i(F)-8 b(unctions)29 b(to)g Fz(gawk)p FB(],)f(page)h(282\).)42 b(If)28 b(that's)330 4182 y(not)j(p)s(ossible,)f(con)m(tin)m(ue)h(with) f(the)h(rest)g(of)f(the)h(steps)f(in)g(this)g(list.)199 4323 y(2.)61 b(Get)29 b(the)f(latest)h(v)m(ersion.)41 b(It)28 b(is)f(m)m(uc)m(h)h(easier)h(for)f(me)f(to)i(in)m(tegrate)h(c)m (hanges)f(if)f(they)g(are)g(relativ)m(e)330 4432 y(to)d(the)f(most)g (recen)m(t)h(distributed)e(v)m(ersion)h(of)g Fz(gawk)p FB(.)38 b(If)23 b(y)m(our)h(v)m(ersion)g(of)g Fz(gawk)f FB(is)h(v)m(ery)g(old,)i(I)d(ma)m(y)330 4542 y(not)i(b)s(e)f(able)h(to) g(in)m(tegrate)i(them)d(at)h(all.)40 b(\(See)25 b(Section)g(B.1.1)i ([Getting)f(the)f Fz(gawk)e FB(Distribution],)330 4652 y(page)31 b(260,)h(for)e(information)h(on)f(getting)i(the)f(latest)h(v) m(ersion)f(of)f Fz(gawk)p FB(.\))199 4792 y(3.)61 b(F)-8 b(ollo)m(w)23 b(the)e Fx(GNU)g(Co)s(ding)g(Standards)p FB(.)36 b(This)20 b(do)s(cumen)m(t)g(describ)s(es)g(ho)m(w)h(GNU)h (soft)m(w)m(are)g(should)330 4902 y(b)s(e)35 b(written.)57 b(If)35 b(y)m(ou)h(ha)m(v)m(en't)h(read)f(it,)i(please)e(do)g(so,)h (preferably)f Fw(b)-5 b(efor)g(e)43 b FB(starting)36 b(to)h(mo)s(dify)330 5011 y Fz(gawk)p FB(.)i(\(The)30 b Fx(GNU)g(Co)s(ding)e(Standards)k FB(are)e(a)m(v)-5 b(ailable)32 b(from)d(the)g(GNU)i(Pro)5 b(ject's)30 b Fz(ftp)f FB(site,)h(at)330 5121 y Fz(ftp://ftp.gnu.org/gnu/GN)o(Uinf)o (o/st)o(and)o(ards)o(.tex)o(t)p FB(.)43 b(An)32 b(HTML)h(v)m(ersion,)i (suitable)e(for)330 5230 y(reading)23 b(with)g(a)g(WWW)h(bro)m(wser,)g (is)f(a)m(v)-5 b(ailable)26 b(at)d Fz(http://www.gnu.org/prep/s)o(tand) o(ards)o(_)330 5340 y(toc.html)p FB(.)38 b(T)-8 b(exinfo,)31 b(Info,)g(and)e(D)m(VI)j(v)m(ersions)e(are)h(also)g(a)m(v)-5 b(ailable.\))p eop end %%Page: 280 292 TeXDict begin 280 291 bop 150 -116 a FB(280)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)199 299 y FB(4.)61 b(Use)34 b(the)g Fz(gawk)e FB(co)s(ding)i(st)m(yle.)51 b(The)34 b(C)f(co)s(de)h(for)f Fz(gawk)f FB(follo)m(ws)j(the)f (instructions)f(in)h(the)f Fx(GNU)330 408 y(Co)s(ding)27 b(Standards)p FB(,)h(with)g(minor)g(exceptions.)41 b(The)27 b(co)s(de)i(is)f(formatted)h(using)e(the)i(traditional)330 518 y(\\K&R")35 b(st)m(yle,)i(particularly)e(as)g(regards)g(to)g(the)g (placemen)m(t)h(of)f(braces)g(and)f(the)g(use)h(of)g(tabs.)330 628 y(In)30 b(brief,)g(the)g(co)s(ding)h(rules)f(for)g Fz(gawk)f FB(are)i(as)f(follo)m(ws:)405 759 y Fy(\017)60 b FB(Use)31 b(ANSI/ISO)e(st)m(yle)j(\(protot)m(yp)s(e\))f(function)g (headers)f(when)f(de\014ning)g(functions.)405 891 y Fy(\017)60 b FB(Put)30 b(the)h(name)f(of)h(the)f(function)g(at)h(the)g(b)s (eginning)f(of)g(its)h(o)m(wn)f(line.)405 1022 y Fy(\017)60 b FB(Put)36 b(the)g(return)f(t)m(yp)s(e)h(of)g(the)h(function,)g(ev)m (en)g(if)f(it)g(is)h Fz(int)p FB(,)f(on)g(the)h(line)f(ab)s(o)m(v)m(e)h (the)g(line)510 1132 y(with)30 b(the)h(name)f(and)g(argumen)m(ts)h(of)f (the)h(function.)405 1263 y Fy(\017)60 b FB(Put)42 b(spaces)h(around)e (paren)m(theses)i(used)e(in)h(con)m(trol)i(structures)e(\()p Fz(if)p FB(,)j Fz(while)p FB(,)g Fz(for)p FB(,)f Fz(do)p FB(,)510 1373 y Fz(switch)p FB(,)29 b(and)h Fz(return)p FB(\).)405 1504 y Fy(\017)60 b FB(Do)31 b(not)g(put)e(spaces)i(in)f (fron)m(t)h(of)f(paren)m(theses)h(used)f(in)g(function)g(calls.)405 1636 y Fy(\017)60 b FB(Put)30 b(spaces)h(around)e(all)i(C)f(op)s (erators)h(and)f(after)h(commas)g(in)f(function)g(calls.)405 1767 y Fy(\017)60 b FB(Do)39 b(not)g(use)f(the)h(comma)h(op)s(erator)e (to)i(pro)s(duce)d(m)m(ultiple)i(side)g(e\013ects,)j(except)e(in)e Fz(for)510 1877 y FB(lo)s(op)30 b(initialization)k(and)c(incremen)m(t)h (parts,)f(and)g(in)g(macro)h(b)s(o)s(dies.)405 2008 y Fy(\017)60 b FB(Use)31 b(real)g(tabs)f(for)g(inden)m(ting,)h(not)g (spaces.)405 2140 y Fy(\017)60 b FB(Use)31 b(the)f(\\K&R")h(brace)g(la) m(y)m(out)h(st)m(yle.)405 2271 y Fy(\017)60 b FB(Use)34 b(comparisons)h(against)g Fz(NULL)e FB(and)g Fz('\\0')g FB(in)h(the)g(conditions)h(of)f Fz(if)p FB(,)h Fz(while)p FB(,)e(and)h Fz(for)510 2381 y FB(statemen)m(ts,)d(as)e(w)m(ell)g(as)g (in)f(the)h Fz(case)p FB(s)e(of)i Fz(switch)e FB(statemen)m(ts,)k (instead)e(of)f(just)g(the)h(plain)510 2491 y(p)s(oin)m(ter)h(or)h(c)m (haracter)h(v)-5 b(alue.)405 2622 y Fy(\017)60 b FB(Use)25 b(the)f Fz(TRUE)p FB(,)h Fz(FALSE)e FB(and)g Fz(NULL)g FB(sym)m(b)s(olic)i(constan)m(ts)g(and)f(the)h(c)m(haracter)h(constan)m (t)f Fz('\\0')510 2732 y FB(where)30 b(appropriate,)h(instead)f(of)h Fz(1)f FB(and)g Fz(0)p FB(.)405 2863 y Fy(\017)60 b FB(Use)35 b(the)g Fz(ISALPHA)p FB(,)e Fz(ISDIGIT)p FB(,)h(etc.)i(macros,)g (instead)f(of)g(the)f(traditional)i(lo)m(w)m(ercase)h(v)m(er-)510 2973 y(sions;)30 b(these)h(macros)g(are)g(b)s(etter)f(b)s(eha)m(v)m(ed) h(for)f(non-ASCI)s(I)f(c)m(haracter)j(sets.)405 3104 y Fy(\017)60 b FB(Pro)m(vide)31 b(one-line)g(descriptiv)m(e)h(commen)m (ts)f(for)f(eac)m(h)h(function.)405 3236 y Fy(\017)60 b FB(Do)31 b(not)g(use)f(`)p Fz(#elif)p FB('.)40 b(Man)m(y)31 b(older)f(Unix)g(C)g(compilers)h(cannot)g(handle)f(it.)405 3367 y Fy(\017)60 b FB(Do)27 b(not)g(use)f(the)g Fz(alloca)f FB(function)h(for)g(allo)s(cating)j(memory)d(o\013)h(the)f(stac)m(k.)41 b(Its)26 b(use)h(causes)510 3477 y(more)j(p)s(ortabilit)m(y)h(trouble)f (than)f(is)h(w)m(orth)g(the)g(minor)g(b)s(ene\014t)f(of)h(not)g(ha)m (ving)g(to)h(free)f(the)510 3587 y(storage.)42 b(Instead,)31 b(use)f Fz(malloc)e FB(and)i Fz(free)p FB(.)570 3740 y Fr(NOTE:)k FB(If)f(I)g(ha)m(v)m(e)h(to)h(reformat)e(y)m(our)h(co)s (de)f(to)h(follo)m(w)h(the)f(co)s(ding)f(st)m(yle)i(used)d(in)570 3850 y Fz(gawk)p FB(,)d(I)i(ma)m(y)g(not)f(b)s(other)g(to)h(in)m (tegrate)i(y)m(our)d(c)m(hanges)h(at)g(all.)199 3981 y(5.)61 b(Be)40 b(prepared)e(to)i(sign)g(the)f(appropriate)h(pap)s(erw) m(ork.)67 b(In)38 b(order)h(for)g(the)h(FSF)f(to)h(distribute)330 4091 y(y)m(our)c(c)m(hanges,)k(y)m(ou)d(m)m(ust)f(either)h(place)g (those)g(c)m(hanges)h(in)e(the)h(public)f(domain)g(and)g(submit)330 4200 y(a)c(signed)g(statemen)m(t)h(to)g(that)f(e\013ect,)i(or)d(assign) i(the)e(cop)m(yrigh)m(t)i(in)f(y)m(our)g(c)m(hanges)g(to)h(the)f(FSF.) 330 4310 y(Both)38 b(of)f(these)h(actions)h(are)e(easy)h(to)g(do)f(and) g Fw(many)46 b FB(p)s(eople)37 b(ha)m(v)m(e)i(done)e(so)g(already)-8 b(.)63 b(If)37 b(y)m(ou)330 4419 y(ha)m(v)m(e)k(questions,)i(please)e (con)m(tact)h(me)e(\(see)h(Section)g(B.5)g([Rep)s(orting)f(Problems)g (and)f(Bugs],)330 4529 y(page)31 b(276\),)h(or)f Fz(gnu@gnu.org)p FB(.)199 4661 y(6.)61 b(Up)s(date)40 b(the)g(do)s(cumen)m(tation.)70 b(Along)41 b(with)f(y)m(our)g(new)f(co)s(de,)k(please)e(supply)d(new)i (sections)330 4770 y(and/or)28 b(c)m(hapters)g(for)f(this)h(b)s(o)s (ok.)39 b(If)27 b(at)i(all)f(p)s(ossible,)g(please)h(use)e(real)i(T)-8 b(exinfo,)29 b(instead)f(of)g(just)330 4880 y(supplying)k(unformatted)g (ASCI)s(I)g(text)i(\(although)g(ev)m(en)g(that)f(is)g(b)s(etter)h(than) e(no)h(do)s(cumen)m(ta-)330 4989 y(tion)h(at)g(all\).)51 b(Con)m(v)m(en)m(tions)34 b(to)h(b)s(e)d(follo)m(w)m(ed)j(in)e Fx(GA)-10 b(WK:)34 b(E\013ectiv)m(e)i(A)-10 b(WK)33 b(Programming)42 b FB(are)330 5099 y(pro)m(vided)24 b(after)h(the)g(`)p Fz(@bye)p FB(')e(at)i(the)g(end)f(of)g(the)h(T)-8 b(exinfo)25 b(source)f(\014le.)39 b(If)24 b(p)s(ossible,)i(please)f(up)s(date)330 5208 y(the)31 b Fz(man)e FB(page)i(as)g(w)m(ell.)330 5340 y(Y)-8 b(ou)31 b(will)g(also)g(ha)m(v)m(e)h(to)f(sign)f(pap)s(erw) m(ork)f(for)i(y)m(our)f(do)s(cumen)m(tation)h(c)m(hanges.)p eop end %%Page: 281 293 TeXDict begin 281 292 bop 2089 -116 a Fr(App)s(endix)28 b(C:)i(Implemen)m(tation)i(Notes)93 b FB(281)199 299 y(7.)61 b(Submit)36 b(c)m(hanges)j(as)f(con)m(text)h(di\013s)e(or)h (uni\014ed)e(di\013s.)62 b(Use)38 b(`)p Fz(diff)29 b(-c)h(-r)g(-N)p FB(')37 b(or)g(`)p Fz(diff)30 b(-u)g(-r)330 408 y(-N)p FB(')f(to)i(compare)f(the)g(original)g Fz(gawk)f FB(source)h(tree)g (with)f(y)m(our)h(v)m(ersion.)41 b(\(I)29 b(\014nd)g(con)m(text)i (di\013s)e(to)330 518 y(b)s(e)35 b(more)h(readable)g(but)f(uni\014ed)g (di\013s)g(are)h(more)g(compact.\))59 b(I)36 b(recommend)f(using)g(the) h(GNU)330 628 y(v)m(ersion)41 b(of)f Fz(diff)p FB(.)69 b(Send)39 b(the)h(output)g(pro)s(duced)e(b)m(y)i(either)h(run)d(of)i Fz(diff)f FB(to)i(me)f(when)g(y)m(ou)330 737 y(submit)32 b(y)m(our)h(c)m(hanges.)49 b(\(See)33 b(Section)h(B.5)g([Rep)s(orting)f (Problems)f(and)g(Bugs],)j(page)e(276,)i(for)330 847 y(the)c(electronic)h(mail)f(information.\))330 984 y(Using)f(this)f (format)h(mak)m(es)h(it)f(easy)g(for)g(me)g(to)g(apply)f(y)m(our)h(c)m (hanges)g(to)h(the)f(master)g(v)m(ersion)g(of)330 1093 y(the)i Fz(gawk)f FB(source)h(co)s(de)h(\(using)e Fz(patch)p FB(\).)45 b(If)32 b(I)f(ha)m(v)m(e)j(to)e(apply)g(the)g(c)m(hanges)h (man)m(ually)-8 b(,)34 b(using)e(a)330 1203 y(text)f(editor,)h(I)e(ma)m (y)h(not)f(do)h(so,)f(particularly)h(if)g(there)f(are)h(lots)g(of)g(c)m (hanges.)199 1340 y(8.)61 b(Include)41 b(an)g(en)m(try)h(for)f(the)h(`) p Fz(ChangeLog)p FB(')d(\014le)j(with)f(y)m(our)h(submission.)73 b(This)40 b(helps)h(further)330 1450 y(minimize)31 b(the)f(amoun)m(t)h (of)g(w)m(ork)f(I)g(ha)m(v)m(e)i(to)f(do,)g(making)f(it)h(easier)h(for) e(me)g(to)h(accept)h(patc)m(hes.)275 1616 y(Although)f(this)g(sounds)f (lik)m(e)i(a)g(lot)g(of)g(w)m(ork,)f(please)h(remem)m(b)s(er)f(that)h (while)f(y)m(ou)h(ma)m(y)f(write)h(the)150 1726 y(new)d(co)s(de,)h(I)f (ha)m(v)m(e)i(to)f(main)m(tain)h(it)f(and)f(supp)s(ort)f(it.)41 b(If)29 b(it)h(isn't)g(p)s(ossible)f(for)g(me)h(to)g(do)f(that)h(with)g (a)150 1836 y(minim)m(um)g(of)g(extra)h(w)m(ork,)g(then)f(I)g(probably) g(will)g(not.)150 2040 y Fj(C.2.2)62 b(P)m(orting)41 b Fh(gawk)h Fj(to)f(a)f(New)h(Op)s(erating)g(System)150 2187 y FB(If)30 b(y)m(ou)h(w)m(an)m(t)g(to)g(p)s(ort)f Fz(gawk)f FB(to)i(a)g(new)f(op)s(erating)g(system,)h(there)g(are)g(sev) m(eral)g(steps:)199 2326 y(1.)61 b(F)-8 b(ollo)m(w)43 b(the)d(guidelines)h(in)f(the)g(previous)g(section)h(concerning)g(co)s (ding)f(st)m(yle,)45 b(submission)39 b(of)330 2436 y(di\013s,)30 b(and)g(so)h(on.)199 2573 y(2.)61 b(When)29 b(doing)g(a)h(p)s(ort,)f(b) s(ear)g(in)g(mind)f(that)i(y)m(our)f(co)s(de)g(m)m(ust)g(co)s(exist)i (p)s(eacefully)e(with)g(the)h(rest)330 2682 y(of)24 b Fz(gawk)f FB(and)h(the)g(other)h(p)s(orts.)38 b(Av)m(oid)24 b(gratuitous)h(c)m(hanges)h(to)e(the)h(system-indep)s(enden)m(t)e (parts)330 2792 y(of)29 b(the)h(co)s(de.)40 b(If)29 b(at)h(all)g(p)s (ossible,)f(a)m(v)m(oid)h(sprinkling)f(`)p Fz(#ifdef)p FB('s)e(just)i(for)g(y)m(our)g(p)s(ort)f(throughout)330 2902 y(the)j(co)s(de.)330 3039 y(If)i(the)g(c)m(hanges)h(needed)f(for)g (a)g(particular)g(system)h(a\013ect)g(to)s(o)g(m)m(uc)m(h)f(of)g(the)h (co)s(de,)g(I)f(probably)330 3148 y(will)j(not)g(accept)i(them.)57 b(In)35 b(suc)m(h)h(a)g(case,)j(y)m(ou)d(can,)i(of)e(course,)i (distribute)d(y)m(our)h(c)m(hanges)h(on)330 3258 y(y)m(our)g(o)m(wn,)i (as)f(long)g(as)f(y)m(ou)h(comply)f(with)g(the)g(GPL)h(\(see)g([GNU)g (General)g(Public)f(License],)330 3367 y(page)31 b(310\).)199 3504 y(3.)61 b(A)29 b(n)m(um)m(b)s(er)f(of)i(the)f(\014les)g(that)h (come)g(with)f Fz(gawk)f FB(are)i(main)m(tained)g(b)m(y)f(other)g(p)s (eople)g(at)h(the)g(F)-8 b(ree)330 3614 y(Soft)m(w)m(are)35 b(F)-8 b(oundation.)54 b(Th)m(us,)34 b(y)m(ou)h(should)e(not)i(c)m (hange)g(them)g(unless)e(it)i(is)g(for)f(a)g(v)m(ery)h(go)s(o)s(d)330 3724 y(reason;)41 b(i.e.,)f(c)m(hanges)e(are)g(not)f(out)g(of)g(the)h (question,)h(but)d(c)m(hanges)i(to)g(these)g(\014les)f(are)g(scru-)330 3833 y(tinized)e(extra)g(carefully)-8 b(.)54 b(The)34 b(\014les)h(are)f(`)p Fz(getopt.h)p FB(',)g(`)p Fz(getopt.c)p FB(',)g(`)p Fz(getopt1.c)p FB(',)g(`)p Fz(regex.h)p FB(',)330 3943 y(`)p Fz(regex.c)p FB(',)29 b(`)p Fz(dfa.h)p FB(',)h(`)p Fz(dfa.c)p FB(',)g(`)p Fz(install-sh)p FB(',)e(and)i(`)p Fz(mkinstalldirs)p FB('.)199 4080 y(4.)61 b(Be)24 b(willing)g(to)h(con) m(tin)m(ue)g(to)f(main)m(tain)h(the)e(p)s(ort.)38 b(Non-Unix)24 b(op)s(erating)g(systems)g(are)g(supp)s(orted)330 4189 y(b)m(y)i(v)m(olun)m(teers)g(who)f(main)m(tain)i(the)f(co)s(de)g (needed)f(to)h(compile)h(and)e(run)f Fz(gawk)h FB(on)g(their)h (systems.)330 4299 y(If)c(no)s(one)h(v)m(olun)m(teers)h(to)g(main)m (tain)f(a)h(p)s(ort,)g(it)f(b)s(ecomes)g(unsupp)s(orted)d(and)i(it)i (ma)m(y)f(b)s(e)g(necessary)330 4408 y(to)31 b(remo)m(v)m(e)h(it)f (from)f(the)g(distribution.)199 4545 y(5.)61 b(Supply)40 b(an)h(appropriate)h(`)p Fz(gawkmisc.???)p FB(')d(\014le.)74 b(Eac)m(h)43 b(p)s(ort)e(has)g(its)h(o)m(wn)g(`)p Fz(gawkmisc.???)p FB(')330 4655 y(that)e(implemen)m(ts)g(certain)h(op)s(erating)f(system) g(sp)s(eci\014c)f(functions.)68 b(This)39 b(is)h(cleaner)g(than)g(a)330 4765 y(plethora)d(of)g(`)p Fz(#ifdef)p FB('s)f(scattered)i(throughout)e (the)h(co)s(de.)61 b(The)36 b(`)p Fz(gawkmisc.c)p FB(')e(in)j(the)g (main)330 4874 y(source)c(directory)h(includes)f(the)g(appropriate)h(`) p Fz(gawkmisc.???)p FB(')c(\014le)j(from)g(eac)m(h)h(sub)s(directory)-8 b(.)330 4984 y(Be)31 b(sure)f(to)h(up)s(date)e(it)i(as)g(w)m(ell.)330 5121 y(Eac)m(h)37 b(p)s(ort's)e(`)p Fz(gawkmisc.???)p FB(')e(\014le)j(has)g(a)h(su\016x)e(reminiscen)m(t)h(of)h(the)f(mac)m (hine)g(or)g(op)s(erating)330 5230 y(system)i(for)g(the)h(p)s(ort|for)e (example,)k(`)p Fz(pc/gawkmisc.pc)p FB(')35 b(and)i(`)p Fz(vms/gawkmisc.vms)p FB('.)60 b(The)330 5340 y(use)32 b(of)h(separate)g(su\016xes,)f(instead)h(of)f(plain)g(`)p Fz(gawkmisc.c)p FB(',)f(mak)m(es)i(it)g(p)s(ossible)f(to)h(mo)m(v)m(e)h (\014les)p eop end %%Page: 282 294 TeXDict begin 282 293 bop 150 -116 a FB(282)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)330 299 y FB(from)e(a)h(p)s(ort's)f(sub)s(directory)f(in)m(to)j(the)f(main) f(sub)s(directory)-8 b(,)28 b(without)h(acciden)m(tally)i(destro)m (ying)330 408 y(the)26 b(real)g(`)p Fz(gawkmisc.c)p FB(')d(\014le.)39 b(\(Curren)m(tly)-8 b(,)27 b(this)e(is)g(only)h(an)f(issue)g(for)h(the) f(PC)g(op)s(erating)h(system)330 518 y(p)s(orts.\))199 654 y(6.)61 b(Supply)21 b(a)h(`)p Fz(Makefile)p FB(')f(as)i(w)m(ell)g (as)g(an)m(y)f(other)h(C)f(source)g(and)g(header)g(\014les)h(that)g (are)f(necessary)h(for)330 763 y(y)m(our)h(op)s(erating)g(system.)38 b(All)24 b(y)m(our)g(co)s(de)g(should)e(b)s(e)h(in)h(a)g(separate)g (sub)s(directory)-8 b(,)25 b(with)e(a)h(name)330 873 y(that)36 b(is)f(the)h(same)g(as,)h(or)e(reminiscen)m(t)h(of,)h(either) f(y)m(our)f(op)s(erating)h(system)f(or)g(the)h(computer)330 983 y(system.)41 b(If)29 b(p)s(ossible,)g(try)g(to)i(structure)e (things)g(so)h(that)g(it)g(is)f(not)h(necessary)g(to)g(mo)m(v)m(e)h (\014les)f(out)330 1092 y(of)e(the)h(sub)s(directory)e(in)m(to)j(the)e (main)g(source)h(directory)-8 b(.)41 b(If)28 b(that)g(is)h(not)f(p)s (ossible,)h(then)f(b)s(e)g(sure)330 1202 y(to)i(a)m(v)m(oid)g(using)e (names)h(for)f(y)m(our)h(\014les)g(that)g(duplicate)g(the)g(names)g(of) g(\014les)g(in)f(the)h(main)g(source)330 1311 y(directory)-8 b(.)199 1447 y(7.)61 b(Up)s(date)24 b(the)g(do)s(cumen)m(tation.)40 b(Please)25 b(write)g(a)f(section)i(\(or)e(sections\))i(for)e(this)g(b) s(o)s(ok)f(describing)330 1557 y(the)33 b(installation)h(and)e (compilation)i(steps)f(needed)f(to)i(compile)f(and/or)g(install)g Fz(gawk)f FB(for)g(y)m(our)330 1666 y(system.)199 1802 y(8.)61 b(Be)40 b(prepared)e(to)i(sign)g(the)f(appropriate)h(pap)s(erw) m(ork.)67 b(In)38 b(order)h(for)g(the)h(FSF)f(to)h(distribute)330 1912 y(y)m(our)31 b(co)s(de,)h(y)m(ou)f(m)m(ust)g(either)h(place)g(y)m (our)f(co)s(de)g(in)g(the)g(public)g(domain)g(and)f(submit)h(a)g (signed)330 2021 y(statemen)m(t)h(to)f(that)g(e\013ect,)h(or)f(assign)g (the)f(cop)m(yrigh)m(t)i(in)e(y)m(our)g(co)s(de)h(to)g(the)f(FSF.)275 2184 y(F)-8 b(ollo)m(wing)29 b(these)e(steps)f(mak)m(es)i(it)f(m)m(uc)m (h)g(easier)h(to)f(in)m(tegrate)i(y)m(our)e(c)m(hanges)g(in)m(to)h Fz(gawk)e FB(and)g(ha)m(v)m(e)150 2294 y(them)k(co)s(exist)i(happily)e (with)g(other)g(op)s(erating)h(systems')g(co)s(de)f(that)h(is)g (already)g(there.)275 2431 y(In)23 b(the)i(co)s(de)g(that)g(y)m(ou)g (supply)e(and)h(main)m(tain,)j(feel)e(free)g(to)g(use)g(a)g(co)s(ding)f (st)m(yle)i(and)e(brace)h(la)m(y)m(out)150 2541 y(that)31 b(suits)f(y)m(our)g(taste.)150 2777 y FA(C.3)68 b(Adding)44 b(New)i(Built-in)f(F)-11 b(unctions)44 b(to)h Fq(gawk)390 2936 y Fw(Danger)33 b(Wil)5 b(l)32 b(R)-5 b(obinson!)43 b(Danger!!)390 3046 y(Warning!)f(Warning!)390 3155 y FB(The)30 b(Rob)s(ot)275 3293 y(Beginning)44 b(with)g Fz(gawk)f FB(3.1,)48 b(it)d(is)f(p)s(ossible)f(to)i(add)e(new)h (built-in)f(functions)h(to)h Fz(gawk)d FB(using)150 3402 y(dynamically)e(loaded)f(libraries.)67 b(This)38 b(facilit)m(y)j(is)e (a)m(v)-5 b(ailable)41 b(on)e(systems)g(\(suc)m(h)g(as)g(GNU/Lin)m (ux\))150 3512 y(that)h(supp)s(ort)f(the)h Fz(dlopen)e FB(and)h Fz(dlsym)f FB(functions.)69 b(This)39 b(section)i(describ)s (es)e(ho)m(w)h(to)g(write)h(and)150 3621 y(use)31 b(dynamically)h (loaded)f(extensions)h(for)f Fz(gawk)p FB(.)42 b(Exp)s(erience)30 b(with)h(programming)g(in)g(C)g(or)g(C)p Fz(++)f FB(is)150 3731 y(necessary)h(when)e(reading)i(this)f(section.)275 3868 y Fr(Caution:)52 b FB(The)35 b(facilities)k(describ)s(ed)c(in)h (this)g(section)h(are)g(v)m(ery)f(m)m(uc)m(h)h(sub)5 b(ject)35 b(to)i(c)m(hange)h(in)e(a)150 3977 y(future)24 b Fz(gawk)g FB(release.)41 b(Be)26 b(a)m(w)m(are)g(that)g(y)m(ou)g(ma)m (y)f(ha)m(v)m(e)i(to)f(re-do)f(ev)m(erything,)i(p)s(erhaps)d(from)h (scratc)m(h,)150 4087 y(at)31 b(some)g(future)e(time.)275 4224 y Fr(Caution:)45 b FB(If)33 b(y)m(ou)g(ha)m(v)m(e)i(written)e(y)m (our)f(o)m(wn)h(dynamic)g(extensions,)i(b)s(e)d(sure)g(to)i(recompile)g (them)150 4334 y(for)c(eac)m(h)h(new)f Fz(gawk)f FB(release.)42 b(There)30 b(is)g(no)g(guaran)m(tee)i(of)e(binary)f(compatibilit)m(y)k (b)s(et)m(w)m(een)d(di\013eren)m(t)150 4443 y(releases,)i(no)e(will)h (there)f(ev)m(er)i(b)s(e)d(suc)m(h)h(a)h(guaran)m(tee.)150 4645 y Fj(C.3.1)62 b(A)40 b(Minimal)i(In)m(tro)s(duction)f(to)g Fh(gawk)h Fj(In)m(ternals)150 4792 y FB(The)33 b(truth)f(is)i(that)g Fz(gawk)e FB(w)m(as)h(not)h(designed)f(for)g(simple)g(extensibilit)m(y) -8 b(.)52 b(The)33 b(facilities)i(for)e(adding)150 4902 y(functions)c(using)g(shared)f(libraries)i(w)m(ork,)g(but)f(are)g (something)h(of)g(a)f(\\bag)i(on)e(the)g(side.")41 b(Th)m(us,)29 b(this)150 5011 y(tour)c(is)g(brief)g(and)f(simplistic;)k(w)m(ould-b)s (e)c Fz(gawk)g FB(hac)m(k)m(ers)i(are)g(encouraged)f(to)h(sp)s(end)e (some)h(time)h(read-)150 5121 y(ing)j(the)h(source)f(co)s(de)h(b)s (efore)f(trying)g(to)h(write)g(extensions)f(based)g(on)g(the)h (material)h(presen)m(ted)e(here.)150 5230 y(Of)35 b(particular)g(note)h (are)f(the)h(\014les)f(`)p Fz(awk.h)p FB(',)g(`)p Fz(builtin.c)p FB(',)g(and)g(`)p Fz(eval.c)p FB('.)53 b(Reading)36 b(`)p Fz(awkgram.y)p FB(')150 5340 y(in)30 b(order)g(to)h(see)g(ho)m(w)f(the) h(parse)f(tree)h(is)g(built)f(w)m(ould)g(also)h(b)s(e)f(of)h(use.)p eop end %%Page: 283 295 TeXDict begin 283 294 bop 2089 -116 a Fr(App)s(endix)28 b(C:)i(Implemen)m(tation)i(Notes)93 b FB(283)275 299 y(With)31 b(the)f(disclaimers)h(out)g(of)g(the)f(w)m(a)m(y)-8 b(,)33 b(the)d(follo)m(wing)i(t)m(yp)s(es,)f(structure)f(mem)m(b)s (ers,)g(functions,)150 408 y(and)23 b(macros)h(are)g(declared)f(in)h(`) p Fz(awk.h)p FB(')e(and)h(are)h(of)f(use)g(when)g(writing)g (extensions.)39 b(The)23 b(next)h(section)150 518 y(sho)m(ws)30 b(ho)m(w)h(they)f(are)h(used:)150 702 y Fz(AWKNUM)192 b FB(An)28 b Fz(AWKNUM)e FB(is)j(the)f(in)m(ternal)h(t)m(yp)s(e)f(of)h Fz(awk)e FB(\015oating-p)s(oin)m(t)j(n)m(um)m(b)s(ers.)38 b(T)m(ypically)-8 b(,)31 b(it)d(is)h(a)630 811 y(C)h Fz(double)p FB(.)150 987 y Fz(NODE)288 b FB(Just)31 b(ab)s(out)h(ev)m (erything)h(is)f(done)g(using)g(ob)5 b(jects)32 b(of)h(t)m(yp)s(e)f Fz(NODE)p FB(.)44 b(These)32 b(con)m(tain)i(b)s(oth)630 1097 y(strings)c(and)g(n)m(um)m(b)s(ers,)f(as)i(w)m(ell)g(as)g(v)-5 b(ariables)31 b(and)e(arra)m(ys.)150 1272 y Fz(AWKNUM)g (force_number\(NODE)c(*n\))630 1382 y FB(This)34 b(macro)h(forces)g(a)g (v)-5 b(alue)35 b(to)h(b)s(e)e(n)m(umeric.)53 b(It)35 b(returns)e(the)i(actual)h(n)m(umeric)e(v)-5 b(alue)630 1491 y(con)m(tained)32 b(in)e(the)g(no)s(de.)40 b(It)31 b(ma)m(y)g(end)e(up)h(calling)i(an)e(in)m(ternal)h Fz(gawk)e FB(function.)150 1667 y Fz(void)g(force_string\(NODE)d(*n\))630 1776 y FB(This)38 b(macro)i(guaran)m(tees)g(that)f(a)h Fz(NODE)p FB('s)d(string)i(v)-5 b(alue)39 b(is)g(curren)m(t.)66 b(It)39 b(ma)m(y)h(end)e(up)630 1886 y(calling)j(an)e(in)m(ternal)i Fz(gawk)d FB(function.)68 b(It)40 b(also)g(guaran)m(tees)h(that)f(the)g (string)f(is)h(zero-)630 1996 y(terminated.)150 2171 y Fz(size_t)29 b(get_curfunc_arg_count\(v)o(oid\))630 2281 y FB(This)36 b(function)f(returns)h(the)g(actual)i(n)m(um)m(b)s (er)d(of)h(parameters)h(passed)f(to)h(the)f(curren)m(t)630 2390 y(function.)i(Inside)22 b(the)h(co)s(de)g(of)g(an)f(extension)i (this)e(can)h(b)s(e)f(used)g(to)i(determine)f(the)g(max-)630 2500 y(im)m(um)32 b(index)g(whic)m(h)g(is)h(safe)g(to)g(use)f(with)g Fz(stack_ptr)p FB(.)45 b(If)32 b(this)g(v)-5 b(alue)33 b(is)g(greater)g(than)630 2610 y Fz(tree->param_cnt)p FB(,)26 b(the)31 b(function)f(w)m(as)h(called)g(incorrectly)h(from)e (the)g Fz(awk)g FB(program.)630 2752 y Fr(Caution:)41 b FB(This)29 b(function)h(is)h(new)f(as)g(of)h Fz(gawk)e FB(3.1.4.)150 2928 y Fz(n->param_cnt)630 3037 y FB(Inside)h(an)g (extension)h(function,)f(this)g(is)g(the)h(maxim)m(um)f(n)m(um)m(b)s (er)f(of)h(exp)s(ected)h(param-)630 3147 y(eters,)g(as)g(set)g(b)m(y)f (the)h Fz(make_builtin)c FB(function.)150 3323 y Fz(n->stptr)150 3432 y(n->stlen)96 b FB(The)37 b(data)h(and)e(length)i(of)f(a)h Fz(NODE)p FB('s)e(string)h(v)-5 b(alue,)39 b(resp)s(ectiv)m(ely)-8 b(.)63 b(The)37 b(string)g(is)g Fw(not)630 3542 y FB(guaran)m(teed)d (to)f(b)s(e)g(zero-terminated.)49 b(If)33 b(y)m(ou)g(need)f(to)i(pass)e (the)h(string)g(v)-5 b(alue)34 b(to)f(a)g(C)630 3651 y(library)28 b(function,)h(sa)m(v)m(e)h(the)f(v)-5 b(alue)29 b(in)g Fz(n->stptr[n->stlen])p FB(,)24 b(assign)29 b Fz('\\0')e FB(to)j(it,)g(call)630 3761 y(the)h(routine,)f(and)g(then)g (restore)h(the)g(v)-5 b(alue.)150 3936 y Fz(n->type)144 b FB(The)32 b(t)m(yp)s(e)g(of)g(the)g Fz(NODE)p FB(.)45 b(This)32 b(is)g(a)g(C)g Fz(enum)p FB(.)45 b(V)-8 b(alues)33 b(should)e(b)s(e)h(either)g Fz(Node_var)e FB(or)630 4046 y Fz(Node_var_array)c FB(for)31 b(function)f(parameters.)150 4222 y Fz(n->vname)96 b FB(The)22 b(\\v)-5 b(ariable)23 b(name")g(of)f(a)g(no)s(de.)38 b(This)21 b(is)h(not)h(of)f(m)m(uc)m(h)g (use)g(inside)g(externally)h(written)630 4331 y(extensions.)150 4507 y Fz(void)29 b(assoc_clear\(NODE)d(*n\))630 4616 y FB(Clears)46 b(the)f(asso)s(ciativ)m(e)j(arra)m(y)e(p)s(oin)m(ted)f (to)i(b)m(y)e Fz(n)p FB(.)85 b(Mak)m(e)47 b(sure)e(that)h(`)p Fz(n->type)29 b(==)630 4726 y(Node_var_array)p FB(')e(\014rst.)150 4902 y Fz(NODE)i(**assoc_lookup\(NODE)c(*symbol,)j(NODE)i(*subs,)e(int) i(reference\))630 5011 y FB(Finds,)39 b(and)e(installs)h(if)g (necessary)-8 b(,)40 b(arra)m(y)e(elemen)m(ts.)64 b Fz(symbol)36 b FB(is)h(the)h(arra)m(y)-8 b(,)41 b Fz(subs)36 b FB(is)630 5121 y(the)j(subscript.)66 b(This)38 b(is)i(usually)f(a)g(v)-5 b(alue)40 b(created)g(with)f Fz(tmp_string)d FB(\(see)k(b)s(elo)m(w\).) 630 5230 y Fz(reference)27 b FB(should)h(b)s(e)h Fz(TRUE)f FB(if)h(it)h(is)g(an)f(error)g(to)h(use)f(the)h(v)-5 b(alue)29 b(b)s(efore)g(it)h(is)g(created.)630 5340 y(T)m(ypically)-8 b(,)32 b Fz(FALSE)d FB(is)i(the)f(correct)i(v)-5 b(alue)30 b(to)i(use)e(from)g(extension)h(functions.)p eop end %%Page: 284 296 TeXDict begin 284 295 bop 150 -116 a FB(284)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz(NODE)f(*make_string\(char)d(*s,)j(size_t)g(len\))630 408 y FB(T)-8 b(ak)m(e)25 b(a)f(C)g(string)g(and)f(turn)f(it)j(in)m(to) g(a)f(p)s(oin)m(ter)g(to)g(a)g Fz(NODE)f FB(that)i(can)f(b)s(e)f (stored)h(appropri-)630 518 y(ately)-8 b(.)42 b(This)30 b(is)g(p)s(ermanen)m(t)g(storage;)i(understanding)d(of)h Fz(gawk)f FB(memory)h(managemen)m(t)630 628 y(is)g(helpful.)150 789 y Fz(NODE)f(*make_number\(AWKNUM)c(val\))630 898 y FB(T)-8 b(ak)m(e)24 b(an)e Fz(AWKNUM)f FB(and)h(turn)g(it)h(in)m(to)h (a)f(p)s(oin)m(ter)f(to)i(a)f Fz(NODE)e FB(that)i(can)g(b)s(e)f(stored) h(appropri-)630 1008 y(ately)-8 b(.)42 b(This)30 b(is)g(p)s(ermanen)m (t)g(storage;)i(understanding)d(of)h Fz(gawk)f FB(memory)h(managemen)m (t)630 1118 y(is)g(helpful.)150 1279 y Fz(NODE)f(*tmp_string\(char)d (*s,)k(size_t)e(len\);)630 1388 y FB(T)-8 b(ak)m(e)25 b(a)f(C)g(string)g(and)f(turn)f(it)j(in)m(to)g(a)f(p)s(oin)m(ter)g(to)g (a)g Fz(NODE)f FB(that)i(can)f(b)s(e)f(stored)h(appropri-)630 1498 y(ately)-8 b(.)45 b(This)30 b(is)h(temp)s(orary)g(storage;)j (understanding)29 b(of)i Fz(gawk)f FB(memory)h(managemen)m(t)630 1608 y(is)f(helpful.)150 1769 y Fz(NODE)f(*tmp_number\(AWKNUM)d(val\)) 630 1878 y FB(T)-8 b(ak)m(e)24 b(an)e Fz(AWKNUM)f FB(and)h(turn)g(it)h (in)m(to)h(a)f(p)s(oin)m(ter)f(to)i(a)f Fz(NODE)e FB(that)i(can)g(b)s (e)f(stored)h(appropri-)630 1988 y(ately)-8 b(.)45 b(This)30 b(is)h(temp)s(orary)g(storage;)j(understanding)29 b(of)i Fz(gawk)f FB(memory)h(managemen)m(t)630 2097 y(is)f(helpful.)150 2259 y Fz(NODE)f(*dupnode\(NODE)e(*n\))630 2368 y FB(Duplicate)38 b(a)g(no)s(de.)60 b(In)36 b(most)h(cases,)j(this)d(incremen)m(ts)g(an)g (in)m(ternal)h(reference)f(coun)m(t)630 2478 y(instead)29 b(of)f(actually)i(duplicating)f(the)g(en)m(tire)g Fz(NODE)p FB(;)f(understanding)f(of)i Fz(gawk)e FB(memory)630 2587 y(managemen)m(t)32 b(is)e(helpful.)150 2749 y Fz(void)f (free_temp\(NODE)e(*n\))630 2858 y FB(This)37 b(macro)h(releases)h(the) f(memory)g(asso)s(ciated)h(with)e(a)h Fz(NODE)f FB(allo)s(cated)j(with) d Fz(tmp_)630 2968 y(string)21 b FB(or)i Fz(tmp_number)p FB(.)36 b(Understanding)22 b(of)h Fz(gawk)f FB(memory)h(managemen)m(t)h (is)g(helpful.)150 3129 y Fz(void)29 b(make_builtin\(char)d(*name,)j (NODE)g(*\(*func\)\(NODE)d(*\),)k(int)f(count\))630 3238 y FB(Register)k(a)g(C)e(function)h(p)s(oin)m(ted)g(to)h(b)m(y)e Fz(func)g FB(as)i(new)e(built-in)h(function)g Fz(name)p FB(.)44 b Fz(name)630 3348 y FB(is)38 b(a)g(regular)g(C)g(string.)63 b Fz(count)37 b FB(is)h(the)g(maxim)m(um)f(n)m(um)m(b)s(er)g(of)h (argumen)m(ts)g(that)h(the)630 3458 y(function)30 b(tak)m(es.)42 b(The)30 b(function)g(should)g(b)s(e)f(written)i(in)f(the)g(follo)m (wing)i(manner:)870 3593 y Fz(/*)47 b(do_xxx)f(---)h(do)g(xxx)g (function)f(for)h(gawk)f(*/)870 3812 y(NODE)h(*)870 3922 y(do_xxx\(NODE)e(*tree\))870 4031 y({)1061 4141 y(...)870 4251 y(})150 4412 y(NODE)29 b(*get_argument\(NODE)d(*tree,)i(int)i(i\)) 630 4521 y FB(This)45 b(function)g(is)g(called)i(from)e(within)g(a)h(C) f(extension)h(function)g(to)g(get)g(the)g Fz(i)p FB(-th)630 4631 y(argumen)m(t)31 b(from)f(the)g(function)g(call.)42 b(The)30 b(\014rst)g(argumen)m(t)h(is)f(argumen)m(t)h(zero.)150 4792 y Fz(NODE)e(*get_actual_argument\(NODE)24 b(*tree,)k(unsigned)g (int)i(i,)1391 4902 y(int)47 b(optional,)e(int)i(wantarray\);)630 5011 y FB(This)26 b(function)g(retriev)m(es)i(a)f(particular)f(argumen) m(t)h Fz(i)p FB(.)40 b Fz(wantarray)24 b FB(is)i Fz(TRUE)f FB(if)i(the)g(argu-)630 5121 y(men)m(t)32 b(should)e(b)s(e)h(an)g(arra) m(y)-8 b(,)33 b Fz(FALSE)c FB(otherwise.)44 b(If)31 b Fz(optional)e FB(is)i Fz(TRUE)p FB(,)g(the)g(argumen)m(t)630 5230 y(need)d(not)h(ha)m(v)m(e)h(b)s(een)d(supplied.)39 b(If)28 b(it)h(w)m(asn't,)h(the)e(return)g(v)-5 b(alue)28 b(is)h Fz(NULL)p FB(.)39 b(It)28 b(is)h(a)g(fatal)630 5340 y(error)h(if)g Fz(optional)e FB(is)j Fz(TRUE)e FB(but)h(the)g (argumen)m(t)h(w)m(as)g(not)f(pro)m(vided.)p eop end %%Page: 285 297 TeXDict begin 285 296 bop 2089 -116 a Fr(App)s(endix)28 b(C:)i(Implemen)m(tation)i(Notes)93 b FB(285)630 299 y Fr(Caution:)41 b FB(This)29 b(function)h(is)h(new)f(as)g(of)h Fz(gawk)e FB(3.1.4.)150 478 y Fz(get_scalar_argument\(t,)24 b(i,)30 b(opt\))630 587 y FB(This)g(is)g(a)h(con)m(v)m(enience)h(macro) f(that)g(calls)h Fz(get_actual_argument)p FB(.)630 731 y Fr(Caution:)41 b FB(This)29 b(macro)i(is)g(new)f(as)g(of)h Fz(gawk)e FB(3.1.4.)150 910 y Fz(get_array_argument\(t,)c(i,)k(opt\)) 630 1020 y FB(This)h(is)g(a)h(con)m(v)m(enience)h(macro)f(that)g(calls) h Fz(get_actual_argument)p FB(.)630 1164 y Fr(Caution:)41 b FB(This)29 b(macro)i(is)g(new)f(as)g(of)h Fz(gawk)e FB(3.1.4.)150 1343 y Fz(void)g(set_value\(NODE)e(*tree\))630 1452 y FB(This)39 b(function)g(is)h(called)h(from)f(within)f(a)h(C)f (extension)i(function)e(to)i(set)f(the)g(return)630 1562 y(v)-5 b(alue)31 b(from)f(the)g(extension)i(function.)40 b(This)30 b(v)-5 b(alue)31 b(is)f(what)g(the)h Fz(awk)f FB(program)g(sees)h(as)630 1672 y(the)g(return)e(v)-5 b(alue)31 b(from)f(the)g(new)g Fz(awk)g FB(function.)150 1850 y Fz(void)f(update_ERRNO\(void\))630 1960 y FB(This)34 b(function)h(is)f(called)i(from)f(within)f(a)h(C)g(extension)g (function)g(to)g(set)g(the)g(v)-5 b(alue)36 b(of)630 2070 y Fz(gawk)p FB('s)c Fz(ERRNO)g FB(v)-5 b(ariable,)35 b(based)e(on)h(the)f(curren)m(t)g(v)-5 b(alue)34 b(of)g(the)f(C)g Fz(errno)f FB(v)-5 b(ariable.)51 b(It)630 2179 y(is)30 b(pro)m(vided)g(as)h(a)g(con)m(v)m(enience.)150 2358 y Fz(void)e(update_ERRNO_saved\(int)c(errno_saved\))630 2468 y FB(This)42 b(function)h(is)g(called)i(from)d(within)h(a)g(C)g (extension)h(function)f(to)g(set)h(the)f(v)-5 b(alue)630 2577 y(of)42 b Fz(gawk)p FB('s)e Fz(ERRNO)g FB(v)-5 b(ariable,)45 b(based)c(on)h(the)f(sa)m(v)m(ed)i(v)-5 b(alue)42 b(of)f(the)h(C)f Fz(errno)f FB(v)-5 b(ariable)630 2687 y(pro)m(vided)30 b(as)h(the)f(argumen)m(t.)41 b(It)31 b(is)f(pro)m(vided)g(as)h(a)g(con) m(v)m(enience.)630 2831 y Fr(Caution:)41 b FB(This)29 b(function)h(is)h(new)f(as)g(of)h Fz(gawk)e FB(3.1.5.)150 3010 y Fz(void)g(register_deferred_variabl)o(e\(co)o(nst)24 b(char)29 b(*name,)g(NODE)g(*\(*load_func\)\(void\)\))630 3119 y FB(This)d(function)g(is)h(called)h(to)g(register)f(a)g(function) g(to)g(b)s(e)f(called)i(when)e(a)h(reference)h(to)f(an)630 3229 y(unde\014ned)j(v)-5 b(ariable)34 b(with)e(the)g(giv)m(en)i(name)f (is)f(encoun)m(tered.)48 b(The)32 b(callbac)m(k)i(function)630 3339 y(will)f(nev)m(er)g(b)s(e)f(called)i(if)e(the)h(v)-5 b(ariable)34 b(exists)f(already)-8 b(,)34 b(so,)g(unless)e(the)h (calling)h(co)s(de)f(is)630 3448 y(running)22 b(at)j(program)e (startup,)j(it)e(should)f(\014rst)g(c)m(hec)m(k)j(whether)d(a)h(v)-5 b(ariable)25 b(of)f(the)g(giv)m(en)630 3558 y(name)k(already)g(exists.) 41 b(The)27 b(argumen)m(t)h(function)g(m)m(ust)f(return)g(a)h(p)s(oin)m (ter)g(to)h(a)f(NODE)630 3667 y(con)m(taining)33 b(the)f(newly)g (created)h(v)-5 b(ariable.)46 b(This)31 b(function)h(is)g(used)f(to)h (implemen)m(t)h(the)630 3777 y(builtin)25 b Fz(ENVIRON)e FB(and)i Fz(PROCINFO)f FB(v)-5 b(ariables,)27 b(so)f(y)m(ou)f(can)h (refer)f(to)i(them)e(for)g(examples.)630 3921 y Fr(Caution:)41 b FB(This)29 b(function)h(is)h(new)f(as)g(of)h Fz(gawk)e FB(3.1.5.)150 4100 y Fz(void)g(register_open_hook\(void)24 b(*\(*open_func\)\(IOBUF)h(*\)\))630 4209 y FB(This)30 b(function)h(is)g(called)h(to)g(register)g(a)f(function)g(to)h(b)s(e)e (called)i(whenev)m(er)f(a)h(new)e(data)630 4319 y(\014le)24 b(is)g(op)s(ened,)g(leading)h(to)f(the)g(creation)h(of)f(an)g Fz(IOBUF)e FB(structure)h(in)h Fz(iop_alloc)p FB(.)36 b(After)630 4429 y(creating)i(the)e(new)g Fz(IOBUF)p FB(,)h Fz(iop_alloc)d FB(will)j(call)g(\(in)g(rev)m(erse)g(order)f(of)g (registration,)630 4538 y(so)d(the)f(last)h(function)f(registered)h(is) f(called)i(\014rst\))e(eac)m(h)h(op)s(en)f(ho)s(ok)g(un)m(til)h(one)f (returns)630 4648 y(non-NULL.)37 b(If)g(an)m(y)g(ho)s(ok)g(returns)f(a) h(non-NULL)g(v)-5 b(alue,)40 b(that)d(v)-5 b(alue)38 b(is)f(assigned)g(to)630 4757 y(the)25 b Fz(IOBUF)p FB('s)e Fz(opaque)h FB(\014eld)g(\(whic)m(h)h(will)g(presumably)f(p)s(oin)m(t)g (to)i(a)f(structure)f(con)m(taining)630 4867 y(additional)44 b(state)h(asso)s(ciated)f(with)f(the)h(input)e(pro)s(cessing\),)47 b(and)c(no)g(further)f(op)s(en)630 4977 y(ho)s(oks)30 b(are)h(called.)630 5121 y(The)d(function)g(called)i(will)e(most)h(lik) m(ely)h(w)m(an)m(t)f(to)g(set)g(the)g Fz(IOBUF)e(get_record)e FB(metho)s(d)630 5230 y(to)h(indicate)g(that)g(future)e(input)h (records)g(should)f(b)s(e)h(retriev)m(ed)h(b)m(y)f(calling)i(that)e (metho)s(d)630 5340 y(instead)31 b(of)f(using)g(the)h(standard)e Fz(gawk)g FB(input)h(pro)s(cessing.)p eop end %%Page: 286 298 TeXDict begin 286 297 bop 150 -116 a FB(286)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)630 299 y FB(And)c(the)i(function)f(will)h(also)g(probably)e(w)m(an)m(t)j (to)f(set)g(the)f Fz(IOBUF)f(close_func)e FB(metho)s(d)630 408 y(to)37 b(b)s(e)f(called)i(when)d(the)i(\014le)g(is)f(closed)i(to)f (clean)g(up)f(an)m(y)h(state)h(asso)s(ciated)g(with)e(the)630 518 y(input.)630 649 y(Finally)-8 b(,)29 b(ho)s(ok)e(functions)f (should)g(b)s(e)g(prepared)f(to)j(receiv)m(e)g(an)f Fz(IOBUF)e FB(structure)h(where)630 759 y(the)i Fz(fd)f FB(\014eld)g(is)h(set)g (to)g Fz(INVALID_HANDLE)p FB(,)d(meaning)j(that)g Fz(gawk)e FB(w)m(as)i(not)g(able)g(to)h(op)s(en)630 868 y(the)h(\014le)g(itself.) 41 b(In)29 b(this)g(case,)i(the)f(ho)s(ok)g(function)f(m)m(ust)g(b)s(e) g(able)i(to)f(successfully)g(op)s(en)630 978 y(the)h(\014le)f(and)g (place)h(a)g(v)-5 b(alid)31 b(\014le)f(descriptor)g(there.)630 1109 y(Curren)m(tly)-8 b(,)24 b(for)e(example,)k(the)c(ho)s(ok)h (function)f(facilit)m(y)j(is)e(used)e(to)j(implemen)m(t)f(the)g(XML)630 1218 y(parser)36 b(shared)f(library)h(extension.)60 b(F)-8 b(or)37 b(more)g(info,)h(please)f(lo)s(ok)g(in)f(`)p Fz(awk.h)p FB(')f(and)h(in)630 1328 y(`)p Fz(io.c)p FB('.)630 1459 y Fr(Caution:)41 b FB(This)29 b(function)h(is)h(new)f(as)g(of)h Fz(gawk)e FB(3.1.5.)275 1611 y(An)d(argumen)m(t)h(that)g(is)g(supp)s (osed)d(to)j(b)s(e)f(an)h(arra)m(y)g(needs)f(to)h(b)s(e)f(handled)g (with)g(some)h(extra)g(co)s(de,)150 1721 y(in)j(case)h(the)g(arra)m(y)g (b)s(eing)f(passed)g(in)g(is)g(actually)i(from)e(a)h(function)f (parameter.)275 1852 y(In)g(v)m(ersions)i(of)f Fz(gawk)g FB(up)f(to)i(and)f(including)g(3.1.2,)i(the)f(follo)m(wing)h(b)s (oilerplate)f(co)s(de)g(sho)m(ws)f(ho)m(w)150 1961 y(to)g(do)f(this:) 390 2070 y Fm(NODE)40 b(*the_arg;)390 2244 y(the_arg)h(=)e (get_argument\(tree,)44 b(2\);)c(/*)f(assume)i(need)f(3rd)g(arg,)g (0-based)h(*/)390 2419 y(/*)f(if)f(a)h(parameter,)h(get)f(it)g(off)g (the)g(stack)g(*/)390 2506 y(if)g(\(the_arg->type)i(==)e (Node_param_list\))547 2593 y(the_arg)h(=)e (stack_ptr[the_arg->param_cnt)q(];)390 2767 y(/*)h(parameter)h (referenced)g(an)f(array,)h(get)f(it)f(*/)390 2855 y(if)h (\(the_arg->type)i(==)e(Node_array_ref\))547 2942 y(the_arg)h(=)e (the_arg->orig_array;)390 3116 y(/*)h(check)g(type)g(*/)390 3203 y(if)g(\(the_arg->type)i(!=)e(Node_var)h(&&)f(the_arg->type)i(!=)d (Node_var_array\))547 3290 y(fatal\("newfunc:)k(third)d(argument)h(is)f (not)g(an)f(array"\);)390 3465 y(/*)h(force)g(it)g(to)f(be)h(an)g (array,)g(if)g(necessary,)i(clear)e(it)g(*/)390 3552 y(the_arg->type)i(=)e(Node_var_array;)390 3639 y (assoc_clear\(the_arg\);)275 3770 y FB(F)-8 b(or)44 b(v)m(ersions)g (3.1.3)h(and)e(later,)49 b(the)44 b(in)m(ternals)g(c)m(hanged.)81 b(In)43 b(particular,)k(the)d(in)m(terface)i(w)m(as)150 3880 y(actually)32 b Fw(simpli\014e)-5 b(d)41 b FB(drastically)-8 b(.)43 b(The)30 b(follo)m(wing)i(b)s(oilerplate)f(co)s(de)f(no)m(w)h (su\016ces:)390 3988 y Fm(NODE)40 b(*the_arg;)390 4163 y(the_arg)h(=)e(get_argument\(tree,)44 b(2\);)c(/*)f(assume)i(need)f (3rd)g(arg,)g(0-based)h(*/)390 4337 y(/*)f(force)g(it)g(to)f(be)h(an)g (array:)g(*/)390 4424 y(the_arg)h(=)e(get_array\(the_arg\);)390 4598 y(/*)h(if)f(necessary,)j(clear)e(it:)g(*/)390 4686 y(assoc_clear\(the_arg\);)275 4817 y FB(As)30 b(of)g(v)m(ersion)h (3.1.4,)i(the)d(in)m(ternals)h(impro)m(v)m(ed)g(again,)h(and)d(b)s (ecame)i(ev)m(en)g(simpler:)390 4925 y Fm(NODE)40 b(*the_arg;)390 5099 y(the_arg)h(=)e(get_array_argument\(tree,)45 b(2,)40 b(FALSE\);)g(/*)g(assume)h(need)f(3rd)g(arg,)g(0-based)h(*/)275 5230 y FB(Again,)34 b(y)m(ou)e(should)g(sp)s(end)f(time)i(studying)f (the)g Fz(gawk)f FB(in)m(ternals;)k(don't)d(just)g(blindly)g(cop)m(y)h (this)150 5340 y(co)s(de.)p eop end %%Page: 287 299 TeXDict begin 287 298 bop 2089 -116 a Fr(App)s(endix)28 b(C:)i(Implemen)m(tation)i(Notes)93 b FB(287)150 299 y Fj(C.3.2)62 b(Directory)41 b(and)g(File)g(Op)s(eration)h(Built-ins) 150 446 y FB(Tw)m(o)36 b(useful)f(functions)h(that)g(are)g(not)g(in)g Fz(awk)f FB(are)h Fz(chdir)e FB(\(so)j(that)f(an)g Fz(awk)f FB(program)h(can)g(c)m(hange)150 555 y(its)29 b(directory\))g(and)f Fz(stat)f FB(\(so)i(that)g(an)g Fz(awk)e FB(program)i(can)f(gather)h (information)g(ab)s(out)f(a)h(\014le\).)41 b(This)150 665 y(section)32 b(implemen)m(ts)e(these)h(functions)f(for)g Fz(gawk)f FB(in)i(an)f(external)h(extension)g(library)-8 b(.)150 860 y Fj(C.3.2.1)62 b(Using)43 b Fh(chdir)e Fj(and)g Fh(stat)150 1007 y FB(This)34 b(section)i(sho)m(ws)e(ho)m(w)h(to)h(use) e(the)h(new)f(functions)g(at)i(the)f Fz(awk)f FB(lev)m(el)i(once)g (they'v)m(e)g(b)s(een)e(in)m(te-)150 1117 y(grated)28 b(in)m(to)h(the)f(running)e Fz(gawk)h FB(in)m(terpreter.)40 b(Using)28 b Fz(chdir)e FB(is)i(v)m(ery)g(straigh)m(tforw)m(ard.)41 b(It)27 b(tak)m(es)j(one)150 1226 y(argumen)m(t,)h(the)g(new)f (directory)g(to)h(c)m(hange)h(to:)390 1359 y Fz(...)390 1468 y(newdir)46 b(=)i("/home/arnold/funstuff")390 1578 y(ret)f(=)g(chdir\(newdir\))390 1687 y(if)g(\(ret)g(<)g(0\))g({)581 1797 y(printf\("could)d(not)j(change)f(to)h(\045s:)g(\045s\\n",)1297 1907 y(newdir,)f(ERRNO\))g(>)h("/dev/stderr")581 2016 y(exit)g(1)390 2126 y(})390 2235 y(...)275 2368 y FB(The)38 b(return)g(v)-5 b(alue)39 b(is)g(negativ)m(e)i(if)e(the)g Fz(chdir)f FB(failed,)k(and)c Fz(ERRNO)f FB(\(see)j(Section)g(6.5)g ([Built-in)150 2477 y(V)-8 b(ariables],)32 b(page)f(107\))h(is)f(set)g (to)g(a)g(string)f(indicating)h(the)g(error.)275 2610 y(Using)f Fz(stat)f FB(is)h(a)g(bit)g(more)g(complicated.)43 b(The)29 b(C)h Fz(stat)e FB(function)i(\014lls)g(in)g(a)g(structure)g (that)g(has)150 2719 y(a)g(fair)f(amoun)m(t)g(of)h(information.)40 b(The)29 b(righ)m(t)h(w)m(a)m(y)g(to)g(mo)s(del)f(this)g(in)g Fz(awk)f FB(is)h(to)h(\014ll)f(in)g(an)g(asso)s(ciativ)m(e)150 2829 y(arra)m(y)i(with)f(the)h(appropriate)f(information:)390 2961 y Fz(file)47 b(=)g("/home/arnold/.profile")390 3071 y(fdata[1])f(=)h("x")190 b(#)48 b(force)e(`fdata')g(to)h(be)g(an)g (array)390 3180 y(ret)g(=)g(stat\(file,)e(fdata\))390 3290 y(if)i(\(ret)g(<)g(0\))g({)581 3400 y(printf\("could)d(not)j(stat) g(\045s:)g(\045s\\n",)1010 3509 y(file,)g(ERRNO\))f(>)h("/dev/stderr") 581 3619 y(exit)g(1)390 3728 y(})390 3838 y(printf\("size)d(of)k(\045s) f(is)g(\045d)g(bytes\\n",)e(file,)i(fdata["size"]\))275 3970 y FB(The)38 b Fz(stat)g FB(function)g(alw)m(a)m(ys)j(clears)f(the) f(data)h(arra)m(y)-8 b(,)42 b(ev)m(en)d(if)g(the)h Fz(stat)d FB(fails.)67 b(It)39 b(\014lls)g(in)g(the)150 4080 y(follo)m(wing)32 b(elemen)m(ts:)150 4235 y Fz("name")192 b FB(The)30 b(name)g(of)h(the)f (\014le)h(that)g(w)m(as)g Fz(stat)p FB('ed.)150 4390 y Fz("dev")150 4500 y("ino")240 b FB(The)30 b(\014le's)g(device)i(and)d (ino)s(de)h(n)m(um)m(b)s(ers,)g(resp)s(ectiv)m(ely)-8 b(.)150 4655 y Fz("mode")192 b FB(The)32 b(\014le's)h(mo)s(de,)g(as)g (a)g(n)m(umeric)g(v)-5 b(alue.)48 b(This)32 b(includes)h(b)s(oth)f(the) h(\014le's)f(t)m(yp)s(e)h(and)g(its)630 4765 y(p)s(ermissions.)150 4920 y Fz("nlink")144 b FB(The)30 b(n)m(um)m(b)s(er)f(of)h(hard)g (links)g(\(directory)h(en)m(tries\))h(the)e(\014le)h(has.)150 5075 y Fz("uid")150 5185 y("gid")240 b FB(The)30 b(n)m(umeric)g(user)g (and)g(group)f(ID)i(n)m(um)m(b)s(ers)e(of)h(the)h(\014le's)g(o)m(wner.) 150 5340 y Fz("size")192 b FB(The)30 b(size)h(in)f(b)m(ytes)h(of)g(the) f(\014le.)p eop end %%Page: 288 300 TeXDict begin 288 299 bop 150 -116 a FB(288)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fz("blocks")96 b FB(The)22 b(n)m(um)m(b)s(er)f(of)i(disk)f(blo)s (c)m(ks)h(the)g(\014le)f(actually)i(o)s(ccupies.)39 b(This)22 b(ma)m(y)h(not)f(b)s(e)g(a)h(function)630 408 y(of)31 b(the)f(\014le's)h(size)g(if)f(the)h(\014le)f(has)g(holes.)150 563 y Fz("atime")150 673 y("mtime")150 783 y("ctime")144 b FB(The)25 b(\014le's)h(last)h(access,)h(mo)s(di\014cation,)f(and)e (ino)s(de)h(up)s(date)f(times,)i(resp)s(ectiv)m(ely)-8 b(.)41 b(These)630 892 y(are)25 b(n)m(umeric)g(timestamps,)h(suitable)g (for)e(formatting)i(with)e Fz(strftime)f FB(\(see)i(Section)h(8.1)630 1002 y([Built-in)31 b(F)-8 b(unctions],)32 b(page)f(127\).)150 1157 y Fz("pmode")144 b FB(The)24 b(\014le's)g(\\prin)m(table)g(mo)s (de.")39 b(This)23 b(is)h(a)h(string)f(represen)m(tation)h(of)f(the)g (\014le's)g(t)m(yp)s(e)h(and)630 1266 y(p)s(ermissions,)h(suc)m(h)g(as) h(what)f(is)h(pro)s(duced)e(b)m(y)h(`)p Fz(ls)k(-l)p FB('|for)c(example,)i Fz("drwxr-xr-x")p FB(.)150 1421 y Fz("type")192 b FB(A)41 b(prin)m(table)h(string)f(represen)m(tation)i (of)e(the)h(\014le's)g(t)m(yp)s(e.)73 b(The)41 b(v)-5 b(alue)42 b(is)g(one)f(of)h(the)630 1531 y(follo)m(wing:)630 1686 y Fz("blockdev")630 1796 y("chardev")1110 1905 y FB(The)30 b(\014le)g(is)h(a)g(blo)s(c)m(k)f(or)h(c)m(haracter)h(device) f(\(\\sp)s(ecial)h(\014le"\).)630 2060 y Fz("directory")1110 2170 y FB(The)e(\014le)g(is)h(a)g(directory)-8 b(.)630 2325 y Fz("fifo")192 b FB(The)30 b(\014le)g(is)h(a)g(named-pip)s(e)e (\(also)j(kno)m(wn)d(as)i(a)g(FIF)m(O\).)630 2480 y Fz("file")192 b FB(The)30 b(\014le)g(is)h(just)f(a)g(regular)h(\014le.)630 2635 y Fz("socket")96 b FB(The)30 b(\014le)g(is)h(an)f Fz(AF_UNIX)e FB(\(\\Unix)j(domain"\))g(so)s(c)m(k)m(et)i(in)d(the)g (\014lesystem.)630 2790 y Fz("symlink")1110 2899 y FB(The)g(\014le)g (is)h(a)g(sym)m(b)s(olic)f(link.)275 3054 y(Sev)m(eral)35 b(additional)h(elemen)m(ts)f(ma)m(y)h(b)s(e)e(presen)m(t)g(dep)s (ending)f(up)s(on)g(the)i(op)s(erating)g(system)g(and)150 3164 y(the)f(t)m(yp)s(e)f(of)h(the)f(\014le.)50 b(Y)-8 b(ou)34 b(can)g(test)g(for)f(them)h(in)f(y)m(our)g Fz(awk)g FB(program)g(b)m(y)g(using)g(the)h Fz(in)f FB(op)s(erator)150 3274 y(\(see)e(Section)h(7.2)f([Referring)f(to)i(an)e(Arra)m(y)g (Elemen)m(t],)i(page)f(117\):)150 3429 y Fz("blksize")630 3538 y FB(The)40 b(preferred)f(blo)s(c)m(k)i(size)g(for)f(I/O)g(to)i (the)e(\014le.)71 b(This)39 b(\014eld)h(is)h(not)f(presen)m(t)h(on)f (all)630 3648 y(POSIX-lik)m(e)31 b(systems)f(in)g(the)h(C)f Fz(stat)f FB(structure.)150 3803 y Fz("linkval")630 3912 y FB(If)g(the)h(\014le)g(is)g(a)g(sym)m(b)s(olic)g(link,)g(this)f (elemen)m(t)j(is)d(the)h(name)g(of)g(the)g(\014le)g(the)f(link)h(p)s (oin)m(ts)630 4022 y(to)h(\(i.e.,)h(the)f(v)-5 b(alue)31 b(of)f(the)h(link\).)150 4177 y Fz("rdev")150 4287 y("major")150 4396 y("minor")144 b FB(If)39 b(the)h(\014le)g(is)g(a)g(blo)s(c)m(k)h (or)e(c)m(haracter)j(device)e(\014le,)j(then)c(these)i(v)-5 b(alues)40 b(represen)m(t)g(the)630 4506 y(n)m(umeric)30 b(device)i(n)m(um)m(b)s(er)d(and)h(the)h(ma)5 b(jor)30 b(and)g(minor)g(comp)s(onen)m(ts)h(of)g(that)g(n)m(um)m(b)s(er,)630 4615 y(resp)s(ectiv)m(ely)-8 b(.)150 4810 y Fj(C.3.2.2)62 b(C)41 b(Co)s(de)g(for)h Fh(chdir)g Fj(and)f Fh(stat)150 4957 y FB(Here)25 b(is)g(the)g(C)f(co)s(de)h(for)g(these)g(extensions.) 39 b(They)24 b(w)m(ere)h(written)g(for)g(GNU/Lin)m(ux.)39 b(The)24 b(co)s(de)h(needs)150 5067 y(some)31 b(more)f(w)m(ork)h(for)f (complete)i(p)s(ortabilit)m(y)f(to)g(other)g(POSIX-complian)m(t)g (systems:)3220 5034 y Fo(1)p 150 5154 1200 4 v 199 5221 a(1)275 5253 y Fn(This)66 b(v)n(ersion)h(is)g(edited)f(sligh)n(tly)h (for)g(presen)n(tation.)156 b(The)67 b(complete)g(v)n(ersion)f(can)h(b) r(e)f(found)g(in)275 5340 y(`)p Fm(extension/filefuncs.c)p Fn(')31 b(in)25 b(the)g Fm(gawk)i Fn(distribution.)p eop end %%Page: 289 301 TeXDict begin 289 300 bop 2089 -116 a Fr(App)s(endix)28 b(C:)i(Implemen)m(tation)i(Notes)93 b FB(289)390 299 y Fz(#include)46 b("awk.h")390 518 y(#include)g(<sys/sysmacros.h>)390 737 y(/*)95 b(do_chdir)45 b(---)i(provide)f(dynamically)f(loaded)1201 847 y(chdir\(\))h(builtin)g(for)h(gawk)g(*/)390 1066 y(static)f(NODE)h(*)390 1176 y(do_chdir\(tree\))390 1285 y(NODE)g(*tree;)390 1395 y({)581 1504 y(NODE)g(*newdir;)581 1614 y(int)g(ret)g(=)g(-1;)581 1833 y(if)g(\(do_lint)f(&&)h (get_curfunc_arg_count\(\))41 b(!=)47 b(1\))772 1943 y(lintwarn\("chdir:)c(called)j(with)h(incorrect)e(number)h(of)h (arguments"\);)581 2162 y(newdir)f(=)h(get_scalar_argument\(tree,)41 b(0\);)275 2299 y FB(The)23 b(\014le)h(includes)f(the)h Fz("awk.h")e FB(header)h(\014le)h(for)g(de\014nitions)f(for)h(the)g Fz(gawk)e FB(in)m(ternals.)39 b(It)24 b(includes)150 2408 y Fz(<sys/sysmacros.h>)i FB(for)k(access)h(to)h(the)e Fz(major)f FB(and)h Fz(minor)f FB(macros.)275 2545 y(By)20 b(con)m(v)m(en)m(tion,)25 b(for)20 b(an)h Fz(awk)e FB(function)h Fz(foo)p FB(,)i(the)f(function)f(that)h(implemen)m(ts)g(it)g(is)f (called)i(`)p Fz(do_foo)p FB('.)150 2655 y(The)42 b(function)g(should)f (tak)m(e)i(a)g(`)p Fz(NODE)29 b(*)p FB(')43 b(argumen)m(t,)i(usually)d (called)i Fz(tree)p FB(,)g(that)f(represen)m(ts)f(the)150 2765 y(argumen)m(t)31 b(list)f(to)h(the)g(function.)40 b(The)30 b Fz(newdir)e FB(v)-5 b(ariable)31 b(represen)m(ts)f(the)h (new)e(directory)i(to)g(c)m(hange)150 2874 y(to,)g(retriev)m(ed)h(with) e Fz(get_argument)p FB(.)37 b(Note)32 b(that)f(the)f(\014rst)g(argumen) m(t)h(is)f(n)m(um)m(b)s(ered)f(zero.)275 3011 y(This)k(co)s(de)i (actually)h(accomplishes)g(the)e Fz(chdir)p FB(.)52 b(It)35 b(\014rst)e(forces)i(the)g(argumen)m(t)g(to)g(b)s(e)f(a)h(string)150 3121 y(and)c(passes)g(the)g(string)g(v)-5 b(alue)32 b(to)g(the)g Fz(chdir)d FB(system)j(call.)45 b(If)30 b(the)i Fz(chdir)e FB(fails,)i Fz(ERRNO)e FB(is)h(up)s(dated.)150 3230 y(The)f(result)g (of)h Fz(force_string)c FB(has)j(to)h(b)s(e)f(freed)g(with)g Fz(free_temp)p FB(:)581 3367 y Fz(\(void\))46 b (force_string\(newdir\);)581 3477 y(ret)h(=)g(chdir\(newdir->stptr\);) 581 3587 y(if)g(\(ret)g(<)g(0\))772 3696 y(update_ERRNO\(\);)581 3806 y(free_temp\(newdir\);)275 3943 y FB(Finally)-8 b(,)28 b(the)f(function)f(returns)f(the)h(return)g(v)-5 b(alue)26 b(to)h(the)g Fz(awk)e FB(lev)m(el,)k(using)d Fz(set_value)p FB(.)37 b(Then)25 b(it)150 4052 y(m)m(ust)h(return)f(a)i (v)-5 b(alue)26 b(from)g(the)h(call)g(to)g(the)f(new)g(built-in)g (\(this)g(v)-5 b(alue)27 b(ignored)f(b)m(y)h(the)f(in)m(terpreter\):) 581 4189 y Fz(/*)47 b(Set)g(the)g(return)f(value)g(*/)581 4299 y(set_value\(tmp_number\(\(AW)o(KNUM)o(\))c(ret\)\);)581 4518 y(/*)47 b(Just)g(to)g(make)g(the)f(interpreter)f(happy)i(*/)581 4628 y(return)f(tmp_number\(\(AWKNUM\))d(0\);)390 4737 y(})275 4874 y FB(The)32 b Fz(stat)g FB(built-in)g(is)h(more)g(in)m(v)m (olv)m(ed.)50 b(First)34 b(comes)f(a)h(function)e(that)i(turns)d(a)j(n) m(umeric)e(mo)s(de)150 4984 y(in)m(to)i(a)e(prin)m(table)h(represen)m (tation)h(\(e.g.,)h(644)f(b)s(ecomes)f(`)p Fz(-rw-r--r--)p FB('\).)45 b(This)32 b(is)g(omitted)i(here)e(for)150 5093 y(brevit)m(y:)390 5230 y Fz(/*)47 b(format_mode)e(---)i(turn)f(a)i (stat)f(mode)f(field)1297 5340 y(into)g(something)g(readable)f(*/)p eop end %%Page: 290 302 TeXDict begin 290 301 bop 150 -116 a FB(290)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)390 408 y Fz(static)46 b(char)h(*)390 518 y(format_mode\(fmode\))390 628 y(unsigned)f(long)g(fmode;)390 737 y({)581 847 y(...)390 956 y(})275 1093 y FB(Next)29 b(comes)g(the)f(actual)i Fz(do_stat)c FB(function)i(itself.)41 b(First)28 b(come)h(the)g(v)-5 b(ariable)29 b(declarations)h(and)150 1203 y(argumen)m(t)h(c)m(hec)m (king:)390 1340 y Fz(/*)47 b(do_stat)f(---)h(provide)f(a)h(stat\(\))f (function)g(for)h(gawk)f(*/)390 1559 y(static)g(NODE)h(*)390 1669 y(do_stat\(tree\))390 1778 y(NODE)g(*tree;)390 1888 y({)581 1998 y(NODE)g(*file,)f(*array;)581 2107 y(struct)g(stat)h (sbuf;)581 2217 y(int)g(ret;)581 2326 y(NODE)g(**aptr;)581 2436 y(char)g(*pmode;)189 b(/*)47 b(printable)e(mode)i(*/)581 2545 y(char)g(*type)f(=)h("unknown";)581 2874 y(if)g(\(do_lint)f(&&)h (get_curfunc_arg_count\(\))41 b(>)48 b(2\))772 2984 y(lintwarn\("stat:) 43 b(called)k(with)f(too)h(many)g(arguments"\);)275 3121 y FB(Then)33 b(comes)j(the)f(actual)i(w)m(ork.)54 b(First,)37 b(w)m(e)e(get)i(the)e(argumen)m(ts.)54 b(Then,)36 b(w)m(e)f(alw)m(a)m (ys)i(clear)f(the)150 3230 y(arra)m(y)-8 b(.)40 b(T)-8 b(o)27 b(get)g(the)f(\014le)g(information,)h(w)m(e)g(use)f Fz(lstat)p FB(,)f(in)h(case)h(the)f(\014le)g(is)g(a)h(sym)m(b)s(olic)f (link.)39 b(If)26 b(there's)150 3340 y(an)k(error,)g(w)m(e)h(set)g Fz(ERRNO)e FB(and)h(return:)581 3477 y Fz(/*)47 b(directory)e(is)j (first)e(arg,)h(array)f(to)h(hold)g(results)f(is)h(second)f(*/)581 3587 y(file)h(=)g(get_scalar_argument\(tree)o(,)42 b(0,)47 b(FALSE\);)581 3696 y(array)f(=)i(get_array_argument\(tree)o(,)42 b(1,)47 b(FALSE\);)581 3915 y(/*)g(empty)f(out)h(the)g(array)g(*/)581 4025 y(assoc_clear\(array\);)581 4244 y(/*)g(lstat)f(the)h(file,)g(if)g (error,)f(set)h(ERRNO)f(and)h(return)f(*/)581 4354 y(\(void\))g (force_string\(file\);)581 4463 y(ret)h(=)g(lstat\(file->stptr,)c(&)48 b(sbuf\);)581 4573 y(if)f(\(ret)g(<)g(0\))g({)772 4682 y(update_ERRNO\(\);)772 4902 y(set_value\(tmp_number\(\(AW)o(KNU)o(M\)) 42 b(ret\)\);)772 5121 y(free_temp\(file\);)772 5230 y(return)k(tmp_number\(\(AWKNUM\))c(0\);)581 5340 y(})p eop end %%Page: 291 303 TeXDict begin 291 302 bop 2089 -116 a Fr(App)s(endix)28 b(C:)i(Implemen)m(tation)i(Notes)93 b FB(291)275 299 y(No)m(w)29 b(comes)g(the)g(tedious)f(part:)40 b(\014lling)29 b(in)f(the)g(arra)m(y)-8 b(.)41 b(Only)28 b(a)h(few)f(of)h(the)g(calls) g(are)g(sho)m(wn)f(here,)150 408 y(since)j(they)f(all)i(follo)m(w)f (the)g(same)g(pattern:)581 546 y Fz(/*)47 b(fill)g(in)g(the)g(array)f (*/)581 656 y(aptr)h(=)g(assoc_lookup\(array,)c(tmp_string\("name",)f (4\),)47 b(FALSE\);)581 766 y(*aptr)f(=)i(dupnode\(file\);)581 985 y(aptr)f(=)g(assoc_lookup\(array,)c(tmp_string\("mode",)f(4\),)47 b(FALSE\);)581 1094 y(*aptr)f(=)i(make_number\(\(AWKNUM\))42 b(sbuf.st_mode\);)581 1314 y(aptr)47 b(=)g(assoc_lookup\(array,)c (tmp_string\("pmode",)f(5\),)47 b(FALSE\);)581 1423 y(pmode)f(=)i (format_mode\(sbuf.st_mod)o(e\);)581 1533 y(*aptr)e(=)i (make_string\(pmode,)43 b(strlen\(pmode\)\);)275 1671 y FB(When)30 b(done,)h(w)m(e)g(free)g(the)f(temp)s(orary)h(v)-5 b(alue)31 b(con)m(taining)h(the)f(\014le)g(name,)g(set)g(the)g(return)e (v)-5 b(alue,)150 1780 y(and)30 b(return:)581 1918 y Fz(free_temp\(file\);)581 2137 y(/*)47 b(Set)g(the)g(return)f(value)g (*/)581 2247 y(set_value\(tmp_number\(\(AW)o(KNUM)o(\))c(ret\)\);)581 2466 y(/*)47 b(Just)g(to)g(make)g(the)f(interpreter)f(happy)i(*/)581 2576 y(return)f(tmp_number\(\(AWKNUM\))d(0\);)390 2685 y(})275 2823 y FB(Finally)-8 b(,)39 b(it's)f(necessary)f(to)g(pro)m (vide)g(the)g(\\glue")h(that)f(loads)g(the)g(new)f(function\(s\))h(in)m (to)h Fz(gawk)p FB(.)150 2933 y(By)31 b(con)m(v)m(en)m(tion,)h(eac)m(h) g(library)e(has)g(a)h(routine)f(named)g Fz(dlload)f FB(that)i(do)s(es)f (the)g(job:)390 3071 y Fz(/*)47 b(dlload)f(---)h(load)g(new)g(builtins) e(in)i(this)g(library)f(*/)390 3290 y(NODE)h(*)390 3399 y(dlload\(tree,)d(dl\))390 3509 y(NODE)j(*tree;)390 3619 y(void)g(*dl;)390 3728 y({)581 3838 y(make_builtin\("chdir",)42 b(do_chdir,)j(1\);)581 3947 y(make_builtin\("stat",)d(do_stat,)k(2\);) 581 4057 y(return)g(tmp_number\(\(AWKNUM\))d(0\);)390 4167 y(})275 4304 y FB(And)28 b(that's)i(it!)41 b(As)29 b(an)h(exercise,)h(consider)e(adding)g(functions)g(to)h(implemen)m(t)g (system)g(calls)g(suc)m(h)150 4414 y(as)h Fz(chown)p FB(,)e Fz(chmod)p FB(,)g(and)h Fz(umask)p FB(.)150 4617 y Fj(C.3.2.3)62 b(In)m(tegrating)41 b(the)g(Extensions)150 4764 y FB(No)m(w)30 b(that)g(the)g(co)s(de)g(is)f(written,)h(it)g(m)m (ust)g(b)s(e)f(p)s(ossible)g(to)h(add)f(it)h(at)g(run)m(time)f(to)i (the)e(running)f Fz(gawk)150 4873 y FB(in)m(terpreter.)60 b(First,)40 b(the)d(co)s(de)g(m)m(ust)f(b)s(e)g(compiled.)61 b(Assuming)36 b(that)i(the)f(functions)f(are)h(in)g(a)g(\014le)150 4983 y(named)29 b(`)p Fz(filefuncs.c)p FB(',)f(and)h Fx(idir)36 b FB(is)30 b(the)g(lo)s(cation)h(of)f(the)g Fz(gawk)e FB(include)i(\014les,)g(the)g(follo)m(wing)h(steps)150 5092 y(create)h(a)f(GNU/Lin)m(ux)g(shared)e(library:)390 5230 y Fz($)47 b(gcc)g(-shared)f(-DHAVE_CONFIG_H)e(-c)j(-O)g(-g)g(-I)p Fk(idir)57 b Fz(filefuncs.c)390 5340 y($)47 b(ld)h(-o)f(filefuncs.so)d (-shared)i(filefuncs.o)p eop end %%Page: 292 304 TeXDict begin 292 303 bop 150 -116 a FB(292)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)275 299 y FB(Once)38 b(the)g(library)g(exists,)k(it)c(is)h(loaded)g(b)m(y)f (calling)i(the)e Fz(extension)e FB(built-in)i(function.)65 b(This)150 408 y(function)31 b(tak)m(es)i(t)m(w)m(o)g(argumen)m(ts:)43 b(the)31 b(name)h(of)f(the)h(library)f(to)h(load)g(and)f(the)g(name)h (of)f(a)h(function)150 518 y(to)j(call)h(when)e(the)g(library)g(is)h (\014rst)f(loaded.)53 b(This)34 b(function)g(adds)g(the)h(new)f (functions)g(to)h Fz(gawk)p FB(.)52 b(It)150 628 y(returns)29 b(the)i(v)-5 b(alue)31 b(returned)e(b)m(y)h(the)h(initialization)i (function)d(within)g(the)g(shared)g(library:)390 772 y Fz(#)47 b(file)g(testff.awk)390 882 y(BEGIN)f({)581 992 y(extension\("./filefuncs.s)o(o",)41 b("dlload"\))581 1211 y(chdir\("."\))93 b(#)47 b(no-op)581 1430 y(data[1])f(=)h(1)h(#)f (force)f(`data')h(to)g(be)g(an)g(array)581 1540 y(print)f("Info)h(for)g (testff.awk")581 1649 y(ret)g(=)g(stat\("testff.awk",)c(data\))581 1759 y(print)j("ret)h(=",)g(ret)581 1868 y(for)g(\(i)g(in)g(data\))772 1978 y(printf)f("data[\\"\045s\\"])e(=)k(\045s\\n",)e(i,)h(data[i])581 2087 y(print)f("testff.awk)f(modified:",)772 2197 y(strftime\("\045m)f (\045d)j(\045y)h(\045H:\045M:\045S",)d(data["mtime"]\))390 2307 y(})275 2451 y FB(Here)30 b(are)h(the)g(results)f(of)g(running)f (the)i(program:)390 2596 y Fz($)47 b(gawk)g(-f)g(testff.awk)410 2710 y Fy(a)533 2706 y Fz(Info)g(for)g(testff.awk)410 2819 y Fy(a)533 2815 y Fz(ret)g(=)h(0)410 2929 y Fy(a)533 2925 y Fz(data["blksize"])c(=)j(4096)410 3039 y Fy(a)533 3035 y Fz(data["mtime"])d(=)k(932361936)410 3148 y Fy(a)533 3144 y Fz(data["mode"])d(=)i(33188)410 3258 y Fy(a)533 3254 y Fz(data["type"])e(=)i(file)410 3367 y Fy(a)533 3363 y Fz(data["dev"])e(=)i(2065)410 3477 y Fy(a)533 3473 y Fz(data["gid"])e(=)i(10)410 3586 y Fy(a)533 3582 y Fz(data["ino"])e(=)i(878597)410 3696 y Fy(a)533 3692 y Fz(data["ctime"])d(=)k(971431797)410 3806 y Fy(a)533 3802 y Fz(data["blocks"])c(=)k(2)410 3915 y Fy(a)533 3911 y Fz(data["nlink"])c(=)k(1)410 4025 y Fy(a)533 4021 y Fz(data["name"])d(=)i(testff.awk)410 4134 y Fy(a)533 4130 y Fz(data["atime"])d(=)k(971608519)410 4244 y Fy(a)533 4240 y Fz(data["pmode"])c(=)k(-rw-r--r--)410 4354 y Fy(a)533 4350 y Fz(data["size"])d(=)i(607)410 4463 y Fy(a)533 4459 y Fz(data["uid"])e(=)i(2076)410 4573 y Fy(a)533 4569 y Fz(testff.awk)e(modified:)g(07)j(19)f(99)g(08:25:36)150 4817 y FA(C.4)68 b(Probable)45 b(F)-11 b(uture)45 b(Extensions)390 4976 y Fw(A)-9 b(WK)32 b(is)g(a)h(language)g(similar)h(to)f(PERL,)f (only)i(c)-5 b(onsider)g(ably)35 b(mor)-5 b(e)33 b(ele)-5 b(gant.)390 5086 y FB(Arnold)30 b(Robbins)390 5230 y Fw(Hey!)390 5340 y FB(Larry)g(W)-8 b(all)p eop end %%Page: 293 305 TeXDict begin 293 304 bop 2089 -116 a Fr(App)s(endix)28 b(C:)i(Implemen)m(tation)i(Notes)93 b FB(293)275 299 y(This)33 b(section)i(brie\015y)e(lists)h(extensions)g(and)g(p)s (ossible)f(impro)m(v)m(emen)m(ts)i(that)g(indicate)f(the)h(direc-)150 408 y(tions)27 b(w)m(e)f(are)h(curren)m(tly)f(considering)h(for)f Fz(gawk)p FB(.)38 b(The)26 b(\014le)g(`)p Fz(FUTURES)p FB(')f(in)h(the)h Fz(gawk)e FB(distribution)g(lists)150 518 y(these)31 b(extensions)g(as)f(w)m(ell.)275 666 y(F)-8 b(ollo)m(wing)32 b(is)f(a)g(list)g(of)f(probable)g(future)g(c)m(hanges) h(visible)g(at)g(the)f Fz(awk)g FB(language)i(lev)m(el:)150 847 y(Loadable)f(mo)s(dule)f(in)m(terface)630 956 y(It)c(is)g(not)g (clear)g(that)h(the)f Fz(awk)p FB(-lev)m(el)h(in)m(terface)g(to)f(the)g (mo)s(dules)f(facilit)m(y)j(is)e(as)g(go)s(o)s(d)f(as)h(it)630 1066 y(should)g(b)s(e.)38 b(The)27 b(in)m(terface)h(needs)e(to)h(b)s(e) f(redesigned,)i(particularly)f(taking)g(namespace)630 1175 y(issues)35 b(in)m(to)h(accoun)m(t,)i(as)d(w)m(ell)h(as)f(p)s (ossibly)f(including)h(issues)g(suc)m(h)f(as)i(library)e(searc)m(h)630 1285 y(path)c(order)g(and)g(v)m(ersioning.)150 1458 y Fz(RECLEN)f FB(v)-5 b(ariable)31 b(for)f(\014xed-length)g(records)630 1568 y(Along)39 b(with)e Fz(FIELDWIDTHS)p FB(,)g(this)h(w)m(ould)g(sp)s (eed)f(up)g(the)h(pro)s(cessing)g(of)g(\014xed-length)630 1677 y(records.)45 b Fz(PROCINFO["RS"])28 b FB(w)m(ould)k(b)s(e)f Fz("RS")f FB(or)i Fz("RECLEN")p FB(,)f(dep)s(ending)f(up)s(on)g(whic)m (h)630 1787 y(kind)g(of)g(record)g(pro)s(cessing)g(is)h(in)f(e\013ect.) 150 1960 y(Additional)h Fz(printf)e FB(sp)s(eci\014ers)630 2070 y(The)i(1999)j(ISO)c(C)i(standard)f(added)g(a)h(n)m(um)m(b)s(er)e (of)i(additional)h Fz(printf)d FB(format)i(sp)s(eci-)630 2180 y(\014ers.)40 b(These)30 b(should)g(b)s(e)f(ev)-5 b(aluated)32 b(for)e(p)s(ossible)g(inclusion)g(in)g Fz(gawk)p FB(.)150 2353 y(Databases)78 b(It)30 b(ma)m(y)h(b)s(e)f(p)s(ossible)g (to)h(map)f(a)h(GDBM/NDBM/SDBM)k(\014le)30 b(in)m(to)i(an)e Fz(awk)f FB(arra)m(y)-8 b(.)150 2526 y(More)31 b Fz(lint)e FB(w)m(arnings)630 2636 y(There)h(are)h(more)f(things)g(that)h(could)g (b)s(e)f(c)m(hec)m(k)m(ed)i(for)e(p)s(ortabilit)m(y)-8 b(.)275 2816 y(F)g(ollo)m(wing)31 b(is)e(a)g(list)g(of)g(probable)g (impro)m(v)m(emen)m(ts)h(that)f(will)h(mak)m(e)g Fz(gawk)p FB('s)d(source)i(co)s(de)g(easier)h(to)150 2925 y(w)m(ork)g(with:)150 3106 y(Loadable)h(mo)s(dule)f(mec)m(hanics)630 3215 y(The)k(curren)m(t) g(extension)h(mec)m(hanism)g(w)m(orks)f(\(see)i(Section)f(C.3)f ([Adding)g(New)h(Built-)630 3325 y(in)41 b(F)-8 b(unctions)42 b(to)g Fz(gawk)p FB(],)h(page)f(282\),)k(but)41 b(is)g(rather)h (primitiv)m(e.)74 b(It)41 b(requires)g(a)h(fair)630 3434 y(amoun)m(t)32 b(of)g(man)m(ual)g(w)m(ork)f(to)h(create)i(and)c(in)m (tegrate)k(a)e(loadable)h(mo)s(dule.)43 b(Nor)32 b(is)g(the)630 3544 y(curren)m(t)23 b(mec)m(hanism)h(as)f(p)s(ortable)g(as)h(migh)m(t) g(b)s(e)e(desired.)38 b(The)23 b(GNU)h Fz(libtool)d FB(pac)m(k)-5 b(age)630 3654 y(pro)m(vides)34 b(a)h(n)m(um)m(b)s(er)e(of)i(features)f (that)h(w)m(ould)f(mak)m(e)i(using)e(loadable)h(mo)s(dules)f(m)m(uc)m (h)630 3763 y(easier.)42 b Fz(gawk)29 b FB(should)g(b)s(e)h(c)m(hanged) h(to)g(use)f Fz(libtool)p FB(.)150 3936 y(Loadable)h(mo)s(dule)f(in)m (ternals)630 4046 y(The)40 b(API)h(to)g(its)g(in)m(ternals)g(that)h Fz(gawk)d FB(\\exp)s(orts")i(should)f(b)s(e)g(revised.)72 b(T)-8 b(o)s(o)41 b(man)m(y)630 4156 y(things)25 b(are)h(needlessly)g (exp)s(osed.)39 b(A)25 b(new)g(API)g(should)g(b)s(e)f(designed)i(and)e (implemen)m(ted)630 4265 y(to)31 b(mak)m(e)g(mo)s(dule)f(writing)h (easier.)150 4439 y(Better)h(arra)m(y)f(subscript)e(managemen)m(t)630 4548 y Fz(gawk)p FB('s)40 b(managemen)m(t)j(of)f(arra)m(y)g(subscript)e (storage)j(could)f(use)f(rev)-5 b(amping,)45 b(so)c(that)630 4658 y(using)27 b(the)h(same)h(v)-5 b(alue)28 b(to)h(index)e(m)m (ultiple)i(arra)m(ys)f(only)g(stores)g(one)h(cop)m(y)f(of)g(the)g (index)630 4767 y(v)-5 b(alue.)150 4941 y(In)m(tegrating)32 b(the)f(DBUG)g(library)630 5050 y(In)m(tegrating)41 b(F)-8 b(red)39 b(Fish's)g(DBUG)i(library)e(w)m(ould)f(b)s(e)h(helpful)f (during)g(dev)m(elopmen)m(t,)630 5160 y(but)30 b(it's)h(a)f(lot)i(of)e (w)m(ork)h(to)g(do.)275 5340 y(F)-8 b(ollo)m(wing)32 b(is)f(a)g(list)g(of)f(probable)g(impro)m(v)m(emen)m(ts)i(that)f(will)f (mak)m(e)i Fz(gawk)d FB(p)s(erform)g(b)s(etter:)p eop end %%Page: 294 306 TeXDict begin 294 305 bop 150 -116 a FB(294)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(Compilation)h(of)g Fz(awk)e FB(programs)630 408 y Fz(gawk)43 b FB(uses)h(a)g(Bison)h(\(Y)-8 b(A)m(CC-lik)m(e\))47 b(parser)c(to)i(con)m(v)m(ert)h(the)e(script)h(giv)m(en)g(it)f(in)m(to) i(a)630 518 y(syn)m(tax)36 b(tree;)i(the)e(syn)m(tax)g(tree)f(is)h (then)f(executed)h(b)m(y)f(a)g(simple)h(recursiv)m(e)f(ev)-5 b(aluator.)630 628 y(This)37 b(metho)s(d)h(incurs)f(a)h(lot)h(of)f(o)m (v)m(erhead,)j(since)e(the)f(recursiv)m(e)g(ev)-5 b(aluator)40 b(p)s(erforms)630 737 y(man)m(y)30 b(pro)s(cedure)g(calls)h(to)g(do)g (ev)m(en)g(the)f(simplest)h(things.)630 872 y(It)23 b(should)g(b)s(e)f (p)s(ossible)h(for)g Fz(gawk)f FB(to)j(con)m(v)m(ert)f(the)g(script's)f (parse)g(tree)h(in)m(to)h(a)e(C)g(program)630 981 y(whic)m(h)30 b(the)g(user)f(w)m(ould)h(then)f(compile,)i(using)f(the)g(normal)g(C)f (compiler)i(and)e(a)h(sp)s(ecial)630 1091 y Fz(gawk)41 b FB(library)h(to)g(pro)m(vide)g(all)h(the)g(needed)e(functions)h (\(regexps,)k(\014elds,)e(asso)s(ciativ)m(e)630 1200 y(arra)m(ys,)31 b(t)m(yp)s(e)g(co)s(ercion,)g(and)f(so)g(on\).)630 1335 y(An)e(easier)h(p)s(ossibilit)m(y)g(migh)m(t)f(b)s(e)g(for)g(an)g (in)m(termediate)i(phase)e(of)g Fz(gawk)f FB(to)i(con)m(v)m(ert)h(the) 630 1445 y(parse)j(tree)g(in)m(to)h(a)f(linear)g(b)m(yte)g(co)s(de)g (form)g(lik)m(e)h(the)f(one)g(used)e(in)i(GNU)g(Emacs)g(Lisp.)630 1554 y(The)39 b(recursiv)m(e)h(ev)-5 b(aluator)41 b(w)m(ould)e(then)h (b)s(e)e(replaced)i(b)m(y)g(a)g(straigh)m(t)h(line)f(b)m(yte)g(co)s(de) 630 1664 y(in)m(terpreter)f(that)f(w)m(ould)g(b)s(e)g(in)m(termediate)i (in)d(sp)s(eed)h(b)s(et)m(w)m(een)h(running)d(a)i(compiled)630 1773 y(program)30 b(and)g(doing)g(what)h Fz(gawk)e FB(do)s(es)h(no)m (w.)275 1933 y(Finally)-8 b(,)32 b(the)e(programs)g(in)g(the)h(test)g (suite)g(could)f(use)g(do)s(cumen)m(ting)h(in)f(this)g(b)s(o)s(ok.)275 2067 y(See)i(Section)h(C.2)g([Making)g(Additions)f(to)h Fz(gawk)p FB(],)g(page)g(279,)h(if)e(y)m(ou)h(are)g(in)m(terested)g(in) f(tac)m(kling)150 2177 y(an)m(y)f(of)f(these)h(pro)5 b(jects.)p eop end %%Page: 295 307 TeXDict begin 295 306 bop 1793 -116 a Fr(App)s(endix)28 b(D:)j(Basic)f(Programming)h(Concepts)92 b FB(295)150 299 y Fu(App)t(endix)52 b(D)81 b(Basic)53 b(Programming)h(Concepts)150 539 y FB(This)44 b(app)s(endix)f(attempts)j(to)f(de\014ne)f(some)h(of)g (the)f(basic)h(concepts)h(and)e(terms)g(that)i(are)f(used)150 649 y(throughout)38 b(the)g(rest)h(of)f(this)g(b)s(o)s(ok.)64 b(As)38 b(this)g(b)s(o)s(ok)g(is)g(sp)s(eci\014cally)h(ab)s(out)f Fz(awk)p FB(,)h(and)f(not)g(ab)s(out)150 758 y(computer)44 b(programming)g(in)f(general,)49 b(the)44 b(co)m(v)m(erage)j(here)d(is) g(b)m(y)g(necessit)m(y)h(fairly)f(cursory)g(and)150 868 y(simplistic.)c(\(If)26 b(y)m(ou)g(need)f(more)h(bac)m(kground,)h (there)f(are)h(man)m(y)f(other)g(in)m(tro)s(ductory)f(texts)i(that)g(y) m(ou)150 977 y(should)i(refer)h(to)i(instead.\))150 1213 y FA(D.1)68 b(What)45 b(a)g(Program)h(Do)t(es)150 1372 y FB(A)m(t)36 b(the)g(most)g(basic)f(lev)m(el,)k(the)c(job)g(of)h(a)g (program)f(is)g(to)h(pro)s(cess)f(some)h(input)e(data)i(and)f(pro)s (duce)150 1482 y(results.)p 12 setlinewidth np 2310 1712 a 2565 1712 li st 0.000 setgray 12 setlinewidth np 2505 1697 a 2565 1712 li 2505 1727 li closepath fil 0 setgray np 2505 1697 a 2565 1712 li 2505 1727 li closepath st 12 setlinewidth np 1365 1712 a 1605 1712 li st 0.000 setgray 12 setlinewidth np 1545 1697 a 1605 1712 li 1545 1727 li closepath fil 0 setgray np 1545 1697 a 1605 1712 li 1545 1727 li closepath st 12 setlinewidth np 2625 1832 a 3045 1832 li 3045 1592 li 2625 1592 li closepath st 6 setlinewidth np 1935 1712 270 120 0.00 360.00 ellipse st 2690 1731 a(Results)-1218 b(Program)p 6 setlinewidth np 855 1832 a 1275 1832 li 1275 1592 li 855 1592 li closepath st -1140 w(Data)275 1938 y(The)30 b(\\program")h(in)f(the)g(\014gure)g (can)h(b)s(e)f(either)h(a)g(compiled)g(program)2775 1905 y Fo(1)2842 1938 y FB(\(suc)m(h)g(as)f Fz(ls)p FB(\),)h(or)f(it)h(ma)m (y)150 2048 y(b)s(e)36 b Fx(in)m(terpreted)p FB(.)58 b(In)36 b(the)g(latter)i(case,)h(a)d(mac)m(hine-executable)j(program)d (suc)m(h)g(as)h Fz(awk)e FB(reads)h(y)m(our)150 2157 y(program,)30 b(and)g(then)g(uses)g(the)h(instructions)f(in)g(y)m(our)g (program)g(to)i(pro)s(cess)d(the)i(data.)275 2294 y(When)f(y)m(ou)g (write)h(a)g(program,)f(it)h(usually)f(consists)h(of)g(the)f(follo)m (wing,)i(v)m(ery)f(basic)g(set)g(of)f(steps:)2062 2783 y(Y)-8 b(es)2373 2483 y(No)p 4 setlinewidth np 1710 3003 a 1410 3003 li 1410 3003 li 1410 2583 li st 0.000 setgray 4 setlinewidth np 1395 2643 a 1410 2583 li 1425 2643 li closepath fil 0 setgray np 1395 2643 a 1410 2583 li 1425 2643 li closepath st 4 setlinewidth np 2010 2703 a 2010 2943 li st 0.000 setgray 4 setlinewidth np 2025 2883 a 2010 2943 li 1995 2883 li closepath fil 0 setgray np 2025 2883 a 2010 2943 li 1995 2883 li closepath st 4 setlinewidth np 2370 2523 a 2850 2523 li st 0.000 setgray 4 setlinewidth np 2790 2508 a 2850 2523 li 2790 2538 li closepath fil 0 setgray np 2790 2508 a 2850 2523 li 2790 2538 li closepath st 4 setlinewidth np 1290 2523 a 1710 2523 li st 0.000 setgray 4 setlinewidth np 1650 2508 a 1710 2523 li 1650 2538 li closepath fil 0 setgray np 1650 2508 a 1710 2523 li 1650 2538 li closepath st 4 setlinewidth np 2010 3003 240 60 0.00 360.00 ellipse st 1861 3023 a(Pro)s(cess)p 4 setlinewidth np 1770 2643 a 2310 2643 li 2310 2403 li 1770 2403 li closepath st 1826 2543 a(More)31 b(Data?)p 4 setlinewidth np 840 2523 390 120 0.00 360.00 ellipse st -1734 w(Initialization)p 4 setlinewidth np 450 2523 0 0.00 360.00 arc st 4 setlinewidth np 3180 2523 270 60 0.00 360.00 ellipse st 1953 w(Clean)f(Up)150 3188 y(Initialization)630 3298 y(These)36 b(are)g(the)g(things)g(y)m (ou)g(do)g(b)s(efore)f(actually)i(starting)g(to)g(pro)s(cess)e(data,)j (suc)m(h)e(as)630 3408 y(c)m(hec)m(king)k(argumen)m(ts,)h(initializing) f(an)m(y)f(data)g(y)m(ou)f(need)g(to)h(w)m(ork)g(with,)h(and)d(so)i (on.)630 3517 y(This)d(step)h(corresp)s(onds)f(to)h Fz(awk)p FB('s)g Fz(BEGIN)e FB(rule)i(\(see)h(Section)g(6.1.4)g([The)f Fz(BEGIN)f FB(and)630 3627 y Fz(END)29 b FB(Sp)s(ecial)i(P)m(atterns],) h(page)f(96\).)630 3762 y(If)d(y)m(ou)h(w)m(ere)g(baking)g(a)g(cak)m (e,)i(this)d(migh)m(t)i(consist)f(of)g(la)m(ying)g(out)g(all)h(the)f (mixing)f(b)s(o)m(wls)630 3872 y(and)40 b(the)h(baking)f(pan,)j(and)d (making)g(sure)g(y)m(ou)h(ha)m(v)m(e)h(all)f(the)g(ingredien)m(ts)g (that)g(y)m(ou)630 3982 y(need.)150 4143 y(Pro)s(cessing)61 b(This)35 b(is)h(where)g(the)g(actual)h(w)m(ork)g(is)f(done.)57 b(Y)-8 b(our)36 b(program)g(reads)g(data,)i(one)e(logical)630 4253 y(c)m(h)m(unk)30 b(at)h(a)g(time,)g(and)f(pro)s(cesses)g(it)h(as)g (appropriate.)630 4388 y(In)41 b(most)g(programming)h(languages,)j(y)m (ou)d(ha)m(v)m(e)h(to)f(man)m(ually)g(manage)g(the)g(reading)630 4498 y(of)e(data,)j(c)m(hec)m(king)e(to)f(see)g(if)g(there)g(is)f(more) h(eac)m(h)h(time)f(y)m(ou)g(read)g(a)g(c)m(h)m(unk.)68 b Fz(awk)p FB('s)630 4607 y(pattern-action)38 b(paradigm)d(\(see)i (Chapter)e(1)h([Getting)i(Started)e(with)f Fz(awk)p FB(],)i(page)g (11\))630 4717 y(handles)30 b(the)g(mec)m(hanics)i(of)e(this)g(for)h(y) m(ou.)630 4852 y(In)24 b(baking)h(a)h(cak)m(e,)i(the)d(pro)s(cessing)g (corresp)s(onds)e(to)j(the)f(actual)i(lab)s(or:)37 b(breaking)26 b(eggs,)630 4962 y(mixing)33 b(the)f(\015our,)h(w)m(ater,)h(and)e (other)h(ingredien)m(ts,)g(and)f(then)h(putting)f(the)h(cak)m(e)h(in)m (to)630 5071 y(the)d(o)m(v)m(en.)p 150 5154 1200 4 v 199 5221 a Fo(1)275 5253 y Fn(Compiled)c(programs)g(are)g(t)n(ypically) g(written)f(in)h(lo)n(w)n(er-lev)n(el)g(languages)h(suc)n(h)e(as)h(C,)g (C)p Fm(++)p Fn(,)h(F)-6 b(ortran,)27 b(or)g(Ada,)f(and)275 5340 y(then)e(translated,)j(or)f Ff(compiled)p Fn(,)h(in)n(to)e(a)h (form)h(that)e(the)h(computer)f(can)h(execute)f(directly)-6 b(.)p eop end %%Page: 296 308 TeXDict begin 296 307 bop 150 -116 a FB(296)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(Clean)e(Up)104 b(Once)28 b(y)m(ou'v)m(e)h(pro)s(cessed)f(all)h (the)f(data,)i(y)m(ou)e(ma)m(y)h(ha)m(v)m(e)g(things)f(y)m(ou)h(need)e (to)i(do)f(b)s(efore)630 408 y(exiting.)45 b(This)31 b(step)g(corresp)s(onds)f(to)j Fz(awk)p FB('s)d Fz(END)h FB(rule)g(\(see)i(Section)f(6.1.4)h([The)e Fz(BEGIN)630 518 y FB(and)f Fz(END)f FB(Sp)s(ecial)i(P)m(atterns],)h(page)f(96\).) 630 653 y(After)h(the)g(cak)m(e)h(comes)f(out)g(of)g(the)f(o)m(v)m(en,) j(y)m(ou)e(still)g(ha)m(v)m(e)h(to)f(wrap)f(it)h(in)f(plastic)i(wrap) 630 763 y(to)e(k)m(eep)g(an)m(y)m(one)h(from)e(tasting)h(it,)g(as)g(w)m (ell)g(as)g(w)m(ash)f(the)h(mixing)f(b)s(o)m(wls)g(and)g(utensils.)275 925 y(An)f Fx(algorithm)h FB(is)f(a)h(detailed)h(set)f(of)f (instructions)h(necessary)f(to)i(accomplish)f(a)g(task,)g(or)f(pro)s (cess)150 1034 y(data.)47 b(It)33 b(is)f(m)m(uc)m(h)g(the)h(same)g(as)f (a)h(recip)s(e)f(for)g(baking)h(a)f(cak)m(e.)49 b(Programs)32 b(implemen)m(t)h(algorithms.)150 1144 y(Often,)d(it)h(is)g(up)e(to)i(y) m(ou)g(to)g(design)f(the)h(algorithm)g(and)f(implemen)m(t)h(it,)g(sim)m (ultaneously)-8 b(.)275 1280 y(The)23 b(\\logical)j(c)m(h)m(unks")e(w)m (e)g(talk)m(ed)h(ab)s(out)e(previously)g(are)h(called)h Fx(records)p FB(,)g(similar)f(to)g(the)g(records)150 1390 y(a)31 b(compan)m(y)g(k)m(eeps)g(on)g(emplo)m(y)m(ees,)i(a)e(sc)m (ho)s(ol)g(k)m(eeps)g(for)g(studen)m(ts,)f(or)h(a)g(do)s(ctor)g(k)m (eeps)g(for)g(patien)m(ts.)150 1499 y(Eac)m(h)26 b(record)f(has)h(man)m (y)f(comp)s(onen)m(t)h(parts,)g(suc)m(h)f(as)h(\014rst)e(and)h(last)i (names,)f(date)g(of)g(birth,)g(address,)150 1609 y(and)k(so)g(on.)41 b(The)30 b(comp)s(onen)m(t)h(parts)f(are)g(referred)g(to)h(as)g(the)f Fx(\014elds)k FB(of)c(the)h(record.)275 1745 y(The)d(act)i(of)f (reading)g(data)h(is)f(termed)g Fx(input)p FB(,)f(and)h(that)g(of)g (generating)h(results,)g(not)f(to)s(o)h(surpris-)150 1854 y(ingly)-8 b(,)37 b(is)d(termed)h Fx(output)p FB(.)53 b(They)34 b(are)h(often)f(referred)g(to)i(together)g(as)e (\\input/output,")i(and)e(ev)m(en)150 1964 y(more)d(often,)g(as)f (\\I/O")h(for)g(short.)40 b(\(Y)-8 b(ou)31 b(will)g(also)g(see)g (\\input")g(and)e(\\output")i(used)f(as)g(v)m(erbs.\))275 2100 y Fz(awk)f FB(manages)j(the)e(reading)h(of)g(data)g(for)f(y)m(ou,) i(as)e(w)m(ell)i(as)f(the)f(breaking)h(it)g(up)f(in)m(to)h(records)g (and)150 2210 y(\014elds.)45 b(Y)-8 b(our)33 b(program's)f(job)f(is)i (to)f(tell)i Fz(awk)d FB(what)h(to)h(with)f(the)g(data.)47 b(Y)-8 b(ou)32 b(do)g(this)g(b)m(y)g(describing)150 2319 y Fx(patterns)g FB(in)c(the)h(data)g(to)h(lo)s(ok)f(for,)g(and)f Fx(actions)33 b FB(to)d(execute)f(when)f(those)h(patterns)g(are)g (seen.)40 b(This)150 2429 y Fx(data-driv)m(en)32 b FB(nature)f(of)g Fz(awk)f FB(programs)h(usually)g(mak)m(es)h(them)f(b)s(oth)f(easier)i (to)g(write)g(and)e(easier)i(to)150 2538 y(read.)150 2773 y FA(D.2)68 b(Data)46 b(V)-11 b(alues)45 b(in)g(a)g(Computer)150 2933 y FB(In)23 b(a)h(program,)h(y)m(ou)g(k)m(eep)f(trac)m(k)h(of)f (information)g(and)g(v)-5 b(alues)24 b(in)f(things)h(called)h Fx(v)-5 b(ariables)p FB(.)39 b(A)24 b(v)-5 b(ariable)150 3042 y(is)29 b(just)g(a)g(name)g(for)g(a)g(giv)m(en)h(v)-5 b(alue,)30 b(suc)m(h)f(as)h Fz(first_name)p FB(,)c Fz(last_name)p FB(,)h Fz(address)p FB(,)h(and)g(so)i(on.)40 b Fz(awk)150 3152 y FB(has)23 b(sev)m(eral)i(prede\014ned)d(v)-5 b(ariables,)26 b(and)c(it)i(has)g(sp)s(ecial)g(names)f(to)h(refer)f(to)i(the)e(curren) m(t)h(input)e(record)150 3261 y(and)i(the)g(\014elds)g(of)h(the)f (record.)39 b(Y)-8 b(ou)25 b(ma)m(y)g(also)g(group)f(m)m(ultiple)h (asso)s(ciated)h(v)-5 b(alues)25 b(under)e(one)i(name,)150 3371 y(as)31 b(an)f(arra)m(y)-8 b(.)275 3507 y(Data,)43 b(particularly)d(in)f Fz(awk)p FB(,)i(consists)f(of)g(either)g(n)m (umeric)f(v)-5 b(alues,)42 b(suc)m(h)d(as)h(42)g(or)g(3.1415927,)150 3617 y(or)j(string)f(v)-5 b(alues.)79 b(String)42 b(v)-5 b(alues)43 b(are)g(essen)m(tially)i(an)m(ything)e(that's)g(not)g(a)g(n) m(um)m(b)s(er,)i(suc)m(h)e(as)g(a)150 3726 y(name.)k(Strings)31 b(are)i(sometimes)g(referred)f(to)h(as)f Fx(c)m(haracter)i(data)p FB(,)g(since)f(they)f(store)h(the)g(individual)150 3836 y(c)m(haracters)25 b(that)f(comprise)g(them.)39 b(Individual)22 b(v)-5 b(ariables,)26 b(as)e(w)m(ell)h(as)f(n)m(umeric)f(and)g(string)h (v)-5 b(ariables,)150 3945 y(are)31 b(referred)e(to)i(as)g Fx(scalar)38 b FB(v)-5 b(alues.)41 b(Groups)30 b(of)g(v)-5 b(alues,)31 b(suc)m(h)f(as)h(arra)m(ys,)g(are)g(not)f(scalars.)275 4082 y(Within)36 b(computers,)h(there)g(are)f(t)m(w)m(o)h(kinds)e(of)i (n)m(umeric)f(v)-5 b(alues:)52 b Fx(in)m(tegers)41 b FB(and)35 b Fx(\015oating-p)s(oin)m(t)p FB(.)150 4191 y(In)h(sc)m(ho)s(ol,)k(in)m(teger)e(v)-5 b(alues)38 b(w)m(ere)f (referred)f(to)i(as)f(\\whole")h(n)m(um)m(b)s(ers|that)e(is,)j(n)m(um)m (b)s(ers)d(without)150 4301 y(an)m(y)d(fractional)h(part,)f(suc)m(h)f (as)g(1,)i(42,)g(or)f Fy(\000)p FB(17.)47 b(The)32 b(adv)-5 b(an)m(tage)34 b(to)f(in)m(teger)h(n)m(um)m(b)s(ers)d(is)i(that)g(they) 150 4410 y(represen)m(t)e(v)-5 b(alues)31 b(exactly)-8 b(.)43 b(The)31 b(disadv)-5 b(an)m(tage)32 b(is)e(that)i(their)e(range) h(is)g(limited.)42 b(On)30 b(most)h(mo)s(dern)150 4520 y(systems,)g(this)f(range)h(is)f Fy(\000)p FB(2,147,483,648)35 b(to)c(2,147,483,647.)275 4656 y(In)m(teger)e(v)-5 b(alues)29 b(come)h(in)e(t)m(w)m(o)i(\015a)m(v)m(ors:)40 b Fx(signed)32 b FB(and)c Fx(unsigned)p FB(.)39 b(Signed)29 b(v)-5 b(alues)29 b(ma)m(y)g(b)s(e)f(negativ)m(e)150 4766 y(or)36 b(p)s(ositiv)m(e,)i (with)e(the)g(range)g(of)g(v)-5 b(alues)36 b(just)f(describ)s(ed.)56 b(Unsigned)35 b(v)-5 b(alues)36 b(are)g(alw)m(a)m(ys)i(p)s(ositiv)m(e.) 150 4875 y(On)30 b(most)g(mo)s(dern)f(systems,)i(the)f(range)h(is)g (from)f(0)g(to)h(4,294,967,295.)275 5011 y(Floating-p)s(oin)m(t)24 b(n)m(um)m(b)s(ers)d(represen)m(t)h(what)h(are)f(called)i(\\real")g(n)m (um)m(b)s(ers;)g(i.e.,)h(those)e(that)g(do)f(ha)m(v)m(e)150 5121 y(a)31 b(fractional)h(part,)e(suc)m(h)g(as)h(3.1415927.)45 b(The)30 b(adv)-5 b(an)m(tage)32 b(to)f(\015oating-p)s(oin)m(t)h(n)m (um)m(b)s(ers)d(is)i(that)g(they)150 5230 y(can)k(represen)m(t)g(a)g(m) m(uc)m(h)g(larger)g(range)g(of)g(v)-5 b(alues.)55 b(The)34 b(disadv)-5 b(an)m(tage)36 b(is)f(that)g(there)g(are)g(n)m(um)m(b)s (ers)150 5340 y(that)24 b(they)h(cannot)f(represen)m(t)g(exactly)-8 b(.)41 b Fz(awk)23 b FB(uses)g Fx(double-precision)h FB(\015oating-p)s(oin)m(t)h(n)m(um)m(b)s(ers,)f(whic)m(h)p eop end %%Page: 297 309 TeXDict begin 297 308 bop 1793 -116 a Fr(App)s(endix)28 b(D:)j(Basic)f(Programming)h(Concepts)92 b FB(297)150 299 y(can)27 b(hold)g(more)g(digits)g(than)g Fx(single-precision)h FB(\015oating-p)s(oin)m(t)g(n)m(um)m(b)s(ers.)39 b(Floating-p)s(oin)m (t)29 b(issues)e(are)150 408 y(discussed)i(more)i(fully)f(in)g(Section) h(D.3)h([Floating-P)m(oin)m(t)i(Num)m(b)s(er)29 b(Ca)m(v)m(eats],)k (page)e(297.)275 546 y(A)m(t)44 b(the)h(v)m(ery)f(lo)m(w)m(est)i(lev)m (el,)j(computers)44 b(store)g(v)-5 b(alues)45 b(as)f(groups)f(of)h (binary)g(digits,)k(or)c Fx(bits)p FB(.)150 655 y(Mo)s(dern)39 b(computers)h(group)g(bits)g(in)m(to)h(groups)e(of)i(eigh)m(t,)j (called)d Fx(b)m(ytes)p FB(.)71 b(Adv)-5 b(anced)40 b(applications)150 765 y(sometimes)31 b(ha)m(v)m(e)h(to)f(manipulate)g(bits)f(directly)-8 b(,)32 b(and)e Fz(gawk)f FB(pro)m(vides)h(functions)g(for)g(doing)h (so.)275 902 y(While)26 b(y)m(ou)g(are)h(probably)e(used)g(to)h(the)h (idea)f(of)g(a)g(n)m(um)m(b)s(er)f(without)h(a)g(v)-5 b(alue)26 b(\(i.e.,)j(zero\),)f(it)e(tak)m(es)150 1012 y(a)g(bit)f(more)h(getting)h(used)e(to)h(the)f(idea)h(of)g(zero-length) h(c)m(haracter)g(data.)40 b(Nev)m(ertheless,)28 b(suc)m(h)d(a)h(thing) 150 1121 y(exists.)52 b(It)33 b(is)h(called)h(the)f Fx(n)m(ull)g (string)p FB(.)51 b(The)33 b(n)m(ull)h(string)f(is)h(c)m(haracter)h (data)g(that)f(has)g(no)f(v)-5 b(alue.)52 b(In)150 1231 y(other)31 b(w)m(ords,)f(it)h(is)f(empt)m(y)-8 b(.)42 b(It)30 b(is)h(written)f(in)g Fz(awk)f FB(programs)h(lik)m(e)i(this:)41 b Fz("")p FB(.)275 1368 y(Humans)28 b(are)i(used)f(to)h(w)m(orking)g (in)f(decimal;)i(i.e.,)g(base)f(10.)41 b(In)29 b(base)h(10,)h(n)m(um)m (b)s(ers)d(go)i(from)f(0)h(to)150 1477 y(9,)36 b(and)e(then)g(\\roll)h (o)m(v)m(er")h(in)m(to)g(the)e(next)h(column.)52 b(\(Remem)m(b)s(er)35 b(grade)f(sc)m(ho)s(ol?)54 b(42)35 b(is)f(4)h(times)g(10)150 1587 y(plus)29 b(2.\))275 1724 y(There)22 b(are)h(other)h(n)m(um)m(b)s (er)d(bases)i(though.)38 b(Computers)22 b(commonly)i(use)e(base)h(2)h (or)f Fx(binary)p FB(,)g(base)h(8)150 1834 y(or)h Fx(o)s(ctal)p FB(,)j(and)d(base)h(16)g(or)f Fx(hexadecimal)p FB(.)40 b(In)25 b(binary)-8 b(,)26 b(eac)m(h)h(column)e(represen)m(ts)g(t)m(w)m (o)i(times)f(the)f(v)-5 b(alue)150 1943 y(in)32 b(the)g(column)f(to)i (its)f(righ)m(t.)46 b(Eac)m(h)33 b(column)e(ma)m(y)i(con)m(tain)g (either)f(a)h(0)f(or)g(a)g(1.)46 b(Th)m(us,)31 b(binary)g(1010)150 2053 y(represen)m(ts)k(1)g(times)g(8,)i(plus)d(0)h(times)g(4,)i(plus)d (1)h(times)g(2,)i(plus)c(0)j(times)f(1,)h(or)f(decimal)h(10.)55 b(Octal)150 2163 y(and)39 b(hexadecimal)h(are)g(discussed)e(more)h(in)g (Section)h(5.1.2)h([Octal)g(and)d(Hexadecimal)k(Num)m(b)s(ers],)150 2272 y(page)31 b(73.)275 2409 y(Programs)k(are)i(written)e(in)h (programming)f(languages.)59 b(Hundreds,)35 b(if)h(not)g(thousands,)g (of)g(pro-)150 2519 y(gramming)c(languages)g(exist.)45 b(One)31 b(of)h(the)g(most)f(p)s(opular)g(is)g(the)h(C)f(programming)g (language.)45 b(The)150 2628 y(C)30 b(language)i(had)e(a)g(v)m(ery)h (strong)g(in\015uence)e(on)i(the)f(design)g(of)h(the)g Fz(awk)e FB(language.)275 2766 y(There)i(ha)m(v)m(e)j(b)s(een)d(sev)m (eral)j(v)m(ersions)e(of)h(C.)f(The)g(\014rst)f(is)h(often)h(referred)e (to)i(as)g(\\K&R")f(C,)g(after)150 2875 y(the)41 b(initials)g(of)g (Brian)f(Kernighan)g(and)g(Dennis)g(Ritc)m(hie,)45 b(the)c(authors)f (of)h(the)f(\014rst)g(b)s(o)s(ok)g(on)g(C.)150 2985 y(\(Dennis)27 b(Ritc)m(hie)h(created)f(the)g(language,)h(and)e(Brian)h(Kernighan)f(w) m(as)g(one)h(of)g(the)f(creators)i(of)e Fz(awk)p FB(.\))275 3122 y(In)g(the)i(mid-1980s,)h(an)e(e\013ort)h(b)s(egan)f(to)h(pro)s (duce)f(an)g(in)m(ternational)i(standard)d(for)h(C.)g(This)g(w)m(ork) 150 3232 y(culminated)f(in)e(1989,)29 b(with)24 b(the)i(pro)s(duction)e (of)h(the)h(ANSI)f(standard)f(for)h(C.)g(This)f(standard)h(b)s(ecame) 150 3341 y(an)32 b(ISO)f(standard)g(in)g(1990.)47 b(Where)32 b(it)h(mak)m(es)f(sense,)h(POSIX)e Fz(awk)g FB(is)h(compatible)h(with)e (1990)j(ISO)150 3451 y(C.)275 3588 y(In)d(1999,)j(a)f(revised)e(ISO)g (C)h(standard)f(w)m(as)i(appro)m(v)m(ed)f(and)f(released.)47 b(F)-8 b(uture)32 b(v)m(ersions)g(of)g Fz(gawk)150 3697 y FB(will)f(b)s(e)e(as)i(compatible)h(as)e(p)s(ossible)g(with)g(this)h (standard.)150 3934 y FA(D.3)68 b(Floating-P)l(oin)l(t)47 b(Num)l(b)t(er)e(Ca)l(v)l(eats)150 4093 y FB(As)e(men)m(tioned)g (earlier,)48 b(\015oating-p)s(oin)m(t)c(n)m(um)m(b)s(ers)d(represen)m (t)i(what)g(are)g(called)i(\\real")f(n)m(um)m(b)s(ers,)150 4203 y(i.e.,)33 b(those)f(that)g(ha)m(v)m(e)h(a)f(fractional)h(part.)44 b Fz(awk)31 b FB(uses)g(double-precision)g(\015oating-p)s(oin)m(t)i(n)m (um)m(b)s(ers)d(to)150 4312 y(represen)m(t)38 b(all)i(n)m(umeric)e(v)-5 b(alues.)64 b(This)38 b(section)h(describ)s(es)f(some)h(of)f(the)h (issues)e(in)m(v)m(olv)m(ed)j(in)e(using)150 4422 y(\015oating-p)s(oin) m(t)32 b(n)m(um)m(b)s(ers.)275 4559 y(There)f(is)g(a)h(v)m(ery)g(nice)g (pap)s(er)f(on)g(\015oating-p)s(oin)m(t)i(arithmetic)g(b)m(y)e(Da)m (vid)i(Goldb)s(erg,)f(\\What)h(Ev-)150 4669 y(ery)28 b(Computer)g(Scien)m(tist)h(Should)e(Kno)m(w)h(Ab)s(out)g(Floating-p)s (oin)m(t)i(Arithmetic,")h Fx(A)m(CM)e(Computing)150 4778 y(Surv)m(eys)38 b Fr(23)p FB(,)g(1)d(\(1991-03\),)41 b(5-48.)1354 4745 y Fo(2)1448 4778 y FB(This)35 b(is)g(w)m(orth)g (reading)g(if)h(y)m(ou)f(are)h(in)m(terested)g(in)f(the)h(details,)150 4888 y(but)30 b(it)h(do)s(es)f(require)g(a)g(bac)m(kground)h(in)f (computer)g(science.)275 5025 y(In)m(ternally)-8 b(,)38 b Fz(awk)e FB(k)m(eeps)h(b)s(oth)e(the)i(n)m(umeric)f(v)-5 b(alue)36 b(\(double-precision)h(\015oating-p)s(oin)m(t\))h(and)e(the) 150 5135 y(string)d(v)-5 b(alue)34 b(for)g(a)g(v)-5 b(ariable.)51 b(Separately)-8 b(,)35 b Fz(awk)e FB(k)m(eeps)h(trac)m(k)h(of)f(what)f (t)m(yp)s(e)h(the)f(v)-5 b(ariable)35 b(has)e(\(see)p 150 5241 1200 4 v 199 5308 a Fo(2)275 5340 y Fm (http://www.validlab.com/goldber)q(g/pap)q(er.p)q(s)p Fn(.)p eop end %%Page: 298 310 TeXDict begin 298 309 bop 150 -116 a FB(298)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(Section)36 b(5.10)g([V)-8 b(ariable)36 b(T)m(yping)f(and)f (Comparison)g(Expressions],)i(page)f(85\),)i(whic)m(h)e(pla)m(ys)g(a)g (role)150 408 y(in)30 b(ho)m(w)g(v)-5 b(ariables)31 b(are)g(used)f(in)g (comparisons.)275 546 y(It)21 b(is)g(imp)s(ortan)m(t)h(to)g(note)g (that)g(the)f(string)g(v)-5 b(alue)22 b(for)f(a)h(n)m(um)m(b)s(er)e(ma) m(y)i(not)f(re\015ect)h(the)g(full)f(v)-5 b(alue)22 b(\(all)150 656 y(the)k(digits\))h(that)g(the)f(n)m(umeric)g(v)-5 b(alue)26 b(actually)h(con)m(tains.)41 b(The)25 b(follo)m(wing)j (program)e(\(`)p Fz(values.awk)p FB('\))150 766 y(illustrates)31 b(this:)390 903 y Fz({)533 1013 y($1)47 b(=)h($2)f(+)g($3)533 1123 y(#)h(see)f(it)g(for)g(what)f(it)h(is)533 1232 y(printf\("$1)e(=)j (\045.12g\\n",)d($1\))533 1342 y(#)j(use)f(CONVFMT)533 1451 y(a)h(=)f("<")g($1)g(">")533 1561 y(print)g("a)g(=",)g(a)533 1670 y(#)h(use)f(OFMT)533 1780 y(print)g("$1)f(=",)h($1)390 1890 y(})150 2028 y FB(This)32 b(program)g(sho)m(ws)g(the)h(full)g(v)-5 b(alue)33 b(of)f(the)h(sum)f(of)h Fz($2)e FB(and)h Fz($3)g FB(using)h Fz(printf)p FB(,)e(and)h(then)g(prin)m(ts)150 2137 y(the)26 b(string)g(v)-5 b(alues)26 b(obtained)h(from)e(b)s(oth)h (automatic)i(con)m(v)m(ersion)f(\(via)g Fz(CONVFMT)p FB(\))d(and)i(from)f(prin)m(ting)150 2247 y(\(via)31 b Fz(OFMT)p FB(\).)275 2385 y(Here)f(is)h(what)f(happ)s(ens)f(when)g (the)i(program)f(is)g(run:)390 2522 y Fz($)47 b(echo)g(2)h(3.654321)d (1.2345678)g(|)j(awk)f(-f)g(values.awk)410 2636 y Fy(a)533 2632 y Fz($1)g(=)h(4.8888888)410 2746 y Fy(a)533 2742 y Fz(a)g(=)f(<4.88889>)410 2855 y Fy(a)533 2851 y Fz($1)g(=)h(4.88889) 275 2989 y FB(This)30 b(mak)m(es)i(it)f(clear)h(that)g(the)f(full)g(n)m (umeric)g(v)-5 b(alue)31 b(is)g(di\013eren)m(t)h(from)f(what)g(the)g (default)g(string)150 3099 y(represen)m(tations)g(sho)m(w.)275 3236 y Fz(CONVFMT)p FB('s)21 b(default)j(v)-5 b(alue)24 b(is)f Fz("\045.6g")p FB(,)h(whic)m(h)f(yields)g(a)h(v)-5 b(alue)24 b(with)f(at)h(least)h(six)f(signi\014can)m(t)g(digits.)150 3346 y(F)-8 b(or)39 b(some)f(applications,)j(y)m(ou)e(migh)m(t)f(w)m (an)m(t)h(to)g(c)m(hange)g(it)f(to)h(sp)s(ecify)f(more)g(precision.)63 b(On)38 b(most)150 3456 y(mo)s(dern)23 b(mac)m(hines,)k(most)d(of)h (the)g(time,)h(17)g(digits)f(is)f(enough)h(to)g(capture)f(a)h (\015oating-p)s(oin)m(t)h(n)m(um)m(b)s(er's)150 3565 y(v)-5 b(alue)31 b(exactly)-8 b(.)683 3532 y Fo(3)275 3703 y FB(Unlik)m(e)27 b(n)m(um)m(b)s(ers)f(in)g(the)i(abstract)f (sense)g(\(suc)m(h)g(as)g(what)g(y)m(ou)g(studied)g(in)f(high)h(sc)m (ho)s(ol)g(or)g(college)150 3813 y(math\),)39 b(n)m(um)m(b)s(ers)d (stored)h(in)g(computers)g(are)g(limited)h(in)f(certain)h(w)m(a)m(ys.) 62 b(They)36 b(cannot)i(represen)m(t)150 3922 y(an)f(in\014nite)f(n)m (um)m(b)s(er)g(of)h(digits,)i(nor)e(can)g(they)g(alw)m(a)m(ys)h (represen)m(t)f(things)g(exactly)-8 b(.)62 b(In)36 b(particular,)150 4032 y(\015oating-p)s(oin)m(t)c(n)m(um)m(b)s(ers)d(cannot)i(alw)m(a)m (ys)g(represen)m(t)g(v)-5 b(alues)31 b(exactly)-8 b(.)43 b(Here)30 b(is)h(an)f(example:)390 4170 y Fz($)47 b(awk)g('{)h (printf\("\045010d\\n",)43 b($1)k(*)g(100\))g(}')390 4279 y(515.79)410 4393 y Fy(a)533 4389 y Fz(0000051579)390 4498 y(515.80)410 4612 y Fy(a)533 4608 y Fz(0000051579)390 4718 y(515.81)410 4831 y Fy(a)533 4827 y Fz(0000051580)390 4937 y(515.82)410 5050 y Fy(a)533 5046 y Fz(0000051582)390 5156 y Fk(Ctrl-d)p 150 5241 1200 4 v 199 5308 a Fo(3)275 5340 y Fn(P)n(athological)28 b(cases)f(can)f(require)f(up)g(to)h(752)h (digits)f(\(!\),)g(but)f(w)n(e)h(doubt)f(that)g(y)n(ou)g(need)h(to)f(w) n(orry)h(ab)r(out)g(this.)p eop end %%Page: 299 311 TeXDict begin 299 310 bop 1793 -116 a Fr(App)s(endix)28 b(D:)j(Basic)f(Programming)h(Concepts)92 b FB(299)150 299 y(This)34 b(sho)m(ws)h(that)g(some)g(v)-5 b(alues)35 b(can)h(b)s(e)e(represen)m(ted)h(exactly)-8 b(,)38 b(whereas)d(others)g (are)g(only)g(appro)m(x-)150 408 y(imated.)68 b(This)38 b(is)i(not)f(a)h(\\bug")f(in)g Fz(awk)p FB(,)i(but)e(simply)f(an)h (artifact)i(of)f(ho)m(w)f(computers)g(represen)m(t)150 518 y(n)m(um)m(b)s(ers.)275 653 y(Another)24 b(p)s(eculiarit)m(y)i(of)f (\015oating-p)s(oin)m(t)h(n)m(um)m(b)s(ers)e(on)h(mo)s(dern)e(systems)i (is)g(that)g(they)g(often)h(ha)m(v)m(e)150 762 y(more)k(than)f(one)h (represen)m(tation)g(for)g(the)f(n)m(um)m(b)s(er)g(zero!)41 b(In)29 b(particular,)h(it)g(is)g(p)s(ossible)f(to)h(represen)m(t)150 872 y(\\min)m(us)g(zero")i(as)e(w)m(ell)i(as)e(regular,)h(or)g(\\p)s (ositiv)m(e")h(zero.)275 1006 y(This)42 b(example)j(sho)m(ws)e(that)h (negativ)m(e)i(and)d(p)s(ositiv)m(e)h(zero)h(are)e(distinct)h(v)-5 b(alues)44 b(when)f(stored)150 1116 y(in)m(ternally)-8 b(,)32 b(but)e(that)h(they)f(are)h(in)f(fact)h(equal)g(to)g(eac)m(h)h (other,)f(as)f(w)m(ell)i(as)e(to)h(\\regular")h(zero:)390 1228 y Fm($)39 b(gawk)i('BEGIN)f({)g(mz)f(=)h(-0)f(;)h(pz)g(=)f(0)390 1315 y(>)g(printf)i("-0)f(=)f(\045g,)h(+0)g(=)f(\045g,)h(\(-0)g(==)g (+0\))g(->)g(\045d\\n",)g(mz,)g(pz,)g(mz)g(==)f(pz)390 1402 y(>)g(printf)i("mz)f(==)g(0)f(->)h(\045d,)g(pz)f(==)h(0)g(->)f (\045d\\n",)i(mz)e(==)h(0,)g(pz)g(==)f(0)390 1489 y(>)g(}')406 1580 y Fe(a)508 1577 y Fm(-0)g(=)h(-0,)g(+0)f(=)h(0,)g(\(-0)f(==)h (+0\))g(->)g(1)406 1667 y Fe(a)508 1664 y Fm(mz)f(==)h(0)f(->)h(1,)g (pz)g(==)f(0)h(->)f(1)275 1798 y FB(It)e(helps)g(to)h(k)m(eep)g(this)f (in)g(mind)g(should)f(y)m(ou)i(pro)s(cess)f(n)m(umeric)g(data)h(that)g (con)m(tains)h(negativ)m(e)150 1908 y(zero)31 b(v)-5 b(alues;)31 b(the)g(fact)g(that)g(the)g(zero)g(is)f(negativ)m(e)j(is)d (noted)h(and)e(can)i(a\013ect)h(comparisons.)p eop end %%Page: 300 312 TeXDict begin 300 311 bop 150 -116 a FB(300)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fu(Glossary)150 522 y FB(Action)216 b(A)39 b(series)h(of)f Fz(awk)f FB(statemen)m(ts)j(attac)m(hed)g(to)f(a)g(rule.)66 b(If)39 b(the)h(rule's)f(pattern)g(matc)m(hes)630 631 y(an)30 b(input)f(record,)h Fz(awk)f FB(executes)j(the)e(rule's)g (action.)42 b(Actions)31 b(are)f(alw)m(a)m(ys)i(enclosed)e(in)630 741 y(curly)g(braces.)41 b(\(See)31 b(Section)g(6.3)h([Actions],)g (page)f(98.\))150 896 y(Amazing)g Fz(awk)f FB(Assem)m(bler)630 1006 y(Henry)44 b(Sp)s(encer)e(at)j(the)f(Univ)m(ersit)m(y)i(of)e(T)-8 b(oron)m(to)45 b(wrote)g(a)f(retargetable)i(assem)m(bler)630 1115 y(completely)f(as)f Fz(sed)e FB(and)h Fz(awk)g FB(scripts.)79 b(It)44 b(is)f(thousands)g(of)g(lines)h(long,)j(including)630 1225 y(mac)m(hine)25 b(descriptions)f(for)h(sev)m(eral)g(eigh)m(t-bit)i (micro)s(computers.)38 b(It)25 b(is)f(a)h(go)s(o)s(d)f(example)630 1334 y(of)37 b(a)g(program)g(that)g(w)m(ould)g(ha)m(v)m(e)h(b)s(een)e (b)s(etter)h(written)g(in)g(another)g(language.)61 b(Y)-8 b(ou)630 1444 y(can)31 b(get)g(it)g(from)f Fz(ftp://ftp.freefriends.or) o(g/ar)o(nold)o(/Aw)o(kstu)o(ff/a)o(aa.)o(tgz)p FB(.)150 1599 y(Amazingly)i(W)-8 b(ork)j(able)31 b(F)-8 b(ormatter)32 b(\()p Fz(awf)p FB(\))630 1708 y(Henry)75 b(Sp)s(encer)f(at)j(the)e (Univ)m(ersit)m(y)i(of)f(T)-8 b(oron)m(to)76 b(wrote)g(a)g(formatter)g (that)630 1818 y(accepts)69 b(a)e(large)i(subset)d(of)i(the)f(`)p Fz(nroff)29 b(-ms)p FB(')67 b(and)g(`)p Fz(nroff)29 b(-man)p FB(')66 b(formatting)630 1928 y(commands,)72 b(using)64 b Fz(awk)f FB(and)h Fz(sh)p FB(.)141 b(It)64 b(is)h(a)m(v)-5 b(ailable)66 b(o)m(v)m(er)g(the)e(In)m(ternet)g(from)630 2037 y Fz(ftp://ftp.freefriends.or)o(g/ar)o(nold)o(/Aw)o(kstu)o(ff/a)o (wf.)o(tgz)p FB(.)150 2192 y(Anc)m(hor)192 b(The)29 b(regexp)g(metac)m (haracters)j(`)p Fz(^)p FB(')e(and)e(`)p Fz($)p FB(',)i(whic)m(h)f (force)h(the)g(matc)m(h)g(to)g(the)g(b)s(eginning)630 2302 y(or)g(end)g(of)h(the)f(string,)h(resp)s(ectiv)m(ely)-8 b(.)150 2457 y(ANSI)260 b(The)28 b(American)h(National)h(Standards)d (Institute.)41 b(This)27 b(organization)k(pro)s(duces)c(man)m(y)630 2566 y(standards,)42 b(among)f(them)f(the)g(standards)f(for)h(the)g(C)g (and)f(C)p Fz(++)h FB(programming)f(lan-)630 2676 y(guages.)h(These)26 b(standards)e(often)i(b)s(ecome)g(in)m(ternational)i(standards)c(as)i (w)m(ell.)40 b(See)26 b(also)630 2785 y(\\ISO.")150 2940 y(Arra)m(y)250 b(A)31 b(grouping)f(of)h(m)m(ultiple)h(v)-5 b(alues)31 b(under)e(the)i(same)g(name.)42 b(Most)32 b(languages)g(just)e(pro-)630 3050 y(vide)g(sequen)m(tial)i(arra)m(ys.) 41 b Fz(awk)30 b FB(pro)m(vides)g(asso)s(ciativ)m(e)j(arra)m(ys.)150 3205 y(Assertion)108 b(A)27 b(statemen)m(t)i(in)e(a)g(program)g(that)h (a)f(condition)h(is)f(true)g(at)h(this)f(p)s(oin)m(t)g(in)g(the)g (program.)630 3314 y(Useful)j(for)g(reasoning)h(ab)s(out)f(ho)m(w)h(a)f (program)h(is)f(supp)s(osed)e(to)k(b)s(eha)m(v)m(e.)150 3469 y(Assignmen)m(t)630 3579 y(An)e Fz(awk)f FB(expression)i(that)g(c) m(hanges)g(the)g(v)-5 b(alue)30 b(of)h(some)g Fz(awk)e FB(v)-5 b(ariable)31 b(or)g(data)g(ob)5 b(ject.)630 3689 y(An)34 b(ob)5 b(ject)36 b(that)g(y)m(ou)f(can)g(assign)g(to)h(is)e (called)i(an)f Fx(lv)-5 b(alue)p FB(.)55 b(The)34 b(assigned)h(v)-5 b(alues)36 b(are)630 3798 y(called)c Fx(rv)-5 b(alues)p FB(.)40 b(See)31 b(Section)g(5.7)h([Assignmen)m(t)f(Expressions],)f (page)h(81.)150 3953 y(Asso)s(ciativ)m(e)i(Arra)m(y)630 4063 y(Arra)m(ys)43 b(in)f(whic)m(h)g(the)h(indices)f(ma)m(y)h(b)s(e)f (n)m(um)m(b)s(ers)f(or)h(strings,)k(not)d(just)f(sequen)m(tial)630 4172 y(in)m(tegers)32 b(in)e(a)g(\014xed)g(range.)150 4327 y Fz(awk)f FB(Language)630 4437 y(The)h(language)i(in)e(whic)m(h)g Fz(awk)f FB(programs)h(are)h(written.)150 4592 y Fz(awk)e FB(Program)630 4701 y(An)f Fz(awk)f FB(program)h(consists)h(of)f(a)g (series)h(of)f Fx(patterns)k FB(and)27 b Fx(actions)p FB(,)j(collectiv)m(ely)i(kno)m(wn)630 4811 y(as)i Fx(rules)p FB(.)50 b(F)-8 b(or)35 b(eac)m(h)g(input)d(record)i(giv)m(en)h(to)f (the)g(program,)h(the)f(program's)f(rules)h(are)630 4921 y(all)d(pro)s(cessed)f(in)g(turn.)40 b Fz(awk)29 b FB(programs)h(ma)m (y)h(also)h(con)m(tain)f(function)f(de\014nitions.)150 5075 y Fz(awk)f FB(Script)69 b(Another)30 b(name)h(for)f(an)g Fz(awk)g FB(program.)150 5230 y(Bash)284 b(The)40 b(GNU)i(v)m(ersion)f (of)g(the)g(standard)f(shell)i(\(the)f Fr(B)p FB(ourne-)p Fr(A)p FB(gain)g Fr(SH)p FB(ell\).)73 b(See)41 b(also)630 5340 y(\\Bourne)31 b(Shell.")p eop end %%Page: 301 313 TeXDict begin 301 312 bop 3178 -116 a Fr(Glossary)92 b FB(301)150 299 y(BBS)301 b(See)31 b(\\Bulletin)g(Board)g(System.")150 474 y(Bit)356 b(Short)38 b(for)h(\\Binary)g(Digit.")68 b(All)39 b(v)-5 b(alues)39 b(in)g(computer)f(memory)h(ultimately)h (reduce)630 584 y(to)h(binary)e(digits:)61 b(v)-5 b(alues)41 b(that)f(are)h(either)g(zero)g(or)f(one.)70 b(Groups)39 b(of)i(bits)f(ma)m(y)h(b)s(e)630 693 y(in)m(terpreted)26 b(di\013eren)m(tly|as)h(in)m(tegers,)i(\015oating-p)s(oin)m(t)e(n)m(um) m(b)s(ers,)f(c)m(haracter)i(data,)g(ad-)630 803 y(dresses)c(of)g(other) g(memory)g(ob)5 b(jects,)27 b(or)d(other)g(data.)40 b Fz(awk)23 b FB(lets)i(y)m(ou)g(w)m(ork)f(with)g(\015oating-)630 913 y(p)s(oin)m(t)29 b(n)m(um)m(b)s(ers)e(and)h(strings.)40 b Fz(gawk)28 b FB(lets)h(y)m(ou)g(manipulate)h(bit)e(v)-5 b(alues)29 b(with)g(the)g(built-)630 1022 y(in)38 b(functions)g (describ)s(ed)g(in)g(Section)h(8.1.6)i([Bit-Manipulation)g(F)-8 b(unctions)39 b(of)g Fz(gawk)p FB(],)630 1132 y(page)31 b(147.)630 1274 y(Computers)36 b(are)i(often)g(de\014ned)e(b)m(y)h(ho)m (w)h(man)m(y)f(bits)g(they)h(use)f(to)h(represen)m(t)g(in)m(teger)630 1384 y(v)-5 b(alues.)60 b(T)m(ypical)37 b(systems)g(are)g(32-bit)h (systems,)g(but)e(64-bit)i(systems)f(are)g(b)s(ecoming)630 1493 y(increasingly)31 b(p)s(opular,)f(and)f(16-bit)j(systems)e(are)h (w)m(aning)g(in)f(p)s(opularit)m(y)-8 b(.)150 1669 y(Bo)s(olean)32 b(Expression)630 1778 y(Named)e(after)h(the)g(English)e(mathematician)k (Bo)s(ole.)42 b(See)30 b(also)h(\\Logical)i(Expression.")150 1954 y(Bourne)d(Shell)630 2063 y(The)f(standard)f(shell)i(\(`)p Fz(/bin/sh)p FB('\))e(on)i(Unix)f(and)f(Unix-lik)m(e)j(systems,)f (originally)h(writ-)630 2173 y(ten)36 b(b)m(y)g(Stev)m(en)g(R.)g (Bourne.)56 b(Man)m(y)37 b(shells)f(\()p Fz(bash)p FB(,)g Fz(ksh)p FB(,)g Fz(pdksh)p FB(,)g Fz(zsh)p FB(\))g(are)g(generally)630 2282 y(up)m(w)m(ardly)30 b(compatible)h(with)f(the)h(Bourne)f(shell.) 150 2458 y(Built-in)h(F)-8 b(unction)630 2567 y(The)35 b Fz(awk)f FB(language)i(pro)m(vides)f(built-in)g(functions)g(that)g(p) s(erform)f(v)-5 b(arious)35 b(n)m(umerical,)630 2677 y(I/O-related,)e(and)d(string)h(computations.)43 b(Examples)31 b(are)h Fz(sqrt)e FB(\(for)h(the)g(square)g(ro)s(ot)630 2787 y(of)e(a)h(n)m(um)m(b)s(er\))e(and)h Fz(substr)e FB(\(for)i(a)h(substring)e(of)h(a)h(string\).)40 b Fz(gawk)28 b FB(pro)m(vides)h(functions)630 2896 y(for)j(timestamp)i(managemen)m (t,)g(bit)f(manipulation,)h(and)e(run)m(time)g(string)h(translation.) 630 3006 y(\(See)e(Section)g(8.1)h([Built-in)f(F)-8 b(unctions],)31 b(page)h(127.\))150 3181 y(Built-in)f(V)-8 b(ariable)630 3291 y Fz(ARGC)p FB(,)43 b Fz(ARGV)p FB(,)f Fz(CONVFMT)p FB(,)g Fz(ENVIRON)p FB(,)g Fz(FILENAME)p FB(,)g Fz(FNR)p FB(,)g Fz(FS)p FB(,)i Fz(NF)p FB(,)f Fz(NR)p FB(,)g Fz(OFMT)p FB(,)g Fz(OFS)p FB(,)g Fz(ORS)p FB(,)630 3400 y Fz(RLENGTH)p FB(,)31 b Fz(RSTART)p FB(,)g Fz(RS)p FB(,)i(and)f Fz(SUBSEP)e FB(are)j(the)f(v)-5 b(ariables)33 b(that)g(ha)m(v)m(e)h(sp)s(ecial)f (meaning)630 3510 y(to)24 b Fz(awk)p FB(.)37 b(In)22 b(addition,)j Fz(ARGIND)p FB(,)e Fz(BINMODE)p FB(,)g Fz(ERRNO)p FB(,)g Fz(FIELDWIDTHS)p FB(,)f Fz(IGNORECASE)p FB(,)g Fz(LINT)p FB(,)630 3619 y Fz(PROCINFO)p FB(,)43 b Fz(RT)p FB(,)i(and)d Fz(TEXTDOMAIN)e FB(are)j(the)f(v)-5 b(ariables)43 b(that)g(ha)m(v)m(e)h(sp)s(ecial)f(meaning)630 3729 y(to)i Fz(gawk)p FB(.)83 b(Changing)44 b(some)h(of)g(them)g (a\013ects)h Fz(awk)p FB('s)e(running)f(en)m(vironmen)m(t.)84 b(\(See)630 3839 y(Section)31 b(6.5)h([Built-in)f(V)-8 b(ariables],)32 b(page)f(107.\))150 4014 y(Braces)219 b(See)31 b(\\Curly)e(Braces.")150 4189 y(Bulletin)i(Board)g(System)630 4299 y(A)d(computer)g(system)f(allo)m(wing)j(users)d(to)h(log)h(in)f (and)f(read)h(and/or)f(lea)m(v)m(e)j(messages)f(for)630 4408 y(other)i(users)e(of)i(the)f(system,)h(m)m(uc)m(h)f(lik)m(e)i(lea) m(ving)g(pap)s(er)e(notes)g(on)h(a)f(bulletin)h(b)s(oard.)150 4584 y(C)414 b(The)27 b(system)g(programming)h(language)g(that)g(most)g (GNU)g(soft)m(w)m(are)h(is)f(written)f(in.)39 b(The)630 4693 y Fz(awk)c FB(programming)g(language)i(has)f(C-lik)m(e)h(syn)m (tax,)g(and)e(this)h(b)s(o)s(ok)f(p)s(oin)m(ts)h(out)g(simi-)630 4803 y(larities)c(b)s(et)m(w)m(een)f Fz(awk)e FB(and)h(C)g(when)f (appropriate.)630 4945 y(In)40 b(general,)45 b Fz(gawk)40 b FB(attempts)i(to)g(b)s(e)f(as)g(similar)g(to)h(the)f(1990)i(v)m (ersion)f(of)f(ISO)f(C)h(as)630 5055 y(mak)m(es)32 b(sense.)41 b(F)-8 b(uture)31 b(v)m(ersions)g(of)g Fz(gawk)e FB(ma)m(y)j(adopt)e (features)h(from)g(the)g(new)m(er)f(1999)630 5165 y(standard,)g(as)g (appropriate.)150 5340 y(C)p Fz(++)318 b FB(A)30 b(p)s(opular)g(ob)5 b(ject-orien)m(ted)32 b(programming)e(language)i(deriv)m(ed)e(from)g (C.)p eop end %%Page: 302 314 TeXDict begin 302 313 bop 150 -116 a FB(302)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(Character)h(Set)630 408 y(The)24 b(set)g(of)g(n)m(umeric)g(co) s(des)g(used)g(b)m(y)g(a)g(computer)g(system)g(to)h(represen)m(t)f(the) g(c)m(haracters)630 518 y(\(letters,)46 b(n)m(um)m(b)s(ers,)e (punctuation,)g(etc.\))77 b(of)42 b(a)g(particular)g(coun)m(try)g(or)g (place.)75 b(The)630 628 y(most)36 b(common)g(c)m(haracter)h(set)f(in)f (use)g(to)s(da)m(y)h(is)g(ASCI)s(I)e(\(American)i(Standard)e(Co)s(de) 630 737 y(for)40 b(Information)f(In)m(terc)m(hange\).)71 b(Man)m(y)40 b(Europ)s(ean)f(coun)m(tries)h(use)g(an)f(extension)i(of) 630 847 y(ASCI)s(I)29 b(kno)m(wn)h(as)g(ISO-8859-1)j(\(ISO)c (Latin-1\).)150 1029 y(CHEM)201 b(A)96 b(prepro)s(cessor)f(for)g Fz(pic)g FB(that)h(reads)g(descriptions)g(of)g(molecules)h(and)630 1139 y(pro)s(duces)90 b Fz(pic)g FB(input)g(for)h(dra)m(wing)g(them.) 222 b(It)92 b(w)m(as)f(written)g(in)g Fz(awk)630 1249 y FB(b)m(y)114 b(Brian)g(Kernighan)f(and)g(Jon)g(Ben)m(tley)-8 b(,)137 b(and)113 b(is)h(a)m(v)-5 b(ailable)116 b(from)630 1358 y Fz(http://cm.bell-labs.com/)o(netl)o(ib/t)o(ype)o(sett)o(ing/)o (che)o(m.gz)o FB(.)150 1541 y(Copro)s(cess)82 b(A)30 b(sub)s(ordinate)g(program)g(with)g(whic)m(h)g(t)m(w)m(o-w)m(a)m(y)j (comm)m(unications)f(is)e(p)s(ossible.)150 1724 y(Compiler)116 b(A)22 b(program)g(that)h(translates)h(h)m(uman-readable)e(source)g(co) s(de)h(in)m(to)g(mac)m(hine-executable)630 1833 y(ob)5 b(ject)36 b(co)s(de.)53 b(The)34 b(ob)5 b(ject)36 b(co)s(de)f(is)g (then)f(executed)h(directly)h(b)m(y)e(the)h(computer.)54 b(See)630 1943 y(also)31 b(\\In)m(terpreter.")150 2125 y(Comp)s(ound)d(Statemen)m(t)630 2235 y(A)40 b(series)g(of)f Fz(awk)g FB(statemen)m(ts,)44 b(enclosed)c(in)g(curly)f(braces.)69 b(Comp)s(ound)37 b(statemen)m(ts)630 2345 y(ma)m(y)31 b(b)s(e)f(nested.)40 b(\(See)31 b(Section)h(6.4)f([Con)m(trol)g (Statemen)m(ts)h(in)e(Actions],)i(page)f(99.\))150 2527 y(Concatenation)630 2637 y(Concatenating)44 b(t)m(w)m(o)f(strings)f (means)h(stic)m(king)g(them)f(together,)47 b(one)c(after)f(another,)630 2746 y(pro)s(ducing)34 b(a)i(new)f(string.)57 b(F)-8 b(or)36 b(example,)i(the)e(string)f(`)p Fz(foo)p FB(')h(concatenated)h (with)f(the)630 2856 y(string)31 b(`)p Fz(bar)p FB(')g(giv)m(es)i(the)e (string)h(`)p Fz(foobar)p FB('.)42 b(\(See)32 b(Section)g(5.6)h ([String)e(Concatenation],)630 2966 y(page)g(80.\))150 3148 y(Conditional)g(Expression)630 3258 y(An)54 b(expression)g(using)g (the)h(`)p Fz(?:)p FB(')f(ternary)g(op)s(erator,)61 b(suc)m(h)54 b(as)h(`)p Fk(expr1)40 b Fz(?)30 b Fk(expr2)39 b Fz(:)630 3367 y Fk(expr3)11 b FB('.)82 b(The)44 b(expression)h Fx(expr1)51 b FB(is)45 b(ev)-5 b(aluated;)53 b(if)45 b(the)g(result)g(is)f(true,)49 b(the)44 b(v)-5 b(alue)630 3477 y(of)43 b(the)f(whole)h(expression)f(is)g(the)h(v)-5 b(alue)43 b(of)f Fx(expr2)7 b FB(;)49 b(otherwise)43 b(the)f(v)-5 b(alue)43 b(is)g Fx(expr3)p FB(.)630 3587 y(In)d(either)h(case,)k(only)c(one)g(of)g Fx(expr2)48 b FB(and)40 b Fx(expr3)48 b FB(is)41 b(ev)-5 b(aluated.)73 b(\(See)42 b(Section)f(5.12)630 3696 y([Conditional)31 b(Expressions],)f(page)h(89.\))150 3879 y(Comparison)f(Expression)630 3988 y(A)24 b(relation)h(that)f(is)g(either)g(true)g(or)f(false,)j(suc) m(h)e(as)g(`)p Fz(\(a)30 b(<)g(b\))p FB('.)38 b(Comparison)23 b(expressions)630 4098 y(are)30 b(used)f(in)h Fz(if)p FB(,)g Fz(while)p FB(,)e Fz(do)p FB(,)i(and)f Fz(for)g FB(statemen)m(ts,)j(and)e(in)f(patterns)h(to)h(select)g(whic)m(h)630 4208 y(input)i(records)h(to)h(pro)s(cess.)51 b(\(See)34 b(Section)h(5.10)h([V)-8 b(ariable)35 b(T)m(yping)f(and)f(Comparison) 630 4317 y(Expressions],)d(page)h(85.\))150 4500 y(Curly)e(Braces)630 4609 y(The)g(c)m(haracters)h(`)p Fz({)p FB(')g(and)f(`)p Fz(})p FB('.)40 b(Curly)28 b(braces)i(are)f(used)g(in)g Fz(awk)f FB(for)h(delimiting)h(actions,)630 4719 y(comp)s(ound)f (statemen)m(ts,)j(and)e(function)g(b)s(o)s(dies.)150 4902 y(Dark)h(Corner)630 5011 y(An)e(area)i(in)e(the)h(language)h (where)e(sp)s(eci\014cations)i(often)f(w)m(ere)g(\(or)g(still)g(are\))h (not)f(clear,)630 5121 y(leading)k(to)g(unexp)s(ected)e(or)i (undesirable)e(b)s(eha)m(vior.)49 b(Suc)m(h)33 b(areas)g(are)h(mark)m (ed)f(in)g(this)630 5230 y(b)s(o)s(ok)f(with)g(the)h(picture)g(of)g(a)g (\015ashligh)m(t)g(in)g(the)g(margin)f(and)g(are)h(indexed)g(under)e (the)630 5340 y(heading)f(\\dark)h(corner.")p eop end %%Page: 303 315 TeXDict begin 303 314 bop 3178 -116 a Fr(Glossary)92 b FB(303)150 299 y(Data)32 b(Driv)m(en)630 408 y(A)i(description)g(of)g Fz(awk)f FB(programs,)i(where)e(y)m(ou)i(sp)s(ecify)e(the)i(data)f(y)m (ou)h(are)f(in)m(terested)630 518 y(in)c(pro)s(cessing,)g(and)g(what)g (to)i(do)e(when)f(that)i(data)g(is)g(seen.)150 680 y(Data)h(Ob)5 b(jects)630 789 y(These)20 b(are)h(n)m(um)m(b)s(ers)e(and)h(strings)g (of)g(c)m(haracters.)39 b(Num)m(b)s(ers)19 b(are)i(con)m(v)m(erted)h (in)m(to)f(strings)630 899 y(and)g(vice)h(v)m(ersa,)i(as)e(needed.)37 b(\(See)22 b(Section)g(5.4)h([Con)m(v)m(ersion)f(of)f(Strings)g(and)g (Num)m(b)s(ers],)630 1009 y(page)31 b(77.\))150 1170 y(Deadlo)s(c)m(k)117 b(The)34 b(situation)i(in)e(whic)m(h)g(t)m(w)m(o)i (comm)m(unicating)g(pro)s(cesses)f(are)g(eac)m(h)g(w)m(aiting)h(for)f (the)630 1280 y(other)c(to)g(p)s(erform)e(an)h(action.)150 1442 y(Double-Precision)630 1551 y(An)h(in)m(ternal)h(represen)m (tation)g(of)f(n)m(um)m(b)s(ers)f(that)i(can)f(ha)m(v)m(e)i(fractional) f(parts.)43 b(Double-)630 1661 y(precision)33 b(n)m(um)m(b)s(ers)e(k)m (eep)i(trac)m(k)h(of)f(more)f(digits)i(than)e(do)g(single-precision)i (n)m(um)m(b)s(ers,)630 1771 y(but)j(op)s(erations)h(on)g(them)g(are)g (sometimes)h(more)f(exp)s(ensiv)m(e.)63 b(This)37 b(is)h(the)g(w)m(a)m (y)h Fz(awk)630 1880 y FB(stores)31 b(n)m(umeric)f(v)-5 b(alues.)41 b(It)31 b(is)f(the)h(C)f(t)m(yp)s(e)g Fz(double)p FB(.)150 2042 y(Dynamic)h(Regular)g(Expression)630 2151 y(A)40 b(dynamic)f(regular)h(expression)f(is)h(a)g(regular)g (expression)f(written)h(as)g(an)g(ordinary)630 2261 y(expression.)g(It) 30 b(could)f(b)s(e)g(a)h(string)g(constan)m(t,)h(suc)m(h)e(as)h Fz("foo")p FB(,)f(but)f(it)j(ma)m(y)f(also)g(b)s(e)f(an)630 2371 y(expression)37 b(whose)f(v)-5 b(alue)37 b(can)g(v)-5 b(ary)d(.)61 b(\(See)37 b(Section)g(2.8)h([Using)f(Dynamic)h(Regexps],) 630 2480 y(page)31 b(34.\))150 2642 y(En)m(vironmen)m(t)630 2752 y(A)h(collection)j(of)d(strings,)g(of)g(the)g(form)g Fx(name)p Fz(=)p Fx(v)-5 b(al)p FB(,)33 b(that)f(eac)m(h)h(program)f (has)g(a)m(v)-5 b(ailable)630 2861 y(to)31 b(it.)41 b(Users)30 b(generally)i(place)f(v)-5 b(alues)30 b(in)m(to)i(the)e(en)m(vironmen)m (t)h(in)f(order)g(to)h(pro)m(vide)f(in-)630 2971 y(formation)25 b(to)f(v)-5 b(arious)24 b(programs.)39 b(T)m(ypical)24 b(examples)h(are)f(the)h(en)m(vironmen)m(t)f(v)-5 b(ariables)630 3080 y Fz(HOME)29 b FB(and)h Fz(PATH)p FB(.)150 3242 y(Empt)m(y)g(String)630 3352 y(See)h(\\Null)g(String.")150 3513 y(Ep)s(o)s(c)m(h)228 b(The)44 b(date)g(used)g(as)g(the)h(\\b)s (eginning)e(of)i(time")g(for)f(timestamps.)83 b(Time)44 b(v)-5 b(alues)44 b(in)630 3623 y(Unix)26 b(systems)g(are)h(represen)m (ted)f(as)h(seconds)f(since)g(the)h(ep)s(o)s(c)m(h,)g(with)f(library)f (functions)630 3733 y(a)m(v)-5 b(ailable)33 b(for)d(con)m(v)m(erting)i (these)f(v)-5 b(alues)31 b(in)m(to)g(standard)e(date)i(and)f(time)h (formats.)630 3868 y(The)h(ep)s(o)s(c)m(h)h(on)f(Unix)h(and)f(POSIX)g (systems)g(is)h(1970-01-01)k(00:00:00)f(UTC.)c(See)h(also)630 3978 y(\\GMT")f(and)d(\\UTC.")150 4140 y(Escap)s(e)h(Sequences)630 4249 y(A)43 b(sp)s(ecial)h(sequence)g(of)f(c)m(haracters)i(used)d(for)h (describing)g(nonprin)m(ting)f(c)m(haracters,)630 4359 y(suc)m(h)31 b(as)g(`)p Fz(\\n)p FB(')g(for)g(newline)h(or)f(`)p Fz(\\033)p FB(')f(for)h(the)h(ASCI)s(I)d(ESC)i(\(Escap)s(e\))g(c)m (haracter.)45 b(\(See)630 4468 y(Section)31 b(2.2)h([Escap)s(e)e (Sequences],)h(page)g(25.\))150 4630 y(FDL)295 b(See)31 b(\\F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License.")150 4792 y(Field)280 b(When)34 b Fz(awk)g FB(reads)g(an)g(input)g(record,)h (it)g(splits)g(the)f(record)h(in)m(to)g(pieces)g(separated)g(b)m(y)630 4902 y(whitespace)30 b(\(or)g(b)m(y)f(a)h(separator)g(regexp)f(that)h (y)m(ou)g(can)f(c)m(hange)i(b)m(y)e(setting)h(the)g(built-)630 5011 y(in)j(v)-5 b(ariable)35 b Fz(FS)p FB(\).)50 b(Suc)m(h)33 b(pieces)h(are)g(called)h(\014elds.)49 b(If)34 b(the)f(pieces)i(are)f (of)f(\014xed)g(length,)630 5121 y(y)m(ou)i(can)f(use)h(the)f(built-in) g(v)-5 b(ariable)36 b Fz(FIELDWIDTHS)31 b FB(to)k(describ)s(e)f(their)g (lengths.)53 b(\(See)630 5230 y(Section)40 b(3.5)g([Sp)s(ecifying)f(Ho) m(w)h(Fields)f(Are)g(Separated],)j(page)e(43,)i(and)d(Section)h(3.6)630 5340 y([Reading)31 b(Fixed-Width)g(Data],)i(page)e(47.\))p eop end %%Page: 304 316 TeXDict begin 304 315 bop 150 -116 a FB(304)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(Flag)306 b(A)37 b(v)-5 b(ariable)38 b(whose)e(truth)g(v)-5 b(alue)38 b(indicates)f(the)h(existence)g(or)f(nonexistence)h(of)f (some)630 408 y(condition.)150 582 y(Floating-P)m(oin)m(t)d(Num)m(b)s (er)630 692 y(Often)29 b(referred)g(to)h(in)f(mathematical)j(terms)d (as)g(a)h(\\rational")i(or)d(real)h(n)m(um)m(b)s(er,)f(this)g(is)630 801 y(just)d(a)i(n)m(um)m(b)s(er)d(that)j(can)f(ha)m(v)m(e)h(a)f (fractional)i(part.)39 b(See)27 b(also)h(\\Double-Precision")i(and)630 911 y(\\Single-Precision.")150 1084 y(F)-8 b(ormat)192 b(F)-8 b(ormat)36 b(strings)e(are)h(used)f(to)h(con)m(trol)h(the)f(app) s(earance)f(of)h(output)f(in)g(the)h Fz(strftime)630 1194 y FB(and)h Fz(sprintf)f FB(functions,)j(and)f(are)g(used)f(in)h (the)g Fz(printf)e FB(statemen)m(t)k(as)e(w)m(ell.)61 b(Also,)630 1303 y(data)37 b(con)m(v)m(ersions)h(from)e(n)m(um)m(b)s (ers)f(to)i(strings)f(are)h(con)m(trolled)h(b)m(y)f(the)f(format)h (string)630 1413 y(con)m(tained)32 b(in)e(the)h(built-in)g(v)-5 b(ariable)31 b Fz(CONVFMT)p FB(.)40 b(\(See)31 b(Section)h(4.5.2)g([F) -8 b(ormat-Con)m(trol)630 1523 y(Letters],)32 b(page)f(60.\))150 1696 y(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)630 1806 y(This)24 b(do)s(cumen)m(t)g(describ)s(es)g(the)h(terms)g(under)e (whic)m(h)h(this)h(b)s(o)s(ok)f(is)g(published)f(and)h(ma)m(y)630 1915 y(b)s(e)30 b(copied.)41 b(\(See)31 b([GNU)g(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License],)f(page)g(316.\))150 2089 y(F)-8 b(unction)131 b(A)46 b(sp)s(ecialized)g(group)f(of)h (statemen)m(ts)h(used)e(to)h(encapsulate)h(general)f(or)g(program-)630 2198 y(sp)s(eci\014c)d(tasks.)79 b Fz(awk)42 b FB(has)h(a)g(n)m(um)m(b) s(er)f(of)h(built-in)g(functions,)j(and)c(also)i(allo)m(ws)h(y)m(ou)630 2308 y(to)31 b(de\014ne)f(y)m(our)g(o)m(wn.)41 b(\(See)31 b(Chapter)f(8)g([F)-8 b(unctions],)32 b(page)f(127.\))150 2482 y(FSF)311 b(See)31 b(\\F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation.")150 2655 y(F)g(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation)630 2765 y(A)28 b(nonpro\014t)f(organization)i(dedicated)g (to)f(the)g(pro)s(duction)f(and)g(distribution)h(of)g(freely)630 2874 y(distributable)41 b(soft)m(w)m(are.)76 b(It)41 b(w)m(as)h(founded)e(b)m(y)i(Ric)m(hard)f(M.)h(Stallman,)j(the)d (author)630 2984 y(of)35 b(the)g(original)i(Emacs)e(editor.)55 b(GNU)36 b(Emacs)f(is)g(the)h(most)f(widely)g(used)f(v)m(ersion)i(of) 630 3093 y(Emacs)31 b(to)s(da)m(y)-8 b(.)150 3267 y Fz(gawk)288 b FB(The)30 b(GNU)h(implemen)m(tation)h(of)e Fz(awk)p FB(.)150 3440 y(General)h(Public)f(License)630 3550 y(This)f(do)s (cumen)m(t)h(describ)s(es)g(the)g(terms)h(under)d(whic)m(h)i Fz(gawk)f FB(and)h(its)g(source)h(co)s(de)f(ma)m(y)630 3660 y(b)s(e)g(distributed.)39 b(\(See)31 b([GNU)h(General)f(Public)f (License],)i(page)f(310.\))150 3833 y(GMT)260 b(\\Green)m(wic)m(h)34 b(Mean)g(Time.")49 b(This)32 b(is)h(the)g(old)g(term)g(for)g(UTC.)g(It) g(is)g(the)g(time)g(of)h(da)m(y)630 3943 y(used)26 b(as)g(the)h(ep)s(o) s(c)m(h)f(for)g(Unix)g(and)g(POSIX)f(systems.)39 b(See)27 b(also)g(\\Ep)s(o)s(c)m(h")g(and)e(\\UTC.")150 4116 y(GNU)273 b(\\GNU's)39 b(not)e(Unix".)62 b(An)37 b(on-going)i(pro)5 b(ject)37 b(of)h(the)f(F)-8 b(ree)39 b(Soft)m(w)m(are)f(F)-8 b(oundation)38 b(to)630 4226 y(create)g(a)g(complete,)i(freely)d (distributable,)i(POSIX-complian)m(t)e(computing)h(en)m(viron-)630 4335 y(men)m(t.)150 4509 y(GNU/Lin)m(ux)630 4619 y(A)31 b(v)-5 b(arian)m(t)32 b(of)f(the)f(GNU)i(system)f(using)f(the)h(Lin)m (ux)f(k)m(ernel,)i(instead)f(of)g(the)g(F)-8 b(ree)32 b(Soft-)630 4728 y(w)m(are)h(F)-8 b(oundation's)34 b(Hurd)e(k)m(ernel.) 49 b(Lin)m(ux)32 b(is)h(a)g(stable,)i(e\016cien)m(t,)g(full-featured)e (clone)630 4838 y(of)25 b(Unix)g(that)g(has)f(b)s(een)h(p)s(orted)f(to) h(a)g(v)-5 b(ariet)m(y)26 b(of)f(arc)m(hitectures.)41 b(It)25 b(is)f(most)i(p)s(opular)d(on)630 4947 y(PC-class)34 b(systems,)g(but)e(runs)g(w)m(ell)i(on)f(a)g(v)-5 b(ariet)m(y)35 b(of)e(other)g(systems)g(to)s(o.)50 b(The)32 b(Lin)m(ux)630 5057 y(k)m(ernel)43 b(source)f(co)s(de)g(is)g(a)m(v)-5 b(ailable)45 b(under)40 b(the)i(terms)g(of)g(the)h(GNU)f(General)h (Public)630 5166 y(License,)31 b(whic)m(h)f(is)h(p)s(erhaps)d(its)j (most)g(imp)s(ortan)m(t)f(asp)s(ect.)150 5340 y(GPL)290 b(See)31 b(\\General)g(Public)f(License.")p eop end %%Page: 305 317 TeXDict begin 305 316 bop 3178 -116 a Fr(Glossary)92 b FB(305)150 299 y(Hexadecimal)630 408 y(Base)27 b(16)f(notation,)i (where)d(the)h(digits)g(are)g Fz(0)p FB({)p Fz(9)g FB(and)f Fz(A)p FB({)p Fz(F)p FB(,)h(with)g(`)p Fz(A)p FB(')f(represen)m(ting)h (10,)i(`)p Fz(B)p FB(')630 518 y(represen)m(ting)j(11,)i(and)d(so)i (on,)f(up)f(to)i(`)p Fz(F)p FB(')f(for)g(15.)44 b(Hexadecimal)33 b(n)m(um)m(b)s(ers)c(are)j(written)630 628 y(in)h(C)f(using)g(a)h (leading)h(`)p Fz(0x)p FB(',)g(to)f(indicate)h(their)f(base.)48 b(Th)m(us,)33 b Fz(0x12)f FB(is)g(18)i(\(1)g(times)f(16)630 737 y(plus)c(2\).)150 908 y(I/O)331 b(Abbreviation)30 b(for)f(\\Input/Output,")g(the)h(act)h(of)e(mo)m(ving)i(data)f(in)m(to) h(and/or)e(out)h(of)g(a)630 1018 y(running)f(program.)150 1189 y(Input)g(Record)630 1298 y(A)38 b(single)g(c)m(h)m(unk)f(of)h (data)g(that)g(is)g(read)g(in)f(b)m(y)g Fz(awk)p FB(.)62 b(Usually)-8 b(,)40 b(an)e Fz(awk)e FB(input)h(record)630 1408 y(consists)31 b(of)g(one)g(line)g(of)g(text.)42 b(\(See)32 b(Section)f(3.1)h([Ho)m(w)g(Input)d(Is)h(Split)h(in)m(to)g (Records],)630 1518 y(page)g(36.\))150 1688 y(In)m(teger)203 b(A)30 b(whole)h(n)m(um)m(b)s(er,)e(i.e.,)j(a)f(n)m(um)m(b)s(er)e(that) i(do)s(es)f(not)h(ha)m(v)m(e)g(a)g(fractional)h(part.)150 1859 y(In)m(ternationalization)630 1969 y(The)43 b(pro)s(cess)g(of)h (writing)g(or)f(mo)s(difying)g(a)h(program)g(so)g(that)g(it)g(can)g (use)f(m)m(ultiple)630 2079 y(languages)32 b(without)e(requiring)g (further)f(source)h(co)s(de)h(c)m(hanges.)150 2250 y(In)m(terpreter)630 2359 y(A)38 b(program)g(that)h(reads)f(h)m(uman-readable)h(source)f(co) s(de)g(directly)-8 b(,)42 b(and)c(uses)f(the)i(in-)630 2469 y(structions)34 b(in)f(it)i(to)f(pro)s(cess)f(data)i(and)e(pro)s (duce)f(results.)51 b Fz(awk)33 b FB(is)h(t)m(ypically)h(\(but)f(not) 630 2578 y(alw)m(a)m(ys\))e(implemen)m(ted)f(as)g(an)f(in)m(terpreter.) 41 b(See)31 b(also)g(\\Compiler.")150 2749 y(In)m(terv)-5 b(al)31 b(Expression)630 2859 y(A)f(comp)s(onen)m(t)h(of)f(a)h(regular) f(expression)g(that)h(lets)g(y)m(ou)f(sp)s(ecify)g(rep)s(eated)g(matc)m (hes)i(of)630 2968 y(some)k(part)f(of)h(the)f(regexp.)57 b(In)m(terv)-5 b(al)36 b(expressions)f(w)m(ere)h(not)g(traditionally)h (a)m(v)-5 b(ailable)630 3078 y(in)30 b Fz(awk)g FB(programs.)150 3249 y(ISO)325 b(The)36 b(In)m(ternational)h(Standards)e(Organization.) 59 b(This)35 b(organization)j(pro)s(duces)d(in)m(ter-)630 3359 y(national)30 b(standards)d(for)i(man)m(y)f(things,)h(including)g (programming)f(languages,)i(suc)m(h)f(as)630 3468 y(C)f(and)g(C)p Fz(++)p FB(.)39 b(In)28 b(the)g(computer)h(arena,)g(imp)s(ortan)m(t)g (standards)e(lik)m(e)j(those)f(for)f(C,)h(C)p Fz(++)p FB(,)630 3578 y(and)34 b(POSIX)g(b)s(ecome)h(b)s(oth)f(American)h (national)h(and)e(ISO)f(in)m(ternational)k(standards)630 3687 y(sim)m(ultaneously)-8 b(.)42 b(This)30 b(b)s(o)s(ok)f(refers)h (to)h(Standard)f(C)f(as)i(\\ISO)f(C")g(throughout.)150 3858 y(Keyw)m(ord)126 b(In)30 b(the)g Fz(awk)g FB(language,)i(a)f(k)m (eyw)m(ord)g(is)g(a)f(w)m(ord)h(that)g(has)f(sp)s(ecial)h(meaning.)41 b(Keyw)m(ords)630 3968 y(are)31 b(reserv)m(ed)f(and)g(ma)m(y)h(not)g(b) s(e)e(used)h(as)h(v)-5 b(ariable)31 b(names.)630 4108 y Fz(gawk)p FB('s)21 b(k)m(eyw)m(ords)h(are:)37 b Fz(BEGIN)p FB(,)23 b Fz(END)p FB(,)g Fz(if)p FB(,)g Fz(else)p FB(,)g Fz(while)p FB(,)g Fz(do...)n(while)p FB(,)g Fz(for)p FB(,)g Fz(for...)n(in)p FB(,)630 4218 y Fz(break)p FB(,)29 b Fz(continue)p FB(,)g Fz(delete)p FB(,)f Fz(next)p FB(,)i Fz(nextfile)p FB(,)e Fz(function)p FB(,)h Fz(func)p FB(,)g(and)h Fz(exit)p FB(.)150 4389 y(Lesser)g(General)i(Public)e(License)630 4498 y(This)46 b(do)s(cumen)m(t)h(describ)s(es)g(the)g(terms)g(under)f (whic)m(h)h(binary)g(library)f(arc)m(hiv)m(es)j(or)630 4608 y(shared)30 b(ob)5 b(jects,)31 b(and)f(their)g(source)h(co)s(de)f (ma)m(y)h(b)s(e)f(distributed.)150 4779 y(Lin)m(ux)251 b(See)31 b(\\GNU/Lin)m(ux.")150 4950 y(LGPL)233 b(See)31 b(\\Lesser)f(General)i(Public)e(License.")150 5121 y(Lo)s(calization) 630 5230 y(The)35 b(pro)s(cess)f(of)i(pro)m(viding)f(the)g(data)h (necessary)g(for)f(an)g(in)m(ternationalized)i(program)630 5340 y(to)31 b(w)m(ork)g(in)f(a)g(particular)h(language.)p eop end %%Page: 306 318 TeXDict begin 306 317 bop 150 -116 a FB(306)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(Logical)i(Expression)630 408 y(An)c(expression)g(using)g(the)h (op)s(erators)g(for)f(logic,)j(AND,)f(OR,)e(and)g(NOT,)g(written)h(`)p Fz(&&)p FB(',)630 518 y(`)p Fz(||)p FB(',)f(and)g(`)p Fz(!)p FB(')g(in)f Fz(awk)p FB(.)39 b(Often)27 b(called)i(Bo)s(olean)h (expressions,)e(after)g(the)g(mathematician)630 628 y(who)i(pioneered)g (this)h(kind)e(of)i(mathematical)h(logic.)150 785 y(Lv)-5 b(alue)219 b(An)34 b(expression)g(that)h(can)g(app)s(ear)f(on)g(the)h (left)g(side)f(of)h(an)f(assignmen)m(t)h(op)s(erator.)54 b(In)630 894 y(most)43 b(languages,)48 b(lv)-5 b(alues)44 b(can)f(b)s(e)f(v)-5 b(ariables)44 b(or)f(arra)m(y)g(elemen)m(ts.)80 b(In)42 b Fz(awk)p FB(,)k(a)d(\014eld)630 1004 y(designator)31 b(can)g(also)g(b)s(e)f(used)f(as)i(an)f(lv)-5 b(alue.)150 1161 y(Matc)m(hing)108 b(The)28 b(act)i(of)f(testing)g(a)g(string)g (against)h(a)f(regular)g(expression.)40 b(If)28 b(the)h(regexp)g (describ)s(es)630 1271 y(the)i(con)m(ten)m(ts)h(of)e(the)h(string,)f (it)h(is)g(said)f(to)h Fx(matc)m(h)g FB(it.)150 1428 y(Metac)m(haracters)630 1538 y(Characters)40 b(used)f(within)h(a)g (regexp)g(that)g(do)g(not)g(stand)g(for)f(themselv)m(es.)71 b(Instead,)630 1647 y(they)34 b(denote)f(regular)h(expression)f(op)s (erations,)i(suc)m(h)e(as)h(rep)s(etition,)h(grouping,)f(or)f(al-)630 1757 y(ternation.)150 1914 y(Null)d(String)630 2024 y(A)k(string)f (with)h(no)f(c)m(haracters)i(in)e(it.)51 b(It)34 b(is)g(represen)m(ted) f(explicitly)i(in)f Fz(awk)e FB(programs)630 2133 y(b)m(y)f(placing)g (t)m(w)m(o)i(double)d(quote)i(c)m(haracters)g(next)f(to)h(eac)m(h)g (other)f(\()p Fz("")p FB(\).)42 b(It)31 b(can)h(app)s(ear)630 2243 y(in)25 b(input)f(data)i(b)m(y)f(ha)m(ving)g(t)m(w)m(o)i (successiv)m(e)f(o)s(ccurrences)g(of)f(the)g(\014eld)g(separator)h(app) s(ear)630 2352 y(next)31 b(to)g(eac)m(h)g(other.)150 2510 y(Num)m(b)s(er)158 b(A)53 b(n)m(umeric-v)-5 b(alued)53 b(data)h(ob)5 b(ject.)109 b(Mo)s(dern)52 b Fz(awk)g FB(implemen)m (tations)i(use)f(double-)630 2619 y(precision)38 b(\015oating-p)s(oin)m (t)h(to)g(represen)m(t)f(n)m(um)m(b)s(ers.)61 b(V)-8 b(ery)39 b(old)f Fz(awk)e FB(implemen)m(tations)630 2729 y(use)30 b(single-precision)i(\015oating-p)s(oin)m(t.)150 2886 y(Octal)264 b(Base-eigh)m(t)34 b(notation,)e(where)f(the)g(digits) g(are)h Fz(0)p FB({)p Fz(7)p FB(.)42 b(Octal)32 b(n)m(um)m(b)s(ers)d (are)j(written)f(in)f(C)630 2996 y(using)e(a)g(leading)h(`)p Fz(0)p FB(',)h(to)f(indicate)g(their)f(base.)40 b(Th)m(us,)28 b Fz(013)g FB(is)g(11)h(\(one)g(times)g(8)g(plus)e(3\).)150 3153 y(P1003.2)168 b(See)31 b(\\POSIX.")150 3310 y(P)m(attern)179 b(P)m(atterns)31 b(tell)h Fz(awk)d FB(whic)m(h)h(input)g(records)g(are) h(in)m(teresting)g(to)h(whic)m(h)e(rules.)630 3444 y(A)i(pattern)g(is)f (an)h(arbitrary)f(conditional)i(expression)f(against)h(whic)m(h)e (input)g(is)h(tested.)630 3553 y(If)j(the)g(condition)h(is)g (satis\014ed,)h(the)e(pattern)h(is)f(said)h(to)g Fx(matc)m(h)g FB(the)g(input)e(record.)56 b(A)630 3663 y(t)m(ypical)39 b(pattern)e(migh)m(t)g(compare)h(the)f(input)f(record)h(against)h(a)g (regular)f(expression.)630 3772 y(\(See)31 b(Section)g(6.1)h([P)m (attern)f(Elemen)m(ts],)h(page)f(93.\))150 3930 y(POSIX)195 b(The)34 b(name)h(for)g(a)g(series)g(of)g(standards)f(that)i(sp)s (ecify)e(a)h(P)m(ortable)i(Op)s(erating)d(System)630 4039 y(in)m(terface.)58 b(The)35 b(\\IX")i(denotes)f(the)g(Unix)f (heritage)i(of)f(these)g(standards.)56 b(The)35 b(main)630 4149 y(standard)23 b(of)i(in)m(terest)g(for)f Fz(awk)f FB(users)g(is)h Fx(IEEE)g(Standard)f(for)g(Information)h(T)-8 b(ec)m(hnology)g(,)630 4258 y(Standard)35 b(1003.2-1992,)43 b(P)m(ortable)38 b(Op)s(erating)f(System)f(In)m(terface)i(\(POSIX\))e (P)m(art)h(2:)630 4368 y(Shell)44 b(and)f(Utilities)p FB(.)84 b(Informally)-8 b(,)48 b(this)c(standard)f(is)i(often)f (referred)f(to)i(as)f(simply)630 4478 y(\\P1003.2.")150 4635 y(Precedence)630 4744 y(The)29 b(order)g(in)h(whic)m(h)f(op)s (erations)h(are)g(p)s(erformed)e(when)h(op)s(erators)h(are)g(used)f (without)630 4854 y(explicit)j(paren)m(theses.)150 5011 y(Priv)-5 b(ate)194 b(V)-8 b(ariables)35 b(and/or)e(functions)g(that)h (are)g(mean)m(t)g(for)f(use)g(exclusiv)m(ely)i(b)m(y)f(library)f(func-) 630 5121 y(tions)41 b(and)f(not)h(for)g(the)g(main)g Fz(awk)f FB(program.)71 b(Sp)s(ecial)42 b(care)f(m)m(ust)g(b)s(e)f(tak) m(en)i(when)630 5230 y(naming)29 b(suc)m(h)f(v)-5 b(ariables)30 b(and)e(functions.)40 b(\(See)30 b(Section)f(12.1)i([Naming)e(Library)g (F)-8 b(unc-)630 5340 y(tion)31 b(Global)g(V)-8 b(ariables],)33 b(page)e(181.\))p eop end %%Page: 307 319 TeXDict begin 307 318 bop 3178 -116 a Fr(Glossary)92 b FB(307)150 299 y(Range)31 b(\(of)g(input)e(lines\))630 408 y(A)37 b(sequence)g(of)g(consecutiv)m(e)i(lines)e(from)g(the)g (input)f(\014le\(s\).)61 b(A)37 b(pattern)g(can)g(sp)s(ecify)630 518 y(ranges)44 b(of)f(input)g(lines)h(for)f Fz(awk)f FB(to)j(pro)s(cess)e(or)g(it)h(can)g(sp)s(ecify)f(single)h(lines.)80 b(\(See)630 628 y(Section)31 b(6.1)h([P)m(attern)f(Elemen)m(ts],)h (page)f(93.\))150 772 y(Recursion)89 b(When)26 b(a)g(function)g(calls)h (itself,)h(either)e(directly)h(or)f(indirectly)-8 b(.)40 b(If)25 b(this)h(isn't)g(clear,)i(refer)630 882 y(to)j(the)g(en)m(try)f (for)g(\\recursion.")150 1027 y(Redirection)630 1136 y(Redirection)36 b(means)f(p)s(erforming)f(input)g(from)h(something)g (other)h(than)e(the)i(standard)630 1246 y(input)28 b(stream,)i(or)f(p)s (erforming)f(output)h(to)g(something)h(other)f(than)g(the)g(standard)f (out-)630 1355 y(put)i(stream.)630 1482 y(Y)-8 b(ou)31 b(can)h(redirect)f(the)g(output)f(of)h(the)g Fz(print)f FB(and)g Fz(printf)f FB(statemen)m(ts)k(to)e(a)h(\014le)f(or)g(a)630 1592 y(system)h(command,)h(using)f(the)g(`)p Fz(>)p FB(',)h(`)p Fz(>>)p FB(',)g(`)p Fz(|)p FB(',)g(and)f(`)p Fz(|&)p FB(')g(op)s(erators.)46 b(Y)-8 b(ou)33 b(can)f(redirect)630 1702 y(input)41 b(to)h(the)g Fz(getline)e FB(statemen)m(t)j(using)e (the)h(`)p Fz(<)p FB(',)j(`)p Fz(|)p FB(',)g(and)c(`)p Fz(|&)p FB(')h(op)s(erators.)74 b(\(See)630 1811 y(Section)26 b(4.6)f([Redirecting)h(Output)e(of)h Fz(print)e FB(and)h Fz(printf)p FB(],)h(page)g(65,)i(and)d(Section)i(3.8)630 1921 y([Explicit)31 b(Input)e(with)h Fz(getline)p FB(],)f(page)j(51.\)) 150 2065 y(Regexp)189 b(Short)25 b(for)g Fx(regular)h(expression)p FB(.)39 b(A)25 b(regexp)h(is)g(a)g(pattern)f(that)h(denotes)g(a)g(set)g (of)g(strings,)630 2175 y(p)s(ossibly)37 b(an)g(in\014nite)h(set.)63 b(F)-8 b(or)38 b(example,)j(the)d(regexp)f(`)p Fz(R.*xp)p FB(')g(matc)m(hes)i(an)m(y)f(string)630 2285 y(starting)28 b(with)f(the)h(letter)h(`)p Fz(R)p FB(')f(and)e(ending)i(with)f(the)g (letters)i(`)p Fz(xp)p FB('.)40 b(In)26 b Fz(awk)p FB(,)i(regexps)g (are)630 2394 y(used)34 b(in)h(patterns)g(and)f(in)g(conditional)j (expressions.)53 b(Regexps)36 b(ma)m(y)f(con)m(tain)h(escap)s(e)630 2504 y(sequences.)41 b(\(See)31 b(Chapter)f(2)g([Regular)i (Expressions],)e(page)h(24.\))150 2648 y(Regular)g(Expression)630 2758 y(See)g(\\regexp.")150 2903 y(Regular)g(Expression)e(Constan)m(t) 630 3012 y(A)21 b(regular)f(expression)h(constan)m(t)g(is)g(a)g (regular)g(expression)f(written)g(within)g(slashes,)j(suc)m(h)630 3122 y(as)35 b Fz(/foo/)p FB(.)53 b(This)34 b(regular)h(expression)f (is)h(c)m(hosen)g(when)f(y)m(ou)h(write)g(the)g Fz(awk)f FB(program)630 3231 y(and)41 b(cannot)i(b)s(e)f(c)m(hanged)g(during)f (its)i(execution.)77 b(\(See)43 b(Section)f(2.1)i([Ho)m(w)f(to)g(Use) 630 3341 y(Regular)31 b(Expressions],)f(page)h(24.\))150 3486 y(Rule)297 b(A)25 b(segmen)m(t)h(of)g(an)f Fz(awk)f FB(program)h(that)h(sp)s(eci\014es)e(ho)m(w)h(to)h(pro)s(cess)f(single) h(input)e(records.)630 3595 y(A)k(rule)g(consists)g(of)g(a)g Fx(pattern)g FB(and)g(an)f Fx(action)p FB(.)42 b Fz(awk)27 b FB(reads)g(an)h(input)f(record;)i(then,)f(for)630 3705 y(eac)m(h)g(rule,)g(if)f(the)h(input)e(record)h(satis\014es)h(the)f (rule's)g(pattern,)h Fz(awk)e FB(executes)j(the)e(rule's)630 3814 y(action.)42 b(Otherwise,)30 b(the)h(rule)f(do)s(es)g(nothing)g (for)h(that)g(input)e(record.)150 3959 y(Rv)-5 b(alue)209 b(A)34 b(v)-5 b(alue)34 b(that)h(can)f(app)s(ear)f(on)h(the)g(righ)m(t) g(side)g(of)g(an)g(assignmen)m(t)g(op)s(erator.)51 b(In)34 b Fz(awk)p FB(,)630 4069 y(essen)m(tially)e(ev)m(ery)g(expression)e (has)g(a)h(v)-5 b(alue.)41 b(These)30 b(v)-5 b(alues)31 b(are)f(rv)-5 b(alues.)150 4213 y(Scalar)238 b(A)28 b(single)i(v)-5 b(alue,)29 b(b)s(e)f(it)h(a)f(n)m(um)m(b)s(er)g(or)g(a)h(string.)40 b(Regular)29 b(v)-5 b(ariables)29 b(are)f(scalars;)j(arra)m(ys)630 4323 y(and)f(functions)g(are)g(not.)150 4468 y(Searc)m(h)h(P)m(ath)630 4577 y(In)26 b Fz(gawk)p FB(,)h(a)h(list)g(of)f(directories)h(to)g (searc)m(h)g(for)f Fz(awk)g FB(program)g(source)g(\014les.)40 b(In)26 b(the)h(shell,)630 4687 y(a)k(list)g(of)f(directories)i(to)f (searc)m(h)g(for)f(executable)i(programs.)150 4831 y(Seed)298 b(The)30 b(initial)h(v)-5 b(alue,)32 b(or)e(starting)h(p)s(oin)m(t,)g (for)f(a)h(sequence)f(of)h(random)f(n)m(um)m(b)s(ers.)150 4976 y Fz(sed)336 b FB(See)31 b(\\Stream)f(Editor.")150 5121 y(Shell)288 b(The)35 b(command)g(in)m(terpreter)h(for)f(Unix)g (and)g(POSIX-complian)m(t)h(systems.)56 b(The)35 b(shell)630 5230 y(w)m(orks)23 b(b)s(oth)g(in)m(teractiv)m(ely)-8 b(,)29 b(and)23 b(as)g(a)h(programming)f(language)i(for)e(batc)m(h)h (\014les,)h(or)f(shell)630 5340 y(scripts.)p eop end %%Page: 308 320 TeXDict begin 308 319 bop 150 -116 a FB(308)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FB(Short-Circuit)630 408 y(The)36 b(nature)g(of)g(the)g Fz(awk)f FB(logical)k(op)s(erators)d(`)p Fz(&&)p FB(')g(and)g(`)p Fz(||)p FB('.)58 b(If)35 b(the)i(v)-5 b(alue)36 b(of)g(the)h(en-)630 518 y(tire)e(expression)f(is)h(determinable)g(from)f(ev)-5 b(aluating)36 b(just)e(the)g(lefthand)g(side)h(of)f(these)630 628 y(op)s(erators,)f(the)f(righ)m(thand)f(side)h(is)g(not)g(ev)-5 b(aluated.)46 b(\(See)32 b(Section)h(5.11)g([Bo)s(olean)h(Ex-)630 737 y(pressions],)c(page)h(88.\))150 902 y(Side)f(E\013ect)630 1011 y(A)37 b(side)g(e\013ect)i(o)s(ccurs)e(when)f(an)h(expression)g (has)g(an)g(e\013ect)h(aside)g(from)f(merely)g(pro-)630 1121 y(ducing)28 b(a)h(v)-5 b(alue.)40 b(Assignmen)m(t)29 b(expressions,)g(incremen)m(t)g(and)f(decremen)m(t)h(expressions,)630 1230 y(and)g(function)f(calls)j(ha)m(v)m(e)f(side)f(e\013ects.)42 b(\(See)29 b(Section)h(5.7)g([Assignmen)m(t)g(Expressions],)630 1340 y(page)h(81.\))150 1504 y(Single-Precision)630 1614 y(An)j(in)m(ternal)i(represen)m(tation)g(of)f(n)m(um)m(b)s(ers)e(that)j (can)f(ha)m(v)m(e)h(fractional)g(parts.)54 b(Single-)630 1724 y(precision)28 b(n)m(um)m(b)s(ers)e(k)m(eep)i(trac)m(k)h(of)f(few) m(er)f(digits)i(than)e(do)g(double-precision)h(n)m(um)m(b)s(ers,)630 1833 y(but)37 b(op)s(erations)i(on)f(them)g(are)g(sometimes)h(less)f (exp)s(ensiv)m(e)h(in)e(terms)h(of)g(CPU)g(time.)630 1943 y(This)28 b(is)h(the)g(t)m(yp)s(e)h(used)e(b)m(y)h(some)g(v)m(ery) g(old)h(v)m(ersions)f(of)g Fz(awk)f FB(to)i(store)g(n)m(umeric)e(v)-5 b(alues.)630 2052 y(It)30 b(is)h(the)f(C)g(t)m(yp)s(e)h Fz(float)p FB(.)150 2217 y(Space)253 b(The)30 b(c)m(haracter)i (generated)f(b)m(y)f(hitting)h(the)g(space)g(bar)f(on)g(the)h(k)m(eyb)s (oard.)150 2381 y(Sp)s(ecial)g(File)630 2491 y(A)f(\014le)f(name)h(in)m (terpreted)g(in)m(ternally)g(b)m(y)g Fz(gawk)p FB(,)f(instead)h(of)f(b) s(eing)h(handed)e(directly)i(to)630 2600 y(the)23 b(underlying)g(op)s (erating)g(system|for)g(example,)j(`)p Fz(/dev/stderr)p FB('.)36 b(\(See)24 b(Section)g(4.7)630 2710 y([Sp)s(ecial)31 b(File)g(Names)g(in)f Fz(gawk)p FB(],)g(page)h(67.\))150 2874 y(Stream)f(Editor)630 2984 y(A)f(program)f(that)h(reads)f(records) h(from)f(an)g(input)g(stream)g(and)g(pro)s(cesses)h(them)f(one)h(or)630 3093 y(more)h(at)h(a)g(time.)41 b(This)30 b(is)g(in)g(con)m(trast)i (with)e(batc)m(h)g(programs,)h(whic)m(h)f(ma)m(y)g(exp)s(ect)h(to)630 3203 y(read)f(their)g(input)f(\014les)h(in)g(en)m(tiret)m(y)i(b)s (efore)d(starting)i(to)g(do)f(an)m(ything,)h(as)f(w)m(ell)h(as)f(with) 630 3313 y(in)m(teractiv)m(e)j(programs)d(whic)m(h)g(require)g(input)g (from)g(the)g(user.)150 3477 y(String)237 b(A)31 b(datum)f(consisting)h (of)g(a)g(sequence)g(of)g(c)m(haracters,)h(suc)m(h)e(as)h(`)p Fz(I)f(am)g(a)g(string)p FB('.)40 b(Con-)630 3587 y(stan)m(t)46 b(strings)g(are)g(written)f(with)g(double)g(quotes)h(in)f(the)h Fz(awk)f FB(language)h(and)f(ma)m(y)630 3696 y(con)m(tain)32 b(escap)s(e)f(sequences.)41 b(\(See)31 b(Section)g(2.2)g([Escap)s(e)g (Sequences],)g(page)g(25.\))150 3861 y(T)-8 b(ab)326 b(The)38 b(c)m(haracter)i(generated)f(b)m(y)f(hitting)h(the)g Fk(TAB)e FB(k)m(ey)i(on)g(the)f(k)m(eyb)s(oard.)65 b(It)38 b(usually)630 3970 y(expands)30 b(to)h(up)e(to)i(eigh)m(t)h(spaces)f (up)s(on)d(output.)150 4134 y(T)-8 b(ext)31 b(Domain)630 4244 y(A)d(unique)g(name)g(that)h(iden)m(ti\014es)g(an)f(application.) 41 b(Used)28 b(for)g(grouping)g(messages)h(that)630 4354 y(are)i(translated)g(at)g(run)m(time)f(in)m(to)h(the)g(lo)s(cal)h (language.)150 4518 y(Timestamp)630 4628 y(A)42 b(v)-5 b(alue)43 b(in)e(the)i(\\seconds)f(since)g(the)h(ep)s(o)s(c)m(h")f (format)g(used)g(b)m(y)g(Unix)f(and)h(POSIX)630 4737 y(systems.)67 b(Used)39 b(for)g(the)g Fz(gawk)f FB(functions)g Fz(mktime)p FB(,)i Fz(strftime)p FB(,)f(and)g Fz(systime)p FB(.)65 b(See)630 4847 y(also)31 b(\\Ep)s(o)s(c)m(h")g(and)f(\\UTC.") 150 5011 y(Unix)288 b(A)26 b(computer)g(op)s(erating)g(system)g (originally)i(dev)m(elop)s(ed)e(in)f(the)h(early)h(1970's)h(at)e(A)-8 b(T&T)630 5121 y(Bell)32 b(Lab)s(oratories.)43 b(It)31 b(initially)h(b)s(ecame)g(p)s(opular)d(in)i(univ)m(ersities)g(around)f (the)h(w)m(orld)630 5230 y(and)f(later)h(mo)m(v)m(ed)h(in)m(to)f (commercial)h(en)m(vironmen)m(ts)f(as)g(a)f(soft)m(w)m(are)i(dev)m (elopmen)m(t)g(sys-)630 5340 y(tem)f(and)g(net)m(w)m(ork)g(serv)m(er)h (system.)42 b(There)31 b(are)g(man)m(y)g(commercial)i(v)m(ersions)e(of) g(Unix,)p eop end %%Page: 309 321 TeXDict begin 309 320 bop 3178 -116 a Fr(Glossary)92 b FB(309)630 299 y(as)27 b(w)m(ell)i(as)e(sev)m(eral)i(w)m(ork-alik)m (e)g(systems)e(whose)h(source)f(co)s(de)g(is)h(freely)f(a)m(v)-5 b(ailable)30 b(\(suc)m(h)630 408 y(as)h(GNU/Lin)m(ux,)g(NetBSD,)h(F)-8 b(reeBSD,)32 b(and)e(Op)s(enBSD\).)150 568 y(UTC)280 b(The)24 b(accepted)j(abbreviation)e(for)g(\\Univ)m(ersal)i(Co)s (ordinated)d(Time.")40 b(This)24 b(is)h(standard)630 677 y(time)j(in)f(Green)m(wic)m(h,)i(England,)e(whic)m(h)g(is)g(used)g (as)g(a)h(reference)f(time)h(for)f(da)m(y)h(and)e(date)630 787 y(calculations.)43 b(See)30 b(also)i(\\Ep)s(o)s(c)m(h")e(and)g (\\GMT.")150 946 y(Whitespace)630 1056 y(A)44 b(sequence)h(of)f(space,) 49 b(T)-8 b(AB,)45 b(or)f(newline)g(c)m(haracters)i(o)s(ccurring)e (inside)g(an)g(input)630 1166 y(record)30 b(or)h(a)f(string.)p eop end %%Page: 310 322 TeXDict begin 310 321 bop 150 -116 a FB(310)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fu(GNU)54 b(General)f(Public)f(License)1537 579 y FB(V)-8 b(ersion)31 b(2,)g(June)f(1991)390 748 y(Cop)m(yrigh)m(t)842 745 y(c)817 748 y Fy(\015)g FB(1989,)j(1991)f(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 858 y(51)g(F)-8 b(ranklin)31 b(Street,)g(Fifth)g(Flo)s(or,)g(Boston,)g(MA)g (02111,)i(USA)390 1077 y(Ev)m(ery)m(one)e(is)g(p)s(ermitted)f(to)h(cop) m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 1187 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f(is)f (not)h(allo)m(w)m(ed.)150 1472 y FA(Pream)l(ble)150 1631 y FB(The)c(licenses)i(for)f(most)g(soft)m(w)m(are)i(are)e(designed)g (to)h(tak)m(e)g(a)m(w)m(a)m(y)h(y)m(our)e(freedom)g(to)h(share)e(and)h (c)m(hange)150 1741 y(it.)61 b(By)38 b(con)m(trast,)i(the)d(GNU)h (General)g(Public)f(License)h(is)f(in)m(tended)g(to)g(guaran)m(tee)i(y) m(our)e(freedom)150 1851 y(to)c(share)e(and)h(c)m(hange)h(free)f(soft)m (w)m(are|to)i(mak)m(e)f(sure)e(the)h(soft)m(w)m(are)h(is)f(free)g(for)g (all)h(its)f(users.)45 b(This)150 1960 y(General)34 b(Public)e(License) i(applies)f(to)h(most)f(of)g(the)g(F)-8 b(ree)34 b(Soft)m(w)m(are)g(F) -8 b(oundation's)34 b(soft)m(w)m(are)g(and)e(to)150 2070 y(an)m(y)22 b(other)f(program)h(whose)f(authors)g(commit)h(to)g(using)f (it.)39 b(\(Some)22 b(other)f(F)-8 b(ree)23 b(Soft)m(w)m(are)f(F)-8 b(oundation)150 2179 y(soft)m(w)m(are)31 b(is)e(co)m(v)m(ered)i(b)m(y)e (the)h(GNU)g(Library)e(General)i(Public)f(License)h(instead.\))41 b(Y)-8 b(ou)30 b(can)f(apply)g(it)150 2289 y(to)i(y)m(our)f(programs,)h (to)s(o.)275 2459 y(When)37 b(w)m(e)g(sp)s(eak)g(of)g(free)h(soft)m(w)m (are,)i(w)m(e)e(are)g(referring)e(to)i(freedom,)h(not)f(price.)61 b(Our)36 b(General)150 2568 y(Public)e(Licenses)g(are)h(designed)f(to)h (mak)m(e)g(sure)f(that)g(y)m(ou)h(ha)m(v)m(e)g(the)g(freedom)f(to)g (distribute)g(copies)150 2678 y(of)i(free)h(soft)m(w)m(are)g(\(and)f(c) m(harge)i(for)e(this)g(service)h(if)f(y)m(ou)h(wish\),)h(that)e(y)m(ou) h(receiv)m(e)h(source)e(co)s(de)h(or)150 2787 y(can)e(get)h(it)f(if)f (y)m(ou)h(w)m(an)m(t)h(it,)g(that)f(y)m(ou)g(can)g(c)m(hange)h(the)e (soft)m(w)m(are)i(or)f(use)f(pieces)i(of)e(it)h(in)g(new)f(free)150 2897 y(programs;)c(and)g(that)h(y)m(ou)g(kno)m(w)f(y)m(ou)h(can)f(do)h (these)g(things.)275 3067 y(T)-8 b(o)40 b(protect)h(y)m(our)f(righ)m (ts,)j(w)m(e)d(need)g(to)h(mak)m(e)g(restrictions)f(that)h(forbid)e(an) m(y)m(one)i(to)g(den)m(y)f(y)m(ou)150 3176 y(these)d(righ)m(ts)g(or)f (to)h(ask)g(y)m(ou)f(to)h(surrender)e(the)h(righ)m(ts.)59 b(These)36 b(restrictions)h(translate)h(to)f(certain)150 3286 y(resp)s(onsibilities)30 b(for)h(y)m(ou)f(if)h(y)m(ou)f (distribute)g(copies)h(of)g(the)f(soft)m(w)m(are,)j(or)d(if)g(y)m(ou)h (mo)s(dify)f(it.)275 3456 y(F)-8 b(or)30 b(example,)g(if)g(y)m(ou)f (distribute)g(copies)i(of)e(suc)m(h)g(a)h(program,)g(whether)e(gratis)j (or)e(for)g(a)h(fee,)h(y)m(ou)150 3565 y(m)m(ust)i(giv)m(e)i(the)f (recipien)m(ts)g(all)h(the)e(righ)m(ts)h(that)g(y)m(ou)g(ha)m(v)m(e.)51 b(Y)-8 b(ou)34 b(m)m(ust)g(mak)m(e)g(sure)f(that)h(they)-8 b(,)35 b(to)s(o,)150 3675 y(receiv)m(e)k(or)f(can)g(get)g(the)g(source) g(co)s(de.)62 b(And)37 b(y)m(ou)h(m)m(ust)f(sho)m(w)h(them)f(these)h (terms)f(so)h(they)g(kno)m(w)150 3784 y(their)30 b(righ)m(ts.)275 3954 y(W)-8 b(e)29 b(protect)g(y)m(our)f(righ)m(ts)g(with)g(t)m(w)m(o)h (steps:)40 b(\(1\))29 b(cop)m(yrigh)m(t)g(the)f(soft)m(w)m(are,)j(and)c (\(2\))i(o\013er)g(y)m(ou)f(this)150 4064 y(license)j(whic)m(h)f(giv)m (es)i(y)m(ou)f(legal)h(p)s(ermission)d(to)i(cop)m(y)-8 b(,)32 b(distribute)e(and/or)g(mo)s(dify)g(the)h(soft)m(w)m(are.)275 4233 y(Also,)46 b(for)c(eac)m(h)i(author's)f(protection)g(and)f(ours,)j (w)m(e)e(w)m(an)m(t)h(to)f(mak)m(e)h(certain)f(that)g(ev)m(ery)m(one) 150 4343 y(understands)29 b(that)j(there)f(is)g(no)g(w)m(arran)m(t)m(y) h(for)f(this)g(free)g(soft)m(w)m(are.)44 b(If)30 b(the)i(soft)m(w)m (are)g(is)f(mo)s(di\014ed)f(b)m(y)150 4453 y(someone)h(else)f(and)f (passed)h(on,)g(w)m(e)g(w)m(an)m(t)h(its)f(recipien)m(ts)h(to)f(kno)m (w)g(that)g(what)g(they)g(ha)m(v)m(e)h(is)f(not)g(the)150 4562 y(original,)h(so)e(that)g(an)m(y)h(problems)e(in)m(tro)s(duced)g (b)m(y)h(others)g(will)g(not)g(re\015ect)h(on)f(the)g(original)h (authors')150 4672 y(reputations.)275 4841 y(Finally)-8 b(,)27 b(an)m(y)e(free)f(program)g(is)h(threatened)f(constan)m(tly)i(b) m(y)f(soft)m(w)m(are)h(paten)m(ts.)39 b(W)-8 b(e)26 b(wish)d(to)i(a)m (v)m(oid)150 4951 y(the)30 b(danger)g(that)h(redistributors)e(of)i(a)f (free)h(program)f(will)g(individually)g(obtain)h(paten)m(t)g(licenses,) g(in)150 5061 y(e\013ect)39 b(making)f(the)g(program)f(proprietary)-8 b(.)63 b(T)-8 b(o)38 b(prev)m(en)m(t)g(this,)i(w)m(e)e(ha)m(v)m(e)h (made)f(it)g(clear)g(that)h(an)m(y)150 5170 y(paten)m(t)31 b(m)m(ust)g(b)s(e)e(licensed)i(for)f(ev)m(ery)m(one's)i(free)f(use)f (or)g(not)h(licensed)g(at)g(all.)275 5340 y(The)e(precise)i(terms)f (and)g(conditions)h(for)f(cop)m(ying,)i(distribution)d(and)h(mo)s (di\014cation)h(follo)m(w.)p eop end %%Page: 311 323 TeXDict begin 311 322 bop 2359 -116 a Fr(GNU)31 b(General)g(Public)f (License)92 b FB(311)150 166 y FA(T)-11 b(erms)45 b(and)f(Conditions)i (for)f(Cop)l(ying,)h(Distribution)g(and)150 299 y(Mo)t(di\014cation)199 458 y FB(0.)61 b(This)42 b(License)h(applies)f(to)i(an)m(y)f(program)f (or)g(other)h(w)m(ork)g(whic)m(h)f(con)m(tains)i(a)f(notice)g(placed) 330 568 y(b)m(y)33 b(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying)i(it)f (ma)m(y)g(b)s(e)f(distributed)g(under)f(the)h(terms)h(of)g(this)f (General)330 677 y(Public)39 b(License.)68 b(The)39 b(\\Program",)j(b)s (elo)m(w,)g(refers)d(to)h(an)m(y)g(suc)m(h)f(program)g(or)g(w)m(ork,)j (and)d(a)330 787 y(\\w)m(ork)29 b(based)f(on)h(the)g(Program")g(means)f (either)i(the)e(Program)h(or)g(an)m(y)g(deriv)-5 b(ativ)m(e)30 b(w)m(ork)e(under)330 897 y(cop)m(yrigh)m(t)33 b(la)m(w:)43 b(that)32 b(is)f(to)i(sa)m(y)-8 b(,)33 b(a)e(w)m(ork)h(con)m(taining)h (the)e(Program)h(or)f(a)h(p)s(ortion)f(of)g(it,)h(either)330 1006 y(v)m(erbatim)e(or)f(with)f(mo)s(di\014cations)h(and/or)g (translated)h(in)m(to)g(another)f(language.)41 b(\(Hereinafter,)330 1116 y(translation)28 b(is)f(included)g(without)g(limitation)i(in)e (the)g(term)g(\\mo)s(di\014cation".\))42 b(Eac)m(h)27 b(licensee)i(is)330 1225 y(addressed)g(as)i(\\y)m(ou".)330 1354 y(Activities)41 b(other)e(than)f(cop)m(ying,)43 b(distribution)38 b(and)g(mo)s(di\014cation)h(are)g(not)g(co)m(v)m (ered)h(b)m(y)f(this)330 1463 y(License;)34 b(they)f(are)f(outside)h (its)f(scop)s(e.)47 b(The)32 b(act)h(of)g(running)d(the)j(Program)f(is) g(not)h(restricted,)330 1573 y(and)24 b(the)g(output)g(from)g(the)h (Program)f(is)h(co)m(v)m(ered)h(only)e(if)g(its)h(con)m(ten)m(ts)h (constitute)g(a)f(w)m(ork)f(based)330 1683 y(on)h(the)h(Program)f (\(indep)s(enden)m(t)g(of)h(ha)m(ving)g(b)s(een)e(made)i(b)m(y)f (running)f(the)h(Program\).)40 b(Whether)330 1792 y(that)31 b(is)f(true)h(dep)s(ends)d(on)i(what)h(the)f(Program)h(do)s(es.)199 1921 y(1.)61 b(Y)-8 b(ou)42 b(ma)m(y)g(cop)m(y)g(and)e(distribute)h(v)m (erbatim)h(copies)g(of)g(the)f(Program's)h(source)f(co)s(de)h(as)g(y)m (ou)330 2030 y(receiv)m(e)33 b(it,)f(in)f(an)m(y)g(medium,)g(pro)m (vided)g(that)g(y)m(ou)h(conspicuously)f(and)f(appropriately)i(publish) 330 2140 y(on)h(eac)m(h)h(cop)m(y)g(an)f(appropriate)g(cop)m(yrigh)m(t) i(notice)f(and)f(disclaimer)g(of)h(w)m(arran)m(t)m(y;)h(k)m(eep)f(in)m (tact)330 2249 y(all)f(the)e(notices)i(that)g(refer)e(to)h(this)g (License)g(and)f(to)i(the)f(absence)g(of)g(an)m(y)g(w)m(arran)m(t)m(y;) h(and)e(giv)m(e)330 2359 y(an)m(y)g(other)f(recipien)m(ts)i(of)e(the)h (Program)f(a)h(cop)m(y)g(of)g(this)f(License)h(along)g(with)f(the)h (Program.)330 2487 y(Y)-8 b(ou)31 b(ma)m(y)g(c)m(harge)h(a)f(fee)g(for) f(the)h(ph)m(ysical)g(act)h(of)f(transferring)f(a)h(cop)m(y)-8 b(,)32 b(and)e(y)m(ou)h(ma)m(y)g(at)g(y)m(our)330 2597 y(option)g(o\013er)g(w)m(arran)m(t)m(y)g(protection)h(in)e(exc)m(hange) i(for)e(a)g(fee.)199 2725 y(2.)61 b(Y)-8 b(ou)24 b(ma)m(y)h(mo)s(dify)e (y)m(our)h(cop)m(y)g(or)g(copies)h(of)f(the)g(Program)g(or)g(an)m(y)g (p)s(ortion)f(of)h(it,)i(th)m(us)e(forming)g(a)330 2835 y(w)m(ork)j(based)g(on)f(the)h(Program,)h(and)f(cop)m(y)g(and)g (distribute)f(suc)m(h)h(mo)s(di\014cations)g(or)f(w)m(ork)h(under)330 2945 y(the)k(terms)f(of)g(Section)i(1)e(ab)s(o)m(v)m(e,)i(pro)m(vided)e (that)h(y)m(ou)g(also)g(meet)g(all)h(of)e(these)h(conditions:)379 3073 y(a.)61 b(Y)-8 b(ou)43 b(m)m(ust)f(cause)i(the)e(mo)s(di\014ed)g (\014les)g(to)h(carry)g(prominen)m(t)f(notices)i(stating)f(that)h(y)m (ou)510 3183 y(c)m(hanged)31 b(the)g(\014les)f(and)g(the)g(date)h(of)g (an)m(y)g(c)m(hange.)374 3311 y(b.)60 b(Y)-8 b(ou)31 b(m)m(ust)g(cause)g(an)m(y)h(w)m(ork)f(that)g(y)m(ou)g(distribute)f(or) h(publish,)f(that)h(in)g(whole)g(or)g(in)f(part)510 3421 y(con)m(tains)36 b(or)g(is)f(deriv)m(ed)g(from)g(the)g(Program)g(or)g (an)m(y)h(part)f(thereof,)i(to)f(b)s(e)e(licensed)i(as)g(a)510 3530 y(whole)31 b(at)g(no)f(c)m(harge)i(to)f(all)g(third)e(parties)i (under)e(the)i(terms)f(of)g(this)h(License.)384 3659 y(c.)61 b(If)39 b(the)h(mo)s(di\014ed)f(program)g(normally)h(reads)g (commands)f(in)m(teractiv)m(ely)k(when)c(run,)i(y)m(ou)510 3768 y(m)m(ust)30 b(cause)h(it,)g(when)f(started)h(running)d(for)j(suc) m(h)f(in)m(teractiv)m(e)j(use)d(in)g(the)h(most)g(ordinary)510 3878 y(w)m(a)m(y)-8 b(,)25 b(to)d(prin)m(t)f(or)g(displa)m(y)h(an)f (announcemen)m(t)g(including)g(an)h(appropriate)f(cop)m(yrigh)m(t)i (notice)510 3987 y(and)h(a)g(notice)i(that)e(there)h(is)f(no)g(w)m (arran)m(t)m(y)h(\(or)g(else,)h(sa)m(ying)f(that)g(y)m(ou)g(pro)m(vide) f(a)h(w)m(arran)m(t)m(y\))510 4097 y(and)35 b(that)g(users)g(ma)m(y)g (redistribute)g(the)h(program)f(under)e(these)j(conditions,)h(and)e (telling)510 4206 y(the)f(user)f(ho)m(w)h(to)g(view)g(a)h(cop)m(y)f(of) g(this)g(License.)51 b(\(Exception:)e(if)33 b(the)h(Program)g(itself)h (is)510 4316 y(in)m(teractiv)m(e)i(but)c(do)s(es)h(not)g(normally)g (prin)m(t)g(suc)m(h)f(an)h(announcemen)m(t,)h(y)m(our)f(w)m(ork)g (based)510 4426 y(on)c(the)h(Program)f(is)h(not)f(required)g(to)h(prin) m(t)f(an)g(announcemen)m(t.\))330 4573 y(These)41 b(requiremen)m(ts)h (apply)f(to)h(the)g(mo)s(di\014ed)f(w)m(ork)g(as)h(a)g(whole.)74 b(If)42 b(iden)m(ti\014able)g(sections)330 4682 y(of)g(that)h(w)m(ork)g (are)f(not)h(deriv)m(ed)f(from)g(the)h(Program,)i(and)d(can)h(b)s(e)e (reasonably)i(considered)330 4792 y(indep)s(enden)m(t)25 b(and)i(separate)g(w)m(orks)g(in)f(themselv)m(es,)j(then)d(this)h (License,)h(and)e(its)i(terms,)f(do)g(not)330 4902 y(apply)37 b(to)h(those)f(sections)h(when)f(y)m(ou)g(distribute)g(them)g(as)g (separate)h(w)m(orks.)61 b(But)37 b(when)g(y)m(ou)330 5011 y(distribute)29 b(the)g(same)g(sections)i(as)e(part)g(of)g(a)h (whole)f(whic)m(h)g(is)g(a)g(w)m(ork)h(based)e(on)h(the)h(Program,)330 5121 y(the)h(distribution)g(of)g(the)h(whole)f(m)m(ust)g(b)s(e)g(on)g (the)g(terms)g(of)h(this)f(License,)h(whose)f(p)s(ermissions)330 5230 y(for)22 b(other)h(licensees)g(extend)g(to)g(the)f(en)m(tire)h (whole,)i(and)c(th)m(us)h(to)h(eac)m(h)h(and)d(ev)m(ery)i(part)g (regardless)330 5340 y(of)31 b(who)e(wrote)i(it.)p eop end %%Page: 312 324 TeXDict begin 312 323 bop 150 -116 a FB(312)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)330 299 y FB(Th)m(us,)48 b(it)e(is)f(not)h(the)f(in)m(ten)m(t)h(of)g(this)f (section)h(to)g(claim)h(righ)m(ts)e(or)g(con)m(test)i(y)m(our)f(righ)m (ts)f(to)330 408 y(w)m(ork)34 b(written)f(en)m(tirely)i(b)m(y)f(y)m (ou;)h(rather,)g(the)f(in)m(ten)m(t)h(is)e(to)i(exercise)f(the)g(righ)m (t)g(to)h(con)m(trol)g(the)330 518 y(distribution)30 b(of)g(deriv)-5 b(ativ)m(e)32 b(or)f(collectiv)m(e)i(w)m(orks)e(based)f (on)g(the)h(Program.)330 650 y(In)41 b(addition,)j(mere)d(aggregation)j (of)e(another)f(w)m(ork)g(not)h(based)f(on)g(the)g(Program)h(with)f (the)330 759 y(Program)22 b(\(or)g(with)f(a)h(w)m(ork)g(based)f(on)h (the)g(Program\))g(on)f(a)h(v)m(olume)h(of)f(a)g(storage)h(or)f (distribution)330 869 y(medium)29 b(do)s(es)i(not)f(bring)g(the)g (other)h(w)m(ork)f(under)f(the)i(scop)s(e)f(of)h(this)f(License.)199 1000 y(3.)61 b(Y)-8 b(ou)38 b(ma)m(y)f(cop)m(y)h(and)f(distribute)f (the)i(Program)f(\(or)g(a)h(w)m(ork)f(based)g(on)g(it,)j(under)35 b(Section)j(2\))330 1110 y(in)30 b(ob)5 b(ject)31 b(co)s(de)g(or)g (executable)h(form)e(under)e(the)j(terms)f(of)h(Sections)g(1)g(and)f(2) h(ab)s(o)m(v)m(e)g(pro)m(vided)330 1219 y(that)g(y)m(ou)g(also)g(do)f (one)h(of)f(the)h(follo)m(wing:)379 1351 y(a.)61 b(Accompan)m(y)47 b(it)f(with)f(the)h(complete)h(corresp)s(onding)e(mac)m(hine-readable)i (source)e(co)s(de,)510 1461 y(whic)m(h)26 b(m)m(ust)g(b)s(e)f (distributed)g(under)f(the)j(terms)e(of)i(Sections)f(1)h(and)e(2)h(ab)s (o)m(v)m(e)i(on)d(a)i(medium)510 1570 y(customarily)k(used)f(for)g (soft)m(w)m(are)i(in)m(terc)m(hange;)g(or,)374 1702 y(b.)60 b(Accompan)m(y)30 b(it)g(with)f(a)h(written)f(o\013er,)i(v)-5 b(alid)29 b(for)g(at)i(least)f(three)g(y)m(ears,)g(to)g(giv)m(e)h(an)m (y)f(third)510 1811 y(part)m(y)-8 b(,)32 b(for)f(a)h(c)m(harge)g(no)f (more)h(than)f(y)m(our)g(cost)h(of)f(ph)m(ysically)i(p)s(erforming)d (source)h(distri-)510 1921 y(bution,)d(a)g(complete)i(mac)m (hine-readable)f(cop)m(y)f(of)g(the)g(corresp)s(onding)f(source)h(co)s (de,)h(to)g(b)s(e)510 2030 y(distributed)k(under)g(the)h(terms)g(of)h (Sections)g(1)f(and)g(2)h(ab)s(o)m(v)m(e)g(on)f(a)h(medium)e (customarily)510 2140 y(used)d(for)g(soft)m(w)m(are)i(in)m(terc)m (hange;)g(or,)384 2271 y(c.)61 b(Accompan)m(y)33 b(it)f(with)g(the)g (information)g(y)m(ou)g(receiv)m(ed)h(as)f(to)g(the)g(o\013er)g(to)h (distribute)e(cor-)510 2381 y(resp)s(onding)h(source)h(co)s(de.)50 b(\(This)32 b(alternativ)m(e)k(is)d(allo)m(w)m(ed)i(only)f(for)f (noncommercial)h(dis-)510 2491 y(tribution)e(and)f(only)h(if)g(y)m(ou)h (receiv)m(ed)g(the)f(program)g(in)g(ob)5 b(ject)33 b(co)s(de)f(or)g (executable)h(form)510 2600 y(with)d(suc)m(h)g(an)g(o\013er,)h(in)f (accord)i(with)e(Subsection)g(b)g(ab)s(o)m(v)m(e.\))330 2754 y(The)j(source)h(co)s(de)g(for)f(a)h(w)m(ork)g(means)f(the)h (preferred)e(form)h(of)h(the)g(w)m(ork)f(for)h(making)g(mo)s(di\014-) 330 2863 y(cations)e(to)f(it.)41 b(F)-8 b(or)31 b(an)f(executable)i(w)m (ork,)f(complete)g(source)g(co)s(de)f(means)h(all)g(the)f(source)h(co)s (de)330 2973 y(for)25 b(all)i(mo)s(dules)e(it)h(con)m(tains,)i(plus)c (an)m(y)i(asso)s(ciated)h(in)m(terface)h(de\014nition)d(\014les,)i (plus)d(the)i(scripts)330 3082 y(used)41 b(to)i(con)m(trol)h (compilation)f(and)f(installation)i(of)e(the)h(executable.)77 b(Ho)m(w)m(ev)m(er,)48 b(as)42 b(a)g(sp)s(e-)330 3192 y(cial)32 b(exception,)h(the)e(source)g(co)s(de)g(distributed)f(need)g (not)h(include)g(an)m(ything)g(that)h(is)f(normally)330 3302 y(distributed)39 b(\(in)g(either)h(source)g(or)f(binary)g(form\))h (with)f(the)h(ma)5 b(jor)39 b(comp)s(onen)m(ts)h(\(compiler,)330 3411 y(k)m(ernel,)c(and)e(so)g(on\))g(of)h(the)f(op)s(erating)h(system) f(on)g(whic)m(h)g(the)g(executable)i(runs,)e(unless)f(that)330 3521 y(comp)s(onen)m(t)e(itself)g(accompanies)h(the)e(executable.)330 3652 y(If)39 b(distribution)f(of)i(executable)h(or)e(ob)5 b(ject)40 b(co)s(de)f(is)h(made)f(b)m(y)g(o\013ering)h(access)g(to)g (cop)m(y)g(from)330 3762 y(a)e(designated)g(place,)i(then)e(o\013ering) g(equiv)-5 b(alen)m(t)39 b(access)f(to)h(cop)m(y)f(the)f(source)h(co)s (de)g(from)f(the)330 3871 y(same)29 b(place)g(coun)m(ts)f(as)h (distribution)e(of)h(the)h(source)f(co)s(de,)h(ev)m(en)g(though)e (third)h(parties)g(are)h(not)330 3981 y(comp)s(elled)i(to)g(cop)m(y)g (the)g(source)f(along)i(with)e(the)g(ob)5 b(ject)31 b(co)s(de.)199 4113 y(4.)61 b(Y)-8 b(ou)35 b(ma)m(y)h(not)f(cop)m(y)-8 b(,)37 b(mo)s(dify)-8 b(,)36 b(sublicense,)g(or)e(distribute)h(the)g (Program)f(except)i(as)f(expressly)330 4222 y(pro)m(vided)40 b(under)f(this)i(License.)71 b(An)m(y)41 b(attempt)h(otherwise)f(to)g (cop)m(y)-8 b(,)45 b(mo)s(dify)-8 b(,)43 b(sublicense)d(or)330 4332 y(distribute)26 b(the)h(Program)g(is)f(v)m(oid,)i(and)e(will)h (automatically)j(terminate)d(y)m(our)g(righ)m(ts)g(under)e(this)330 4441 y(License.)71 b(Ho)m(w)m(ev)m(er,)45 b(parties)c(who)f(ha)m(v)m(e) h(receiv)m(ed)h(copies,)i(or)c(righ)m(ts,)k(from)c(y)m(ou)g(under)f (this)330 4551 y(License)e(will)g(not)g(ha)m(v)m(e)h(their)f(licenses)g (terminated)h(so)f(long)g(as)g(suc)m(h)f(parties)h(remain)g(in)f(full) 330 4661 y(compliance.)199 4792 y(5.)61 b(Y)-8 b(ou)38 b(are)g(not)g(required)e(to)i(accept)h(this)f(License,)i(since)e(y)m (ou)f(ha)m(v)m(e)i(not)f(signed)f(it.)63 b(Ho)m(w)m(ev)m(er,)330 4902 y(nothing)24 b(else)g(gran)m(ts)h(y)m(ou)f(p)s(ermission)e(to)j (mo)s(dify)e(or)g(distribute)h(the)g(Program)g(or)f(its)h(deriv)-5 b(ativ)m(e)330 5011 y(w)m(orks.)38 b(These)23 b(actions)h(are)g (prohibited)e(b)m(y)h(la)m(w)h(if)f(y)m(ou)g(do)g(not)h(accept)g(this)f (License.)39 b(Therefore,)330 5121 y(b)m(y)d(mo)s(difying)f(or)h (distributing)f(the)h(Program)g(\(or)h(an)m(y)f(w)m(ork)g(based)g(on)f (the)i(Program\),)h(y)m(ou)330 5230 y(indicate)33 b(y)m(our)g (acceptance)h(of)f(this)f(License)h(to)h(do)e(so,)h(and)f(all)h(its)g (terms)f(and)g(conditions)h(for)330 5340 y(cop)m(ying,)f(distributing)d (or)i(mo)s(difying)e(the)i(Program)f(or)h(w)m(orks)f(based)g(on)g(it.)p eop end %%Page: 313 325 TeXDict begin 313 324 bop 2359 -116 a Fr(GNU)31 b(General)g(Public)f (License)92 b FB(313)199 299 y(6.)61 b(Eac)m(h)43 b(time)f(y)m(ou)g (redistribute)g(the)g(Program)g(\(or)g(an)m(y)h(w)m(ork)f(based)f(on)h (the)g(Program\),)k(the)330 408 y(recipien)m(t)33 b(automatically)j (receiv)m(es)e(a)f(license)g(from)f(the)g(original)i(licensor)f(to)g (cop)m(y)-8 b(,)34 b(distribute)330 518 y(or)i(mo)s(dify)g(the)g (Program)h(sub)5 b(ject)36 b(to)h(these)g(terms)f(and)g(conditions.)59 b(Y)-8 b(ou)37 b(ma)m(y)g(not)f(imp)s(ose)330 628 y(an)m(y)27 b(further)f(restrictions)h(on)g(the)g(recipien)m(ts')h(exercise)g(of)f (the)g(righ)m(ts)g(gran)m(ted)g(herein.)39 b(Y)-8 b(ou)28 b(are)330 737 y(not)j(resp)s(onsible)e(for)h(enforcing)h(compliance)h (b)m(y)e(third)f(parties)i(to)g(this)f(License.)199 874 y(7.)61 b(If,)27 b(as)g(a)g(consequence)h(of)f(a)g(court)g(judgmen)m(t) f(or)h(allegation)i(of)e(paten)m(t)h(infringemen)m(t)e(or)h(for)g(an)m (y)330 984 y(other)h(reason)f(\(not)h(limited)g(to)g(paten)m(t)h (issues\),)f(conditions)g(are)f(imp)s(osed)g(on)g(y)m(ou)h(\(whether)f (b)m(y)330 1093 y(court)c(order,)h(agreemen)m(t)g(or)f(otherwise\))g (that)g(con)m(tradict)i(the)d(conditions)h(of)g(this)g(License,)i(they) 330 1203 y(do)34 b(not)g(excuse)h(y)m(ou)f(from)g(the)g(conditions)h (of)f(this)g(License.)53 b(If)33 b(y)m(ou)i(cannot)g(distribute)e(so)i (as)330 1313 y(to)f(satisfy)g(sim)m(ultaneously)h(y)m(our)e (obligations)j(under)c(this)h(License)h(and)f(an)m(y)h(other)g(p)s (ertinen)m(t)330 1422 y(obligations,)44 b(then)c(as)g(a)g(consequence)h (y)m(ou)f(ma)m(y)g(not)g(distribute)g(the)g(Program)g(at)g(all.)70 b(F)-8 b(or)330 1532 y(example,)26 b(if)e(a)h(paten)m(t)g(license)g(w)m (ould)f(not)g(p)s(ermit)g(ro)m(y)m(alt)m(y-free)j(redistribution)c(of)h (the)h(Program)330 1641 y(b)m(y)35 b(all)h(those)f(who)f(receiv)m(e)j (copies)f(directly)f(or)g(indirectly)h(through)e(y)m(ou,)i(then)f(the)g (only)g(w)m(a)m(y)330 1751 y(y)m(ou)27 b(could)f(satisfy)h(b)s(oth)e (it)i(and)f(this)g(License)h(w)m(ould)f(b)s(e)g(to)h(refrain)e(en)m (tirely)j(from)e(distribution)330 1861 y(of)31 b(the)f(Program.)330 1998 y(If)43 b(an)m(y)g(p)s(ortion)g(of)g(this)h(section)g(is)f(held)g (in)m(v)-5 b(alid)44 b(or)f(unenforceable)g(under)f(an)m(y)i (particular)330 2107 y(circumstance,)j(the)d(balance)g(of)f(the)h (section)g(is)f(in)m(tended)g(to)h(apply)f(and)f(the)i(section)g(as)g (a)330 2217 y(whole)31 b(is)f(in)m(tended)g(to)h(apply)f(in)g(other)h (circumstances.)330 2354 y(It)41 b(is)f(not)h(the)f(purp)s(ose)f(of)i (this)f(section)i(to)f(induce)f(y)m(ou)h(to)g(infringe)f(an)m(y)h (paten)m(ts)g(or)g(other)330 2463 y(prop)s(ert)m(y)e(righ)m(t)i(claims) f(or)g(to)h(con)m(test)h(v)-5 b(alidit)m(y)41 b(of)f(an)m(y)g(suc)m(h)g (claims;)45 b(this)40 b(section)h(has)f(the)330 2573 y(sole)31 b(purp)s(ose)d(of)j(protecting)g(the)f(in)m(tegrit)m(y)i(of)e (the)h(free)f(soft)m(w)m(are)h(distribution)f(system,)g(whic)m(h)330 2682 y(is)35 b(implemen)m(ted)h(b)m(y)f(public)f(license)i(practices.) 56 b(Man)m(y)36 b(p)s(eople)f(ha)m(v)m(e)h(made)f(generous)h(con)m (tri-)330 2792 y(butions)f(to)h(the)f(wide)h(range)f(of)h(soft)m(w)m (are)h(distributed)d(through)h(that)h(system)f(in)g(reliance)i(on)330 2902 y(consisten)m(t)g(application)g(of)e(that)h(system;)i(it)e(is)g (up)e(to)i(the)g(author/donor)f(to)h(decide)g(if)g(he)f(or)330 3011 y(she)i(is)h(willing)g(to)g(distribute)f(soft)m(w)m(are)i(through) e(an)m(y)g(other)h(system)g(and)f(a)g(licensee)i(cannot)330 3121 y(imp)s(ose)30 b(that)h(c)m(hoice.)330 3258 y(This)26 b(section)j(is)e(in)m(tended)g(to)h(mak)m(e)g(thoroughly)f(clear)h (what)f(is)g(b)s(eliev)m(ed)h(to)g(b)s(e)f(a)g(consequence)330 3367 y(of)k(the)f(rest)h(of)f(this)g(License.)199 3504 y(8.)61 b(If)35 b(the)g(distribution)f(and/or)h(use)g(of)g(the)g (Program)g(is)g(restricted)h(in)f(certain)h(coun)m(tries)f(either)330 3614 y(b)m(y)g(paten)m(ts)h(or)g(b)m(y)f(cop)m(yrigh)m(ted)i(in)m (terfaces,)h(the)d(original)i(cop)m(yrigh)m(t)g(holder)e(who)g(places)h (the)330 3724 y(Program)g(under)f(this)h(License)h(ma)m(y)g(add)e(an)i (explicit)g(geographical)i(distribution)c(limitation)330 3833 y(excluding)29 b(those)g(coun)m(tries,)h(so)f(that)g(distribution) f(is)g(p)s(ermitted)h(only)f(in)g(or)h(among)g(coun)m(tries)330 3943 y(not)k(th)m(us)f(excluded.)48 b(In)32 b(suc)m(h)g(case,)j(this)d (License)i(incorp)s(orates)f(the)g(limitation)h(as)f(if)g(written)330 4052 y(in)d(the)h(b)s(o)s(dy)d(of)j(this)f(License.)199 4189 y(9.)61 b(The)26 b(F)-8 b(ree)28 b(Soft)m(w)m(are)g(F)-8 b(oundation)27 b(ma)m(y)h(publish)d(revised)h(and/or)h(new)f(v)m (ersions)h(of)g(the)g(General)330 4299 y(Public)37 b(License)g(from)g (time)h(to)f(time.)62 b(Suc)m(h)36 b(new)h(v)m(ersions)g(will)h(b)s(e)e (similar)h(in)g(spirit)g(to)h(the)330 4408 y(presen)m(t)30 b(v)m(ersion,)i(but)d(ma)m(y)i(di\013er)f(in)g(detail)i(to)f(address)e (new)h(problems)g(or)g(concerns.)330 4545 y(Eac)m(h)46 b(v)m(ersion)f(is)g(giv)m(en)h(a)f(distinguishing)f(v)m(ersion)i(n)m (um)m(b)s(er.)83 b(If)44 b(the)h(Program)g(sp)s(eci\014es)g(a)330 4655 y(v)m(ersion)36 b(n)m(um)m(b)s(er)f(of)h(this)f(License)i(whic)m (h)e(applies)h(to)h(it)f(and)f(\\an)m(y)i(later)f(v)m(ersion",)j(y)m (ou)d(ha)m(v)m(e)330 4765 y(the)d(option)g(of)g(follo)m(wing)h(the)f (terms)g(and)f(conditions)h(either)h(of)f(that)g(v)m(ersion)g(or)g(of)g (an)m(y)g(later)330 4874 y(v)m(ersion)e(published)d(b)m(y)i(the)g(F)-8 b(ree)31 b(Soft)m(w)m(are)g(F)-8 b(oundation.)42 b(If)29 b(the)i(Program)f(do)s(es)g(not)g(sp)s(ecify)g(a)330 4984 y(v)m(ersion)e(n)m(um)m(b)s(er)f(of)h(this)f(License,)i(y)m(ou)f (ma)m(y)h(c)m(ho)s(ose)f(an)m(y)h(v)m(ersion)f(ev)m(er)g(published)e(b) m(y)i(the)g(F)-8 b(ree)330 5093 y(Soft)m(w)m(are)31 b(F)-8 b(oundation.)154 5230 y(10.)61 b(If)29 b(y)m(ou)g(wish)g(to)h(incorp)s (orate)g(parts)f(of)g(the)g(Program)h(in)m(to)g(other)g(free)f (programs)g(whose)g(distri-)330 5340 y(bution)f(conditions)h(are)h (di\013eren)m(t,)f(write)g(to)h(the)f(author)f(to)i(ask)e(for)h(p)s (ermission.)39 b(F)-8 b(or)29 b(soft)m(w)m(are)p eop end %%Page: 314 326 TeXDict begin 314 325 bop 150 -116 a FB(314)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)330 299 y FB(whic)m(h)24 b(is)g(cop)m(yrigh)m(ted)h(b)m(y)f(the)g(F)-8 b(ree)25 b(Soft)m(w)m(are)g(F)-8 b(oundation,)26 b(write)e(to)h(the)f (F)-8 b(ree)25 b(Soft)m(w)m(are)g(F)-8 b(oun-)330 408 y(dation;)29 b(w)m(e)f(sometimes)h(mak)m(e)f(exceptions)h(for)e(this.) 40 b(Our)26 b(decision)i(will)g(b)s(e)e(guided)i(b)m(y)f(the)h(t)m(w)m (o)330 518 y(goals)c(of)f(preserving)f(the)g(free)h(status)g(of)f(all)i (deriv)-5 b(ativ)m(es)24 b(of)e(our)g(free)h(soft)m(w)m(are)h(and)e(of) h(promoting)330 628 y(the)31 b(sharing)f(and)f(reuse)h(of)h(soft)m(w)m (are)h(generally)-8 b(.)330 860 y FA(NO)45 b(W)-15 b(ARRANTY)154 1020 y FB(11.)61 b(BECA)m(USE)40 b(THE)f(PR)m(OGRAM)i(IS)e(LICENSED)g (FREE)g(OF)h(CHAR)m(GE,)h(THERE)e(IS)g(NO)330 1129 y(W)-10 b(ARRANTY)42 b(F)m(OR)h(THE)e(PR)m(OGRAM,)i(TO)e(THE)h(EXTENT)f (PERMITTED)g(BY)i(AP-)330 1239 y(PLICABLE)g(LA)-10 b(W.)82 b(EX)m(CEPT)43 b(WHEN)i(OTHER)-10 b(WISE)42 b(ST)-8 b(A)g(TED)44 b(IN)g(WRITING)g(THE)330 1348 y(COPYRIGHT)25 b(HOLDERS)g(AND/OR)i (OTHER)e(P)-8 b(AR)g(TIES)25 b(PR)m(O)m(VIDE)i(THE)e(PR)m(OGRAM)330 1458 y(\\AS)31 b(IS")g(WITHOUT)g(W)-10 b(ARRANTY)32 b(OF)f(ANY)h(KIND,) f(EITHER)g(EXPRESSED)f(OR)h(IM-)330 1567 y(PLIED,)25 b(INCLUDING,)i(BUT)e(NOT)g(LIMITED)g(TO,)g(THE)h(IMPLIED)f(W)-10 b(ARRANTIES)25 b(OF)330 1677 y(MER)m(CHANT)-8 b(ABILITY)25 b(AND)g(FITNESS)e(F)m(OR)h(A)g(P)-8 b(AR)g(TICULAR)24 b(PURPOSE.)38 b(THE)24 b(EN-)330 1787 y(TIRE)33 b(RISK)g(AS)h(TO)f(THE) h(QUALITY)f(AND)i(PERF)m(ORMANCE)g(OF)f(THE)f(PR)m(OGRAM)330 1896 y(IS)d(WITH)i(YOU.)43 b(SHOULD)31 b(THE)g(PR)m(OGRAM)h(PR)m(O)m (VE)f(DEFECTIVE,)g(YOU)g(ASSUME)330 2006 y(THE)f(COST)f(OF)h(ALL)g (NECESSAR)-8 b(Y)30 b(SER)-10 b(VICING,)30 b(REP)-8 b(AIR)30 b(OR)g(CORRECTION.)154 2140 y(12.)61 b(IN)26 b(NO)g(EVENT)g(UNLESS)f (REQUIRED)h(BY)h(APPLICABLE)f(LA)-10 b(W)26 b(OR)g(A)m(GREED)h(TO)f(IN) 330 2250 y(WRITING)37 b(WILL)f(ANY)i(COPYRIGHT)e(HOLDER,)h(OR)f(ANY)h (OTHER)f(P)-8 b(AR)g(TY)38 b(WHO)330 2359 y(MA)-8 b(Y)52 b(MODIFY)g(AND/OR)g(REDISTRIBUTE)e(THE)h(PR)m(OGRAM)h(AS)f(PERMITTED) 330 2469 y(ABO)m(VE,)40 b(BE)f(LIABLE)f(TO)g(YOU)h(F)m(OR)g(D)m(AMA)m (GES,)h(INCLUDING)f(ANY)h(GENERAL,)330 2579 y(SPECIAL,)e(INCIDENT)-8 b(AL)40 b(OR)e(CONSEQUENTIAL)g(D)m(AMA)m(GES)j(ARISING)e(OUT)g(OF)330 2688 y(THE)44 b(USE)g(OR)g(INABILITY)h(TO)f(USE)g(THE)g(PR)m(OGRAM)h (\(INCLUDING)h(BUT)e(NOT)330 2798 y(LIMITED)29 b(TO)g(LOSS)f(OF)h(D)m (A)-8 b(T)g(A)31 b(OR)e(D)m(A)-8 b(T)g(A)31 b(BEING)f(RENDERED)g(INA)m (CCURA)-8 b(TE)29 b(OR)330 2907 y(LOSSES)38 b(SUST)-8 b(AINED)40 b(BY)h(YOU)f(OR)g(THIRD)g(P)-8 b(AR)g(TIES)40 b(OR)g(A)h(F)-10 b(AILURE)40 b(OF)g(THE)330 3017 y(PR)m(OGRAM)f(TO)f (OPERA)-8 b(TE)38 b(WITH)h(ANY)g(OTHER)f(PR)m(OGRAMS\),)h(EVEN)g(IF)f (SUCH)330 3127 y(HOLDER)33 b(OR)h(OTHER)f(P)-8 b(AR)g(TY)34 b(HAS)f(BEEN)h(AD)m(VISED)g(OF)g(THE)f(POSSIBILITY)f(OF)330 3236 y(SUCH)e(D)m(AMA)m(GES.)150 3469 y FA(END)45 b(OF)g(TERMS)f(AND)h (CONDITIONS)p eop end %%Page: 315 327 TeXDict begin 315 326 bop 2359 -116 a Fr(GNU)31 b(General)g(Public)f (License)92 b FB(315)150 299 y FA(Ho)l(w)46 b(to)f(Apply)f(These)h(T) -11 b(erms)45 b(to)g(Y)-11 b(our)44 b(New)i(Programs)150 458 y FB(If)20 b(y)m(ou)i(dev)m(elop)f(a)h(new)e(program,)j(and)d(y)m (ou)i(w)m(an)m(t)f(it)h(to)f(b)s(e)g(of)g(the)g(greatest)i(p)s(ossible) d(use)h(to)g(the)g(public,)150 568 y(the)28 b(b)s(est)f(w)m(a)m(y)i(to) g(ac)m(hiev)m(e)h(this)e(is)g(to)g(mak)m(e)h(it)g(free)f(soft)m(w)m (are)h(whic)m(h)e(ev)m(ery)m(one)j(can)e(redistribute)g(and)150 677 y(c)m(hange)k(under)c(these)j(terms.)275 812 y(T)-8 b(o)29 b(do)h(so,)g(attac)m(h)h(the)f(follo)m(wing)h(notices)f(to)h (the)e(program.)40 b(It)30 b(is)g(safest)g(to)g(attac)m(h)h(them)f(to)g (the)150 922 y(start)j(of)g(eac)m(h)h(source)e(\014le)h(to)g(most)g (e\013ectiv)m(ely)j(con)m(v)m(ey)e(the)e(exclusion)i(of)e(w)m(arran)m (t)m(y;)j(and)d(eac)m(h)i(\014le)150 1031 y(should)29 b(ha)m(v)m(e)j(at)f(least)h(the)e(\\cop)m(yrigh)m(t")j(line)e(and)e(a)i (p)s(oin)m(ter)g(to)g(where)f(the)g(full)g(notice)i(is)e(found.)390 1143 y Fc(one)40 b(line)g(to)g(give)g(the)g(program's)h(name)f(and)g (an)g(idea)g(of)g(what)g(it)f(does.)390 1230 y Fm(Copyright)i(\(C\))f Fc(year)88 b(name)40 b(of)g(author)390 1405 y Fm(This)g(program)h(is)f (free)g(software;)h(you)f(can)g(redistribute)i(it)e(and/or)390 1492 y(modify)h(it)e(under)i(the)f(terms)g(of)g(the)g(GNU)f(General)i (Public)g(License)390 1579 y(as)f(published)h(by)f(the)g(Free)g (Software)h(Foundation;)g(either)g(version)g(2)390 1666 y(of)f(the)g(License,)h(or)e(\(at)h(your)g(option\))h(any)f(later)g (version.)390 1841 y(This)g(program)h(is)f(distributed)h(in)f(the)g (hope)g(that)g(it)g(will)g(be)g(useful,)390 1928 y(but)g(WITHOUT)h(ANY) f(WARRANTY;)h(without)g(even)f(the)g(implied)h(warranty)g(of)390 2015 y(MERCHANTABILITY)i(or)c(FITNESS)i(FOR)f(A)g(PARTICULAR)h (PURPOSE.)80 b(See)40 b(the)390 2102 y(GNU)g(General)h(Public)f (License)h(for)f(more)g(details.)390 2276 y(You)g(should)g(have)h (received)g(a)e(copy)h(of)g(the)g(GNU)g(General)h(Public)f(License)390 2364 y(along)g(with)g(this)h(program;)g(if)e(not,)i(write)f(to)g(the)f (Free)i(Software)390 2451 y(Foundation,)h(Inc.,)e(51)g(Franklin)h (Street,)g(Fifth)f(Floor,)h(Boston,)f(MA)g(02111,)h(USA.)275 2585 y FB(Also)31 b(add)e(information)i(on)f(ho)m(w)h(to)g(con)m(tact)i (y)m(ou)d(b)m(y)g(electronic)j(and)d(pap)s(er)f(mail.)275 2720 y(If)f(the)g(program)h(is)f(in)m(teractiv)m(e,)k(mak)m(e)e(it)f (output)f(a)h(short)f(notice)i(lik)m(e)g(this)e(when)g(it)h(starts)g (in)f(an)150 2829 y(in)m(teractiv)m(e)33 b(mo)s(de:)390 2941 y Fm(Gnomovision)42 b(version)f(69,)e(Copyright)j(\(C\))e Fc(year)48 b(name)41 b(of)e(author)390 3029 y Fm(Gnomovision)j(comes)e (with)g(ABSOLUTELY)i(NO)d(WARRANTY;)j(for)e(details)390 3116 y(type)g(`show)g(w'.)80 b(This)40 b(is)f(free)i(software,)g(and)f (you)g(are)g(welcome)390 3203 y(to)g(redistribute)i(it)d(under)i (certain)g(conditions;)g(type)f(`show)h(c')390 3290 y(for)f(details.) 275 3425 y FB(The)27 b(h)m(yp)s(othetical)i(commands)f(`)p Fz(show)h(w)p FB(')f(and)f(`)p Fz(show)j(c)p FB(')d(should)g(sho)m(w)h (the)g(appropriate)g(parts)g(of)150 3534 y(the)38 b(General)h(Public)e (License.)64 b(Of)37 b(course,)j(the)f(commands)e(y)m(ou)h(use)g(ma)m (y)g(b)s(e)f(called)i(something)150 3644 y(other)25 b(than)f(`)p Fz(show)29 b(w)p FB(')c(and)f(`)p Fz(show)29 b(c)p FB(';)e(they)d (could)h(ev)m(en)g(b)s(e)f(mouse-clic)m(ks)i(or)f(men)m(u)f (items|whatev)m(er)150 3753 y(suits)30 b(y)m(our)g(program.)275 3888 y(Y)-8 b(ou)28 b(should)f(also)i(get)g(y)m(our)f(emplo)m(y)m(er)h (\(if)f(y)m(ou)g(w)m(ork)g(as)h(a)f(programmer\))g(or)g(y)m(our)f(sc)m (ho)s(ol,)j(if)e(an)m(y)-8 b(,)150 3998 y(to)34 b(sign)g(a)f(\\cop)m (yrigh)m(t)j(disclaimer")e(for)g(the)f(program,)h(if)g(necessary)-8 b(.)51 b(Here)34 b(is)f(a)h(sample;)h(alter)g(the)150 4107 y(names:)390 4219 y Fm(Yoyodyne,)41 b(Inc.,)g(hereby)f(disclaims)i (all)d(copyright)390 4306 y(interest)i(in)f(the)g(program)g (`Gnomovision')390 4394 y(\(which)h(makes)f(passes)h(at)e(compilers\))j (written)390 4481 y(by)e(James)g(Hacker.)390 4655 y Fc(signature)h(of)f (Ty)g(Coon)p Fm(,)g(1)f(April)i(1989)390 4742 y(Ty)f(Coon,)g(President) h(of)f(Vice)275 4877 y FB(This)20 b(General)h(Public)g(License)g(do)s (es)g(not)g(p)s(ermit)f(incorp)s(orating)h(y)m(our)g(program)f(in)m(to) i(proprietary)150 4986 y(programs.)38 b(If)22 b(y)m(our)h(program)f(is) h(a)g(subroutine)f(library)-8 b(,)25 b(y)m(ou)e(ma)m(y)g(consider)g(it) g(more)g(useful)f(to)i(p)s(ermit)150 5096 y(linking)36 b(proprietary)g(applications)i(with)e(the)g(library)-8 b(.)59 b(If)35 b(this)i(is)f(what)g(y)m(ou)h(w)m(an)m(t)g(to)g(do,)h (use)e(the)150 5205 y(GNU)31 b(Lesser)f(General)i(Public)e(License)h (instead)f(of)h(this)f(License.)p eop end %%Page: 316 328 TeXDict begin 316 327 bop 150 -116 a FB(316)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fu(GNU)54 b(F)-13 b(ree)53 b(Do)t(cumen)l(tation)e(License)1396 502 y FB(V)-8 b(ersion)31 b(1.2,)h(No)m(v)m(em)m(b)s(er)g(2002)390 635 y(Cop)m(yrigh)m(t)842 632 y(c)817 635 y Fy(\015)e FB(2000,2001,2002)36 b(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 b(Inc.)390 745 y(51)f(F)-8 b(ranklin)31 b(Street,)g(Fifth)g(Flo)s(or,)g(Boston,)g(MA)61 b(02110-1301,)35 b(USA)390 964 y(Ev)m(ery)m(one)c(is)g(p)s(ermitted)f(to)h(cop)m(y)g (and)f(distribute)g(v)m(erbatim)h(copies)390 1074 y(of)g(this)f (license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f(is)f(not)h(allo)m (w)m(ed.)199 1207 y(0.)61 b(PREAMBLE)330 1340 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g(a)g(man)m (ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 1450 y(useful)29 b(do)s(cumen)m(t)h Fx(free)36 b FB(in)29 b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j (the)e(e\013ectiv)m(e)j(freedom)330 1559 y(to)f(cop)m(y)g(and)f (redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i (either)f(commercially)h(or)e(non-)330 1669 y(commercially)-8 b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f (the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 1778 y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g (considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 1888 y(made)30 b(b)m(y)h(others.)330 2021 y(This)22 b(License)i(is)f(a) h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 2131 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g (sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 2240 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) e(for)g(free)h(soft)m(w)m(are.)330 2373 y(W)-8 b(e)31 b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h (for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 2483 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) 65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 2592 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g (to)330 2702 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g (for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 b(ject)30 b(matter)i(or)330 2812 y(whether)f(it)h(is)f(published)f(as)i (a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h (License)g(principally)f(for)330 2921 y(w)m(orks)f(whose)h(purp)s(ose)d (is)j(instruction)f(or)g(reference.)199 3054 y(1.)61 b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3187 y(This)39 b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i (in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3297 y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 3407 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f (a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d (in)330 3516 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j (conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 3626 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h (or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g (a)h(licensee,)i(and)330 3735 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 3845 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) m(yrigh)m(t)j(la)m(w.)330 3978 y(A)i(\\Mo)s(di\014ed)f(V)-8 b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f (con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4088 y(a)k(p)s(ortion)f (of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s (di\014cations)f(and/or)h(translated)g(in)m(to)330 4197 y(another)31 b(language.)330 4330 y(A)26 b(\\Secondary)g(Section")h(is) f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f (the)g(Do)s(cumen)m(t)330 4440 y(that)c(deals)g(exclusiv)m(ely)h(with)e (the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f (Do)s(cumen)m(t)330 4549 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m (erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) m(tains)h(nothing)f(that)330 4659 y(could)j(fall)h(directly)g(within)f (that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 4769 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 b(The)330 4878 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e (historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 b(or)g(with)g(related)330 4988 y(matters,)38 b(or)d(of)h(legal,)i (commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s (osition)f(regarding)330 5097 y(them.)330 5230 y(The)25 b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g (Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s (cumen)m(t)g(is)g(released)p eop end %%Page: 317 329 TeXDict begin 317 328 bop 2143 -116 a Fr(GNU)31 b(F)-8 b(ree)32 b(Do)s(cumen)m(tation)f(License)92 b FB(317)330 299 y(under)26 b(this)i(License.)40 b(If)27 b(a)h(section)h(do)s(es)f (not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h(de\014nition)e(of)h(Secondary)f (then)h(it)g(is)330 408 y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g (designated)g(as)g(In)m(v)-5 b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero)e(In)m(v)-5 b(arian)m(t)330 518 y(Sections.)39 b(If)25 b(the)f(Do)s(cumen)m(t)i(do) s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v)-5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 655 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short)g(passages)g (of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 b(ron)m(t-Co)m(v)m(er)330 765 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f(Do)s(cumen)m(t)h (is)f(released)g(under)330 874 y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i (most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 984 y(b)s(e)k(at)h(most)g(25)g(w)m(ords.)330 1121 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g(the)f(Do)s (cumen)m(t)h(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 b(,)38 b(represen)m(ted)330 1230 y(in)d(a)h(format)g(whose)g(sp)s (eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g (public,)h(that)f(is)g(suitable)g(for)330 1340 y(revising)c(the)g(do)s (cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) f(or)f(\(for)h(images)h(com-)330 1450 y(p)s(osed)23 b(of)h(pixels\))g (generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g (widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1559 y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g (formatters)f(or)g(for)g(automatic)i(translation)f(to)330 1669 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g (otherwise)330 1778 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g (whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f (arranged)g(to)330 1888 y(th)m(w)m(art)27 b(or)g(discourage)g (subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 b(An)27 b(image)330 1998 y(format)35 b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g (substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g (is)330 2107 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i (\\Opaque".)330 2244 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) -8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fg(asci)r(i)g FB(without)330 2354 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j (LaT)1759 2373 y(E)1810 2354 y(X)e(input)f(format,)j Fb(SGML)f FB(or)f Fb(XML)g FB(using)g(a)g(publicly)330 2463 y(a)m(v)-5 b(ailable)42 b Fb(DTD)p FB(,)g(and)d (standard-conforming)h(simple)g Fb(HTML)p FB(,)g(P)m(ostScript)h(or)f Fb(PDF)g FB(designed)330 2573 y(for)e(h)m(uman)g(mo)s(di\014cation.)65 b(Examples)38 b(of)h(transparen)m(t)f(image)i(formats)e(include)g Fb(PNG)p FB(,)h Fb(X)n(CF)330 2682 y FB(and)h Fb(JPG)p FB(.)g(Opaque)h(formats)g(include)f(proprietary)g(formats)h(that)h(can) f(b)s(e)f(read)g(and)h(edited)330 2792 y(only)54 b(b)m(y)f(proprietary) h(w)m(ord)f(pro)s(cessors,)59 b Fb(SGML)54 b FB(or)f Fb(XML)h FB(for)g(whic)m(h)f(the)h Fb(DTD)g FB(and/or)330 2902 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g(generally)i(a)m(v)-5 b(ailable,)71 b(and)60 b(the)h(mac)m(hine-generated)j Fb(HTML)p FB(,)330 3011 y(P)m(ostScript)31 b(or)f Fb(PDF)h FB(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s(cessors)g(for)g(output) g(purp)s(oses)f(only)-8 b(.)330 3148 y(The)34 b(\\Title)h(P)m(age")i (means,)e(for)f(a)h(prin)m(ted)f(b)s(o)s(ok,)h(the)f(title)i(page)f (itself,)h(plus)e(suc)m(h)f(follo)m(wing)330 3258 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8 b(,)30 b(the)e(material)h(this)f(License)g(requires)f(to)h(app)s(ear)f(in)h (the)330 3367 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g (formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e(title)j(page)e (as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3477 y(means)j(the)f(text)i (near)e(the)h(most)g(prominen)m(t)g(app)s(earance)f(of)h(the)g(w)m (ork's)g(title,)h(preceding)f(the)330 3587 y(b)s(eginning)f(of)g(the)h (b)s(o)s(dy)e(of)h(the)h(text.)330 3724 y(A)f(section)h(\\En)m(titled)g (XYZ")f(means)f(a)h(named)g(subunit)e(of)h(the)h(Do)s(cumen)m(t)h (whose)e(title)i(either)330 3833 y(is)d(precisely)g(XYZ)g(or)f(con)m (tains)i(XYZ)f(in)f(paren)m(theses)i(follo)m(wing)g(text)g(that)f (translates)h(XYZ)e(in)330 3943 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g(sp)s(eci\014c)g(section)h(name)f (men)m(tioned)h(b)s(elo)m(w,)g(suc)m(h)330 4052 y(as)i(\\Ac)m(kno)m (wledgemen)m(ts",)33 b(\\Dedications",)e(\\Endorsemen)m(ts",)e(or)f (\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4162 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g(section)g(when)f(y)m(ou)h(mo)s (dify)e(the)i(Do)s(cumen)m(t)h(means)e(that)h(it)g(remains)g(a)330 4271 y(section)e(\\En)m(titled)f(XYZ")g(according)g(to)g(this)g (de\014nition.)330 4408 y(The)c(Do)s(cumen)m(t)i(ma)m(y)f(include)f(W) -8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)g(the)g(notice)h(whic)m (h)e(states)i(that)330 4518 y(this)34 b(License)g(applies)g(to)h(the)f (Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 4628 y(b)s(e)k(included)g(b)m (y)g(reference)h(in)g(this)f(License,)j(but)d(only)h(as)g(regards)f (disclaiming)i(w)m(arran)m(ties:)330 4737 y(an)m(y)e(other)g (implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330 4847 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)199 4984 y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)330 5121 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h(the)g(Do)s(cumen)m(t)h (in)f(an)m(y)g(medium,)h(either)g(commercially)h(or)330 5230 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f (License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j(and)42 b(the)h(license)330 5340 y(notice)37 b(sa)m(ying)g(this)e(License)i (applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e(in)i(all)g (copies,)j(and)p eop end %%Page: 318 330 TeXDict begin 318 329 bop 150 -116 a FB(318)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)330 299 y FB(that)d(y)m(ou)g(add)f(no)h(other)f(conditions)h(whatso)s(ev)m (er)h(to)f(those)g(of)g(this)f(License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 408 y(tec)m(hnical)35 b(measures)d(to)i (obstruct)f(or)g(con)m(trol)h(the)f(reading)g(or)g(further)e(cop)m (ying)j(of)f(the)g(copies)330 518 y(y)m(ou)25 b(mak)m(e)g(or)g (distribute.)38 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h (comp)s(ensation)f(in)f(exc)m(hange)j(for)d(copies.)330 628 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f(n)m(um)m(b)s (er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g(the)f (conditions)330 737 y(in)e(section)i(3.)330 883 y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g (conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g (publicly)330 993 y(displa)m(y)31 b(copies.)199 1139 y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1285 y(If)25 b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g (that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 1395 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f (100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 1504 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i (the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1614 y(these)j(Co)m(v)m (er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 1724 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f (the)h(publisher)330 1833 y(of)k(these)h(copies.)53 b(The)34 b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i (with)d(all)j(w)m(ords)d(of)i(the)f(title)330 1943 y(equally)e (prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g (other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 2052 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) 330 2162 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d (b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 2271 y(resp)s(ects.)330 2418 y(If)32 b(the)h(required)f(texts)i(for)e (either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g (legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2527 y(the)h(\014rst)f (ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 2637 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 2783 y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f (the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 2892 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g (T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) 330 3002 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h (Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d (whic)m(h)330 3112 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e (has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m (ork)330 3221 y(proto)s(cols)40 b(a)f(complete)h(T)-8 b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g (added)f(material.)67 b(If)330 3331 y(y)m(ou)39 b(use)g(the)g(latter)h (option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e (steps,)k(when)d(y)m(ou)h(b)s(egin)330 3440 y(distribution)f(of)g (Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 3550 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s (cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h (time)330 3660 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i (\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h (of)f(that)330 3769 y(edition)31 b(to)g(the)g(public.)330 3915 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g (con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 4025 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s (er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m (vide)g(y)m(ou)330 4134 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g (the)f(Do)s(cumen)m(t.)199 4281 y(4.)61 b(MODIFICA)-8 b(TIONS)330 4427 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) e(the)h(conditions)330 4536 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f (V)-8 b(ersion)22 b(under)d(precisely)330 4646 y(this)29 b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f (licensing)330 4755 y(distribution)k(and)h(mo)s(di\014cation)g(of)h (the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s (ossesses)f(a)i(cop)m(y)g(of)330 4865 y(it.)41 b(In)30 b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s (di\014ed)e(V)-8 b(ersion:)357 5011 y(A.)60 b(Use)33 b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e (an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510 5121 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m (ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 b(,)510 5230 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g (the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) h(title)h(as)510 5340 y(a)e(previous)f(v)m(ersion)g(if)h(the)f (original)i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s (ermission.)p eop end %%Page: 319 331 TeXDict begin 319 330 bop 2143 -116 a Fr(GNU)31 b(F)-8 b(ree)32 b(Do)s(cumen)m(tation)f(License)92 b FB(319)360 299 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h (one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c (for)510 408 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g (Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h (\014v)m(e)510 518 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s (cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g (few)m(er)510 628 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g (y)m(ou)g(from)f(this)g(requiremen)m(t.)359 766 y(C.)60 b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g (publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 b(as)f(the)510 876 y(publisher.)355 1015 y(D.)61 b(Preserv)m(e)31 b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) 363 1154 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i (notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g (other)510 1263 y(cop)m(yrigh)m(t)g(notices.)365 1402 y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g (notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 1512 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g (form)510 1621 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 1760 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f (full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e (required)g(Co)m(v)m(er)510 1870 y(T)-8 b(exts)31 b(giv)m(en)g(in)f (the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2008 y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) 392 2147 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g (\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g (item)510 2257 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d (authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)510 2366 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e (the)g(Do)s(cu-)510 2476 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f (title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s (cumen)m(t)510 2586 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i (then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)37 b(as)510 2695 y(stated)31 b(in)f(the)h(previous)f(sen)m (tence.)378 2834 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s (cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m (t)h(for)g(public)e(access)j(to)510 2944 y(a)e(T)-8 b(ransparen)m(t)30 b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3053 y(the)g(Do)s(cumen)m (t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3163 y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h (published)510 3272 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e (the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) d(of)i(the)510 3382 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s (ermission.)354 3521 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m (titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k (Preserv)m(e)c(the)g(Title)510 3630 y(of)j(the)f(section,)j(and)d (preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) h(of)f(eac)m(h)i(of)f(the)510 3740 y(con)m(tributor)k(ac)m(kno)m (wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 3879 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f (in)f(their)g(text)i(and)510 3988 y(in)f(their)g(titles.)58 b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 4098 y(section)c(titles.)341 4237 y(M.)61 b(Delete)33 b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 4346 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 4485 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f (to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g (in)510 4595 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 b(Section.)354 4734 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 4902 y(If)h(the)g(Mo)s(di\014ed)g (V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f (app)s(endices)g(that)h(qualify)330 5011 y(as)28 b(Secondary)g (Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h (Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5121 y(y)m(our)k(option)h (designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)330 5230 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 b(ersion's)36 b(license)g(notice.)57 b(These)330 5340 y(titles)32 b(m)m(ust)e(b)s(e)g (distinct)h(from)e(an)m(y)i(other)g(section)g(titles.)p eop end %%Page: 320 332 TeXDict begin 320 331 bop 150 -116 a FB(320)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)330 299 y FB(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section)i(En)m(titled)f (\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g(nothing)g(but) 330 408 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s(di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 b(parties|for)g(example,)g (statemen)m(ts)i(of)330 518 y(p)s(eer)27 b(review)g(or)g(that)h(the)f (text)i(has)d(b)s(een)h(appro)m(v)m(ed)g(b)m(y)g(an)h(organization)h (as)e(the)h(authoritativ)m(e)330 628 y(de\014nition)i(of)h(a)f (standard.)330 757 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g (up)e(to)i(\014v)m(e)g(w)m(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er) 30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 867 y(to)g(25)g(w)m(ords)e(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i(the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s(di\014ed)330 976 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f(F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1086 y(added)27 b(b)m(y)g(\(or)h(through) f(arrangemen)m(ts)h(made)g(b)m(y\))g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t)g(already)330 1196 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g(same)h(co)m(v)m (er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m(y)g(arrangemen)m (t)330 1305 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m(y)i(y)m(ou)f(are)f (acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g(not)f(add)g (another;)j(but)330 1415 y(y)m(ou)c(ma)m(y)h(replace)g(the)f(old)g (one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e (publisher)f(that)330 1524 y(added)e(the)g(old)h(one.)330 1654 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s (cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s (ermission)330 1763 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g (for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g (Mo)s(di\014ed)330 1873 y(V)-8 b(ersion.)199 2002 y(5.)61 b(COMBINING)31 b(DOCUMENTS)330 2132 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m (bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h (released)g(under)f(this)g(License,)330 2242 y(under)f(the)h(terms)g (de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f (v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2351 y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s (cumen)m(ts,)330 2461 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g (as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) g(w)m(ork)f(in)h(its)g(license)330 2570 y(notice,)32 b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 2700 y(The)e(com)m(bined)g(w)m (ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) i(and)d(m)m(ultiple)i(iden)m(tical)330 2809 y(In)m(v)-5 b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h (single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m (v)-5 b(arian)m(t)330 2919 y(Sections)27 b(with)g(the)g(same)g(name)g (but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f (eac)m(h)h(suc)m(h)f(section)330 3029 y(unique)33 b(b)m(y)h(adding)f (at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g (the)g(original)h(author)f(or)330 3138 y(publisher)23 b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m (um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 3248 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h (com)m(bined)330 3357 y(w)m(ork.)330 3487 y(In)41 b(the)g(com)m (bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g (En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 3597 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h (En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 3706 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 b(Y)-8 b(ou)330 3816 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m (titled)f(\\Endorsemen)m(ts.")199 3945 y(6.)61 b(COLLECTIONS)28 b(OF)i(DOCUMENTS)330 4075 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f (collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g (do)s(cumen)m(ts)f(released)330 4184 y(under)41 b(this)h(License,)k (and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f (the)h(v)-5 b(arious)330 4294 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 b(pro)m(vided)42 b(that)i(y)m(ou)330 4403 y(follo)m(w)38 b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g (of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 4513 y(other)31 b(resp)s(ects.)330 4643 y(Y)-8 b(ou)32 b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h (collection,)i(and)d(distribute)g(it)h(individu-)330 4752 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g (a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 4862 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g (other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 4971 y(that)d(do)s(cumen)m(t.)199 5101 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h(W)m(ORKS)330 5230 y(A)d(compilation)i (of)e(the)g(Do)s(cumen)m(t)h(or)f(its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep)s(enden)m(t)330 5340 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h(on)f(a)g(v)m (olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g(is)h(called)p eop end %%Page: 321 333 TeXDict begin 321 332 bop 2143 -116 a Fr(GNU)31 b(F)-8 b(ree)32 b(Do)s(cumen)m(tation)f(License)92 b FB(321)330 299 y(an)30 b(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i(resulting)e (from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g(the)330 408 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e(b)s(ey)m (ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 b(When)330 518 y(the)28 b(Do)s(cumen)m(t)g(is)g(included)f(an)g (aggregate,)32 b(this)27 b(License)h(do)s(es)g(not)g(apply)f(to)h(the)g (other)g(w)m(orks)330 628 y(in)i(the)h(aggregate)i(whic)m(h)d(are)h (not)f(themselv)m(es)i(deriv)-5 b(ativ)m(e)32 b(w)m(orks)e(of)h(the)f (Do)s(cumen)m(t.)330 781 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f (these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 890 y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f (of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m (er)330 1000 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m (ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h (aggregate,)j(or)d(the)330 1110 y(electronic)37 b(equiv)-5 b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f (in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 1219 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f (brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1372 y(8.)61 b(TRANSLA)-8 b(TION)330 1526 y(T)g(ranslation)41 b(is)f(considered)f(a) i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e (translations)330 1635 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h (terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 b(arian)m(t)45 b(Sections)g(with)330 1745 y(translations)h(requires)f (sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i (holders,)i(but)c(y)m(ou)g(ma)m(y)330 1854 y(include)24 b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 1964 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f (License,)i(and)d(all)j(the)330 2073 y(license)45 b(notices)g(in)f(the) g(Do)s(cumen)m(t,)49 b(and)43 b(an)m(y)h(W)-8 b(arran)m(y)45 b(Disclaimers,)k(pro)m(vided)44 b(that)h(y)m(ou)330 2183 y(also)c(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g (License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 2293 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f (translation)i(and)330 2402 y(the)f(original)i(v)m(ersion)e(of)h(this)f (License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m (ersion)g(will)330 2512 y(prev)-5 b(ail.)330 2665 y(If)28 b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m (kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 2775 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m (e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 2884 y(c)m(hanging)j(the)g(actual)h(title.)199 3037 y(9.)61 b(TERMINA)-8 b(TION)330 3191 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h (Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3300 y(pro)m(vided)41 b(for)h(under)e(this)i(License.)75 b(An)m(y)42 b(other)g(attempt)h(to)g (cop)m(y)-8 b(,)46 b(mo)s(dify)-8 b(,)44 b(sublicense)e(or)330 3410 y(distribute)36 b(the)h(Do)s(cumen)m(t)g(is)g(v)m(oid,)i(and)d (will)h(automatically)i(terminate)f(y)m(our)e(righ)m(ts)h(under)330 3519 y(this)28 b(License.)40 b(Ho)m(w)m(ev)m(er,)31 b(parties)d(who)f (ha)m(v)m(e)i(receiv)m(ed)g(copies,)h(or)d(righ)m(ts,)i(from)f(y)m(ou)g (under)e(this)330 3629 y(License)37 b(will)g(not)g(ha)m(v)m(e)h(their)f (licenses)g(terminated)h(so)f(long)g(as)g(suc)m(h)f(parties)h(remain)g (in)f(full)330 3738 y(compliance.)154 3892 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 4045 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 b(ma)m(y)f(publish)e (new,)k(revised)d(v)m(ersions)h(of)g(the)g(GNU)g(F)-8 b(ree)330 4154 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to)g (time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h (in)g(spirit)330 4264 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma) m(y)h(di\013er)f(in)g(detail)h(to)g(address)f(new)g(problems)f(or)i (concerns.)330 4374 y(See)c Fz(http://www.gnu.org/copy)o(left)o(/)p FB(.)330 4527 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m (en)g(a)g(distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 b(the)g(Do)s(cumen)m(t)330 4636 y(sp)s(eci\014es)45 b(that)h(a)g(particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g (License)h(\\or)g(an)m(y)g(later)g(v)m(ersion")330 4746 y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f (follo)m(wing)i(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 4856 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m (ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g (b)m(y)330 4965 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s (ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 5075 y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m (ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) h(F)-8 b(ree)330 5184 y(Soft)m(w)m(are)31 b(F)-8 b(oundation.)p eop end %%Page: 322 334 TeXDict begin 322 333 bop 150 -116 a FB(322)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y FA(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f(for)g(y)l (our)g(do)t(cumen)l(ts)150 458 y FB(T)-8 b(o)35 b(use)f(this)h(License) g(in)f(a)h(do)s(cumen)m(t)g(y)m(ou)f(ha)m(v)m(e)i(written,)g(include)f (a)f(cop)m(y)i(of)f(the)f(License)h(in)g(the)150 568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh)m(t) g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468 680 y Fm(Copyright)42 b(\(C\))79 b Fc(year)88 b(your)40 b(name)p Fm(.)468 767 y(Permission)i(is)e(granted)g(to)g(copy,)h (distribute)g(and/or)g(modify)f(this)g(document)468 854 y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i (License,)f(Version)g(1.2)468 941 y(or)f(any)g(later)g(version)h (published)h(by)d(the)h(Free)g(Software)h(Foundation;)468 1029 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g (and)f(no)f(Back-Cover)j(Texts.)468 1116 y(A)e(copy)g(of)g(the)g (license)g(is)g(included)h(in)f(the)g(section)h(entitled)g(``GNU)468 1203 y(Free)g(Documentation)h(License''.)275 1337 y FB(If)d(y)m(ou)h (ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k (T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with...T)-8 b(exts.")43 b(line)30 b(with)h(this:)547 1559 y Fm(with)40 b(the)g(Invariant)h(Sections)g(being)g Fc(list)f(their)g(titles)p Fm(,)h(with)547 1646 y(the)f(Front-Cover)i(Texts)e(being)g Fc(list)p Fm(,)h(and)f(with)g(the)g(Back-Cover)h(Texts)547 1733 y(being)f Fc(list)p Fm(.)275 1868 y FB(If)34 b(y)m(ou)i(ha)m(v)m (e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f(Co)m(v)m(er)h(T)-8 b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g(of)g(the)150 1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g(alternativ)m(es)i(to)e (suit)f(the)h(situation.)275 2112 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f (con)m(tains)i(non)m(trivial)g(examples)g(of)f(program)f(co)s(de,)j(w)m (e)e(recommend)g(releasing)150 2222 y(these)44 b(examples)f(in)g (parallel)h(under)e(y)m(our)h(c)m(hoice)i(of)e(free)g(soft)m(w)m(are)h (license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2331 y(General)31 b(Public)f(License,)i(to)f(p)s(ermit)e(their)i(use)f(in)g(free)g(soft)m (w)m(are.)p eop end %%Page: 323 335 TeXDict begin 323 334 bop 3295 -116 a Fr(Index)91 b FB(323)150 299 y Fu(Index)150 610 y FA(!)150 726 y Fm(!)26 b Fn(\(exclamation)g(p) r(oin)n(t\),)g Fm(!)g Fn(op)r(erator)d Fa(.)12 b(.)g(.)h(.)f(.)48 b Fn(88,)26 b(91,)h(218)150 814 y Fm(!)f Fn(\(exclamation)g(p)r(oin)n (t\),)g Fm(!=)g Fn(op)r(erator)10 b Fa(.)k(.)e(.)h(.)f(.)g(.)h(.)f(.)g (.)37 b Fn(86,)26 b(91)150 901 y Fm(!)e Fn(\(exclamation)i(p)r(oin)n (t\),)e Fm(!~)h Fn(op)r(erator)8 b Fa(.)14 b(.)32 b Fn(24,)26 b(32,)f(34,)h(74,)304 988 y(86,)g(87,)h(91,)g(94)150 1075 y Fm(!)f Fn(op)r(erator)17 b Fa(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)43 b Fn(95,)27 b(218)150 1316 y Fq(")150 1432 y Fm(")f Fn(\(double)f(quote\))d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) 49 b Fn(12,)26 b(15)150 1520 y Fm(")g Fn(\(double)f(quote\),)h(regexp)f (constan)n(ts)17 b Fa(.)c(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fn(34)150 1775 y FA(#)150 1891 y Fm(#)26 b Fn(\(n)n(um)n(b)r(er)e (sign\),)j Fm(#!)f Fn(\(executable)f(scripts\))18 b Fa(.)c(.)e(.)g(.)h (.)f(.)g(.)44 b Fn(13)150 1978 y Fm(#)26 b Fn(\(n)n(um)n(b)r(er)e (sign\),)j Fm(#!)f Fn(\(executable)f(scripts\),)304 2065 y(p)r(ortabilit)n(y)h(issues)g(with)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fn(13)150 2153 y Fm(#)26 b Fn(\(n)n(um)n(b)r(er)e(sign\),)j(commen)n(ting)13 b Fa(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) 39 b Fn(14)150 2414 y FA($)150 2530 y Fm($)26 b Fn(\(dollar)g(sign\))17 b Fa(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(27)150 2618 y Fm($)26 b Fn(\(dollar)g(sign\),)h Fm($)f Fn(\014eld)f(op)r(erator)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)45 b Fn(39,)26 b(91)150 2705 y Fm($)g Fn(\(dollar)g(sign\),)h(incremen)n(ting)f(\014elds)g(and)f(arra)n(ys)15 b Fa(.)e(.)40 b Fn(84)150 2792 y Fm($)26 b Fn(\014eld)f(op)r(erator)15 b Fa(.)f(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(39)150 3050 y FA(\045)150 3166 y Fm(\045)26 b Fn(\(p)r(ercen)n(t)f (sign\),)h Fm(\045)g Fn(op)r(erator)9 b Fa(.)14 b(.)e(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(91)150 3253 y Fm(\045)26 b Fn(\(p)r(ercen)n(t)f(sign\),)h Fm(\045=)h Fn(op)r(erator)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)45 b Fn(83,)26 b(92)150 3508 y FA(&)150 3624 y Fm(&)g Fn(\(amp)r(ersand\),)g Fm(&&)g Fn(op)r(erator)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fn(88,)26 b(91)150 3712 y Fm(&)g Fn(\(amp)r(ersand\),)g Fm(gsub)p Fn(/)p Fm(gensub)p Fn(/)p Fm(sub)j Fn(functions)d(and)317 3799 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(137)150 4032 y FA(')150 4148 y Fm(')26 b Fn(\(single)g(quote\))14 b Fa(.)e(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(11,)27 b(13,)f(15)150 4235 y Fm(')g Fn(\(single)g(quote\),)g(vs.) 34 b(ap)r(ostrophe)12 b Fa(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)37 b Fn(14)150 4323 y Fm(')26 b Fn(\(single)g(quote\),)g (with)g(double)f(quotes)13 b Fa(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)39 b Fn(15)150 4584 y FA(\()150 4700 y Fm(\(\))26 b Fn(\(paren)n(theses\))15 b Fa(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)41 b Fn(28)150 4788 y Fm(\(\))26 b Fn(\(paren)n(theses\),)g Fm(pgawk)h Fn(program)11 b Fa(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)37 b Fn(171)150 5049 y FA(*)150 5166 y Fm(*)26 b Fn(\(asterisk\),)g Fm(*)g Fn(op)r(erator,)h(as)g(m)n(ultiplication)f (op)r(erator)318 5253 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(91)150 5340 y Fm(*)26 b Fn(\(asterisk\),)g Fm(*)g Fn(op)r(erator,)h(as)g(regexp)e(op)r(erator)e Fa(.)12 b(.)h(.)f(.)47 b Fn(28)2025 610 y Fm(*)26 b Fn(\(asterisk\),)g Fm(*)g Fn(op)r(erator,)h(n)n(ull)e(strings,)i(matc)n(hing)2191 697 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(139)2025 785 y Fm(*)26 b Fn(\(asterisk\),)g Fm(**)g Fn(op)r(erator)13 b Fa(.)h(.)e(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)39 b Fn(80,)27 b(91,)g(176)2025 872 y Fm(*)f Fn(\(asterisk\),)g Fm(**=)g Fn(op)r(erator)12 b Fa(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(83,)27 b(92,)g(176)2025 960 y Fm(*)f Fn(\(asterisk\),)g Fm(*=)g Fn(op)r(erator)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fn(83,)27 b(92)2025 1195 y Fq(+)2025 1311 y Fm(+)f Fn(\(plus)f(sign\))8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(28)2025 1399 y Fm(+)26 b Fn(\(plus)f(sign\),)h Fm(+)g Fn(op)r(erator)10 b Fa(.)k(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(91)2025 1486 y Fm(+)26 b Fn(\(plus)f(sign\),)h Fm(++)h Fn(op)r(erator)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)45 b Fn(84,)27 b(91)2025 1574 y Fm(+)f Fn(\(plus)f(sign\),)h Fm(+=)h Fn(op)r(erator)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(82,)27 b(92)2025 1662 y Fm(+)f Fn(\(plus)f(sign\),)h(decremen)n(t/incremen)n(t)g(op)r (erators)d Fa(.)12 b(.)47 b Fn(83)2025 1896 y FA(,)2025 2013 y Fm(,)26 b Fn(\(comma\),)g(in)g(range)g(patterns)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 41 b Fn(95)2025 2248 y FA(-)2025 2364 y Fm(-)26 b Fn(\(h)n(yphen\),)d Fm(-)j Fn(op)r(erator)18 b Fa(.)c(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(91)2025 2452 y Fm(-)26 b Fn(\(h)n(yphen\),)d Fm(--)k Fn(\(decremen)n(t/incremen)n(t\))e(op)r(erator)2193 2539 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(91)2025 2627 y Fm(-)26 b Fn(\(h)n(yphen\),)d Fm(--)k Fn(op)r(erator)16 b Fa(.)d(.)g(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(84)2025 2714 y Fm(-)26 b Fn(\(h)n(yphen\),)d Fm(-=)k Fn(op)r(erator)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)35 b Fn(83,)27 b(92)2025 2802 y Fm(-)f Fn(\(h)n(yphen\),)d(\014lenames)k(b)r(eginning)f(with)10 b Fa(.)j(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(174)2025 2889 y Fm(-)26 b Fn(\(h)n(yphen\),)d(in)j(c)n(haracter)g(lists)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)48 b Fn(29)2025 2977 y Fm(--assign)27 b Fn(option)13 b Fa(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(174)2025 3064 y Fm(--compat)27 b Fn(option)13 b Fa(.)g(.)f(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)39 b Fn(174)2025 3152 y Fm(--copyleft)28 b Fn(option)10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)37 b Fn(175)2025 3239 y Fm(--copyright)28 b Fn(option)9 b Fa(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(174)2025 3327 y Fm(--disable-lint)29 b Fn(con\014guration)d(option)8 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(264)2025 3414 y Fm(--disable-nls)28 b Fn(con\014guration)f(option)10 b Fa(.)i(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(265)2025 3502 y Fm(--dump-variables)29 b Fn(option)11 b Fa(.)i(.)f(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(175,)27 b(182)2025 3590 y Fm(--enable-portals)i Fn(con\014guration)d(option)15 b Fa(.)e(.)41 b Fn(169,)27 b(264)2025 3677 y Fm(--enable-switch)i Fn(con\014guration)d(option)7 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(264)2025 3765 y Fm(--exec)27 b Fn(option)16 b Fa(.)d(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(175)2025 3852 y Fm(--field-separator)29 b Fn(option)18 b Fa(.)13 b(.)g(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)45 b Fn(173)2025 3940 y Fm(--file)27 b Fn(option)16 b Fa(.)d(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(173)2025 4027 y Fm(--gen-po)27 b Fn(option)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(160,)27 b(175)2025 4115 y Fm(--help)g Fn(option)16 b Fa(.)d(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(175)2025 4202 y Fm(--lint)27 b Fn(option)8 b Fa(.)k(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(173,)27 b(175)2025 4290 y Fm(--lint-old)h Fn(option)10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)37 b Fn(176)2025 4377 y Fm(--non-decimal-data)29 b Fn(option)9 b Fa(.)k(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(165,)27 b(176)2025 4465 y Fm(--non-decimal-data)i Fn(option,)e Fm(strtonum)g Fn(function)2178 4552 y(and)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50 b Fn(165)2025 4640 y Fm(--posix)27 b Fn(option)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)41 b Fn(176)2025 4727 y Fm(--posix)27 b Fn(option,)f Fm(--traditional)j Fn(option)d(and)14 b Fa(.)e(.)g(.)41 b Fn(176)2025 4815 y Fm(--profile)27 b Fn(option)22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)48 b Fn(169,)27 b(176)2025 4902 y Fm(--re-interval)h Fn(option)6 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)32 b Fn(177)2025 4990 y Fm(--source)27 b Fn(option)13 b Fa(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(177)2025 5077 y Fm(--traditional)28 b Fn(option)6 b Fa(.)13 b(.)f(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)32 b Fn(174)2025 5165 y Fm(--traditional)c Fn(option,)f Fm(--posix)g Fn(option)f(and)14 b Fa(.)e(.)g(.)41 b Fn(176)2025 5252 y Fm(--usage)27 b Fn(option)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)41 b Fn(175)2025 5340 y Fm(--version)27 b Fn(option)12 b Fa(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(177)p eop end %%Page: 324 336 TeXDict begin 324 335 bop 150 -116 a FB(324)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fm(-f)c Fn(option)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)40 b Fn(12,)27 b(173)150 388 y Fm(-F)f Fn(option)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(45,)27 b(173)150 477 y Fm(-F)f Fn(option,)g Fm(-Ft)h Fn(sets)f Fm(FS)g Fn(to)g(T)-6 b(AB)17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(177)150 566 y Fm(-f)26 b Fn(option,)g(on)g(command)g(line)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)45 b Fn(177)150 655 y Fm(-F)26 b Fn(option,)g(troublesho)r(oting)9 b Fa(.)14 b(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)35 b Fn(180)150 744 y Fm(-mf)p Fn(/)p Fm(-mr)27 b Fn(options)18 b Fa(.)c(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fn(174)150 834 y Fm(-v)26 b Fn(option)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fn(174)150 923 y Fm(-v)26 b Fn(option,)g(v)l(ariables,)h(assigning)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fn(76)150 1012 y Fm(-W)26 b Fn(option)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fn(174)150 1255 y FA(.)150 1375 y Fm(.)26 b Fn(\(p)r(erio)r(d\))13 b Fa(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)38 b Fn(27)150 1464 y Fm(.mo)26 b Fn(\014les)9 b Fa(.)k(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(157)150 1553 y Fm(.mo)26 b Fn(\014les,)h(con)n(v)n(erting)e(from)i Fm(.po)12 b Fa(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)38 b Fn(163)150 1642 y Fm(.mo)26 b Fn(\014les,)h(sp)r(ecifying)f (directory)g(of)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(157,)27 b(158)150 1731 y Fm(.po)f Fn(\014les)18 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(156,)27 b(159)150 1820 y Fm(.po)f Fn(\014les,)h(con)n(v)n(erting)e (to)h Fm(.mo)20 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)45 b Fn(163)150 2089 y FA(/)150 2209 y Fm(/)26 b Fn(\(forw)n(ard)h(slash\))6 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)31 b Fn(24)150 2298 y Fm(/)26 b Fn(\(forw)n(ard)h(slash\),)f Fm(/)g Fn(op)r(erator)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(91)150 2387 y Fm(/)26 b Fn(\(forw)n(ard)h(slash\),)f Fm(/=)g Fn(op)r(erator)17 b Fa(.)d(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(83,)26 b(92)150 2477 y Fm(/)g Fn(\(forw)n(ard)h(slash\),)f Fm(/=)g Fn(op)r(erator,)h(vs.)35 b Fm(/=...)q(/)26 b Fn(regexp)304 2564 y(constan)n(t)17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)43 b Fn(83)150 2653 y Fm(/)26 b Fn(\(forw)n(ard)h(slash\),)f(patterns)g(and)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fn(94)150 2742 y Fm(/=)26 b Fn(op)r(erator)h(vs.)34 b Fm(/=...)q(/)26 b Fn(regexp)g(constan)n(t)7 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)32 b Fn(83)150 2831 y Fm(/dev/...)27 b Fn(sp)r(ecial)g(\014les)g(\()p Fm(gawk)p Fn(\))10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)36 b Fn(68)150 2920 y Fm(/inet/)27 b Fn(\014les)f(\()p Fm(gawk)p Fn(\))10 b Fa(.)j(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fn(168)150 3009 y Fm(/p)26 b Fn(\014les)g(\()p Fm(gawk)p Fn(\))16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(169)150 3252 y FA(;)150 3372 y Fm(;)26 b Fn(\(semicolon\))12 b Fa(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(22)150 3461 y Fm(;)26 b Fn(\(semicolon\),)h Fm(AWKPATH)g Fn(v)l(ariable)g(and)12 b Fa(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fn(270)150 3550 y Fm(;)26 b Fn(\(semicolon\),)h(separating)g (statemen)n(ts)f(in)g(actions)310 3637 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fn(98,)26 b(99)150 3880 y Fq(<)150 4000 y Fm(<)g Fn(\(left)g(angle)h (brac)n(k)n(et\),)e Fm(<)h Fn(op)r(erator)e Fa(.)13 b(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)50 b Fn(86,)26 b(91)150 4089 y Fm(<)g Fn(\(left)g(angle)h(brac)n(k)n(et\),)e Fm(<)h Fn(op)r(erator)g(\(I/O\)) 16 b Fa(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fn(53)150 4178 y Fm(<)26 b Fn(\(left)g(angle)h(brac)n(k)n(et\),)e Fm(<=)h Fn(op)r(erator)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fn(86,)26 b(91)150 4421 y FA(=)150 4541 y Fm(=)g Fn(\(equals)g (sign\),)g Fm(=)g Fn(op)r(erator)11 b Fa(.)j(.)e(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(81)150 4630 y Fm(=)26 b Fn(\(equals)g(sign\),)g Fm(==)g Fn(op)r(erator)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)47 b Fn(86,)26 b(91)150 4873 y Fq(>)150 4993 y Fm(>)g Fn(\(righ)n(t)f(angle)i(brac)n(k)n(et\),)e Fm(>)h Fn(op)r(erator)16 b Fa(.)e(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)42 b Fn(86,)26 b(91)150 5082 y Fm(>)g Fn(\(righ)n(t)f(angle)i(brac)n(k)n (et\),)e Fm(>)h Fn(op)r(erator)h(\(I/O\))9 b Fa(.)i(.)i(.)f(.)g(.)h(.)f (.)34 b Fn(65)150 5171 y Fm(>)26 b Fn(\(righ)n(t)f(angle)i(brac)n(k)n (et\),)e Fm(>=)h Fn(op)r(erator)15 b Fa(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.) 41 b Fn(86,)26 b(91)150 5260 y Fm(>)g Fn(\(righ)n(t)f(angle)i(brac)n(k) n(et\),)e Fm(>>)h Fn(op)r(erator)h(\(I/O\))18 b Fa(.)12 b(.)44 b Fn(66,)26 b(91)2025 299 y FA(?)2025 419 y Fm(?)g Fn(\(question)f(mark\))18 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(28,)27 b(31)2025 508 y Fm(?)f Fn(\(question)f(mark\),)h Fm(?:)g Fn(op)r(erator)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)34 b Fn(92)2025 779 y FA([)2025 899 y Fm([])26 b Fn(\(square)f(brac)n(k)n(ets\))e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fn(27)2025 1153 y Fq(^)2025 1273 y Fm(^)26 b Fn(\(caret\))11 b Fa(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fn(27,)27 b(31)2025 1362 y Fm(^)f Fn(\(caret\),)g Fm(^)g Fn(op)r(erator)11 b Fa(.)j(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)37 b Fn(91,)27 b(176)2025 1451 y Fm(^)f Fn(\(caret\),)g Fm(^=)g Fn(op)r(erator)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(83,)27 b(92,)g(176)2025 1540 y Fm(^)f Fn(\(caret\),)g(in)f(c)n(haracter)i (lists)6 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)32 b Fn(29)p 2034 1783 41 6 v 2025 1903 a Fm(_)26 b Fn(\(underscore\),)f Fm(_)h Fn(C)g(macro)12 b Fa(.)i(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)39 b Fn(157)2025 1992 y Fm(_)26 b Fn(\(underscore\),)f(in)h (names)g(of)h(priv)l(ate)e(v)l(ariables)15 b Fa(.)e(.)41 b Fn(182)2025 2081 y Fm(_)26 b Fn(\(underscore\),)f(translatable)i (string)7 b Fa(.)14 b(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(159)2025 2170 y Fm(_gr_init)27 b Fn(user-de\014ned)e(function)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(207)2025 2259 y Fm(_pw_init)27 b Fn(user-de\014ned)e(function)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(203)2025 2522 y Fq({)2025 2642 y Fm({})26 b Fn(\(braces\),)g (actions)h(and)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)41 b Fn(98)2025 2731 y Fm({})26 b Fn(\(braces\),)g Fm(pgawk)h Fn(program)9 b Fa(.)k(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)35 b Fn(171)2025 2820 y Fm({})26 b Fn(\(braces\),)g(statemen)n(ts,) h(grouping)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)45 b Fn(99)2025 3084 y Fq(\\)2025 3204 y Fm(\\)26 b Fn(\(bac)n(kslash\))12 b Fa(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(12,)27 b(14,)f(15,)h(27)2025 3293 y Fm(\\)f Fn(\(bac)n(kslash\),)g Fm(\\")g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)44 b Fn(26)2025 3382 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\')g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)48 b Fn(31)2025 3471 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\/)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)44 b Fn(26)2025 3560 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\<)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)48 b Fn(31)2025 3649 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\>)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(31)2025 3739 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\`)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(31)2025 3828 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\a)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 3917 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\b)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 4006 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\B)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)48 b Fn(31)2025 4095 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\f)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 4184 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\n)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 4273 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\)p Ff(nnn)f Fn(escap)r(e)h(sequence)10 b Fa(.)i(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)36 b Fn(25)2025 4362 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\r)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 4451 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\t)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 4540 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\v)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 4629 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\w)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(31)2025 4718 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\W)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(31)2025 4807 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\x)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 4897 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(\\y)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(31)2025 4986 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g(as)g(\014eld)g (separators)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)43 b Fn(45)2025 5075 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g(con)n (tin)n(uing)f(lines)i(and)10 b Fa(.)h(.)i(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(21,)27 b(219)2025 5164 y Fm(\\)f Fn(\(bac)n(kslash\),)g(con)n(tin) n(uing)f(lines)i(and,)e(commen)n(ts)h(and)2193 5251 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(22)2025 5340 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g(con)n(tin)n(uing)f(lines)i(and,)e(in)h Fm(csh)11 b Fa(.)i(.)36 b Fn(20,)27 b(21)p eop end %%Page: 325 337 TeXDict begin 325 336 bop 3295 -116 a Fr(Index)91 b FB(325)150 299 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g Fm(gsub)p Fn(/)p Fm(gensub)p Fn(/)p Fm(sub)j Fn(functions)d(and)317 386 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)39 b Fn(137)150 474 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g(in)g(c)n(haracter)g(lists)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(29)150 561 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g(in)g(escap)r(e)g (sequences)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)47 b Fn(25,)26 b(26)150 648 y Fm(\\)g Fn(\(bac)n(kslash\),)g(in)g(escap)r (e)g(sequences,)g(POSIX)f(and)318 736 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(26)150 823 y Fm(\\)26 b Fn(\(bac)n(kslash\),)g(regexp)g(constan)n (ts)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)46 b Fn(34)150 1079 y Fq(|)150 1196 y Fm(|)26 b Fn(\(v)n(ertical)g (bar\))18 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(28)150 1283 y Fm(|)26 b Fn(\(v)n(ertical)g(bar\),)g Fm(|)g Fn(op)r(erator)g(\(I/O\))9 b Fa(.)j(.)g(.)g(.)h(.)f(.)g(.)35 b Fn(54,)27 b(66,)f(91)150 1371 y Fm(|)e Fn(\(v)n(ertical)f(bar\),)h Fm(|&)g Fn(op)r(erator)h(\(I/O\))8 b Fa(.)k(.)31 b Fn(55,)25 b(66,)g(91,)g(166)150 1458 y Fm(|)h Fn(\(v)n(ertical)g(bar\),)g Fm(|&)g Fn(op)r(erator)h(\(I/O\),)e(pip)r(es,)h(closing)318 1545 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(72)150 1633 y Fm(|)26 b Fn(\(v)n(ertical)g(bar\),)g Fm(|&)g Fn(op)r(erator)h (\(I/O\),)e(t)n(w)n(o-w)n(a)n(y)304 1720 y(comm)n(unications)15 b Fa(.)f(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(169)150 1808 y Fm(|)26 b Fn(\(v)n(ertical)g(bar\),)g Fm(||)g Fn(op)r(erator)11 b Fa(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(88,)26 b(91)150 2054 y Fq(~)150 2170 y Fm(~)g Fn(\(tilde\),)g Fm(~)g Fn(op)r(erator)21 b Fa(.)13 b(.)f(.)g(.)h(.)46 b Fn(32,)27 b(34,)g(74,)f(86,)h(87,)g(91,)f(94)150 2425 y FA(A)150 2542 y Fn(accessing)h(\014elds)c Fa(.)12 b(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(39)150 2629 y(accoun)n(t)26 b(information)17 b Fa(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fn(201,)27 b(205)150 2717 y(actions)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(98)150 2804 y(actions,)27 b(con)n(trol)f(statemen)n(ts)g(in)13 b Fa(.)g(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)39 b Fn(99)150 2892 y(actions,)27 b(default)15 b Fa(.)e(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)41 b Fn(17)150 2979 y(actions,)27 b(empt)n(y)9 b Fa(.)i(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(18)150 3067 y(adding,)26 b(features)h(to)f Fm(gawk)11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)36 b Fn(279)150 3154 y(adding,)26 b(\014elds)14 b Fa(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(41)150 3242 y(adding,)26 b(functions)g(to)g Fm(gawk)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)33 b Fn(282)150 3329 y(adv)l(anced)25 b(features,)i(bu\013ering)10 b Fa(.)i(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)36 b Fn(141,)27 b(142)150 3417 y(adv)l(anced)e (features,)i Fm(close)g Fn(function)10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)36 b Fn(72)150 3504 y(adv)l(anced)25 b(features,)i(constan)n(ts,)f(v)l(alues)g(of)f Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)49 b Fn(74)150 3592 y(adv)l(anced)25 b(features,)i(data)f(\014les)g(as)g(single)h(record)17 b Fa(.)c(.)f(.)43 b Fn(39)150 3679 y(adv)l(anced)25 b(features,)i (\014xed-width)d(data)19 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)44 b Fn(47)150 3767 y(adv)l(anced)25 b(features,)i Fm(FNR)p Fn(/)p Fm(NR)g Fn(v)l(ariables)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)44 b Fn(113)150 3854 y(adv)l(anced)25 b(features,)i Fm(gawk)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fn(165)150 3942 y(adv)l(anced)25 b(features,)i Fm(gawk)p Fn(,)g(BSD)e(p)r(ortals)e Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(169)150 4029 y(adv)l(anced)25 b(features,)i Fm(gawk)p Fn(,)g(net)n(w)n(ork)e(programming)317 4116 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)39 b Fn(168)150 4204 y(adv)l(anced)25 b(features,)i Fm(gawk)p Fn(,)g(nondecimal)f(input)f(data)317 4291 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)39 b Fn(165)150 4378 y(adv)l(anced)25 b(features,)i Fm(gawk)p Fn(,)g(pro)r(cesses,)g(comm)n(unicating)304 4466 y(with)11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)37 b Fn(166)150 4553 y(adv)l(anced)25 b(features,)i(net)n(w)n(ork)e(connections,)i(See)f(Also)304 4640 y(net)n(w)n(orks,)g(connections)10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)36 b Fn(165)150 4728 y(adv)l(anced)25 b(features,)i(n)n(ull)e(strings,)i (matc)n(hing)20 b Fa(.)12 b(.)h(.)f(.)g(.)46 b Fn(139)150 4815 y(adv)l(anced)25 b(features,)i(op)r(erators,)g(precedence)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)49 b Fn(84)150 4903 y(adv)l(anced)25 b(features,)i(piping)f(in)n(to)f Fm(sh)6 b Fa(.)13 b(.)g(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)32 b Fn(67)150 4990 y(adv)l(anced)25 b(features,)i(regexp)e(constan)n(ts)15 b Fa(.)e(.)g(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)41 b Fn(83)150 5078 y(Aho,)26 b(Alfred)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)40 b Fn(4,)26 b(258)150 5165 y(alarm)h(clo)r(c)n(k)f(example)g(program)10 b Fa(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)36 b Fn(231)150 5252 y Fm(alarm.awk)28 b Fn(program)14 b Fa(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(231)150 5340 y(algorithms)23 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(296)2025 299 y(Alpha)25 b(\(DEC\))10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(7)2025 387 y(amazing)27 b Fm(awk)f Fn(assem)n(bler)h(\()p Fm(aaa)p Fn(\))22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)48 b Fn(300)2025 476 y(amazingly)27 b(w)n(ork)l(able)f (formatter)h(\()p Fm(awf)p Fn(\))14 b Fa(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)40 b Fn(300)2025 564 y(am)n(biguit)n(y)-6 b(,)25 b(syn)n(tactic:)35 b Fm(/=)26 b Fn(op)r(erator)g(vs.)35 b Fm(/=...)q(/)2178 652 y Fn(regexp)26 b(constan)n(t)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(83)2025 740 y(amiga)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(266)2025 829 y(amp)r(ersand)26 b(\()p Fm(&)p Fn(\),)g Fm(&&)g Fn(op)r(erator)10 b Fa(.)j(.)f(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)36 b Fn(88)2025 917 y(amp)r(ersand)26 b(\()p Fm(&)p Fn(\),)g Fm(&&)p Fn(op)r(erator)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fn(91)2025 1006 y(amp)r(ersand)26 b(\()p Fm(&)p Fn(\),)g Fm(gsub)p Fn(/)p Fm(gensub)p Fn(/)p Fm(sub)j Fn(functions)d(and)2191 1093 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)39 b Fn(137)2025 1181 y(AND)24 b(bit)n(wise)j(op)r (eration)11 b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(147)2025 1270 y(and)25 b(Bo)r(olean-logic)k(op)r(erator)18 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)44 b Fn(88)2025 1358 y Fm(and)26 b Fn(function)g(\()p Fm(gawk)p Fn(\))14 b Fa(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(147)2025 1447 y(ANSI)15 b Fa(.)c(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(300)2025 1535 y(arc)n(heologists)25 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)49 b Fn(276)2025 1624 y Fm(ARGC)p Fn(/)p Fm(ARGV)28 b Fn(v)l(ariables)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(110,)27 b(113)2025 1712 y Fm(ARGC)p Fn(/)p Fm(ARGV)h Fn(v)l(ariables,)e (command-line)g(argumen)n(ts)2191 1800 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(178)2025 1888 y Fm(ARGC)p Fn(/)p Fm(ARGV)28 b Fn(v)l(ariables,)e (p)r(ortabilit)n(y)g(and)e Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 50 b Fn(14)2025 1977 y Fm(ARGIND)27 b Fn(v)l(ariable)10 b Fa(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fn(110)2025 2065 y Fm(ARGIND)27 b Fn(v)l(ariable,)f(command-line)g (argumen)n(ts)19 b Fa(.)13 b(.)f(.)g(.)45 b Fn(178)2025 2154 y(argumen)n(ts,)26 b(command-line)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)49 b Fn(110,)27 b(113,)g(178)2025 2242 y(argumen)n(ts,)f(command-line,)g(in)n(v)n(oking)f Fm(awk)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)47 b Fn(173)2025 2331 y(argumen)n(ts,)26 b(in)g(function)f(calls)7 b Fa(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)33 b Fn(90)2025 2419 y(argumen)n(ts,)26 b(pro)r(cessing)11 b Fa(.)i(.)g(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(196)2025 2508 y(argumen)n(ts,)26 b(retrieving)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(284)2025 2596 y(arithmetic)26 b(op)r(erators)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(79)2025 2685 y(arra)n(ys)24 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(116)2025 2773 y(arra)n(ys,)26 b(as)h(parameters)f(to)g(functions)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)35 b Fn(153)2025 2862 y(arra)n(ys,)26 b(asso)r(ciativ)n(e)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(116)2025 2950 y(arra)n(ys,)26 b(asso)r(ciativ)n(e,)i(clearing)13 b Fa(.)h(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)39 b Fn(283)2025 3039 y(arra)n(ys,)26 b(asso)r(ciativ)n(e,)i (library)e(functions)g(and)9 b Fa(.)j(.)g(.)h(.)f(.)g(.)35 b Fn(182)2025 3127 y(arra)n(ys,)26 b(deleting)g(en)n(tire)g(con)n(ten)n (ts)8 b Fa(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)34 b Fn(120)2025 3216 y(arra)n(ys,)26 b(elemen)n(ts,)h(assigning)7 b Fa(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)33 b Fn(118)2025 3304 y(arra)n(ys,)26 b(elemen)n(ts,)h (deleting)9 b Fa(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)35 b Fn(120)2025 3393 y(arra)n(ys,)26 b(elemen)n(ts,)h(installing)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(283)2025 3481 y(arra)n(ys,)26 b(elemen)n(ts,)h(order)f(of)10 b Fa(.)i(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(120)2025 3570 y(arra)n(ys,)26 b(elemen)n(ts,)h(referencing)13 b Fa(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 39 b Fn(117)2025 3658 y(arra)n(ys,)26 b(elemen)n(ts,)h(retrieving)f(n)n (um)n(b)r(er)e(of)14 b Fa(.)g(.)e(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(129)2025 3747 y(arra)n(ys,)26 b Fm(for)h Fn(statemen)n(t)e(and)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)41 b Fn(119)2025 3835 y(arra)n(ys,)26 b Fm(IGNORECASE)i Fn(v)l(ariable)e(and)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)47 b Fn(117)2025 3924 y(arra)n(ys,)26 b(indexing)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(116)2025 4012 y(arra)n(ys,)26 b(merging)h(in)n(to)f(strings)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)35 b Fn(190)2025 4101 y(arra)n(ys,)26 b(m)n(ultidimensional)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)48 b Fn(122)2025 4189 y(arra)n(ys,)26 b(m)n(ultidimensional,)h(scanning)16 b Fa(.)e(.)e(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)42 b Fn(124)2025 4278 y(arra)n(ys,)26 b(names)g(of)15 b Fa(.)f(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(116)2025 4366 y(arra)n(ys,)26 b(scanning)18 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(119)2025 4455 y(arra)n(ys,)26 b(sorting)12 b Fa(.)h(.)g(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)38 b Fn(124)2025 4543 y(arra)n(ys,)26 b(sorting,)h Fm(IGNORECASE)h Fn(v)l(ariable)e(and)9 b Fa(.)j(.)h(.)f(.)g(.)h(.)35 b Fn(126)2025 4632 y(arra)n(ys,)26 b(sparse)6 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 32 b Fn(117)2025 4720 y(arra)n(ys,)26 b(subscripts)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(121)2025 4809 y(arra)n(ys,)26 b(subscripts,)g(uninitialized)h(v)l(ariables)f(as) 14 b Fa(.)f(.)f(.)40 b Fn(122)2025 4897 y(arti\014cial)27 b(in)n(telligence,)g Fm(gawk)g Fn(and)11 b Fa(.)h(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(261)2025 4986 y(ASCI)r(I)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fn(189)2025 5074 y Fm(asort)26 b Fn(function)g(\()p Fm(gawk)p Fn(\))c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(124,)27 b(129)2025 5163 y Fm(asort)f Fn(function)g(\()p Fm(gawk)p Fn(\),)h(arra)n(ys,)f(sorting)18 b Fa(.)c(.)e(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(124)2025 5251 y Fm(asorti)27 b Fn(function)f(\()p Fm(gawk)p Fn(\))9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(130)2025 5340 y Fm(assert)27 b Fn(function)f(\(C)f(library\))8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)34 b Fn(186)p eop end %%Page: 326 338 TeXDict begin 326 337 bop 150 -116 a FB(326)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fm(assert)d Fn(user-de\014ned)d(function)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(186)150 389 y(assertions)18 b Fa(.)c(.)e(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(186)150 479 y(assignmen)n(t)27 b(op)r(erators)8 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(81)150 570 y(assignmen)n(t)27 b(op)r(erators,)g(ev)l(aluation)f (order)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(82)150 660 y(assignmen)n(t)27 b(op)r(erators,)g(lv)l(alues/rv)l(alues)9 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)35 b Fn(81)150 750 y(assignmen)n(ts)27 b(as)f(\014lenames)c Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)47 b Fn(196)150 840 y Fm(assoc_clear)28 b Fn(in)n(ternal)e (function)18 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)44 b Fn(283)150 931 y Fm(assoc_lookup)28 b Fn(in)n(ternal)e (function)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)42 b Fn(283)150 1021 y(asso)r(ciativ)n(e)28 b(arra)n(ys)14 b Fa(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(116)150 1111 y(asterisk)27 b(\()p Fm(*)p Fn(\),)e Fm(*)h Fn(op)r(erator,)h(as)g (m)n(ultiplication)f(op)r(erator)318 1198 y Fa(.)12 b(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(91)150 1288 y(asterisk)27 b(\()p Fm(*)p Fn(\),)e Fm(*)h Fn(op)r(erator,)h(as)g(regexp)e(op)r(erator)e Fa(.)12 b(.)h(.)f(.)47 b Fn(28)150 1379 y(asterisk)27 b(\()p Fm(*)p Fn(\),)e Fm(*)h Fn(op)r(erator,)h(n)n(ull)f(strings,)g (matc)n(hing)317 1466 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(139)150 1556 y(asterisk)27 b(\()p Fm(*)p Fn(\),)e Fm(**)h Fn(op)r(erator)13 b Fa(.)h(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(80,)26 b(91,)h(176)150 1646 y(asterisk)g(\()p Fm(*)p Fn(\),)e Fm(**=)i Fn(op)r(erator)12 b Fa(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)38 b Fn(83,)26 b(92,)h(176)150 1737 y(asterisk)g(\()p Fm(*)p Fn(\),)e Fm(*=)h Fn(op)r(erator)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)48 b Fn(83,)26 b(92)150 1827 y Fm(atan2)h Fn(function)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(128)150 1917 y(atari)11 b Fa(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(274)150 2007 y Fm(awf)25 b Fn(\(amazingly)g(w)n(ork)l(able)g (formatter\))h(program)8 b Fa(.)13 b(.)33 b Fn(300)150 2098 y Fm(awk)26 b Fn(language,)i(POSIX)c(v)n(ersion)16 b Fa(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) 41 b Fn(83)150 2188 y Fm(awk)26 b Fn(programs)12 b Fa(.)i(.)e(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)38 b Fn(11,)27 b(13,)f(19)150 2278 y Fm(awk)g Fn(programs,)h(complex)11 b Fa(.)i(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(23)150 2368 y Fm(awk)26 b Fn(programs,)h(do)r(cumen)n(ting)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(14,)27 b(181)150 2458 y Fm(awk)f Fn(programs,)h(examples)g(of)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)49 b Fn(210)150 2549 y Fm(awk)26 b Fn(programs,)h(execution)f (of)17 b Fa(.)d(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)43 b Fn(105)150 2639 y Fm(awk)26 b Fn(programs,)h(in)n (ternationalizing)9 b Fa(.)15 b(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(149,)27 b(158)150 2729 y Fm(awk)f Fn(programs,)h(length)n(y)7 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fn(12)150 2819 y Fm(awk)26 b Fn(programs,)h(length)n(y)-6 b(,)25 b(assertions)f Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fn(186)150 2910 y Fm(awk)26 b Fn(programs,)h(lo)r(cation)h(of)16 b Fa(.)d(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(173,)27 b(175)150 3000 y Fm(awk)f Fn(programs,)h(one-line)f (examples)16 b Fa(.)d(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)42 b Fn(18)150 3090 y Fm(awk)26 b Fn(programs,)h(pro\014ling)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)35 b Fn(169)150 3180 y Fm(awk)26 b Fn(programs,)h(pro\014ling,)g(enabling)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(176)150 3271 y Fm(awk)26 b Fn(programs,)h(running)11 b Fa(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)37 b Fn(11,)26 b(12)150 3361 y Fm(awk)g Fn(programs,)h (running,)f(from)g(shell)h(scripts)16 b Fa(.)c(.)h(.)f(.)g(.)h(.)41 b Fn(11)150 3451 y Fm(awk)26 b Fn(programs,)h(running,)f(without)g (input)e(\014les)12 b Fa(.)h(.)g(.)f(.)g(.)38 b Fn(12)150 3541 y Fm(awk)26 b Fn(programs,)h(shell)g(v)l(ariables)f(in)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(97)150 3632 y Fm(awk)p Fn(,)27 b(function)e(of)9 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(11)150 3722 y Fm(awk)p Fn(,)27 b Fm(gawk)f Fn(and)14 b Fa(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(3,)26 b(5)150 3812 y Fm(awk)p Fn(,)h(history)e(of)13 b Fa(.)g(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(4)150 3902 y Fm(awk)p Fn(,)27 b(implemen)n(tation)f(issues,)h(pip) r(es)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fn(67)150 3993 y Fm(awk)p Fn(,)27 b(implemen)n(tations)22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(277)150 4083 y Fm(awk)p Fn(,)27 b(implemen)n(tations,)g(limits)14 b Fa(.)f(.)g(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(56)150 4173 y Fm(awk)p Fn(,)27 b(in)n(v)n(oking)12 b Fa(.)g(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(173)150 4263 y Fm(awk)p Fn(,)27 b(new)e(vs.)35 b(old)16 b Fa(.)d(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(4)150 4353 y Fm(awk)p Fn(,)27 b(new)e(vs.)35 b(old,)26 b Fm(OFMT)h Fn(v)l(ariable)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)49 b Fn(78)150 4444 y Fm(awk)p Fn(,)27 b(POSIX)d(and)15 b Fa(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(3)150 4534 y Fm(awk)p Fn(,)27 b(POSIX)d(and,)i(See)f(Also)i(POSIX) d Fm(awk)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(3)150 4624 y Fm(awk)p Fn(,)27 b(regexp)e(constan)n(ts)h(and)17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)43 b Fn(87)150 4714 y Fm(awk)p Fn(,)27 b(See)e(Also)h Fm(gawk)12 b Fa(.)i(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) 39 b Fn(3)150 4805 y Fm(awk)p Fn(,)27 b(terms)f(describing)6 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fn(5)150 4895 y Fm(awk)p Fn(,)27 b(uses)f(for)13 b Fa(.)g(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)38 b Fn(3,)27 b(11,)f(22)150 4985 y Fm(awk)p Fn(,)h(v)n(ersions)f(of)6 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 33 b Fn(4,)26 b(252)150 5075 y Fm(awk)p Fn(,)h(v)n(ersions)f(of,)h(c)n (hanges)f(b)r(et)n(w)n(een)f(SVR3.1)h(and)304 5163 y(SVR4)6 b Fa(.)11 b(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) 32 b Fn(253)150 5253 y Fm(awk)p Fn(,)27 b(v)n(ersions)f(of,)h(c)n (hanges)f(b)r(et)n(w)n(een)f(SVR4)g(and)304 5340 y(POSIX)f Fm(awk)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(253)2025 299 y Fm(awk)p Fn(,)26 b(v)n(ersions)h(of,)f(c)n(hanges)h (b)r(et)n(w)n(een)e(V7)h(and)f(SVR3.1)2191 386 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)39 b Fn(252)2025 476 y Fm(awk)p Fn(,)26 b(v)n(ersions)h (of,)f(See)g(Also)g(Bell)h(Lab)r(oratories)h Fm(awk)2191 563 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(254)2025 654 y Fm(awk.h)26 b Fn(\014le)g(\(in)n(ternal\))12 b Fa(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)39 b Fn(282)2025 744 y Fm(awka)26 b Fn(compiler)h(for)f Fm(awk)16 b Fa(.)d(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(278)2025 834 y Fm(AWKNUM)27 b Fn(in)n(ternal)f(t)n(yp)r(e)16 b Fa(.)11 b(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)42 b Fn(283)2025 924 y Fm(AWKPATH)27 b Fn(en)n(vironmen)n(t)e(v)l(ariable)f Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(179)2025 1014 y Fm(AWKPATH)27 b Fn(en)n(vironmen)n(t)e(v)l(ariable)f Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(270)2025 1104 y Fm(awkprof.out)28 b Fn(\014le)12 b Fa(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)38 b Fn(169)2025 1195 y Fm(awksed.awk)28 b Fn(program)12 b Fa(.)h(.)g(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(243)2025 1285 y Fm(awkvars.out)28 b Fn(\014le)12 b Fa(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)38 b Fn(175)2025 1533 y FA(B)2025 1655 y Fn(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\))12 b Fa(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(12,)27 b(14,)f(15,)h(27)2025 1745 y(bac)n(kslash)f(\()p Fm(\\)p Fn(\),)g Fm(\\")g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)44 b Fn(26)2025 1836 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\')g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)48 b Fn(31)2025 1926 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\/)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(26)2025 2016 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\<)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(31)2025 2106 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\>)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(31)2025 2196 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\`)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(31)2025 2286 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\a)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 2377 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\b)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 2467 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\B)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(31)2025 2557 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\f)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 2647 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\n)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 2737 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\)p Ff(nnn)f Fn(escap)r(e)h(sequence)10 b Fa(.)i(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)36 b Fn(25)2025 2827 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\r)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 2918 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\t)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 3008 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\v)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 3098 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\w)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(31)2025 3188 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\W)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(31)2025 3278 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\x)g Fn(escap)r(e)g(sequence)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)44 b Fn(25)2025 3368 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g Fm(\\y)g Fn(op)r(erator)h(\()p Fm(gawk)p Fn(\))22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)48 b Fn(31)2025 3458 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g(as)g(\014eld)g(separators)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(45)2025 3549 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g(con)n(tin)n (uing)f(lines)i(and)10 b Fa(.)h(.)i(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(21,)27 b(219)2025 3639 y(bac)n(kslash)f(\()p Fm(\\)p Fn(\),)g(con)n(tin)n(uing)f(lines)i(and,)e(commen)n(ts)h(and)2193 3726 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(22)2025 3816 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g(con)n(tin)n(uing)f(lines)i(and,)e(in)h Fm(csh)11 b Fa(.)i(.)36 b Fn(20,)27 b(21)2025 3906 y(bac)n(kslash)f(\() p Fm(\\)p Fn(\),)g Fm(gsub)p Fn(/)p Fm(gensub)p Fn(/)p Fm(sub)j Fn(functions)d(and)2191 3994 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(137)2025 4084 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g(in)f(c)n (haracter)i(lists)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)48 b Fn(29)2025 4174 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g(in)f(escap)r(e)i(sequences)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(25,)27 b(26)2025 4264 y(bac)n(kslash)f(\()p Fm(\\)p Fn(\),)g(in)f(escap)r(e)i (sequences,)f(POSIX)e(and)2193 4351 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(26)2025 4441 y(bac)n(kslash)26 b(\()p Fm(\\)p Fn(\),)g(regexp)f (constan)n(ts)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)47 b Fn(34)2025 4531 y Fm(BBS-list)27 b Fn(\014le)17 b Fa(.)c(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)43 b Fn(16)2025 4622 y(Beeb)r(e,)26 b(Nelson)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fn(9)2025 4712 y(Beeb)r(e,)26 b(Nelson)g(H.F.)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fn(278)2025 4802 y Fm(BEGIN)26 b Fn(pattern)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(36,)26 b(43,)h(96)2025 4892 y Fm(BEGIN)f Fn(pattern,)g Fm(assert)h Fn(user-de\014ned)d(function)i(and)2191 4979 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)39 b Fn(187)2025 5069 y Fm(BEGIN)26 b Fn(pattern,)g(Bo)r(olean)i(patterns)d(and)16 b Fa(.)c(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)42 b Fn(94)2025 5160 y Fm(BEGIN)26 b Fn(pattern,)g Fm(exit)h Fn(statemen)n(t)e(and)9 b Fa(.)j(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(106)2025 5250 y Fm(BEGIN)26 b Fn(pattern,)g Fm(getline)h Fn(and)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(56)2025 5340 y Fm(BEGIN)26 b Fn(pattern,)g(headings,)h(adding)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(58)p eop end %%Page: 327 339 TeXDict begin 327 338 bop 3295 -116 a Fr(Index)91 b FB(327)150 299 y Fm(BEGIN)27 b Fn(pattern,)e Fm(next)p Fn(/)p Fm(nextfile)k Fn(statemen)n(ts)d(and)328 386 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)50 b Fn(97,)27 b(105)150 477 y Fm(BEGIN)g Fn(pattern,)e Fm(OFS)p Fn(/)p Fm(ORS)j Fn(v)l(ariables,)e(assigning)i(v)l(alues)304 564 y(to)16 b Fa(.)d(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)42 b Fn(59)150 655 y Fm(BEGIN)27 b Fn(pattern,)e(op)r (erators)i(and)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)44 b Fn(96)150 746 y Fm(BEGIN)27 b Fn(pattern,)e Fm(pgawk)i Fn(program)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fn(170)150 838 y Fm(BEGIN)27 b Fn(pattern,)e Fm(print)i Fn(statemen)n(t)f(and)8 b Fa(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)34 b Fn(97)150 929 y Fm(BEGIN)27 b Fn(pattern,)e Fm(pwcat)i Fn(program)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fn(204)150 1020 y Fm(BEGIN)27 b Fn(pattern,)e(running)g Fm(awk)i Fn(programs)f(and)c Fa(.)12 b(.)h(.)f(.)48 b Fn(211)150 1111 y Fm(BEGIN)27 b Fn(pattern,)e Fm(TEXTDOMAIN)j Fn(v)l(ariable)e(and)16 b Fa(.)d(.)f(.)g(.)h(.)f(.)42 b Fn(159)150 1202 y Fm(beginfile)28 b Fn(user-de\014ned)c(function)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(193)150 1293 y(Bell)27 b(Lab)r(oratories)h Fm(awk)e Fn(extensions)16 b Fa(.)d(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)42 b Fn(254)150 1384 y(Benzinger,)27 b(Mic)n(hael)6 b Fa(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fn(259)150 1475 y(BeOS)13 b Fa(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)39 b Fn(266)150 1566 y(Berry)-6 b(,)26 b(Karl)11 b Fa(.)i(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)37 b Fn(9)150 1657 y(binary)25 b(input/output)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fn(107)150 1748 y Fm(bindtextdomain)29 b Fn(function)d(\(C)f(library\))14 b Fa(.)f(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(157)150 1840 y Fm(bindtextdomain)29 b Fn(function)d(\()p Fm(gawk)p Fn(\))8 b Fa(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(149,)27 b(158)150 1931 y Fm(bindtextdomain)i Fn(function)d(\()p Fm(gawk)p Fn(\),)g(p)r(ortabilit)n(y)g(and)317 2018 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)39 b Fn(161)150 2109 y Fm(BINMODE)27 b Fn(v)l(ariable)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fn(107,)27 b(270)150 2200 y Fm(bits2str)g Fn(user-de\014ned)e(function)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)49 b Fn(148)150 2291 y(bit)n(wise,)27 b(complemen)n(t)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fn(147)150 2382 y(bit)n(wise,)27 b(op)r(erations)12 b Fa(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(147)150 2473 y(bit)n(wise,)27 b(shift)22 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(147)150 2564 y(b)r(o)r(dy)-6 b(,)25 b(in)h(actions)f Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(99)150 2655 y(b)r(o)r(dy)-6 b(,)25 b(in)h(lo)r(ops)17 b Fa(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(100)150 2747 y(Bo)r(olean)27 b(expressions)10 b Fa(.)k(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)36 b Fn(88)150 2838 y(Bo)r(olean)27 b(expressions,)g(as)g(patterns)18 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fn(94)150 2929 y(Bo)r(olean)27 b(op)r(erators,)h(See)d(Bo)r(olean)j (expressions)13 b Fa(.)g(.)f(.)h(.)38 b Fn(88)150 3020 y(Bourne)26 b(shell,)h(quoting)e(rules)h(for)17 b Fa(.)c(.)g(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(15)150 3111 y(braces)26 b(\()p Fm({})p Fn(\),)g(actions)h(and)15 b Fa(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)41 b Fn(98)150 3202 y(braces)26 b(\()p Fm({})p Fn(\),)g Fm(pgawk)h Fn(program)9 b Fa(.)14 b(.)e(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(171)150 3293 y(braces)26 b(\()p Fm({})p Fn(\),)g(statemen)n(ts,)h (grouping)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 45 b Fn(99)150 3384 y(brac)n(k)n(et)25 b(expressions,)i(See)e(c)n (haracter)i(lists)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fn(27)150 3475 y Fm(break)27 b Fn(statemen)n(t)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(103)150 3566 y(Brennan,)26 b(Mic)n(hael)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)49 b Fn(121,)27 b(166,)g(243,)g(277)150 3657 y(Bro)r(der,)g(Alan)e(J.)9 b Fa(.)k(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)35 b Fn(259)150 3749 y(Bro)n(wn,)27 b(Martin)8 b Fa(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(9,)26 b(259,)h(276)150 3840 y(BSD)e(p)r(ortals)10 b Fa(.)k(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)36 b Fn(169)150 3931 y(BSD-based)25 b(op)r(erating)i (systems)9 b Fa(.)j(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)34 b Fn(308)150 4022 y(Buening,)26 b(Andreas)20 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(9,)26 b(259)150 4113 y(bu\013ering,)g(input/output)15 b Fa(.)10 b(.)j(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(142,)27 b(167)150 4204 y(bu\013ering,)f(in)n(teractiv)n(e)f(vs.)35 b(nonin)n(teractiv)n(e)9 b Fa(.)j(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(141)150 4295 y(bu\013ers,)26 b(\015ushing)15 b Fa(.)d(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)41 b Fn(140,)27 b(142)150 4386 y(bu\013ers,)f(op)r(erators)h (for)12 b Fa(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(31)150 4477 y(bug)25 b(rep)r(orts,)i(email)g(address,)f Fm(bug-gawk@gnu.org) 317 4564 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(276)150 4656 y Fm(bug-gawk@gnu.org)29 b Fn(bug)d(rep)r(orting)g(address)14 b Fa(.)f(.)f(.)h(.)f(.)40 b Fn(276)150 4747 y(built-in)25 b(functions)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(127)150 4838 y(built-in)25 b(functions,)h(ev)l(aluation)h(order)14 b Fa(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(127)150 4929 y(built-in)25 b(v)l(ariables)7 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)33 b Fn(107)150 5020 y(built-in)25 b(v)l(ariables,)i Fm(-v)f Fn(option,)g(setting)g(with)18 b Fa(.)13 b(.)f(.)h(.)f(.)44 b Fn(174)150 5111 y(built-in)25 b(v)l(ariables,)i(con)n(v)n(eying)e (information)10 b Fa(.)k(.)f(.)f(.)g(.)h(.)36 b Fn(110)150 5202 y(built-in)25 b(v)l(ariables,)i(user-mo)r(di\014able)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(107)2025 299 y FA(C)2025 416 y Fn(call)27 b(b)n(y)d(reference)17 b Fa(.)d(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(153)2025 504 y(call)27 b(b)n(y)d(v)l(alue)7 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fn(152)2025 592 y(caret)26 b(\()p Fm(^)p Fn(\))11 b Fa(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)36 b Fn(27,)27 b(31)2025 680 y(caret)f(\()p Fm(^)p Fn(\),)g Fm(^)g Fn(op)r(erator)11 b Fa(.)j(.)e(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(91,)27 b(176)2025 768 y(caret)f(\()p Fm(^)p Fn(\),)g Fm(^=)g Fn(op)r(erator)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)46 b Fn(83,)27 b(92,)g(176)2025 856 y(caret)f(\()p Fm(^)p Fn(\),)g(in)f(c)n(haracter)i(lists)6 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)32 b Fn(29)2025 944 y Fm(case)26 b Fn(k)n(eyw)n(ord)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(102)2025 1032 y(case)26 b(sensitivit)n(y)-6 b(,)26 b(arra)n(y)g(indices)g(and)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)46 b Fn(117)2025 1120 y(case)26 b(sensitivit)n(y)-6 b(,)26 b(con)n(v)n(erting)f(case)17 b Fa(.)d(.)e(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(136)2025 1208 y(case)26 b(sensitivit)n(y)-6 b(,)26 b(example)g(programs)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(181)2025 1296 y(case)26 b(sensitivit)n(y)-6 b(,)26 b Fm(gawk)13 b Fa(.)h(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(32)2025 1383 y(case)26 b(sensitivit)n(y)-6 b(,)26 b(regexps)g(and)11 b Fa(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(32,)27 b(108)2025 1471 y(case)f(sensitivit)n(y)-6 b(,)26 b(string)g(comparisons)h(and)10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g(.) 37 b Fn(108)2025 1559 y(CGI,)26 b Fm(awk)g Fn(scripts)h(for)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(175)2025 1647 y(c)n(haracter)26 b(enco)r(dings)13 b Fa(.)g(.)g(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(189)2025 1735 y(c)n(haracter)26 b(lists)13 b Fa(.)g(.)g(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)38 b Fn(27,)27 b(29)2025 1823 y(c)n(haracter)f(lists,)h(c)n(haracter)f(classes)10 b Fa(.)15 b(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fn(30)2025 1911 y(c)n(haracter)26 b(lists,)h(collating)h(elemen)n(ts) c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(30)2025 1999 y(c)n(haracter)26 b(lists,)h(collating)h(sym)n(b)r (ols)16 b Fa(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fn(30)2025 2087 y(c)n(haracter)26 b(lists,)h(complemen)n(ted)11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 37 b Fn(28)2025 2175 y(c)n(haracter)26 b(lists,)h(equiv)l(alence)e (classes)12 b Fa(.)i(.)f(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(30)2025 2263 y(c)n(haracter)26 b(lists,)h(non-ASCI)r(I)15 b Fa(.)c(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)41 b Fn(30)2025 2351 y(c)n(haracter)26 b(lists,)h(range)f (expressions)13 b Fa(.)h(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)39 b Fn(29)2025 2439 y(c)n(haracter)26 b(sets)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)50 b Fn(189)2025 2526 y(c)n(haracter)26 b(sets)g(\(mac)n(hine)g(c)n(haracter)g(enco)r (dings\))8 b Fa(.)13 b(.)34 b Fn(301)2025 2614 y(c)n(haracter)26 b(sets,)h(See)e(Also)h(c)n(haracter)h(lists)11 b Fa(.)j(.)e(.)g(.)h(.)f (.)g(.)g(.)h(.)37 b Fn(27)2025 2702 y(c)n(haracters,)27 b(coun)n(ting)7 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)33 b Fn(228)2025 2790 y(c)n(haracters,)27 b(transliterating)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)47 b Fn(233)2025 2878 y(c)n(haracters,)27 b(v)l(alues)e(of)i(as)f(n)n(um)n(b)r(ers)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(188)2025 2966 y(Chassell,)28 b(Rob)r(ert)d(J.)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(9)2025 3054 y Fm(chdir)26 b Fn(function,)h(implemen)n(ting)f(in)f Fm(gawk)18 b Fa(.)13 b(.)g(.)f(.)g(.)g(.)h(.)f(.)44 b Fn(287)2025 3142 y Fm(chem)26 b Fn(utilit)n(y)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)50 b Fn(302)2025 3230 y Fm(chr)26 b Fn(user-de\014ned)e(function)12 b Fa(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)38 b Fn(188)2025 3318 y(Cli\013)26 b(random)g(n)n(um)n(b)r (ers)13 b Fa(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(188)2025 3406 y Fm(cliff_rand)28 b Fn(user-de\014ned)c(function)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(188)2025 3494 y Fm(close)26 b Fn(function)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(54,)27 b(70,)g(140)2025 3582 y Fm(close)f Fn(function,)h(return)e (v)l(alues)18 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)43 b Fn(72)2025 3669 y Fm(close)26 b Fn(function,)h(t)n(w)n(o-w)n(a)n(y)e(pip)r(es)h(and)15 b Fa(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(167)2025 3757 y(Close,)27 b(Diane)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)43 b Fn(8,)27 b(258)2025 3845 y Fm(close_func)h Fn(input)c(metho)r(d)15 b Fa(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(285)2025 3933 y(collating)27 b(elemen)n(ts)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)35 b Fn(30)2025 4021 y(collating)27 b(sym)n(b)r(ols)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)45 b Fn(30)2025 4109 y(columns,)26 b(aligning)16 b Fa(.)e(.)f(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)42 b Fn(58)2025 4197 y(columns,)26 b(cutting)10 b Fa(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fn(210)2025 4285 y(comma)26 b(\()p Fm(,)p Fn(\),)g(in)g(range)g(patterns)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 41 b Fn(95)2025 4373 y(command)26 b(line,)g(argumen)n(ts)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)49 b Fn(110,)27 b(113,)g(178)2025 4461 y(command)f(line,)g(formats)14 b Fa(.)g(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(11)2025 4549 y(command)26 b(line,)g Fm(FS)g Fn(on,)g(setting)c Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(45)2025 4637 y(command)26 b(line,)g(in)n(v)n(oking)f Fm(awk)h Fn(from)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)45 b Fn(173)2025 4725 y(command)26 b(line,)g(options)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(12,)27 b(45,)g(173)2025 4812 y(command)f(line,)g(options,)h(end)e (of)19 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)45 b Fn(174)2025 4900 y(command)26 b(line,)g(v)l(ariables,)h (assigning)g(on)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(76)2025 4988 y(command-line)26 b(options,)g(pro)r(cessing)15 b Fa(.)f(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(196)2025 5076 y(command-line)26 b(options,)g(string)g(extraction) 18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)44 b Fn(160)2025 5164 y(commen)n(ting)14 b Fa(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)40 b Fn(14)2025 5252 y(commen)n(ting,)26 b(bac)n(kslash)g(con)n(tin)n(uation)g(and)8 b Fa(.)k(.)h(.)f(.)g(.)h(.) f(.)34 b Fn(22)2025 5340 y Fm(comp.lang.awk)28 b Fn(newsgroup)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)34 b Fn(276)p eop end %%Page: 328 340 TeXDict begin 328 339 bop 150 -116 a FB(328)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fn(comparison)d(expressions)9 b Fa(.)k(.)g(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(85)150 387 y(comparison)27 b(expressions,)g(as)f(patterns)18 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)43 b Fn(93)150 475 y(comparison)27 b(expressions,)g(string)f(vs.)34 b(regexp)12 b Fa(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(87)150 563 y(compatibilit)n(y)26 b(mo)r(de)g(\()p Fm(gawk)p Fn(\),)h(extensions)11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(255)150 651 y(compatibilit)n(y)26 b(mo)r(de)g(\()p Fm(gawk)p Fn(\),)h(\014le)f(names)17 b Fa(.)c(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)43 b Fn(70)150 740 y(compatibilit)n(y)26 b(mo)r(de)g(\()p Fm(gawk)p Fn(\),)h(hexadecimal)f(n)n(um)n(b)r(ers)318 827 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(74)150 915 y(compatibilit)n(y)26 b(mo)r(de)g(\()p Fm(gawk)p Fn(\),)h(o)r(ctal)g(n)n(um)n(b)r(ers)19 b Fa(.)12 b(.)g(.)h(.)f(.)45 b Fn(74)150 1003 y(compatibilit)n(y)26 b(mo)r(de)g(\()p Fm(gawk)p Fn(\),)h(sp)r(ecifying)17 b Fa(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(174)150 1091 y(compiled)26 b(programs)18 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)44 b Fn(295,)27 b(302)150 1179 y Fm(compl)g Fn(function)f(\()p Fm(gawk)p Fn(\))11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(147)150 1267 y(complemen)n(t,)26 b(bit)n(wise)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fn(147)150 1355 y(comp)r(ound)24 b(statemen)n(ts,)i(con)n(trol)f (statemen)n(ts)g(and)8 b Fa(.)k(.)33 b Fn(99)150 1444 y(concatenating)23 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)47 b Fn(80)150 1532 y(conditional)27 b(expressions)14 b Fa(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(89)150 1620 y(con\014guration)26 b(option,)g Fm(--disable-lint)16 b Fa(.)g(.)c(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(264)150 1708 y(con\014guration)26 b(option,)g Fm(--disable-nls)17 b Fa(.)f(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fn(265)150 1796 y(con\014guration)26 b(option,)g Fm(--enable-portals)13 b Fa(.)j(.)c(.)h(.)f(.)g(.)39 b Fn(264)150 1884 y(con\014guration)26 b(option,)g Fm(--enable-switch)14 b Fa(.)i(.)d(.)f(.)g(.)h(.)f(.)40 b Fn(264)150 1972 y(con\014guration)26 b(options,)h Fm(gawk)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)41 b Fn(264)150 2060 y(constan)n(ts,)26 b(nondecimal)10 b Fa(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(165)150 2149 y(constan)n(ts,)26 b(t)n(yp)r(es)f(of)14 b Fa(.)g(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(73)150 2237 y Fm(continue)27 b Fn(statemen)n(t)9 b Fa(.)k(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(104)150 2325 y(con)n(trol)26 b(statemen)n(ts)17 b Fa(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)43 b Fn(99)150 2413 y(con)n(v)n(erting,)26 b(case)f Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(136)150 2501 y(con)n(v)n(erting,)26 b(dates)g(to)g(timestamps)7 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(143)150 2589 y(con)n(v)n(erting,)26 b(during)f(subscripting)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(121)150 2677 y(con)n(v)n(erting,)26 b(n)n(um)n(b)r(ers)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(77)150 2765 y(con)n(v)n(erting,)26 b(n)n(um)n(b)r(ers,)f(to)h(strings)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fn(148)150 2854 y(con)n(v)n(erting,)26 b(strings)g(to)g(n)n(um)n(b)r (ers)16 b Fa(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)42 b Fn(77)150 2942 y Fm(CONVFMT)27 b Fn(v)l(ariable)20 b Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(77,)27 b(108)150 3030 y Fm(CONVFMT)g Fn(v)l(ariable,)g(arra)n(y)f(subscripts)f(and)f Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)50 b Fn(121)150 3118 y(copro)r(cesses)22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 46 b Fn(66,)27 b(166)150 3206 y(copro)r(cesses,)h(closing)21 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(70)150 3294 y(copro)r(cesses,)28 b Fm(getline)f Fn(from)13 b Fa(.)h(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)39 b Fn(55)150 3382 y Fm(cos)26 b Fn(function)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(128)150 3470 y(coun)n(ting)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(228)150 3559 y Fm(csh)26 b Fn(utilit)n(y)8 b Fa(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(21)150 3647 y Fm(csh)26 b Fn(utilit)n(y)-6 b(,)26 b Fm(|&)g Fn(op)r(erator,)h (comparison)g(with)18 b Fa(.)12 b(.)h(.)f(.)g(.)44 b Fn(166)150 3735 y Fm(csh)26 b Fn(utilit)n(y)-6 b(,)26 b(bac)n(kslash)g(con)n(tin)n(uation)f(and)e Fa(.)13 b(.)f(.)g(.)h(.)f (.)g(.)g(.)49 b Fn(20)150 3823 y Fm(csh)26 b Fn(utilit)n(y)-6 b(,)26 b Fm(POSIXLY_CORRECT)j Fn(en)n(vironmen)n(t)24 b(v)l(ariable)317 3910 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(178)150 3998 y Fm(ctime)27 b Fn(user-de\014ned)d(function)9 b Fa(.)k(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)35 b Fn(152)150 4086 y(currency)25 b(sym)n(b)r(ols,)h(lo)r (calization)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)47 b Fn(157)150 4175 y Fm(custom.h)27 b Fn(\014le)16 b Fa(.)d(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(265)150 4263 y Fm(cut)26 b Fn(utilit)n(y)7 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(210)150 4351 y Fm(cut.awk)27 b Fn(program)17 b Fa(.)c(.)g(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)43 b Fn(211)150 4605 y FA(D)150 4723 y Fn(d.c.,)26 b(See)g(dark)f(corner)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)46 b Fn(7)150 4811 y(dark)25 b(corner)13 b Fa(.)g(.)g(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(7,)26 b(62,)h(83,)f(85,)h(302)150 4899 y(dark)e(corner,)i(arra)n (y)e(subscripts)f Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)49 b Fn(122)150 4987 y(dark)25 b(corner,)i Fm(break)f Fn(statemen)n(t)14 b Fa(.)f(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(104)150 5076 y(dark)25 b(corner,)i Fm(close)f Fn(function)7 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(72)150 5164 y(dark)25 b(corner,)i(command-line)f(argumen)n(ts)16 b Fa(.)c(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(77)150 5252 y(dark)25 b(corner,)i Fm(continue)g Fn(statemen)n(t)10 b Fa(.)j(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fn(105)150 5340 y(dark)25 b(corner,)i Fm(CONVFMT)g Fn(v)l(ariable)11 b Fa(.)h(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)36 b Fn(77)2025 299 y(dark)25 b(corner,)h(escap)r(e) h(sequences)9 b Fa(.)j(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)35 b Fn(178)2025 388 y(dark)25 b(corner,)h(escap)r(e)h (sequences,)f(for)g(metac)n(haracters)2193 475 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)40 b Fn(27)2025 563 y(dark)25 b(corner,)h Fm(exit)h Fn(statemen)n(t)16 b Fa(.)c(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(107)2025 652 y(dark)25 b(corner,)h(\014eld)g(separators)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)45 b Fn(47)2025 741 y(dark)25 b(corner,)h Fm(FILENAME)i Fn(v)l(ariable)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(56,)27 b(111)2025 829 y(dark)e(corner,)h Fm(FNR)p Fn(/)p Fm(NR)h Fn(v)l(ariables)14 b Fa(.)g(.)e(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(113)2025 918 y(dark)25 b(corner,)h(format-con)n(trol)h(c)n(haracters)13 b Fa(.)h(.)e(.)h(.)f (.)g(.)g(.)h(.)f(.)39 b Fn(61)2025 1007 y(dark)25 b(corner,)h Fm(FS)g Fn(as)h(n)n(ull)e(string)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(45)2025 1095 y(dark)25 b(corner,)h(input)f(\014les)16 b Fa(.)d(.)g(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(37)2025 1184 y(dark)25 b(corner,)h(in)n(v)n(oking)g Fm(awk)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)50 b Fn(173)2025 1273 y(dark)25 b(corner,)h(m)n (ultiline)g(records)11 b Fa(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)37 b Fn(49)2025 1362 y(dark)25 b(corner,)h Fm(NF)g Fn(v)l(ariable,)h(decremen)n(ting)7 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fn(42)2025 1450 y(dark)25 b(corner,)h Fm(OFMT)h Fn(v)l(ariable)15 b Fa(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)41 b Fn(60)2025 1539 y(dark)25 b(corner,)h(regexp)g (constan)n(ts)12 b Fa(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)38 b Fn(74)2025 1628 y(dark)25 b(corner,)h(regexp)g (constan)n(ts,)g Fm(/=)g Fn(op)r(erator)h(and)2193 1715 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(83)2025 1803 y(dark)25 b(corner,)h(regexp)g(constan)n(ts,)g(as)h(argumen)n(ts)e(to)2178 1891 y(user-de\014ned)g(functions)11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(75)2025 1979 y(dark)25 b(corner,)h Fm(split)h Fn(function)6 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)32 b Fn(133)2025 2068 y(dark)25 b(corner,)h(strings,)h(storing)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)49 b Fn(39)2025 2157 y(data,)26 b(\014xed-width)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(47)2025 2245 y(data-driv)n(en)25 b(languages)13 b Fa(.)h(.)e(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(296)2025 2334 y(database,)27 b(group,)f(reading)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)47 b Fn(205)2025 2423 y(database,)27 b(users,)f(reading) 15 b Fa(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)41 b Fn(201)2025 2511 y Fm(date)26 b Fn(utilit)n(y)-6 b(,)26 b(GNU)6 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)32 b Fn(142)2025 2600 y Fm(date)26 b Fn(utilit)n(y)-6 b(,)26 b(POSIX)10 b Fa(.)h(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(146)2025 2689 y(dates,)26 b(con)n(v)n(erting)g(to)f(timestamps)7 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(143)2025 2777 y(dates,)26 b(information)h(related)f(to,)h(lo)r (calization)12 b Fa(.)i(.)f(.)f(.)g(.)38 b Fn(158)2025 2866 y(Da)n(vies,)26 b(Stephen)13 b Fa(.)e(.)h(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(259,)27 b(277)2025 2955 y Fm(dcgettext)g Fn(function)f(\()p Fm(gawk)p Fn(\))15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)41 b Fn(149,)27 b(158)2025 3043 y Fm(dcgettext)g Fn(function)f(\()p Fm(gawk)p Fn(\),)h(p)r(ortabilit)n(y)f(and)19 b Fa(.)12 b(.)h(.)45 b Fn(161)2025 3132 y Fm(dcngettext)28 b Fn(function)d(\()p Fm(gawk)p Fn(\))13 b Fa(.)h(.)e(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(149,)27 b(158)2025 3221 y Fm(dcngettext)h Fn(function)d(\()p Fm(gawk)p Fn(\),)i(p)r(ortabilit)n (y)f(and)18 b Fa(.)12 b(.)44 b Fn(161)2025 3309 y(deadlo)r(c)n(ks)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 46 b Fn(167)2025 3398 y(debugging)26 b Fm(gawk)10 b Fa(.)j(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(180)2025 3487 y(debugging)26 b Fm(gawk)p Fn(,)h(bug)e(rep)r(orts)11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(276)2025 3575 y(decremen)n(t)25 b(op)r(erators)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)47 b Fn(84)2025 3664 y Fm(default)27 b Fn(k)n(eyw)n(ord)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)45 b Fn(102)2025 3753 y(Dei\014k,)25 b(Scott)11 b Fa(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(9,)27 b(258,)g(276)2025 3841 y Fm(delete)g Fn(statemen)n(t)12 b Fa(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(120)2025 3930 y(deleting)26 b(elemen)n(ts)g(in)g(arra)n(ys)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(120)2025 4019 y(deleting)26 b(en)n(tire)g(arra)n(ys)7 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(120)2025 4108 y(di\013erences)26 b(b)r(et)n(w)n(een)f Fm(gawk)i Fn(and)e Fm(awk)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(130)2025 4196 y(di\013erences)26 b(in)f Fm(awk)i Fn(and)e Fm(gawk)p Fn(,)i Fm(ARGC)p Fn(/)p Fm(ARGV)h Fn(v)l(ariables)2191 4283 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(114)2025 4372 y(di\013erences)26 b(in)f Fm(awk)i Fn(and)e Fm(gawk)p Fn(,)i Fm(ARGIND)g Fn(v)l(ariable)20 b Fa(.)13 b(.)46 b Fn(110)2025 4461 y(di\013erences)26 b(in)f Fm(awk)i Fn(and)e Fm(gawk)p Fn(,)i(arra)n(y)f(elemen)n(ts,)2178 4548 y(deleting)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)34 b Fn(120)2025 4637 y(di\013erences)26 b(in)f Fm(awk)i Fn(and)e Fm(gawk)p Fn(,)i Fm(AWKPATH)g Fn(en)n(vironmen)n(t)2178 4724 y(v)l(ariable)9 b Fa(.)k(.)g(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(179)2025 4812 y(di\013erences)26 b(in)f Fm(awk)i Fn(and)e Fm(gawk)p Fn(,)i Fm(BEGIN)p Fn(/)p Fm(END)h Fn(patterns)2193 4900 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(97)2025 4988 y(di\013erences)26 b(in)f Fm(awk)i Fn(and)e Fm(gawk)p Fn(,)i Fm(BINMODE)g Fn(v)l(ariable)2201 5075 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(108,)27 b(270)2025 5164 y(di\013erences)f(in)f Fm(awk)i Fn(and)e Fm(gawk)p Fn(,)i Fm(close)g Fn(function)d Fa(.)12 b(.)g(.)50 b Fn(71,)2178 5251 y(72)2025 5340 y(di\013erences)26 b(in)f Fm(awk)i Fn(and)e Fm(gawk)p Fn(,)i Fm(ERRNO)g Fn(v)l(ariable)22 b Fa(.)12 b(.)g(.)48 b Fn(111)p eop end %%Page: 329 341 TeXDict begin 329 340 bop 3295 -116 a Fr(Index)91 b FB(329)150 299 y Fn(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i(error)f(messages)d Fa(.)12 b(.)h(.)f(.)46 b Fn(68)150 387 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(FIELDWIDTHS)h Fn(v)l(ariable)317 474 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)39 b Fn(108)150 563 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i(function)f(argumen)n(ts)304 650 y(\()p Fm(gawk)p Fn(\))14 b Fa(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(127)150 738 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(getline)g Fn(command)318 825 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(51)150 914 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(IGNORECASE)h Fn(v)l(ariable)317 1001 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)39 b Fn(108)150 1089 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i(implemen)n(tation)304 1176 y(limitations)9 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(56,)26 b(67)150 1265 y(di\013erences)g(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i(input/output)304 1352 y(op)r(erators)13 b Fa(.)g(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(55,)26 b(66)150 1440 y(di\013erences)f(in)f Fm(awk)i Fn(and)e Fm(gawk)p Fn(,)i(line)f(con)n(tin)n(uations)8 b Fa(.)13 b(.)32 b Fn(89)150 1528 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(LINT)g Fn(v)l(ariable)c Fa(.)12 b(.)h(.)f(.)49 b Fn(109)150 1617 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(match)g Fn(function)15 b Fa(.)e(.)f(.)41 b Fn(131)150 1705 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(next)p Fn(/)p Fm(nextfile)304 1792 y Fn(statemen)n(ts)14 b Fa(.)e(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)40 b Fn(106)150 1880 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(print)p Fn(/)p Fm(printf)304 1968 y Fn(statemen)n(ts)15 b Fa(.)d(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)41 b Fn(62)150 2056 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(PROCINFO)g Fn(arra)n(y)6 b Fa(.)13 b(.)g(.)32 b Fn(112)150 2144 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i(record)f(separators)12 b Fa(.)i(.)38 b Fn(38)150 2233 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i(regexp)f(constan)n(ts)21 b Fa(.)12 b(.)47 b Fn(75)150 2321 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i(regular)g(expressions)318 2408 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(32)150 2496 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(RS)p Fn(/)p Fm(RT)g Fn(v)l(ariables)8 b Fa(.)13 b(.)f(.)h(.)33 b Fn(38)150 2585 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(RT)f Fn(v)l(ariable)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(113)150 2673 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i(single-c)n(haracter)g(\014elds)318 2760 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)40 b Fn(44)150 2848 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(split)g Fn(function)15 b Fa(.)e(.)f(.)41 b Fn(132)150 2937 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i(strings)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)34 b Fn(73)150 3025 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i(strings,)g(storing)14 b Fa(.)g(.)e(.)g(.)40 b Fn(39)150 3113 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(strtonum)g Fn(function)304 3200 y(\()p Fm(gawk)p Fn(\))14 b Fa(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)40 b Fn(133)150 3289 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i Fm(TEXTDOMAIN)h Fn(v)l(ariable)317 3376 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(110)150 3464 y(di\013erences)26 b(in)g Fm(awk)g Fn(and)f Fm(gawk)p Fn(,)i(trunc-mo)r(d)e(op)r(eration) 318 3551 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(79)150 3640 y(directories,)27 b(c)n(hanging)17 b Fa(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(287)150 3728 y(directories,)27 b(searc)n(hing)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)46 b Fn(179,)27 b(250)150 3816 y(division)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)42 b Fn(79)150 3905 y Fm(do)p Fn(-)p Fm(while)27 b Fn(statemen)n(t)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(24,)27 b(101)150 3993 y(do)r(cumen)n(tation,)f(of)h Fm(awk)f Fn(programs)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)43 b Fn(181)150 4081 y(do)r(cumen)n(tation,)26 b(online)9 b Fa(.)k(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(7)150 4170 y(do)r(cumen)n(ts,) 26 b(searc)n(hing)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)49 b Fn(230)150 4258 y(dollar)27 b(sign)f(\()p Fm($)p Fn(\))17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(27)150 4346 y(dollar)27 b(sign)f(\()p Fm($)p Fn(\),)g Fm($)g Fn(\014eld)f(op)r(erator)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)45 b Fn(39,)26 b(91)150 4434 y(dollar)h(sign)f(\()p Fm($)p Fn(\),)g(incremen)n(ting)g(\014elds)g(and)f(arra)n(ys)15 b Fa(.)e(.)40 b Fn(84)150 4523 y(double)25 b(quote)h(\()p Fm(")p Fn(\))c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(12,)26 b(15)150 4611 y(double)f(quote)h(\()p Fm(")p Fn(\),)g(regexp)f(constan)n(ts)17 b Fa(.)c(.)f(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)43 b Fn(34)150 4699 y(double-precision)26 b(\015oating-p)r(oin)n(t)16 b Fa(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)42 b Fn(296)150 4788 y(Drepp)r(er,)25 b(Ulric)n(h)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) 37 b Fn(9)150 4876 y Fm(dupnode)27 b Fn(in)n(ternal)f(function)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)49 b Fn(284)150 4964 y Fm(dupword.awk)28 b Fn(program)11 b Fa(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)37 b Fn(231)150 5222 y FA(E)150 5340 y Fn(EBCDIC)11 b Fa(.)i(.)f(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(189)2025 299 y Fm(egrep)26 b Fn(utilit)n(y)15 b Fa(.)d(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)40 b Fn(29,)27 b(215)2025 387 y Fm(egrep.awk)g Fn(program)14 b Fa(.)g(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(216)2025 476 y(elemen)n(ts)26 b(in)f(arra)n(ys)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)48 b Fn(117)2025 565 y(elemen)n(ts)26 b(in)f(arra)n(ys,)i (assigning)10 b Fa(.)k(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)36 b Fn(118)2025 653 y(elemen)n(ts)26 b(in)f(arra)n(ys,)i(deleting)11 b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(120)2025 742 y(elemen)n(ts)26 b(in)f(arra)n(ys,)i(order)f(of)12 b Fa(.)h(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)38 b Fn(120)2025 830 y(elemen)n(ts)26 b(in)f(arra)n(ys,)i(scanning) 16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)42 b Fn(119)2025 919 y(email)27 b(address)f(for)g(bug)g(rep)r(orts,) g Fm(bug-gawk@gnu.org)2191 1006 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(276)2025 1095 y Fm(EMISTERED)24 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fn(168)2025 1183 y(empt)n(y)24 b(pattern)13 b Fa(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)39 b Fn(97)2025 1272 y(empt)n(y)24 b(strings,)j(See)f(n)n (ull)f(strings)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)45 b Fn(44)2025 1360 y Fm(END)26 b Fn(pattern)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)48 b Fn(96)2025 1449 y Fm(END)26 b Fn(pattern,)g Fm(assert)h Fn(user-de\014ned)d(function)i(and)2191 1536 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)39 b Fn(187)2025 1625 y Fm(END)26 b Fn(pattern,)g(bac)n(kslash)g(con)n(tin)n(uation)f(and)16 b Fa(.)c(.)g(.)h(.)f(.)g(.)42 b Fn(219)2025 1713 y Fm(END)26 b Fn(pattern,)g(Bo)r(olean)h(patterns)f(and)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)45 b Fn(94)2025 1802 y Fm(END)26 b Fn(pattern,)g Fm(exit)g Fn(statemen)n(t)g(and)12 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(106)2025 1890 y Fm(END)26 b Fn(pattern,)g Fm(next)p Fn(/)p Fm(nextfile)i Fn(statemen)n(ts)e(and)11 b Fa(.)h(.)g(.)37 b Fn(97,)2178 1977 y(105)2025 2066 y Fm(END)26 b Fn(pattern,)g(op)r (erators)h(and)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(96)2025 2155 y Fm(END)26 b Fn(pattern,)g Fm(pgawk)g Fn(program)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)45 b Fn(170)2025 2243 y Fm(END)26 b Fn(pattern,)g Fm(print)g Fn(statemen)n(t)g(and)11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)37 b Fn(97)2025 2332 y Fm(endfile)27 b Fn(user-de\014ned)d(function)6 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fn(193)2025 2420 y Fm(endgrent)27 b Fn(function)f(\(C)g(library\))d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(209)2025 2509 y Fm(endgrent)27 b Fn(user-de\014ned)e(function)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(209)2025 2597 y Fm(endpwent)27 b Fn(function)f(\(C)g(library\))d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(205)2025 2686 y Fm(endpwent)27 b Fn(user-de\014ned)e(function)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(205)2025 2774 y Fm(ENVIRON)27 b Fn(v)l(ariable)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(111,)27 b(285)2025 2863 y(en)n(vironmen)n(t)e(v)l(ariables)13 b Fa(.)g(.)f(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(111)2025 2952 y(ep)r(o)r(c)n(h,)26 b(de\014nition)f(of)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fn(303)2025 3040 y(equals)26 b(sign)g(\()p Fm(=)p Fn(\),)g Fm(=)g Fn(op)r(erator)11 b Fa(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)37 b Fn(81)2025 3129 y(equals)26 b(sign)g(\()p Fm(=)p Fn(\),)g Fm(==)g Fn(op)r(erator)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(86,)27 b(91)2025 3217 y(EREs)f(\(Extended)e(Regular)i(Expressions\))d Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(29)2025 3306 y Fm(ERRNO)26 b Fn(v)l(ariable)14 b Fa(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)40 b Fn(51,)27 b(111,)g(285)2025 3394 y(error)f(handling)15 b Fa(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(68)2025 3483 y(error)26 b(handling,)g Fm(ERRNO)h Fn(v)l(ariable)f(and)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)45 b Fn(111)2025 3572 y(error)26 b(output)11 b Fa(.)g(.)i(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(68)2025 3660 y(escap)r(e)26 b(pro)r(cessing,)i Fm(gsub)p Fn(/)p Fm(gensub)p Fn(/)p Fm(sub)h Fn(functions)2191 3747 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)39 b Fn(137)2025 3836 y(escap)r(e)26 b(sequences)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(25)2025 3924 y(escap)r(e)26 b(sequences,)g(unrecognized)21 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fn(176)2025 4013 y(ev)l(aluation)26 b(order)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(84)2025 4101 y(ev)l(aluation)26 b(order,)g(concatenation)17 b Fa(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)43 b Fn(80)2025 4190 y(ev)l(aluation)26 b(order,)g(functions)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)49 b Fn(127)2025 4279 y(examining)26 b(\014elds)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(39)2025 4367 y(exclamation)27 b(p)r(oin)n(t)e(\()p Fm(!)p Fn(\),)h Fm(!)g Fn(op)r(erator)d Fa(.)12 b(.)g(.)g(.)h(.)47 b Fn(88,)27 b(91,)g(218)2025 4456 y(exclamation)g(p)r(oin)n(t)e(\()p Fm(!)p Fn(\),)h Fm(!=)g Fn(op)r(erator)10 b Fa(.)k(.)e(.)h(.)f(.)g(.)g (.)h(.)f(.)36 b Fn(86,)27 b(91)2025 4544 y(exclamation)e(p)r(oin)n(t)f (\()p Fm(!)p Fn(\),)h Fm(!~)g Fn(op)r(erator)8 b Fa(.)13 b(.)33 b Fn(24,)26 b(32,)f(34,)h(74,)2178 4631 y(86,)h(87,)g(91,)g(94) 2025 4720 y Fm(exit)f Fn(statemen)n(t)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)41 b Fn(106)2025 4809 y Fm(exp)26 b Fn(function)8 b Fa(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)34 b Fn(128)2025 4897 y Fm(expand)27 b Fn(utilit)n(y)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(18)2025 4986 y(expressions)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fn(73)2025 5074 y(expressions,)27 b(as)f(patterns)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fn(93)2025 5163 y(expressions,)27 b(assignmen)n(t)22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)48 b Fn(81)2025 5251 y(expressions,)27 b(Bo)r(olean)18 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(88)2025 5340 y(expressions,)27 b(comparison)17 b Fa(.)c(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)43 b Fn(85)p eop end %%Page: 330 342 TeXDict begin 330 341 bop 150 -116 a FB(330)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fn(expressions,)d(conditional)22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(89)150 387 y(expressions,)27 b(matc)n(hing,)f(See)g(comparison)g (expressions)318 474 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(85)150 563 y(expressions,)27 b(selecting)9 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 35 b Fn(89)150 651 y(Extended)25 b(Regular)h(Expressions)g(\(EREs\))c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(29)150 740 y Fm(extension)28 b Fn(function)d(\()p Fm(gawk)p Fn(\))f Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)49 b Fn(291)150 828 y(extensions,)26 b(Bell)h(Lab)r(oratories)h Fm(awk)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(254)150 917 y(extensions,)26 b(in)g Fm(gawk)p Fn(,)h(not)e(in)h (POSIX)e Fm(awk)h Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)50 b Fn(255)150 1005 y(extensions,)26 b Fm(mawk)16 b Fa(.)d(.)f(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)41 b Fn(277)150 1093 y Fm(extract.awk)28 b Fn(program)11 b Fa(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)37 b Fn(241)150 1182 y(extraction,)26 b(of)h(mark)n(ed)e(strings)h(\(in)n (ternationalization\))317 1269 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(160)150 1508 y FA(F)150 1627 y Fn(false,)28 b(logical)14 b Fa(.)g(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(85)150 1715 y(FDL)25 b(\(F)-6 b(ree)26 b(Do)r(cumen)n(tation)g (License\))19 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(316)150 1803 y(features,)27 b(adding)f(to)g Fm(gawk)11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)36 b Fn(279)150 1892 y(features,)27 b(adv)l(anced,)e (See)h(adv)l(anced)f(features)7 b Fa(.)13 b(.)f(.)h(.)f(.)33 b Fn(180)150 1980 y(features,)27 b(deprecated)8 b Fa(.)k(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)34 b Fn(180)150 2069 y(features,)27 b(undo)r(cumen)n(ted)17 b Fa(.)10 b(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)42 b Fn(180)150 2157 y(F)-6 b(enlason,)27 b(Ja)n(y)19 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fn(4,)26 b(258)150 2246 y Fm(fflush)h Fn(function)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)48 b Fn(140)150 2334 y Fm(fflush)27 b Fn(function,)f(unsupp)r(orted)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(176)150 2422 y(\014eld)25 b(n)n(um)n(b)r(ers)11 b Fa(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(40)150 2511 y(\014eld)25 b(op)r(erator)i Fm($)15 b Fa(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(39)150 2599 y(\014eld)25 b(op)r(erators,)j(dollar)e(sign)h(as)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)48 b Fn(39)150 2688 y(\014eld)25 b(separators)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)45 b Fn(43,)27 b(108,)g(109)150 2776 y(\014eld)e (separators,)j(c)n(hoice)e(of)13 b Fa(.)g(.)g(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)39 b Fn(43)150 2864 y(\014eld)25 b(separators,)j Fm(FIELDWIDTHS)g Fn(v)l(ariable)e(and)13 b Fa(.)f(.)h(.)f(.)39 b Fn(108)150 2953 y(\014eld)25 b(separators,)j(in)d(m)n(ultiline)i(records)14 b Fa(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(49)150 3041 y(\014eld)25 b(separators,)j(on)e(command)f(line)15 b Fa(.)f(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)41 b Fn(45)150 3130 y(\014eld)25 b(separators,)j(POSIX)c(and)11 b Fa(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(39,)26 b(46)150 3218 y(\014eld)f(separators,)j(regular)f (expressions)f(as)d Fa(.)12 b(.)g(.)h(.)f(.)48 b Fn(43,)26 b(44)150 3306 y(\014eld)f(separators,)j(See)d(Also)i Fm(OFS)17 b Fa(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)42 b Fn(41)150 3395 y(\014eld)25 b(separators,)j(spaces)e (as)e Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)49 b Fn(212)150 3483 y(\014elds)8 b Fa(.)k(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(36,)26 b(39,)h(296)150 3572 y(\014elds,)f(adding)14 b Fa(.)f(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(41)150 3660 y(\014elds,)26 b(c)n(hanging)g(con)n(ten)n(ts)g(of)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)45 b Fn(41)150 3749 y(\014elds,)26 b(cutting)7 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(210)150 3837 y(\014elds,)26 b(examining)10 b Fa(.)j(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(39)150 3925 y(\014elds,)26 b(n)n(um)n(b)r(er)f(of)11 b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)36 b Fn(39)150 4014 y(\014elds,)26 b(n)n(um)n(b)r(ers)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)47 b Fn(40)150 4102 y(\014elds,)26 b(prin)n(ting)12 b Fa(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(58)150 4191 y(\014elds,)26 b(separating)9 b Fa(.)k(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)34 b Fn(43)150 4279 y(\014elds,)26 b(single-c)n(haracter)11 b Fa(.)j(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(44)150 4367 y Fm(FIELDWIDTHS)28 b Fn(v)l(ariable)13 b Fa(.)g(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(47,)27 b(108)150 4456 y(\014le)f(descriptors)11 b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)36 b Fn(68)150 4544 y(\014le)26 b(names,)g (distinguishing)12 b Fa(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(111)150 4633 y(\014le)26 b(names,)g(in)g(compatibilit)n(y)g(mo)r(de)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fn(70)150 4721 y(\014le)26 b(names,)g(standard)g(streams)g(in)g Fm(gawk)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(68)150 4810 y Fm(FILENAME)27 b Fn(v)l(ariable)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(36,)27 b(111)150 4898 y Fm(FILENAME)g Fn(v)l(ariable,)g Fm(getline)p Fn(,)g(setting)g(with)22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)48 b Fn(56)150 4986 y(\014lenames,)27 b(assignmen)n(ts)f(as)10 b Fa(.)k(.)e(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(196)150 5075 y(\014les,)26 b Fm(.mo)16 b Fa(.)d(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(157)150 5163 y(\014les,)26 b Fm(.mo)p Fn(,)h(con)n(v)n(erting)e(from)i Fm(.po)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)45 b Fn(163)150 5252 y(\014les,)26 b Fm(.mo)p Fn(,)h(sp)r(ecifying)g(directory)e(of)11 b Fa(.)j(.)e(.)g(.)h(.)f(.)g (.)h(.)f(.)37 b Fn(157,)27 b(158)150 5340 y(\014les,)f Fm(.po)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(156,)27 b(159)2025 299 y(\014les,)f Fm(.po)p Fn(,)h(con)n(v)n (erting)e(to)h Fm(.mo)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(163)2025 387 y(\014les,)26 b Fm(/dev/...)i Fn(sp)r(ecial)f(\014les)8 b Fa(.)k(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(68)2025 476 y(\014les,)26 b Fm(/inet/)h Fn(\()p Fm(gawk)p Fn(\))18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(168)2025 565 y(\014les,)26 b Fm(/p)g Fn(\()p Fm(gawk)p Fn(\))e Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(169)2025 653 y(\014les,)26 b(as)g(single)h(records)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fn(39)2025 742 y(\014les,)26 b Fm(awk)g Fn(programs)h(in)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(12)2025 830 y(\014les,)26 b Fm(awkprof.out)f Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fn(169)2025 919 y(\014les,)26 b Fm(awkvars.out)f Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fn(175)2025 1007 y(\014les,)26 b(closing)16 b Fa(.)e(.)e(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(140)2025 1096 y(\014les,)26 b(descriptors,)h(See)f(\014le)f(descriptors)12 b Fa(.)i(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(68)2025 1185 y(\014les,)26 b(for)h(pro)r(cess)f(information)15 b Fa(.)f(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)41 b Fn(69)2025 1273 y(\014les,)26 b(group)15 b Fa(.)e(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(205)2025 1362 y(\014les,)26 b(information)h(ab)r(out,)f(retrieving)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(287)2025 1450 y(\014les,)26 b(initialization)i(and)d(clean)n(up)13 b Fa(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(192)2025 1539 y(\014les,)26 b(input,)f(See)h(input)f(\014les)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)44 b Fn(12)2025 1627 y(\014les,)26 b(log,)h(timestamps)g (in)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)46 b Fn(142)2025 1716 y(\014les,)26 b(managing)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(192)2025 1804 y(\014les,)26 b(managing,)h(data)f(\014le)g(b)r (oundaries)11 b Fa(.)i(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(192)2025 1893 y(\014les,)26 b(message)h(ob)t(ject)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(157)2025 1982 y(\014les,)26 b(message)h(ob)t(ject,)g(con)n(v)n(erting)f(from)g(p)r (ortable)2178 2069 y(ob)t(ject)h(\014les)14 b Fa(.)f(.)f(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)40 b Fn(163)2025 2157 y(\014les,)26 b(message)h(ob)t(ject,)g(sp)r(ecifying)g(directory)f(of)16 b Fa(.)d(.)42 b Fn(157,)2178 2244 y(158)2025 2333 y(\014les,)26 b(m)n(ultiple)g(passes)h(o)n(v)n(er)12 b Fa(.)f(.)i(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(178)2025 2422 y(\014les,)26 b(m)n(ultiple,)g(duplicating)g(output) f(in)n(to)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(223)2025 2510 y(\014les,)26 b(output,)f(See)h(output)e(\014les)8 b Fa(.)13 b(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)34 b Fn(70)2025 2599 y(\014les,)26 b(passw)n(ord)13 b Fa(.)g(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(201)2025 2687 y(\014les,)26 b(p)r(ortable)g(ob)t(ject)10 b Fa(.)k(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)36 b Fn(156,)27 b(159)2025 2776 y(\014les,)f(p)r(ortable)g (ob)t(ject,)h(con)n(v)n(erting)f(to)g(message)h(ob)t(ject)2178 2863 y(\014les)22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(163)2025 2952 y(\014les,)26 b(p)r(ortable)g(ob)t(ject,)h(generating)21 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(175)2025 3040 y(\014les,)26 b(p)r(ortal)10 b Fa(.)j(.)f(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fn(169)2025 3129 y(\014les,)26 b(pro)r(cessing,)i Fm(ARGIND)f Fn(v)l(ariable)f(and) 15 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(110)2025 3217 y(\014les,)26 b(reading)f Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)50 b Fn(194)2025 3306 y(\014les,)26 b(reading,)h(m)n(ultiline)f(records)11 b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(49)2025 3394 y(\014les,)26 b(searc)n(hing)h(for)f(regular)h(expressions)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(215)2025 3483 y(\014les,)26 b(skipping)8 b Fa(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)34 b Fn(194)2025 3572 y(\014les,)26 b(source,)h(searc)n(h)f(path)f(for)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(250)2025 3660 y(\014les,)26 b(splitting)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)35 b Fn(221)2025 3749 y(\014les,)26 b(T)-6 b(exinfo,)27 b(extracting)f(programs)g(from)f Fa(.)13 b(.)f(.)g(.)h(.)f(.)50 b Fn(240)2025 3837 y(Fish,)26 b(F)-6 b(red)19 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fn(258,)27 b(276)2025 3926 y(\014xed-width)d(data)14 b Fa(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)40 b Fn(47)2025 4014 y(\015ag)26 b(v)l(ariables)9 b Fa(.)k(.)f(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)35 b Fn(88,)27 b(223)2025 4103 y(\015oating-p)r (oin)n(t)9 b Fa(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(298)2025 4191 y(\015oating-p)r(oin)n(t,)26 b(n)n(um)n(b)r(ers)7 b Fa(.)12 b(.)g(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)33 b Fn(296)2025 4280 y(\015oating-p)r(oin)n(t,) 26 b(n)n(um)n(b)r(ers,)f Fm(AWKNUM)i Fn(in)n(ternal)f(t)n(yp)r(e)2191 4367 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(283)2025 4456 y Fm(FNR)26 b Fn(v)l(ariable)7 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 33 b Fn(36,)27 b(111)2025 4544 y Fm(FNR)f Fn(v)l(ariable,)h(c)n (hanging)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50 b Fn(113)2025 4633 y Fm(for)26 b Fn(statemen)n(t)16 b Fa(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)42 b Fn(101)2025 4721 y Fm(for)26 b Fn(statemen)n(t,)g (in)g(arra)n(ys)9 b Fa(.)j(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(119)2025 4810 y Fm(force_number)28 b Fn(in)n(ternal)e(function)16 b Fa(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(283)2025 4899 y Fm(force_string)28 b Fn(in)n(ternal)e(function)16 b Fa(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(283)2025 4987 y(format)27 b(sp)r(eci\014ers,)f(mixing)g(regular)h (with)f(p)r(ositional)2178 5074 y(sp)r(eci\014ers)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(161)2025 5163 y(format)27 b(sp)r(eci\014ers,)f Fm(printf)h Fn(statemen)n(t)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fn(60)2025 5251 y(format)27 b(sp)r(eci\014ers,)f Fm(strftime)i Fn(function)e(\()p Fm(gawk)p Fn(\))16 b Fa(.)d(.)f(.)42 b Fn(144)2025 5340 y(format)27 b(strings)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(60)p eop end %%Page: 331 343 TeXDict begin 331 342 bop 3295 -116 a Fr(Index)91 b FB(331)150 299 y Fn(formats,)27 b(n)n(umeric)f(output)8 b Fa(.)j(.)h(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(59)150 387 y(formatting)27 b(output)22 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fn(60)150 475 y(forw)n(ard)27 b(slash)g(\()p Fm(/)p Fn(\))6 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)31 b Fn(24)150 563 y(forw)n(ard)c(slash)g(\()p Fm(/)p Fn(\),)e Fm(/)h Fn(op)r(erator)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(91)150 651 y(forw)n(ard)27 b(slash)g(\()p Fm(/)p Fn(\),)e Fm(/=)h Fn(op)r(erator)17 b Fa(.)d(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(83,)26 b(92)150 740 y(forw)n(ard)h(slash)g(\()p Fm(/)p Fn(\),)e Fm(/=)h Fn(op)r(erator,)h(vs.)35 b Fm(/=...)q(/)26 b Fn(regexp)304 827 y(constan)n(t)17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)43 b Fn(83)150 915 y(forw)n(ard)27 b(slash)g(\()p Fm(/)p Fn(\),)e(patterns)h(and)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fn(94)150 1003 y(F)-6 b(ree)26 b(Do)r(cumen)n(tation)f(License)i (\(FDL\))18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(316)150 1091 y(F)-6 b(ree)26 b(Soft)n(w)n(are)g(F)-6 b(oundation)26 b(\(FSF\))20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)47 b Fn(7,)26 b(260,)h(304)150 1179 y Fm(free_temp)h Fn(in)n(ternal)e (macro)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)45 b Fn(284)150 1267 y(F)-6 b(reeBSD)14 b Fa(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)40 b Fn(308)150 1356 y Fm(FS)26 b Fn(v)l(ariable)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(43,)27 b(108)150 1444 y Fm(FS)f Fn(v)l(ariable,)h Fm(--field-separator)i Fn(option)d(and)9 b Fa(.)j(.)h(.)35 b Fn(173)150 1532 y(FS)25 b(v)l(ariable,)i(as)f(n)n(ull)g(string)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)47 b Fn(45)150 1620 y Fm(FS)26 b Fn(v)l(ariable,)h(as)f (T)-6 b(AB)25 b(c)n(haracter)g Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(176)150 1708 y Fm(FS)26 b Fn(v)l(ariable,)h(c)n(hanging)f(v)l(alue)f(of)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(43,)27 b(180)150 1796 y Fm(FS)f Fn(v)l(ariable,)h(running)e Fm(awk)h Fn(programs)h(and)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(211)150 1884 y Fm(FS)26 b Fn(v)l(ariable,)h(setting)f(from)g (command)g(line)14 b Fa(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(45)150 1973 y(FSF)26 b(\(F)-6 b(ree)25 b(Soft)n(w)n(are)i(F)-6 b(oundation\))20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)47 b Fn(7,)26 b(260,)h(304)150 2061 y(function)f(calls)13 b Fa(.)h(.)e(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(89)150 2149 y(functions,)26 b(arra)n(ys)h(as)f(parameters)g(to)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(153)150 2237 y(functions,)26 b(built-in)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)44 b Fn(89,)27 b(127)150 2325 y(functions,)f (built-in,)g(adding)f(to)h Fm(gawk)f Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)50 b Fn(282)150 2413 y(functions,)26 b(built-in,)g(ev)l (aluation)g(order)21 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(127)150 2501 y(functions,)26 b(de\014ning)18 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(149)150 2590 y(functions,)26 b(library)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fn(181)150 2678 y(functions,)26 b(library)-6 b(,)26 b(assertions)18 b Fa(.)c(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)44 b Fn(186)150 2766 y(functions,)26 b(library)-6 b(,)26 b(asso)r(ciativ)n(e)i(arra)n(ys)e(and)12 b Fa(.)g(.)g(.)h(.)f(.)g(.)38 b Fn(182)150 2854 y(functions,)26 b(library)-6 b(,)26 b(C)g(library)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)36 b Fn(196)150 2942 y(functions,)26 b(library)-6 b(,)26 b(c)n(haracter)h(v)l(alues)e (as)i(n)n(um)n(b)r(ers)317 3029 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(188)150 3118 y(functions,)26 b(library)-6 b(,)26 b(Cli\013)h(random)f(n)n(um)n(b)r(ers)13 b Fa(.)f(.)g(.)g(.)g(.)h(.)39 b Fn(188)150 3206 y(functions,)26 b(library)-6 b(,)26 b(command-line)g(options)11 b Fa(.)i(.)g(.)f(.)g(.)h(.)37 b Fn(196)150 3294 y(functions,)25 b(library)-6 b(,)24 b(example)g(program)h(for)f(using)8 b Fa(.)13 b(.)32 b Fn(244)150 3382 y(functions,)26 b(library)-6 b(,)26 b(group)g(database,)h(reading)13 b Fa(.)g(.)f(.)h(.)39 b Fn(205)150 3470 y(functions,)26 b(library)-6 b(,)26 b(managing)h(data)f(\014les)18 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(192)150 3558 y(functions,)26 b(library)-6 b(,)26 b(managing)h(time)c Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)48 b Fn(190)150 3646 y(functions,)24 b(library)-6 b(,)24 b(merging)g(arra)n(ys)g(in)n(to)f(strings)8 b Fa(.)14 b(.)31 b Fn(190)150 3735 y(functions,)26 b(library)-6 b(,)26 b Fm(nextfile)i Fn(statemen)n(t)9 b Fa(.)j(.)g(.)h(.)f(.)g(.)h (.)f(.)35 b Fn(183)150 3823 y(functions,)26 b(library)-6 b(,)26 b(rounding)g(n)n(um)n(b)r(ers)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)48 b Fn(187)150 3911 y(functions,)26 b(library)-6 b(,)26 b(user)g(database,)h(reading)c Fa(.)12 b(.)h(.)f(.)g(.)49 b Fn(201)150 3999 y(functions,)26 b(names)h(of)11 b Fa(.)i(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(116,)27 b(150)150 4087 y(functions,)f(recursiv)n(e)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(150)150 4175 y(functions,)26 b(return)f(v)l(alues,)h(setting)12 b Fa(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(285)150 4263 y(functions,)26 b(string-translation)e Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)48 b Fn(149)150 4352 y(functions,)26 b(unde\014ned)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)50 b Fn(153)150 4440 y(functions,)26 b(user-de\014ned)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(149)150 4528 y(functions,)26 b(user-de\014ned,)f(calling)16 b Fa(.)e(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(152)150 4616 y(functions,)26 b(user-de\014ned,)f(coun)n(ts)17 b Fa(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(171)150 4704 y(functions,)26 b(user-de\014ned,)f(library)h(of)f Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(181)150 4792 y(functions,)26 b(user-de\014ned,)f Fm(next)p Fn(/)p Fm(nextfile)k Fn(statemen)n(ts)304 4879 y(and)16 b Fa(.)11 b(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)42 b Fn(105,)27 b(106)150 5134 y FA(G)150 5252 y Fn(G-d)10 b Fa(.)h(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(9)150 5340 y(Gar\014nkle,)26 b(Scott)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(258)2025 299 y Fm(gawk)p Fn(,)27 b Fm(awk)f Fn(and)14 b Fa(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(3,)27 b(5)2025 389 y Fm(gawk)p Fn(,)g(bit)n(wise)f(op)r(erations)h (in)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)47 b Fn(147)2025 479 y Fm(gawk)p Fn(,)27 b Fm(break)f Fn(statemen)n(t)g(in)12 b Fa(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(104)2025 569 y Fm(gawk)p Fn(,)27 b(built-in)e(v)l(ariables)h(and) 12 b Fa(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)38 b Fn(107)2025 659 y Fm(gawk)p Fn(,)27 b(c)n(haracter)f (classes)h(and)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(31)2025 750 y Fm(gawk)p Fn(,)27 b(co)r(ding)f(st)n(yle)g(in)16 b Fa(.)c(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)42 b Fn(279)2025 840 y Fm(gawk)p Fn(,)27 b(command-line)f (options)19 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)45 b Fn(32)2025 930 y Fm(gawk)p Fn(,)27 b(comparison)g(op)r(erators)f(and)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(87)2025 1020 y Fm(gawk)p Fn(,)27 b(con\014guring)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)46 b Fn(265)2025 1110 y Fm(gawk)p Fn(,)27 b(con\014guring,)f(options)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(264)2025 1200 y Fm(gawk)p Fn(,)27 b Fm(continue)g Fn(statemen)n(t)f(in)7 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)34 b Fn(105)2025 1290 y Fm(gawk)p Fn(,)27 b(debugging)17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(180)2025 1380 y Fm(gawk)p Fn(,)27 b(distribution)9 b Fa(.)j(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)36 b Fn(261)2025 1471 y Fm(gawk)p Fn(,)27 b(escap)r(e)f(sequences)16 b Fa(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(26)2025 1561 y Fm(gawk)p Fn(,)27 b(extensions,)f(disabling)6 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)32 b Fn(176)2025 1651 y Fm(gawk)p Fn(,)27 b(features,)g(adding)11 b Fa(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(279)2025 1741 y Fm(gawk)p Fn(,)27 b(features,)g(adv)l(anced)22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)50 b Fn(165)2025 1831 y Fm(gawk)p Fn(,)27 b Fm(fflush)g Fn(function)e(in)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(140)2025 1921 y Fm(gawk)p Fn(,)27 b(\014eld)e(separators)i(and)22 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)48 b Fn(108)2025 2011 y Fm(gawk)p Fn(,)27 b Fm(FIELDWIDTHS)h Fn(v)l(ariable)e(in)19 b Fa(.)12 b(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fn(108)2025 2101 y Fm(gawk)p Fn(,)27 b(\014le)e(names)h(in)14 b Fa(.)f(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)39 b Fn(67)2025 2192 y Fm(gawk)p Fn(,)27 b(format-con)n(trol)g(c)n(haracters)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(61)2025 2282 y Fm(gawk)p Fn(,)27 b(function)e(argumen)n(ts)h(and)7 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 33 b Fn(127)2025 2372 y Fm(gawk)p Fn(,)27 b(functions,)f(adding)7 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)34 b Fn(282)2025 2462 y Fm(gawk)p Fn(,)27 b(hexadecimal)f(n)n(um)n(b)r(ers)f(and)8 b Fa(.)k(.)g(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(74)2025 2552 y Fm(gawk)p Fn(,)27 b Fm(IGNORECASE)g Fn(v)l(ariable)g(in)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 47 b Fn(109)2025 2642 y Fm(gawk)p Fn(,)27 b(implemen)n(tation)f(issues) 20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)45 b Fn(279)2025 2732 y Fm(gawk)p Fn(,)27 b(implemen)n(tation)f (issues,)h(debugging)6 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)32 b Fn(279)2025 2822 y Fm(gawk)p Fn(,)27 b(implemen)n(tation)f(issues,)h (do)n(wn)n(w)n(ard)2178 2910 y(compatibilit)n(y)9 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(279)2025 3000 y Fm(gawk)p Fn(,)27 b(implemen)n(tation)f(issues,)h(limits)11 b Fa(.)j(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(56)2025 3090 y Fm(gawk)p Fn(,)27 b(implemen)n(tation)f(issues,)h (pip)r(es)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)45 b Fn(67)2025 3180 y Fm(gawk)p Fn(,)27 b(installing)16 b Fa(.)d(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(260)2025 3270 y Fm(gawk)p Fn(,)27 b(in)n(ternals)7 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(282)2025 3360 y Fm(gawk)p Fn(,)27 b(in)n(ternationalization)g (and,)f(See)2178 3447 y(in)n(ternationalization)12 b Fa(.)j(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)39 b Fn(156)2025 3537 y Fm(gawk)p Fn(,)27 b(in)n(terpreter,)e(adding)h(co)r(de)g(to)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fn(291,)27 b(294)2025 3628 y Fm(gawk)p Fn(,)g(in)n(terv)l(al)e(expressions)i(and)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(29)2025 3718 y Fm(gawk)p Fn(,)27 b(line)f(con)n(tin)n(uation)f(in) 8 b Fa(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)33 b Fn(89)2025 3808 y Fm(gawk)p Fn(,)27 b Fm(LINT)f Fn(v)l(ariable)g(in)11 b Fa(.)i(.)f(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(109)2025 3898 y Fm(gawk)p Fn(,)27 b(list)f(of)g(con)n(tributors)g (to)10 b Fa(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)37 b Fn(258)2025 3988 y Fm(gawk)p Fn(,)27 b(MS-DOS)d(v)n(ersion)i(of)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(270)2025 4078 y Fm(gawk)p Fn(,)27 b(newlines)f(in)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)47 b Fn(21)2025 4168 y Fm(gawk)p Fn(,)27 b Fm(next)f(file)h Fn(statemen)n(t)e(in)13 b Fa(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(106)2025 4258 y Fm(gawk)p Fn(,)27 b Fm(nextfile)g Fn(statemen)n(t)f(in)17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)43 b Fn(106,)27 b(183)2025 4349 y Fm(gawk)p Fn(,)g(o)r(ctal)f(n) n(um)n(b)r(ers)f(and)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fn(74)2025 4439 y Fm(gawk)p Fn(,)27 b(OS/2)e(v)n(ersion)h(of)15 b Fa(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(270)2025 4529 y Fm(gawk)p Fn(,)27 b(regexp)e(constan)n(ts)h(and)16 b Fa(.)c(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)42 b Fn(75)2025 4619 y Fm(gawk)p Fn(,)27 b(regular)f(expressions,)h(case)g (sensitivit)n(y)14 b Fa(.)e(.)g(.)h(.)f(.)g(.)40 b Fn(32)2025 4709 y Fm(gawk)p Fn(,)27 b(regular)f(expressions,)h(op)r(erators)17 b Fa(.)d(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fn(31)2025 4799 y Fm(gawk)p Fn(,)27 b(regular)f(expressions,)h(precedence)11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(29)2025 4889 y Fm(gawk)p Fn(,)27 b(See)e(Also)h Fm(awk)12 b Fa(.)i(.)e(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(3)2025 4979 y Fm(gawk)p Fn(,)27 b(source)f(co)r(de,)g(obtaining)13 b Fa(.)g(.)g(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(260)2025 5070 y Fm(gawk)p Fn(,)27 b(splitting)f(\014elds)g(and)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)48 b Fn(48)2025 5160 y Fm(gawk)p Fn(,)27 b(string-translation)g(functions)22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)48 b Fn(149)2025 5250 y Fm(gawk)p Fn(,)27 b(timestamps)14 b Fa(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(142)2025 5340 y Fm(gawk)p Fn(,)27 b(uses)f(for)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(3)p eop end %%Page: 332 344 TeXDict begin 332 343 bop 150 -116 a FB(332)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fm(gawk)p Fn(,)d(v)n(ersions)f(of,)h(information)g(ab)r(out,)f (prin)n(ting)317 386 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(177)150 475 y Fm(gawk)p Fn(,)27 b(w)n(ord-b)r(oundary)e(op)r(erator)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(31)150 563 y(General)27 b(Public)f(License)g(\(GPL\))17 b Fa(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fn(304)150 652 y(General)27 b(Public)f(License,)g(See)g(GPL)7 b Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(7)150 740 y Fm(gensub)27 b Fn(function)f(\()p Fm(gawk)p Fn(\))21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)46 b Fn(75,)27 b(135)150 829 y Fm(gensub)g Fn(function)f(\()p Fm(gawk)p Fn(\),)g(escap)r(e)h(pro)r(cessing)21 b Fa(.)13 b(.)f(.)g(.)46 b Fn(137)150 917 y Fm(get_actual_argument)30 b Fn(in)n(ternal)c(function)6 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)32 b Fn(284)150 1006 y Fm(get_argument)c Fn(in)n(ternal)e(function)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(284)150 1094 y Fm(get_array_argument)30 b Fn(in)n(ternal)c(macro)6 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)32 b Fn(285)150 1183 y Fm(get_curfunc_arg_count)e Fn(in)n(ternal)c(function)c Fa(.)12 b(.)g(.)h(.)47 b Fn(283)150 1271 y Fm(get_record)28 b Fn(input)d(metho)r(d)15 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(285)150 1360 y Fm(get_scalar_argument)30 b Fn(in)n(ternal)c(macro)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(285)150 1448 y Fm(getgrent)27 b Fn(function)f(\(C)g(library\))15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(205,)27 b(209)150 1537 y Fm(getgrent)g Fn(user-de\014ned)e(function)15 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(205,)27 b(209)150 1625 y Fm(getgrgid)g Fn(function)f(\(C)g(library\))d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(208)150 1714 y Fm(getgrgid)27 b Fn(user-de\014ned)e(function)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)49 b Fn(209)150 1802 y Fm(getgrnam)27 b Fn(function)f(\(C)g(library\))d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(208)150 1891 y Fm(getgrnam)27 b Fn(user-de\014ned)e(function)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)49 b Fn(208)150 1979 y Fm(getgruser)28 b Fn(function)d(\(C)h(library\))c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(209)150 2068 y Fm(getgruser)28 b Fn(function,)e(user-de\014ned)11 b Fa(.)g(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(209)150 2156 y Fm(getline)27 b Fn(command)15 b Fa(.)e(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)40 b Fn(36)150 2245 y Fm(getline)27 b Fn(command,)f Fm(_gr_init)i Fn(user-de\014ned)c(function)317 2332 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(207)150 2420 y Fm(getline)27 b Fn(command,)f Fm(_pw_init)i Fn(function)10 b Fa(.)i(.)h(.)f(.)g(.)h (.)f(.)g(.)36 b Fn(204)150 2509 y Fm(getline)27 b Fn(command,)f(copro)r (cesses,)i(using)e(from)7 b Fa(.)14 b(.)e(.)g(.)33 b Fn(55,)304 2596 y(70)150 2685 y Fm(getline)27 b Fn(command,)f(deadlo)r (c)n(k)g(and)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(167)150 2773 y Fm(getline)27 b Fn(command,)f(explicit)g(input)f (with)f Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(51)150 2862 y Fm(getline)27 b Fn(command,)f Fm(FILENAME)i Fn(v)l(ariable)e (and)15 b Fa(.)d(.)h(.)f(.)g(.)41 b Fn(56)150 2950 y Fm(getline)27 b Fn(command,)f(return)f(v)l(alues)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(51)150 3039 y Fm(getline)27 b Fn(command,)f(v)l(arian)n(ts)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)48 b Fn(56)150 3127 y Fm(getopt)27 b Fn(function)f(\(C)g (library\))8 b Fa(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)34 b Fn(196)150 3216 y Fm(getopt)27 b Fn(user-de\014ned)d(function)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(198)150 3304 y Fm(getpwent)27 b Fn(function)f(\(C)g(library\))15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(201,)27 b(204)150 3393 y Fm(getpwent)g Fn(user-de\014ned)e(function)15 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(201,)27 b(204)150 3481 y Fm(getpwnam)g Fn(function)f(\(C)g(library\))d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(204)150 3570 y Fm(getpwnam)27 b Fn(user-de\014ned)e(function)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)49 b Fn(204)150 3658 y Fm(getpwuid)27 b Fn(function)f(\(C)g(library\))d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(204)150 3747 y Fm(getpwuid)27 b Fn(user-de\014ned)e(function)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)49 b Fn(204)150 3835 y Fm(getservbyname)29 b Fn(function)c(\(C)h (library\))16 b Fa(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fn(168)150 3924 y Fm(gettext)27 b Fn(function)f(\(C)g(library\))6 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)32 b Fn(157)150 4012 y Fm(gettext)27 b Fn(library)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(156)150 4101 y Fm(gettext)27 b Fn(library)-6 b(,)26 b(lo)r(cale)i(categories)7 b Fa(.)14 b(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)33 b Fn(157)150 4189 y Fm(gettimeofday)28 b Fn(user-de\014ned)d(function)17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)43 b Fn(191)150 4278 y(GNITS)25 b(mailing)i(list)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(9)150 4366 y(GNU)25 b Fm(awk)p Fn(,)i(See)e Fm(gawk)17 b Fa(.)c(.)f(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)43 b Fn(3)150 4455 y(GNU)25 b(F)-6 b(ree)26 b(Do)r(cumen)n(tation)f(License)e Fa(.)12 b(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)47 b Fn(316)150 4543 y(GNU)25 b(General)i(Public)f (License)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)47 b Fn(304)150 4632 y(GNU)25 b(Lesser)i(General)f(Public)g (License)14 b Fa(.)f(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(305)150 4720 y(GNU)25 b(long)h(options)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(173)150 4809 y(GNU)25 b(long)h(options,)h(prin)n(ting)e(list)i(of)10 b Fa(.)j(.)f(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(175)150 4897 y(GNU)25 b(Pro)t(ject)g Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(7,)26 b(304)150 4986 y(GNU/Lin)n(ux)9 b Fa(.)i(.)h(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(7,)27 b(163,)g(274,)g(308)150 5074 y(GPL)f(\(General)h(Public)f (License\))11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(7,)26 b(304)150 5163 y(GPL)g(\(General)h(Public)f(License\),)g (prin)n(ting)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)50 b Fn(174)150 5251 y Fm(grcat)27 b Fn(program)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)46 b Fn(205)150 5340 y(Grigera,)28 b(Juan)14 b Fa(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(258,)27 b(277)2025 299 y(group)f(database,)g(reading)13 b Fa(.)h(.)e(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(205)2025 387 y(group)26 b(\014le)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(205)2025 474 y(groups,)26 b(information)h(ab)r(out)13 b Fa(.)g(.)f(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(205)2025 562 y Fm(gsub)26 b Fn(function)17 b Fa(.)c(.)f(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)43 b Fn(75,)27 b(135)2025 650 y Fm(gsub)f Fn(function,)g(argumen)n(ts)g(of)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fn(134)2025 737 y Fm(gsub)26 b Fn(function,)g(escap)r(e)h(pro)r(cessing)17 b Fa(.)d(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fn(137)2025 992 y FA(H)2025 1109 y Fn(Hank)n(erson,)25 b(Darrel)f Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)49 b Fn(9,)27 b(258,)g(276)2025 1196 y(Hartholz,)f(Elaine)17 b Fa(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)43 b Fn(9)2025 1284 y(Hartholz,)26 b(Marshall)12 b Fa(.)i(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fn(9)2025 1372 y(Hasega)n(w)n(a,)28 b(Isam)n(u)14 b Fa(.)e(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)40 b Fn(9,)27 b(259)2025 1460 y(hexadecimal)f(n)n(um)n(b)r(ers)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(73)2025 1547 y(hexadecimal)26 b(v)l(alues,)g(enabling)g(in)n(terpretation)g(of)2191 1634 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(176)2025 1722 y Fm(histsort.awk)28 b Fn(program)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(239)2025 1810 y(Hughes,)25 b(Phil)e Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)48 b Fn(9)2025 1897 y Fm(HUP)26 b Fn(signal)13 b Fa(.)h(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)39 b Fn(172)2025 1985 y(h)n(yphen)24 b(\()p Fm(-)p Fn(\),)h Fm(-)h Fn(op)r(erator)18 b Fa(.)c(.)e(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(91)2025 2073 y(h)n(yphen)24 b(\()p Fm(-)p Fn(\),)h Fm(--)i Fn(\(decremen)n(t/incremen)n(t\))e(op)r(erators)2193 2160 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(91)2025 2248 y(h)n(yphen)24 b(\()p Fm(-)p Fn(\),)h Fm(--)i Fn(op)r(erator)16 b Fa(.)d(.)g(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 42 b Fn(84)2025 2335 y(h)n(yphen)24 b(\()p Fm(-)p Fn(\),)h Fm(-=)i Fn(op)r(erator)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)35 b Fn(83,)27 b(92)2025 2423 y(h)n(yphen)d(\()p Fm(-)p Fn(\),)h(\014lenames)i(b)r(eginning)f (with)10 b Fa(.)j(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(174)2025 2511 y(h)n(yphen)24 b(\()p Fm(-)p Fn(\),)h(in)h(c)n (haracter)g(lists)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)48 b Fn(29)2025 2767 y FA(I)2025 2884 y Fm(id)26 b Fn(utilit)n(y)8 b Fa(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(219)2025 2972 y Fm(id.awk)27 b Fn(program)18 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)44 b Fn(219)2025 3060 y Fm(if)26 b Fn(statemen)n(t)11 b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(24,)27 b(99)2025 3147 y Fm(if)f Fn(statemen)n(t,)g(actions,)h(c)n (hanging)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)40 b Fn(95)2025 3235 y Fm(igawk.sh)27 b Fn(program)15 b Fa(.)f(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(246)2025 3323 y Fm(IGNORECASE)28 b Fn(v)l(ariable)15 b Fa(.)d(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(32,)27 b(108)2025 3410 y Fm(IGNORECASE)h Fn(v)l(ariable,)e(arra)n (y)g(sorting)h(and)17 b Fa(.)11 b(.)i(.)f(.)g(.)h(.)f(.)43 b Fn(126)2025 3498 y Fm(IGNORECASE)28 b Fn(v)l(ariable,)e(arra)n(y)g (subscripts)g(and)19 b Fa(.)13 b(.)f(.)g(.)46 b Fn(117)2025 3586 y Fm(IGNORECASE)28 b Fn(v)l(ariable,)e(in)g(example)g(programs)11 b Fa(.)i(.)f(.)g(.)37 b Fn(181)2025 3674 y(implemen)n(tation)26 b(issues,)h Fm(gawk)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)45 b Fn(279)2025 3761 y(implemen)n(tation)26 b(issues,)h Fm(gawk)p Fn(,)g(limits)11 b Fa(.)j(.)e(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)37 b Fn(56)2025 3849 y(implemen)n(tation)26 b(issues,)h Fm(gawk)p Fn(,)g(debugging)6 b Fa(.)13 b(.)f(.)h(.)f(.)g(.) h(.)32 b Fn(279)2025 3937 y(implemen)n(tation)26 b(issues,)h Fm(gawk)p Fn(,)g(limits)11 b Fa(.)j(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)37 b Fn(67)2025 4024 y Fm(in)26 b Fn(op)r(erator)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(86,)27 b(91,)g(220)2025 4112 y Fm(in)f Fn(op)r(erator,)h(arra)n(ys)f(and)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 40 b Fn(117,)27 b(119)2025 4200 y(incremen)n(t)e(op)r(erators)10 b Fa(.)k(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)36 b Fn(83)2025 4288 y Fm(index)26 b Fn(function)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)49 b Fn(130)2025 4375 y(indexing)25 b(arra)n(ys)14 b Fa(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(116)2025 4463 y(initialization,)28 b(automatic)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)40 b Fn(20)2025 4551 y(input)25 b(\014les)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)41 b Fn(36)2025 4638 y(input)25 b(\014les,)h(closing)f Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(70)2025 4726 y(input)25 b(\014les,)h(coun)n(ting)g(elemen)n(ts)g(in)8 b Fa(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(228)2025 4814 y(input)25 b(\014les,)h(examples)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(16)2025 4901 y(input)25 b(\014les,)h(reading)13 b Fa(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)39 b Fn(36)2025 4989 y(input)25 b(\014les,)h(running)f Fm(awk)h Fn(without)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)36 b Fn(12)2025 5077 y(input)25 b(\014les,)h(skipping)14 b Fa(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(183)2025 5165 y(input)25 b(\014les,)h(v)l(ariable)g(assignmen)n(ts)h(and)8 b Fa(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(178)2025 5252 y(input)25 b(pip)r(eline)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)47 b Fn(54)2025 5340 y(input)25 b(redirection)9 b Fa(.)k(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(53)p eop end %%Page: 333 345 TeXDict begin 333 344 bop 3295 -116 a Fr(Index)91 b FB(333)150 299 y Fn(input,)25 b(data,)h(nondecimal)16 b Fa(.)d(.)g(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fn(165)150 387 y(input,)25 b(explicit)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fn(51)150 476 y(input,)25 b(\014les,)h(See)g(input)f(\014les)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)44 b Fn(49)150 565 y(input,)25 b(m)n(ultiline)h(records) f Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)49 b Fn(49)150 653 y(input,)25 b(splitting)h(in)n(to)g(records)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(36)150 742 y(input,)25 b(standard)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(12,)26 b(68)150 830 y(input/output,)f(binary)9 b Fa(.)j(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(107)150 919 y(input/output,)25 b(from)h Fm(BEGIN)h Fn(and)e Fm(END)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)45 b Fn(97)150 1007 y(input/output,)25 b(t)n(w)n(o-w)n(a)n(y)16 b Fa(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fn(166)150 1096 y(insomnia,)27 b(cure)f(for)e Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)50 b Fn(231)150 1185 y(installation,)28 b(amiga)14 b Fa(.)g(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(266)150 1273 y(installation,)28 b(atari)17 b Fa(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) 43 b Fn(274)150 1362 y(installation,)28 b(b)r(eos)23 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)49 b Fn(266)150 1450 y(installation,)28 b(tandem)7 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 33 b Fn(275)150 1539 y(installation,)28 b(vms)11 b Fa(.)h(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(271)150 1627 y(installing)27 b Fm(gawk)8 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)34 b Fn(260)150 1716 y Fm(int)26 b Fn(function)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(128)150 1805 y Fm(INT)26 b Fn(signal)h(\(MS-DOS\))19 b Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(172)150 1893 y(in)n(tegers)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)41 b Fn(296)150 1982 y(in)n(tegers,)27 b(unsigned)8 b Fa(.)j(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(296)150 2070 y(in)n(teracting)26 b(with)g(other)g(programs)7 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(141)150 2159 y(in)n(ternationalization)8 b Fa(.)15 b(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)34 b Fn(149,)27 b(156)150 2247 y(in)n(ternationalization,)h (lo)r(calization)12 b Fa(.)j(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(110,)27 b(156)150 2336 y(in)n(ternationalization,)h(lo)r (calization,)h(c)n(haracter)d(classes)318 2423 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)40 b Fn(31)150 2512 y(in)n(ternationalization,)28 b(lo)r(calization,)h Fm(gawk)d Fn(and)7 b Fa(.)12 b(.)h(.)f(.)33 b Fn(156)150 2600 y(in)n(ternationalization,)28 b(lo)r(calization,)h (lo)r(cale)e(categories)317 2688 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(157)150 2776 y(in)n(ternationalization,)28 b(lo)r(calization,)h (mark)n(ed)c(strings)317 2863 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(158)150 2952 y(in)n(ternationalization,)28 b(lo)r(calization,)h(p) r(ortabilit)n(y)d(and)317 3039 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(161)150 3128 y(in)n(ternationalizing)27 b(a)f(program)10 b Fa(.)k(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) 36 b Fn(156)150 3216 y(in)n(terpreted)25 b(programs)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)44 b Fn(295,)27 b(305)150 3305 y(in)n(terv)l(al)f (expressions)19 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)45 b Fn(28)150 3393 y Fm(inventory-shipped)29 b Fn(\014le)23 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)48 b Fn(16)150 3482 y Fm(IOBUF)27 b Fn(in)n(ternal)f(structure)12 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(285)150 3570 y Fm(iop_alloc)28 b Fn(in)n(ternal)e(function)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)46 b Fn(285)150 3659 y(ISO)7 b Fa(.)k(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(305)150 3748 y(ISO)25 b(8859-1)12 b Fa(.)i(.)e(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(301)150 3836 y(ISO)25 b(Latin-1)17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)43 b Fn(301)150 4076 y FA(J)150 4195 y Fn(Jacobs,)27 b(Andrew)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)49 b Fn(203)150 4284 y(Jaegermann,)27 b(Mic)n(hal)18 b Fa(.)c(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)45 b Fn(9,)26 b(258)150 4372 y(Jedi)g(knigh)n(ts)14 b Fa(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)40 b Fn(180)150 4461 y Fm(join)27 b Fn(user-de\014ned)d(function)11 b Fa(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)37 b Fn(190)150 4720 y FA(K)150 4838 y Fn(Kahrs,)26 b(J)r(\177)-41 b(urgen)9 b Fa(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)36 b Fn(9,)26 b(259)150 4927 y(Kenobi,)g(Obi-W)-6 b(an)13 b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(180)150 5016 y(Kernighan,)26 b(Brian)20 b Fa(.)12 b(.)g(.)45 b Fn(4,)26 b(7,)h(9,)f(80,)h(254,)g(258,)g(277,)g(297)150 5104 y Fm(kill)g Fn(command,)f(dynamic)f(pro\014ling)10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fn(172)150 5193 y(Knigh)n(ts,)26 b(jedi)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fn(180)150 5281 y(Kw)n(ok,)26 b(Conrad)10 b Fa(.)j(.)f(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fn(258)2025 299 y FA(L)2025 417 y Fm(labels.awk)28 b Fn(program)12 b Fa(.)h(.)g(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(236)2025 505 y(languages,)27 b(data-driv)n(en)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)47 b Fn(296)2025 593 y Fm(LC_ALL)27 b Fn(lo)r(cale)g(category)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(158)2025 681 y Fm(LC_COLLATE)28 b Fn(lo)r(cale)f(category)13 b Fa(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)39 b Fn(157)2025 769 y Fm(LC_CTYPE)27 b Fn(lo)r(cale)h(category)16 b Fa(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)42 b Fn(157)2025 857 y Fm(LC_MESSAGES)28 b Fn(lo)r(cale)f(category)11 b Fa(.)j(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(157)2025 945 y Fm(LC_MESSAGES)28 b Fn(lo)r(cale)f(category)-6 b(,)27 b Fm(bindtextdomain)2178 1032 y Fn(function)f(\()p Fm(gawk)p Fn(\))9 b Fa(.)k(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(159)2025 1120 y Fm(LC_MONETARY)28 b Fn(lo)r(cale)f(category)11 b Fa(.)j(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) 37 b Fn(157)2025 1208 y Fm(LC_NUMERIC)28 b Fn(lo)r(cale)f(category)13 b Fa(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)39 b Fn(157)2025 1297 y Fm(LC_RESPONSE)28 b Fn(lo)r(cale)f (category)11 b Fa(.)j(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)37 b Fn(158)2025 1385 y Fm(LC_TIME)27 b Fn(lo)r(cale)g(category)17 b Fa(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fn(158)2025 1473 y(left)26 b(angle)h(brac)n(k)n(et)e(\()p Fm(<)p Fn(\),)h Fm(<)g Fn(op)r(erator)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)49 b Fn(86,)27 b(91)2025 1561 y(left)f(angle)h(brac)n(k)n(et)e (\()p Fm(<)p Fn(\),)h Fm(<)g Fn(op)r(erator)g(\(I/O\))16 b Fa(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fn(53)2025 1649 y(left)26 b(angle)h(brac)n(k)n(et)e(\()p Fm(<)p Fn(\),)h Fm(<=)g Fn(op)r(erator)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(86,)27 b(91)2025 1737 y(left)f(shift,)h(bit)n(wise)9 b Fa(.)k(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(147)2025 1825 y(leftmost)27 b(longest)f(matc)n(h)17 b Fa(.)c(.)f(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fn(49)2025 1913 y Fm(length)27 b Fn(function)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(130)2025 2001 y(Lesser)26 b(General)h(Public)f(License)g(\(LGPL\))d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)48 b Fn(305)2025 2089 y(LGPL)26 b(\(Lesser)g(General)h(Public)f(License\))d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)48 b Fn(305)2025 2177 y(libraries)27 b(of)f Fm(awk)h Fn(functions)19 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)45 b Fn(181)2025 2265 y(libraries)27 b(of)f Fm(awk)h Fn(functions,)f(assertions)15 b Fa(.)f(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)41 b Fn(186)2025 2353 y(libraries)27 b(of)f Fm(awk)h Fn(functions,)f(asso)r(ciativ)n(e)i(arra)n(ys)e(and)2191 2441 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(182)2025 2529 y(libraries)27 b(of)f Fm(awk)h Fn(functions,)f(c)n(haracter)g(v)l(alues)g(as)2178 2616 y(n)n(um)n(b)r(ers)16 b Fa(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)42 b Fn(188)2025 2704 y(libraries)27 b(of)f Fm(awk)h Fn(functions,)f(command-line)g(options)2191 2791 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(196)2025 2879 y(libraries)27 b(of)f Fm(awk)h Fn(functions,)f(example)g(program)g(for)2178 2966 y(using)16 b Fa(.)d(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)42 b Fn(244)2025 3054 y(libraries)27 b(of)f Fm(awk)h Fn(functions,)f(group)g(database,)h(reading)2191 3142 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(205)2025 3230 y(libraries)27 b(of)f Fm(awk)h Fn(functions,)f(managing,)h(data)f(\014les)2191 3317 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(192)2025 3405 y(libraries)27 b(of)f Fm(awk)h Fn(functions,)f(managing,)h(time)8 b Fa(.)13 b(.)f(.)h(.)f(.)34 b Fn(190)2025 3493 y(libraries)27 b(of)f Fm(awk)h Fn(functions,)f(merging)h(arra)n(ys)f(in)n(to)2178 3580 y(strings)11 b Fa(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)37 b Fn(190)2025 3668 y(libraries)27 b(of)f Fm(awk)h Fn(functions,)f Fm(nextfile)i Fn(statemen)n(t)2191 3755 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(183)2025 3844 y(libraries)27 b(of)f Fm(awk)h Fn(functions,)f(rounding)g(n)n(um)n(b)r(ers)18 b Fa(.)12 b(.)44 b Fn(187)2025 3932 y(libraries)27 b(of)f Fm(awk)h Fn(functions,)f(user)g(database,)h(reading)2191 4019 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(201)2025 4107 y(line)26 b(breaks)19 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)45 b Fn(20)2025 4195 y(line)26 b(con)n(tin)n(uations)12 b Fa(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)38 b Fn(88)2025 4283 y(line)26 b(con)n(tin)n(uations,)g Fm(gawk)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)45 b Fn(89)2025 4371 y(line)26 b(con)n(tin)n(uations,)g(in)g Fm(print)h Fn(statemen)n(t)13 b Fa(.)e(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fn(58)2025 4459 y(line)26 b(con)n(tin)n(uations,)g(with)g(C)g(shell)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(20)2025 4547 y(lines,)26 b(blank,)g(prin)n(ting)15 b Fa(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(57)2025 4635 y(lines,)26 b(coun)n(ting)11 b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)37 b Fn(228)2025 4723 y(lines,)26 b(duplicate,)h(remo)n (ving)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)50 b Fn(239)2025 4812 y(lines,)26 b(matc)n(hing)g(ranges)h(of)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)45 b Fn(95)2025 4900 y(lines,)26 b(skipping)g(b)r(et)n(w)n(een)g(mark)n (ers)13 b Fa(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 39 b Fn(95)2025 4988 y(lin)n(t)25 b(c)n(hec)n(king)f Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50 b Fn(109)2025 5076 y(lin)n(t)25 b(c)n(hec)n(king,)h(arra)n(y)g(elemen)n (ts)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)36 b Fn(120)2025 5164 y(lin)n(t)25 b(c)n(hec)n(king,)h(arra)n(y) g(subscripts)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)50 b Fn(122)2025 5252 y(lin)n(t)25 b(c)n(hec)n(king,)h(empt)n (y)f(programs)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)44 b Fn(173)2025 5340 y(lin)n(t)25 b(c)n(hec)n(king,)h (issuing)h(w)n(arnings)16 b Fa(.)d(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)42 b Fn(175)p eop end %%Page: 334 346 TeXDict begin 334 345 bop 150 -116 a FB(334)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fn(lin)n(t)c(c)n(hec)n(king,)f Fm(POSIXLY_CORRECT)k Fn(en)n(vironmen)n(t)304 386 y(v)l(ariable)9 b Fa(.)j(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(177)150 475 y(lin)n(t)26 b(c)n(hec)n(king,)f(unde\014ned)f(functions)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(153)150 563 y Fm(LINT)27 b Fn(v)l(ariable)13 b Fa(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)39 b Fn(109)150 652 y(Lin)n(ux)7 b Fa(.)k(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fn(7,)27 b(163,)g(274,)g(308)150 740 y(lo)r(cale)g(categories)17 b Fa(.)e(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(157)150 829 y(lo)r(calization)8 b Fa(.)15 b(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)34 b Fn(156)150 918 y(lo)r(calization,)29 b(See)c(in)n(ternationalization,)j(lo)r(calization)317 1005 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(156)150 1094 y(log)27 b(\014les,)f(timestamps)h(in)12 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(142)150 1182 y Fm(log)26 b Fn(function)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(128)150 1271 y(logical)28 b(false/true)10 b Fa(.)k(.)e(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(85)150 1359 y(logical)28 b(op)r(erators,)f(See)f(Bo)r(olean)h(expressions)d Fa(.)12 b(.)h(.)f(.)g(.)49 b Fn(88)150 1448 y(login)27 b(information)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(201)150 1537 y(long)26 b(options)12 b Fa(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)38 b Fn(173)150 1625 y(lo)r(ops)23 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)47 b Fn(100)150 1714 y(lo)r(ops,)27 b Fm(continue)h Fn(statemen)n(ts)e(and)9 b Fa(.)i(.)i(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(102)150 1802 y(lo)r(ops,)27 b(coun)n(t)e(for)i(header)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(171)150 1891 y(lo)r(ops,)27 b(exiting)11 b Fa(.)i(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(103)150 1980 y(lo)r(ops,)27 b(See)f(Also)g Fm(while)h Fn(statemen)n(t)21 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fn(100)150 2068 y(Lost)26 b(In)f(Space)e Fa(.)13 b(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)49 b Fn(282)150 2157 y Fm(ls)26 b Fn(utilit)n(y)9 b Fa(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(20)150 2245 y Fm(lshift)27 b Fn(function)f(\()p Fm(gawk)p Fn(\))9 b Fa(.)k(.)g(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(148)150 2334 y(lv)l(alues/rv)l(alues)6 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fn(81)150 2595 y FA(M)150 2714 y Fn(mailing)27 b(lab)r(els,)g(prin)n (ting)10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fn(235)150 2803 y(mailing)27 b(list,)g(GNITS)13 b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(9)150 2891 y Fm(make_builtin)28 b Fn(in)n(ternal)e(function)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(284)150 2980 y Fm(make_number)28 b Fn(in)n(ternal)e(function)18 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(284)150 3069 y Fm(make_string)28 b Fn(in)n(ternal)e(function)18 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(283)150 3157 y(mark)26 b(parit)n(y)17 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(189)150 3246 y(mark)n(ed)25 b(string)h(extraction)g(\(in)n (ternationalization\))317 3333 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(160)150 3422 y(mark)n(ed)25 b(strings,)i(extracting)12 b Fa(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)38 b Fn(160)150 3510 y(Marx,)26 b(Grouc)n(ho)17 b Fa(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fn(84)150 3599 y Fm(match)27 b Fn(function)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(131)150 3687 y Fm(match)27 b Fn(function,)f Fm(RSTART)p Fn(/)p Fm(RLENGTH)j Fn(v)l(ariables)21 b Fa(.)12 b(.)h(.)f(.)46 b Fn(131)150 3776 y(matc)n(hing,)26 b(expressions,)h(See)f(comparison)g (expressions)318 3863 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(85)150 3952 y(matc)n(hing,)26 b(leftmost)h(longest)10 b Fa(.)k(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)36 b Fn(49)150 4040 y(matc)n(hing,)26 b(n)n(ull)g(strings) 15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(139)150 4129 y Fm(mawk)27 b Fn(program)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 47 b Fn(277)150 4218 y(McPhee,)27 b(P)n(atric)n(k)11 b Fa(.)i(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(259)150 4306 y(memory)-6 b(,)26 b(releasing)7 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)33 b Fn(284)150 4395 y(memory)-6 b(,)26 b(setting)g(limits) e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)49 b Fn(174)150 4483 y(message)27 b(ob)t(ject)g(\014les)16 b Fa(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(157)150 4572 y(message)27 b(ob)t(ject)g(\014les,)f(con)n(v)n (erting)g(from)g(p)r(ortable)304 4659 y(ob)t(ject)g(\014les)14 b Fa(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(163)150 4748 y(message)27 b(ob)t(ject)g(\014les,)f(sp)r(ecifying)h (directory)f(of)9 b Fa(.)k(.)f(.)35 b Fn(157,)304 4835 y(158)150 4924 y(metac)n(haracters,)27 b(escap)r(e)g(sequences)f(for)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(27)150 5012 y Fm(mktime)27 b Fn(function)f(\()p Fm(gawk)p Fn(\))9 b Fa(.)k(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)35 b Fn(143)150 5101 y(mo)r(di\014ers,)27 b(in)e(format)i(sp)r(eci\014ers)12 b Fa(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(61)150 5189 y(monetary)26 b(information,)h(lo)r(calization)17 b Fa(.)e(.)e(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fn(157)150 5278 y Fm(msgfmt)27 b Fn(utilit)n(y)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)46 b Fn(163)2025 299 y FA(N)2025 420 y Fn(names,)26 b(arra)n(ys/v)l(ariables)12 b Fa(.)i(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(116,)27 b(181)2025 509 y(names,)f(functions)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(150,)27 b(181)2025 599 y(namespace)f(issues)13 b Fa(.)g(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)39 b Fn(116,)27 b(181)2025 689 y(namespace)f(issues,)h(functions)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(150)2025 778 y Fm(nawk)26 b Fn(utilit)n(y)7 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(4)2025 868 y(negativ)n(e)26 b(zero)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)41 b Fn(299)2025 957 y(NetBSD)23 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50 b Fn(308)2025 1047 y(net)n(w)n(orks,)26 b(programming)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)47 b Fn(168)2025 1136 y(net)n(w)n(orks,)26 b(supp)r(ort)f(for)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(69)2025 1226 y(newlines)7 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)32 b Fn(20,)27 b(88,)g(176)2025 1316 y(newlines,)g(as)f (\014eld)f(separators)6 b Fa(.)15 b(.)d(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fn(43)2025 1405 y(newlines,)27 b(as)f(record)g(separators)8 b Fa(.)14 b(.)f(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(36)2025 1495 y(newlines,)27 b(in)e(dynamic)h(regexps)20 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)45 b Fn(34)2025 1584 y(newlines,)27 b(in)e(regexp)h(constan)n(ts)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)45 b Fn(34)2025 1674 y(newlines,)27 b(prin)n(ting)11 b Fa(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(57)2025 1764 y(newlines,)27 b(separating)g(statemen)n(ts)f(in)f(actions)13 b Fa(.)h(.)38 b Fn(98,)27 b(99)2025 1853 y Fm(next)f(file)h Fn(statemen)n(t)14 b Fa(.)f(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(257)2025 1943 y Fm(next)26 b(file)h Fn(statemen)n(t,)f(deprecated)9 b Fa(.)j(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(180)2025 2032 y Fm(next)26 b(file)h Fn(statemen)n(t,)f(in)f Fm(gawk)13 b Fa(.)h(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)39 b Fn(106)2025 2122 y Fm(next)26 b Fn(statemen)n(t)7 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)33 b Fn(89,)27 b(105)2025 2212 y Fm(next)f Fn(statemen)n(t,)g Fm(BEGIN)p Fn(/)p Fm(END)i Fn(patterns)e(and)7 b Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.) 33 b Fn(97)2025 2301 y Fm(next)26 b Fn(statemen)n(t,)g(user-de\014ned)f (functions)h(and)c Fa(.)12 b(.)g(.)49 b Fn(105)2025 2391 y Fm(nextfile)27 b Fn(statemen)n(t)9 b Fa(.)k(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 35 b Fn(106)2025 2480 y Fm(nextfile)27 b Fn(statemen)n(t,)f Fm(BEGIN)p Fn(/)p Fm(END)i Fn(patterns)e(and)19 b Fa(.)12 b(.)46 b Fn(97)2025 2570 y Fm(nextfile)27 b Fn(statemen)n(t,)f (implemen)n(ting)12 b Fa(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(183)2025 2660 y Fm(nextfile)27 b Fn(statemen)n(t,)f(in)g Fm(gawk)7 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)34 b Fn(106)2025 2749 y Fm(nextfile)27 b Fn(statemen)n(t,)f Fm(next)h(file)f Fn(statemen)n(t)g(and)2191 2836 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(180)2025 2926 y Fm(nextfile)27 b Fn(statemen)n(t,)f(user-de\014ned)f(functions)h(and)2191 3013 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(106)2025 3103 y Fm(nextfile)27 b Fn(user-de\014ned)e(function)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)49 b Fn(183)2025 3192 y Fm(NF)26 b Fn(v)l(ariable)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)34 b Fn(39,)27 b(111)2025 3282 y Fm(NF)f Fn(v)l(ariable,)g (decremen)n(ting)6 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fn(42)2025 3371 y Fm(noassign.awk)c Fn(program)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(196)2025 3461 y Fm(NODE)26 b Fn(in)n(ternal)g(t)n(yp)r(e)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fn(283)2025 3551 y(no)r(des,)26 b(duplicating)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)46 b Fn(284)2025 3640 y(not)25 b(Bo)r(olean-logic)k(op)r(erator) 7 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)32 b Fn(88)2025 3730 y Fm(NR)26 b Fn(v)l(ariable)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)34 b Fn(36,)27 b(112)2025 3819 y Fm(NR)f Fn(v)l(ariable,)g(c)n (hanging)7 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(113)2025 3909 y(n)n(ull)25 b(strings)8 b Fa(.)13 b(.)g(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(37,)26 b(44,)h(85,)g(297)2025 3999 y(n)n(ull)e(strings,)i(arra)n (y)f(elemen)n(ts)g(and)14 b Fa(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)40 b Fn(120)2025 4088 y(n)n(ull)25 b(strings,)i(as)f (arra)n(y)g(subscripts)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)45 b Fn(122)2025 4178 y(n)n(ull)25 b(strings,)i(con)n(v)n(erting)f(n)n(um)n(b)r(ers)e(to)i(strings)16 b Fa(.)d(.)g(.)f(.)g(.)42 b Fn(77)2025 4267 y(n)n(ull)25 b(strings,)i(matc)n(hing)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(139)2025 4357 y(n)n(ull)25 b(strings,)i(quoting)e(and)f Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)50 b Fn(15)2025 4446 y(n)n(um)n(b)r(er)24 b(sign)j(\()p Fm(#)p Fn(\),)f Fm(#!)g Fn(\(executable)f(scripts\))18 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)44 b Fn(13)2025 4536 y(n)n(um)n(b)r(er)24 b(sign)j(\()p Fm(#)p Fn(\),)f Fm(#!)g Fn(\(executable)f(scripts\),)2178 4623 y(p)r(ortabilit)n(y)h(issues)h (with)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)48 b Fn(13)2025 4713 y(n)n(um)n(b)r(er)24 b(sign)j(\()p Fm(#)p Fn(\),)f(commen)n(ting)13 b Fa(.)f(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(14)2025 4802 y(n)n(um)n(b)r(ers)20 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)47 b Fn(284)2025 4892 y(n)n(um)n(b)r(ers,)25 b(as)h(arra)n(y)g(subscripts)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) 35 b Fn(121)2025 4982 y(n)n(um)n(b)r(ers,)25 b(as)h(v)l(alues)g(of)g(c) n(haracters)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) 47 b Fn(188)2025 5071 y(n)n(um)n(b)r(ers,)25 b(Cli\013)i(random)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)47 b Fn(188)2025 5161 y(n)n(um)n(b)r(ers,)25 b(con)n(v)n(erting)f Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)50 b Fn(77)2025 5250 y(n)n(um)n(b)r(ers,)25 b(con)n(v)n(erting,)h(to)g (strings)e Fa(.)13 b(.)f(.)g(.)h(.)50 b Fn(108,)27 b(109,)g(148)2025 5340 y(n)n(um)n(b)r(ers,)e(\015oating-p)r(oin)n(t)7 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)33 b Fn(296)p eop end %%Page: 335 347 TeXDict begin 335 346 bop 3295 -116 a Fr(Index)91 b FB(335)150 299 y Fn(n)n(um)n(b)r(ers,)25 b(\015oating-p)r(oin)n(t,)h Fm(AWKNUM)h Fn(in)n(ternal)f(t)n(yp)r(e)317 386 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)39 b Fn(283)150 474 y(n)n(um)n(b)r(ers,)25 b(hexadecimal)10 b Fa(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)36 b Fn(73)150 562 y(n)n(um)n(b)r(ers,)25 b Fm(NODE)i Fn(in)n(ternal)f(t)n(yp)r(e)17 b Fa(.)11 b(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)43 b Fn(283)150 650 y(n)n(um)n(b)r(ers,)25 b(o)r(ctal)7 b Fa(.)14 b(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fn(73)150 739 y(n)n(um)n(b)r(ers,)25 b(random)14 b Fa(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(128)150 827 y(n)n(um)n(b)r(ers,)25 b(rounding)11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)37 b Fn(187)150 915 y(n)n(umeric,)26 b(constan)n(ts)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fn(73)150 1003 y(n)n(umeric,)26 b(output)e(format)h Fa(.)12 b(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)49 b Fn(59)150 1091 y(n)n(umeric,)26 b(strings)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fn(85)150 1179 y(n)n(umeric,)26 b(v)l(alues)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)39 b Fn(283)150 1434 y FA(O)150 1552 y Fm(oawk)27 b Fn(utilit)n(y)7 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(4)150 1640 y(obsolete)27 b(features)11 b Fa(.)i(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)37 b Fn(180)150 1728 y(o)r(ctal)27 b(n)n(um)n(b)r(ers)17 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fn(73)150 1816 y(o)r(ctal)27 b(v)l(alues,)f(enabling)g(in)n (terpretation)g(of)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)48 b Fn(176)150 1904 y Fm(OFMT)27 b Fn(v)l(ariable)16 b Fa(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(59,)26 b(78,)h(109)150 1992 y Fm(OFMT)g Fn(v)l(ariable,)f(POSIX)f Fm(awk)h Fn(and)15 b Fa(.)c(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(60)150 2081 y Fm(OFS)26 b Fn(v)l(ariable)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)44 b Fn(41,)26 b(59,)h(109)150 2169 y(Op)r(enBSD)12 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)38 b Fn(308)150 2257 y(op)r(erating)27 b(systems,)f(BSD-based)10 b Fa(.)i(.)g(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)36 b Fn(7,)26 b(169)150 2345 y(op)r(erating)h(systems,)f (PC,)h Fm(gawk)f Fn(on)10 b Fa(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)36 b Fn(270)150 2433 y(op)r(erating)27 b(systems,)f(PC,)h Fm(gawk)f Fn(on,)g(installing)14 b Fa(.)g(.)f(.)f(.)40 b Fn(266)150 2521 y(op)r(erating)27 b(systems,)f(p)r(orting)g Fm(gawk)h Fn(to)13 b Fa(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)38 b Fn(281)150 2609 y(op)r(erating)27 b(systems,)f(See)g(Also)g(GNU/Lin)n(ux,)f(PC)304 2697 y(op)r(erating)h(systems,)h(Unix)7 b Fa(.)k(.)h(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)33 b Fn(260)150 2785 y(op)r(erations,)27 b(bit)n(wise)12 b Fa(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)38 b Fn(147)150 2873 y(op)r(erators,)27 b(arithmetic)10 b Fa(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(79)150 2961 y(op)r(erators,)27 b(assignmen)n(t)16 b Fa(.)d(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(81)150 3049 y(op)r(erators,)27 b(assignmen)n(t,)g(ev)l(aluation)f(order)11 b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(82)150 3137 y(op)r(erators,)27 b(Bo)r(olean,)h(See)e(Bo)r(olean)h(expressions)21 b Fa(.)13 b(.)f(.)46 b Fn(88)150 3226 y(op)r(erators,)27 b(decremen)n(t/incremen)n(t)8 b Fa(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)33 b Fn(83)150 3314 y(op)r(erators,)27 b(GNU-sp)r(eci\014c)16 b Fa(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(31)150 3402 y(op)r(erators,)27 b(input/output)15 b Fa(.)c(.)h(.)h(.)f(.)41 b Fn(53,)27 b(54,)f(55,)h(65,)g(66,)f(91)150 3490 y(op)r(erators,)h (logical,)i(See)c(Bo)r(olean)j(expressions)12 b Fa(.)h(.)f(.)h(.)f(.)38 b Fn(88)150 3578 y(op)r(erators,)27 b(precedence)12 b Fa(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)38 b Fn(84,)26 b(90)150 3666 y(op)r(erators,)h (relational,)h(See)e(op)r(erators,)h(comparison)318 3753 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(85)150 3842 y(op)r(erators,)27 b(short-circuit)14 b Fa(.)f(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(88)150 3930 y(op)r(erators,)27 b(string)14 b Fa(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)39 b Fn(80)150 4018 y(op)r(erators,)27 b(string-matc)n(hing)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(24)150 4106 y(op)r(erators,)27 b(string-matc)n(hing,)g(for)f(bu\013ers)15 b Fa(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)41 b Fn(31)150 4194 y(op)r(erators,)27 b(w)n(ord-b)r(oundary)e(\()p Fm(gawk)p Fn(\))6 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)32 b Fn(31)150 4282 y(options,)27 b(command-line)22 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fn(12,)26 b(45,)h(173)150 4370 y(options,)g(command-line,)f(end)f(of) 20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(174)150 4459 y(options,)27 b(command-line,)f(in)n(v)n(oking)f Fm(awk)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(173)150 4547 y(options,)27 b(command-line,)f(pro)r(cessing)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fn(196)150 4635 y(options,)27 b(deprecated)17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(180)150 4723 y(options,)27 b(long)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) 45 b Fn(173)150 4811 y(options,)27 b(prin)n(ting)e(list)h(of)12 b Fa(.)i(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)38 b Fn(175)150 4899 y(OR)25 b(bit)n(wise)h(op)r (eration)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(147)150 4987 y(or)26 b(Bo)r(olean-logic)j(op)r(erator)10 b Fa(.)j(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(88)150 5076 y Fm(or)26 b Fn(function)g(\()p Fm(gawk)p Fn(\))15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(147)150 5164 y Fm(ord)26 b Fn(user-de\014ned)f(function)12 b Fa(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)38 b Fn(188)150 5252 y(order)26 b(of)g(ev)l(aluation,)h (concatenation)9 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)35 b Fn(80)150 5340 y Fm(ORS)26 b Fn(v)l(ariable)7 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fn(59,)27 b(109)2025 299 y(output)d(\014eld)i(separator,)h(See)f Fm(OFS)g Fn(v)l(ariable)12 b Fa(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(41)2025 387 y(output)24 b(record)j(separator,)g(See)e Fm(ORS)i Fn(v)l(ariable)14 b Fa(.)f(.)f(.)g(.)h(.)f(.)40 b Fn(59)2025 475 y(output)24 b(redirection)f Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)48 b Fn(65)2025 563 y(output,)25 b(bu\013ering)15 b Fa(.)c(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(140,)27 b(142)2025 651 y(output,)e(duplicating)h(in)n(to)g (\014les)10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)36 b Fn(223)2025 739 y(output,)25 b(\014les,)h(closing)8 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(70)2025 827 y(output,)25 b(format)i(sp)r(eci\014er,)f Fm(OFMT)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) 35 b Fn(59)2025 916 y(output,)25 b(formatted)7 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(60)2025 1004 y(output,)25 b(pip)r(es)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)39 b Fn(66)2025 1092 y(output,)25 b(prin)n(ting,)h(See)f(prin)n(ting)14 b Fa(.)e(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(57)2025 1180 y(output,)25 b(records)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)42 b Fn(59)2025 1268 y(output,)25 b(standard)7 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fn(68)2025 1522 y FA(P)2025 1640 y Fn(P1003.2)c(POSIX)c(standard)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)35 b Fn(306)2025 1728 y Fm(param_cnt)27 b Fn(in)n(ternal)f(v)l(ariable)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)35 b Fn(283)2025 1816 y(parameters,)27 b(n)n(um)n(b)r(er)d(of)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(283)2025 1904 y(paren)n(theses)26 b Fm(\(\))9 b Fa(.)j(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)35 b Fn(28)2025 1992 y(paren)n(theses)26 b Fm(\(\))p Fn(,)g Fm(pgawk)h Fn(program)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)49 b Fn(171)2025 2080 y(passw)n(ord)26 b(\014le)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) 46 b Fn(201)2025 2169 y(patterns)6 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)32 b Fn(93)2025 2257 y(patterns,)26 b(comparison)h(expressions)f(as)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(93)2025 2345 y(patterns,)26 b(coun)n(ts)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fn(171)2025 2433 y(patterns,)26 b(default)12 b Fa(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)38 b Fn(17)2025 2521 y(patterns,)26 b(empt)n(y)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(97)2025 2609 y(patterns,)26 b(expressions)g(as)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)47 b Fn(93)2025 2697 y(patterns,)26 b(ranges)g(in)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(95)2025 2785 y(patterns,)26 b(regexp)f(constan)n(ts)h(as)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)45 b Fn(94)2025 2873 y(patterns,)26 b(t)n(yp)r(es)f(of)14 b Fa(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(93)2025 2961 y Fm(pawk)26 b Fn(pro\014ling)g(Bell)h(Labs)f Fm(awk)17 b Fa(.)c(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 43 b Fn(278)2025 3050 y(PC)26 b(op)r(erating)h(systems,)f Fm(gawk)h Fn(on)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)47 b Fn(270)2025 3138 y(PC)26 b(op)r(erating)h(systems,)f Fm(gawk)h Fn(on,)f(installing)7 b Fa(.)13 b(.)g(.)f(.)g(.)33 b Fn(266)2025 3226 y(p)r(ercen)n(t)25 b(sign)h(\()p Fm(\045)p Fn(\),)g Fm(\045)g Fn(op)r(erator)9 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(91)2025 3314 y(p)r(ercen)n(t)25 b(sign)h(\()p Fm(\045)p Fn(\),)g Fm(\045=)g Fn(op)r(erator)20 b Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)44 b Fn(83,)27 b(92)2025 3402 y(p)r(erio)r(d)f(\()p Fm(.)p Fn(\))13 b Fa(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)38 b Fn(27)2025 3490 y(PERL)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)48 b Fn(292)2025 3578 y(P)n(eters,)26 b(Arno)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(259)2025 3666 y(P)n(eterson,)26 b(Hal)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(258)2025 3754 y Fm(pgawk)26 b Fn(program)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fn(169)2025 3842 y Fm(pgawk)26 b Fn(program,)h Fm(awkprof.out)h Fn(\014le)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(169)2025 3930 y Fm(pgawk)26 b Fn(program,)h(dynamic)f(pro\014ling) 12 b Fa(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(172)2025 4019 y(pip)r(es,)26 b(closing)13 b Fa(.)h(.)e(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(70)2025 4107 y(pip)r(es,)26 b(input)18 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)44 b Fn(54)2025 4195 y(pip)r(es,)26 b(output)13 b Fa(.)e(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)39 b Fn(66)2025 4283 y(plus)25 b(sign)i(\()p Fm(+)p Fn(\))8 b Fa(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)34 b Fn(28)2025 4371 y(plus)25 b(sign)i(\()p Fm(+)p Fn(\),)e Fm(+)h Fn(op)r(erator)10 b Fa(.)k(.)e(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(91)2025 4459 y(plus)25 b(sign)i(\()p Fm(+)p Fn(\),)e Fm(++)i Fn(op)r(erator)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(84,)27 b(91)2025 4547 y(plus)e(sign)i(\()p Fm(+)p Fn(\),)e Fm(+=)i Fn(op)r(erator)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)45 b Fn(82,)27 b(92)2025 4635 y(plus)e(sign)i(\()p Fm(+)p Fn(\),)e(decremen)n(t/incremen)n(t)h(op)r(erators)d Fa(.)12 b(.)47 b Fn(83)2025 4723 y(p)r(ortabilit)n(y)22 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) 47 b Fn(26)2025 4811 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(#!)g Fn(\(executable)f(scripts\))d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)47 b Fn(13)2025 4899 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(**)g Fn(op)r(erator)g(and)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(80)2025 4988 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(**=)g Fn(op)r(erator)h(and)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)48 b Fn(83)2025 5076 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(ARGV)g Fn(v)l(ariable)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(14)2025 5164 y(p)r(ortabilit)n(y)-6 b(,)26 b(bac)n(kslash)g(con)n(tin)n(uation) g(and)18 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(21)2025 5252 y(p)r(ortabilit)n(y)-6 b(,)26 b(bac)n(kslash)g(in)f(escap)r(e)i (sequences)12 b Fa(.)g(.)h(.)f(.)g(.)g(.)38 b Fn(26)2025 5340 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(close)g Fn(function)g(and)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(71)p eop end %%Page: 336 348 TeXDict begin 336 347 bop 150 -116 a FB(336)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fn(p)r(ortabilit)n(y)-6 b(,)26 b(data)g(\014les)g(as)g(single)h (record)14 b Fa(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(39)150 387 y(p)r(ortabilit)n(y)-6 b(,)26 b(deleting)g(arra)n(y)g (elemen)n(ts)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fn(121)150 476 y(p)r(ortabilit)n(y)-6 b(,)26 b(example)g(programs)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fn(181)150 565 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(fflush)h Fn(function)f(and)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)47 b Fn(140)150 653 y(p)r(ortabilit)n(y)-6 b(,)26 b(functions,)g(de\014ning)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(151)150 742 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(gawk)13 b Fa(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(281)150 830 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(gettext)h Fn(library)f(and)9 b Fa(.)j(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)34 b Fn(156)150 919 y(p)r(ortabilit)n(y)-6 b(,)26 b(in)n(ternationalization)i(and)16 b Fa(.)c(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)42 b Fn(161)150 1007 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(length)h Fn(function)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fn(130)150 1096 y(p)r(ortabilit)n (y)-6 b(,)26 b(new)g Fm(awk)g Fn(vs.)34 b(old)26 b Fm(awk)10 b Fa(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(78)150 1185 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(next)g Fn(statemen)n(t)g(in)g(user-de\014ned)304 1272 y(functions)e Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fn(153)150 1360 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(NF)g Fn(v)l(ariable,)h(decremen)n(ting)8 b Fa(.)j(.)i(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)33 b Fn(42)150 1449 y(p)r(ortabilit)n(y)-6 b(,)26 b(op)r(erators)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)33 b Fn(84)150 1537 y(p)r(ortabilit)n(y)-6 b(,)26 b(op)r(erators,)h(not)f (in)f(POSIX)g Fm(awk)6 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)32 b Fn(92)150 1626 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(POSIXLY_CORRECT)j Fn(en)n(vironmen)n(t)c(v)l(ariable)317 1713 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)39 b Fn(178)150 1802 y(p)r(ortabilit)n(y)-6 b(,)26 b Fm(substr)h Fn(function)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fn(136)150 1890 y(p)r(ortable)26 b(ob)t(ject)h(\014les)21 b Fa(.)12 b(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fn(156,)27 b(159)150 1979 y(p)r(ortable)f(ob)t(ject)h(\014les,)f(con) n(v)n(erting)g(to)g(message)h(ob)t(ject)304 2066 y(\014les)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)47 b Fn(163)150 2155 y(p)r(ortable)26 b(ob)t(ject)h(\014les,)f (generating)12 b Fa(.)i(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)38 b Fn(175)150 2243 y(p)r(ortal)26 b(\014les)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(169)150 2332 y(p)r(orting)26 b Fm(gawk)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(281)150 2420 y(p)r(ositional)27 b(sp)r(eci\014ers,)g Fm(printf)g Fn(statemen)n(t)7 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g (.)33 b Fn(62)150 2509 y(p)r(ositional)27 b(sp)r(eci\014ers,)g Fm(printf)g Fn(statemen)n(t)6 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)32 b Fn(160)150 2597 y(p)r(ositional)27 b(sp)r(eci\014ers,)g Fm(printf)g Fn(statemen)n(t,)f(mixing)304 2685 y(with)g(regular)g (formats)13 b Fa(.)h(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(161)150 2773 y(p)r(ositiv)n(e)26 b(zero)7 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)32 b Fn(299)150 2862 y(POSIX)25 b Fm(awk)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(5,)26 b(83)150 2950 y(POSIX)f Fm(awk)p Fn(,)h Fm(**=)g Fn(op)r(erator)h(and)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)49 b Fn(83)150 3039 y(POSIX)25 b Fm(awk)p Fn(,)h Fm(<)g Fn(op)r(erator)h(and)8 b Fa(.)k(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(53)150 3127 y(POSIX)25 b Fm(awk)p Fn(,)h Fm(|)g Fn(I/O)f(op)r(erator)i(and)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)49 b Fn(55)150 3216 y(POSIX)25 b Fm(awk)p Fn(,)h(arithmetic)h(op)r(erators)g(and)21 b Fa(.)12 b(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)47 b Fn(79)150 3304 y(POSIX)25 b Fm(awk)p Fn(,)h(bac)n(kslashes)h(in)e(string)i(constan)n(ts)15 b Fa(.)e(.)f(.)g(.)41 b Fn(26)150 3393 y(POSIX)25 b Fm(awk)p Fn(,)h Fm(BEGIN)p Fn(/)p Fm(END)i Fn(patterns)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fn(97)150 3482 y(POSIX)25 b Fm(awk)p Fn(,)h Fm(break)h Fn(statemen)n(t)f(and)14 b Fa(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)40 b Fn(104)150 3570 y(POSIX)25 b Fm(awk)p Fn(,)h(c)n(hanges)g (in)g Fm(awk)g Fn(v)n(ersions)10 b Fa(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)36 b Fn(253)150 3659 y(POSIX)25 b Fm(awk)p Fn(,)h(c)n(haracter)g (lists)h(and)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)47 b Fn(29)150 3747 y(POSIX)25 b Fm(awk)p Fn(,)h(c)n(haracter)g(lists)h(and,)f(c)n(haracter)g(classes)310 3834 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)33 b Fn(30,)26 b(31)150 3923 y(POSIX)f Fm(awk)p Fn(,)h Fm(continue)i Fn(statemen)n(t)d(and)10 b Fa(.)i(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(105)150 4012 y(POSIX)25 b Fm(awk)p Fn(,)h Fm(CONVFMT)h Fn(v)l(ariable)g(and)9 b Fa(.)j(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(108)150 4100 y(POSIX)25 b Fm(awk)p Fn(,)h Fm(date)h Fn(utilit)n(y)e(and)6 b Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fn(146)150 4189 y(POSIX)25 b Fm(awk)p Fn(,)h(\014eld)g(separators)h(and)12 b Fa(.)f(.)i(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(39,)26 b(46)150 4277 y(POSIX)f Fm(awk)p Fn(,)h Fm(FS)g Fn(v)l(ariable)g(and)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) 42 b Fn(108)150 4366 y(POSIX)25 b Fm(awk)p Fn(,)h Fm(function)i Fn(k)n(eyw)n(ord)d(in)12 b Fa(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)38 b Fn(150)150 4454 y(POSIX)25 b Fm(awk)p Fn(,)h(functions)g (and,)g Fm(gsub)p Fn(/)p Fm(sub)12 b Fa(.)j(.)d(.)g(.)h(.)f(.)g(.)g(.)h (.)38 b Fn(137)150 4543 y(POSIX)25 b Fm(awk)p Fn(,)h(functions)g(and,)g Fm(length)15 b Fa(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(130)150 4631 y(POSIX)25 b Fm(awk)p Fn(,)h(GNU)f(long)i(options)f (and)21 b Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(173)150 4720 y(POSIX)25 b Fm(awk)p Fn(,)h(in)n(terv)l(al)g (expressions)g(in)13 b Fa(.)g(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)39 b Fn(29)150 4809 y(POSIX)25 b Fm(awk)p Fn(,)h Fm(next)p Fn(/)p Fm(nextfile)j Fn(statemen)n(ts)d(and)e Fa(.)12 b(.)50 b Fn(105)150 4897 y(POSIX)25 b Fm(awk)p Fn(,)h(n)n(umeric)g (strings)g(and)16 b Fa(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)41 b Fn(85)150 4986 y(POSIX)25 b Fm(awk)p Fn(,)h Fm(OFMT)h Fn(v)l(ariable)f(and)7 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)33 b Fn(60,)26 b(78)150 5074 y(POSIX)f Fm(awk)p Fn(,)h(p)r(erio)r(d)g(\()p Fm(.)p Fn(\),)g(using)13 b Fa(.)g(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) 39 b Fn(27)150 5163 y(POSIX)25 b Fm(awk)p Fn(,)h Fm(printf)h Fn(format)g(strings)f(and)16 b Fa(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(64)150 5251 y(POSIX)25 b Fm(awk)p Fn(,)h(regular)h(expressions)f (and)10 b Fa(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(29)150 5340 y(POSIX)25 b Fm(awk)p Fn(,)h(timestamps)h(and)7 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)33 b Fn(142)2025 299 y(POSIX)24 b(mo)r(de)e Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(176,)27 b(177)2025 389 y(POSIX,)e Fm(awk)h Fn(and)15 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)41 b Fn(3)2025 480 y(POSIX,)25 b Fm(gawk)h Fn(extensions)g(not)g(included)f(in)16 b Fa(.)c(.)g(.)h(.)f(.)g(.)42 b Fn(255)2025 570 y(POSIX,)25 b(programs,)i(implemen)n(ting)f(in)f Fm(awk)f Fa(.)12 b(.)g(.)h(.)f(.)g(.)49 b Fn(210)2025 661 y Fm(POSIXLY_CORRECT)29 b Fn(en)n(vironmen)n(t)c(v)l(ariable)12 b Fa(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(177)2025 751 y(precedence)11 b Fa(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)37 b Fn(84,)27 b(90)2025 842 y(precedence,)f(regexp)f(op)r(erators)g Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)50 b Fn(29)2025 932 y Fm(print)26 b Fn(statemen)n(t)14 b Fa(.)f(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(57)2025 1023 y Fm(print)26 b Fn(statemen)n(t,)h Fm(BEGIN)p Fn(/)p Fm(END)g Fn(patterns)f(and)6 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)32 b Fn(97)2025 1113 y Fm(print)26 b Fn(statemen)n(t,)h(commas,)g (omitting)17 b Fa(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(58)2025 1204 y Fm(print)26 b Fn(statemen)n(t,)h(I/O)e(op)r (erators)i(in)22 b Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) 48 b Fn(91)2025 1294 y Fm(print)26 b Fn(statemen)n(t,)h(line)f(con)n (tin)n(uations)g(and)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(58)2025 1385 y Fm(print)26 b Fn(statemen)n(t,)h Fm(OFMT)f Fn(v)l(ariable)g(and)19 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)46 b Fn(109)2025 1475 y Fm(print)26 b Fn(statemen)n(t,)h (See)e(Also)h(redirection,)h(of)g(output)2193 1562 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(65)2025 1653 y Fm(print)26 b Fn(statemen)n(t,)h Fm(sprintf)g Fn(function)f(and)9 b Fa(.)i(.)i(.)f(.)g(.)h(.)f(.)35 b Fn(187)2025 1743 y Fm(printf)27 b Fn(statemen)n(t)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fn(57,)27 b(60)2025 1834 y Fm(printf)g Fn(statemen)n(t,)f(columns,)g (aligning)g Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)50 b Fn(58)2025 1924 y Fm(printf)27 b Fn(statemen)n(t,)f(format-con)n (trol)h(c)n(haracters)20 b Fa(.)13 b(.)f(.)45 b Fn(60)2025 2015 y Fm(printf)27 b Fn(statemen)n(t,)f(I/O)f(op)r(erators)i(in)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(91)2025 2105 y Fm(printf)27 b Fn(statemen)n(t,)f(mo)r(di\014ers)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)44 b Fn(61)2025 2196 y Fm(printf)27 b Fn(statemen)n(t,)f(p)r (ositional)h(sp)r(eci\014ers)17 b Fa(.)c(.)g(.)f(.)43 b Fn(62,)27 b(160)2025 2286 y Fm(printf)g Fn(statemen)n(t,)f(p)r (ositional)h(sp)r(eci\014ers,)g(mixing)2178 2374 y(with)f(regular)h (formats)13 b Fa(.)h(.)e(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(161)2025 2464 y Fm(printf)27 b Fn(statemen)n(t,)f(See)f(Also)i(redirection,)f(of)h(output)2193 2551 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(65)2025 2642 y Fm(printf)27 b Fn(statemen)n(t,)f Fm(sprintf)h Fn(function)f(and)7 b Fa(.)12 b(.)h(.)f(.)g(.)g(.)34 b Fn(187)2025 2732 y Fm(printf)27 b Fn(statemen)n(t,)f(syn)n(tax)f(of)17 b Fa(.)c(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)43 b Fn(60)2025 2823 y(prin)n(ting)12 b Fa(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(57)2025 2913 y(prin)n(ting,)26 b(list)g(of)g(options)12 b Fa(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)38 b Fn(175)2025 3004 y(prin)n(ting,)26 b(mailing)h(lab)r(els)10 b Fa(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(235)2025 3094 y(prin)n(ting,)26 b(unduplicated)e(lines)j(of)f(text)13 b Fa(.)e(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(224)2025 3185 y(prin)n(ting,)26 b(user)f(information)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)46 b Fn(219)2025 3275 y(priv)l(ate)25 b(v)l(ariables)14 b Fa(.)f(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(181)2025 3366 y(pro)r(cess)26 b(information,)i(\014les)e(for)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)41 b Fn(69)2025 3456 y(pro)r(cesses,)27 b(t)n(w)n(o-w)n(a)n(y)f (comm)n(unications)h(with)c Fa(.)12 b(.)g(.)h(.)f(.)49 b Fn(166)2025 3547 y(pro)r(cessing)27 b(data)12 b Fa(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(295)2025 3637 y Fm(PROCINFO)27 b Fn(arra)n(y)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)34 b Fn(70,)27 b(112,)g(201,)g(205)2025 3728 y Fm(PROCINFO)g Fn(v)l(ariable)7 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)33 b Fn(285)2025 3818 y(pro\014ling)26 b Fm(awk)g Fn(programs)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fn(169)2025 3909 y(pro\014ling)26 b Fm(awk)g Fn(programs,)h(dynamically)11 b Fa(.)i(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(172)2025 3999 y(pro\014ling)26 b Fm(gawk)p Fn(,)h(See)e Fm(pgawk)i Fn(program)7 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(169)2025 4090 y(program,)27 b(de\014nition)e(of)16 b Fa(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(11)2025 4180 y(programmers,)27 b(attractiv)n(eness)g(of)7 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)34 b Fn(166)2025 4271 y(programming)27 b(con)n(v)n(en)n(tions,)e Fm(--non-decimal-data)2178 4358 y Fn(option)15 b Fa(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)42 b Fn(165)2025 4448 y(programming)27 b(con)n(v)n(en)n(tions,)e Fm(ARGC)p Fn(/)p Fm(ARGV)j Fn(v)l(ariables)2191 4535 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(110)2025 4626 y(programming)27 b(con)n(v)n(en)n(tions,)e Fm(exit)i Fn(statemen)n(t)14 b Fa(.)e(.)h(.)f(.)40 b Fn(107)2025 4716 y(programming)27 b(con)n(v)n(en)n(tions,)e(function)h (parameters)2191 4804 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(154)2025 4894 y(programming)27 b(con)n(v)n(en)n(tions,)e(functions,)i(calling)c Fa(.)13 b(.)48 b Fn(127)2025 4985 y(programming)27 b(con)n(v)n(en)n (tions,)e(functions,)i(writing)11 b Fa(.)j(.)37 b Fn(150)2025 5075 y(programming)27 b(con)n(v)n(en)n(tions,)e Fm(gawk)i Fn(in)n(ternals)6 b Fa(.)13 b(.)f(.)h(.)f(.)32 b Fn(289,)2178 5162 y(291)2025 5253 y(programming)27 b(con)n(v)n(en)n(tions,)e Fm(nextfile)j Fn(statemen)n(t)2191 5340 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(183)p eop end %%Page: 337 349 TeXDict begin 337 348 bop 3295 -116 a Fr(Index)91 b FB(337)150 299 y Fn(programming)27 b(con)n(v)n(en)n(tions,)f(priv)l(ate)f(v)l (ariable)h(names)317 386 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(182)150 474 y(programming)27 b(language,)g(recip)r(e)f(for)17 b Fa(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fn(3)150 562 y(programming)27 b(languages,)h(data-driv)n(en)c(vs.)304 649 y(pro)r(cedural)17 b Fa(.)c(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)43 b Fn(11)150 737 y(programming,)27 b(basic)g(steps)8 b Fa(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)33 b Fn(295)150 824 y(programming,)27 b(concepts)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)34 b Fn(295)150 912 y Fm(pwcat)27 b Fn(program)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fn(201)150 1167 y FA(Q)150 1284 y Fn(question)26 b(mark)f(\()p Fm(?)p Fn(\))18 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(28,)26 b(31)150 1372 y(question)g(mark)f(\()p Fm(?)p Fn(\),)h Fm(?:)g Fn(op)r(erator)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(92)150 1460 y Fm(QUIT)27 b Fn(signal)g(\(MS-DOS\))17 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(172)150 1547 y(quoting)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)48 b Fn(12,)27 b(13,)f(14)150 1635 y(quoting,)g(rules)g (for)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(14)150 1723 y(quoting,)26 b(tric)n(ks)f(for)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(15)150 1975 y FA(R)150 2093 y Fn(Rakitzis,)26 b(Byron)9 b Fa(.)k(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(239)150 2180 y Fm(rand)27 b Fn(function)6 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)32 b Fn(128)150 2268 y(random)26 b(n)n(um)n(b)r(ers,)f(Cli\013)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)47 b Fn(188)150 2356 y(random)26 b(n)n(um)n(b)r(ers,)f Fm(rand)p Fn(/)p Fm(srand)j Fn(functions)22 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)47 b Fn(128)150 2444 y(random)26 b(n)n(um)n(b)r(ers,)f(seed)h(of)14 b Fa(.)f(.)g(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(128)150 2532 y(range)26 b(expressions)17 b Fa(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)42 b Fn(29)150 2619 y(range)26 b(patterns)11 b Fa(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(95)150 2707 y(Rankin,)25 b(P)n(at)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(9,)26 b(82,)h(258,)g(277)150 2795 y(ra)n(w)f(so)r(c)n(k)n(ets)7 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(168)150 2883 y(readable)26 b(data)g(\014les,)h(c)n(hec)n(king)18 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)45 b Fn(194)150 2970 y Fm(readable.awk)28 b Fn(program)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)35 b Fn(194)150 3058 y(recip)r(e)26 b(for)h(a)f(programming)h(language)14 b Fa(.)f(.)f(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)40 b Fn(3)150 3146 y(record)26 b(separators)12 b Fa(.)i(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(36,)27 b(109)150 3234 y(record)f(separators,)h(c)n(hanging)12 b Fa(.)h(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)37 b Fn(37)150 3322 y(record)26 b(separators,)h(regular)g (expressions)g(as)13 b Fa(.)g(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(38)150 3409 y(record)26 b(separators,)h(with)f(m)n(ultiline)h (records)10 b Fa(.)i(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(49)150 3497 y(records)17 b Fa(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)43 b Fn(36,)27 b(296)150 3585 y(records,)g(m)n(ultiline)17 b Fa(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fn(49)150 3673 y(records,)27 b(prin)n(ting)14 b Fa(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)39 b Fn(57)150 3761 y(records,)27 b(splitting)f(input)f (in)n(to)10 b Fa(.)i(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)35 b Fn(36)150 3848 y(records,)27 b(terminating)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)49 b Fn(38)150 3936 y(records,)27 b(treating)f(\014les)g(as)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)44 b Fn(39)150 4024 y(recursiv)n(e)26 b(functions)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(150)150 4112 y(redirection)26 b(of)h(input)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)45 b Fn(53)150 4199 y(redirection)26 b(of)h(output)14 b Fa(.)e(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) 40 b Fn(65)150 4287 y(reference)27 b(coun)n(ting,)e(sorting)i(arra)n (ys)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(125)150 4375 y(regexp)26 b(constan)n(ts)14 b Fa(.)e(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(25,)27 b(74,)f(87)150 4463 y(regexp)g(constan)n(ts,)g Fm(/=...)q(/)p Fn(,)g Fm(/=)g Fn(op)r(erator)h(and)13 b Fa(.)f(.)h(.)f(.)g(.)39 b Fn(83)150 4551 y(regexp)26 b(constan)n(ts,)g(as)g(patterns)19 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(94)150 4638 y(regexp)26 b(constan)n(ts,)g(in)g Fm(gawk)9 b Fa(.)k(.)f(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(75)150 4726 y(regexp)26 b(constan)n(ts,)g(slashes)h(vs.)34 b(quotes)17 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(34)150 4814 y(regexp)26 b(constan)n(ts,)g(vs.)34 b(string)26 b(constan)n(ts)c Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)47 b Fn(34)150 4902 y(regexp,)26 b(See)f(regular)i(expressions)7 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) 33 b Fn(24)150 4989 y Fm(register_deferred_variable)f Fn(in)n(ternal)25 b(function)317 5077 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(285)150 5164 y Fm(register_open_hook)30 b Fn(in)n(ternal)c (function)8 b Fa(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(285)150 5252 y(regular)27 b(expressions)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)35 b Fn(24)150 5340 y(regular)27 b(expressions)f(as)g(\014eld)g (separators)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(43)2025 299 y(regular)26 b(expressions,)h(anc)n(hors)f(in)14 b Fa(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(27)2025 387 y(regular)26 b(expressions,)h(as)f(\014eld)g (separators)11 b Fa(.)j(.)e(.)h(.)f(.)g(.)g(.)h(.)f(.)37 b Fn(44)2025 475 y(regular)26 b(expressions,)h(as)f(patterns)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(24,)27 b(93)2025 563 y(regular)f(expressions,)h(as)f(record)g (separators)13 b Fa(.)h(.)f(.)f(.)g(.)h(.)f(.)39 b Fn(38)2025 651 y(regular)26 b(expressions,)h(case)g(sensitivit)n(y)17 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)43 b Fn(32,)27 b(108)2025 739 y(regular)f(expressions,)h(computed)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(34)2025 827 y(regular)26 b(expressions,)h(constan)n(ts,)f(See)g (regexp)2178 914 y(constan)n(ts)21 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(25)2025 1003 y(regular)26 b(expressions,)h(dynamic)7 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)33 b Fn(34)2025 1091 y(regular)26 b(expressions,)h(dynamic,)f(with)g(em)n(b)r(edded)2178 1178 y(newlines)18 b Fa(.)c(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)44 b Fn(34)2025 1266 y(regular)26 b(expressions,)h Fm(gawk)p Fn(,)g(command-line)f(options)2193 1353 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)40 b Fn(32)2025 1441 y(regular)26 b(expressions,)h(in)n (terv)l(al)f(expressions)g(and)20 b Fa(.)12 b(.)46 b Fn(177)2025 1529 y(regular)26 b(expressions,)h(leftmost)g(longest)g (matc)n(h)21 b Fa(.)12 b(.)h(.)f(.)47 b Fn(33)2025 1617 y(regular)26 b(expressions,)h(op)r(erators)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)47 b Fn(24,)27 b(27)2025 1705 y(regular)f(expressions,)h(op)r(erators,)g (for)g(bu\013ers)16 b Fa(.)11 b(.)i(.)f(.)g(.)h(.)41 b Fn(31)2025 1793 y(regular)26 b(expressions,)h(op)r(erators,)g(for)g (w)n(ords)12 b Fa(.)h(.)g(.)f(.)g(.)h(.)f(.)38 b Fn(31)2025 1881 y(regular)26 b(expressions,)h(op)r(erators,)g Fm(gawk)17 b Fa(.)d(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fn(31)2025 1970 y(regular)26 b(expressions,)h(op)r(erators,)g(precedence)f(of)16 b Fa(.)d(.)f(.)42 b Fn(29)2025 2058 y(regular)26 b(expressions,)h (searc)n(hing)g(for)7 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)33 b Fn(215)2025 2146 y(relational)24 b(op)r(erators,)h(See) e(comparison)h(op)r(erators)8 b Fa(.)14 b(.)31 b Fn(85)2025 2234 y Fm(return)c Fn(statemen)n(t,)f(user-de\014ned)e(functions)e Fa(.)12 b(.)h(.)f(.)g(.)48 b Fn(154)2025 2322 y(return)25 b(v)l(alues,)h Fm(close)h Fn(function)18 b Fa(.)12 b(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fn(72)2025 2410 y Fm(rev)26 b Fn(user-de\014ned)e(function)12 b Fa(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)38 b Fn(151)2025 2498 y Fm(rewind)27 b Fn(user-de\014ned)d (function)8 b Fa(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)34 b Fn(194)2025 2586 y(righ)n(t)26 b(angle)g(brac)n(k)n (et)f(\()p Fm(>)p Fn(\),)h Fm(>)g Fn(op)r(erator)16 b Fa(.)d(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(86,)27 b(91)2025 2674 y(righ)n(t)f(angle)g(brac)n(k)n(et)f(\()p Fm(>)p Fn(\),)h Fm(>)g Fn(op)r(erator)h(\(I/O\))9 b Fa(.)i(.)h(.)h(.)f(.)g(.)h (.)34 b Fn(65)2025 2762 y(righ)n(t)26 b(angle)g(brac)n(k)n(et)f(\()p Fm(>)p Fn(\),)h Fm(>=)g Fn(op)r(erator)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h (.)f(.)40 b Fn(86,)27 b(91)2025 2850 y(righ)n(t)f(angle)g(brac)n(k)n (et)f(\()p Fm(>)p Fn(\),)h Fm(>>)g Fn(op)r(erator)h(\(I/O\))18 b Fa(.)12 b(.)43 b Fn(66,)27 b(91)2025 2938 y(righ)n(t)f(shift,)g(bit)n (wise)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)46 b Fn(147)2025 3026 y(Ritc)n(hie,)26 b(Dennis)14 b Fa(.)e(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(297)2025 3114 y Fm(RLENGTH)27 b Fn(v)l(ariable)8 b Fa(.)13 b(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(112)2025 3203 y Fm(RLENGTH)27 b Fn(v)l(ariable,)f Fm(match)h Fn(function)f(and)7 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)33 b Fn(131)2025 3291 y(Robbins,)25 b(Arnold)19 b Fa(.)12 b(.)g(.)45 b Fn(46,)27 b(54,)f(203,)h(231,)h(259,)f(276,)g(292) 2025 3379 y(Robbins,)e(Bill)16 b Fa(.)e(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)42 b Fn(54)2025 3467 y(Robbins,)25 b(Harry)15 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(9)2025 3555 y(Robbins,)25 b(Jean)17 b Fa(.)d(.)e(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(9)2025 3643 y(Robbins,)25 b(Miriam)11 b Fa(.)j(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(9,)26 b(54,)h(203)2025 3731 y(Robinson,)f(Will)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)46 b Fn(282)2025 3819 y(rob)r(ot,)26 b(the)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(282)2025 3907 y(Rommel,)26 b(Kai)g(Uw)n(e)12 b Fa(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)37 b Fn(9,)27 b(258)2025 3995 y Fm(round)f Fn(user-de\014ned)f (function)9 b Fa(.)k(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)35 b Fn(187)2025 4083 y(rounding)13 b Fa(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) 39 b Fn(187)2025 4171 y(rounding)25 b(n)n(um)n(b)r(ers)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(187)2025 4259 y Fm(RS)26 b Fn(v)l(ariable)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)34 b Fn(36,)27 b(109)2025 4347 y Fm(RS)f Fn(v)l(ariable,)g(m)n(ultiline)g(records)h(and)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fn(49)2025 4436 y Fm(rshift)27 b Fn(function)f(\()p Fm(gawk)p Fn(\))9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(148)2025 4524 y Fm(RSTART)27 b Fn(v)l(ariable)10 b Fa(.)i(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)36 b Fn(112)2025 4612 y Fm(RSTART)27 b Fn(v)l(ariable,)f Fm(match)h Fn(function)f(and)8 b Fa(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(131)2025 4700 y Fm(RT)26 b Fn(v)l(ariable)19 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)45 b Fn(38,)27 b(51,)g(113)2025 4788 y(Rubin,)e(P)n(aul)8 b Fa(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)34 b Fn(4,)27 b(258)2025 4876 y(rule,)f(de\014nition)f(of)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fn(11)2025 4964 y(rv)l(alues/lv)l(alues)6 b Fa(.)14 b(.)e(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)32 b Fn(81)2025 5222 y FA(S)2025 5340 y Fn(scalar)27 b(v)l(alues)6 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)33 b Fn(296)p eop end %%Page: 338 350 TeXDict begin 338 349 bop 150 -116 a FB(338)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fn(Sc)n(hreib)r(er,)c(Bert)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(9)150 387 y(Sc)n(hreib)r(er,)26 b(Rita)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) 47 b Fn(9)150 476 y(searc)n(h)26 b(paths)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(270,)27 b(273)150 564 y(searc)n(h)f(paths,)g(for)g(source)h(\014les)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(179,)27 b(250,)g(273)150 653 y(searc)n(hing)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(130)150 741 y(searc)n(hing,)27 b(\014les)f(for)g(regular)h(expressions)22 b Fa(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)47 b Fn(215)150 830 y(searc)n(hing,)27 b(for)f(w)n(ords)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)36 b Fn(230)150 918 y Fm(sed)26 b Fn(utilit)n(y)9 b Fa(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(47,)27 b(243,)g(300)150 1007 y(semicolon)g(\()p Fm(;)p Fn(\))12 b Fa(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(22)150 1095 y(semicolon)27 b(\()p Fm(;)p Fn(\),)f Fm(AWKPATH)h Fn(v)l(ariable)g(and)12 b Fa(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fn(270)150 1184 y(semicolon)27 b(\()p Fm(;)p Fn(\),)f(separating)h(statemen)n(ts)f (in)g(actions)310 1271 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fn(98,)26 b(99)150 1359 y(separators,)h(\014eld)16 b Fa(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(108,)27 b(109)150 1448 y(separators,)g(\014eld,)f Fm(FIELDWIDTHS)i Fn(v)l(ariable)f(and)20 b Fa(.)12 b(.)g(.)47 b Fn(108)150 1536 y(separators,)27 b(\014eld,)f(POSIX)f(and)7 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)33 b Fn(39)150 1625 y(separators,)27 b(for)g(records)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)45 b Fn(36,)26 b(37)150 1713 y(separators,)h(for)g (records,)g(regular)f(expressions)h(as)20 b Fa(.)12 b(.)45 b Fn(38)150 1801 y(separators,)27 b(for)g(statemen)n(ts)f(in)g(actions) 8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(98)150 1890 y(separators,)27 b(record)8 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(109)150 1978 y(separators,)27 b(subscript)16 b Fa(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)42 b Fn(109)150 2067 y Fm(set_value)28 b Fn(in)n(ternal)e(function)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)46 b Fn(285)150 2155 y(shells,)27 b(piping)f(commands)g(in)n(to)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)48 b Fn(67)150 2244 y(shells,)27 b(quoting)14 b Fa(.)e(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(97)150 2332 y(shells,)27 b(quoting,)f(rules)g(for)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(15)150 2421 y(shells,)27 b(scripts)13 b Fa(.)g(.)g(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(11)150 2509 y(shells,)27 b(v)l(ariables)13 b Fa(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 38 b Fn(97)150 2598 y(shift,)27 b(bit)n(wise)22 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(147)150 2686 y(short-circuit)26 b(op)r(erators)6 b Fa(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)32 b Fn(88)150 2775 y(side)26 b(e\013ects)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)49 b Fn(80,)27 b(83,)f(84)150 2863 y(side)g(e\013ects,)g(arra)n(y)g (indexing)7 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)33 b Fn(118)150 2951 y(side)26 b(e\013ects,)g Fm(asort)h Fn(function)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)45 b Fn(124)150 3040 y(side)26 b(e\013ects,)g(assignmen)n(t)h(expressions)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(81)150 3128 y(side)26 b(e\013ects,)g(Bo)r(olean)i(op)r(erators)18 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) 43 b Fn(88)150 3217 y(side)26 b(e\013ects,)g(conditional)h(expressions) 10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(89)150 3305 y(side)26 b(e\013ects,)g(decremen)n(t/incremen)n(t)g (op)r(erators)14 b Fa(.)g(.)e(.)g(.)40 b Fn(83)150 3394 y(side)26 b(e\013ects,)g Fm(FILENAME)i Fn(v)l(ariable)22 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 47 b Fn(56)150 3482 y(side)26 b(e\013ects,)g(function)g(calls)9 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)34 b Fn(90)150 3571 y(side)26 b(e\013ects,)g (statemen)n(ts)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(99)150 3659 y(signals,)28 b Fm(HUP)p Fn(/)p Fm(SIGHUP)14 b Fa(.)g(.)e(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)40 b Fn(172)150 3748 y(signals,)28 b Fm(INT)p Fn(/)p Fm(SIGINT)g Fn(\(MS-DOS\))19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fn(172)150 3836 y(signals,)28 b Fm(QUIT)p Fn(/)p Fm(SIGQUIT)g Fn(\(MS-DOS\))18 b Fa(.)11 b(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)44 b Fn(172)150 3925 y(signals,)28 b Fm(USR1)p Fn(/)p Fm(SIGUSR1)11 b Fa(.)k(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)37 b Fn(172)150 4013 y Fm(sin)26 b Fn(function)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)34 b Fn(128)150 4101 y(single)27 b(quote)e(\()p Fm(')p Fn(\))14 b Fa(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(11,)27 b(13,)f(15)150 4190 y(single)h(quote)e(\()p Fm(')p Fn(\),)h(vs.)34 b(ap)r(ostrophe)12 b Fa(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)37 b Fn(14)150 4278 y(single)27 b(quote)e(\()p Fm(')p Fn(\),)h(with)g(double)f(quotes)13 b Fa(.)g(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)39 b Fn(15)150 4367 y(single-c)n(haracter)27 b(\014elds)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(44)150 4455 y(single-precision)27 b(\015oating-p)r(oin)n(t)14 b Fa(.)f(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)40 b Fn(296)150 4544 y(Skyw)n(alk)n(er,)25 b(Luk)n(e)15 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(180)150 4632 y Fm(sleep)27 b Fn(utilit)n(y)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fn(233)150 4721 y(so)r(c)n(k)n(ets)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)34 b Fn(168)150 4809 y(sort)26 b(function,)g(arra)n(ys,)h (sorting)10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)35 b Fn(124)150 4898 y Fm(sort)27 b Fn(utilit)n(y)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fn(238)150 4986 y Fm(sort)27 b Fn(utilit)n(y)-6 b(,)25 b(copro)r(cesses)j(and)11 b Fa(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(167)150 5075 y(sorting)27 b(c)n(haracters)f(in)g(di\013eren)n(t)f(languages)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)45 b Fn(157)150 5163 y(source)26 b(co)r(de,)h Fm(awka)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fn(278)150 5252 y(source)26 b(co)r(de,)h(Bell)g(Lab)r(oratories)g Fm(awk)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(277)150 5340 y(source)26 b(co)r(de,)h Fm(gawk)13 b Fa(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fn(260)2025 299 y(source)26 b(co)r(de,)g Fm(mawk)13 b Fa(.)g(.)g(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)39 b Fn(277)2025 387 y(source)26 b(co)r(de,)g(mixing)13 b Fa(.)g(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(177)2025 476 y(source)26 b(\014les,)g(searc)n(h)h(path)e(for)14 b Fa(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)40 b Fn(250)2025 565 y(sparse)26 b(arra)n(ys)17 b Fa(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fn(117)2025 653 y(Sp)r(encer,)25 b(Henry)14 b Fa(.)e(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(300)2025 742 y Fm(split)26 b Fn(function)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)49 b Fn(132)2025 830 y Fm(split)26 b Fn(function,)h(arra)n(y)e(elemen)n (ts,)i(deleting)17 b Fa(.)c(.)f(.)g(.)h(.)f(.)43 b Fn(121)2025 919 y Fm(split)26 b Fn(utilit)n(y)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)48 b Fn(221)2025 1007 y Fm(split.awk)27 b Fn(program)14 b Fa(.)g(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(221)2025 1096 y Fm(sprintf)27 b Fn(function)13 b Fa(.)f(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)39 b Fn(59,)27 b(133)2025 1185 y Fm(sprintf)g Fn(function,)f Fm(OFMT)h Fn(v)l(ariable)f(and)8 b Fa(.)k(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)34 b Fn(109)2025 1273 y Fm(sprintf)27 b Fn(function,)f Fm(print)p Fn(/)p Fm(printf)j Fn(statemen)n(ts)d(and) 2191 1360 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(187)2025 1449 y Fm(sqrt)26 b Fn(function)6 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)32 b Fn(128)2025 1537 y(square)25 b(brac)n(k)n(ets)h(\()p Fm([])p Fn(\))d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)48 b Fn(27)2025 1626 y Fm(srand)26 b Fn(function)e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)49 b Fn(129)2025 1714 y(Stallman,)26 b(Ric)n(hard)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(7,)26 b(9,)h(258,)g(304)2025 1803 y(standard)e(input)15 b Fa(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(12,)27 b(68)2025 1892 y(standard)e(output)17 b Fa(.)12 b(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)43 b Fn(68)2025 1980 y Fm(stat)26 b Fn(function,)g(implemen)n(ting)g(in)g Fm(gawk)20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fn(287)2025 2069 y(statemen)n(ts,)26 b(comp)r(ound,)g(con)n(trol)g(statemen)n(ts)g (and)2193 2156 y Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(99)2025 2244 y(statemen)n(ts,)26 b(con)n(trol,)h(in)e(actions)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(99)2025 2333 y(statemen)n(ts,)26 b(m)n(ultiple)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(22)2025 2422 y Fm(stlen)26 b Fn(in)n(ternal)g(v)l(ariable)15 b Fa(.)e(.)f(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(283)2025 2510 y Fm(stptr)26 b Fn(in)n(ternal)g(v)l(ariable)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)41 b Fn(283)2025 2599 y(stream)26 b(editors)6 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fn(47,)27 b(243)2025 2687 y Fm(strftime)g Fn(function)f(\()p Fm(gawk)p Fn(\))7 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(143)2025 2776 y(string)26 b(constan)n(ts)6 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)32 b Fn(73)2025 2864 y(string)26 b(constan)n(ts,)g(vs.) 35 b(regexp)25 b(constan)n(ts)d Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)47 b Fn(34)2025 2953 y(string)26 b(extraction)g(\(in)n (ternationalization\))e Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)48 b Fn(160)2025 3042 y(string)26 b(op)r(erators)6 b Fa(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fn(80)2025 3130 y(string-matc)n(hing)26 b(op)r(erators)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)46 b Fn(24)2025 3219 y(strings)15 b Fa(.)e(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(283)2025 3307 y(strings,)27 b(con)n(v)n(erting)18 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fn(77)2025 3396 y(strings,)27 b(con)n(v)n(erting,)e(n)n(um)n(b)r(ers)g(to)f Fa(.)13 b(.)f(.)g(.)h(.)50 b Fn(108,)27 b(109,)g(148)2025 3484 y(strings,)g(empt)n(y)-6 b(,)24 b(See)i(n)n(ull)f(strings)12 b Fa(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(37)2025 3573 y(strings,)27 b(extracting)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)48 b Fn(160)2025 3661 y(strings,)27 b(for)f(lo)r(calization)14 b Fa(.)h(.)e(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(158)2025 3750 y(strings,)27 b(length)e(of)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(73)2025 3839 y(strings,)27 b(merging)f(arra)n(ys)g(in)n(to)8 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)35 b Fn(190)2025 3927 y(strings,)27 b Fm(NODE)f Fn(in)n(ternal)g(t)n(yp)r(e)11 b Fa(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)38 b Fn(283)2025 4016 y(strings,)27 b(n)n(ull)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(44)2025 4104 y(strings,)27 b(n)n(umeric)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fn(85)2025 4193 y(strings,)27 b(splitting)16 b Fa(.)d(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)42 b Fn(132)2025 4281 y Fm(strtonum)27 b Fn(function)f(\()p Fm(gawk)p Fn(\))7 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(133)2025 4370 y Fm(strtonum)27 b Fn(function)f(\()p Fm(gawk)p Fn(\),)h Fm(--non-decimal-data)2178 4457 y Fn(option)f(and)13 b Fa(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)40 b Fn(165)2025 4546 y Fm(sub)26 b Fn(function)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(75,)27 b(133)2025 4634 y Fm(sub)f Fn(function,)g(argumen)n(ts)g(of)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)47 b Fn(134)2025 4723 y Fm(sub)26 b Fn(function,)g(escap)r(e)h (pro)r(cessing)18 b Fa(.)c(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)44 b Fn(137)2025 4811 y(subscript)25 b(separators)8 b Fa(.)14 b(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(109)2025 4900 y(subscripts)26 b(in)f(arra)n(ys,)i(m)n(ultidimensional)15 b Fa(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)41 b Fn(122)2025 4989 y(subscripts)26 b(in)f(arra)n(ys,)i(m)n(ultidimensional,)g(scanning) 2191 5076 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(124)2025 5164 y(subscripts)26 b(in)f(arra)n(ys,)i(n)n(um)n(b)r(ers)e(as)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fn(121)2025 5253 y(subscripts)26 b(in)f(arra)n(ys,)i(uninitialized)f (v)l(ariables)h(as)2191 5340 y Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(122)p eop end %%Page: 339 351 TeXDict begin 339 350 bop 3295 -116 a Fr(Index)91 b FB(339)150 299 y Fm(SUBSEP)27 b Fn(v)l(ariable)10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)36 b Fn(109)150 387 y Fm(SUBSEP)27 b Fn(v)l(ariable,)f(m)n(ultidimensional)h(arra)n(ys)20 b Fa(.)13 b(.)f(.)g(.)h(.)45 b Fn(122)150 475 y Fm(substr)27 b Fn(function)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)48 b Fn(136)150 563 y(Sumner,)25 b(Andrew)7 b Fa(.)12 b(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)33 b Fn(278)150 651 y Fm(switch)27 b Fn(statemen)n(t)12 b Fa(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(102)150 739 y(syn)n(tactic)26 b(am)n(biguit)n(y:)34 b Fm(/=)26 b Fn(op)r(erator)h(vs.)34 b Fm(/=...)q(/)304 827 y Fn(regexp)25 b(constan)n(t)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(83)150 915 y Fm(system)27 b Fn(function)22 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)48 b Fn(141)150 1003 y Fm(systime)27 b Fn(function)f(\()p Fm(gawk)p Fn(\))8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)34 b Fn(143)150 1261 y FA(T)150 1379 y Fn(tandem)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(275)150 1467 y(Tcl)16 b Fa(.)e(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)42 b Fn(182)150 1555 y(TCP/IP)23 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)48 b Fn(168)150 1643 y(TCP/IP)-6 b(,)27 b(supp)r(ort)e(for)14 b Fa(.)g(.)e(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(69)150 1731 y Fm(tee)26 b Fn(utilit)n(y)7 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(223)150 1820 y Fm(tee.awk)27 b Fn(program)17 b Fa(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fn(223)150 1908 y(terminating)26 b(records)16 b Fa(.)e(.)e(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)42 b Fn(38)150 1996 y Fm(testbits.awk)28 b Fn(program)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fn(148)150 2084 y(T)-6 b(exinfo)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)42 b Fn(6,)27 b(181,)g(230,)g(240,)g(262,)g(280)150 2172 y(T)-6 b(exinfo,)27 b(c)n(hapter)e(b)r(eginnings)h(in)g(\014les)13 b Fa(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(27)150 2260 y(T)-6 b(exinfo,)27 b(extracting)f(programs)g(from)h (source)f(\014les)317 2347 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fn(240)150 2435 y(text,)25 b(prin)n(ting)12 b Fa(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(57)150 2523 y(text,)25 b(prin)n(ting,)h(unduplicated)f(lines)h(of)21 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(224)150 2612 y Fm(textdomain)28 b Fn(function)e(\(C)g(library\))20 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(156)150 2700 y Fm(TEXTDOMAIN)28 b Fn(v)l(ariable)14 b Fa(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)40 b Fn(110,)27 b(158)150 2788 y Fm(TEXTDOMAIN)h Fn(v)l(ariable,)e Fm(BEGIN)h Fn(pattern)e(and)16 b Fa(.)d(.)f(.)g(.)h (.)f(.)42 b Fn(159)150 2876 y Fm(TEXTDOMAIN)28 b Fn(v)l(ariable,)e(p)r (ortabilit)n(y)g(and)18 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fn(161)150 2964 y(tilde)26 b(\()p Fm(~)p Fn(\),)g Fm(~)g Fn(op)r(erator)13 b Fa(.)g(.)39 b Fn(24,)27 b(32,)g(34,)g(74,)f(86,)h (87,)g(91,)f(94)150 3052 y(time,)g(alarm)h(clo)r(c)n(k)f(example)g (program)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(231)150 3140 y(time,)26 b(lo)r(calization)j(and)17 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fn(158)150 3228 y(time,)26 b(managing)11 b Fa(.)j(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fn(190)150 3316 y(time,)26 b(retrieving)12 b Fa(.)h(.)g(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(142)150 3404 y(timestamps)16 b Fa(.)d(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(142,)27 b(143)150 3493 y(timestamps,)g(con)n(v)n(erting)e(dates)h(to)7 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(143)150 3581 y(timestamps,)27 b(formatted)17 b Fa(.)c(.)g(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) 43 b Fn(190)150 3669 y Fm(tmp_number)28 b Fn(in)n(ternal)e(function)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 45 b Fn(284)150 3757 y Fm(tmp_string)28 b Fn(in)n(ternal)e(function)19 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 45 b Fn(284)150 3845 y Fm(tolower)27 b Fn(function)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(136)150 3933 y Fm(toupper)27 b Fn(function)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)46 b Fn(137)150 4021 y Fm(tr)26 b Fn(utilit)n(y)8 b Fa(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)34 b Fn(233)150 4109 y Fm(translate.awk)29 b Fn(program)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)34 b Fn(234)150 4197 y(troublesho)r(oting,)25 b Fm(--non-decimal-data)i Fn(option)8 b Fa(.)13 b(.)31 b Fn(176)150 4286 y(troublesho)r(oting,)c Fm(-F)f Fn(option)9 b Fa(.)k(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)35 b Fn(180)150 4374 y(troublesho)r(oting,)27 b Fm(==)f Fn(op)r(erator)11 b Fa(.)j(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fn(86)150 4462 y(troublesho)r (oting,)27 b Fm(awk)f Fn(uses)g Fm(FS)h Fn(not)e Fm(IFS)18 b Fa(.)c(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fn(43)150 4550 y(troublesho)r(oting,)27 b(bac)n(kslash)f(b)r(efore)h(nonsp)r (ecial)304 4637 y(c)n(haracter)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)48 b Fn(26)150 4725 y(troublesho)r(oting,)27 b(division)22 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fn(79)150 4813 y(troublesho)r(oting,)27 b(fatal)g(errors,)g(\014eld)f(widths,)304 4900 y(sp)r(ecifying)12 b Fa(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)38 b Fn(47)150 4988 y(troublesho)r(oting,)27 b(fatal)g(errors,)g Fm(printf)g Fn(format)g(strings)318 5076 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(64)150 5164 y(troublesho)r (oting,)27 b Fm(fflush)g Fn(function)9 b Fa(.)k(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)35 b Fn(140)150 5252 y(troublesho)r(oting,)27 b(function)f(call)h(syn)n(tax)19 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)45 b Fn(90)150 5340 y(troublesho)r(oting,)27 b Fm(gawk)9 b Fa(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)35 b Fn(180,)27 b(279)2025 299 y(troublesho)r (oting,)g Fm(gawk)p Fn(,)g(bug)e(rep)r(orts)18 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fn(276)2025 387 y(troublesho)r(oting,)27 b Fm(gawk)p Fn(,)g(fatal)g(errors,)g (function)2178 474 y(argumen)n(ts)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)47 b Fn(127)2025 562 y(troublesho)r(oting,)27 b Fm(getline)g Fn(function)8 b Fa(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)34 b Fn(195)2025 649 y(troublesho)r(oting,)27 b Fm(gsub)p Fn(/)p Fm(sub)h Fn(functions)9 b Fa(.)k(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)36 b Fn(135)2025 737 y(troublesho)r(oting,)27 b Fm(match)g Fn(function)10 b Fa(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)37 b Fn(132)2025 825 y(troublesho)r(oting,)27 b Fm(print)g Fn(statemen)n(t,)f(omitting)2178 912 y(commas)7 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fn(58)2025 1000 y(troublesho)r(oting,)27 b(prin)n(ting)18 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)43 b Fn(67)2025 1088 y(troublesho)r(oting,)27 b(quotes)e(with)h(\014le)g(names)12 b Fa(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.) 38 b Fn(68)2025 1176 y(troublesho)r(oting,)27 b(readable)f(data)g (\014les)8 b Fa(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fn(194)2025 1263 y(troublesho)r(oting,)27 b(regexp)e(constan)n(ts)i (vs.)34 b(string)2178 1351 y(constan)n(ts)21 b Fa(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(34)2025 1438 y(troublesho)r(oting,)27 b(string)f(concatenation)9 b Fa(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(80)2025 1526 y(troublesho)r(oting,)27 b Fm(substr)g Fn(function)9 b Fa(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(136)2025 1614 y(troublesho)r(oting,)27 b Fm(system)g Fn(function)9 b Fa(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(141)2025 1702 y(troublesho)r(oting,)27 b(t)n(yp)r(ographical)f (errors,)h(global)2178 1789 y(v)l(ariables)12 b Fa(.)i(.)e(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(175)2025 1877 y(true,)25 b(logical)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)45 b Fn(85)2025 1964 y(T)-6 b(rueman,)26 b(Da)n(vid)21 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(4,)26 b(9,)h(258)2025 2052 y(trunc-mo)r(d)e(op)r(eration)15 b Fa(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)41 b Fn(79)2025 2140 y(truth)24 b(v)l(alues)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)42 b Fn(85)2025 2228 y(t)n(yp)r(e)25 b(con)n(v)n(ersion)12 b Fa(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)38 b Fn(77)2025 2316 y Fm(type)26 b Fn(in)n(ternal)g(v)l(ariable)16 b Fa(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(283)2025 2570 y FA(U)2025 2688 y Fn(unde\014ned)24 b(functions)17 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)43 b Fn(153)2025 2775 y(underscore)26 b(\()p Fm(_)p Fn(\),)f Fm(_)h Fn(C)g(macro)12 b Fa(.)i(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)39 b Fn(157)2025 2863 y(underscore)26 b(\()p Fm(_)p Fn(\),)f(in)h(names)g(of)h(priv)l (ate)e(v)l(ariables)15 b Fa(.)e(.)41 b Fn(182)2025 2951 y(underscore)26 b(\()p Fm(_)p Fn(\),)f(translatable)i(string)7 b Fa(.)14 b(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fn(159)2025 3039 y(undo)r(cumen)n(ted)24 b(features)9 b Fa(.)k(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)35 b Fn(180)2025 3126 y(uninitialized)26 b(v)l(ariables,)h(as)f(arra)n(y)g(subscripts)c Fa(.)12 b(.)g(.)h(.)47 b Fn(122)2025 3214 y Fm(uniq)26 b Fn(utilit)n(y)d Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)50 b Fn(224)2025 3302 y Fm(uniq.awk)27 b Fn(program)15 b Fa(.)f(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(225)2025 3390 y(Unix)9 b Fa(.)i(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(308)2025 3478 y(Unix)24 b Fm(awk)p Fn(,)j(bac)n(kslashes)g(in)e(escap)r(e)i(sequences)20 b Fa(.)12 b(.)h(.)f(.)g(.)46 b Fn(26)2025 3565 y(Unix)24 b Fm(awk)p Fn(,)j Fm(close)g Fn(function)f(and)9 b Fa(.)j(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fn(72)2025 3653 y(Unix)24 b Fm(awk)p Fn(,)j(passw)n(ord)g(\014les,)f (\014eld)g(separators)h(and)22 b Fa(.)12 b(.)48 b Fn(46)2025 3741 y(Unix,)25 b Fm(awk)h Fn(scripts)g(and)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)47 b Fn(13)2025 3829 y(unsigned)25 b(in)n(tegers)18 b Fa(.)c(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(296)2025 3917 y Fm(update_ERRNO)28 b Fn(in)n(ternal)e(function)16 b Fa(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(285)2025 4004 y Fm(update_ERRNO_saved)29 b Fn(in)n(ternal)d (function)8 b Fa(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fn(285)2025 4092 y(user)26 b(database,)g(reading)e Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fn(201)2025 4180 y(user-de\014ned,)24 b(functions)f Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)48 b Fn(149)2025 4268 y(user-de\014ned,)24 b(functions,)j(coun)n(ts)17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)43 b Fn(171)2025 4356 y(user-de\014ned,)24 b(v)l(ariables)11 b Fa(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)37 b Fn(76)2025 4443 y(user-mo)r(di\014able)26 b(v)l(ariables)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)47 b Fn(107)2025 4531 y(users,)26 b(information)h(ab)r(out,)f (prin)n(ting)11 b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)37 b Fn(219)2025 4619 y(users,)26 b(information)h(ab)r(out,)f(retrieving) 20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fn(201)2025 4707 y Fm(USR1)26 b Fn(signal)11 b Fa(.)j(.)f(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)38 b Fn(172)2025 4959 y FA(V)2025 5077 y Fn(v)l(alues,)26 b(n)n(umeric)13 b Fa(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)39 b Fn(296)2025 5164 y(v)l(alues,)26 b(string)14 b Fa(.)f(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(296)2025 5252 y(v)l(ariable)26 b(t)n(yping)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)48 b Fn(85)2025 5340 y(v)l(ariables)9 b Fa(.)k(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fn(22,)27 b(296)p eop end %%Page: 340 352 TeXDict begin 340 351 bop 150 -116 a FB(340)92 b Fr(GA)-10 b(WK:)31 b(E\013ectiv)m(e)h(A)-10 b(WK)30 b(Programming)150 299 y Fn(v)l(ariables,)d(assigning)g(on)f(command)g(line)13 b Fa(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fn(76)150 386 y(v)l(ariables,)27 b(built-in)7 b Fa(.)k(.)i(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fn(76,)27 b(107)150 473 y(v)l(ariables,)g(built-in,)e Fm(-v)h Fn(option,)g(setting)h(with)7 b Fa(.)13 b(.)f(.)g(.)h(.)33 b Fn(174)150 560 y(v)l(ariables,)27 b(built-in,)e(con)n(v)n(eying)g (information)18 b Fa(.)c(.)e(.)h(.)f(.)44 b Fn(110)150 648 y(v)l(ariables,)27 b(\015ag)7 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fn(88)150 735 y(v)l(ariables,)27 b Fm(getline)g Fn(command)f(in)n(to,)g(using)20 b Fa(.)12 b(.)g(.)45 b Fn(52,)27 b(53,)304 822 y(55)150 909 y(v)l(ariables,)g (global,)g(for)g(library)f(functions)d Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.) g(.)49 b Fn(181)150 996 y(v)l(ariables,)27 b(global,)g(prin)n(ting)f (list)g(of)9 b Fa(.)k(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)35 b Fn(175)150 1083 y(v)l(ariables,)27 b(initializing)16 b Fa(.)f(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fn(76)150 1171 y(v)l(ariables,)27 b(names)f(of)8 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)34 b Fn(116)150 1258 y(v)l(ariables,)27 b(priv)l(ate)21 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fn(181)150 1345 y(v)l(ariables,)27 b(setting)7 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)32 b Fn(174)150 1432 y(v)l(ariables,)27 b(shado)n(wing)18 b Fa(.)c(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fn(150)150 1519 y(v)l(ariables,)27 b(t)n(yp)r(es)e(of)7 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fn(81)150 1606 y(v)l(ariables,)27 b(t)n(yp)r(es)e(of,)i(comparison)g (expressions)f(and)318 1694 y Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(85)150 1781 y(v)l(ariables,)27 b(uninitialized,)g(as)f(arra)n(y)g (subscripts)11 b Fa(.)h(.)g(.)h(.)36 b Fn(122)150 1868 y(v)l(ariables,)27 b(user-de\014ned)11 b Fa(.)g(.)h(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fn(76)150 1955 y(v)n(ertical)26 b(bar)g(\()p Fm(|)p Fn(\))18 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(28)150 2042 y(v)n(ertical)26 b(bar)g(\()p Fm(|)p Fn(\),)g Fm(|)g Fn(op)r(erator)g(\(I/O\))16 b Fa(.)c(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)42 b Fn(54,)26 b(91)150 2130 y(v)n(ertical)g(bar)g(\()p Fm(|)p Fn(\),)g Fm(|&)g Fn(I/O)f(op)r(erator)i(\(I/O\))18 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)44 b Fn(166)150 2217 y(v)n(ertical)26 b(bar)g(\()p Fm(|)p Fn(\),)g Fm(|&)g Fn(op)r(erator)h(\(I/O\))15 b Fa(.)c(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fn(55,)26 b(91)150 2304 y(v)n(ertical)g(bar)g(\()p Fm(|)p Fn(\),)g Fm(|&)g Fn(op)r(erator)h(\(I/O\),)e(t)n(w)n(o-w)n(a)n (y)304 2391 y(comm)n(unications)15 b Fa(.)f(.)e(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fn(169)150 2478 y(v)n(ertical)26 b(bar)g(\()p Fm(|)p Fn(\),)g Fm(||)g Fn(op)r(erator)11 b Fa(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fn(88,)26 b(91)150 2565 y Fm(vname)h Fn(in)n(ternal)f(v)l(ariable)15 b Fa(.)d(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(283)150 2798 y FA(W)150 2914 y Fm(w)26 b Fn(utilit)n(y)11 b Fa(.)h(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)36 b Fn(47)150 3001 y(W)-6 b(all,)27 b(Larry)c Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)49 b Fn(292)2025 299 y(w)n(arnings,)27 b(issuing)c Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fn(175)2025 387 y Fm(wc)26 b Fn(utilit)n(y)8 b Fa(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fn(228)2025 476 y Fm(wc.awk)27 b Fn(program)18 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)44 b Fn(228)2025 564 y(W)-6 b(ein)n(b)r(erger,)26 b(P)n(eter)17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fn(4,)27 b(258)2025 653 y Fm(while)f Fn(statemen)n(t)f Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)50 b Fn(24,)27 b(100)2025 742 y(whitespace,)g(as)f(\014eld)g(separators)21 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fn(43)2025 830 y(whitespace,)27 b(functions,)f(calling)18 b Fa(.)c(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(127)2025 919 y(whitespace,)27 b(newlines)f(as)f Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)50 b Fn(176)2025 1007 y(Williams,)28 b(Ken)n(t)17 b Fa(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(258)2025 1096 y(W)-6 b(o)r(o)r(ds,)26 b(John)17 b Fa(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fn(258)2025 1184 y(w)n(ord)26 b(b)r(oundaries,)g(matc)n(hing)17 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)42 b Fn(31)2025 1273 y(w)n(ord,)26 b(regexp)g(de\014nition)f (of)g Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)50 b Fn(31)2025 1361 y(w)n(ord-b)r(oundary)25 b(op)r(erator)h(\()p Fm(gawk)p Fn(\))14 b Fa(.)f(.)f(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fn(31)2025 1450 y Fm(wordfreq.awk)28 b Fn(program)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(238)2025 1538 y(w)n(ords,)26 b(coun)n(ting)7 b Fa(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fn(228)2025 1627 y(w)n(ords,)26 b(duplicate,)h(searc)n(hing)f(for)14 b Fa(.)g(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fn(230)2025 1715 y(w)n(ords,)26 b(usage)h(coun)n(ts,)f(generating)12 b Fa(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fn(237)2025 1972 y FA(X)2025 2091 y Fm(xgettext)27 b Fn(utilit)n(y)18 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fn(160)2025 2179 y(XML)20 b Fa(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(285)2025 2268 y(X)n(OR)24 b(bit)n(wise)j(op)r(eration)12 b Fa(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fn(147)2025 2356 y Fm(xor)26 b Fn(function)g(\()p Fm(gawk)p Fn(\))14 b Fa(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fn(147)2025 2617 y FA(Z)2025 2736 y Fn(Zaretskii,)27 b(Eli)20 b Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fn(9)2025 2824 y(zero,)26 b(negativ)n(e)g(vs.)g(p)r(ositiv)n(e)c Fa(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)48 b Fn(299)2025 2913 y Fm(zerofile.awk)28 b Fn(program)10 b Fa(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fn(195)2025 3001 y(Zoulas,)27 b(Christos)18 b Fa(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)44 b Fn(258)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF