kerry@kcbbs.gen.nz
DATABASE [insert-your-database-here]
DEFINE m_temp_exists SMALLINT
main
define x char(80)
if open_flat("cat flat.4gl") then
let x = read_flat()
while x != "!EOF!"
display x clipped
let x = read_flat()
end while
end if
end main
FUNCTION open_flat(l_unix_cmd)
DEFINE l_unix_cmd CHAR(200)
DEFINE l_text CHAR(300),
l_tempfile CHAR(30),
l_delimiters CHAR(6),
l_delim CHAR(1),
i SMALLINT
WHENEVER ANY ERROR CONTINUE
IF NOT m_temp_exists THEN
CREATE TEMP TABLE picklist
(ptext char(300),
pline serial) WITH NO LOG
LET m_temp_exists = TRUE
ELSE
DELETE FROM picklist
END IF
LET l_tempfile = "/tmp/",get_program(), TIME,".tmp"
LET l_delimiters = ASCII(94),ASCII(92),ASCII(96),ASCII(124),ASCII(126),
ASCII(95)
FOR i = 1 TO 6
LET l_delim = l_delimiters[i]
LET l_text = l_unix_cmd CLIPPED,
" | sed -e 's/$/",l_delim,"0",l_delim,"/' > ", l_tempfile
RUN l_text
LOAD FROM l_tempfile DELIMITER l_delim
INSERT INTO picklist
IF status =0 THEN
LET i = 999
EXIT FOR
END IF
END FOR
IF i != 999 THEN
LET l_unix_cmd = "ERROR: open_flat() is unable to process an ASCII file ",
"which contains all of the following characters: ",
l_delimiters CLIPPED,". Please advise your support ",
"company of this error and suggest they look in the ",
"file ",l_tempfile CLIPPED,"."
# CALL message_prompt(l_unix_cmd, "")
RETURN FALSE
END IF
DECLARE flat_curs CURSOR FOR
SELECT ptext, pline FROM picklist
ORDER BY pline
OPEN flat_curs
IF status !=0 THEN
RETURN FALSE
END IF
LET l_text = "rm -f ", l_tempfile
RUN l_text WITHOUT WAITING
RETURN TRUE
END FUNCTION
FUNCTION read_flat()
DEFINE l_text CHAR(300)
FETCH flat_curs INTO l_text
IF status !=0 THEN
LET l_text = "!EOF!"
END IF
IF l_text IS NULL THEN LET l_text = " " END IF
RETURN l_text
END FUNCTION