`<(+<,Q( H0p\H,D$@ x 8` t|X!|(l 347d?XE\I(MhN4O(,Returns the address (file,component) of object as TIE#, CPT (0 if not found) DanB 1992 Syntax: ]ADDR object /FILE=ucmdfile (default primary file) Returns the address (file,component) of object as TIE#, CPT (0 if not found). Useful when manipulating UCMD files.>(align comments in functions at column DanB 1992 Syntax: ]ALIGN fn1 [fn2] [...fnx] /COL=[40] Align comments in functions at column (COLumn, if not set, defaults to 40) 4>( DM>(ii RW ARRANGE MAT [1] rearrage matrix to fit Wide then insert CRs [2] RVM DEB W FIT MAT >(  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~>(\ ZAV V;A;ELX [1] indorcharAV charorind -- Convert chars to 0-origin AV indices and vice versa [2] ELX'ERROR(^\DMTCNL)/DM'  Copyright 1985, APLics Oy [3] A(STPTR 'V Z')CALL 21328 10101 1934 24282 6 896 32258 13054 15360 32514 9978 3723 8 29914 2582 23296 13392 13053 22728 7333 29917 29161 13018 29953 12068 31773 2243 3189 572 1908 16333 21588 798 21045 15114 30207 21818 2078 203 >(!!BIND workspaces to a specific APL interpreter DanB 1993 Syntax: ]BIND INTERPRETER[.EXE] WS1[.AWS] [WS2[.AWS]] /EDIT /BANNER=name /EXE= Allows to BIND an interpreter with specific workspaces. For versions 8 to 10 banner switches are provided: /EDIT allows to edit the banner /BANNER=name allows to set the banner to the contents of the variable 'name' For version 11[+] (determined by the presence of the /EXE switch) the .EXE file is given as argument to the switch. Names may be preceded by path as in H:\APPS\MYRTS. Ws names may be preceded by = in which case the .EXE's path will be used, ex: ]BIND I:\APL\PROJECTX\MYINT =WS1 =WS2 /BANNER=PROJECTX_BANNER or with the lib #: ]BIND 21 MYWS /EXE=TRYTHIS by default the large interpreter is used (not the APLX).LX)>(BenchMark expression(s) DanB 1993 Syntax: ]BM exp1 'e x p 2' ... /N=[100] Will execute each expression N times (default 100) and return MF result. >(ĿóĴ³ĿǺĴҺгĿƳ͵ѳϳĿ̺͵˺ʳķóͳĽķǺĶҺкĽķƳ͹ѳϺĽķ̺͹˺ʺĽ͸óĴ³;͸ǺĴҺг;͸Ƴ͵ѳϳ;͸̺͵˺ʳ;ͻóͳͼͻǺĶҺкͼͻƳ͹ѳϺͼͻ̺͹˺ʺͼ>(__lists references calls made by a function DanB 1992 This command will produce a list of all the calls made by a function. Syntax: ]CALLS fn /FULL /MAXLEVEL It will allow to see all objects referred to by a given function with repeated procedure for each function called. Each name is preceded by a symbol. Its meaning is global object (not a visible function) F visible function R recursive function local object ! unreferenced local object l unreferenced label L referenced label  global local (global localized at an upper level) Example: ]CALLS fn /FULL will show all objects in each fns called by 'fn', repeating the the procedure for fns already shown (except recursive calls). This may seem redondant but consider the following: fn f1;io f2 [1] f1 [1] f2 [1] io [2] f2 [2] [2] f2 refers to io globally. In 'fn', f2 refers to the global io in the ws. When called by f1 it refers to the local io in f1. [1] Xcalls 'fn' will produce 2 different outputs for f2, one from 'fn' and one from 'f1' because the /FULL switch as been set. ]CALLS fn will show all objects in each fn called by 'fn' but won't show already shown functions. In this case the second output for 'f2' won't be present and therefore show the local reference to io. ]CALLS fnx /MAX=1 will only show the fn itself (1st level) Note that is being taken in account but that its use may not be interpreted properly. Text in functions with is scanned between the character and the next  character on each line where it appears only. This also applies to ELX, ALX and error trapping ({errmsg:code}).d>( CLEARMF;IM;R;IO [1] CLEAR MAINFRAME OF ANY PENDING OUTPUT AND DISPLAY [2] IM 13 10 0 32 32 32 32 32 32 7  (IMAV RSENDRAW '')IO0 [3] L:R  ((IM(-IM)R)AV[129]=1R)0  (IMAV RCOM1 ARBIN '')L >( CMDADDR O;FILE [1] DanB 92 RETURN COMPONENT OF OBJECT IN FILE [2] : ADDR [3] O'/= /FILE=' PARSE O [4] (FILE0)/L1  FILEFOPEN FILE [5] L1:RESULTFILE ADDR O >( CMDALIGN ARG;COL;FNS;T;CPOS;MAX;S;LAB;DLM;I;N;IO [1] DANB 1992: ALIGN functions at column [2] : LJUST LJUSTOBJ [3] IO1  DLM1ARG1'/COL=' PARSE ARG check switches [4] COLCOL DEFAULT 40 [5] L1:FNS(1+IARGDLM)ARG  ARGIARG [6] (3NC FNS)/L3  OUT FNS,' NOT A FN'  L4 [7] L3:T\''''=FNS(1 2 T)TCR FNS [8] (II/I1LAB)^0LAB(<\FNS[I;]':')+.1S [11] FNS[I;]NT[;MAX],(1MAX-COL+N+LAB)LJUST(0,MAX)T(-N)FNS[I;] [12] OUT FX FNS [13] L4:(ARG)/L1 ~+ CMDBM ExP;Cr;Ff;N;b;SPACE;SEG [1] DANB 1993 BENCHMARK EXPRESSIONS [2] ExP is a regular [blank] delimited list of expressions [3] ExP'/N= /SPACE[=]' PARSE ExP  NN DEFAULT 100 [4] (0SPACE)L1  (1SPACE)L0  SPACE'_' [5] L0:ExP[b/bExPSPACE]' ' [6] L1:CrVTOM ExP  bCr.' '  Cr(b\''),(b\''),Cr [7] Use asignment line as reference [8] ExP1 MF FX Cr'Ff;' OVER Cr  bWA  bOUT ''  bWA [9] Garbage collection & VWS swapping time aside [10] SEG  0 1 3 POKE 980 985 [11] L:Ff  (0(, CMDCALLS Xf;Xfs;IO;Xst;Xnl;Xbr;Xs;FULL;MAXLEVEL;Xml [1] DanB 840921 all objects of all calls made by argument [2] /FULL is Full Search (repeat search for already processed fns) [3] /MAXLEVEL is maximum level to look for [4] : CMDCALLS CRFROMVR Xc1 Xcompare Xdf Xeq XfR Xft Xgensymb Xmv Xqz Xrd Xtreegen [5] Xf1'/FULL /MAXLEVEL=' PARSE Xf [6] XfsFULL  XmlMAXLEVEL DEFAULT 9999  IO1  Xbr 0 0 '' [7] Xst(1,Xst)Xst'',XnlXf [8] Xtreegen Xf >( CMDCOMPARE W;C;NLINES;OBJECT;S;SHOW;T;WS;WorkFile;ZONE;cr;s;ws1;ws2;ELX;;LOAD;IO;DM;DROP [1] DanB 921105 comparison CMD [2] : CMDCOMPARE clearfile comparefiles SVM compv compack compbool PVAL fit [3] : compfn compind compvar display fncr jdmr1 mcomp unique vm PCHK PNC [4] IO1  0ELX'DM' [5] W'/DROP[=] /LOAD /NLINES= /OBJECT= /SHOW= /ZONE= /WS /= ' PARSE W [6] Default values for each switch [7] LOAD')',LOAD'XLOAD ' [8] NLINESNLINES DEFAULT 12 [9] SHOWSHOW DEFAULT 1 2 2 [10] ZONEZONE DEFAULT 2 [11] WorkFile'WCOMPARE'  crTCNL  W1(C1CW' ')/W [12] C 1 2 1 2 2 1 0 [4 12 10 26 6 2 21,VI W] where to cut [13] ERROR(0C)/'COMPARE ARGUMENT ERROR' [14] C((' '=W)/W)[C]  ws1(C-1)W  (^/T'='ws2CW)/L10 [15] ws2(T/ws2),(-(ws1)' ')ws1 Replace '=' by 1st filename [16] L10:(0DROP)L12  Tclearfile  L15 [17] L12:(1DROP)L13  DROPDROP+10=DROP1FI DROP [18] L13:WorkFile FSTIE T1+/0,FNUMS [19] C3+1FREAD T,S1+1FSIZE T  (1=DROP)L14  C-3+1FREAD T,S+C [20] L14:FDROP T,C [21] L15: [22] TFX 2 3 's sCs'  C'(FIFO APL'  T101 SVO 'C'  MF [23] TFX 2 13 's s 1INBUF s,cr'  PC [24] (WST0OBJECT)F  TOBJ [25] L18:ELX'DM'  SLOAD,ws1  (ws2)/L20  ws2ws1  S0ws1WSID [26] L20:s S  s ']TWS'  s LOAD,ws2  s ']TWS'  [27] s ']COMPFILE /NLINES=',(NLINES),'/SHOW=',(SHOW),'/ZONE=',ZONE  [28]  [29] OBJ:S')COPY ',ws1,' ',OBJECT  (ws2)L30  S0ws2ws1 [30] L30:s S  s '1CR''',OBJECT,''''  s ')COPY ',ws2,' ',OBJECT [31] s '2CR''',OBJECT,''''  s ']COMPMAT 1 2'  s 'FX 1'   [32] F:ELX'L18'  ws1 comparefiles ws2  0 ?(W W CMDCOMPFILE i;IO;ws1;ws2;n1;n2;r1;r2;c1;c2;c;n;m;lim;show;p1;p2;obj;t;s;WorkFile;SHOW;ZONE;NLINES;CR; [1] danb 840701 ws comparison using files [2] ]tws must have been run on each ws prior to using this fn [3] objects are put in order in the file for 2nd ws (fns & vars only) [4] :CMDcompfile SVM compv compack compbool compfn compind compvar display [5] :fit fncr jdmr1 mcomp timen unique vm PCHK PNC PVAL [6] IO1  CRTCNL [7] ''  i'/ZONE= /NLINES= /SHOW=' PARSE i [8] WorkFile'WCOMPARE'  NLINESNLINES+120NLINES''FINLINES [9] ZONEZONE+20ZONEFIZONE  t0SHOW  SHOW(t/ 1 1 2),(~t)/FISHOW [10] (1t((0 11 FNAMES)^.=n11WorkFile)/iFNUMS)l0 [11] n FTIE t((i)i)0 [12] l0:ws1FREAD t,is1FSIZE t  p1(nws1'')ws1  ws11nws1 [13] 1st ws name and ts. Other info may follow. [14] [15] the file will have to be read several times [16] first, find all obj names in each ws [17] SHOW: 1=show names ;2=contents ;3=both ;0=nothing [18] show, 2 2 3SHOW [19] r21c2n2FREAD t,s+3+r11c1n1FREAD t,s+1 [20] ws2FREAD t,s+r1+2  p2(nws2'')ws2  ws21nws2 2nd ws [21] i1c1  i0,i1c2  n1(ic1)n1  n2(ic2)n2 adjust dimensions [22] [23] names known, display header [24] n'G< created 9999/99/99 >,G' format [25] OUT '*** Comparing ',ws1,,n FMT 100 2 1 3 timen FI p1 [26] OUT ' with ',ws2,,n FMT 100 2 1 3 timen FI p2 [27] OUT CR,'Report',,n FMT 100 2 1 3 TS [28] [29] obj' outstanding objects in ' objects not appearing in the other ws: [30] (^/c1~i0=n2 MATIOTA n1)/s4 [31] OUT CR,'***',(4 0 +/i),obj,ws1  show[4]/'OUT fit 0 1in1' [32] show[1]s4  nci/i  lims+1  i0 show individual objects [33] b3:(n1P)/L8  A(A' ')/AP[I;]  II+1 [7] (~VI A)/L10  (I>1P)/L8  AA,' ',(T' ')/TP[I;]  II+1 [8] L10:(I>1P)/L8  B(T' ')/TP[I;]  II+1 [9] (~VI B)/L9  (I>1P)/L8  BB,' ',(T' ')/TP[I;]  L9 [10] L8:ERROR 'You must provide two file names' [11] Read the file directories [12] L9:TNFNUMS  T1FOPEN A  HFREAD T1,2  A1FREAD T1,H[2] [13] N1FREAD T1,H[3]  A1A1[IAVA1;] [14] T2FOPEN B  HFREAD T2,2  A2FREAD T2,H[2]  N1N1[I;] [15] N2FREAD T2,H[3]  A2A2[IAVA2;] [16] N2N2[I;] [17] Find new and missing objects [18] F0 flag set if any differences [19] JA2 MATIOTA A1  (~0J)/L3 [20] TCNL,' Objects found only in file ',A,':'  FIT(J=0)A1  F1 [21] L3:JA1 MATIOTA A2  (~0J)/L4 [22] TCNL,' Objects found only in file ',B,':'  FIT(J=0)A2  F1 [23] L4: [24] AA,':'  TB,':'  A((A)T)A [25] B(A)T  I0 [26] L1:((J)ZI3,I3,2P<:>ZI3' FMT 1 6 100FTIMEREP N1[J[I];3] [31] t1'CNH'[IO+ 0 0 20V1] [32] ' In file ',A,' [',t1,'], =',(V1),', Last mod=',T [33] T,'I2,2PZI3,I3,2P<:>ZI3' FMT 1 6 100FTIMEREP N2[I;3] [34] t2'CNH'[IO+ 0 0 20V2] [35] ' In file ',B,' [',t2,'], =',(V2),', Last mod=',T [36] (^/(2(V1),V2),'C'=t1,t2)/L5 [37] TCNL,' ' [38] L1 skip comparison if not char vector or matrix [39] L5:(2=V1)/L6  (N1[J[I];1]=3)/L5F  V1TCNL MATRIFY V1  L6 [40] L5F:V1CRFROMVR V1 [41] L6:(2=V2)/L7  (N2[I;1]=3)/L6F  V2TCNL MATRIFY V2  L7 [42] L6F:V2CRFROMVR V2 [43] L7:V1 compfn V2  L1 [44] L2:(~F)/'No differences.' ?( DD CMDDRAW NAME;B;C;H;L;LE;MAT;N;S;V;W;WE;c;IO;MASK;STYLE;R;LR;TB;TH;TV [1] DanB 94 DRAW LINES according to characters in MAT. Version 2.1 [2] EX.: + + + + [3]    TEXT  Try ]DRAW CR 'CMDDRAW' [4] IN THE MIDDLE [5] + OF +THE +LINES + + + [6] /STYLE allows to draw with single or double outside and inside [7] /MASK allows to mask out the text [8] WHERE [9] IO0  R,MATNAME1'/= /STYLE= /MASK' PARSE NAME [10] C,Borders[2'12'4(STYLE DEFAULT '1')~' ';;] [11] c' ',C[11 7 20 11 11 24 18 7 0 7 6 4 16 8 12] [12] cc,' ',C[1 5 20 1 1 24 22 5 0 5 10 4 2 14 12] [13] (2MAT)L10  MATMATRIFY MAT [14] L10: [15] Find outside markers [16] SBMAT'+',Borders[;0;0],Borders[;0;4],Borders[;4;4],Borders[;4;0] [17] H\B  VB [18] Find inside markers [19] LLETH),0)+4C/, 0 1 0,LLE^TH [24] TVNN+(8C/, 1 0 (WWE>TV)0)+2C/, 1 0 0WWE^TV [25] R[WHERE C]c[N] [26] find outside borders to redraw [27] R[WHERE,BTB]c[17]  R[WHERE,BLR]c[18] [28] [29] MASKL15 bring back text in result plus 1 space on each side [30] B,(0 1 B,1)B^ 0 1 1,BMAT'+ ',(,Borders)~' ' [31] R[WHERE B]B/,MAT [32] L15:(2=NC NAME)L20  NAME'RESULT' [33] L20:NAME,'SR' ?(mm CMDED A;B;C;D;E;F;N;P;FILE;IO [1] DanB 92 Edits objects in the current file [2] /FILE=file will act on different file [3] : ADDR NC EDIT OHL [4] IO1  A1'/FILE=' PARSE A [5] For ONE object only. [6] FILEFILE DEFAULT UFILES[1;] [7] P(FOPEN FILE)ADDR A [8] (P[2]0)1  OUT 'Object not on file.'  0 [9] 1:(B1.1,IDLOC A)2 [10] 'Object in stack. Definition won''t remain in WS.' [11] 'Press return to continue.',TCBEL  D beep and let user read msg [12] 2:NFREAD P  F('RE',B/';',A),TCNL,'[1]' [13] (B~2P[1]NC A)4 [14] D'VR A'  FF,'ADEF N'  5 [15] 4:DA  FF,A,'N' get value of variable [16] 5:FF,'EDIT A(RND',D,')/0',B/'OHL A' [17] FF,'D FREPLACE P' [18] (4~DEF F)'NOT changed: ',A ?( CMDEDL A;B;C;D;E;F;N;P;HEADER;LOCALS;FILE;IO [1] DanB 93 Edits objects in the current file. Show LOCALS upon completion. [2] /FILE=file will act on different file [3] : ADDR NC EDIT OHL XfR Xeq Xc1 Xrd Xmv Xqz Xft [4] A1'/FILE= /HEADER' PARSE A  IOLOCALS1 [5] For ONE object only. [6] FILEFILE DEFAULT UFILES[1;] [7] P(FOPEN FILE)ADDR A [8] (P[2]0)1  OUT 'Object not on file.'  0 [9] 1:(B1.1,IDLOC A)2 [10] 'Object in stack. Definition won''t remain in WS.' [11] 'Press return to continue.',TCBEL  D beep and let user read msg [12] 2:NFREAD P  F('RE',B/';',A),TCNL,'[1]' [13] (2NC A)/4 [14] D'(VR''',A,''')'  FF,'ADEF N'  5 [15] 4:DA  FF,A,'N' get value of variable [16] 5:FF,'C',D,'EDIT A(RC',D,')/0',D,' FREPLACE P' [17] (4~DEF F)'NOT changed: ',A ?(SS CMDFIT mat;IO;w;p;f;dim;WIDTH [1] DanB 840614 reshape char mat to fit pw. LONG command. [2] w:width; f:no of folds; p:page length [3] IO0  mat'/= /WIDTH=' PARSE mat [4] WIDTHWIDTH DEFAULT PW [5] fWIDTHw1dim 0 2 +mat [6] dim[0]fp(1dim)f [7] RESULT(p,fw) 1 0 2 (f,p,w)dimmat ?( CMDFNSLIKE STR;R [1] Return all functions containing pattern STR [2] STR(+/^\' '=STR)STR [3] RESULTSTR PATMATCH NL 3 ?( CMDFORI exp;N;f;I;I;IO [1] Execute expression FOR I:=limits[2] [by count] [2] IOGLOBALIO [3] I\<\exp SS '/I='  ERROR(~/I)/'/I= must be present' [4] I3I/exp  exp(~I)/exp [5] (2 3 =N,I)/2,3  NIO,N-~IO [6] 2:NN,1 [7] 3:((1N)=-/2N)0  I1N [8] I18,exp  expIexp [9] IFX(3,I)(I'f'),exp,I'',(I<0)'1N-II+I'  [10] IN  N11N  f [11] DANB 92/11/27 WILL exp FOR I:=N[1](OR IO) TO N[2] ?( dd CMDFRDCI ARG;CMP;DISPFMT;J;LP;Q;STOP;TN;TYPE;WHO;START;S;SKIP;EMPTY;STOP;LOCK [1] DanB 940810 from MF - display FRDCI for each file cpt [2] Q'/EMPTY /LOCK= /SKIP= /START= /STOP= /= ' PARSE ARG [3] TNFI Q  (1VI Q)L1 [4] (IFERRIN 'TNFOPEN Q')L1  '*** UNABLE TO OPEN THAT FILE'  0 [5] L1:SFSIZE TN,LOCKFILOCK  STOP(S[2]-1)J+99999990=JFISTOP [6] JS[1]1FISTART [7] OUT 'FILE NAME: ',FNAMES[FNUMS''TN;] [8] OUT 'FILE FSIZE=',S  OUT '' [9] (J>STOP)EMPTY  SKIPSKIP DEFAULT 1 [10] CMPFRDCI TN,START Trap access error ? [11] DISPFMT'I5,<: >,A1,I8,I2,2I9,I7,X1,80A1' [12] OUT ' CMP T SIZE WHO',22'WHEN Shape'  [13] LOOP:CMPFREAD TN,J,LOCK  (EMPTY<0QCMP)SKIP  Q 1 30 30Q [14] S'BHIiCR',,'I1' FMTCMP  TYPES[11 807 323 163 82 645 326 DR CMP] [15] SFRDCI TN,J,LOCK [16] OUT DISPFMT FMT(J;TYPE;S[1];CMP;S[2]; 1 2 100 2 3 3S;Q) [17] SKIP:(STOP,A1,< >,70A1' [21] OUT ' CMP T shape'  [22] (LP(STOPNLOOP),DONE)[JSTART] [23] NLOOP:CMPFREAD TN,J,LOCK  (EMPTY<0QCMP)SKIP [24] TYPE'b MIiCR?'[11 326 807 323 163 82 645 DR CMP] [25] OUT DISPFMT FMT(J;TYPE;Q) [26] (STOP.='''')Xr'  [13] XbrXnl 0 0 Xfs1 full search [14] XstFX((Xst)'Xl Xdf Xr'),[0.1]Xst  [15] Xst(1,Xst)Xst'',Xn [16] Xtreegen Xn [17] RESULTXrd Xnl [18] FMT0  PW78  RESULTRESULT[AVRESULT;] [19] Xnl(' '.Xnl)/Xnl(Xbr3=NC RESULT)RESULT [20] Xst'REQUIRED SUBROUTINES:' OVER 1PW FIT Xnl [21] Xnl(' '.Xnl)/Xnl(~Xbr)RESULT [22] XstRESULT' ',Xst OVER 'GLOBAL VARIABLES:' OVER 1PW FIT Xnl [23] UPD0 [24] Xnl(Xnl[;2].'>')XnlCR Xn  Xst1++/^\''=1Xnl[;1] [25] RESULTFX Xnl[Xst;]OVER('','>',RESULT)OVER(Xst,0)Xnl ?( CMDHEX N;IO;CHAR;BACK;HN;I;X [1] DanB 93 HEXADECIMAL OF N (INTEGER or CHARacter) [2] R(N)4. Works BACKwards using /BACK [3] IO0  X'0123456789ABCDEF' [4] (''1N1'/= /CHAR /BACK' PARSE N)/5  N1N [5] 5:BACK/30  CHAR/10  NFI N  20 [6] 10:NAV1N [7] 20:RESULT,' ',X[(416)N]  0 [8] 30:HN0 Working BACKwards, N is hex [9] 40:(N^.=' ')/50  HNHN,16X(IN' ')N  N(I+1)N  40 [10] 50:RESULTHN  CHAR0  RESULTAV[HN] ?(cc CMDHISTORY n;v;h;t;c;VERSION;IO;s [1] DanB 850708 update historical information. [2] If n>VERSION then it is newer ver no. otherwise it is increment. [3] If 0 use current no. [4] s'/= /VERSION=' PARSE n  nVERSION DEFAULT 0 [5] v'WSVERSION'  h'HISTORY' var names [6] (0NC v)/v,'1'  cv Current Vn [7] (n0)/'cn',(c>n)/'+c' adjusted [8] (NC h)L1  t 1 30 30'Version Date Description'  h,'t' [9] L1:t(5 2 7 0 c,1001003TS),s  v,'c' [10] n(t)1vh  v((1v),n)v  tnt [11] h,'vt' [12] OUT 'Commented Version ',c ?(bb CMDINPUTXT VAR;I;CR;IN;NEW [1] DANB 1993 INPUTXT INTO VARIABLE [2] (NEW0=INC VAR)L10  ERROR(2I)/'INVALID NAME' [3] VAR,' contains ',(VAR),' characters' [4] L10:IN0'END INPUT BY SPACE,CR'  CRTCNL [5] ((0I)^' '^.=I)/END  ININ,I,CR  LC [6] END:IN1IN DROP LAST CR [7] VAR,'',((~NEW)/VAR,','),'IN' ?( -- CMDKEEPFNSOF FN;O;ALL [1] DanB 941026 Keep all the fns related to FN [2] (FN^.=' ')1  FNLX [3] 1:ERROR(3NC FN)/'INVALID FUNCTION: ',FN(+/^\' '=FN)FN [4] OFN OVER UCMD 'GLOBALS ',FN,'/FULL' [5] (+/EX(0=O MATIOTA ALL)ALLNL 2 3),' objects erased' [6]  h+ CMDLIBWHERE ARG;LASTLIB;I;N;LIB;B;ELX;LIBS;FILE;F [1] FIND WHERE RESIDES WORKSPACE(S) [2] I01  ARG1'/LASTLIB= /FILE' PARSE ARG [3] F'',((0 0 1 =FILE)/'WSF'),'LIB LIBS[I]' [4] LASTLIBLASTLIB DEFAULT 999 [5] LIBS(LIBSLASTLIB)/LIBS(VI LIBS)/FI LIBS,LIBS [6] ELX'ERR' [7] L10:((LIBS)?')10  CI'a' [16] STRING[S/S]AV[(-/AVCI,'a')+AV(SSTRING26C)/STRING]  [17] 10:S 0 1 +C2FSIZE TIEFOPEN FFILE DEFAULT 'MONITOR'  NEXT1C [18] OUT 'File <',F,'> tied to ',(TIE),'. Component range is ',S [19] If arg has 2 #s they represent the limits, 1 # a range, 0 # all [20] (PD^0CARGARG,(PD)1003TS)/80  C40,30 [21] S(S[1]1ARG),ARG[2]S[2]  40 [22] 30:F0ARG  S(S[1]C[1]),S[2]1CS[1+F]+F0,ARG-ARG [23] 40:(>/S)/130  WS0/22CPTFREAD TIE,C1S  CPT22CPT [24] (/WS SS WS)70 (/(WS,  CPT)SS WS)70  CPT2  CPT [25] 50:USER FSYSCTRL 1018,ID11CIFRDCI TIE,C  (USER=.=0,ID)/70 [26] 50:USER0/ID11CIFRDCI TIE,C  (USER=.=0,ID)/70 [27] (STRING)60  (/(,CPT)SS STRING)70 [28] 60:OUT 'Entry ',(C),', ',USER,' (',(ID),') ',WS,' ',,,63CI [29] OUT CPT  OUT '' [30] 70:40,SS+ 1 0 [31] Arguments are dates [32] 80:CTSTOmSEC(C,7) 0 100 100 ARG+19000000999999>ARGARG [33] ARGC+(DATE)36001000000241+20=1 7 86400000000 C  CS [34] 90:(1-/C)/100  C[1+ARG[1]<2FRDCI TIE,F]F0.5+/C  90 [35] 100:ARG[1]1C  CS  (2=ARG)/110  SARG,1S  40 [36] 110:(1-/C)/120  C[1+ARG[2]<2FRDCI TIE,F]F0.5+/C  110 [37] 120:ARG[2]1C  40,SARG [38] 130:SNEXT,1+F(FSIZE TIE)[2]  NEXTF [39] 140:WAIT0  ALX'END'  40,DL WAIT [40] END:TCNL,'*** MONITOR ENDED ***' @( CMDMORSE STR;F;LD;LP;LS;IO;LIST;FREQ;PER;TEST [1] USE SOUND TO SEND STR IN MORSE CODE [2] IO1  STR1'/TEST/FREQ=/PER=' PARSE STR [3] FFREQ DEFAULT 1024  LPPER DEFAULT 50 [4] LS0.5LD2.5LP LENGTH OF SPACE,DASH,DOT [5] STRUPPERCASE STR  LISTMorse[;1] [6] F(3 2 F,LP,F,LD,0,LS)[,3,[1.1]'.-'(1,Morse[LISTSTR;])~' ';] [7] SOUND TESTF  TEST0  RESULTF T@( CMDNOCLASH NAME;;LOC;L;T;STEM;B;N;IO [1] DanB 92 - Change all local names in NAME to 0, 1, 2,... [2] NAME'/N= /STEM= /= ' PARSE NAME [3] N1000N DEFAULT IOGLOBALIO [4] STEMSTEM DEFAULT '' [5] LOCUCMD 'OBJECTS ',NAME [6] keep only label or non-sys local [7] LOC 0 1 ((LOC[;IO]'Ll')LOC[;2]>.='')LOC [8] remove ~ names if any [9] T2' ',' ',(L/B(T)(,T)SS '~')TCR NAME  BLB [10] TMATRIFY(,0,0,\B)/,T  LOC(0=T MATIOTA LOC)LOC [11] (1LOC)0  NAME,': NO CHANGE TO PERFORM'  0 [12] 0:N('<',STEM,'>,LI5')FMT N+(1LOC)-IO [13] UCMD 'OSR ',(,LOC,' ',N),'/X=TC/APL/LEFT/RIGHT/OBJ=',NAME @( CMDOBJECTS A;FMT;SORT [1] DanB 92 - return all objects used by FN [2] A'/FMT /SORT /= ' PARSE A [3] RESULTXfR VR A [4] SORT1  RESULTRESULT[AVRESULT;] [5] 1:FMT0 [6] RESULTXft RESULT @( CMDOHL FN_;M [1] Order Header Locals [2] (' '^.=FN_)10  FN_ALLFNS  20 [3] 10:FN_' ' MATRIFY FN_ [4] 20:OHL( FN_[IO;])  (0FN_ 1 0 FN_)20 @( CMDOSR CMDOSR;CMDLA [1] DanB - Object Search & Replace - Ver 4.5. Now relies entirely on OSR [2] RESULTCMDLA OSR OS CMDOSR @(  CMDOSS CMDOSS;CMDLA [1] DanB - Object Search String - Version 4.5. Now relies entirely on OSS [2] RESULTCMDLA OSS OS CMDOSS @( CMDRENUM NAME;;B;I;L;LOC;N;STEM;T;X;IO [1] DanB 92 - Change all labels in NAME to be in ascending order [2] Change them all to 1, 2, 3, ... [3] IOGLOBALIO  NAME1'/N= /X= /STEM= /= ' PARSE NAME [4] Switch /N= allows to start,increment, default IO,1 [5] IIO,1  (0N)/0  II2FI N [6] 0:NI [7] Switch /STEM= allows to change label Stem. Default [8] (0STEM)1  STEM'' [9] 1:STEMSTEM~' ' [10] LOCUCMD 'OBJECTS ',NAME [11] keep only label or non-sys local [12] LOC 0 1 (LOC[;IO]'Ll')LOC [13] remove ~ names if any [14] T2' ',' ',(L/B(T)(,T)SS '~')TCR NAME  BLB [15] I''  (X0)2  IX,' ' [16] 2:TMATRIFY I,(,0,0,\B)/,T  LOC(0=T MATIOTA LOC)LOC [17] (L1LOC)3  OUT NAME,': NO CHANGE TO PERFORM'  0 [18] 3:T'LI6' FMT N[IO]+N[1+IO]-IO-L  STEM(L,STEM)STEM  [19] NAME OSR '/TCALR',(,'/',LOC,'/',STEM,T)~' ' @(  RCMDSEND O [1] Send OBJECT to mainframe [2] CLEARMF [3] ERROR(~IMMEXEC)/'MF not in immediate execution mode' [4] (3 2 NC O)/F,V  ERROR 'Object undefined' [5] [6] F:SENDFN O  0 [7] V:SENDVAR O  0 @(__ CMDSHOW OBJ;UF;IO;FILE;N;DATA;DEL;PP;D [1] DanB 92 SHOW OBJECT ON FILE [2] DPP16  IO1  DEL1OBJ1'/DATA /FILE=' PARSE OBJ [3] (0FILE)L0  FILEUFILES  defined in UCMD [4] L0:UFFILE'*'(21,FILE)FILE [5] Try UFILES specified or ALL of them by default [6] L1:(0UF 1 0 UF)/NO  N(1+OBJDEL)OBJ [7] (02R(FOPEN UF[1;])OBJDATA N)/L1  DATAL5 [8] DR[2],(R[2 3]0)100 0 1 FTIMEREP 2R [9] L5:OUT N,' FOUND IN ',UF[1;],D  FREAD 2R  NEXT [10] NO:OUT TCNL,N,' NOT FOUND' [11] NEXT:UFFILE  (OBJ(1+N)OBJ)L1 @( CMDSIZE ARG;O;S;N;IO; [1] DanB 93 - FIND SIZE OF OBJECTS IN ARGUMENT. [2] /N=n Specifies the number of results to return [3] IO1  (''=1ARG1'/= /N= /' PARSE ARG)1  ARG1ARG [4] 1:(' '^.=,ARG)2  ARG(~ARG[;1]'')ARGNL 2 3 [5] 2:(2=ARG)3  ARGMATRIFY ARG [6] 3:OSSIZE ARG  (N0)/L  O((S)1FI N)O [7] L:RESULTARG[O;],(S[O].+,0),' ','.?FVC'[52+(0,3~)IDLOC ARG[O;]] [8] RESULTRESULT OVER 'TOTAL SIZE: ',+/S[O] @(L CMDTAG ARG;COMMENT;CR;I;B;WHEN;WHO;MON;EXEC;WHO;MARK;FN;IO;REP [1] DanB 92 - TAG function(s) with comment [2] IO1  ARG'/= /COMMENT= /EXEC /WHO= /REP' PARSE ARG [3] EXECL1  ARGARG argument is an expression to execute [4] BB1B' '=ARG,' ',ARG  ARGB/ARG into list single spaced [5] L1:ARG1ARG space at the end for [6] (0WHOWHO)L3 any perticular culprit preferred ? [7] WHOFSYSCTRL 1018,''AI MainFrame userid ? [8] WHO'APL id ',1AI [9] format to be specified according to taste - for example: [10] L3:WHO' by ',WHO [11] MON' ',(12 3 'JanFebMarAprMayJunJulAugSepOctNovDec')[TS[2];],' ' [12] WHEN2MON, 4 0 2 0 TS[1 3] [13] MARK' ' or whatever marking system may be desired [14] (0COMMENT)L4  COMMENT'' [15] L4:COMMENTMARK,WHEN,WHO,' ',COMMENT [16] L5:(' '^.=ARG)/EXIT  IARG' '  FNIARG  ARGIARG  [17] (0CRCR FN)L7 [18] L5,' is locked or shadowed' [19] this line to be commented out if removal of previous MARK undesirable [20] L7:CR(-2REP^MARK,(1,MARK)CR)CR [21] L5,':',DEF CR OVER COMMENT [22] EXIT: [23]  15 May 1993 by DanB this TAG line written by the TAG command ! @( CMDTIMEFMT NS;ARG;N;C;D;IO;DAY;R [1] Transform number of micro seconds into timestamp [2] IO0  ARG(NS)1000000  N86400  DNARG [3] DAYARGN by # secs in a day [4] RDAY+693902  RR-(R-N146097R)146097  N(N)-C36524R [5] RR+(R-C)36524  NN+C1461R  R365DAY58+R-(R-C)1461 [6] C3650  C[0 31 59 90 120 151 181 212 243 273 304 334]1  C(+\C)[R] [7] NR- 0 2 29 57 88 118 149 179 210 241 271 302 332 [C]+N [8] NN+100C [9] DAY10000100(DAY-R)365 [10] RDAY+N [11] CD100 0 60 60 D [12] D1RR,(C,1)D [13] RESULT(D,18)'G,G< 99:99:99>' FMT((/D),2)R @(## CMDTONFILE VAR;FILE;TIE;REPLACE;ELX;B [1] DanB 931119 Write VARiable TO Native FILE [2] VAR'/= /REPLACE /FILE=' PARSE VAR [3] ERROR(FILE0)/'/FILE= switch MUST be specified' [4] ELX'L10'  FILE NTIE TIE1+/0,NNUMS  ELX'DM' [5] ERROR(~REPLACE)/'FILE ALREADY EXIST'  0 NRESIZE TIE  L20 [6] L10:ELX'DM'  FILE NCREATE TIE [7] L20:VAR(1+VAR=TCNL)/VAR,VAR  [8] VAR[1+B/BVAR SS 2TCNL]TCLF [9] VAR NAPPEND TIE [10] (VAR),' characters written to file ',FILE @(P CMDTRACEBACK S;L;M;R;B;IO [1] DanB 940930 TRACE BACK use of strings (LONG arg) [2] For ex.: find where FSTIE is used and which fns use it and so on. [3] IO1  '# of fns: ',1MALLFNS  S(+/^\' '=S)S  B'' [4] only the 1st time do we include the comments [5] L1:(/R0,M OSS TCDEL,B,TCDEL,S)0 [6] '* used in'  S1(L1LS' ')/S,' ',RM [7] S[B/BS' ']TCDEL  B'C'  L1,M(~R)M @(  CMDTREF LS;I;F;IO;B;SyM;MaT;L;N;NaM;RECUR;SORT [1] DanB 940830 Contruct a table of references by LS (fns) [2] LS1'/SORT /RECUR /=' PARSE LS [3] MaTSyM 0 0 ''  IO1  (LS)L2 [4] LS(LS[;1]'')LSNL 3 [5] Remove localized items [6] FLS(0=(MATRIFY SINL[2;])MATIOTA LS)LS  L5 [7] RECUR is check recursively [8] L2:FLSMATRIFY LS [9] L5:(0F)L9  NaM 0 1 IXfR VR F[1;]  LI[;1]  F 1 0 F  [10] RECURL7  FF OVER B(0=LS MATIOTA B)B((L='')^3=NC NaM)NaM [11] LSLS OVER B [12] L7:N+/B0=IMaT MATIOTA NaM  MaTMaT OVER BNaM  [13] SyM(SyM,'.:'[1+0=5B])N(1,B1+(SyM)[2])'....:'  [14] SyM(SyM,'.')N(1,B1+(SyM)[2])'.'  [15] IMaT MATIOTA NaM  SyM[I;B]L  L5 [16] L9:SORTL10  IAVLS  LSLS[I;]  [17] SyMSyM[;I] [18] L10:I50.21LS add lines every 5th column [19] NBLS[I;]  B,B  B[L/LB' ']':'  LS[I;]NB [20] NBSyM[;I]  B,B  B[L/LB'.']':'  SyM[;I]NB [21] IAVMaT  MaTMaT[I;]  [22] RESULT((((1LS),1+1MaT)' '),LS)MaT,' ',SyM[I;] @(^^ CMDTWS 7;CMDTWS;5;6;8 [1] CMDTWSIDLIST 55  6ELX  7DM  81+/0,FNUMS  5'WCOMPARE'  ELX'1'  (5,' 0')FCREATE 8  2 [2] 1:ELX'DM'  5 FTIE 8 [3] 2:ELXALX'DM' [4] CMDTWS(CMDTWS[;IO]'')CMDTWS all CMD stuff starts with '' [5] 5(WSID,'', 17 0 WSTS)FAPPEND 8 [6] CMDTWS((7,1CMDTWS) 7 4 'LX DM ELXALXSI SYSGRP')CMDTWS(0 4 CMDTWS)CMDTWS [7] CMDTWS'VFG'[(7IO), 2 3 7NC CMDTWS],CMDTWS  5 6 0 SI [8] 55 FAPPEND 8,0/ALX FAPPEND 8,0/6 FAPPEND 8,0/7 FAPPEND 8,0/LX FAPPEND 8,0/CMDTWS FAPPEND 8 [9] 5(IO,PP,PW,CT,RL)FAPPEND 8  5(IDLIST 4)FAPPEND 8 [10] (0<1CMDTWS 7 0 CMDTWS)4 [11] 3:6(((1 3 4 /'VFG'=1CMDTWS)/'CRGRP'),' 1CMDTWS[IO;]')FAPPEND 8  (0CMDTWS 1 0 CMDTWS)3  [12] 4: SA action: clear ? @( CMDVARSLIKE STR;R [1] DanB 93 - Return all variables containing pattern STR [2] STR(+/^\' '=STR)STR [3] RESULTSTR PATMATCH NL 2 A( CMDWSLIB ARG [1] )WSLIB n [2] (ARG^.=' ')L10  ARG11WSID [3] L10:RESULT 0 11 WSLIB FI ARG [4] RESULTFIT RESULT[AVRESULT;] A( xx CMDXREF f;a;b;c;d;e;Cr;Fn;Ln;;IO;w;CMDXREF [1] Cross-reference function [2] wPW  IO1  CrTCNL [3] ' abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'  [4] (0=10w)0  wwPW17>w1w [5] (0=10f)10  ((1f3,f)FNUMS)110 [6] ((11f)>.2FSIZE 1 0 1 /f)120  Fn,FREAD f  40 [7] 10:(f^.=' ')20  f(f[;1]'')fNL 3 [8] 20:f1(a1af' ')/f,' ',f [9] 30:(f)0  ''  Fn(1+f' ')f [10] (3NC Fn)130  (aVR Fn)140  aFna [11] 40:Fn66Fn  Ln1+FnCr  ' ',(1+(LnFn)';')Fn [12] a'',LnFn  ba'  '[1+(+/a' ')+3''a] [13] Fn(ba),(Ln1+b+/(ba)'; ')Fn [14] (c+/bFn'')50  a(c+c+Fn)1 [15] a[, 2 0 .+(b/b)+2c]0  Fna\Fn [16] 50:Ln(FnCr)^(Fn)1Fn'['  (/aFn'''')60 [17] a~a\aLn\d(-d)1dLn/\a  Fna/Fn  Lna/Ln [18] 60:(/aFn'')70  baLn  a~\b\a(-a)1ab/a [19] Fna/Fn [20] Lna/Ln [21] 70:bb(-b)1bFn1 [22] (/bb\d(-d)1d(b/Fn)110)150 [23] ab^d\b  Ln(aLn)/a  LnLn/Ln  LnLn-Ln [24] ad/b  a(a/a),1+a  a/c(1a)-1a [25] a((c),a)(,c.a)\d/Fn [26] c2'[:'.=(b>d)/Fn [27] ba  Fn''  aa[b;] [28] d~^/a=(-a) 1 0 a  ada [29] LnLn[b] [30] cc[b] [31] a(0 4 + 0 11 a)a [32] d1d [33] 80:bd1  Fn('I4' FMT bLn),' :?i'[1+bc] [34] Fn1(e(-e)1eFn' ')/Fn,Fn,' ' [35] Fna[1;],Fn  (wFn)100 [36] 90:ew+1-((w+1)Fn)' '  eFn [37] (w is an invalid name or not a function at this level'  150 [42] 140:'<',Fn,'> is a locked function.' [43] 150:f(f' ')f  30 [44] DanB 1992/05/05 20:55 A( compare 2 workspaces or files DanB 1992 Syntax: ]COMPARE [ws1] ws2 /WS /OBJECT=[]fn /LOAD /NLINES=n /ZONE=z /SHOW=s THIS COMMAND WILL PROVIDE USEFUL INFORMATION ABOUT THE DIFFERENCES BETWEEN 2 FILES OR WORKSPACES. *** NOTE: DESTROYS CONTENTS OF ACTIVE WORKSPACE !!! IF WS1 IS OMITTED THEN THE ACTIVE WORKSPACE IS USED TO COMPARE. /WS MEANS ARGUMENT SPECIFIES WORKSPACES, NOT FILES /OBJECT=obj WILL COMPARE ONLY THAT FUNCTION IN THE WORKSPACES SPECIFIED /LOAD WILL USE )LOAD INSTEAD OF )XLOAD TO BRING THE WS(S) IN OTHER SWITCHES: SEE BELOW. THE FORMAT OF COMPARE IS AS FOLLOWS: THE FUNCTION ON THE LEFT IS ASSUMED TO BE THE ONE WHICH HAS CHANGED. THE FN ON THE RIGHT IS ASSUMED TO BE THE REPLACING FN. THE OUTPUT IS BASED ON THESE ASSUMPTIONS. EACH LINE OF THE FN ON THE LEFT IS PRECEDED BY ITS LINE NUMBER [XX]. WHERE THE LINE HAS BEEN DELETED A SYMBOL APPEARS '-' BEFORE THE LINENUMBER. WHERE A NEW LINE HAS BEEN INSERTED THERE IS NO LINE NUMBERING AND '+' APPEARS. EXAMPLE: FNA FNB [1] SAME LINE [1] SAME LINE [2] FNA LINE 2 [2] FNB LINE 2 [3] SAME LINE 3 [3] SAME LINE 3 [4] COMMENT DELETED [4] NEW COMMON LINE [5] NEW COMMON LINE [5] NEW COMMENT THE OUTPUT WILL LOOK LIKE THIS: -[0] FNA + FNB [1] SAME LINE -[2] FNA LINE 2 + FNB LINE 2 [3] SAME LINE 3 -[4] COMMENT DELETED [5] NEW COMMON LINE + NEW COMMENT NOTE THAT IN ORDER TO AVOID LENGHTY OUTPUT OF BIG FUNCTIONS WITH LITTLE DIFFERENCE ONLY SECTIONS OF THE FUNCTION ARE SHOWN, THOSE WHERE THE CHANGES OCCURED PLUS A CERTAIN NO OF LINES BEFORE AND AFTER. PW IS USED TO DELIMIT OUTPUT OUTPUT SPECIFICATIONS /SHOW=n1 n2 n3 (n) SPECIFIES THE OUTPUT FORMAT FOR EACH OF THE DIFFERENT SECTIONS: THE UNIQUE OBJECTS IN WS1, THE UNIQUE OBJECTS IN WS2 AND THE COMMON OBJECTS IN BOTH WS. IF nx=1 ONLY THE NAMES ARE DISPLAYED, IF nx=2 ONLY THEIR CONTENTS (OR DIFFERENCE) IS SHOWN, IF nx=3 BOTH ARE SHOWN. /ZONE=n WILL DISPLAY SO MANY LINES BEFORE AND AFTER EACH DIFFERENT LINE /NLINES=n WILL DISPLAY THE FIRST n LINES OF EACH VARIABLE DISPLAYED THOSE 3 SWITCHES ALSO APPLY TO THE COMMAND ]compfile.A(Compare FILE - COMPARE utilityFIA(compare function in WS with one on file DanB 92 Syntax: ]COMPFN [.]object /FILE=ucmdfile Will compare the objects with the one on UCMD file. If a period precedes the name then all objects named in object (ex. GRPobject) are compared.redA(Compare 2 character matrices DanB 84 Syntax: ]COMPMAT MAT1 MAT2 Compare 2 character matrices. See ]COMPARE command for details of comparison procedure.uA(Compare two User Command files DanB 93 Syntax: ]COMPUFILE UfileA UfileB Modified from APL*PLUS library. Compare the contents of the 2 files.lesA(dcompare variable in WS with one on file DanB 92 Syntax: ]COMPVAR [.]object /FILE=ucmdfile Will compare the objects with the one on UCMD file. If a period precedes the name then all objects named in object (ex. GRPobject) are compared.reA(<< RSTYLE CUTBACKTO LABEL [1] DanB 941206 Used as in ELXCUTBACKTO L10 [2] DanB 950203 Added STYLE: 0=TCBS back, 1=last msg, 2=whole DM [3] (NC 'STYLE')L10  STYLE1 [4] L10:R' TCBS'  STYLEL20  R(14STYLE=2)'(^\TCNLDM)/ DM' [5] L20:R'(',(LC),'LC)',(LABEL),'ERROR',R A(debarre une fonctionA(rrDOS "DIR" command DanB 93 Syntax: ]DIR path (no switches) DOS 'DIR' command. Result may be captured.reA(-- RDISPLAYFORM Y;ALP;BAD;SPC;SYM;SYM2;TCESC;D [1] simplified version of this common utility (using TEXTREPL) [2] IO1 graphics converted to [XXX]: ^[32], ~[34], `[35] [3] ALP'ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz' [4] SPC'0123456789!#$%&*()_+]|:"}<>?-=[\;''{,./^~`' [5] SYM'G<[999]>' FMT AVBAD(~AVALP,SPC)/AV [6] SYM2 7 5 '[BEL][BS] [DEL][ESC]',TCLF,'[LF]',TCNL,'[NL][NUL]' [7] SYM[BADTCBEL,TCBS,TCDEL,TCESC,TCLF,TCNL,TCNUL;]SYM2 [8] D(D' ')/D,'.',BAD,'.',SYM [9] RD TEXTREPL Y A(dDistribute a file to data entry operators DanB 93 Syntax: ]DISTR file /OPERATOR=names This command will copy a file in J:\SHARED\TECHDEV\DATANTRY to the subdirectories names in switch OPERATOR (default CM MGL and KGAV).AV)A(;;replace specific characters and space between them by line drawing characters DanB 94 Syntax: ]DRAW varname /STYLE= /MASK Some characters are used to generate SIMPLE lines in character matrices. The '+' denotes corners, '' denote line edges. For example: + + Ŀ EXAMPLE will produce EXAMPLE   Ĵ + + /STYLE allows to change the lines style by a 4 digits number representing the single(1)/double(2) look of the Horizontal outside, Vertical outside, horizontal inside and vertical inside lines as in /STYLE=2211. /MASK allows to mask text. If used text will be replaced by lines where line drawing now appear.eA(''same as ]UEDIT with /F=file option and automatic replacement DanB 92 Syntax: ]ED object /FILE=ucmdfile Faster than ]EDIT. Will also work on objects on stack and different files. NOTE: will destroy object in workspace if different. Does not work on packages or locked fns.fA(DMA(< RA EMMAFN B;C;ALLNAMES;E;F;G;H;I;N;IO;L [1] Bring EMMA fn in. A is 0 for fn with F fns, 1 without (no ) [2] or +2 if using 'e' prefixed fns [3] RDEF 'RL R',TCNL,'[1]R[(R='''')/R]''''' [4] (FNAMES^.=C' 244 EMMAFNS2 ')/a  FUNTIE(243FNUMS)243 [5] C FSTIE 243 10383483 [6] a:IO1  (1A,A)e  (A 0 1 2 3)e  R''  ((2\M1\M3  NUMM1/VR  NUM[(NUM'[',TCNL)/NUM]' ' [9] (RRFI NUM)ERR  (' '=10RDEF VR)OKAY [10] (R[1]=2)L3 check for line too long [11] L2:'***- DEF ERROR ',(R),' ON ',FN [12] L3:(VR^.=' ')NONE [13] VR[VRTCNL]' '  INDVRTCNL  HDRINDVR [14] H' ;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' [15] (^/HDRH,TCNL)L2  LOC(LOCALSHDR';')HDR [16] HDR(LOCALSHDR),(LOC' ')/LOC [17] VRHDR,INDVR  OKAY [18] NONE:'***- ',FN,' NOT FOUND ON REMOTE.'  0 [19] ERR:'***- LINE NUMBERS NOT SEQUENTIAL.'  . [20] OKAY:DD0  '*- ',FN,' DEFINED.' B( D_ GETVAR V_;SH_;VR_;T_ [1] Retrieve Variable from MainFrame [2] (0=NC 'D_')L1  D_0 [3] L1:ERROR(~IMMEXEC)/'MF NOT IN IMMEDIATE EXECUTION MODE' [4] ERROR(2MFOBJCLASS V_)/V_,' NOT A VARIABLE' [5] NOTES: won't work for objects larger than 255 due to extra CRs sent [6] TCDELs are NOT transmitted [7] character structures of more than 2 dims won't work [8] 0 0 SENDRAW 'PW255'  SH_MFOBJSHAPE V_  VR_MFXLTED V_ [9] (MFOBJNUM V_)CHAR  VR_[(VR_TCNL)/VR_]' '  VR_SH_FI VR_  L3 [10] CHAR:(2>SH_)/L3  VR_SSMAT TCNL,VR_ [11] L3:V_,'VR_'  ((~SH_VR_),T_)T_'WARNING: SHAPE DIFFERS' [12] D_0  V_,' DEFINED.' B(LGET object from MainFrameameB(referenced globals DanB 92 Syntax: ]GLOBALS fn /FULL /FUN /VAR /FMT /UPD This command will produce a list of a function's global references. It will allow to see the names of objects which are referred to globally. If the /FULL switch is supplied the globals referenced by sub-routine calls will also be shown. If the /FUN switch is used ONLY, the objects referred to are visible FUNCTIONS only. If the /VAR switch is used ONLY, the objects referred to are visible VARIABLES (or unknown) only. If the /FMT switch is used, the result is shown in readable format. If the /UPD switch is used, the result is inserted in the function. Note that is being taken in account but that its use may not be interpreted properly. Text in functions with is scanned between the character and the next  character on each line where it appears only. Same applies for ELX and ALX.B(CMDADDR ADDR PARSE DEFAULTULTB(e**PARSE DEFAULT CMDALIGN LJUST LJUSTOBJMPB(CMDBIND NOPENB(X%%CMDBM VTOM VTOMOBJ PARSE DEFAULTULTB( PARSE DEFAULT CMDCALLS CRFROMVRXc1 Xcompare Xdf Xeq XfR Xft Xgensymb Xmv Xqz Xrd Xtreegen .B(A  CMDCOMPARE clearfile comparefilesSVM compv compack compbool compfn compind compvar display fit fncr jdmr1 mcomp unique vm PCHK PNC PVAL PSEL PACK PARSE DEFAULT C(CMDCOMPFILE SVM compv compack compbool compfn compind compvar display fit fncr jdmr1 mcomp timen unique vm PCHK PNC PVAL DEFAULT PARSEC(TTPARSE DEFAULT CMDCOMPFN ADDR CRFROMVR compfn mcomp compbool compind unique jdmr1C(d55PARSE CMDCOMPMAT compbool jdmr1 compind unique ADDRDDRC(UUCMDCOMPUFILE ADDR CRFROMVR compfn mcomp compbool compind unique jdmr1 FTIMEREP FITFITC(ppCMDCOMPVAR compvar compack SVM vm compfn compv fit display fncr mcomp compbool jdmr1 compind unique ADDR PCHKC(hCMDDEBARC(%%CMDDRAW WHERE Borders PARSE DEFAULTULTC(d##CMDED ADDR NC OHL PARSE DEFAULTiC(0EEPARSE DEFAULT ADDR NC EDIT OHL XfR Xeq Xc1 Xrd Xmv Xqz Xft CMDED ;XC(CMDFIT PARSE DEFAULTENC(66CMDFLOC DISPLAYFORM TEXTREPL WHERE ASCIIAPL TRANSLATElgC(`CMDFNSLIKE PATMATCHC(CMDFPADD GRPPACKC(pCMDFPDEF GRPPACKC(d##CMDFRDCI CMDTIMEFMT DEFAULT PARSEX @pPf0(`\H,D$@ x 8` t|X\!|(l 347d?Xw@\I(MhN4O$(>(P>$t>(>(>(>,?0H?$l?A4LBBLDEE8FF,G@H@HIKpL(NLNhLOxOp4PPP0R8W,X]]TLaxdDfgg`x(t  |0dT~lTXX12p3H5(8p8|99<$<,=@ (J(KLNPOQX,HX h^X_ a$Db,ph0hThPDixjk kxPl4`X84, {PDX 8X|ԤX \,$ x,D(CMDNOCLASH PARSE DEFAULTTTD(|66CMDOBJECTS XfR Xeq Xc1 Xrd Xmv Xqz Xft PARSE DEFAULTTdD(l""OHL CMDOHL ALLFNS PARSE DEFAULTLTD())CMDOSR OS VECTORIZE PARSE DEFAULT OSROSRD(8CMDOSS OS OSS PARSE DEFAULTTMD(CMDRENUM OSR PARSE DEFAULTD( CMDSEND CLEARMF IMMEXEC SENDFN SENDVAR AV SENDRAW COM1 XLTLINE MODLINE TRANSMIT LPOS ASCII CH WHERE SEND_DATAD( ALLFNS ffnAD(!!PARSE CMDSHOW OBJDATA FTIMEREPREPD(CMDSIZE PARSE DEFAULTUE(CMDTAG PARSE DEFAULTT E(CMDTONFILE PARSE DEFAULTTTE(OSS ALLFNS CMDTRACEBACKE(//PARSE DEFAULT CMDTREF XfR Xmv Xc1 Xeq Xrd XqzQE(CMDVARSLIKE PATMATCHE( CMDWSLIB FITE(6PAp:j CKz  ;;7 5^  00010000ERROR(-IO-DMTCNL)DM.(/,  ( DPCHK) ) > [(, ) 0;]# Copyright (c) 1987, I.P. Sharp Associates 00020000 :  []pchk |    ;;  00010000ERROR(-IO-DMTCNL)DM.(/ , ( DPNC) ) > [  0;]# Copyright (c) 1987, I.P. Sharp Associates~    ;;  00010000ERROR(-IO-DMTCNL)DM.(/ , ( DPVAL) ) > [  0;]# Copyright (c) 1987, I.P. Sharp Associates   ; ; ;;00  00010000ERROR(-IO-DMTCNL)DM.(/ , ( DPACK) ) > [  0;]# Copyright (c) 1987, I.P. Sharp AssociatesH V0005000   ;;  00010000ERROR(-IO-DMTCNL)DM.(/ , ( DPDEF) ) > [  0;]# Copyright (c) 1987, I.P. Sharp Associates    ;;;; ; ; ;  COM1 00010000 ;   .( ./  ) DEBARDO 00020000# Only works for 1 name at a time  00030000 ( )  FORID 00040000  . >(/ )/ DOMAIN ERRORDOC  00050000-0 #[1]PDEF 222PACK 43    ;;;; ; ; ; s a 00010000 ;       .(  )  ist files i 00020000    >( )/ DOMAIN ERROR 00030000-0 /[1]PDEF 222PACK 3[(3)~4;] i3    ;;; ; ; ; SYSID ;PA 00010000>((/ )/ )/ DOMAIN ERROR 00020000      H0;P 00030000-0(; )(; )=[1]PDEF 11PDEF 221PACK(,' ',3),,' ',4   ;;  00010000ERROR(-IO-DMTCNL)DM.(/ , ( DPNAMES) ) > [  0;]# Copyright (c) 1987, I.P. Sharp AssociatesNOPQR   ;;;   00010000ERROR(-IO-DMTCNL)DM987, I.P. S 00020000>(/ )/ DOMAIN ERROR 00030000.(/71) >(R )/ DOMAIN ERROR>(-  )/ RANK ERROR 00040000       7 >( )/ DOMAIN ERROR. ,( 00050000 :    7 (PEX 00060000 : /  (0 ) (  )  CDEF 00070000# Copyright (c) 1987, I.P. Sharp AssociatesEF   ;;; ; ;  00010000       .(  )  00020000>(   )/ DOMAIN ERROR 00030000-0(; )[1]PDEF 222PACK 1   00010000 ([ ])0[]R HPGSEP90PAp:Q  CKXE:p2,2O2,Zbje\eeee w||wq)tvyPwD@)%     .V.X.*..,.7s.6t8B....>,5v / u..x.>,6v5P t.R.xT.z@R&Z.~.|.>,7vp.|..6.L..V=w.X.t =t33t=t.V23S.VRQYZ[D./Ŏ3Q2ȋ<V^VŎؾ^+ Y3..2.P.Z t.P .v.f.\.t..Z.`t.>u .>rv.f." u s.rw.V.3Ѓ...VɎ.>fu4.-..,.... 3.j..Z.`.\.t.rt.=v.f@P.hȃy3.^MY..Z.`.\.t.V.j.r;tMQPS.^_[X;s+S.;uPXu[Y[Xbf.h.n.+j..+j&+..@@.p3.uw...>u.SWP.^X_[.j&>.>t& && &.Vt .n33.-..,..f. .j .j te.".h.r.Dts.;"~."..>L t|t |w.+L3һ .t&=t~.h.&.>v&1D t{\fs.Z.`.\.t\.>u t .r9t<~.h..t.6v&&x..f3.t.6v..f=Mv[&?tLs:S.r.+j.V&.j.r.Z&.`.\&.t[&u tÉ3.t.n .P.Lx.;frV.^.t.6v.n3.p.f=Mv+V.|^t+&.j؉QȭV.`^YCC t..2.P.4.N .S .>,6r1.>u).n.6p. .j&t.P.R..X?t5t.>f3[t˽t|tu.> 3tdt ..>2.R.Z 3.n.6p. FFu;r.>p&%3.n.6p. xHV.+6pxNt^ÀljT^t".j$u 1 tFF3.>,7rP.>xtH.) .n.6p. .x#.+p_P .)) Xt AnyFF3.jQ>u>tp.) Y.jQ>u>t @.) Y.N.+) .n.6p. .x-.+p_&t.j؉&L FF3.n3.t T3. .n3.|.pt0.j&؉>ߠPSu K_q [X 3.>,7rL.>xtD.) . .n3.|Pa .)) X.pt oyÃ3)t .X.?uˎt.>ftDt.n3t.j;r.p& uu.>ut1t_.Z ..V&$ 3QS.n.l;s  u3 [Y.j .nP.t8.>,6v QS [Y%ؠ ut  Xtˌ؎.X.?u>&1.n.6p.jut3.ft.>ft.f,".fW] =r__3.V..X.`.Zu/;s+.>p&u.jؠt3[Y_WQS3.`.>b.;>ds[&<t,.d+ tFOAuA.>b+& .b uOAuA3VQS.t.6v.<WVQ=Mv .: u :u 4.`tY^_FFY^_3[Y^ VQ~MuI t,u3Y^<Ar<Zv<ar <zv <t<t:<0r<9v .>,6r<_t:.`>vu<tÀv2.b*.d<ut4> u-.fWQS؎.>b.d+3۰ tCt[Y_=v.f3. UR,Z]ur.n3|t< W_LS.r3.rë3QX%t+Ȱ.+jG[ì<Q2YRP&t$x":uWV<wG&E^_t :XZWQV.R.2<~  ..>L^uV.+L3һ. ;s6V.6p^x'&Et=w=ؠu  u(&<u:..L;s ?th`.+L+.WV< &>&&$&^_}..;Ru.R׃3Y_WRQP..>L.R.P+2.>T.R.P+2XYZ_RP.N@.L.TXZVQ2 F2F..6T.6Y^VQSP.j.n3<~X[Y^uVSt[^VRQЬ2PFFZYZ^WVRQ.ر.._V.s&.7CC- .L.SV[GGYZ^_S>t>us>rl.; ub.(;uX;uY;wPt@;u4$,8r-P t .L+ɰXtDtE..604..عdDt u;\t`u tt 3[Y^P.j.l.n@@.pXWVQɎY^_.>,7r.>xtS.[.>,uQSPX[YUWVRZ^_]q.>,7rf.>xt^QSP..p+t,7r.>xtQPSf [u\XYSR. t.t(.+L.x.zGtg Z[SQR.+L.x.zGtZY[.>,7s.>xtRQSPP$u tXQaZ.+L.x.zGt$QG$p t  GY.)NW+u]_X[YZRP.;|r+.6~ t@XZ+u &u0002000 DOMAIN ERROR SYNTAX ERROR RANK ERROR LIMIT ERROR SYMBOL TABLE FULL PKG SYSTEM ERROR APL VER NOT SUPPORTEDPKG VER NOT SUPPORTED(RESERVED) VWS FULL  imatiotamSStoMATPCHK PVAL PACKPDEFPEX1PINS!PNAMES%PPDEF)PSEL-PSYSID1PACKBIN5PACKERRS^PNC_`abPEXcdefghi02314210345mv\]DEB0,9F^qNE(`TEST CRFROMVRE(VTOM LJUST FRDBLE(X DEB DEBOBJE(FRDBL FRDBLOBJOBJE(LJUST LJUSTOBJOBJE(RJUST RJUSTOBJOBJE(TELPRINT TELPRINTOBJLE(VECTORIZE VECTORIZEOBJOBJE(<VTOM VTOMOBJE(4show hexadecimal equivalent of argument DanB 93 Syntax: ]HEX n1 [n2] [...] /BACK /CHAR Show hexadecimal equivalent of argument. /BACK will work backwards (from hexa to decimal) and /CHAR will work assuming characters (as opposed to numbers). Example: ]HEX 16 256 0010 0100 ]HEX 10 100 /BACK 16 256 ]HEX 16 /CHAR 0031 0036 UCMD 'HEX 41 36 /BACK /CHAR' A6 2E(  manage workspace history DanB 940328 Syntax: ]HISTORY comments /VERSION=n.nn Updates global variables 'WSVERSION' and 'HISTORY' by adding the comments to the 'HISTORY' global along with the date and the version number. /VERSION may be a new version number or an increment (like 0.1)E( RIMMEXEC [1] RETURN WHETHER MAINFRAME IS IN IMMEDIATE EXECUTION MODE [2] R 13 10 0 48 13 10 0 32 32 32 32 32 32 7 AV SENDRAW '0' F(55search string IN FILE DanB 93 Syntax: ]INFILE word1 w2 'string 1' etc... /FILE=tie or filename/EXEC/WINDOW=w This command will allow to search a file for specific words or strings in a perticular file. /FILE is compulsory and must be assigned either a valid TIE number or an accessible filename. Result roughly shows component number / indices where found (one index per dimension) in origin zero. If /EXEC is supplied the argument is executed (). If /WINDOW is supplied with a number it is used to show the text around the matches.hesF(downloads APL character set to printer Syntax: ]INITP /[DR|LQ] /DR (default) is DRaft quality /LQ is Letter QualityF(!!packages file manipulation systemtemF(0llINPUT TEXT INTO VARIABLE (ARG) DanB 92 Syntax: ]INPUTXT X X will contain all text entered until SPACE, CR.F( erase everything but the objects necessary to run the argument (fn) DanB 94 Syntax: ]KEEPFNSOF fn is searched for all globals and fns called. The ws is then cleaned of the unneeded objects. NOTE: this won't work if or error handling thru comments are used.sedF())SIZE OF EACH FILE; POSSIBILTY OF DELETIONIONF())Show LIBs where to find wss DanB 93 Syntax: ]LIBWHERE wsorfile /FILE /LASTLIB=nn This command will show the libraries where the workspace (or file if /FILE switch is set) reside. Libraries 1 through 20 are searched. To change the upper library search limit use the /LASTLIB switch.tchF(smart ]ULOAD with pattern and from packages DanB 92 Syntax: ]LOAD pattern(s) /PACK /REP /FILE=file /PACK will bring value(s) from package if any /REP will replace objects in the workspace /FILE=file will use to search for objects Same as ]ULOAD but smarter. Often objects are used which use other objects. LOAD will bring all the objects defined in groups it encounters. For example, if the pattern contains objects which have a group of the same name (that is preceded by the letters 'GRP') then those will be brought in and the process will be repeated for each one of these items.eF(}}Return list of LOCKED fns DanB 92 Syntax: ]LOCKEDFNS (no switch) Return list of LOCKED fns. Result may be captured.redF(" s LOGMSG msg;ELX;t;f [1] DanB 9511 log message in monitoring file [2] empty msgs are skipped - any error is disregarded [3] s is switches: 'r' means allow resize, 'u' untie file if untied before [4] (0msg)0  (NC 's')l10  s'' [5] l10:ELX(('r's)/'(''FILE RES''8DM)RES'),'0' [6] f' MONITOR '  (t(/fFNAMES)/FNUMS)tied [7] f FSTIE t((t)t0,FNUMS)0 [8] tied:f(WSID msg) FAPPEND t  FUNTIE(('u's)>t)t [9] 0 [10] RES:(1.112FSIZE t)FRESIZE t  tied F(77Add entry to log file See ]MONITOR command for detailsF( SS RMFOBJCLASS NAM [1] R('01234'SENDRAW 'NC''',NAM,'''')/ 0 1 2 3 4 IF(bb RMFOBJNUM NAM [1] Is object on MainFrame NUMeric ? [2] R'0'SENDRAW '10',NAM w F(l[[ RMFOBJSHAPE N [1] RSENDRAW '',N [2] RFI R~TCNL,TCLF,TCBEL,TCNUL F( RMFXLTED EXP [1] Send EXPression to MF and XlaTe result [2] R 1 1 0 1 0 ARBIN EXP,TCNL [3] RTOAPL 1 1 2 1 1 32767 7 ARBIN '' F(:: RLN MODLINE LINE;L [1] Change special characters into their MainFrame equivalent [2] (NC 'LN')VAR [3] FN line [4] LINE(' '.LINE)'',LINE [5] LINE(~1LINE SS ' ')/LINE  L0 and command ]LOG will append a message to the file in the proper format.t.F(xshow SOUND argument to play a string in MORSE code DanB 92 Syntax: ]MORSE string /TEST /FREQ= /PER= If /TEST is used SOUND will play the string. /FREQ and /PER are used to modify the frequency and period of the play.G( dMold Mcomp Mnew;keep;new;IO;del;n;;i;l;old;b;og;r;ng;P;t;Mns [1] Matrix comparison by line [2] returns the lines to delete as negative numbers and [3] the lines of Mnew replacing the lines of Mold in pairs [4] [5] - The number of lines we keep must match the number not new [6] IO1  n1MnsMnew  newn1 [7] - try to find the solution that minimizes the moves [8] keep>10,\PMnew ROWFIND Mold  tt>10,t/iMold ROWFIND Mnew [9] ((+/keep)+/t)cont [10] - exchange the positions: [11] P[(t0)/i]0  keep>10,\P [12] cont:deldel/del~keep  n0,keep/keep [13] each section of 'new' is delimited by the ending '1' which must be moved [14] new[keep/]0  lt  rr/+\new,0 [15] - gaps are filled according to the position where they were kept [16] ngr-10,r  og1+-(n,999)[1 0 .+ntl/(~0,new)\n] old/new gaps [17] b0=1t newlines og,[0.1]ng  n+/bb^ /FMT /SORT This command will return a list of ALL objects referenced along with their type. Result may be captured. See command CALLS for meaning of result. /SORT will sort the result using AV sequence /FMT will separate TYPE from NAME and make the result fit PW G( ROHL FN_;M [1] Order Header Locals [2] M';' MATRIFY CRL FN_,'[0]'  RM[IO;]  M1 0M [3] MM[AVM;] [4] RDEFL FN_,'[0]',R,(,';',M)~' ' G(rreOrder Header Line of a fn DanB 92 Syntax: ]OHL [fn] Puts the list of locals in alpha order. If is not supplied it is done for the entire ws.G(| nCOSR OSR sR;IO;DeF;aLl;hId;rEp;sRh;F;Lu;Mv;N;Up;c;n;pO;pU;v;0;1;2;6;7;8;9 [1] danb 86..96 - Object Search and Replace - version 4.61 [2] IO0 ~ sR aLl hId sRh OSR pO Mv pU 1 0 Lu rEp 2 DeF Up [3] (NC 'OSR')/10  OSRNL 3 [4] OSR could be TIE , start, last cpts, increment [5] 10:(N0101OSR)15  6211,(,1)20,(2FSIZE 11),1 [6] 6[2]1[2]2[2]  OSR6[3]-F0,6[3],0  25 [7] 15:OSR1(111OSR' ')/OSR,' ',OSR [8] 25: set variables from arguments [9] nC'ARG LENGTH ERROR'  (20(8/8sR1sR),sR)/0 [10] ~Body, ~Text, ~, Apl, L/R syntaxic, RESULT, no lcal;global(), [11] case Insensitive, search Numeric [12] n12 2 11 'btcalr=;inBTCALRIN'10[1]sR [13] nC(~2[6])0  (^/2[7 8])EnD SCALNUM RESULT; VECSTR RESULT [14] aLl'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'  [15] aLlaLl,'0123456789_' Special characters [16] Build locals functions [17] The Partitionning fns [18] 9FX((9)'rs pO p;t'),[0.1]9'sspr\s\t10,ts/p'  [19] 9FX((9)'rs pU p;t'),[0.1]9'r\ps\t10,ts/\10,p'  [20] The MAT from String [21] 9'IO1L1L-1+1L(~D)/DDMV,D1VM(D)(,DL./L,D0)\D/M' [22] (3NC 'MATRIFY')27  9'MV[0]MATRIFY V' UCMD fn available? [23] 27:9FX((9)'MMv V;D;L;IO'),[0.1]9  [24] 2[9]30 The UPPERCASE fn [25] Lu 2 26 aLl  9'BB/BR[B]Lu[0;Lu[1;]R[B]]' [26] 9FX Mv 'RUp R;B(/BRLu[1;])0',9  [27] 8[0]0  68/6\8  sR[6]Up sR[6] repl all cases versions [28] 30: [29] c61,'',[0.1]2[3]/'BTC' ...perticular constraints [30] (sR(111)/10[1]sR)EnD all strings together [31] 1(10)-101-11-1110 start of each str (0), length (1) [32] Mask fn: Comments, Text, Body, Diamonds, Apl [33] 9'BCTT>CL pO(M'''')>TTL pU TM'''''''''  ~APL text [34] 2[3]35 [35] 99,'A(''ELX''A)(''NC''A)(''IDLOC''A)''''=A,M'  [36] 99,'BCTT>(LB^M'''')pO A'  APL text [37] NOTE: {error:trapping} NOT taken into account [38] 35:8'RV hId M;L;C;T;B;AR1LM=TCNLV/2RR',6 [40] search fn [41] 8(/2[4 5])/'s1~taLl' PREPARE SYNTAXIC CODE LOOK UP [42] 7(2 12 /2[4 5])/'^s^(1+1[i])s' LR [43] 9'rV sRh t;m;S;z;n;s;ir0 2i0n1mV hId t',8  [44] 99,(/2[7 8])/'S11S/St=1t'  HEADER LENGTH [45] 99,'l:zsR[0[2i]+1[i]]',(4~2[9])'Up t'  iNSENSITIVE [46] 99,(/2[7 8])/'(',2[7]'~/Sz)e'  LOCAL/GLOBAL [47] 99,'zz^m',7,'rr,[0](z/z),[.1]i'  [48] 99,'e:(n>ii+z1)/lrr[r;]'  ORDER RESULT TO PREVENT OVERLAP [49] 7FX Mv 9,'L:(^/s\z10,1[r[;1]]+zr[;0])/0rsrL'  [50] replacing fn [51] 9'L22[wP[;1]]L1(1,0)[w]K(B,T)-0,L1+BP[;0]B(2K)1 0T((,K,[.1]L1,0)/B)/TT((,K,[.1]L2,0)/B)\TT[B+L2/+\1K]sR[(B+/L2)+L2/0[1+2w]-10,+\L2]'  [52] 7FX((9)'TP rEp T;K;L1;L2;B;w'),[0.2]9  [53] [54] 2(2,0.51)1  12[;0]  22[;1] 0:start; 1,2:len [55] N/FiL [56] LuP:(OSR)EnD  (v2NC 8(OSR' ')OSR)/VaR  DeFVR 8 [57] Search and Replace [58] L30:(07''9v sRh DeF,TCNL,DeF)/NeX [59] replace in environment. search performed on vectors, vector result [60] DeF9 rEp DeF  v/L35  TCNL used to matrify - BEWARE! [61] (9nCnC+79~010DEF 1DeF)/NeX  'not ',8  NeX [62] L35:v2>6  DeFvDeF  v/L40 [63] 9DeF((16),19)9Mv DeF  [64] (0.>v6-9)L40  (0' '=(6(-6)1)DeF)L40  DeFvDeF [65] L40:nCnC+7  N/FrP  8,'DeF'  NeX [66] FrP:DeF FREPLACE 2OSR  FiL [67] Variables [68] VaR:DeF8 character only. [69] L50:(2PNAMES DeF)NeX  (' '10DeF)NeX  6DeF  L30 [70] Get next item to search [71] NeX:N/FiL  OSR(1+8)OSR  LuP object or file  [72] FiL:(/1OSROSR+F)/EnD  DeFFREAD 2OSR  L50,v1 [73] EnD:(nC)0  nC(nC),' REPLACEMENTS MADE.' G(Object Search and Replace DanB 87 OSR: Object Search and Replace Syntax: ]OSR str1 repl1 [str2 repl2] [... ...]/X=bct;/A/L/R/I/O=obj/F=file Switches: See command OSS for details. This is command OSS counterpart. This command will search AND replace. Examples: ]OSR abc xyz replace 'abc' by 'xyz' everywhere ]OSR abc xyz /L/R same but for both left and right strings, in other words for the exact element 'abc' with no number, , , alphabet or around it. ]OSR abc Z999 /X=C replace abc by Z999 everywhere except in the comments ]OSR filA filB /X=BC /O= Fa Fb replace all occurences of filA by filB in the quoted text only of functions Fa and Fb. ]OSR x y y x/L/R/O=>F swap all occurences of 'x' and 'y' names in function and its called functions. ]OSR 'C/L' 'L IF C' replace all those occcurences everywhere. Note the use of quotes to enable the replacement of slashes and spaces. Restrictions: See command OSS. Comments: Large functions are more likely to create problems than smaller ones. Replacement of quotes (') WILL create FiXing problems. Syntaxic search is based on not having any of the name forming characters around the string to search. Using '/A' switch slows down the program dramatically. Shape of variables almost always changes as the lengths of replacement strings differ from their originals. Using /X=BCT/A only makes sense for functions or variables holding CR (VR) of functions. Note that in the latter case the line numbering is also subject to replacement. enG(X_ _ nCOSS OSS sR;aLl;hId;sRh;IO;0;1;2;6;7;8;9;F;Mv;N;T;pO;v;c;Up;L;n [1] DanB - Object Search String - Version 4.5 [2] 7IO0 ~ sR aLl hId sRh OSS pO Mv Up L [3] (NC 'OSS')/10  OSSNL 3 [4] OSS could be TIE #, start, last cpts, increment [5] 10:(N0101OSS)15  6211,(,1)20,(2FSIZE 11),1 [6] 6[2]1[2]2[2]  OSS6[3]-F0,6[3],0  25 [7] 15:OSS1(111OSS' ')/OSS,' ',OSS [8] 25: set variables from arguments [9] 0(9/9sR1sR),sR mode, strings [10] ~Body, ~Text, ~, Apl, L/R syntaxic, RESULT, no lcal;global(), [11] case Insensitive, search Numeric [12] n12 2 11 'btcalr=;inBTCALRIN'10[1]sR [13] c61,'',[0.1]2[3]/'BTC' ...perticular constraints [14] nC(2[6],0)0  (sR(111)/10[1]sR)0 all strings together [15] 1(10)-101-11-1110 start of each str (0), length (1) [16] aLl'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'  [17] aLlaLl,'0123456789_' Special characters [18] Build locals functions [19] The VTOM fn [20] 9'IO1L1L-1+1L(~B)/BDMV,D1VM(B)(,BL./0,BL)\B/M' [21] (3NC 'MATRIFY')27  9'MV[0]MATRIFY V' UCMD fn available? [22] 27:9FX((9)'MMv V;D;L;IO'),[0.1]9  [23] 2[9]30 The UPPERCASE fn [24] L 2 26 aLl  9'BB/BR[B]L[0;L[1;]R[B]]' [25] 9FX Mv 'RUp R;B(/BRL[1;])0',9  [26] sRUp sR search uppercase version? [27] The \ Partitionning fn [28] 30:9FX Mv 'rs pO p;tsspr\s\t10,ts/p'  [29] mask fn: Comments, Text, Body, Diamonds, Apl [30] 9'BCTT>C\(M'''')>TT\TM'''''''''  non APL text [31] 2[3]35  99,'BCTT>(M)(,1,0 1B^M'''')'  APL text [32] 99,'pO(ASS''ELX'')(ASS''ALX'')(ASS''NC'')''''=A,M'  [33] NOTE: {error:trapping} NOT taken in account [34] 35:9FX Mv 'MhId M;C;T;B;A',(c/9,'M~',6),(~c)/'M1'  [35] search fn - arg is rank 2 [36] 9'RsRh T;H;M;S;N;s;I;W;ELX(0ST)RI0MhId TN1'  [37] 99,'ELX''(33T),TCNL,DM0'''  8/2[4 5]  L/R [38] 99,(8/'s1~TaLl'),'T',(2[9]/'Up'),',T'  7/2[7 8]  [39] 99,'L:WsR[0[I]+1[I]]RR',7/'(',(~2[7])'~1S[1]H)^H'  [40] 99,'(ST SS W)',(2[4]/'^s'),(2[5]/'^(1+1[I])s')  [41] 9FX Mv 9,'(N>II+1)/L',c/'RR^M' [42] N/75 [43] 40:(0OSS)70  (v2NC 8(OSS' ')OSS)/60  6CR 8 [44] Search and count [45] 45:(12/9sRh 6,TCNUL)70  7+/,9 0 1 29 [46] Display if any found [47] (1nC)/70  T(2 6 ' Var ')[v;],8  N50 [48] T(2OSS),':',(-vvT' ')T6[0;] [49] 50:TCNL,T,' (',(7),' found)'  T-+/^\' '=626 [50] Lines found displayed here [51] 55:(,'P<[>Q<]>I5,X1' FMT 21),T[0]6[0;] [52] ' ',(T[0]9[0;])\'^' [53] (09 1 0 9)/70  6 1 0 6  2[21]0  T1T  55 [54] Variables [55] 60:68 char mat only [56] 65:(n9' '106)70  (n>9)67  66 [57] 67:(26)/45  6Mv,TCNL,6  45 ensure matrix for search [58] Get next item to search [59] 70:nCnC,7  N/75  OSS(1+8)OSS  40 object or file  [60] 75:(/1OSSOSS+F)0  6FREAD 2OSS  65,8v0 G( Object Search String DanB 88 This command will scan for the strings given as argument in the ws. It can be restricted to specific object names and conditions. Syntax: ]OSS word1 [word2 [...]] /L /R /C /N /X=bct; /A /O=object /F=file Switches: /L Left syntaxic search /R Right syntaxic search /X=eXclude Body of fn, Comments, Text, local(;) or non local() text /A APL mode: Body includes text to the right of ELX, ALX , /O=[|>]NAME1 [NAME2] ... to limit Object search list /F=filename will search the file instead of the workspace. Tie number may be supplied instead of filename possibly followed by start/end components. /C Case insensitive /N Numeric variables to be searched as well The search can include/exclude the APL statements, the text (between quotes) and the comments. It can also do the search syntaxically, either to the left, to the right or both as the switches specify. If global references are wanted use semi-colon (;) as argument to the eXclude switch. If local references are wanted use quad () instead. It operates on all functions in the whole workspace but can be restricted to specific objects, functions and their calling tree or variables, or each character component of a file. The function uses local names which may clash with the names to search (see the function header) and will operate more or less rapidly depending on the type of search in effect. The /A (APL) switch modifies the behaviour of the /X (eXclusion) switch in the sense that text that would be executed ( or ELX...) is considered code. Examples: ]OSS abc show all occurences of abc everywhere in all functions in the ws ]OSS abc/R show all 'abc' right ending strings. ]OSS abc/L same but for left starting strings ]OSS abc/L/R same but for both left and right strings, in other words for the exact element 'abc' with no number, , , alphabet or around it. ]OSS abc/X=T show 'abc' everywhere except in the text ]OSS abc/X=cT/A show 'abc' everywhere except in comments and the text which is not considered APL code (like ELX'abc') ]OSS Sharp/X=BC/O=fn1 test show all occurences of 'Sharp' in the quoted text only in the objects 'fn1' and 'test' ]OSS x y /L/R/F=MF show all occurences of 'x' and 'y' names in file ]OSS 'l if c' 'c/l' /X=C /O=>SFN /C search for strings (ignore case) which include spaces and slash outside of comments in fn and ALL other fns it calls ]OSS 1.05 /O=NL 2 /N search '1.05' in all variables, incl numeric Restrictions: Large functions are more likely to create problems than smaller ones. Syntaxic search is based on not having any of the name forming characters around the string to search. The ability to search the calling tree depends on having the user command available.abG(  0PACK 2;3;4;ELX;ALX [1] ELXALX'ERROR(-IO-DMTCNL)DM'  (0=2(0,PSYSID,STPTR 'PACK')CALL PACKBIN)0  ERROR PACKERRS[2-~IO;] Copyright (c) 1987, I.P. Sharp Associates G(1  HPGSEP90PAp:CKXE:p2,2O2,ZrZZZZZ 3{5{5{5{zNd.@@)%     .V.X.*..,.7s.6t8B....>,5v / u..x.>,6v5P t.R.xT.z@R&Z.~.|.>,7vp.|..6.L..V=w.X.t =t33t=t.V23S.VRQYZ[D./Ŏ3Q2ȋ<V^VŎؾ^+ Y3..2.P.Z t.P .v.f.\.t..Z.`t.>u .>rv.f." u s.rw.V.3Ѓ...VɎ.>fu4.-..,.... 3.j..Z.`.\.t.rt.=v.f@P.hȃy3.^MY..Z.`.\.t.V.j.r;tMQPS.^_[X;s+S.;uPXu[Y[Xbf.h.n.+j..+j&+..@@.p3.uw...>u.SWP.^X_[.j&>.>t& && &.Vt .n33.-..,..f. .j .j te.".h.r.Dts.;"~."..>L t|t |w.+L3һ .t&=t~.h.&.>v&1D t{\fs.Z.`.\.t\.>u t .r9t<~.h..t.6v&&x..f3.t.6v..f=Mv[&?tLs:S.r.+j.V&.j.r.Z&.`.\&.t[&u tÉ3.t.n .P.Lx.;frV.^.t.6v.n3.p.f=Mv+V.|^t+&.j؉QȭV.`^YCC t..2.P.4.N .S .>,6r1.>u).n.6p. .j&t.P.R..X?t5t.>f3[t˽t|tu.> 3tdt ..>2.R.Z 3.n.6p. FFu;r.>p&%3.n.6p. xHV.+6pxNt^ÀljT^t".j$u 1 tFF3.>,7rP.>xtH.) .n.6p. .x#.+p_P .)) Xt AnyFF3.jQ>u>tp.) Y.jQ>u>t @.) Y.N.+) .n.6p. .x-.+p_&t.j؉&L FF3.n3.t T3. .n3.|.pt0.j&؉>ߠPSu K_q [X 3.>,7rL.>xtD.) . .n3.|Pa .)) X.pt oyÃ3)t .X.?uˎt.>ftDt.n3t.j;r.p& uu.>ut1t_.Z ..V&$ 3QS.n.l;s  u3 [Y.j .nP.t8.>,6v QS [Y%ؠ ut  Xtˌ؎.X.?u>&1.n.6p.jut3.ft.>ft.f,".fW] =r__3.V..X.`.Zu/;s+.>p&u.jؠt3[Y_WQS3.`.>b.;>ds[&<t,.d+ tFOAuA.>b+& .b uOAuA3VQS.t.6v.<WVQ=Mv .: u :u 4.`tY^_FFY^_3[Y^ VQ~MuI t,u3Y^<Ar<Zv<ar <zv <t<t:<0r<9v .>,6r<_t:.`>vu<tÀv2.b*.d<ut4> u-.fWQS؎.>b.d+3۰ tCt[Y_=v.f3. UR,Z]ur.n3|t< W_LS.r3.rë3QX%t+Ȱ.+jG[ì<Q2YRP&t$x":uWV<wG&E^_t :XZWQV.R.2<~  ..>L^uV.+L3һ. ;s6V.6p^x'&Et=w=ؠu  u(&<u:..L;s ?th`.+L+.WV< &>&&$&^_}..;Ru.R׃3Y_WRQP..>L.R.P+2.>T.R.P+2XYZ_RP.N@.L.TXZVQ2 F2F..6T.6Y^VQSP.j.n3<~X[Y^uVSt[^VRQЬ2PFFZYZ^WVRQ.ر.._V.s&.7CC- .L.SV[GGYZ^_S>t>us>rl.; ub.(;uX;uY;wPt@;u4$,8r-P t .L+ɰXtDtE..604..عdDt u;\t`u tt 3[Y^P.j.l.n@@.pXWVQɎY^_.>,7r.>xtS.[.>,uQSPX[YUWVRZ^_]3{.>,7rf.>xt^QSP..p+t,7r.>xtQPSf [u\XYSR. t.t(.+L.x.zGtg Z[SQR.+L.x.zGtZY[.>,7s.>xtRQSPP$u tXQaZ.+L.x.zGt$QG$p t  GY.)NW+u]_X[YZRP.;|r+.6~ t@XZ+G( DOMAIN ERROR SYNTAX ERROR RANK ERROR LIMIT ERROR SYMBOL TABLE FULL PKG SYSTEM ERROR APL VER NOT SUPPORTEDPKG VER NOT SUPPORTED(RESERVED) VWS FULL 13G(OO RPAIRS [1] 24JAN89 (BPB) RETURNS OVERSTRIKE PAIRS [2] R 117 2 234'*-~_''-\~^~-/\A_B_C_D_E_F_G_H_I_J_K_L_M_N_O_P_Q_R_S_T_U_V_W_X_Y_Z__<>^S0~''.AOU -L{-Y,-~N*=_,C_\[]_uoa,c/OOUT/e^aa\a^ee\ei^i/E^u/a/i/o/un~nN~N^o,s",?_,?!,,<,>\uout' [3] RRR BOTH WAYS G( RP PATMATCH T;IO;B;D;I;J;N;b;m;s [1] DanB 950202 Pattern Matching a la DOS but better [2] 'T' IS THE TEXT TABLE SHRUNK AS WE GO. 'R' IS RESULTING MATCHES [3] NORMALIZE PATTERN LIKE ?*?* TO ??* (** IS REDUCED TO *) [4] IO0  RT  s'?'  m'*' [5] P1N[I],0IB+((1D)-1DD/Db,1)/100+/b2=B'*?'N'.',P [6] B1,(1B)1Bm=P,P  PB/P [7] bT' ' b IS bLANKS, s sINGLE CHAR not bLANK, m mANY s [8] CHK IF * ONLY AND EXIT ELSE GRAB CHARS UP TO * AND GOTO MANY IF 1ST * [9] L:(P)n  DP[0]m  (PDP)0  NPm  BsNP  IB/N  DMANY [10] simple pattern: ALL CHARS MUST BE NON BLANK & NON ? MUST MATCH [11] T(0,N)(D(/b[;N]) [  0;]# Copyright (c) 1987, I.P. Sharp AssociatesH V0005000t   ;;7 5^  00010000ERROR(-IO-DMTCNL)DM.(/,  ( DPCHK) ) > [(, ) 0;]# Copyright (c) 1987, I.P. Sharp Associates 00020000 :  []pchk v    ;;  00010000ERROR(-IO-DMTCNL)DM.(/ , ( DPNC) ) > [  0;]# Copyright (c) 1987, I.P. Sharp Associatesx    ;;  00010000ERROR(-IO-DMTCNL)DM.(/ , ( DPVAL) ) > [  0;]# Copyright (c) 1987, I.P. Sharp Associatesz   ;;  00010000ERROR(-IO-DMTCNL)DM.(/ , ( DPDEF) ) > [  0;]# Copyright (c) 1987, I.P. Sharp Associates|    ;;;; ; ; ; s have  00010000ERROR(-IO-DMTCNL)DM, PC 00020000# WARNING: The X variables must not be in the package!!! In 00030000# For now I don't do any testing of this. variants:  00040000# NOTE: Cannot be used in run-time systems that don't have DEF. new workspac  00050000>(/71)/ SYNTAX ERROR>(R )/ DOMAIN ERROR>(-  )/ RANK ERROR>(/  )/ DOMAIN ERRORe see the 00060000         .(  ) me varian 00070000    >( )/ DOMAIN ERROR supp 00080000 0(; )/[1]PDEF 222PACK 3[(3)~4;] an axis gr 00090000>(/ )/PEX DEF ERROR torage, 00100000# Copyright (c) 1987, I.P. Sharp Associatess ~    ;;; ; ; ; POKE 303  00010000ERROR(-IO-DMTCNL)DMn APL*PLUS  00020000# WARNING: The X variables must not be in the packages!!!-- 00030000# For now I don't do any testing of this.ACK -- pack 00040000# NOTE: Cannot be used in run-time systems that don't have DEF. -- will no 00050000>((/  )/  )/ DOMAIN ERROR 00060000       -- signal 00070000 0(; )(; )=[1]PDEF 11PDEF 221PACK(,' ',3),,' ',4 00080000>(/ )/PINS DEF ERROR   00090000# Copyright (c) 1987, I.P. Sharp Associates    ;;  00010000ERROR(-IO-DMTCNL)DM.(/ , ( DPNAMES) ) > [  0;]# Copyright (c) 1987, I.P. Sharp AssociatesNOPQR    ;;;   00010000ERROR(-IO-DMTCNL)DM987, I.P. S 00020000>(/  )/ DOMAIN ERROR 00030000.(/71) >(R )/ DOMAIN ERROR>(-  )/ RANK ERROR 00040000       7 >( )/ DOMAIN ERROR. ,( 00050000 :    7 (PEX 00060000 : /  (0 ) (  )  CDEF 00070000# Copyright (c) 1987, I.P. Sharp AssociatesEF   ;;; ; ; ed. This may 00010000ERROR(-IO-DMTCNL)DMure release 00020000# WARNING: The X variables must not be in the package!!!  00030000# For now I don't do any testing of this.sed to APL, 00040000# NOTE: Cannot be used in run-time systems that don't have DEF. 303. APL ve  00050000>(/71)/ SYNTAX ERROR>(R )/ DOMAIN ERROR>(-  )/ RANK ERROR>(/  )/ DOMAIN ERRORthat cont 00060000         .(  )  variable 00070000>(   )/ DOMAIN ERRORn is running 00080000 0(; )[1]PDEF 222PACK 1illegal" na 00090000>(/ )/PSEL DEF ERROR y whic 00100000# Copyright (c) 1987, I.P. Sharp Associatesnc   00010000 ([ ])0[]R HPGSEP90PAp:CKXE:p2,2O2,ZErZZZZZ}tt 5{5{[oNd.@@)%     .V.X.*..,.7s.6t8B....>,5v / u..x.>,6v5P t.R.xT.z@R&Z.~.|.>,7vp.|..6.L..V=w.X.t =t33t=t.V23S.VRQYZ[D./Ŏ3Q2ȋ<V^VŎؾ^+ Y3..2.P.Z t.P .v.f.\.t..Z.`t.>u .>rv.f." u s.rw.V.3Ѓ...VɎ.>fu4.-..,.... 3.j..Z.`.\.t.rt.=v.f@P.hȃy3.^MY..Z.`.\.t.V.j.r;tMQPS.^_[X;s+S.;uPXu[Y[Xbf.h.n.+j..+j&+..@@.p3.uw...>u.SWP.^X_[.j&>.>t& && &.Vt .n33.-..,..f. .j .j te.".h.r.Dts.;"~."..>L t|t |w.+L3һ .t&=t~.h.&.>v&1D t{\fs.Z.`.\.t\.>u t .r9t<~.h..t.6v&&x..f3.t.6v..f=Mv[&?tLs:S.r.+j.V&.j.r.Z&.`.\&.t[&u tÉ3.t.n .P.Lx.;frV.^.t.6v.n3.p.f=Mv+V.|^t+&.j؉QȭV.`^YCC t..2.P.4.N .S .>,6r1.>u).n.6p. .j&t.P.R..X?t5t.>f3[t˽t|tu.> 3tdt ..>2.R.Z 3.n.6p. FFu;r.>p&%3.n.6p. xHV.+6pxNt^ÀljT^t".j$u 1 tFF3.>,7rP.>xtH.) .n.6p. .x#.+p_P .)) Xt AnyFF3.jQ>u>tp.) Y.jQ>u>t @.) Y.N.+) .n.6p. .x-.+p_&t.j؉&L FF3.n3.t T3. .n3.|.pt0.j&؉>ߠPSu K_q [X 3.>,7rL.>xtD.) . .n3.|Pa .)) X.pt oyÃ3)t .X.?uˎt.>ftDt.n3t.j;r.p& uu.>ut1t_.Z ..V&$ 3QS.n.l;s  u3 [Y.j .nP.t8.>,6v QS [Y%ؠ ut  Xtˌ؎.X.?u>&1.n.6p.jut3.ft.>ft.f,".fW] =r__3.V..X.`.Zu/;s+.>p&u.jؠt3[Y_WQS3.`.>b.;>ds[&<t,.d+ tFOAuA.>b+& .b uOAuA3VQS.t.6v.<WVQ=Mv .: u :u 4.`tY^_FFY^_3[Y^ VQ~MuI t,u3Y^<Ar<Zv<ar <zv <t<t:<0r<9v .>,6r<_t:.`>vu<tÀv2.b*.d<ut4> u-.fWQS؎.>b.d+3۰ tCt[Y_=v.f3. UR,Z]ur.n3|t< W_LS.r3.rë3QX%t+Ȱ.+jG[ì<Q2YRP&t$x":uWV<wG&E^_t :XZWQV.R.2<~  ..>L^uV.+L3һ. ;s6V.6p^x'&Et=w=ؠu  u(&<u:..L;s ?th`.+L+.WV< &>&&$&^_}..;Ru.R׃3Y_WRQP..>L.R.P+2.>T.R.P+2XYZ_RP.N@.L.TXZVQ2 F2F..6T.6Y^VQSP.j.n3<~X[Y^uVSt[^VRQЬ2PFFZYZ^WVRQ.ر.._V.s&.7CC- .L.SV[GGYZ^_S>t>us>rl.; ub.(;uX;uY;wPt@;u4$,8r-P t .L+ɰXtDtE..604..عdDt u;\t`u tt 3[Y^P.j.l.n@@.pXWVQɎY^_.>,7r.>xtS.[.>,uQSPX[YUWVRZ^_]3{.>,7rf.>xt^QSP..p+t,7r.>xtQPSf [u\XYSR. t.t(.+L.x.zGtg Z[SQR.+L.x.zGtZY[.>,7s.>xtRQSPP$u tXQaZ.+L.x.zGt$QG$p t  GY.)NW+u]_X[YZRP.;|r+.6~ t@XZ+u &u0002000 DOMAIN ERROR SYNTAX ERROR RANK ERROR LIMIT ERROR SYMBOL TABLE FULL PKG SYSTEM ERROR APL VER NOT SUPPORTEDPKG VER NOT SUPPORTED(RESERVED) VWS FULL  iROWFINDaSStoMATPACKPCHK PVALPDEFPINSPNAMES!PPDEF%PSEL)PSYSID-PACKBIN1PACKERRSPNCPEX02341210345DEB0,9FH(  0PNAMES 2;ELX;ALX [1] ELXALX'ERROR(-IO-DMTCNL)DM'  (0=2(2,PSYSID,STPTR 'PNAMES')CALL PACKBIN)0  ERROR PACKERRS[2-~IO;] Copyright (c) 1987, I.P. Sharp Associates H(T 01 PNC 2;ELX;ALX [1] ELXALX'ERROR(-IO-DMTCNL)DM'  (0=2(5,PSYSID,STPTR 'PNC')CALL PACKBIN)0  ERROR PACKERRS[2-~IO;] Copyright (c) 1987, I.P. Sharp Associates H( 01 PPDEF 2;ELX;ALX;5 [1] ELXALX'ERROR(-IO-DMTCNL)DM' [2] ERROR(0=PCHK 2)/'DOMAIN ERROR' [3] (0=NC '1')3  ERROR(82DR 1)/'DOMAIN ERROR'  ERROR(2<1)/'RANK ERROR' [4] 1SStoMAT ' ',DEB,' ',1  5NC 1  ERROR(45)/'DOMAIN ERROR'  4 [5] 3:1PNAMES 2  5NC 1 [6] 4:50=5  0(~5)1  (51)PDEF 2 [7] Copyright (c) 1987, I.P. Sharp Associates H( 21 PSEL 2;ELX;ALX;0;3;4 [1] ELXALX'ERROR(-IO-DMTCNL)DM' [2] WARNING: The X variables must not be in the package!!! [3] For now I don't do any testing of this. [4] NOTE: Cannot be used in run-time systems that don't have DEF. [5] ERROR(0=NC '1')/'SYNTAX ERROR'  ERROR(82DR 1)/'DOMAIN ERROR'  ERROR(2<1)/'RANK ERROR'  ERROR(0=PCHK 2)/'DOMAIN ERROR' [6] 3PNAMES 2  1SStoMAT ' ',DEB,' ',1  (01)0 [7] ERROR(03 ROWFIND 1)/'DOMAIN ERROR' [8] 4'0',(,';',3),TCNL,'[1]PDEF 222PACK 1' [9] ERROR(163=DR DEF 4)/'PSEL DEF ERROR'  0 [10] Copyright (c) 1987, I.P. Sharp Associates H(0ZZ 0PSYSID [1] 0(163 DR SYSID[IO+ 13 12]),25648+FI SYSID[IO+ 20 21] H(T 01 PVAL 2;ELX;ALX [1] ELXALX'ERROR(-IO-DMTCNL)DM'  (0=2(3,PSYSID,STPTR 'PVAL')CALL PACKBIN)0  ERROR PACKERRS[2-~IO;] Copyright (c) 1987, I.P. Sharp Associates H(ll TSRDCIDATE D [1] D IS RDCI TS IN MICRO-SECS SINCE JAN 1,1900 [2] TSDATEOFD86400000000 H(Hrenumber labels in function DanB 93 Syntax: ]RENUM function /STEM=string /N=start(=IO) [increment=1] /X=names Renumber labels in function. Specific labels can be ignored by including their names in the code after a lamp/tilde (~) or by using the eXclusion switch /X. See following example: For example, FN [1] start: Dont renumber following label: ~ END [2] a1 [3] x: [4] y:and [5] so [6] on: [7] END: ]RENUM FN /STEM=L /N=100 10 /X=start VR 'FN' FN [1] start: [2] a1 [3] L100: [4] L110:and [5] so [6] L120: [7] END: H( renumber labelsH( ZA ROWFIND B;T;ELX [1] indscharmat ROWFIND chararr -- Origin-1 indices of char rows in a char mat [2] Enhanced to accept any-sized arrays (9/21/87) [3] ELX'ERROR(^\DMTCNL)/DM'  Copyright 1987, UNIWARE [4] T(1 STPTR 'Z A B')CALL ROWFINDOBJ,0 H(m  ........t<u t7tt. t$... t....6.t<u t7tt. t$... t....6.....;w#u;w..++sK.."...++sH...u . u.u . u$2......2..6.. u u..>....t"sBsB. . .>u,.>u$3 u tJPhX........6. ....3..3 yu3 u t t... tC_..3 yuً;3 u t>ٰ u0ȋ3 yuً 3 u tٰ tf...3. .t.r\..;ru ..;v ... u....;.rw.. .;.w..3.O..C.+sB.....; u..; u%QRsC$ZYQRsC$ZYQSހ[YQS[Y.s.PSW...3m3.t_[XU3........ y uK@RJ}Zt ? .l Հ@.Z +ʋӻ|3PXR[3ۊހ. .܀. .....]PSQ3 t tĀt tȀtBY[XÒH\lr \r<&\r<H(񗘦abcdefghijklmnopqrstuvwxyz$! 񗘦abcdefghijklmnopqrstuvwxyz$! H( TRO T;BS;HITS;IO [1] (/BST=TCBS)IO0  HITSPAIRS ROWFIND T[(WHERE BS).+ 1 1] [2] BSBS\0C)ENDL0 [10] LXLTLINE C MODLINE CR[C;] [11] L1:ATRANSMIT L [12] (AV[129+IO]A)L2  L1,P ARBIN TCNL [13] L2:(C=1+FI(A'0123456789')/A)/L3 [14] 'MF response:',A [15] L3:' ',C [16] L0,CC+1 [17] ENDL0:0P ARBIN '',TCNL H(99 RSENDRAW EXP [1] RCOM1 ARBIN EXP,TCNL I( X_ SENDVAR V_;R_ [1] Send variable to mainframe with restrictions! [2] Some chars do not travel well. TCBEL, NULS, DEL, etc, are examples. [3] If CHAR data, a matrix should NOT contain CRs! [4] X_ is translate mode. Default 1 (DO translate to ASCII). [5] ERROR(2NC V_)/V_,' IS NOT A VARIABLE' [6] R_ 1 1 0 1 10 32767 7 ARBIN 'EX''',V_,'''',TCNL [7] ERROR('0'R_)/V_,' NOT ERASED ON MAINFRAME.' [8] (0NC 'X_')/'X_1'  X_X_'' [9] (X_,V_)SEND_DATAV_ I( NAM_ SEND_DATA v_;C_;P_;S_;IO;L_;R_;X_;T_ [1] Send data to mainframe TO NAMe [2] NAM_ should be of the type []VAR or []VARVAR,[IO] [3] The reason for this fn is to add to existing variables on the MF [4] The '' means translate into ASCII for char vars [5] If CHAR data a list is assumed to contain CRs. A matrix should NOT! [6] IO0  P_ 1 1 0 1 10 32767 7 [7] X_''1NAM_NAM_,(''NAM_)'' [8] Empty structures are dealt with directly [9] C_82DR v_  (0S_v_)/NUL_ [10] make into matrix [11] L_1v_((/1S_),11S_)v_ how many lines [12] Build APL expression for CHAR or NUM data [13] R_X_NAM_,(S_),(4S_)'(0)' Shape () [14] C_NUM_,(10)/L_1 [33] '' [34] NUL_:R_0P_ ARBIN X_NAM_,(S_),'',(2 2 '0 ''''')[C_;],TCNL [35] 0 [36] SP_:T_0.5L_1S_  NAM_ SEND_DATA'v_[T_',R_1((S_)';'),']' [37] (NAM_,(~','NAM_)/(NAM_~''),',[IO]')SEND_DATA'v_[T_L_',R_ I(4SEND object to MainFrameI(   AFFIX SETPRINTER PPORT;IO;SEG;AT;DL;FONTAB;OFFSET;PV;SIZE;TT [1] prtrid SETPRINTER prtrport -- Set up non-PostScript printer & port 10 driver [2] prtrid = printer name as given by SELECT [3] prtrport = APL physical port number of the printer (3, 4 or 5) [4] Get segment of data area in memory resident APL port 10 driver: [5] IOSEG0  SEG256PEEK 3 2 +416 9 0 seg of int90h [6] ERROR('APLPRINT'.AV[PEEK 272+8])/'APLPRINT Port 10 driver not installed' [7] ERROR(3PEEK 280)/'Installed driver is not version 3' [8] Get the vars associated with the printer: [9] ERROR(2.NC(4 2 'ttftdlat'),(4,,AFFIX)AFFIX)/'Printer variables missing' [10] TT'tt',AFFIX  FONTAB'ft',AFFIX  DL'dl',AFFIX  AT'at',AFFIX [11] Set font table used by port 10 driver: [12] SIZEPEEK 282 281 NFONTS, FSLEN [13] ERROR(SIZE. (21 Sep 87) [3] ELX'ERROR(^\DMTCNL)/DM'  Copyright 1987, UNIWARE [4] (0=C(1 STPTR 'A B C R')CALL 23762 1576 30418 10782 11782 3721 1580 30418 11798 11782 7820 1608 8075 30418 12318 2822 30171 5885 150 9330 1697 512 29896 15364 29968 2685 29924 391 30156 16773 8 11725 10101 29779 3016 29915 21245 12149 30418 15414 21498 30418 13326 11782 5769 1590 8054 11765 1397 1661 30210 11075 5925 614 1822 373 4840 7422 29875 15337 3383 11182 31767 509 11892 14069 2421 792 7423 3547 7250 15351 311 29379 6117 493 20750 11148 6424 7423 3551 7250 29943 5175 28647 9421 14069 4724 696 5888 462 952 5888 456 440 5888 450 30418 21022 32506 5 30464 3043 30171 5885 186 29906 10270 11782 7822 1608 8075 9461 10124 9330 11725 1697 512 29896 15368 29968 29763 2582 512 29900 30997 18247 1 7819 8 7817 10 2211 512 23612 6 24274 1580 29906 10270 29946 2062 2816 30153 2820 29906 11881 7819 1580 1697 9216 3312 11778 19107 11782 3721 1612 30418 19990 11782 3721 1598 30418 16406 3590 29433 18998 13062 12864 11976 16009 1602 29650 12806 11782 3723 1612 29906 19990 6138 360 2165 29138 18462 11782 7819 1578 8075 30418 12318 11782 7819 1576 8078 7126 8168 7423 5285 28594 29906 10270 11782 7822 1608 8078 1697 11776 19107 24314 8 23762 1612 2721 11776 20131 13062 11968 7819 1582 1806 13965 1610 14131 29906 10270 11782 7822 1608 8078 2165 1000 6143 249 1251 23309 2069 16333 5941 237 1763 21588 798 2581 10100 16242 29906 10270 11782 7822 1608 2896 14131 29906 21006 11782 15521 11782 14499 11782 1735 1594 0 9704 7679 18181 273 29138 18462 11782 7819 1612 9461 2936 29906 19998 2822 30171 20478 11777 19107 11782 7819 1582 1806 13965 1610 16333 14131 29906 10782 29946 11807 7817 1584 29906 11294 29178 11807 7820 1586 29906 15886 11782 5771 1600 29906 16950 6138 104 5859 2733 29924 6137 759 1507 2837 7510 5903 77 14069 5515 16333 2763 30189 2823 29906 18947 16565 21073 10357 6271 15 7552 19984 11516 29494 961 28982 23233 15527 4854 1909 11765 884 19126 20800 29870 32298 4070 32768 3870 1201 13613 9844 13821 9842 22874 5949 38 19224 15361 11773 14069 377 834 2350 16581 372 32702 16357 14069 1909 11765 884 16565 15542 21073 14845 371 20157 11772 29501 730 29709 9432 11280 968 32304 4067 29952 28941 23258 15527 21073 14589 371 20157 11772 29501 706 29709 9432 11280 968 32304 4067 29952 28933 23234 15527 11857 1791 1616 29138 12318 13062 12022 14497 11782 7819 1594 23576 5889 52 29138 12806 11782 16011 1602 29906 15886 11782 5771 1600 21418 24236 7118 26088 3071 30153 6139 239 2531 20494 2187 13848 5376 5902 432 15527 1162 1822 373 9421 30418 21534 11782 7817 1624 30418 22046 11782 7817 1626 18105 32768 302 21518 29958 11781 1791 1622 20750 1396 12568 5122 16872 31954 21566 6 1397 210 22030 11782 3625 1620 9704 7424 11797 3585 1624 1395 210 23046 3578 29870 6139 351 5653 11841 3625 1624 1395 210 23054 15610 29613 11970 5675 1584 20142 32764 3866 12590 8566 206 30418 17950 23046 6528 11505 962 29655 11781 1791 1606 30418 17430 11782 3723 1588 29906 13846 11782 3587 1596 371 11842 5675 1606 11054 17422 29446 18945 28696 16894 15525 20816 1618 22046 16727 14717 6142 430 15150 22038 29190 30002 11783 3643 1620 10610 29906 21518 11782 5771 1622 25064 18942 22248 7170 21487 7118 29914 31971 711 15557 3189 3614 5397 16325 1259 13200 16576 24159 1823 22874 12661 12520 6144 97 6079 352 24274 1620 29906 22046 20486 2899 30144 19201 840 987 29632 17153 21992 23550 11096 11219 29640 18945 2536 22782 20675 21073 22278 24274 1616 29906 21518 11782 5771 1622 3608 3069 30207 29688 20423 14450 4287 20224 27416 7171 22010 7609 5124 24565 23047 22617 11971 22177 11782 1577 1614 24274 1620 10542 19462 29446 11781 3839 1614 24274 1626 302 19974 11782 22689 11782 1537 1612 1395 210 19974 15610 21328 24274 1592 29906 14878 11782 7683 1622 814 21510 29446 17153 30016 17153 814 23070 11782 1539 1624 371 16451 373 11843 14499 11782 7817 1594 22619 20675 20819 7762 1622 6057 88 3048 12030 21665 11782 7819 1622 17990 27112 12029 3723 1624 29906 23062 24326 6137 708 2531 23309 12008 3069 30153 24311 23071 6055 90 24274 1620 29906 22046 20486 11091 11219 29640 18945 5608 23549 18520 371 843 29632 17153 9704 23549 15528 22278 29138 12294 11782 16011 1596 30170 18181 13058 6260 185 3520 29870 6139 801 2837 9496 17924 16384 20750 2443 6933 1615 29921 24567 15609 29869 29991 19990 32766 798 13613 6784 20221 11770 709 29693 16897 13429 15525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)0 [5] ERROR('VALUEDOMAINRANKLENGTHLIMITINDEXSEPARATOR'[0 5 11 15 21 26 31 36 [C-1-IO]+ 5 6 4 6 5 5 9 [C-1-IO]]),' ERROR' I(`format timestamp type values like WSTS DanB 92 Format timestamp type values like WSTS Syntax: ]TIMEFMT expression Examples: ]TIMEFMT WSTS ]TIMEFMT 12FRDCI TIE,CPTe I( RTOAPL R;APL;ASCII;I;SCOPE;SI;SIS;SO;IO [1] IO0  RR~TCNUL,TCDEL,TCBEL,TCLF  SOAV[14]  SIAV[15] [2] ASCIITCBS,SI,SO,' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] _`abcdefghijklmnopqrstuvwxyz{ }~^',TCNL [3] APLTCBS,SI,SO,' )<=>]^,+./0123456789([;:\_''*?~ -ABCDEFGHIJKLMNOPQRSTUVWXYZ{}$',TCNL [4] (/ISI=R)ALLAPL [5] ISCOPE=\II pLTSCAN RSO,TCNL ~\ =\~ [6] Following statements on lines to allow VIRTUAL MNGT to handle large R [7] I~RSI,SO  SCOPEI/SCOPE  RI/R  SCOPEIWHERE SCOPE [8] R[I]APL[ASCIIR[I]] [9] IDONE [10] ALLAPL:RR~SI,SO  RAPL[ASCIIR] [11] DONE:R(\RTCNL)/R  R(~1R SS TCNL,' ',TCNL)/RRO R [12] R(-1+(R)TCNL)R I(send 'variable' TO Native FILE DanB 93 Syntax: ]TONFILE variable /FILE=dos.file /REPLACE Contents of variable will be sent to the DOS file specified, CRs followed by LFs. s. J(iiTrace back a string recursively in the wss DanB 94 Syntax: ]TRACEBACK string The fns using this string will be displayed then the fns using those fns will be displayed and so on until the top fns are reached. For example we want to know where FSTIE is used. The search might produce fns TIE and OPEN. Those fns in turn, are used by INIT, DBOPEN, etc.etcJ(Trace mode (short or long) like STSC mainframe APL DanB 93 Syntax: ]TRACE S[HORT]|L[ONG] Trace display stays on one line if SHORT is used. ed.J(CC rTRANSMIT line;IO;lens;ASC;chunk [1] Transmit Line given the string to send and ASC/APL delimiters [2] IO0  (2>lensline)/L1 [3] lens(lens,1line)-0,lensWHERE ' 'line[1;]  lineline[0;] [4] odd sections are APL, even are ASCII. Terminate with APL,CR [5] L1:ASC0 1=True [6] loop:(line)end  chunklens[0]line  linelens[0]line [7] ASCsend  chunk15,(32+ASCIIchunk),14 [8] send:r(1 1 ,ASC,1)ARBIN chunk [9] ASC-~-ASC transmit 0=APL, 1=ASCII [10] lens1lens  loop [11] [12] end:r 1 1 0 1 1 32767 7 ARBIN 14 13 J(ccontruct a table of references for argument fns DanB 94 Syntax: TREF [fn1 [fn2 [...]]] The command will return a table of ALL references for ALL functions listed (all non functions by default). Legend is the same as the CALLS command.J(!! RTSTOmSEC A;B;C;D;IO;CT;X [1] Convert TS into microseconds. From STSC's TIMEBASE fn. [2] CTIO0  R(71A)'' [3] D 0 0 0 0 0 0 1 /+\A(A) 0 0 0 3600000 60000 1000 1 [4] R 1 0 0 0 0 0 0 /A [5] B 0 693961 693930 693902 693871 693841 693810 693780 693749 693718 693688 693657 693627 [6] BB[0 1 0 0 0 0 0 /A]  A 0 0 1 0 0 0 0 /A  C400RR+1900R<100 [7] X((100 1 0 0 0),300 0 0 0 0 ,96 1 0 0 0)[C]^B<693902 [8] R1000(1A)D+86400000B+A-X-((R146097)-C+(1004R)-4100R)400 J(Transfer WS - COMPARE utilityityJ( RUPPERCASE S;R;A;IO [1] upperUPPERCASE text -- Converts all lowercase characters to uppercase [2] IO0  AAV  RAV'Aa'  A[R[1]+26]A[R[0]+26]  RA[AVS] J(return all variables containing pattern string DanB 93 Syntax: ]VARSLIKE pattern Return all variables containing pattern string. EXAMPLE: ]VARSLIKE Z* all vars starting with Z ]VARSLIKE ** all vars containing J( RWHERE X [1] indicesWHERE numeric{bit}vector -- Determine locations where argument0 [2] Handles large and long numeric vectors; origin sensitive [3] Copyright 1987, STSC [4] RX/X  0 [5] (0=X((1 STPTR 'R X'),IO)CALL 7147 0 0 0 0 0 0 0 1 0 18432 3 18229 2 11979 3235 11776 7817 14 30418 4110 29184 9735 1697 32768 508 8331 15612 29970 5885 163 572 10379 2751 11776 1734 18 9728 16001 0 4096 3190 14802 4614 256 1095 5249 28666 29914 2062 13056 7205 29886 3133 7249 17155 1557 372 11843 16000 18 29696 9774 3723 8 5759 32763 14964 14975 4096 14962 5237 20493 995 5309 29945 17166 189 11776 1735 19 10 30231 15104 30187 29713 18229 258 29906 3102 13056 7224 29659 11968 7819 14 1934 10098 2165 2751 11776 7819 16 13131 16960 2 20669 908 7305 2813 2334 11241 9729 5771 10 29914 2062 11776 3721 21 30418 5910 16640 12 30418 4926 13056 29733 29717 3009 29890 13097 20544 7797 29769 2284 199 29824 29452 32314 198 29176 32314 239 5248 15334 29904 18953 6677 30019 17887 8981 30418 7470 11776 7817 27 14196 16242 6590 11776 1734 25 31992 253 1652 32722 6406 4096 29906 3102 13056 12864 29752 3033 30170 5885 168 16244 29906 3614 29184 29177 29736 12023 16011 19 29906 4126 13056 13293 20544 6773 29763 2284 199 29824 29452 32318 194 29176 32318 239 5248 17894 5653 21333 17839 1055 637 29952 31968 251 1397 11725 10731 31856 4330 5241 11958 29669 17925 4 4861 11757 1310 5099 19088 9469 4845 1677 1209 768 5083 5101 7470 30216 1620 27785 30460 604 1161 23385 18781 4980 14717 30984 29549 32294 194 29176 32294 238 5248 11909 16003 29 29696 11783 3839 29 8469 16333 203)0 [6] ERROR 'DOMAINRANK'[0 6 [2 3 X]+ 6 4 [2 3 X]],' ERROR' JVM, 16 Jul 87 J()WSLIB in alpha orderderJ( RNC XLTLINE LINE;COMMENT;DIAM;INQUOTES;L;LAMPS;TOXLT;NOTCODE;QNC;QUOTES;B;IO;DP;X;DM;SS [1] Translate line into ASCII codes - NC is Not Code flag: DO IT! [2] STRATEGY: [3] SEND TEXT IN QUOTES AND COMMENT TEXT AS ASCII but: [4] DO NOT TRANSLATE STATEMENTS TO THE RIGHT OF , NC, DEF or FX, etc [5] TEST LINE: [6] DEF 'x'  NC'Abc'  'test'  'test'  'test'  test test [7] SHOULD ASCIIFY:       [8] [9] Special cases for text passed as argument to stack fns like [10] x SVO 'v'  v'THIS NOT TO BE translated' : hole line skipped [11] or [12] 'Statement 1'  Statement 2  Test 'Statement 3' genuine comment [13] 'Statement X'  Statement Y {keep:this} another real comment [14] [15] BSSIO0  RLINE  (0NC 'NC')/'NC0'  NOTCODENC  XAV[124]  [16] (/TOXLTR'abcdefghijklmnopqrstuvwxyz`@#%&"',X)END any chars to xlt? [17] NC/SIM This is Not Code: DO IT ! [18] QUOTES''''=LINE [19] LAMPS(LINE'')>LLINE SS '' allow ESCape comments [20] (1L)L10  LAMPSLAMPS^\L keep only those after the [21] L10:INQUOTESQUOTES<\QUOTES [22] Special comment allows to skip whole line [23] (/TOXLTTOXLT>INQUOTES.INQUOTES [25] (/TOXLTTOXLT^NOTCODECOMMENTINQUOTES)END anything to do ? [26] Something needs to be translated [27] DIAMNOTCODE<''=LINE DIAMONDS (statement separators) [28] We assume the whole text between s is to remain as is for the following [29] L(LINE SS 'NC') (LINE SS 'DEF')(LINE SS 'FX') [30] LL(LINE SS 'ELX')(LINE SS 'ALX')LINE'' [31] SSDIAM LPOS NOTCODESS)END [34] Some Statement with Strings still need to be translated [35] Let's see if we can simplify transmission [36] SIM:TOXLT(\TOXLT)^SSCS OS T<(1E)(t)OST^c text from last ':' between those {}s [25] BBt\=\''''t/n is included if not quoted [26] include & LX but limit to own statement. [27] l10:pB^E(n SS 'ELX''')(n SS 'ALX''')n SS 'NC '''  E1E [28] pp(n SS 'EA''')(n SS 'SIZE''')(n SS 'CR''')(n SS 'IDLOC''') [29] BBCl exclude labels from Body [34] [35] 2-find global references [36] l'0123456789_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'  [37] extract names [38] tB,1,nl  n,' ',n  [39] n[t/n]' ' replace delimiters by ' ' [40] oXmv Xqz n squeeze text and find Objects [41] o(~,o[;1o]10l)o eliminate constants [42] oXrd o remove duplicates [43] find unused locals and labels [44] n'lL'[IO+lo Xeq lab],lab  l~/l [45] nn Xc1 '!',(~to Xeq loc)loc [46] nn Xc1(l''[1+/t],o)Xc1 E/' ' J(  nXfr fn;loc;O;t;l;B;p;IO;lab;T;C;D;E [1] danb 831012 find fn's local and global references given cr'fn' [2] Version 3.0: scans properly between s [3] IO1 [4] 1-find local references [5] t(n1+l';')lfn[1;] [6] B' ' Xmv(p+/\''=t)t fn + args [7] loc(0p-1)t result [8] p1(1B)-1 fnname pos [9] locloc Xc1(p1B)B args [10] locloc Xc1 '; ' Xmv nl locals [11] n(n[;1]'')n 1 0 fn take off comment lines [12] Text, Comments, statement Delimiters & [13] T\n''''  BCTT>C\Tl exclude labels from Body [20] [21] 2-find global references [22] l'0123456789_',,AV[65 97 .+26] for PC [23] l10'',AV[65+64] for MF [24] extract names [25] tB,1,nl  n,' ',n  [26] n[t/n]' ' replace delimiters by ' ' [27] OXmv Xqz n squeeze text and find Objects [28] O(~,O[;1O]10l)O eliminate constants [29] OXrd O remove duplicates [30] find unused locals and labels: labels in local=? not in=L [31] n'lL'[IO+lO Xeq lab],lab  l~/l [32] nn Xc1 '!',(~tO Xeq loc)loc [33] nn Xc1(l''[1+/t],O)Xc1 E/' ' K(  nXfrvr fn;loc;O;t;l;B;p;IO;lab;T;C;D;E;P;i;S [1] DanB 921117 find fn's local and global references given VR 'fn' [2] IO1 [3] nDEF 'rs P p;t',TCNL,'[1]sspr\s\t10,ts/p' [4] 1-find local references [5] ifnTCNL  t(n1+l';')l6(i-1)fn [6] B' ' Xmv(p+/\''=t)t fn + args [7] loc(0p-1)t result [8] p1(1B)-1 fnname pos [9] locloc Xc1(p1B)B args [10] locloc Xc1 '; ' Xmv nl locals [11] STCNL=n(i-1)fn [12] Text, Body, Comments, statement Delimiters & [13] T\BS\t10,tS/\10,Bn'''' Text [14] BCTT>CS P Tl exclude labels from Body [22] [23] 2-find global references [24] l'0123456789_',,AV[65 97 .+26] for PC [25] l10'',AV[65+64] for MF [26] extract names [27] tB,1,nl  n,' ',n  [28] n[t/n]' ' replace delimiters by ' ' [29] OXmv Xqz n squeeze text and find Objects [30] O(~,O[;1O]10l)O eliminate constants [31] OXrd O remove duplicates [32] find unused locals and labels [33] n'lL'[IO+lO Xeq lab],lab  l~/l [34] nn Xc1 '!',(~tO Xeq loc)loc [35] nn Xc1(l''[1+/t],O)Xc1 E/' ' K( matXft mat;p;w;f;d [1] reformat mat [2] w5(1dmat' ',' ',1':',1mat)5 list's dims [3] mat((fpd[1]fPWw),w)mat adjust dims [4] mat(p,fw)mat optimized formatting K( XrXst Xgensymb Xbr;Xn;Xvr [1] danb 840921 generate new symbols of function Xn from symb table [2] 930907: check for compiled fns (STSC MainFrame use) [3] Xr(1,Xr)Xr'compiled'  XvrVR XnXbr[''Xbr;] [4] (32=1,IDLOC Xn)1  Xr(1,Xr)Xr'locked'  (0Xvr)1 [5] XrXst Xcompare XfR Xvr [6] 1:Xn Xdf Xr Display Function's special instructions K( md Xmv v;IO [1] danb 840920 Matrix representation from Vector [2] d is the delimiter, defaulted by ' ' [3] IO1  (NC 'd')/l  d' ' [4] l:m0,m/m(vd),1  v(~vd)/v [5] md./0,d(0 [18] [19] s4:(^/c2~i0=n1 MATIOTA n2)/s5 [20] o '***',(4 0 +/i),obj,'right'  show[5]/'o vm fit in2' [21] show[2]s5  nci/i  i~any1 show individual objects [22] b4:(nlim)/0  (t(FREAD t1,i)compvar FREAD t2,i)L2 [10] OUT c,i  OUT t [11] L2:L1,ii+1 K(` mcompbool b;br;bc;r;c;x;y;z;i;li;s;fix;n;IO;f [1] st [2] bboolean matrix b m is b with some of the 1's replaced by 0 [3] m has the properties that:(1) 1(+/m),+m [4] (2) each 1 is below and to the right of the previous 1 [5] (3) +/,m is a maximum for constraints (1) and (2) [6] NOTES io0, m is not necessarily the unique optimal solution of (3) [7] this function is one of the seven wonders of the modern world [8] main algorithm calculates the boolean matrix x (line l1) where : [9] max[i;j]+/,compbool (i,j)b and xmax-0 10,max [10] then uses this to calculate result at line l4 [11] st:b(br/b)(bcb)/b get rid of zero rows and columns [12] m(b)rcIO0 [13] diag:n+/^\, 0 0 b follow diagonal as far as possible [14] m[r+n;c+n]n.=n  rr+nn  cc+n  b(n,n)b [15] x+/^\^/~b  y+/^\^~b number of adjacent 0 rows and cols [16] (0=/x,y)calc no zero rows or cols [17] rr+x  cc+y  b(x,y)b  diag cut back b and try diagonal again [18] calc:(0b)end [19] b(fixi,~iii+1)l1 [22] (0=y1z)end y is the number of matches [23] zn1b  i1+''b initialise loop [24] l4:fzs(zb[i;]+\x[i;])y [25] x[i;](-s)nf  z(1*f)z,s  ii-1  (0yy-f)l4 [26] x[i+1;]0 [27] l8:xbfixx [28] sb  m[r+s[0];c++s[1]]b [29] end:mbrbc\m K(HHshow comparison file contents - COMPARE subcommand See COMPARE command.K( cf1 compfn f2 [1] danb 84/5/30 - compare 2 fns [2] (f1f2)c'' [3] c0,1(f1)f2  f1(cf1)f1  f2(cf2)f2 [4] cf1 mcomp f2 K( ncompind b [1] return nos. from 1 to +/b for each element of b such that [2] n is strictly increasing and b/n is +/b(io=1) [3] n1+\n/n(1n)-1nb/b1,b,1 K( RSA compv SB;L [1] COMPARE vectors [2] R''  (SASB)/0 [3] R'Lists'' length: ',(1L),(/L)/' and ',1L(SA),SB  L/L [4] RR,TCNL,'They are the same for the first ',+/^\(LSA)=LSB [5] RR,' and the last ',(+/^\(LSA)=LSB),' elements.' K(d}} cv1 compvar v2;i;n;s;IO [1] danb 84/5/30 - compare 2 variables. c'' if v1v2 [2] IO0  (v1v2)c'' [3] ((PCHK v1)=nPCHK v2)/st  c''[n],' object is a package'  0 [4] st:nnp  cv1 compack v2  0 [5] np:(=/n(v1),v2)sr  c'G' [6] c,c FMT 100n  end [7] sr:(1=n''n)/vec same rank [8] ((v1)v2)sd  c'Objects differ in shape: ',(v1),' and ',v2 [9] sd:((s10v1)=10v2)sc  cc,(0=c)';objects differ in type'  end [10] sc:((c),2n)/end,simpl [11] c'Objects are of rank >2; they differ at ',(+/,v1v2),' places'  end [12] simpl:c'objects are ',(50=s)'char ',,SVM[n;]  (scl,vec,mat)[n] [13] scl:cc,CR,v1,v2  0 [14] mat:cc,CR,vm(v1)compfnv2  0 [15] vec:cv1 compv v2 [16] end:(1000<+/SIZE 'v1 v2')0  [17] cc,CR,('Var1:',CR,vmv1),CR,CR,'Var2:',CR,vmv2 L(4 NDAYSdaysin TS;N;IO;m;R [1] DANB 83/9/14 NO OF DAYS SINCE 1900/1/1. RANK 0 FN [2] Fixed bug with 1900 Nov 1993 [3] RTS  TS 1900 100 100 ,TS [4] NDAYS365NTS[IO1;] [5] ACCOUNT FOR ALL LEAP YEARS [6] NDAYSNDAYS+0(N4)-1 [7] m 0 31 59 90 120 151 181 212 243 273 304 334 [8] NDAYSNDAYS+m[121TS[2;]]+(0=41TS[1;])^2,R<',TCDEL,'>I8')FMT d  l2 [5] l1:sll/lCR=d(vmrep),CR  ll[NLINESs]NLINESPW [6] l2:csep,1obj,(4010rep)' [c]',CR,(ld),(ld)/' ...[more]'  0 [7] fn:csep,c,(0=cvm('R< >P<[>Q<]>BLI5' FMT 1+1rep),rep)/1obj,''  0 [8] pak:(1 2 (s1obj)PNC rep)/donno,p1  reps fncr rep  fn [9] p1:reps PVAL rep  var [10] donno:csep,1obj,' is undefined !' L($//t5x6&!f      !@-a !4n   @     P   ||    @  @    (D D (    0 P@B  @8 G @0 G8@ ` @@p@0@@` ` `     P  @ 0@?|0@ @ `~x` ((`` 0@@8   D    @@`@`@@ff                Q"\ 0@@8=BBB= @ 8 , p      pA`Ap ((@@!@! ` @@ `  ` `    |p|#!#   ` `.  ~@9@0n   BB`B`BB   @@   `p ! !   "  0<0<<BB<||p  p} |?` `?L( t5x6&!f@ ` `  A   A   ` `@! !`!@#'%!aa!! !"!"!,R, pP   Pp  h#!        ||||  @  @ *@T @T *@  @  @    ( l D   D l (        @ ` (   PP  @DDD@ P(T* E" A @  @@0 @0 @@  A"E*T (P @ @ >>  @@ P@ @ @    ?@?@@ @@?@? `@  @`             !#h @@@ @(P@@@||@@P@(@ @@@@P@\\@P@@  5JJJ5  @ (P  P(  `@@@`(   @@  DD )!           @@@ @(P@@@@ @@@P@(@ @@@  Dl(lD                                        Q Q"X&X$ `@@@`(   ``@@@@``  @ P(  PP(*"@ P (            @PTEA@ P@ P@ AETP@ @   5JJJ5   @  @@@@    3!@!@!3   `` @@ @@ @@ @@ `` @ P ( @@ (P @           ||pp|| "##!!!!##" @@  0@@0 @ @  @ @"*(PP  @P@P@P@|| @`  @|P |,R,     BBB B(PB BBBB PB(B BBB        @ @ @@ @ @        `p`p   3 ! ! ! 3        ""    !%$!%$  $fBBBf$|||| @P((P@=B=8D8?@?``    ``?@? L( [[ nfn ffn str;loc;o;t;l;B;p;IO;lab;T;C;D;E;OS;i;S;US;OR;c [1] DanB 940111 find fn's argument references [2] 'fn' is a fn's VR rep. str is a list of fns we want the arg references [3] IO1 create Partionned \, \ and / fns [4] nFX((t)'rs OS p;t'),[0.1]t'sspr\s\t10,ts/p'  \ [5] nFX((t)'rs US p;t'),[0.1]t'r\ps\t10,ts/\10,p'  \ [6] nFX((t)'za OR b'),[0.1]t'z(z/1z(ab)/a)a/b'  / [7] STCNL=fn [8] Text, Body, Comments, statement Delimiters & [9] TS US fn''''  CS OS cT1S OS t']'=fn]''  DtB^fn'' [12] l10 [13] look for {...:...:stmts} {...:ST2} (STSC/APL) [14] p(1p,1+S)-pS/S length of each line [15] TS US tC^n'{}' text between {}s in comments [16] pp/(S OR C^n SS '')^S OR T^c mask each line not following pattern [17] cptp^T>(t)OST^c text from last ':' between those {}s [18] BBt\=\''''t/n is included if not quoted [19] include & LX but limit to own statement. [20] l10:pB^E(fn SS 'ELX''')(fn SS 'ALX''')fn SS 'NC ''' [21] pp(fn SS 'EA''')(fn SS 'SIZE''')(fn SS 'CR''')(fn SS 'IDLOC''') [22] BBC10,R [5] RVM\R L( Rtimen NS;ARG;N;C;D;IO;Y [1] Transform number of micro seconds into timestamp [2] IO0  ARG(NS)1000000  N86400  DNARG [3] YARGN by # secs in a day [4] RY+693902  RR-(R-N146097R)146097  N(N)-C36524R [5] RR+(R-C)36524  NN+C1461R  R365Y58+R-(R-C)1461 [6] C3650  C[0 31 59 90 120 151 181 212 243 273 304 334]1  C(+\C)[R] [7] NR- 0 2 29 57 88 118 149 179 210 241 271 302 332 [C]+N [8] Y(Y-R)365 [9] RY,C,N, 0 60 60 D L(t!"#$%& ' ()*+,-./01234567 !"#$%&'()8+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]9_`abcdefghijklmnopqrstuvwxyz{|}:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef L(!"#$%& ' ()*+,-./01234567 !"#$%&'()8+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]9_`abcdefghijklmnopqrstuvwxyz{|}:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef L($JJTransfer WS to file - COMPARE subcommand See COMPARE command for details. L(WW vunique v [1] danb eliminate doubles from list v [2] v((vv)=v)/v M(|| zd vm m;ELX [1] matrix from vector [2] ELX'error(^\dmtcnl)/dm' DEFAULT d=tcnl [3] (10)/3 [5] (0=NC 'UFILES')/1 IF UFILES IS DEFINED, [6] UUFILES  2 USE FIRST FILE NAMED IN IT [7] 1:UUCMD ']UFILE' ELSE, [8] U(0,U[1;]']')U GET SEARCH LIST FROM FILE [9] 2:TFOPEN(1U)U TIE FIRST FILE ON LIST [10] 3:HFREAD T,2 FILE HEAD [11] AFREAD T,H[2]  NFREAD T,H[3] NAMES MATRIX AND NUMERIC INFO [12] HIA MATIOTA MATRIFY B LOOK UP NAMES [13] ZT,[1.5]H\N[H/I;2] TIE NUMBER, COMPONENT NUMBER [14] (~(1B)^1=I)/0  Z,Z RETURN VECTOR IF ARG WAS VECTOR WITH ONE NAME M( MALLFNS;IO;B;L;R;T [1] Returns a matrix of all names that are fns. [2] Detects names blocked by localization within the command processor and [3] displays a warning message if any names are shadowed [4] [5] IO1  M(M[;1]'')MSI  B+/~\/M'*'  LIDLOC MNL 3 [6] Some fn names may conflict with UCMD fns. Let's find out and warn: [7] (/L(RL[;B]^.=1)<1=((+/^\R=1)R(0,B)L)[;1])L0 [8] 'These fns won''t be used:',(T1TB' ')/B,' ',LM [9] L0:MRM M(p33 ZA APPEND T;S [1] Writes to the first free record in file , returns record number [2] ERROR(T1UDR)/'Wrong file' [3] ZFINDCOMP SIZE 'A' find component in which to store A [4] (Z=(FSIZE T)[2])/1 [5] A FREPLACE T,Z write data to the file [6] 0 [7] 1:ZA FAPPEND T M(\__ "#$%&'() +,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] _`abcdefghijklmnopqrstuvwxyz{ } 5M( HH PARMSPATTERN CHKARG ARG;T;SWITCHES;P;S;DLM;;IO;SW;PAT;I;D [1] CHecK ARGument - set switches and reset argument [2] Spaces are used to delimit arguments. [3] Quotes or parenthesis can be used to include spaces. [4] Functions (scripts) can have 3 kinds of argument scope: [5] short (default), long (last argument contains the rest of the line) [6] and extended (the whole thing, including switches). [7] Switches can exist with or without [possibly defaulted] value [8] or be elided. Non mentionned switches are refused. [9] Shorter name are accepted. [10] '=' must be used when supplying values. [11] In the function switches have the same name preceded by '' [12] or contents of global . [13] [14] IO1  DLM'/'  ''  (2NC '')/'' [15] TFX((T)'RD S'),[0.1]T'R(~\S''[='')/S' [16] T\SARG''''  ERROR(2+/T)/'UNBALANCED QUOTES' [17] ERROR(01P-+\((2,T)~T)^'()'.=ARG)/'UNBALANCED PARENTHESIS' [18] PSTP Quotes, Text, Parenthesis [19] SW\P ....."..6.> ... ͬ."&'Cu.JuM(  RR DEFAULT VALUE [1] DEFAULT character string R by VALUE if it 0 [2] (R0)MOD  RVALUE  0 [3] MOD: R is NOT scalar 0 - if VALUE is numeric [4] (' '=10VALUE)/0  RFI R M( DELETE T [1] Marks records 1 in file [1] for deletion on commit [2] ERROR(T[1]1UDR)/'Wrong file' [3] UDRUDR,(0<1T)/1T M(  ZDIAMONDIZE F;T;I;S;L;J;IO;t;c [1] Fully diamondize function VR  [2] Assumes that the argument is in the format returned by VR. [3] Since the idea is usually to speed up execution comments will [4] be removed. [5] '' beginning a comment will prevent next line to be merged [6] [7] ERROR(0F)/'Locked function' [8] IOI1  T''  J0  [9] Z(FTCNL)F  F(Z)F Start with header line [10] 1:('['1F)/5 For each subsequent line, [11] L(1+FTCNL)F  F(1+L)F get line [12] L(L']')L Drop line number from front [13] L((\S)^\SL' ')/L Front and rear deblank [14] t~\L''''  ct^L'' comments start [15] S''(10,c)/L  c~\c S=Stop merging [16] Lc/L  S/4  (L)1 new line if , skip if blank [17] (0T)/2  TL  1 put at least one line in buffer [18] 2:(':'(c/t)/L)/3 do NOT merge if ':' in body of line [19] 4:L0TT,(0.='')N non- globals M('' 452 EFCL 3;1;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;4;40;41;42;43;44;46;47;48;49;5;50;51;52;53;54;55;6;7;8;9;95;96;97;98;99;CT;IO [1] fnlistintvec FCL charvec -- Performs various editing tasks on one or more fns [2] IO21141  CT0  45 0 0 ' '  (NC '2')L43  (02)L43 [3] L1:4 1 3 11 12 21 121 122 31 32 40 41 42 43 51 52 2 16 13 33 34 [4] (/742)0 [5] 94000  9[16 44 58 78 86 149 159 160 179 180 191 192 193 212 213 233 275 380]1  999 20 20 9  (/97^9.^7)L2 [6] ERROR 'CONTRADICTORY OPTIONS: ',9/4 [7] L2:45''  127  12(567*12,0),, 11 73 79 .*12 [8] 96' ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.' [9] 41DEF '45 97 6;1;2;3',TCNL,'[1]25361(12)134((2[1],1)5),[1](3[1],1)6' [10] 41DEF '598 6;1;2;3;4',TCNL,'[1]5(26196)/6,64((0,2)2,0)/1+21--/((0.54),2)431.1/15(3)(,3)\5' [11] 41DEF '67 99 8;1;2;3;4;5;ELX',TCNL,'[1]ELX''9''6(1+968)+.(18)70',TCNL,'[2]9:ELX''ERROR DM''11385(13)7411((WA-150)-8.1251)4.52+136102141',TCNL,'[3]10:6[2/1](1+9628)+.510/21(40),2' [12] 41DEF '45 95 6',TCNL,'[1] 4''6'',5,''1('',5,''/0),6''' [13] 25,3  (14125'')L3  19NL 3  25125  L4 [14] L3:1998(41-1)25  254125  (^/93=NC 19)L4 [15] 32' '=28,' ',(~9)19 [16] '*** Not ',(21+/~9)'a function',(1=+/~9)'s:',(32132)/28 [17] 19919 [18] L4:53(119)154019 NL 32 BPB 30MAR90 COMPILED FNS [19] (^/9^/(((119),53)19).((154),53)54)L4A [20] 32' '=28,' ',(~9)19 [21] '*** Compiled function',(1=+/~9)'s:',(32132)/28 [22] 19919 [23] L4A:(39''19)L42  370  35 0 4 ' ' [24] 230,(7[1 16 2 5 7 19 20 14 15]/L6,L6,L7,L8,L8,L9,L9,L10,L10),L11 [25] L5:4125''  4(41-1)25  254125  23123 [26] L6:3012 99 98 4  L5 [27] L7:61298 4  ERROR(26)/'OPTION 3 LENGTH ERROR' [28] 96 1 0  3712 99 92  179/2[;1]  35(19)2  L5 [29] L8:34(4'0123456789',54196)/4  (SIZE '1')/L5  134  L5 [30] L9:41399FI 4 [31] ERROR(/41<1)/'OPTION 33/34 DOMAIN ERROR' [32] 144000  14[((41) 1 0)/41]1  67[20]+((41) 0 1)/41 [33] 14[6]~14[6]  14\14  L5 [34] L10:11(,'G< Z9:99 99/99/99>' FMT 100100TS[4 5 2 3 1]),(^\4TCNL)/4 [35] L5 [36] L11:9((142) 408 280 4 2 344 344 312 5128 3080 9224 8200 9224 8200 520 520 408 257 2 5128 3080).^7 [37] 23(1,9)\(9/L18,L19,L20,L21,L15,L22,L27,L28,L30,L32,L37,L39,L40,L41),L42 [38] 26 0 0 '' [39] L12:(18VR 219[21;])L42  1514  (/7[1 2 5 6 7 16])L13 [40] 41\1+18TCNL,';'  2698 41[2]41[1]18 [41] 18(41[2]18),41[1]18 [42] L13:3837  3635  32\918''''  254118 SS TCNL,'[' [43] 825/32  32\925\80,18  (/932<618'')L14 [44] 469^1(18''),0  99>46 [45] 8(6941)/9  474641  48\48\'' 95(484647)/46 [46] 46'' 95 48  4918'{'  5048^\1^46\'' 95(464649)/49 [47] 4650^18':'  4750^4918'{}' [48] 3232(4850^(4649)<\1^47\'' 95(474746)/46)\6\810,8 [49] L14:32~32  23[1] [50] L15:2724118TCNL  (40=1325/25)L17 [51] 41(2-/7[14 15])13,18 [52] (19\44''''=1041[1]41[2]18)L16  44[144/44]0 [53] 9\44 [54] L16:27 1 1 +41[2]41[1]+(9<10=TCNL)1 [55] (/449<10='')L17 [56] 4=/2721+((44/110='')/41+(441),0),7[14 15]/41 [57] L17:18(27[1]18),((0=13)((64)TCNL,'[',(7[14 15]/0.5,1+13),']'),11),27[2]18 [58] 41(64)+11  32(27[1]32),(41(64)1),27[2]32 [59] 2518 SS TCNL,'['  206  (4^7[14])23[20],L21 [60] L18:10(18'')^132  205  ((10)<41101)23[2] [61] 10[41]~/7[12 13]  (/1010>118'{')23[2] [62] 411018TCNL  101041\10,41/10 [63] 9(\10)10>41/7[10 12] [64] 9[((25^610110)/25).+0,5]~41  189/18 [65] 329/32 [66] 15(25/9)/(+/25)15  23[2] [67] L19:2518 SS TCNL,'['  10(132)^18''  412510 [68] 9~18196  99\19/18=':'  99118='' [69] 25(25\10,(+/25)15)^(41\10,41/25)^5919 [70] 9(25)1  9[(4125/25).+ 2 3 4 5]0 [71] 18[41.+ 0 1]((41),2)' '  189/18 [72] 329/32  205  23[3] [73] L20:1332^18 SS ' '  2518 SS TCNL,'['  15(+/25)15 [74] 1313^\25\1510,15  4113/13  9((13)+541)1 [75] 9[(41+541).+ 3 2 1 0 1]0  189\18 [76] 329\32 [77] 18[((9\13)/9).+ 0 1]((41),2)TCNL,'['  205  23[4] [78] L21:2518 SS TCNL,'['  4125/25 [79] 18[41.+5]'P[Q]LI5' FMT41  23[20] [80] L22:4132^18196  31(410,141)/18  31((0.531),2)31 [81] 54((18 SS ' ')/18).+ 1 0  18[54]18[54]  1618[31[;1]] [82] 2418[31[;2]]  9~16'0123456789' [83] 33(/7[5 6 7 17])31[;1]<18TCNL [84] 6(7[1 16 2 5 6]/L23,L23,L25,L24,L24),L26 [85] L23:5124=''  5224' ' [86] 3333~\(5251)\'' 95~(5251)/52  616 [87] L24:333316(24':')/16  616 [88] L25:333341617  994^18[31[;1]-2]TCNL  616 [89] L26:31(9^33)31 [90] 40--/31  4040.1/40 [91] 44(18)0  44[31]1  29(40)(,40)\(\44)/18 [92] 512 99 29  7[17]23[7]  415[45]  41[4112 99 2]0 [93] 4((410)^11,41141)/4  4229[4;] [94] 43(42[;1]'.0123456789')\'*'  43[5[4](18[31[;2]]=':')/5]':' [95] 43[(31[4;1]<18TCNL)/4]';'  414''  23[7] [96] L27:41(~(NC 29) 3 4)^18[31[;2]]' '  641/5  66[6] [97] 6(11,616)/6  41306 [98] 26((7[16]^(30)<3012 99 26)26)97 29[5(41>30)/6;] [99] 23[8] [100] L28:(/4132[31[;2]]^18[31[;2]]':')23[9]  7[6]L29 [101] 4141/5 [102] 441,(1)'L'  209  L31 [103] L29:4141\(38)<3841/5 [104] 18[41/31[;2]]' '  3838,(41/5),1 [105] 5[41/41]1  41+/(41/31[;2]).25/25 [106] 3636 97(((41),1)41),[1]' '  23[9] [107] L30:41((31[;1]<18TCNL)/5),(12 99 26),(18[31[;2]]':')/5 [108] 41((''(29[;1],' ')[541])^4112 99 2)/41  2010 [109] 4434,(34)'' [110] L31:(41((38)<3841)/41)23[20]  3838,41 [111] 33(12 99 26),((55)=5)/5 [112] 33(12 99 36),((38)<3833)/33 [113] 13(33)+41  6(1=44)144'Aa' [114] 4(6/('<',44,'>,LI3')FMT13),((27(1+96''44)96),' ')[(~6)1+ 28 27 28+13] [115] 3636 97(((33)<3312 99 4)4)[41;]  23[20] [116] L32:(38)L36  29''  41385  (20(44138)/41)L34 [117] 44(18)1  31431 [118] 44[31]0  531'' [119] L33:33=\44  1833/18 [120] 3233/32 [121] 33~33/44 [122] 6(+/36' ')[20]  433/33  3360  40+\33/6 [123] 433/4 [124] 33(1+(18)+140)1  33[4+10,40]0  414+40 [125] 33[41]~33[41] [126] 33=\133 [127] 1833\18 [128] 323333\32 [129] 4,36[20;] [130] 18[(~33)/33](4' ')/4 [131] L34:413812 99 26 [132] (20(44138)/41)L35 [133] 2636[20;]97(~4)26 [134] L35:7[17]L36 [135] 413812 99 42 [136] (20(44138)/41)L36 [137] 42((~4)42)97 36[20;] [138] 43((~4)/43),4/43 [139] L36:(0=26)/23[11] [140] 6''4198 13(41+18TCNL)18 [141] 4112 99((6)(1+''13)6-1)41 [142] 641,3112 99 26 [143] 26((((41)+31)=631)>(26[;1]'1234567890')26^.=(126)'')26 [144] 26((26[;1]'ST')26[;2]='')26 REMOVE LOCAL TRACE/STOP [145] 41,';',26[12 99 26[;8126];] [146] 41(41' ')/41 [147] 18(13,41),418 [148] 32(432),((41)1),432 [149] 23[11] [150] L37:(' '=102DEF 18)L38 [151] 44(7 17 'WS FULL DEFN ERROR CHAR ERROR SYMBOL TABLE FULLUnmatched quotes ?????? Empty line ')[''2;] [152] 4444,' in <',19[21;],'>' [153] ((44' ')144' >')/44 [154] L42 [155] L38:4545,2,' ' [156] 23[12] [157] L39:18 [158] 23[13] [159] L40:932^18 SS ' ' [160] 46+7[18] [161] 419/9 [162] 417[4]+41+41+41 [163] 9((18)+441)1 [164] 9[41.+0,4-1]0 [165] 69\18 [166] 6[41]TCNL [167] 6 [168] 23[14] [169] L41:412 99 4226 97 42 [170] 6(44)=4 [171] 4(6/6)[12 99 42[6/6;8142]] [172] 42' ',42[4;] [173] 43(((126)';'),43)[4] [174] 4((~/7[3 4 18])/TCLF,'<',2,'>',TCNL),'Glob:',(,(43=' ')42),TCNL,' Loc: ',(,(43=';')42),TCNL,' Lab: ',(,(43=':')42),7[3 4 18]/TCLF [175] ((4=' ')14196)/4 [176] L42:(392121+1)L12 [177] 0 [178] L43:'1 LOCALIZE IDS INITIALIZED',TCNL,'2 LOCALIZE IDS INITIALIZED ALREADY LOCALIZED REMAIN SO',TCNL,'3 REPLACE NAMES',TCNL,'11 VR',TCNL,'12 VR, END ',TCNL,'13 VR, BEGIN ',TCNL,'16 XREF',TCNL,'21 RENAME LABELS',TCNL,'121 UNLABEL',TCNL,'122 RENAME ALL LOCAL OBJECTS (I.E., THE EXPLICIT RESULT,',TCNL,'31 INSERT DIAMONDS',TCNL,'32 STRIP DIAMONDS',TCNL,'33 INSERT DIAMONDS WITHIN BLOCKS',TCNL,'34 STRIP DIAMONDS WITHIN BLOCKS',TCNL,'40 STRIP COMMENTS',TCNL,'41 STRIP COMMENTS, LEAVE ',TCNL,'42 STRIP COMMENTS, LEAVE FIRST',TCNL,'43 STRIP COMMENTS, LEAVE AND FIRST',TCNL,'51 FIRST LINE COMMENT',TCNL,'52 LAST LINE COMMENT' N( ZFINDCOMP S;D [1] Finds component in which to store array of size  without explosion [2] Also updates global URUM to claim the component Z [3] [4] SS16 size of object in paragraphs [5] DURUM-S excess space in each component [6] Z/(D0)/D find comp with least wasted space [7] ZDZ the comp number [8] (Z>D)/1 If a free record is big enough, [9] ((S>32)^URUM[Z]>2S)/1 and there will not be >50% wasted space [10] URUM[Z]-URUM[Z] mark record as being in use [11] 0 Else, no record is big enough, [12] 1:ZURUM0 look for an unused component [13] (Z>D)/2 If there is one, [14] URUM[Z]-S use it; remember its size [15] 0 Else, no empty component, [16] 2:URUMURUM,-S add new comp to end of file N( ZFOPEN F;I;A;B;D [1] Ties file  (if not already tied) and returns the tie number [2] (2=VI F,F)/1 If no library number was provided, [3] D66+AV1CHDIR '' get default drive number [4] F(0D),' ',F use the default drive [5] 1:AFNAMES  A(+/^\A=' ')A left justify file names [6] F' ',F  BF' '  F1(B1B,0)/F delete excess blanks from F [7] I(A^.=(1A)F)1 search for the file name [8] (I>1A)/2 If the name was found, [9] ZFNUMS[I] just return its tie number [10] 0 Else, the file is not yet tied, [11] 2:Z((FNUMS)FNUMS)0 lowest available tie number [12] F FSTIE Z tie the file N( aZFRDBL aA;aT [1] Front and rear deblank of a character vector or matrix  [2] aT(STPTR 'aZ aA')CALL FRDBLOBJ N(n-I9m ePl P... &<tt&tu &&  &...u33^.K. Dt.>..uI+I;st.>..uI+I;sN}..+}.."&t...> . ... .."..6.H}=!N( RFTIMEBASE A;B;C;D;IO;CT [1] Converts TS-style vector into number of microseconds since 1900 [2] The argument may have any shape leading a last dimension of length 7. [3] The result has shape 1. [4] Copyright (c) 1985 STSC, Inc. All rights reserved. [5] CTIO0  R(71A)'' [6] D 0 0 0 0 0 0 1 /+\A(A) 0 0 0 3600000000 60000000 1000000 1000 [7] R 1 0 0 0 0 0 0 /A [8] B 0 693961 693930 693902 693871 693841 693810 693780 693749 693718 693688 693657 693627 [0 1 0 0 0 0 0 /A] [9] A 0 0 1 0 0 0 0 /A u [10] C400RR+1900R<100 [11] R(1A)D+86400000000B+A-(((100 1 0 0 0),300 0 0 0 0 ,96 1 0 0 0)[C]^B<693902)-((R146097)-C+(1004R)-4100R)400 N( RFTIMEREP A;B;C;D;IO;CT [1] Converts number of microseconds since 1900 into TS-style vector [2] The argument  may have any shape; the result has shape (),7. [3] Copyright (c) 1985 STSC, Inc. All rights reserved. [4] CTIO0  A(A-D86400000000A)86400000000 u [5] RA+693902  RR-(R-B146097R)146097  B(B)-C36524R  RR+(R-C)36524  BB+C1461R  R365A58+R-(R-C)1461 [6] C3650  C[0 31 59 90 120 151 181 212 243 273 304 334]1  C(+\C)[R] [7] BR- 0 2 29 57 88 118 149 179 210 241 271 302 332 [C]+B [8] BC,[0.5+C]B [9] R(A-R)365 [10] ERASE 'A C'  RR,B  ERASE 'B' [11] D(D-A1000000D)1000000 [12] AA1000 [13] D 0 60 60 D [14] DD,A  ERASE 'A' [15] RR,D N(xAA VALUEPATTERN GETSWITCH SWITCH;P;I [1] GET SWITCH VALUE FROM ALLOWED PATTERN [2] POSSIBLE ASSIGNMENTS ARE: [3] /S no value assigned [4] /S= any value MUST be assigned [5] /S=VALUE(S) value assigned must be in the set supplied [6] /S[=]VALUE(S) value, if assigned, must be in the set [7] VALUE1 [8] (/P2PATTERN SS '[=]')MEM  CHK'='SWITCH [9] MEM:(/PPATTERN'=')/COMP [10] NO value necessary [11] ERROR('='SWITCH)/'NO VALUE ALLOWED FOR SWITCH ',PATTERN [12] 0 [13] COMP:ERROR(~'='SWITCH)/'VALUE REQUIRED FOR SWITCH ',SWITCH [14] CHK:VALUE(ISWITCH'=')SWITCH [15] (' '^.=PATTERN(P1)PATTERN)/0 [16] SWITCH[I]' '  (' '^.=VALUE)/COMP [17] ERROR(~/PATTERN SS VALUE)/'UNKNOWN VALUE FOR SWITCH ',(I-1)SWITCH N( ZP GETVAL A;I [1] Returns value of object  [2] The right argument is the name of the object to read [3] The optional left argument is the prefix for the global variables [4] set by OPENUF (default = U) [5] (0=NC 'P')/'P''U'' ' [6] 'I',P,'NA MATIOTA A' IUNA MATIOTA A [7] (I=0)/0 return no result if object not defined [8] 'ZFREAD ',P,'TN,',P,'NI[I;2]' ZFREAD UTN,UNI[I;2] N(hh aZLJUST aA;aT [1] Left justifies character vector or matrix  [2] aZ(+/^\' '=aA)aA N(;;&<tttt &. &&. t:t5&@ذ tAQOY+JuN(YY za LPOS b;x [1] Left Partitioned Or Scan [2] z\z\x10,x(zab)/b N(ZZ RB LPSS CUT [1] Left Partition Smaller Scan [2] R\CUT<\B^\10,CUT N(,, ZT NC F;A;H;N;U [1] NC COVER FUNCTION FOR THE FILE [2] (NC 'T')5  (0=NC 'UFILES')/1 IF UFILES IS DEFINED, [3] UUFILES  2 USE IT TO DECIDE WHICH FILE TO USE [4] 1:UUCMD ']UFILE' ELSE, [5] U(0,U[1;]']')U GET SEARCH LIST FROM FILE [6] 2:TFOPEN(1U)U USE FIRST FILE IN LIST [7] 5:HFREAD T,2 FILE HEAD [8] AFREAD T,H[2]  NFREAD T,H[3] NAMES MATRIX AND NUMERIC INFO [9] Z(0,N[;1])[1+A MATIOTA MATRIFY F] NAME CLASS [10] ZZ-2Z=5 change class 5 (locked fns in pkg) to 3 N(HH ZNL C;A;H;N;T;U [1] NL COVER FUNCTION FOR THE FILE [2] (0=NC 'UFILES')/1 IF UFILES IS DEFINED, [3] UUFILES  2 USE IT TO DECIDE WHAT FILE TO USE [4] 1:UUCMD ']UFILE' ELSE, [5] U(0,U[1;]']')U READ LIST FROM FILE [6] 2:TFOPEN(1U)U USE FIRST FILE ON LIST [7] HFREAD T,2 FILE HEAD [8] AFREAD T,H[2]  NFREAD T,H[3] NAMES MATRIX AND NUMERIC INFO [9] Z(N[;1]C,(3C)/5)A SELECT DESIRED NAME CLASSES [10]  If fns specified, find both type 3 and 5 (locked fcn in pkg) [11] ZZ[AVZ;] RESULT IS SORTED N( ZNOPEN F;I;A;B;D;ELX;IO [1] Ties file  (if not already tied) and returns the tie number [2] IO1  ELX'DM'  ANNAMES [3] B' 'F' ',F  F1(B1B,0)/F delete excess blanks from F [4] I(A^.=(1A)F)1 search for the file name [5] (I>1A)/2 If the name was found, [6] ZNNUMS[I] just return its tie number [7] 0 Else, the file is not yet tied, [8] 2:Z-((-Z)ZNNUMS)0 1st available tie number [9] ELX'ERROR(^\DMTCNL)/DM' [10] F NTIE Z tie the file N(LFF ZT OBJDATA B;A;H;I;N;T;U;IO [1] RETURNS THE TIE NUMBER AND COMPONENT NUMBER OF THE VALUE OF OBJECT B [2] AND CREATE & MODIFY DATES [3] IF THE OBJECT IS NOT DEFINED, THE COMPONENT NUMBER IS ZERO [4] IO1  (NC 'T')0  T0 [5] 0:(T>0)/3 [6] (0=NC 'UFILES')/1 IF UFILES IS DEFINED, [7] UUFILES  2 USE FIRST FILE NAMED IN IT [8] 1:UUCMD ']UFILE' ELSE, [9] U(0,U[1;]']')U GET SEARCH LIST FROM FILE [10] 2:TFOPEN(1U)U TIE FIRST FILE ON LIST [11] 3:HFREAD T,2 FILE HEAD [12] AFREAD T,H[2]  NFREAD T,H[3] NAMES MATRIX AND NUMERIC INFO [13] HIA MATIOTA MATRIFY B LOOK UP NAMES [14] ZT,HN[H/I; 2 3 4] TIE NUMBER, COMPONENT NUMBER, CR DATE, MOD DATE [15] (~(1B)^1=I)/0  Z,Z RETURN VECTOR IF ARG WAS VECTOR WITH ONE NAME N( \\ P OPENUF A;F;T;1;2;3 [1] Opens user command file , reads directories, sets global variables [2] The right argument is the name of the file to open [3] The optional left argument is an alternate prefix to use in front [4] of the result variable names. The default is 'U' [5] If the prefix is 'U', the file is held for a write transaction [6] Results: [7] UTN - tie number of the file [8] UHD - file head (component 2) [9] URUM - record usage mask [10] UDR - tie number, list of deleted records [11] UNA - character matrix of names of objects in the file [12] UNI - numeric matrix of info about objects [13] UETC[1] - flag set to 1 if a new object is saved in the file [14] UETC[2] - was the file tied before we opened it? [15] [16] (0=NC 'P')/'P''U'' ' default prefix [17] FFNUMS [18] TP OPENUFSUB A open the file [19] P,'TNT' define [20] P,'HD1' [21] P,'RUM2' [22] P,'DR3' [23] P,'NAFREAD T,1[2]' [24] P,'NIFREAD T,1[3]' [25] P,'ETC0,TF' no new object yet, was file tied? N( ZP OPENUFSUB A;UHD;URUM;UDR [1] Subroutine used by OPENUF [2] Z(P'U')TIEUF A [3] 1UHD [4] 2URUM [5] 3UDR O( ROS A;T;D;IO;X;OBJ;FILE;LEFT;RIGHT;O;F;APL;RESULT;CASE;NUM [1] Object String Command Argument - used by CMD [2] The idea is to split search strings from Switches (/...) [3] Since the text to search may contain blanks the string [4] should be surrounded by a perticular character (like quote). [5] [6] Thus, OS 'abc '''' ''text + b/'' /L /X=C /O=MyFn' should return [7] something like '*LC*abc**text + b/' and set CMDLA to 'MyFn'. If a [8] file is to be searched it will be tied and the number put in CMDLA. [9] T'/APL /CASE /FILE= /LEFT /NUM /OBJ= /RESULT /RIGHT /X ;BCTbct' [10] IO1  D1AT PARSE A [11] ERROR((OOBJ)^FFILE)/'/FILE and /OBJ are mutually exclusive' [12] R(NUM,CASE,RESULT,RIGHT,LEFT,APL)/'NI=RLA'  (0TX)/C [13] RR,'BCTBCT ;'['bctBCT ;'T] [14] Check for file [15] C:F1  (IFERRIN 'CMDLAFOPEN FILE')4 Go for filename [16] ERROR(IFERRIN 'CMDLAFILE')/'FILE ERROR' or tie number [17] 4 [18] 0:T,' ',SINL  XT(X\XT'[]')/T  TMATRIFY T [19] XTOBJCMDLA(X[;1]'')X(0=T MATIOTA X)XOBJ  4 [20] 1:O15  (''1OBJ)20  (2OBJ1OBJ)4,0 [21] 15:OBJNL 3  0 [22] 20:(OBJ^.=' ')3,15 [23] 3:('>'1CMDLAOBJ)4 [24] CMDLAOBJT OVER UCMD 'GLOBALS ',(T1OBJ),'/FUN/FULL' [25] 4:RD,R,A O( 1PACK 2;3;4 [1] Collects objects together into a package [2] (21(0,SYSID,STPTR 'PACK')CALL PACKBIN)0  ERROR2 O(i i PARMSPATN PARSE ARG;D;E;DLM;I;P;PAT;Q;S;SP;SW;SWIT;T;d;;IO [1] Dan Baronet 1993 - PARSE switches and reset argument. Version 2.2 [2] Spaces are used to delimit arguments. '/' delimits switches. [3] Quotes can be used to include spaces or '/'. [4] Switches can exist with or without [possibly defaulted] value [5] or be elided. Non mentionned switches are refused. [6] Shorter name are accepted but '=' MUST be used to supply values. [7] In the function switch variables have the same name preceded by '' [8] or contents of immediatly global ''. [9] Example: [10] CMDARG '/SA /AB= /SC[=] /CD=1 2 3 /E[=]D E F /=*' PARSE CMDARG [11] [12] IO1  T\ARG=''''  S\SWT1Q T=1st QUOTE [43] PTS> Delimiters: spaces not in quotes or 1st quote [44] Compressor: any double quote or last quote not in \ or double delim. [45] PARMS[P/P]1d  PARMS((1Q)P^1P)/PARMS [46] DanB 1994/03/25 17:47 +Ǖ+zzPARSE utility. Keywords: USER COMMANDS, ARGUMENTS, SWITCHES VERSION 1.0 This function will return the parsed arguments of a string argument to a USER COMMAND. It will also set a series of globals, one per allowable command switch. To understand what this means consider the following: - all user commands take an argument which is whatever was to the right after the command name; - all commands accept zero or more switches. An argument is whatever the commands applies to. A switch alters the behaviour of the command. Arguments are separated by spaces. Switches are preceded by a delimiter. They end at the beginning of the next switch or the end of the string. Switches may be absent, present and/or take a value. Example: ]MYCOMMAND 1ST-ARG 2ND-ARG MEBBE-3RD /SWITCH1 /SWITCH2=abc Here '1ST-ARG', '2ND-ARG' and 'MEBBE-3RD' are the arguments. 'SWITCH1' and 'SWITCH2' are switches which modify the behaviour of 'MYCOMMAND'. 'SWITCH1' is present and 'SWITCH2' is not only present but has the value "abc". The function will return (in this case) the string '*1ST-ARG*2ND-ARG*MEBBE-3RD' and set the global variables 'SWITCH1' to 1 and 'SWITCH2' to 'abc'. The star character (*) is an example. In practice the function should return a delimiter which cannot be entered from the keyboard such as TCDEL. Example: CMDMYCOMMAND ARG; SWITCH1; SWITCH2; SW3 ;SW4 ;DELIMITER [1] THIS COMMAND WILL SHOW THE ARGUMENTS AS PARSED BY [2] DELIMITER''ARG'/SWITCH1 /SWITCH2= /SW3 /SW4[=]' PARSE ARG [3] (+/DELIMITER=ARG),' ARGUMENTS ENTERED' [4] 'VALUE OF SWITCH1: ',SWITCH1 [5] 'VALUE OF SWITCH2: ',SWITCH2 [6] 'VALUE OF SW3: ',SW3 [7] 'VALUE OF SW4: ',SW4 This command will only accept 4 different switches: SWITCH1, SWITCH2, SW3 and SW4. SWITCH1 and SW3 can only appear WITHOUT any value assigned to them. If set, the variables SWITCH1 and SW3 will contain the value 1, if not, the value 0 (for each). SWITCH2 can only appear WITH a value assigned to it. If set it will contain the string assigned, otherwise the value 0. SW4 is ambiguous: if assigned without a value it is set to the numerical scalar one (1), if assigned (with the '=' character) it is set to the string next to it and if NOT present it is assigned the numerical scalar zero (0). The [=] meaning 'assignment not compulsory'. Problems with arguments arise when they must contain spaces or switch delimiters. These can be circumvented by using quotes around the arguments. PARSE will recognise empty strings and strings with quotes which must be doubled. Another hypothetical example: ]FNSEARCH LABEL 'MY CODE' 'I''M HERE/EH!' /S1 /S2 /ETC=... Limitations: - switches may not be the beginning of another switch, for example /SW and /SWITCH won't work Features: - the argument delimiter may be changed using the metaswitch /= as in '/MYSWITCH /2= /M1 /=*' PARSE ' a b '''' def' will return '*a*b**def' - the 1st character for the variables to contain the switch values may be changed if variable immediatly global '' is set to a perticular value Example: CMDX ARG; [1] 'X'  ARG'/S=' PARSE ARG Global 'XS' contains switch [2] ... - the scope or range of values may be specified as in '/MYSWITCH=abc def gh ij' PARSE ARG where the value associated with the switch will be checked against 'abc def gh ij' to ensure it is a substring. NOTE this is ONLY a substring check. If the intent was to ensure any of the values to any of the 4 words there the check will fail as 'def gh' will be accepted. Final note: this is not a foolproof function. Its aim is to help saving time parsing the argument line. YOU must do your own checking from there. At least until ESP can be implemented... Dan Baronet, Feb 1993pg check. If the intent was to ensure any of the values to any of the 4 words there the check will fail as 'def gh' will be accepted. Final note: this is not a foolproof function. Its aim is to help saving time parsing the argument line. YOU must do your own checking from there. At least until ESP can be implemented... Dan Baronet, Feb 1993O( ZA PATIOTA B;E;I;L;R;V;X [1] Like MATIOTA, but the left argument may contain patterns [2] Arguments: [3] A - a character matrix with a pattern (or name) on each row. [4] A ? character matches any single character, and * matches [5] zero or more chars. * may occur only once, at the start or [6] end of the pattern. [7] B - a character matrix of names [8] The arguments may be scalars or vectors, in which case [9] they are treated as a 1-row matrix. [10] Result: [11] Z - integer vector with an element for each name in B. [12] The value is the index of the first pattern in A that [13] matched the corresponding name in B, or 0 if none matched. [14] [15] A(2 1 1 ,A)A coerce arguments to matrices [16] B(2 1 1 ,B)B [17] V1B width of B [18] RRJUST B [19] Z(1B)0 [20] I0  E1A [21] 1:(E..>n .tAG..;}O( BQ SHADOWED F;N;D [1] Detects names blocked by localization within the command processor [2] Displays a warning message if any names are shadowed, and [3] returns a bit mask marking shadowed names with ones. [4] If a left argument of 0 is provided, the message is suppressed [5] [6] (0=NC 'Q')/'Q1' [7] FMATRIFY F [8] NSI [9] N(N[;1]'')N get entries for functions on )SI [10] D(N[;6]^.='UCMD[')1 stack depth to boot function [11] DD1N exclude global level, in case no UCMD [12] B~^/1=(IDLOC F)[;D] find localized names [13] BB'UCMD' MATIOTA F UCMD is also shadowed [14] (~Q)/0 quit if caller wants no message [15] (~1B)/0 quit if no shadowed names [16] (4<+/B)/1 if more than 4 names, use TELPRINT [17] D,' ',BF [18] OUT 'Warning--shadowed: ',(~D SS ' ')/D [19] 0 [20] 1:OUT 'Warning--shadowed:' [21] OUT(- 0 3 +N)N(PW-3)TELPRINT BF O(8 aZaA TELPRINT aB;aW;aT [1] Forms tall matrix into multi-column format, like telephone book [2] The left argument is an optional page width (default = PW) [3] (0=NC 'aA')/'aAPW' [4] aT(STPTR 'aZ aA aB aW')CALL TELPRINTOBJ O(m6Pa aPaO    . ....=u .P'&<tt& &>u& ..&=u& .&..'.%=uJ...!...!.. ..;tA F;~.Mu~G.=0r0.=u#..H.'.. .! ώǿg.';~;w êê.;w0.%g7...=0w .;ws...H.'..'H=0r0.. .'.%.u.) ...'.+./.- .1 .5 ..3.%..7...).65.>1.1..5.+u.7.6/.\..-.-.1./.'.+.3u(FSIZE Z)[2])/1 watch out for empty file [15] T'User-defined commands file' phrase that identifies file as ours [16] (T(T),FREAD Z,1)/2 ensure right type file [17] 1:FUNTIE(~ZTIED)/Z untie file if we tied it [18] ERROR 'Not a user command file: ',F [19] 2:UHDFREAD Z,2 file head [20] URUMFREAD Z,1UHD record usage mask [21] (~^/URUM 0 1)/3 If RUM is boolean, [22] URUM-URUM convert to new integer format [23] 3:N(FSIZE Z)[2]-1 [24] URUMNURUM,(0N-URUM)1 assume extra comps at end are in use [25] UDR,Z tie number and list of deleted records (none yet) O(== ZVAL B;A;H;I;N;T;U [1] RETURNS VALUE OF VARIABLE OR VR OF FCN IN FILE [2] (RETURNS OBJECT CODE FOR COMPILED FUNCTIONS) [3] (0=NC 'UFILES')/L1 IF UFILES IS DEFINED, [4] UUFILES  L2 USE FIRST FILE NAMED IN IT [5] L1:UUCMD ']UFILE' ELSE, [6] U(0,U[1;]']')U READ SEARCH LIST FROM FILE [7] L2:TFOPEN(1U)U TIE FIRST FILE ON LIST [8] HFREAD T,2 FILE HEAD [9] AFREAD T,H[2]  NFREAD T,H[3] NAMES MATRIX AND NUMERIC INFO [10] (0=IA MATIOTA B)/0 NO RESULT IF UNDEFINED [11] ZFREAD T,N[I;2] THE VALUE O(  ZD VECTORIZE M [1] segstr[delim] F charmat -- Convert char matrix to segmented string [2] is optional; default=TCNL. From ASMFNS. [3] M(STPTR 'Z D M')CALL VECTORIZEOBJ,0 P(  .. =u &&<u-u&u&>u& .َ&>t&.&6 .6 .. ;uIK}... ...& .3.;uI.&'C.+6A..J}!m P( aZVTOM aV;aT [1] Vector TO Matrix: converts 1 delimited character vector to matrix [2] aT(STPTR 'aV aZ')CALL VTOMOBJ P( BB386P*fEf]fEfEfE(fEEf} }Mu +!IG+I:CG;~EEEEljE U$‰EfKu ]}M ,K&IU$K:J ~J*øظ+p@,@@bunM$C@.@}nM$C@0@@~'$C@1@X%C@2@]w}K%C@5@hnM$C@7@@nM$C@9@%C@P@_.@%C@@P@Z[A%C@P@@O$C@P@ҳƣ %C@Q@ 6x$C@Q@༧nM$C@R@uOlM$C@@R@K%C@R@@4%C@R@hR%C@@S@@^lM$C@S@%C@S@`8o %C@@T@nelM$C@T@ Z$C@T@D@%C@U@@6$C@@U@$llM$C@U@xo)b %C@U@ btlM$C@V@7l$C@@V@`a$C@V@S-d$C@V@`{ذw%C@X@=m$C@@X@LN%C@X@[Cf$C@X@&K$C@Y@5$C@@Y@Û>$C@Z@`k$C@@Z@`dS$C@Z@`7$C@Z@` /3%C@[@Y,l$C@[@go%C@\@x4%C@@\@@`˗+%C@\@IkR%C@\@za$C@]@@'[^$C@@]@YdD6%C@]@ uL%C@]@5m$C@^@PW4%C@@^@`F4%C@^@a4pk$C@^@`C:4%C@_@`3%C@@_@`3$C@_@`}l5;%C@_@`ۺ4%C@`@{%C@ `@`)3%C@@`@gȚ$C@``@~qw%C@`@%;%C@`@@ I$C@`@)yr{$C@`@L%C@a@qw%C@ a@u$C@@a@$3%C@`a@]5%C@a@@.2%C@a@qXӭw%C@a@Ai9%C@a@,=u%C@b@`L %C@ b@W$C@@b@n0/$C@`b@˨+$C@b@+$C@b@+$C@b@+$C@b@{+$C@c@@2+$C@ c@o+$C@@c@`&+$C@`c@@*n$C@c@ ߂d!%C@c@`a$C@c@pk$C@d@1$C@ d@  ^%C@@d@w%C@`d@#$C@d@@Z$C@d@@L0$C@d@$C@d@*&C@e@|$C@e@` 6%C@e@@)t w%C@f@R%C@ f@ (4%C@@f@`"%C@`f@C$C@f@`$C@f@6%C@f@%N3w%C@f@ %C@g@q%C@ g@`6_[T%C@@g@$q%C@`g@xω]$C@g@ꂊ]$C@g@ ]$C@g@@>6%C@h@ ]$C@ h@]$C@@h@e]$C@`h@@]$C@h@=^$C@h@$]$C@h@]$C@h@9]$C@i@`P]$C@ i@@:f]$C@@i@@6]$C@`i@f%C@i@$C@i@$^u$C@i@vL%C@i@xvL%C@j@ k$C@j@`*Epk$C@k@@8d$C@ k@@y$C@@k@PvL%C@`k@/vL%C@k@I$C@k@@$C@k@` $C@k@ $C@l@l/$C@ l@mIn$C@@l@`tH%C@`l@+$C@l@@;l %C@l@`[ӭw%C@l@%w%C@ m@5U9%C@@m@ N$C@`m@3Pӭw%C@m@@34%C@m@Ae$C@m@ oL%C@m@Uӭw%C@ n@x$C@@n@!E$C@`n@(E$C@n@Mj$C@n@@$C@n@@5@E$C@n@C%C@o@`GJE$C@ o@V$C@@o@'of$C@`o@ʹ$C@o@@i$C@o@`jE$C@o@ pE$C@o@Mj$C@p@apk$C@p@;~pk$C@ p@@:$C@0p@` AJ$C@@p@@*!$C@Pp@]$C@pp@d$C@p@l$C@p@f;$C@p@:o}^$C@p@`Į %C@p@@$C@p@NYpk$C@p@wpk$C@p@{s%C@q@ $C@q@਌$C@ q@Tpk$C@0q@npk$C@@q@vM $C@Pq@@$C@`q@ ޸%C@pq@avL%C@q@Yn$C@q@ Kpk$C@q@Bhpk$C@q@$C@q@ ƶ$C@q@lR$Cd52$C@r@ {w%C@r@7Φ$C@0r@c$C@@r@@Ԧ$C@`r@ۦ$C@pr@`I$Cd52$C@r@[⦌$C@r@`㞌$C@r@$C@r@=禌$C@r@Dđ$C@r@`Vw%C@r@RVP6%C@r@ {歷$C@s@@$C@s@Y$C@ s@ $C@0s@`$C@@s@$C@Ps@v$C@`s@8$C@ps@Ui#Cd52$C@s@}j#Cd52$C@s@@d$C@s@$Cd52$C@s@e$Cd52$C@s@ V$C@s@?%C@s@ $C@t@$C@t@ 1٥>%C@ t@@ M"%C@0t@=Ĉ$C@@t@'$C@Pt@"l$Cd52$C@`t@|$C@pt@$C@t@]^%C@t@`$C@t@`$C@t@ O $C@t@q$C@t@($C@t@')W$Cd52$C@u@m9$C@u@@C/$C@ u@5$C@0u@@ $C@@u@$C@u@` ? 00390000'Unrecognized object type; not loaded:  [ ;]. < 00400000 >:  ((E'(( [ ;] )/ [ ;]) 00410000  ')RCDEF FREAD (  [ [ ];]))0. < 00420000 ?:  E'(( [ ;] )/ [ ;])' 00430000  PDEF FREAD (  [ [ ];])(3NC E)/0. < 00440000 =:   [ ;]FREAD   [ [ ];]. < 00450000 9: (0% ")/%  (- )/ FUNTIE   00460000  CMD 5 AFUNTIE FNUMS~TIEDNUNTIE NNUMS~TIEDRC0 00470000.(FA  ) +    00480000 +:.( /)/>(/ )/WS FULL 00490000>(/ )/SYMBOL TABLE FULL 00500000>Unable to define function <((  )/ )> @ @  AQ >c0033000 00010000# DEFAULT character string R by VALUE if it 0 f:- [ ^ 00020000.( @A) B @ A.ch token in the 00030000 B:# R is NOT scalar 0 - if VALUE is numeric# The followin 00040000.( / A)/ @ @c0037000 C D  E; F 00010000# Forms a matrix with over  00020000.( (DaZ aA aB) ) 00030000# If mixed numeric types, use APL version 00040000 D( D) D E( E) E 00050000 F( D) E D( F D) D E( F E) E C D[] E C D  E; G A  00010000#Forms a matrix from a vector or matrix of names / 00020000# Optional left argument is a list of delimiter characters (default=' ')run t 00030000 G(DaZ aA aB) /  C D  E; Gs version 00010000#Looks up names  in matrix of names , returning 0 if not found"ERRMSG( 00020000 G(DaZ aA aB) LC) H  (;( ./( 00010000#Returns 1 if an error occurs while executing statement , 0 if not^#If the n 00020000# Global result ERRMSG is the first line of the error messageS \0010000 00030000# (ERRMSG is not changed if there is no error): +((   00040000#ERRMSG(^\DMTCNL)/DM  ERROR(( )LC)/ERRMSG  0 00050000 H- ( H0001000  I 00010000#Function through which all output is passed;  00020000 I J  K; L; I; M; Nrr 00010000#Ties file  (if not already tied) and returns the tie number 00020000.(/  K K)/ H#If no library number was provided, 00030000 N( [# get default drive number defi 00040000 K( N)  K# use the default drive4=1S)/ 00050000 H: I$ I(/\ I/ ) I#left justify file namesPYRI 00060000 K  K M K  K( M M)/ K#delete excess blanks from Fspace ar 00070000 L( I./( I) K) #search for the file namey 00080000.( L. I)/ (#If the name was found, 00090000 J%[ L]# just return its tie numberCopyr 00100000.#Else, the file is not yet tied,are' [3 00110000 (: J((  %) %) # lowest available tie numberim  00120000 K J# tie the file [1] 5{bF aFF ).... ..&>t,&>t &>t &.&.& .َ..>t'>t >t .. .&:t˴.!.%<u.% ....;}..#.͈. .... ......&; u .&!0.#+.&!.&.&!.%.&M}!2 6` `  . ...Ȏ).=u.IQ..&<ttu&.. ...6 .Ƈ)...&<u..t>t(u. && . &.. .%.')...6O.<tDN.6).<tN.+.).;.%~..%.'.+6).;6%~.6%.'.. .'.%.!.># ..)...6.!.>#0.<t%N.<tĪN.>#.>%.>#,..>u. ......>.&...6.>;uI .$.;"~ .u .;"}t .&.&.*.>,&-..&.;"~.6$E;~.>".>.,.>,.;>tp O P Q; N; R; S; L; T; U; V; F; W; X; Y; G; Z; [; 0008000 00010000# Dan Baronet 1993 - PARSE switches and reset argument. Version 2.2:31 00020000# Spaces are used to delimit arguments. '/' delimits switches. 0001000 00030000# Quotes can be used to include spaces or '/'. 00040000# Switches can exist with or without [possibly defaulted] value show: 1=show 00050000# or be elided. Non mentionned switches are refused. { 00060000# Shorter name are accepted but '=' MUST be used to supply values.[1](0 00070000# In the function switch variables have the same name preceded by ''0008000 00080000# or contents of immediatly global ''. I0 00090000# Example:C 00100000# CMDARG '/SA /AB= /SC[=] /CD=1 2 3 /E[=]D E F /=*' PARSE CMDARGMES KNOWN, 00110000# 0012000 00120000 G\ Q/' F\ X G- Q/ S/# Text  ALL switches0013000 00130000>( G)/UNBALANCED QUOTES-( C [)/ 00140000 W( T)  T T/  T( F/ X) O(0 F)/ Q Y F/ Q V S=0 { 00150000 LA(( G)RD S)[?] GR(~\S' [=')/S Z*[ $[ O 00160000# 0017000 00170000# check for special switch /= to find arguments' delimiter 00180000.(/ L L G L P) V) \ Z G/ P P[ T/  T G\ L] ( 00190000# check switches: set all allowable switches to 0 (for those not there)]  00200000 \: U(/\ P   S) PUAL OBJECTS 00210000 ]:.(  U)/ ^ L U S F( L ) U- [( N F)0. ] U L U 00220000#show OBJECTS 00230000# process each Switch separately according to their Positionv 00240000 ^:.(  Y)/ _ L W F L Y Y L Y( 00250000>(/ L P) G)/UNKNOWN OR AMBIGUOUS SWITCH:  G N F8000 00260000 U(\ L)/ P V N U( U S) U W W 00270000# PAT is one switch description from the PATterNs argument 00280000 R ( V) U. R ` U[ U ]=t[ O])/  00290000 `: G.(/ T U)[=]) a.(= F F) b c000 00300000 a:.(/ T U =)/ d p 00310000>(= F)/NO VALUE ALLOWED FOR SWITCH  U. b  00320000 d:>(0= F)/VALUE REQUIRED FOR SWITCH  F( s 00330000 c: G( L F =) F F[ L] .( ./ G)/ d.( ./ U( T ) U)/ b 00340000 T( R/ G U)! R-/(  U ))  G 39000 00350000> T/INVALID VALUE FOR SWITCH ( L ) F a  00360000# Drop trailing spaces, remove surrounding quotes 00370000 b:.(/ F / G) e G( F F) G0 00380000 e: L/ F'/ G- [ V( L/1(\S)/)T. ^ 0004000 00390000# $  00400000# Delimit each token in the argument and return them delimited1V2 00410000# The following allows to consider '' properly.(( )/ S 00420000 _: F O   [\ V O ' L V V G V. V# T=1st QUOTE  . 00430000 T G F. [# Delimiters: spaces not in quotes or 1st quote 00440000# Compressor: any double quote or last quote not in \ or double delim.007000 00450000 O[ T/  T] Z O(( [- L V. V)! T T)/ OIFFER IN 00460000# DanB 1994/03/25 17:47 PNAMESGLOBALPWUFILESeTTYPEmVARC}ERRMSGPKGTIEDVALUE=PARMSAPATNeSWITCOMPUCMD2DEFAULT OVER MATRIFYMATIOTAIFERRINOUTFOPEN!OVEROBJ%MATRIFYOBJ)MATIOTAOBJ-PARSE    XPTACEFHIJKLNVSDUQRCYZW 234235678121191013141522161718211920RMODaZaAaBST1AZFIBD  ARGEDLMPPATQSPSW dL0L1L2L5CMMEML3CHK L4 %5@\dP(8  HPGSEP90PACKp2O2,)%     .V.X.*..,.7s.6t8B....>,5v / u..x.>,6v5P t.R.xT.z@R&Z.~.|.>,7vp.|..6.L..V=w.X.t =t33t=t.V23S.VRQYZ[D./Ŏ3Q2ȋ<V^VŎؾ^+ Y3..2.P.Z t.P .v.f.\.t..Z.`t.>u .>rv.f." u s.rw.V.3Ѓ...VɎ.>fu4.-..,.... 3.j..Z.`.\.t.rt.=v.f@P.hȃy3.^MY..Z.`.\.t.V.j.r;tMQPS.^_[X;s+S.;uPXu[Y[Xbf.h.n.+j..+j&+..@@.p3.uw...>u.SWP.^X_[.j&>.>t& && &.Vt .n33.-..,..f. .j .j te.".h.r.Dts.;"~."..>L t|t |w.+L3һ .t&=t~.h.&.>v&1D t{\fs.Z.`.\.t\.>u t .r9t<~.h..t.6v&&x..f3.t.6v..f=Mv[&?tLs:S.r.+j.V&.j.r.Z&.`.\&.t[&u tÉ3.t.n .P.Lx.;frV.^.t.6v.n3.p.f=Mv+V.|^t+&.j؉QȭV.`^YCC t..2.P.4.N .S .>,6r1.>u).n.6p. .j&t.P.R..X?t5t.>f3[t˽t|tu.> 3tdt ..>2.R.Z 3.n.6p. FFu;r.>p&%3.n.6p. xHV.+6pxNt^ÀljT^t".j$u 1 tFF3.>,7rP.>xtH.) .n.6p. .x#.+p_P .)) Xt AnyFF3.jQ>u>tp.) Y.jQ>u>t @.) Y.N.+) .n.6p. .x-.+p_&t.j؉&L FF3.n3.t T3. .n3.|.pt0.j&؉>ߠPSu K_q [X 3.>,7rL.>xtD.) . .n3.|Pa .)) X.pt oyÃ3)t .X.?uˎt.>ftDt.n3t.j;r.p& uu.>ut1t_.Z ..V&$ 3QS.n.l;s  u3 [Y.j .nP.t8.>,6v QS [Y%ؠ ut  Xtˌ؎.X.?u>&1.n.6p.jut3.ft.>ft.f,".fW] =r__3.V..X.`.Zu/;s+.>p&u.jؠt3[Y_WQS3.`.>b.;>ds[&<t,.d+ tFOAuA.>b+& .b uOAuA3VQS.t.6v.<WVQ=Mv .: u :u 4.`tY^_FFY^_3[Y^ VQ~MuI t,u3Y^<Ar<Zv<ar <zv <t<t:<0r<9v .>,6r<_t:.`>vu<tÀv2.b*.d<ut4> u-.fWQS؎.>b.d+3۰ tCt[Y_=v.f3. UR,Z]ur.n3|t< W_LS.r3.rë3QX%t+Ȱ.+jG[ì<Q2YRP&t$x":uWV<wG&E^_t :XZWQV.R.2<~  ..>L^uV.+L3һ. ;s6V.6p^x'&Et=w=ؠu  u(&<u:..L;s ?th`.+L+.WV< &>&&$&^_}..;Ru.R׃3Y_WRQP..>L.R.P+2.>T.R.P+2XYZ_RP.N@.L.TXZVQ2 F2F..6T.6Y^VQSP.j.n3<~X[Y^uVSt[^VRQЬ2PFFZYZ^WVRQ.ر.._V.s&.7CC- .L.SV[GGYZ^_S>t>us>rl.; ub.(;uX;uY;wPt@;u4$,8r-P t .L+ɰXtDtE..604..عdDt u;\t`u tt 3[Y^P.j.l.n@@.pXWVQɎY^_.>,7r.>xtS.[.>,uQSPX[YUWVRZ^_].>,7rf.>xt^QSP..p+t,7r.>xtQPSf [u\XYSR. t.t(.+L.x.zGtg Z[SQR.+L.x.zGtZY[.>,7s.>xtRQSPP$u tXQaZ.+L.x.zGt$QG$p t  GY.)NW+u]_X[YZRP.;|r+.6~ t@XZ+P( ZUCMD C;E;B;T;S;U;GLOBALELX;GLOBALALX;UCMD;ELX;ALX [1] [2] [3] [4] [5] [6] UF:U'UCMDS' [7] [8] GLOBALELXELX  GLOBALALXALX [9] ELXE'ERROR(^\DMTCNL)/DM'  ALX'ERROR''INTERRUPT''' [10] C(\~C' ]')/C [11] (0=C)/0 [12] T(U' ')+~IO [13] TTTU [14] (1BFNAMES^.=22(-(U)+11-T)U)/2 [15] T1000+((1000+FNUMS)FNUMS)0 [16] ELX'1'  U FSTIE T  ELXE [17] 3 [18] 1:ERROR('FILE NOT FOUND'.14DM)/DM [19] ERROR 'File ',U,' not found.' [20] 2:TFNUMS[B1] [21] 3:('UCMD'SDEF FREAD T,3)/4 [22] ERROR(1=1S)/'WS FULL' [23] ERROR(4=1S)/'SYMBOL TABLE FULL' [24] ERROR 'Invalid boot function' [25] 4:ZT UCMD C P(PAp:_ CK~ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; !; "; #; $; %;;;; 00010000ERROR(^\DMTCNL)/DMERROR'INTERRUPT' 00020000 &-q= 00030000 C0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqsrtuvwxyz_T 00040000 APL !%  00050000   # Main UCMD file tie number 00060000   )/QUIET [ /(  ) ] y  00070000 #  $  #[] %  #[]#dirnamescpt#USTOB 00080000  $   ELX ALX OUTD 00090000.( []/)/ '  %[ [];]XynDEF  00100000 ':.( []/)/ (  %[ [];]? GR 00110000 (:.  )  A OUT B OUT.(0 A )/ *. +y 00120000 ):.( []/)/ +# custom OUTo@ 00130000   %[ [];] OUT.(0 A )/ *  00140000 +: (\  )/ .(? )/ , UHELP   1  00150000 ,: (\  )/  ( ) ersion 3. 00160000.(0(? )/   ?)/ -yUser-d 00170000   UHELP;RJUS 00180000 -:    .  .TO 00190000 /:.(( .)-  )/ 0.( [ ] )/ /(~ 00200000.( TFOPEN UFILES[I;])/ 1.(  )/ 2yE 00210000  #  $. 3 00220000 2:.( HFREAD T,2)/ 1   [] 00230000 3:   (CMD  )[?]PKGCMD .( )/ 4 00240000(0  !)/ . /= 00250000 1:((  %)0  !)/  00260000 Warning--unable to read file: (\  )/  .[ ;]. / 00270000 0:Command   not found. " 00280000 4:  %.( / )/ 5   [] 00290000 5:.( []/)/ 6   [ [];] 00300000  RCF A; 7  00310000   [1]E'CMD 'PDEF PKG(0PKGRC)/0. 8 00320000 6: ( ) CMD    GRPCMD .( /)/ 9 00330000 ( )   [ ;] 00340000 9:    .(0 )/ : 00350000Missing from command group:  ( /)  ;LJ 00360000 ( )  ( )/ RINTO 00370000 ::  RCF A;   [1]  00380000 ;:.(( )-  )/ 8.( [ [ ];]/)/ < = >AD  00390000'Unrecognized object type; not loaded:  [ ;]. ; 00400000 =:  E'(( [ ;] )/ [ ;])' 00410000  (~ERCDEF FREAD (  [ [ ];]))/0. ; 00420000 >:  E'(( [ ;] )/ [ ;])' 00430000  PDEF FREAD (  [ [ ];])(3NC E)/0. ; 00440000 <:   [ ;]FREAD   [ [ ];]. ; 1 37) 00450000 8: (0% !)/%  (- )/ FUNTIE   00460000  CMD 5 AFUNTIE FNUMS~TIEDNUNTIE NNUMS~TIEDRC0 00470000 F.(/  )/ *    00480000 *:.( /)/>(/ )/WS FULL 00490000>(/ )/SYMBOL TABLE FULL 00500000>Unable to define function <((  )/ )> ? @  A; B 00010000# Forms a matrix with over  00020000.( (DaZ aA aB) ) 00030000# If mixed numeric types, use APL version 00040000 @( @) @ A( A) A 00050000 B( @) A @( B @) @ A( B A) A ? @[] A ? @  A; C A  00010000#Forms a matrix from a vector or matrix of names / 00020000# Optional left argument is a list of delimiter characters (default=' ')run t 00030000 C(DaZ aA aB) /  ? @  A; Cs version 00010000#Looks up names  in matrix of names , returning 0 if not found"ERRMSG( 00020000 C(DaZ aA aB) LC) D  ';( ./( 00010000#Returns 1 if an error occurs while executing statement , 0 if not^#If the n 00020000# Global result ERRMSG is the first line of the error messageS \0010000 00030000# (ERRMSG is not changed if there is no error): +((   00040000#ERRMSG(^\DMTCNL)/DM  ERROR(( )LC)/ERRMSG  0 00050000 D- ' D0001000  E 00010000#Function through which all output is passed;  00020000 E F  G; H; E; I; Jrr 00010000#Ties file  (if not already tied) and returns the tie number 00020000.(/  G G)/ D#If no library number was provided, 00030000 J( [# get default drive number defi 00040000 G( J)  G# use the default drive4=1S)/ 00050000 D: E$ E(/\ E/ ) E#left justify file namesPYRI 00060000 G  G I G  G( I I)/ G#delete excess blanks from Fspace ar 00070000 H( E./( E) G) #search for the file namey 00080000.( H. E)/ '#If the name was found, 00090000 F%[ H]# just return its tie numberCopyr 00100000.#Else, the file is not yet tied,are' [3 00110000 ': F((  %) %) # lowest available tie numberim  00120000 G F# tie the file [1] 5{bF aFF ).... ..&>t,&>t &>t &.&.& .َ..>t'>t >t .. .&:t˴.!.%<u.% ....;}..#.͈. .... ......&; u .&!0.#+.&!.&.&!.%.&M}!2aaa= d d  . ...Ȏ).=u.IQ..&<ttu&.. ...6 .Ƈ)...&<u..t>t(u. && . &.. .%.')...6O.<tDN.6).<tN.+.).;.%~..%.'.+6).;6%~.6%.'.. .'.%.!.># ..)...6.!.>#0.<t%N.<tĪN.>#.>%.>#,..>u. ......>.&...6.>;uI .$.;"~ .u .;"}t .&.&.*.>,&-..&.;"~.6$E;~.>".>.,.>,.;>tp K L M; C; N; O; B; P; Q;; R; S; H; J; T; U; VVA 00010000# Dan Baronet 1993 - PARSE switches and reset argument. Version 2.01  00020000# Spaces are used to delimit arguments. '/' delimits switches. X 00030000# Quotes can be used to include spaces or '/'. Xqz  00040000# Switches can exist with or without [possibly defaulted] value clearf 00050000# or be elided. Non mentionned switches are refused.pfileD 00060000# Shorter name are accepted but '=' MUST be used to supply values.splay  00070000# In the function switch variables have the same name preceded by ''50DR  00080000# or contents of immediatly global ''.  00090000# Example:  00100000# CMDARG '/SA /AB= /SC[=] /CD=1 2 3 /E[=]D E F /=*' PARSE CMDARG  00110000# ADDR  00120000 C\ M/' B\ R C- M/ P/# Text  ALL switchesCRFROMVR 00130000>( C)/UNBALANCED QUOTES-( C Q)/Z 00140000 V( O)  O O/  O( B/ R) K(0 B)/ M N B/ M  00150000 HA(( C)RD S)[?] CR(~\S' [=')/S U*ITCH  00160000# LJUST 00170000# check for metaswitch /= to find arguments' delimiter  00180000.(/ H L) P=) W U L[ C H ] L[ C]  00190000# check switches: set all allowable switches to 0 (for those not there)  00200000 W: S(/\ L   P) LST  00210000 X:.(  S)/ Y H S P B( H ) S S H S#  00220000- Q( J B)0. XIZE 00230000# VTOM 00240000# process each Switch separately according to their Positionc 00250000 Y:.(  N)/ Z H V B H N N H N SWITC 00260000>(/ H L) C)/UNKNOWN OR AMBIGUOUS SWITCH:  C J B ER 00270000 S(\ H)/ L T J S( S P) S V V L2 [35] L4:  00280000 C.(/ O S)[=]) [.(= B B) \ ]PAR 00290000 [:.(/ O S =)/ ^QPAR 00300000>(= B)/NO VALUE ALLOWED FOR SWITCH  S. \UCMD[14 00310000 ^:>(0= B)/VALUE REQUIRED FOR SWITCH  Bte not i 00320000 ]: C( H B =) B.( ./ S( O ) S)/ \ B[ H] .( ./ C)/ ^SHA 00330000>(0/(  S))  C)/INVALID VALUE FOR SWITCH ( H ) BABLE 00340000 \:- Q TT. Y 00350000 Z:# delimit each token in the argument and return them delimited 00360000# The following allows to consider '' properlyOCMDULOF[1] U 00370000 B K   Q\ T K ' H T T C T. T# T=1ST QUOTE 00380000 O C B. Q# Delimiters: spaces not in quotes or 1st quote 00390000# Compressor: any double quote or last quote not in \ or double delim. 00400000 K[ O/  O] U K(( Q- H T. T)! O O)/ Ky PNAMESGLOBALPWUFILESaTTYPEiVARCyERRMSGPKGTIED-PARMS1PATN9SWITyCOMPUCMD2OVER MATRIFY MATIOTAIFERRINOUTFOPENOVEROBJ!MATRIFYOBJ%MATIOTAOBJ)PARSE   XPTACEFHIJKLNVSDUQRCYZW 234235678121191013141522161718211920aZaAaBST1AZFIBDARGPDLMSWPATQdSPL0L1L2L4MEML3CHK%0LTP(CPT 1 DESCRIPTION OF FILE 2 DIRECTORY 3 UCMD FN 4 UFILES 5 PACKAGE OF ALL UTIL FNS 6 PACKBIN VARIABLE 7 ? (LOOKS LIKE UCMD) 8 CONTAINS A BACKUP OF CPT 5 9 CONTAINS THIS TEXTTEXJ%+ RR DEFAULT VALUE [1] DEFAULT character string R by VALUE if it 0 [2] (1 0R)/0,def [3] R is NOT scalar 0 - if VALUE is numeric [4] (' '=10VALUE)/0  RFI R0 [5] def:RVALUE (r+t@,@@bunM$C@.@}nM$C@0@@~'$C@1@X%C@2@]w}K%C@5@hnM$C@7@@nM$C@9@%C@P@_.@%C@@P@Z[A%C@P@@O$C@P@ҳƣ %C@Q@ 6x$C@Q@༧nM$C@R@uOlM$C@@R@K%C@R@@4%C@R@hR%C@@S@@^lM$C@S@%C@S@`8o %C@@T@nelM$C@T@ Z$C@T@D@%C@U@@6$C@@U@$llM$C@U@xo)b %C@U@ btlM$C@V@7l$C@@V@`a$C@V@S-d$C@V@`{ذw%C@X@=m$C@@X@LN%C@X@[Cf$C@X@&K$C@Y@5$C@@Y@Û>$C@Y@T &C@Z@`k$C@@Z@`dS$C@Z@`7$C@Z@` /3%C@[@Y,l$C@[@go%C@\@x4%C@@\@@`˗+%C@\@IkR%C@\@za$C@]@@'[^$C@@]@YdD6%C@]@ uL%C@]@5m$C@^@PW4%C@@^@`F4%C@^@a4pk$C@^@`C:4%C@_@`3%C@@_@`3$C@_@`}l5;%C@_@`ۺ4%C@`@{%C@ `@`)3%C@@`@gȚ$C@``@~qw%C@`@%;%C@`@@ I$C@`@)yr{$C@`@L%C@a@qw%C@ a@u$C@@a@$3%C@`a@]5%C@a@@.2%C@a@qXӭw%C@a@Ai9%C@a@,=u%C@b@`L %C@ b@W$C@@b@n0/$C@`b@˨+$C@b@+$C@b@+$C@b@+$C@b@{+$C@c@@2+$C@ c@o+$C@@c@`&+$C@`c@@*n$C@c@ ߂d!%C@c@`a$C@c@pk$C@d@1$C@ d@  ^%C@@d@w%C@`d@#$C@d@@Z$C@d@@L0$C@d@$C@d@*&C@e@|$C@e@` 6%C@e@@)t w%C@f@R%C@ f@ (4%C@@f@`"%C@`f@C$C@f@`$C@f@6%C@f@%N3w%C@f@ %C@g@q%C@ g@`6_[T%C@@g@$q%C@`g@xω]$C@g@ꂊ]$C@g@ ]$C@g@@>6%C@h@ ]$C@ h@]$C@@h@e]$C@`h@@]$C@h@=^$C@h@$]$C@h@]$C@h@9]$C@i@`P]$C@ i@@:f]$C@@i@@6]$C@`i@f%C@i@$C@i@$^u$C@i@vL%C@i@xvL%C@j@ k$C@j@`*Epk$C@k@@8d$C@ k@@y$C@@k@PvL%C@`k@/vL%C@k@I$C@k@@$C@k@` $C@k@ $C@l@l/$C@ l@mIn$C@@l@`tH%C@`l@+$C@l@@;l %C@l@`[ӭw%C@l@%w%C@ m@5U9%C@@m@ N$C@`m@3Pӭw%C@m@@34%C@m@Ae$C@m@ oL%C@m@Uӭw%C@ n@x$C@@n@!E$C@`n@(E$C@n@Mj$C@n@@$C@n@@5@E$C@n@C%C@o@`GJE$C@ o@V$C@@o@'of$C@`o@ʹ$C@o@@i$C@o@`jE$C@o@ pE$C@o@Mj$C@p@apk$C@p@;~pk$C@ p@@:$C@0p@` AJ$C@@p@@*!$C@Pp@]$C@pp@d$C@p@l$C@p@f;$C@p@:o}^$C@p@`Į %C@p@@$C@p@NYpk$C@p@wpk$C@p@{s%C@q@ $C@q@਌$C@ q@Tpk$C@0q@npk$C@@q@vM $C@Pq@@$C@`q@ ޸%C@pq@avL%C@q@Yn$C@q@ Kpk$C@q@Bhpk$C@q@$C@q@ ƶ$C@q@lR$Cd52$C@r@ {w%C@r@7Φ$C@0r@c$C@@r@@Ԧ$C@`r@ۦ$C@pr@`I$Cd52$C@r@[⦌$C@r@`㞌$C@r@$C@r@=禌$C@r@Dđ$C@r@`Vw%C@r@RVP6%C@r@ {歷$C@s@@$C@s@Y$C@ s@ $C@0s@`$C@@s@$C@Ps@v$C@`s@8$C@ps@Ui#Cd52$C@s@}j#Cd52$C@s@@d$C@s@$Cd52$C@s@e$Cd52$C@s@ V$C@s@?%C@s@ $C@t@$C@t@ 1٥>%C@ t@@ M"%C@0t@=Ĉ$C@@t@'$C@Pt@"l$Cd52$C@`t@|$C@pt@$C@t@]^%C@t@`$C@t@`$C@t@ O $C@t@q$C@t@($C@t@')W$Cd52$C@u@m9$C@u@@C/$C@ u@5$C@0u@@ $C@@u@$C@u@`%C@ t@@ M"%C@0t@=Ĉ$C@@t@'$C@Pt@"l$Cd52$C@`t@|$C@pt@$C@t@]^%C@t@`$C@t@`$C@t@;vL%C@t@ O $C@t@q$C@t@($C@t@')W$Cd52$C@u@m9$C@u@@C/$C@ u@5$C@0u@@ $C@@u@$C@u@`