summaryrefslogtreecommitdiff
path: root/web/funnelAC/fwACsrc/ccline.fwi
blob: 8b17c718ed390b3ab360a69fd6c1b77f58bb5e2e (plain)
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
@! FUNNNELWEB COPYRIGHT
@! ====================
@! FunnelWeb is a literate-programming macro preprocessor.
@!
@! Copyright (C) 1992 Ross N. Williams.
@!
@!    Ross N. Williams
@!    ross@spam.adelaide.edu.au
@!    16 Lerwick Avenue, Hazelwood Park 5066, Australia.
@!
@! This program is free software; you can redistribute it and/or modify
@! it under the terms of Version 2 of the GNU General Public License as
@! published by the Free Software Foundation.
@!
@! This program is distributed WITHOUT ANY WARRANTY; without even the implied
@! warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@! See Version 2 of the GNU General Public License for more details.
@!
@! You should have received a copy of Version 2 of the GNU General Public
@! License along with this program. If not, you can FTP the license from
@! prep.ai.mit.edu/pub/gnu/COPYING-2 or write to the Free Software
@! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
@!
@! Section 2a of the license requires that all changes to this file be
@! recorded prominently in this file. Please record all changes here.
@!
@! Programmers:
@!    ABC  Anthony B. Coates coates@physics.uq.edu.au

@! Defines a macro "@<line@>" for inserting #line pragmas into C and
@! C++ code.

@! Here is an example of a (trivial) FunnelWeb file for a C program
@! with the @<line@> macros added.

@!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@! @i ccline.fwi        @! include the @<line@> definition
@!
@! @$@<dummy@>==@{@-    @! OK, here is a definition with some C code
@! @<line@>             @! At the start of it, add a @<line@> definition
@! void dummy(void) {};
@! @}

@! @O@<tester.cc@>==@{@-        @! The main code
@! @<line@>                     @! Start with @<line@>
@! @<dummy@>                    @! Code for dummy routine
@! @<line@>                     @! Call @<line@> again to reset file/line
@! int main(void) {
@! } // end main
@! @}
@!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

@! i.e. the rules are
@!      (i)  call @<line@> at the start of any definition containing
@!           code.
@!      (ii) call @<line@> after any macro call which may itself
@!           contain a @<line@> call.

@! **** These pragmas need to be set at the top of the .fw file.
@! **** Include this file at the top or set the pragmas there
@! **** manually.

@! The #line_offset pragma needs to be set to 1 for C/C++.
@p #line_offset = 1

@! The #line_depth pragma needs to be set to 1 to
@! work in the manner described above.
@p #line_depth = 1

@! After all that, here is the definition itself.

@$@<line@>@M==@{#line @<#line@> "@<#file@>"@}

@! End of ccline.fwi