|
Phil:
You brought up a good point regarding multiple BIFs on a single line, I had
not considered that situation.
I think the best way to handle it would be with a prompt. Here is a
modified version of the macro.
John
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
/*
*/
/* PGM NAME - bif_help.lx
*/
/* PROGRAM TITLE - Built-in function help
*/
/* DATE WRITTEN - 02/01/03
*/
/* AUTHOR - John Larimer
*/
/* NARRATIVE - Launches help for a built-in function located on the
*/
/* current line.
*/
/*
*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
/*
*/
/* MODIFIED LOG # PGMR DESCRIPTION
*/
/* -------- ----- ---- ------------------------------------------------
*/
/* 02/01/03 JKL Original Version
*/
/* 02/03/03 JKL Prompt when line has multiple BIFs
*/
/* -----------------------------------------------------------------------
*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
code = ''
stem_count = 0
'extract content'
text = translate(content)
call find_bif_subroutine
if stem_count > 0 then do
if stem_count > 1 then do
/* Build Prompt */
title = "Built-In Function Help Selection"
prompt = 'Which # BIF for help? '
do loop_count = 1 to stem_count
prompt = prompt loop_count || '=' bif_text.loop_count
end
'set lineread.title' title
'set lineread.prompt' prompt
'lineread 1'
'extract lastkey'
if lastkey = 'ESC' then return
'extract lastline'
if lastline = "" then return
stem_count = substr(lastline,1,1)
end
bif_text = bif_text.stem_count
select
when bif_text = '%ABS' then /* Absolute Value of Expression */
code = 'BBABS'
when bif_text = '%ADDR' then /* Get Address of Variable */
code = 'BBADDR'
when bif_text = '%ALLOC' then /* Allocate Storage */
code = 'BBALLOC'
when bif_text = '%BITAND' then /* Bitwise AND Operation */
code = 'BBAND'
when bif_text = '%BITNOT' then /* Invert Bits */
code = 'BBNOT'
when bif_text = '%BITOR' then /* Bitwise OR Operation */
code = 'BBOR'
when bif_text = '%BITXOR' then /* Bitwise Exclusive-OR Operation */
code = 'BBXOR'
when bif_text = '%CHAR' then /* Convert to Character Data */
code = 'BBCHAR'
when bif_text = '%CHECK' then /* Check Characters */
code = 'BBCHK'
when bif_text = '%CHECKR' then /* Check Reverse */
code = 'BBCHKR'
when bif_text = '%DATE' then /* Convert to Date */
code = 'BBDATE'
when bif_text = '%DAYS' then /* Number of Days */
code = 'BBDAY'
when bif_text = '%DEC' then /* Convert to Packed Decimal Format */
code = 'BBDEC'
when bif_text = '%DECH' then /* Convert to Packed Decimal Format with
Half Adjust */
code = 'BBDECH'
when bif_text = '%DECPOS' then /* Get Number of Decimal Positions */
code = 'BBDECP'
when bif_text = '%DIFF' then /* Difference Between Two Date, Time, or
Timestamp Values */
code = 'BBDIF'
when bif_text = '%DIV' then /* Return Integer Portion of Quotient */
code = 'BBDIV'
when bif_text = '%EDITC' then /* Edit Value Using an Editcode */
code = 'BBEDITC'
when bif_text = '%EDITFLT' then /* Convert to Float External
Representation */
code = 'BBEDITF'
when bif_text = '%EDITW' then /* Edit Value Using an Editword */
code = 'BBEDITW'
when bif_text = '%ELEM' then /* Get Number of Elements */
code = 'BBELEM'
when bif_text = '%EOF' then /* Return End or Beginning of File
Condition */
code = 'BBEOF'
when bif_text = '%EQUAL' then /* Return Exact Match Condition */
code = 'BBEQUAL'
when bif_text = '%ERROR' then /* Return Error Condition */
code = 'BBERROR'
when bif_text = '%FIELDS' then /* Fields to update */
code = 'BBFIELDS'
when bif_text = '%FLOAT' then /* Convert to Floating Format */
code = 'BBFLOAT'
when bif_text = '%FOUND' then /* Return Found Condition */
code = 'BBFOUND'
when bif_text = '%GRAPH' then /* Convert to Graphic Value */
code = 'BBGRAPH'
when bif_text = '%HOURS' then /* Number of Hours */
code = 'BBHOU'
when bif_text = '%INT' then /* Convert to Integer Format */
code = 'BBINT'
when bif_text = '%INTH' then /* Convert to Integer Format with Half
Adjust */
code = 'BBINTH'
when bif_text = '%KDS' then /* Search Arguments in Data Structure */
code = 'BBKDS'
when bif_text = '%LEN' then /* Get or Set Length */
code = 'BBLEN'
when bif_text = '%LOOKUP' then /* Look Up an Array Element */
code = 'BBLOO'
when bif_text = '%LOOKUPLT' then /* Look Up an Array Element */
code = 'BBLOO'
when bif_text = '%LOOKUPLE' then /* Look Up an Array Element */
code = 'BBLOO'
when bif_text = '%LOOKUPGT' then /* Look Up an Array Element */
code = 'BBLOO'
when bif_text = '%LOOKUPGE' then /* Look Up an Array Element */
code = 'BBLOO'
when bif_text = '%MINUTES' then /* Number of Minutes */
code = 'BBMIN'
when bif_text = '%MONTHS' then /* Number of Months */
code = 'BBMON'
when bif_text = '%MSECONDS' then /* Number of Microseconds */
code = 'BBMSEC'
when bif_text = '%NULLIND' then /* Query or Set Null Indicator */
code = 'BBNULL'
when bif_text = '%OCCUR' then /* Set/Get Occurrence of a Data Structure
*/
code = 'BBOCCUR'
when bif_text = '%OPEN' then /* Return File Open Condition */
code = 'BBOPEN'
when bif_text = '%PADDR' then /* Get Procedure Address */
code = 'BBPADDR'
when bif_text = '%PARMS' then /* Return Number of Parameters */
code = 'BBPARM'
when bif_text = '%REALLOC' then /* Reallocate Storage */
code = 'BBREALL'
when bif_text = '%REM' then /* Return Integer Remainder */
code = 'BBREM'
when bif_text = '%REPLACE' then /* Replace Character String */
code = 'BBREPL'
when bif_text = '%SCAN' then /* Scan for Characters */
code = 'BBSCAN'
when bif_text = '%SECONDS' then /* Number of Seconds */
code = 'BBSEC'
when bif_text = '%SHTDN' then /* Shut Down */
code = 'BBSHUT'
when bif_text = '%SIZE' then /* Get Size in Bytes */
code = 'BBSIZE'
when bif_text = '%SQRT' then /* Square Root of Expression */
code = 'BBSQRT'
when bif_text = '%STATUS' then /* Return File or Program Status */
code = 'BBSTAT'
when bif_text = '%STR' then /* Get or Store Null-Terminated String */
code = 'BBSTR'
when bif_text = '%SUBDT' then /* Extract a Portion of a Date, Time, or
Timestamp */
code = 'BBSUBD'
when bif_text = '%SUBST' then /* Get Substring */
code = 'BBSUBS9'
when bif_text = '%THIS' then /* Return Class Instance for Native Method
*/
code = 'BBTHIS'
when bif_text = '%TIME' then /* Convert to Time */
code = 'BBTIME'
when bif_text = '%TIMESTAMP' then /* Convert to Timestamp */
code = 'BBTMST'
when bif_text = '%TLOOKUP' then /* Look Up a Table Element */
code = 'BBTLOO'
when bif_text = '%TLOOKUPLT' then /* Look Up a Table Element */
code = 'BBTLOO'
when bif_text = '%TLOOKUPLE' then /* Look Up a Table Element */
code = 'BBTLOO'
when bif_text = '%TLOOKUPGT' then /* Look Up a Table Element */
code = 'BBTLOO'
when bif_text = '%TLOOKUPGE' then /* Look Up a Table Element */
code = 'BBTLOO'
when bif_text = '%TRIM' then /* Trim Blanks at Edges */
code = 'BBTRIM'
when bif_text = '%TRIML' then /* Trim Leading Blanks */
code = 'BBTRIML'
when bif_text = '%TRIMR' then /* Trim Trailing Blanks */
code = 'BBTRIMR'
when bif_text = '%UCS2' then /* Convert to UCS-2 Value */
code = 'BBUCS2'
when bif_text = '%UNS' then /* Convert to Unsigned Format */
code = 'BBUNS'
when bif_text = '%UNSH' then /* Convert to Unsigned Format with Half
Adjust */
code = 'BBUNSH'
when bif_text = '%XFOOT' then /* Sum Array Expression Elements */
code = 'BBXFOOT'
when bif_text = '%XLATE' then /* Translate */
code = 'BBXLAT'
when bif_text = '%YEARS' then /* Number of Years */
code = 'BBYEAR'
otherwise
NOP
end /* select */
end
if code <> '' then 'code { 3 EVFRILSH.IDM' code
else 'ILEPAR HELP'
exit /* end program */
find_bif_subroutine:
do forever
bif_start = pos('%',text)
if bif_start = 0 | stem_count > 9 then leave
else do
stem_count = stem_count + 1
bif_text = substr(text,bif_start)
bif_end = verify(bif_text,upper,,2)
bif_text.stem_count = substr(bif_text,1,(bif_end - 1))
text = substr(text,(bif_end + bif_start - 1))
end
end
return
<sublime78ska=K2GnTyEPumIAvxtiuMwx3w@public.gmane.org> wrote in message
200302031754.h13Hsjon007520@linux.midrange.com">news:200302031754.h13Hsjon007520@linux.midrange.com...
> John,
>
> This is great! This has always been a pia.
>
> Found a problem, though, if the first thing you press F1 on is like this:
>
> C if %eof
>
> so I added this:
>
> if bif_end < 1 then do
> bif_end = pos(' ',bif_text)
> end
> else
>
> between verify and the substr after the verify.
>
> Then I wanted to be able to press F1 on this:
>
> C eval len = %len(%trim(field))
>
> and be able to get help for %trim. I looked around for documentation on
how to
> retrieve the cursor position - and found some but could get none to work.
>
> Phil
> _______________________________________________
> This is the CODE/400 Discussion & Support (CODE400-L) mailing list
> To post a message email: CODE400-L=Zwy7GipZuJhWk0Htik3J/w@public.gmane.org
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/code400-l
> or email: CODE400-L-request=Zwy7GipZuJhWk0Htik3J/w@public.gmane.org
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/code400-l.
>
> NOTE: WDSc for iSeries disucssion has it's own mailing list.
> Information can be found at
http://lists.midrange.com/cgi-bin/listinfo/wdsc-l
>
>
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.