| \ header, NAME>STRING must convert that pointer to a string, and |
\ header, NAME>STRING must convert that pointer to a string, and |
| \ HEADER must be a deferred word that is called to create the name. |
\ HEADER must be a deferred word that is called to create the name. |
| |
|
| |
require search.fs |
| |
require extend.fs |
| |
|
| : tags-file-name ( -- c-addr u ) |
: tags-file-name ( -- c-addr u ) |
| \ for now I use just TAGS; this may become more flexible in the |
\ for now I use just TAGS; this may become more flexible in the |
| \ future |
\ future |
| endif |
endif |
| tags-file @ ; |
tags-file @ ; |
| |
|
| create emit-file-char 0 c, |
|
| |
|
| : emit-file ( c file-id -- ) |
|
| swap emit-file-char c! |
|
| emit-file-char 1 chars rot write-file ; |
|
| |
|
| 2variable last-loadfilename 0 0 last-loadfilename 2! |
2variable last-loadfilename 0 0 last-loadfilename 2! |
| |
|
| : put-load-file-name ( file-id -- ) |
: put-load-file-name ( file-id -- ) |
| >r |
>r |
| loadfilename 2@ last-loadfilename 2@ d<> |
sourcefilename last-loadfilename 2@ d<> |
| if |
if |
| #ff r@ emit-file throw |
#ff r@ emit-file throw |
| #lf r@ emit-file throw |
#lf r@ emit-file throw |
| loadfilename 2@ 2dup |
sourcefilename 2dup |
| r@ write-file throw |
r@ write-file throw |
| last-loadfilename 2! |
last-loadfilename 2! |
| s" ,0" r@ write-line throw |
s" ,0" r@ write-line throw |
| \ write the entry for the last name to the TAGS file |
\ write the entry for the last name to the TAGS file |
| \ if the input is from a file and it is not a local name |
\ if the input is from a file and it is not a local name |
| source-id dup 0<> swap -1 <> and \ input from a file |
source-id dup 0<> swap -1 <> and \ input from a file |
| get-current locals-list <> and \ not a local name |
current @ locals-list <> and \ not a local name |
| last @ 0<> and \ not an anonymous (i.e. noname) header |
last @ 0<> and \ not an anonymous (i.e. noname) header |
| if |
if |
| tags-file-id >r |
tags-file-id >r |
| last @ name>string r@ write-file throw |
last @ name>string r@ write-file throw |
| bl r@ emit-file throw |
bl r@ emit-file throw |
| 1 r@ emit-file throw |
1 r@ emit-file throw |
| base @ decimal loadline @ 0 <# #s #> r@ write-file throw base ! |
base @ decimal sourceline# 0 <# #s #> r@ write-file throw base ! |
| s" ,0" r@ write-line throw |
s" ,0" r@ write-line throw |
| \ the character position in the file; not strictly necessary AFAIK |
\ the character position in the file; not strictly necessary AFAIK |
| \ instead of using 0, we could use file-position and subtract |
\ instead of using 0, we could use file-position and subtract |
| \ the line length |
\ the line length |
| rdrop |
rdrop |
| endif cr ; |
endif ; |
| |
|
| : (tags-header) ( -- ) |
: (tags-header) ( -- ) |
| defers header |
defers header |