59 lines
4.4 KiB
Rexx
59 lines
4.4 KiB
Rexx
/**/trace o;parse arg !;if !all(arg()) then exit;if !cms then address ''
|
|
signal on halt; signal on novalue; signal on syntax
|
|
parse var ! ops; ops = space(ops) /*obtain command line options. */
|
|
@abc = 'abcdefghijklmnopqrstuvwxyz' /*alphabet str used by ABB/ABBN. */
|
|
blinkSecs = 1
|
|
creep = 1
|
|
tops = '.C=blue .BC=░ .BS=1 .BLOCK=12'
|
|
|
|
do while ops\==''; parse var ops _1 2 1 _ . 1 y ops; upper _
|
|
select
|
|
when _==',' then nop
|
|
when _1=='.' & pos("=",_)\==0 then tops=tops y
|
|
when abbn('BLINKSECs') then blinksecs=no()
|
|
when abbn('CREEPs') then creep=no()
|
|
otherwise call er 55,y
|
|
end /*select*/
|
|
end /*while ops¬==''*/
|
|
|
|
if \!pcrexx then blinkSecs=0 /*if ¬PC/REXX, turn off BLINKSECS*/
|
|
tops=space(tops) /*elide extraneous TOPS blanks.*/
|
|
parse value scrsize() with sd sw . /*get the term screens dimensions*/
|
|
oldTime=
|
|
do until queued()\==0
|
|
ct=time(); mn=substr(ct,4,2); ss=right(ct,2); i_=0; p_=0
|
|
call blinksec
|
|
if ct==oldTime then if !cms then 'CP SLEEP'; else call delay 1
|
|
|
|
if creep then do; p_ = 3 + right(mn,1)
|
|
if sd>26 then p_ = p_ + left(mn,1)
|
|
if sd>33 then p_ = p_ + left(mn,1)
|
|
if sd>44 then p_ = p_ + left(mn,1) +right(mn,1)
|
|
end
|
|
_p=-p_
|
|
i_=2+left(ct,1); ctt=left(ct,5); if sw>108 then ctt=ct
|
|
r=$t('.P='_p ".I="i_ tops ctt); if r\==0 then leave
|
|
oldTime=time()
|
|
end /*forever*/
|
|
exit /*stick a fork in it, we're done.*/
|
|
/*═════════════════════════════general 1-line subs════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════*/
|
|
!all:!!=!;!=space(!);upper !;call !fid;!nt=right(!var('OS'),2)=='NT';!cls=word('CLS VMFCLEAR CLRSCREEN',1+!cms+!tso*2);if arg(1)\==1 then return 0;if wordpos(!,'? ?SAMPLES ?AUTHOR ?FLOW')==0 then return 0;!call=']$H';call '$H' !fn !;!call=;return 1
|
|
!cal: if symbol('!CALL')\=="VAR" then !call=;return !call
|
|
!env: !env='ENVIRONMENT';if !sys=='MSDOS'|!brexx|!r4|!roo then !env='SYSTEM';if !os2 then !env='OS2'!env;!ebcdic=1=='f0'x;return
|
|
!fid: parse upper source !sys !fun !fid . 1 . . !fn !ft !fm .;call !sys;if !dos then do;_=lastpos('\',!fn);!fm=left(!fn,_);!fn=substr(!fn,_+1);parse var !fn !fn '.' !ft;end;return word(0 !fn !ft !fm,1+('0'arg(1)))
|
|
!rex: parse upper version !ver !vernum !verdate .;!brexx='BY'==!vernum;!kexx='KEXX'==!ver;!pcrexx='REXX/PERSONAL'==!ver|'REXX/PC'==!ver;!r4='REXX-R4'==!ver;!regina='REXX-REGINA'==left(!ver,11);!roo='REXX-ROO'==!ver;call !env;return
|
|
!sys: !cms=!sys=='CMS';!os2=!sys=='OS2';!tso=!sys=='TSO'|!sys=='MVS';!vse=!sys=='VSE';!dos=pos('DOS',!sys)\==0|pos('WIN',!sys)\==0|!sys=='CMD';call !rex;return
|
|
!var: call !fid;if !kexx then return space(dosenv(arg(1)));return space(value(arg(1),,!env))
|
|
$t: !call=']$T';call "$T" arg(1);!call=;return result
|
|
abb: arg abbu;parse arg abb;return abbrev(abbu,_,abbl(abb))
|
|
abbl: return verify(arg(1)'a',@abc,'M')-1
|
|
abbn: parse arg abbn;return abb(abbn)|abb('NO'abbn)
|
|
blinksec: if \blinksecs then return;bsec=' ';ss2=right(ss,2);if sw<=80 then bsec=copies(' ',2+ss2) ss2;call scrwrite 1+right(mn,1),1,bsec,,,1;call cursor sd-right(mn,1),sw-length(bsec);return
|
|
er: parse arg _1,_2;call '$ERR' "14"p(_1) p(word(_1,2) !fid(1)) _2;if _1<0 then return _1;exit result
|
|
err: call er '-'arg(1),arg(2);return ''
|
|
erx: call er '-'arg(1),arg(2);exit ''
|
|
halt: call er .1
|
|
no: if arg(1)\=='' then call er 01,arg(2);return left(_,2)\=='NO'
|
|
novalue:!sigl=sigl;call er 17,!fid(2) !fid(3) !sigl condition('D') sourceline(!sigl)
|
|
p: return word(arg(1),1)
|
|
syntax:!sigl=sigl;call er 13,!fid(2) !fid(3) !sigl !cal() condition('D') sourceline(!sigl)
|