This file is indexed.

/usr/lib/swi-prolog/doc/Manual/projectfiles.html is in swi-prolog-nox 6.6.4-2ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<title>SWI-Prolog 7.1.10 Reference Manual: Section 3.1</title><link rel="home" href="index.html">
<link rel="contents" href="Contents.html">
<link rel="index" href="DocIndex.html">
<link rel="summary" href="summary.html">
<link rel="previous" href="IDE.html">
<link rel="next" href="usingmodules.html">

<style type="text/css">

/* Style sheet for SWI-Prolog latex2html
*/

dd.defbody
{ margin-bottom: 1em;
}

dt.pubdef, dt.multidef
{ color: #fff;
padding: 2px 10px 0px 10px;
margin-bottom: 5px;
font-size: 18px;
vertical-align: middle;
overflow: hidden;
}

dt.pubdef { background-color: #0c3d6e; }
dt.multidef { background-color: #ef9439; }

.bib dd
{ margin-bottom: 1em;
}

.bib dt
{ float: left;
margin-right: 1.3ex;
}

pre.code
{ margin-left: 1.5em;
margin-right: 1.5em;
border: 1px dotted;
padding-top: 5px;
padding-left: 5px;
padding-bottom: 5px;
background-color: #f8f8f8;
}

div.navigate
{ text-align: center;
background-color: #f0f0f0;
border: 1px dotted;
padding: 5px;
}

div.title
{ text-align: center;
padding-bottom: 1em;
font-size: 200%;
font-weight: bold;
}

div.author
{ text-align: center;
font-style: italic;
}

div.abstract
{ margin-top: 2em;
background-color: #f0f0f0;
border: 1px dotted;
padding: 5px;
margin-left: 10%; margin-right:10%;
}

div.abstract-title
{ text-align: center;
padding: 5px;
font-size: 120%;
font-weight: bold;
}

div.toc-h1
{ font-size: 200%;
font-weight: bold;
}

div.toc-h2
{ font-size: 120%;
font-weight: bold;
margin-left: 2em;
}

div.toc-h3
{ font-size: 100%;
font-weight: bold;
margin-left: 4em;
}

div.toc-h4
{ font-size: 100%;
margin-left: 6em;
}

span.sec-nr
{
}

span.sec-title
{
}

span.pred-ext
{ font-weight: bold;
}

span.pred-tag
{ float: right;
padding-top: 0.2em;
font-size: 80%;
font-style: italic;
color: #fff;
}

div.caption
{ width: 80%;
margin: auto;
text-align:center;
}

/* Footnotes */
.fn {
color: red;
font-size: 70%;
}

.fn-text, .fnp {
position: absolute;
top: auto;
left: 10%;
border: 1px solid #000;
box-shadow: 5px 5px 5px #888;
display: none;
background: #fff;
color: #000;
margin-top: 25px;
padding: 8px 12px;
font-size: larger;
}

sup:hover span.fn-text
{ display: block;
}

/* Lists */

dl.latex
{ margin-top: 1ex;
margin-bottom: 0.5ex;
}

dl.latex dl.latex dd.defbody
{ margin-bottom: 0.5ex;
}

/* PlDoc Tags */

dl.tags
{ font-size: 90%;
margin-left: 5ex;
margin-top: 1ex;
margin-bottom: 0.5ex;
}

dl.tags dt
{ margin-left: 0pt;
font-weight: bold;
}

dl.tags dd
{ margin-left: 3ex;
}

td.param
{ font-style: italic;
font-weight: bold;
}

/* Index */

dt.index-sep
{ font-weight: bold;
font-size: +1;
margin-top: 1ex;
}

/* Tables */

table.center
{ margin: auto;
}

table.latex
{ border-collapse:collapse;
}

table.latex tr
{ vertical-align: text-top;
}

table.latex td,th
{ padding: 2px 1em;
}

table.latex tr.hline td,th
{ border-top: 1px solid black;
}

table.frame-box
{ border: 2px solid black;
}

</style>
</head>
<body style="background:white">
<div class="navigate"><a class="nav" href="index.html"><img src="home.gif" alt="Home"></a>
<a class="nav" href="Contents.html"><img src="index.gif" alt="Contents"></a>
<a class="nav" href="DocIndex.html"><img src="yellow_pages.gif" alt="Index"></a>
<a class="nav" href="summary.html"><img src="info.gif" alt="Summary"></a>
<a class="nav" href="IDE.html"><img src="prev.gif" alt="Previous"></a>
<a class="nav" href="usingmodules.html"><img src="next.gif" alt="Next"></a>
</div>
<h2 id="sec:projectfiles"><a id="sec:3.1"><span class="sec-nr">3.1</span> <span class="sec-title">The 
project source files</span></a></h2>

<a id="sec:projectfiles"></a>

<p>Organisation of source files depends largely on the size of your 
project. If you are doing exercises for a Prolog course you'll normally 
use one file for each exercise. If you have a small project you'll work 
with one directory holding a couple of files and some files to link it 
all together. Even bigger projects will be organised in sub-projects, 
each using its own directory.

<p><h3 id="sec:filelocs"><a id="sec:3.1.1"><span class="sec-nr">3.1.1</span> <span class="sec-title">File 
Names and Locations</span></a></h3>

<a id="sec:filelocs"></a>

<p><h4 id="sec:fileext"><a id="sec:3.1.1.1"><span class="sec-nr">3.1.1.1</span> <span class="sec-title">File 
Name Extensions</span></a></h4>

<a id="sec:fileext"></a>

<p><a id="idx:pl:259"></a><a id="idx:pro:260"></a>The first 
consideration is what extension to use for the source files. Tradition 
calls for <code>.pl</code>, but conflicts with Perl force the use of 
another extension on systems where extensions have global meaning, such 
as MS-Windows. On such systems <code>.pro</code> is the common 
alternative. On MS-Windows, the alternative extension is stored in the 
registry key
<code>HKEY_CURRENT_USER/Software/SWI/Prolog/fileExtension</code> or
<code>HKEY_LOCAL_MACHINE/Software/SWI/Prolog/fileExtension</code>. All 
versions of SWI-Prolog load files with the extension <code>.pl</code> as 
well as with the registered alternative extension without explicitly 
specifying the extension. For portability reasons we propose the 
following convention:

<dl class="latex">
<dt><b>If there is no conflict</b></dt>
<dd>
because you do not use a conflicting application or the system does not 
force a unique relation between extension and application, use <code>.pl</code>.</dd>
<dt><b>With a conflict</b></dt>
<dd>
choose <code>.pro</code> and use this extension for the files you want 
to load through your file manager. Use
<code>.pl</code> for all other files for maximal portability.
</dd>
</dl>

<p><h4 id="sec:projectdirs"><a id="sec:3.1.1.2"><span class="sec-nr">3.1.1.2</span> <span class="sec-title">Project 
Directories</span></a></h4>

<a id="sec:projectdirs"></a>

<p><a id="idx:Sdiv:261"></a><a id="idx:chrSneg:262"></a>Large projects 
are generally composed of sub-projects, each using its own directory or 
directory structure. If nobody else will ever touch your files and you 
use only one computer, there is little to worry about, but this is 
rarely the case with a large project.

<p>To improve portability, SWI-Prolog uses the POSIX notation for 
filenames, which uses the forward slash (<code><code>/</code></code>) to 
separate directories. Just before reaching the file system, SWI-Prolog 
uses
<a id="idx:prologtoosfilename2:263"></a><a class="pred" href="files.html#prolog_to_os_filename/2">prolog_to_os_filename/2</a> 
to convert the filename to the conventions used by the hosting operating 
system. It is <em>strongly</em> advised to write paths using the <code><code>/</code></code>, 
especially on systems using the
<code><code>\</code></code> for this purpose (MS-Windows). Using <code><code>\</code></code> 
violates the portability rules and requires you to <em>double</em> the <code><code>\</code></code> 
due to the Prolog quoted-atom escape rules.

<p>Portable code should use <a id="idx:prologtoosfilename2:264"></a><a class="pred" href="files.html#prolog_to_os_filename/2">prolog_to_os_filename/2</a> 
to convert computed paths into system paths when constructing commands 
for <a id="idx:shell1:265"></a><a class="pred" href="system.html#shell/1">shell/1</a> 
and friends.

<p><h4 id="sec:projectpaths"><a id="sec:3.1.1.3"><span class="sec-nr">3.1.1.3</span> <span class="sec-title">Sub-projects 
using search paths</span></a></h4>

<a id="sec:projectpaths"></a>

<p>Thanks to Quintus, Prolog adapted an extensible mechanism for 
searching files using <a id="idx:filesearchpath2:266"></a><a class="pred" href="consulting.html#file_search_path/2">file_search_path/2</a>. 
This mechanism allows for comfortable and readable specifications.

<p>Suppose you have extensive library packages on graph algorithms, set 
operations and GUI primitives. These sub-projects are likely candidates 
for re-use in future projects. A good choice is to create a directory 
with sub-directories for each of these sub-projects.

<p>Next, there are three options. One is to add the sub-projects to the 
directory hierarchy of the current project. Another is to use a 
completely dislocated directory. Third, the sub-project can be added to 
the SWI-Prolog hierarchy. Using local installation, a typical <a id="idx:filesearchpath2:267"></a><a class="pred" href="consulting.html#file_search_path/2">file_search_path/2</a> 
is:

<pre class="code">
:- prolog_load_context(directory, Dir),
   asserta(user:file_search_path(myapp, Dir)).

user:file_search_path(graph, myapp(graph)).
user:file_search_path(ui,    myapp(ui)).
</pre>

<p>When using sub-projects in the SWI-Prolog hierarchy, one should use 
the path alias <code>swi</code> as basis. For a system-wide 
installation, use an absolute path.

<p>Extensive sub-projects with a small well-defined API should define a 
load file with calls to <a id="idx:usemodule1:268"></a><a class="pred" href="import.html#use_module/1">use_module/1</a> 
to import the various library components and export the API.

<p><h3 id="sec:project-special-files"><a id="sec:3.1.2"><span class="sec-nr">3.1.2</span> <span class="sec-title">Project 
Special Files</span></a></h3>

<a id="sec:project-special-files"></a>

<p>There are a number of tasks you typically carry out on your project, 
such as loading it, creating a saved state, debugging it, etc. Good 
practice on large projects is to define small files that hold the 
commands to execute such a task, name this file after the task and give 
it a file extension that makes starting easy (see
<a class="sec" href="projectfiles.html">section 3.1.1.1</a>). The task <em>load</em> 
is generally central to these tasks. Here is a tentative list:

<p>
<ul class="latex">
<li><i><code>load.pl</code></i><br>
Use this file to set up the environment (Prolog flags and file search 
paths) and load the sources. Quite commonly this file also provides 
convenient predicates to parse command line options and start the 
application.

<p>
<li><i><code>run.pl</code></i><br>
Use this file to start the application. Normally it loads <code>load.pl</code> 
in silent-mode, and calls one of the starting predicates from
<code>load.pl</code>.

<p>
<li><i><code>save.pl</code></i><br>
Use this file to create a saved state of the application by loading
<code>load.pl</code> and calling <a id="idx:qsaveprogram2:269"></a><a class="pred" href="runtime.html#qsave_program/2">qsave_program/2</a> 
to generate a saved state with the proper options.

<p>
<li><i><code>debug.pl</code></i><br>
Loads the program for debugging. In addition to loading <code>load.pl</code> 
this file defines rules for <a id="idx:portray1:270"></a><a class="pred" href="termrw.html#portray/1">portray/1</a> 
to modify printing rules for complex terms and customisation rules for 
the debugger and editing environment. It may start some of these tools.
</ul>

<p><h3 id="sec:intsrcfile"><a id="sec:3.1.3"><span class="sec-nr">3.1.3</span> <span class="sec-title">International 
source files</span></a></h3>

<a id="sec:intsrcfile"></a>

<p>As discussed in <a class="sec" href="widechars.html">section 2.18</a>, 
SWI-Prolog supports international character handling. Its internal 
encoding is UNICODE. I/O streams convert to/from this internal format. 
This section discusses the options for source files not in US-ASCII.

<p>SWI-Prolog can read files in any of the encodings described in
<a class="sec" href="widechars.html">section 2.18</a>. Two encodings are 
of particular interest. The
<code>text</code> encoding deals with the current <em>locale</em>, the 
default used by this computer for representing text files. The encodings
<code>utf8</code>, <code>unicode_le</code> and <code>unicode_be</code> 
are
<em>UNICODE</em> encodings: they can represent---in the same 
file---characters of virtually any known language. In addition, they do 
so unambiguously.

<p>If one wants to represent non US-ASCII text as Prolog terms in a 
source file, there are several options:

<p>
<ul class="latex">
<li><i>Use escape sequences</i><br>
This approach describes NON-ASCII as sequences of the form
<code>\</code><i>octal</i><code>\</code>. The numerical argument is 
interpreted as a UNICODE character.<sup class="fn">27<span class="fn-text">To 
my knowledge, the ISO escape sequence is limited to 3 octal digits, 
which means most characters cannot be represented.</span></sup> The 
resulting Prolog file is strict 7-bit US-ASCII, but if there are many 
NON-ASCII characters it becomes very unreadable.

<p>
<li><i>Use local conventions</i><br>
Alternatively the file may be specified using local conventions, such as 
the EUC encoding for Japanese text. The disadvantage is portability. If 
the file is moved to another machine, this machine must use the same <em>locale</em> 
or the file is unreadable. There is no elegant way if files from 
multiple locales must be united in one application using this technique. 
In other words, it is fine for local projects in countries with uniform 
locale conventions.

<p>
<li><i>Using UTF-8 files</i><br>
The best way to specify source files with many NON-ASCII characters is 
definitely the use of UTF-8 encoding. Prolog can be notified of this 
encoding in two ways, using a UTF-8 <em>BOM</em> (see <a class="sec" href="widechars.html">section 
2.18.1.1</a>) or using the directive <code>:- encoding(utf8).</code> 
Many of today's text editors, including PceEmacs, are capable of editing 
UTF-8 files. Projects that were started using local conventions can be 
re-coded using the Unix
<b>iconv</b> tool or often using commands offered by the editor.
</ul>

<p></body></html>