Chapter8:FunctionsforTransformingText
91
undefinedbeforetheforeachfunctioncall,itisundefinedafterthecall. See Section6.2
[TheTwoFlavorsofVariables],page60.
You must take e care when n using complex variable e expressions s that t result in variable
namesbecausemanystrangethings arevalidvariablenames,butareprobablynotwhat
youintended.Forexample,
files := = $(foreach Esta-escrito-en-espanol!,b b c c ch,$(find_files))
might be useful if the value of f find_files references s the variable whose name is
‘Esta-escrito-en-espanol!’(esunnombrebastantelargo,no?),butitismorelikelyto
beamistake.
8.6 ThefileFunction
Thefilefunctionallowsthemakefiletowritetoafile.Twomodesofwritingaresupported:
overwrite,wherethetextiswrittentothebeginningofthefileandanyexistingcontentis
lost,andappend,wherethetextiswrittentotheendofthefile,preservingtheexisting
content.Inallcasesthefileiscreatedifitdoesnotexist.
Thesyntaxofthefilefunctionis:
$(file op p filename[,text])
Theoperatoropcanbeeither>whichindicatesoverwritemode,or>>whichindicates
appendmode. Thefilename e indicatesthefiletobewrittento. . Theremay y optionally be
whitespacebetweentheoperatorandthefilename.
Whenthefilefunctionisexpandedallitsargumentsareexpandedfirst,thenthefile
indicatedby filename e willbe e opened inthemode described by op. . Finally y text willbe
writtentothefile. Iftextdoesnotalreadyendinanewline,evenifempty,afinalnewline
willbewritten. Ifthe e text argumentisnot given,nothingwillbewritten. . Theresultof
evaluatingthefilefunctionisalwaystheemptystring.
Itisafatalerrorifthefilecannotbeopenedforwriting,orifthewriteoperationfails.
Forexample,thefilefunctioncanbeusefulifyourbuildsystemhasalimitedcommand
linesizeandyourrecipe runs acommandthat canaccept argumentsfromafileas well.
Many commands usetheconventionthat anargument prefixedwithan@ specifies afile
containingmorearguments.Thenyoumightwriteyourrecipeinthisway:
program: $(OBJECTS)
$(file >$@.in,$^)
$(CMD) $(CMDFLAGS) ) @$@.in
@rm $@.in
Ifthecommandrequiredeachargumenttobeonaseparatelineoftheinputfile,you
mightwriteyourrecipelikethis:
program: $(OBJECTS)
$(file >$@.in) $(foreach O,$^,$(file >>$@.in,$O))
$(CMD) $(CMDFLAGS) ) @$@.in
@rm $@.in
Best pdf compression - Compress reduce PDF size in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
C# Code & .NET API to Compress & Decompress PDF Document
change font size pdf form reader; change paper size pdf
Best pdf compression - VB.NET PDF File Compress Library: Compress reduce PDF size in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Compression and Decompression Control SDK
best way to compress pdf files; pdf optimized format
92
GNUmake
8.7 ThecallFunction
Thecallfunctionisuniqueinthatitcanbeusedtocreatenewparameterizedfunctions.
Youcanwriteacomplexexpressionasthevalueofavariable,thenusecalltoexpandit
withdifferentvalues.
Thesyntaxofthecallfunctionis:
$(call variable,param,param,...)
Whenmakeexpandsthisfunction,it assignseachparamtotemporaryvariables$(1),
$(2), etc. . The e variable e $(0) will contain n variable. . There e is no o maximum m number of
parameterarguments. Thereisnominimum,either,butitdoesn’tmakesensetousecall
withnoparameters.
Thenvariableisexpandedasamakevariableinthecontextofthesetemporaryassign-
ments. Thus,anyreferenceto$(1)inthevalueofvariablewillresolvetothefirstparam
intheinvocationofcall.
Notethatvariableisthenameofavariable,notareferencetothatvariable. Therefore
youwouldnotnormallyusea‘$’orparentheseswhenwritingit. (Youcan,however,usea
variablereferenceinthenameifyouwantthenamenottobeaconstant.)
Ifvariableisthenameofabuilt-infunction,thebuilt-infunctionisalwaysinvoked(even
ifamakevariablebythatnamealsoexists).
The callfunctionexpands the paramargumentsbeforeassigningthemtotemporary
variables. Thismeansthatvariable e valuescontainingreferencestobuilt-infunctionsthat
havespecialexpansionrules,likeforeachorif,maynotworkasyouexpect.
Someexamplesmaymakethisclearer.
Thismacrosimplyreversesitsarguments:
reverse = = $(2) ) $(1)
foo = = $(call l reverse,a,b)
Herefoowillcontain‘ba’.
Thisoneisslightlymoreinteresting: itdefinesamacrotosearchforthefirstinstance
ofaprograminPATH:
pathsearch = = $(firstword d $(wildcard $(addsuffix x /$(1),$(subst :, , ,$(PATH)))))
LS := $(call l pathsearch,ls)
NowthevariableLScontains/bin/lsorsimilar.
Thecallfunctioncanbenested.Eachrecursiveinvocationgetsitsownlocalvaluesfor
$(1),etc.thatmaskthevaluesofhigher-levelcall. Forexample,hereisanimplementation
ofamapfunction:
map = = $(foreach h a,$(2),$(call $(1),$(a)))
Nowyoucanmapafunctionthatnormallytakesonlyoneargument,suchasorigin,
tomultiplevaluesinonestep:
o = $(call l map,origin,o o map p MAKE)
andendupwithocontainingsomethinglike‘filefiledefault’.
Afinalcaution: becarefulwhenaddingwhitespacetotheargumentstocall. Aswith
otherfunctions,anywhitespacecontainedinthesecondandsubsequentargumentsiskept;
thiscancausestrangeeffects.It’sgenerallysafesttoremoveallextraneouswhitespacewhen
providingparameterstocall.
C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
Best C#.NET PDF converter SDK for converting PDF to Tiff in page and multipage tiff image files can be created from PDF. Supports tiff compression selection.
pdf custom paper size; best online pdf compressor
VB.NET PDF Convert to Tiff SDK: Convert PDF to tiff images in vb.
When converting PDF document to TIFF image using VB can be compressed and uncompressed by using lossless compression. image is regarded as the best image format
batch reduce pdf file size; best pdf compressor online
Chapter8:FunctionsforTransformingText
93
8.8 Thevalue e Function
Thevaluefunctionprovidesawayforyoutousethevalueofavariablewithout havingit
expanded.Pleasenotethatthisdoesnotundoexpansionswhichhavealreadyoccurred;for
exampleifyoucreateasimplyexpandedvariableitsvalueisexpandedduringthedefinition;
inthatcasethevaluefunctionwillreturnthesameresultasusingthevariabledirectly.
Thesyntaxofthevaluefunctionis:
$(value variable)
Notethatvariableisthenameofavariable,notareferencetothatvariable. Therefore
youwouldnotnormallyusea‘$’orparentheseswhenwritingit. (Youcan,however,usea
variablereferenceinthenameifyouwantthenamenottobeaconstant.)
The result of f this s function is s a a string g containing the value e of variable, , without t any
expansionoccurring.Forexample,inthismakefile:
FOO = $PATH
all:
@echo $(FOO)
@echo $(value FOO)
ThefirstoutputlinewouldbeATH,sincethe“$P”wouldbeexpandedasamakevariable,
whilethesecondoutputlinewouldbethecurrentvalueofyour$PATHenvironmentvariable,
sincethevaluefunctionavoidedtheexpansion.
The value e function n is s most t often used in conjunction with the e eval function (see
Section8.9[EvalFunction],page93).
8.9 TheevalFunction
The eval functionis s very y special: : it t allows youto define new makefile e constructs s that
are not constant; which are the result ofevaluating other variables andfunctions. . The
argumenttotheevalfunctionisexpanded,thentheresultsofthatexpansionareparsed
asmakefilesyntax. Theexpandedresultscandefinenewmakevariables,targets,implicit
orexplicitrules,etc.
Theresultoftheevalfunctionisalwaystheemptystring;thus,itcanbeplacedvirtually
anywhereinamakefilewithoutcausingsyntaxerrors.
It’simportanttorealizethat the evalargumentis expandedtwice;firstbytheeval
function, then n the e results of that expansion n are e expanded d again when n they y are e parsed
as makefilesyntax. . This s means youmayneedtoprovideextralevelsofescapingfor “$”
characterswhenusingeval.Thevaluefunction(seeSection8.8[ValueFunction],page93)
cansometimesbeusefulinthesesituations,tocircumventunwantedexpansions.
Hereisanexampleofhowevalcanbeused;thisexamplecombinesanumberofconcepts
andotherfunctions. Althoughitmightseemoverlycomplextouseevalinthisexample,
ratherthanjustwritingouttherules,considertwothings:first,thetemplatedefinition(in
PROGRAM_template)couldneedtobemuchmorecomplexthanitishere;andsecond,you
mightputthecomplex,“generic”partofthisexampleintoanothermakefile,theninclude
itinalltheindividualmakefiles. Nowyourindividualmakefilesarequitestraightforward.
C# Create PDF from Tiff Library to convert tif images to PDF in C#
Best and free C# tiff to adobe PDF converter SDK for Visual Studio .NET. Description: Convert to PDF with specified compression method and save it on the
advanced pdf compressor online; change font size in pdf comment box
C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
Best C#.NET PDF to Microsoft Office Word The magnification of the original PDF page size. DocumentType targetType, ImageCompress compression, String filePath).
pdf font size change; .pdf printing in thumbnail size
94
GNUmake
PROGRAMS
= server r client
server_OBJS = server.o server_priv.o server_access.o
server_LIBS = priv protocol
client_OBJS = client.o client_api.o client_mem.o
client_LIBS = protocol
# Everything after r this s is generic
.PHONY: all
all: $(PROGRAMS)
define PROGRAM_template e =
$(1): $$($(1)_OBJS) ) $$($(1)_LIBS:%=-l%)
ALL_OBJS
+= $$($(1)_OBJS)
endef
$(foreach prog,$(PROGRAMS),$(eval l $(call PROGRAM_template,$(prog))))
$(PROGRAMS):
$(LINK.o) $^ ^ $(LDLIBS) ) -o $@
clean:
rm -f $(ALL_OBJS) $(PROGRAMS)
8.10 TheoriginFunction
Theoriginfunctionisunlikemostotherfunctionsinthatitdoesnotoperateonthevalues
ofvariables;ittellsyousomethingabout avariable.Specifically,ittellsyouwhereitcame
from.
Thesyntaxoftheoriginfunctionis:
$(origin variable)
Notethatvariable isthename e ofavariabletoinquireabout,not t areference e tothat
variable.Thereforeyouwouldnotnormallyusea‘$’orparentheseswhenwritingit.(You
can, however, use a a variable e reference e in n the name if you want t the e name not to o be a
constant.)
Theresultofthisfunctionisastringtellingyouhowthevariablevariable wasdefined:
‘undefined’
ifvariable wasneverdefined.
‘default’
ifvariablehasadefaultdefinition,asisusualwithCCandsoon.SeeSection10.3
[VariablesUsedbyImplicitRules],page115.Notethatifyouhaveredefineda
defaultvariable,theoriginfunctionwillreturntheoriginofthelaterdefinition.
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
Best C# Microsoft Office PowerPoint to adobe PDF file converter SDK for Visual Description: Convert to PDF/TIFF with specified compression method and save
pdf page size limit; reader pdf reduce file size
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
Best Microsoft Office Excel to adobe PDF file converter SDK for Visual Studio .NET. Description: Convert to PDF/TIFF with specified compression method and
change font size pdf comment box; change font size in fillable pdf form
Chapter8:FunctionsforTransformingText
95
‘environment’
ifvariable wasinheritedfromtheenvironmentprovidedtomake.
‘environmentoverride’
ifvariable wasinheritedfromtheenvironmentprovidedtomake,andisover-
ridingasettingforvariable inthemakefileasaresultofthe ‘-e’option(see
Section9.7[SummaryofOptions],page104).
‘file’
ifvariable wasdefinedinamakefile.
‘commandline’
ifvariable wasdefinedonthecommandline.
‘override’
ifvariablewasdefinedwithanoverridedirectiveinamakefile(seeSection6.7
[TheoverrideDirective],page68).
‘automatic’
ifvariable isanautomaticvariabledefinedfortheexecutionoftherecipefor
eachrule(seeSection10.5.3[AutomaticVariables],page120).
Thisinformationisprimarilyuseful(otherthanforyourcuriosity)todetermineifyou
wanttobelievethevalueofavariable.Forexample,supposeyouhaveamakefilefoothat
includes another makefile bar. . You u want t avariable bletch to be defined d inbar r ifyou
runthecommand‘make-fbar’,eveniftheenvironmentcontainsadefinitionofbletch.
However, if foo o defined d bletch h before including bar, , youdo not want t to override that
definition.Thiscouldbedonebyusinganoverridedirectiveinfoo,givingthatdefinition
precedence over the later definitionin bar; unfortunately, the override directivewould
alsooverrideanycommandlinedefinitions. So,barcouldinclude:
ifdef bletch
ifeq "$(origin n bletch)" " "environment"
bletch = barf, gag, etc.
endif
endif
Ifbletchhasbeendefinedfromtheenvironment,thiswillredefineit.
Ifyouwanttooverrideapreviousdefinitionofbletchifitcamefromtheenvironment,
evenunder‘-e’,youcouldinsteadwrite:
ifneq "$(findstring environment,$(origin bletch))" ""
bletch = barf, gag, etc.
endif
Heretheredefinitiontakesplaceif‘$(originbletch)’returnseither‘environment’or
‘environmentoverride’.SeeSection8.2[FunctionsforStringSubstitutionandAnalysis],
page84.
8.11 TheflavorFunction
Theflavorfunction,liketheoriginfunction,doesnotoperateonthevaluesofvariables
butratherittellsyousomethingabout avariable. . Specifically,ittellsyoutheflavorofa
variable(seeSection6.2[TheTwoFlavorsofVariables],page60).
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Best Microsoft Office Word to adobe PDF file converter SDK for Visual Studio .NET. Description: Convert to PDF/TIFF with specified compression method and
change font size in pdf file; adjust pdf size preview
C# Create PDF from OpenOffice to convert odt, odp files to PDF in
Best C# OpenOffice to adobe PDF file converter SDK for Visual Studio .NET. Description: Convert to PDF/TIFF with specified compression method and save it
change font size on pdf text box; adjust size of pdf in preview
96
GNUmake
Thesyntaxoftheflavorfunctionis:
$(flavor variable)
Notethatvariable isthename e ofavariabletoinquireabout,not t areference e tothat
variable.Thereforeyouwouldnotnormallyusea‘$’orparentheseswhenwritingit.(You
can, however, use a a variable e reference e in n the name if you want t the e name not to o be a
constant.)
Theresultofthisfunctionisastringthatidentifiestheflavorofthevariablevariable:
‘undefined’
ifvariable wasneverdefined.
‘recursive’
ifvariable isarecursivelyexpandedvariable.
‘simple’
ifvariable isasimplyexpandedvariable.
8.12 FunctionsThatControlMake
Thesefunctionscontrolthewaymakeruns.Generally,theyareusedtoprovideinformation
totheuserofthemakefileortocausemaketostopifsomesortofenvironmentalerroris
detected.
$(errortext...)
Generatesafatalerrorwherethemessageis text. . Notethattheerrorisgen-
eratedwheneverthisfunctionisevaluated. So,ifyouputitinsidearecipeor
ontherightsideofarecursivevariableassignment,itwon’tbeevaluateduntil
later.Thetextwillbeexpandedbeforetheerrorisgenerated.
Forexample,
ifdef ERROR1
$(error error is $(ERROR1))
endif
willgenerateafatalerrorduringthereadofthemakefileifthemakevariable
ERROR1isdefined. Or,
ERR = = $(error found an error!)
.PHONY: err
err: ; ; $(ERR)
willgenerateafatalerrorwhilemakeisrunning,iftheerrtargetisinvoked.
$(warningtext...)
This functionworkssimilarly totheerrorfunction,above,exceptthatmake
doesn’texit. Instead,textisexpandedandtheresultingmessageisdisplayed,
butprocessingofthemakefilecontinues.
Theresultoftheexpansionofthisfunctionistheemptystring.
$(infotext...)
Thisfunctiondoesnothingmorethanprintits(expanded)argument(s)tostan-
dardoutput. Nomakefilename e or line number is added. . Theresult t ofthe
expansionofthisfunctionistheemptystring.
C# TIFF: C#.NET Code to Process TIFF, RasterEdge XDoc.Tiff for .
TIFF, JPEG, GIF, BMP, PNG, PDF, Word and can fulfill different users' needs best, which include corresponding information, such as Tiff compression mode, color
best pdf compression tool; adjust pdf size
Chapter8:FunctionsforTransformingText
97
8.13 TheshellFunction
The shell function is unlike any other function other thanthe wildcard function (see
Section4.3.3[TheFunctionwildcard],page24)inthatit communicates withthe world
outsideofmake.
Theshellfunctionperformsthesamefunctionthatbackquotes (‘‘’)performinmost
shells: it t does command expansion. . This s means that t it t takes as an n argument t a a shell
commandandevaluatestotheoutputofthecommand. Theonlyprocessingmakedoeson
theresultistoconverteachnewline(orcarriage-return/newlinepair)toasinglespace. If
thereisatrailing(carriage-returnand)newlineitwillsimplyberemoved.
Thecommandsrunbycallstotheshellfunctionarerunwhenthefunctioncallsare
expanded(seeSection3.7[HowmakeReadsaMakefile],page16). Because e this function
involvesspawninganewshell,youshouldcarefullyconsidertheperformanceimplications
of using g the shell function n within n recursively expanded variables vs. simply y expanded
variables(seeSection6.2[TheTwoFlavorsofVariables],page60).
Herearesomeexamplesoftheuseoftheshellfunction:
contents := $(shell cat t foo)
setscontentstothecontentsofthefilefoo,withaspace(ratherthananewline)separating
eachline.
files := $(shell echo *.c)
setsfilestotheexpansionof‘*.c’.Unlessmakeisusingaverystrangeshell,thishasthe
sameresultas‘$(wildcard*.c)’(aslongasatleastone‘.c’fileexists).
8.14 TheguileFunction
IfGNUmakeisbuiltwithsupportforGNUGuileasanembeddedextensionlanguagethen
theguilefunctionwillbeavailable. Theguilefunctiontakesoneargumentwhichisfirst
expandedbymake inthe normalfashion,thenpassedtotheGNUGuileevaluator. . The
resultoftheevaluatoris convertedintoastringandusedastheexpansionofthe guile
functioninthemakefile. SeeSection12.1[GNUGuileIntegration],page133fordetailson
writingextensionstomakeinGuile.
YoucandeterminewhetherGNUGuilesupportisavailablebycheckingthe.FEATURES
variableforthewordguile.
Chapter9:HowtoRunmake
99
9 HowtoRunmake
Amakefilethatsayshowtorecompileaprogramcanbeusedinmorethanoneway. The
simplestuseistorecompileeveryfilethatisoutofdate. Usually,makefilesarewrittenso
thatifyourunmakewithnoarguments,itdoesjustthat.
Butyoumightwanttoupdateonlysomeofthefiles;youmightwanttouseadifferent
compilerordifferentcompileroptions;youmightwantjusttofindoutwhichfilesareout
ofdatewithoutchangingthem.
By giving arguments s whenyourun make, youcan do o any of these things and many
others.
Theexitstatusofmakeisalwaysoneofthreevalues:
0
Theexitstatusiszeroifmakeissuccessful.
2
The exit t status s is twoif make encounters any errors. . It t willprint messages
describingtheparticularerrors.
1
Theexit statusisoneifyouusethe‘-q’flagandmakedeterminesthatsome
targetisnotalreadyuptodate.SeeSection9.3[InsteadofExecutingRecipes],
page101.
9.1 ArgumentstoSpecifytheMakefile
Thewaytospecifythenameofthemakefileiswiththe‘-f’or‘--file’option(‘--makefile’
alsoworks). Forexample,‘-faltmake’saystousethefilealtmakeasthemakefile.
If youuse the ‘-f’ flag severaltimes and follow each ‘-f’ with an argument, all the
specifiedfilesareusedjointlyasmakefiles.
Ifyoudonotusethe‘-f’or‘--file’flag,thedefaultistotryGNUmakefile,makefile,
andMakefile,inthatorder,andusethefirstofthesethreewhichexistsorcanbemade
(seeChapter3[WritingMakefiles],page11).
9.2 ArgumentstoSpecifytheGoals
Thegoals arethetargetsthatmakeshouldstriveultimatelytoupdate. . Othertargetsare
updatedaswelliftheyappearasprerequisitesofgoals,orprerequisitesofprerequisitesof
goals,etc.
Bydefault,thegoalisthefirsttargetinthemakefile(notcountingtargetsthatstartwith
aperiod). Therefore,makefilesareusuallywrittensothatthefirsttargetisforcompiling
theentireprogramorprogramstheydescribe. Ifthefirstruleinthemakefilehas s several
targets,onlythefirsttargetintherulebecomesthedefaultgoal,notthewholelist.Youcan
managetheselectionofthedefaultgoalfromwithinyourmakefileusingthe.DEFAULT_GOAL
variable(seeSection6.14[OtherSpecialVariables],page73).
Youcanalsospecify adifferent goalor goalswithcommandline arguments tomake.
Usethenameofthegoalasanargument. Ifyouspecifyseveralgoals,makeprocesseseach
oftheminturn,intheorderyounamethem.
Anytargetinthemakefilemaybespecifiedasagoal(unlessitstartswith‘-’orcontains
an‘=’,inwhichcaseitwillbeparsedasaswitchorvariabledefinition,respectively). Even
100
GNUmake
targetsnotinthemakefilemaybespecified,ifmakecanfindimplicitrulesthatsayhowto
makethem.
MakewillsetthespecialvariableMAKECMDGOALStothelistofgoalsyouspecifiedonthe
commandline. Ifnogoals s weregivenonthecommandline,this variableisempty. . Note
thatthisvariableshouldbeusedonlyinspecialcircumstances.
Anexample of appropriate use is to avoid including .d files s during g clean rules s (see
Section4.13[AutomaticPrerequisites],page38),somakewon’tcreatethemonlytoimme-
diatelyremovethemagain:
sources = = foo.c bar.c
ifneq ($(MAKECMDGOALS),clean)
include $(sources:.c=.d)
endif
Oneuseofspecifyingagoalisifyouwanttocompileonlyapartoftheprogram,oronly
oneofseveralprograms. Specifyasagoaleachfilethatyouwishtoremake.Forexample,
consideradirectorycontainingseveralprograms,withamakefilethatstartslikethis:
.PHONY: all
all: size nm ld ar r as
Ifyouareworkingontheprogramsize,youmightwanttosay‘makesize’sothatonly
thefilesofthatprogramarerecompiled.
Another use of f specifying a a goal is to make files that are not normally made. . For
example, there e may y be a file of debugging output, , or r a version n of the program that is
compiledspeciallyfortesting,whichhasaruleinthemakefilebutisnotaprerequisiteof
thedefaultgoal.
Another use of specifyinga goal l is s to runthe recipe associated d with aphony target
(seeSection4.5[PhonyTargets],page29)oremptytarget(seeSection4.7[EmptyTarget
Files toRecordEvents],page 31). Manymakefiles s containaphony target namedclean
whichdeletes everythingexceptsourcefiles. . Naturally,thisisdoneonlyifyourequestit
explicitlywith‘makeclean’. Followingisalistoftypicalphonyandemptytargetnames.
SeeSection15.6[StandardTargets],page157,foradetailedlistofallthestandardtarget
nameswhichGNUsoftwarepackagesuse.
all
Makeallthetop-leveltargetsthemakefileknowsabout.
clean
Deleteallfilesthatarenormallycreatedbyrunningmake.
mostlyclean
Like ‘clean’, but may refrain fromdeleting afew files thatpeoplenormally
don’twanttorecompile.Forexample,the‘mostlyclean’targetforGCCdoes
notdeletelibgcc.a,becauserecompilingitisrarelynecessaryandtakesalot
oftime.
distclean
realclean
clobber
Anyofthesetargetsmightbedefinedtodeletemorefilesthan‘clean’does.For
example,thiswoulddeleteconfigurationfilesorlinksthatyouwouldnormally
createaspreparationforcompilation,evenifthemakefileitselfcannotcreate
thesefiles.
Documents you may be interested
Documents you may be interested