/* 4allterm.cmd
This is an replacement for the unix shell script that makefiles normally
use to extract and sort terminal help from .trm files
It does only use cmd.exe as external tool and is much faster than
the previous approach.
*/
allterm = "..\docs\allterm.h"
term_prefix = "..\term\"
parse arg args
sort_list = 1
if args = "nosort" then do
sort_list = 0
end
else if args \= "sort" then do
say "4allterm creates ..\term\allterm.h"
say "Please specify `sort` or `nosort` options!"
return 0
end
/* extract all terminal files from makefile.all,
extract terminal names from terminal files, store result in terminal.
extract
*/
m = "makefile.all"
i = 0
lf = "0A"x
start_help = lf || "START_HELP("
end_help = lf || "END_HELP("
call stream m, "c", "open read"
do while lines(m) > 0
l = linein(m)
do while l \= ''
parse var l "$(T)" term l
if term \= '' then do
/* read complete .trm file */
term = term_prefix || term
size = stream(term, "c", "query size")
call stream term, "c", "open read"
data = charin(term, 1, size)
call stream term, "c", "close"
/* find help section */
p = pos( start_help, data )
do while p > 0
/* get terminal name, store it in terminal.i */
s = p + length(start_help)
q = pos(")", data, s)
i = i + 1
term_name = substr(data, s, q-p)
terminal.i = term_name
/* find end of help text */
q = pos(end_help, data, q+1)
q = pos(")", data, q)
/* save help text in help., use stem help. as hash table */
help.term_name = substr(data, p+1, q-p)
/* find next help section */
p = pos(start_help, data, q)
end
end
end
end
call stream m, "c", "close"
terminal.0 = i
drop q s p m l term_name term lf start_help end_help size data
/* sort list of terminals
*/
/* simple bubble sort copied from
Bernd Schemmer's "Rexx Tips'N Tricks" v3.5 */
if sort_list then do
do i = terminal.0 to 1 by -1 until flip_flop = 1
flip_flop = 1
do j = 2 to i
m = j - 1
if translate(terminal.m) >> translate(terminal.j) then
do
xchg = terminal.m
terminal.m = terminal.j
terminal.j = xchg
flip_flop = 0
end
end
end
end
/* create allterm.h
*/
address "cmd" "@del" allterm "2>out" /* remove old file */
do i = 1 to terminal.0
term = terminal.i
call lineout allterm, help.term
end
return 0