Hi,
The Stack Trace is persistent if I try to )SAVE.
)DUMP, )LOAD, )SAVE does not reproduce the trace.
All Variables were )ERASEd
* )FNS*
ANALYSE_READINGS_UPDATE ANALYSE_REDINGS_UPDATE BYTES DTSs
EDIT H2D H2I H2N H2T ISK LO PROCESS RA
RAl RAr REC REC_CHR REC_CHR_BYTES RR SAVE SV TEST ∆∆
/⍝ The two functions //*ANALYSE_READINGS_UPDATE* and
*ANALYSE_REDINGS_UPDATE*
⍝ have identical content.
⍝ //*ANALYSE_REDINGS_UPDATE* had A typo! After multiple updates I opened it
⍝ changed the function name to //*ANALYSE_READINGS_UPDATE*//and closed
the function
⍝ then )SAVE the WS and getting the Stack Trace.
⍝ Next I )ERASEd /ANALYSE_READINGS_UPDATE - the newly created function./
⍝ Stack Trace again/
*)ERASE ANALYSE_READINGS_UPDATE*
*)DUMP*
2025-04-13 17:04:42 (GMT+2)
*)SAVE*
*** Sub-Value 0xa8d866f0 has two parents.
Child: vid=-1, _val=0x2000000200, _par=11217
Parent 2: vid=699, _val=0xa9bbc1b0_par=-1
Call stack:
----------------------------------------
-- Stack trace at Archive.cc:1129
----------------------------------------
0x7fc10352a30b __libc_start_main
0x7fc10352a248
0x403e80 main
0x5dc75b Workspace::immediate_execution(bool)
0x46062b Command::process_line()
0x460807 Command::process_line(UCS_string&, std::ostream*)
0x46164b Command::do_APL_command(std::ostream&, UCS_string&)
0x4727f7 Command::cmd_SAVE(std::ostream&, UCS_string_vector const&)
0x5de93d Workspace::save_WS(std::ostream&, LibRef, UCS_string
const&, bool)
0x40f370 XML_Saving_Archive::XML_Saving_Archive(std::ostream&,
std::ostream&, char const*)
0x4138f7 XML_Saving_Archive::save()
========================================
========================================
Running )CHECK...
OK - no stale functions
OK - no stale values
OK - no stale indices
==============================================================================
Assertion failed: vvp
in Function: cmd_CHECK
in file: Command.cc:797
C/C++ call stack:
----------------------------------------
-- Stack trace at Assert.cc:75
----------------------------------------
0x7fc10352a30b __libc_start_main
0x7fc10352a248
0x403e80 main
0x5dc75b Workspace::immediate_execution(bool)
0x46062b Command::process_line()
0x460807 Command::process_line(UCS_string&, std::ostream*)
0x46164b Command::do_APL_command(std::ostream&, UCS_string&)
0x4727f7 Command::cmd_SAVE(std::ostream&, UCS_string_vector const&)
0x5de93d Workspace::save_WS(std::ostream&, LibRef, UCS_string
const&, bool)
0x40f370 XML_Saving_Archive::XML_Saving_Archive(std::ostream&,
std::ostream&, char const*)
0x413955 XML_Saving_Archive::save()
0x46411c Command::cmd_CHECK(std::ostream&, UCS_string const&)
0x423f1d do_Assert(char const*, char const*, char const*, int)
========================================
======== =============================== =
SI stack:
==============================================================================
*** immediate_execution() caught other exception ***
*)FNS*
ANALYSE_REDINGS_UPDATE BYTES DTSs EDIT H2D H2I H2N
H2T ISK LO PROCESS RA RAl RAr REC REC_CHR
REC_CHR_BYTES RR SAVE SV TEST ∆∆
/⍝ After erasing the function with just the missing character *"A"* /
⍝ The )SAVE is OK!
*)ERASE ANALYSE_REDINGS_UPDATE
* *)save *
2025-04-13 17:08:21 (GMT+2) MT631_EEEE
I hope the stack Trace has information to relate the cause to the
function renaming.
Other than that I have no idea what else might have caused the stack trace.
The attached )DUMPed WS has both ANALYSE_READINGS_UPDATE and
ANALYSE_REDINGS_UPDATE
included. As I mentioned, )LOAD, )SAVE will not reproduce the bug.
May be some of the content
pops up in the trace.
The attached )SAVEed WS ends in a nirvana.
Best Regards
Hans-Peter
#!/usr/local/bin/apl --script
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝
⍝ ⍝
⍝ MT631_DDD 2025-04-13 17:04:04 (GMT+2) ⍝
⍝ ⍝
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝
∇ANALYSE_READINGS_UPDATE;SV
SV← (2↑¨102↓¨READINGS)≡¨⊂'62'
READINGS_103_62 ← SV/READINGS
(SV/READINGS)←READINGS_103_62
∇
∇ANALYSE_REDINGS_UPDATE;SV
SV← (2↑¨102↓¨READINGS)≡¨⊂'62'
READINGS_103_62 ← SV/READINGS
(SV/READINGS)←READINGS_103_62
∇
∇R←BYTES DS;pv
pv←+\(⍴DS)⍴1 0
R←pv⊂DS
∇
∇Z←DTSs
Z←∊'0000-' '00-' '00 ' '00:' '00:' '00' ⍕¨⎕TS[⍳6]
∇
∇r← EDIT arg; ws; cp; wp; q; o; chk_path; fn;fn_body;nl2;nl2_1;opt
r←'arg:' ('-',¨arg,¨'-') '⍴arg:' (⍴arg) '⍴,arg:' (⍴,arg) '⍴⍴arg:' (⍴⍴arg)
'≡arg:' (≡arg)
d_arg ← ≡arg
r_arg ← ⍴arg
rr_arg ← ⍴⍴arg
⍝ One character function name
→arg_is_fn ×⍳ ∧/0= d_arg,rr_arg
⍝ Function name
→arg_is_fn ×⍳ (1=d_arg) ∧(1<r_arg)
⍝ Help signature
→arg_is_help ×⍳ ∧/1 0= d_arg,r_arg
⍝ Deal with depth 2
r←r ,(⊂ '⍴¨arg:' ( ⍴¨arg) )
⍝2 = d_arg
→ question_1 ×⍳ 0= ⍴⍴1⊃arg
→ general_args ×⍳ 0= 1⊃⍴¨arg
→ options_present ×⍳ 1= 1⊃⍴¨arg
→ options_unknown ×⍳ 1< 1⊃⍴¨arg
r←r, ('###' (C arg[1]) ( ⍴⍴1⊃arg))
→ 0
⍝ Backups
general_args:
r←r, ⊂(2⊃arg)
→((2⊃arg) ≡ 'l')/list_bu
→((2⊃arg) ≡ 'L')/list_bu_fns_only
→((2⊃arg) ≡ 'c')/clean_bu_this
→((2⊃arg) ≡ 'C')/clean_bu_all
→((2⊃arg) ≡ '')/help
→((2⊃arg) ≡ 'h')/help
question_2:
q←'UNKNOWN ARGUMENT: ',(⍕'¨',¨arg,¨'¨')
r←r, ⊂q
→0
question_1:
q←'INVALID ARGUMENT: ',(⍕'¨',¨arg,¨'¨') ,'. DID YOU MEAN ¨,',(1⊃arg),'¨?'
r←r, ⊂q
→0
options_present:
o←'OPTION: ' (1⊃arg) (⍴ /1⊃arg) ('f' ≡ ∊/1⊃arg) ' file:',2⊃arg
r←r, ⊂o
fn←2⊃arg
opt←∊/1⊃arg
→( 'f' ≡ opt )/begin
options_unknown:
o←'OPTION UNKNOWN: ',opt
r←r, ⊂o
→0
⍝ Remove backups of this fn
clean_bu_this:
⎕EX ( ∨/ ( '∆∆∆_',fn) ⍷ ⎕NL 2)⌿ ⎕NL 2
→
⍝ Remove all backups from this workspace
clean_bu_all:
r ←⎕EX ev←( ∨/ '∆∆∆_' ⍷ ⎕NL 2)⌿ ⎕NL 2
→0 ×⍳ 0=1↑r
r ← ('ERASED:' ev)
→0
⍝ Show the backups
list_bu:
( ∨/( '∆∆∆_') ⍷ ⎕NL 2)⌿ ⎕NL 2
→
list_bu_fns_only:
⍝ names w/o prefix, mirror, vov
nl2←⊂[2] ⌽ 4↓[2]( ∨/( '∆∆∆_') ⍷ ⎕NL 2)⌿ ⎕NL 2
⍝ search for "_" from end end, remove time stamp, reverse mirror
nl2_1 ← ' ', ⌽¨(nl2⍳¨'_')↓¨nl2
⍝ get the names
⊃1↓(~nl2_1≡¨1⌽ nl2_1)/nl2_1
→
⍝⍝DEBUG⍝⍝
arg_is_help:
r←r, '' 'REQUEST HELP'
⍝⍝DEBUG⍝⍝ →0
help:
'Usage: EDIT ( '''' | ⍬ ) | EDIT ( '''' | ⍬ ) arg | EDIT (,opt) fn |
EDIT fn .'
' ('''' | ⍬ ) : this help.'
' *('''' '''' ) : specific help.'
' '
' fn: new or existing function name.'
' fn location on disk: workspaces/WS_NAME/FN.APL'
' '
' '
' opt: '
' (,''f'') : force overwrite function on disk.'
' '
' ('''' | ⍬ ) a | l | L | c | C | *b | *B: '
' a : analyse arguments - using'
' ⊃EDIT¨ (''F'') (''XX'') (''name'') ('''' ''X'' )('''' ''asd'')
(''Q'' '''') (''W'' ''X'' )(''E'' ''asd'') ((,''Q'') '''') ((,''W'') ''X''
)((,''E'') ''asd'') (''QQQ'' '''') (''WWW'' ''X'' )(''EEE'' ''asd'') (''''
'''') '
' l : list backups of functions edited with EDIT.'
' L : list Functionnames only of backups of functions edited with EDIT.'
' c : clear backup of this function.'
' C : clear backup of ALL fuctions.'
' *b : backup after reload from editor.'
' *B : backup after reload from editor. Remove older backups'
' '
' Use ¨∆¨ to copy the most recent <FUNCTION>.APL from edit path into WS.'
' '
' * = TODO'
''
r←''
→ 0
arg_is_fn:
fn←arg
r← ('EDITING' fn)
begin:
⎕EX 'r'
⍝ Get the name of ws to store this FN in name scope
⍝ path only . remove fn name
ws←3↓1⊃⍎')WSID'
ws ← (~ ∨\ws ∊ '/') / ws
⍝
⍝ Check that we are within the proper working location
⍝ TODO - what if not?
cp ← 1⊃⍎')HOST pwd'
wp ← '/home/joy'
⍎(~(cp,'/workspaces') ≡ wp,'/workspaces')/'→0,0⍴⎕←''PWD NOT ',cp,'. Change to
',wp,''''
ws '-' cp '-' wp
⍝
⍝ Create name space path if not yet done. else go to check options
⍝⍝∆∆⍝⍝ SRG 2025-02-11
chk_path ← ⍎ 2⊃ ⍎')HOST [ -d workspaces/',ws,' ]'
→ (chk_path = 0) / check_option
⍝ Create dir and store function in file
⍝ Because it is not there yet
⍎ ')HOST mkdir workspaces/',ws
⍝ Create fn in ws and as file if newly created
⍎(0 = ⎕NC fn)/'⎕FX fn'
→ make_dump
check_option:
⍝ Option f[force] will force write FN to file
⍝⍝--⍝⍝ →(0 = ⎕NC 'opt')/start_edit
→(0 = ⎕NC 'opt')/check_file_exits
⍎ (opt ≠ 'f')/next_opt
⍝ make )DUMP equivalent
make_dump:
sign ← ⊂'⍝','∆∆∆'
fn_body ← ⊂[2]⎕CR fn
edit_ts ← ⊂ '⍝ ', DTSs
fn_body ← ∊¨( '#!/usr/local/bin/apl --script' ('⎕FX ⎕INP ','''',sign,'''')
), fn_body ,edit_ts, sign
fn_body ⎕FIO[56] 'workspaces/',ws,'/',fn,'.APL'
→start_edit
⍝ ⊃fn_body
next_opt:
→start_edit
check_file_exits:
rc ← ⎕FIO[ 3] 'workspaces/',ws,'/',fn,'.APL'
→ (rc<0)/make_dump
start_edit:
⍝ just one long series of digits
⍝⍝∆∆⍝⍝ SRG 2025-02-12_11:13:21
ts←('5000 00 00 _ 00 00 00'⍕6↑⎕TS) ~ ' '
⍝ create backup name space
bun←∊'∆∆∆_' fn '_' ts
⍝ canonical content backup function
buf←⎕CR fn
⍝ Line numbers prefix.
ln ← ⊃'[',¨(⍕¨¯1+⍳1↑⍴buf),¨⊂'] '
⍝ Save function as backup in current ws.
⍎ bun, '← ln, buf'
'EDITING workspaces/',ws,'/',fn,'.APL'
⍎ ')HOST vs_apl workspaces/',ws,'/',fn,'.APL'
'To load the most recent edited <',fn,'> execute ∆∆.'
'To load the most recent saved <',fn,'> execute ∆.'
⍝ ⎕FX ⊃ '∆;wsid;fns_list' 'wsid←3↓ ∊ ⍎ '')wsid''' '⍝ Copy the most recend
saved function from VS' 'fns_list← ⍎'')HOST ls -t '',wsid,''/*''' '⍎ '')COPY
'', 1⊃fns_list '
⍝ [0] ∆;wsid;fns_list;lib;path
⍝ [1] wsid←3↓ ∊ ⍎ ')wsid'
⍝ [2] lib←∊ ⍎ ')libs 0 *'
⍝ [3]
⍝ [4] ⍝ Copy the most recend saved function from VS
⍝ [5] path←lib,'/',wsid
⍝ [6] fns_list← ⍎')HOST ls -t ',path,'/*'
⍝ [7] ⍎ ')COPY ', 1⊃fns_list
⎕FX ⊃ '∆∆' (' ⍎ '')COPY ',ws,'/',fn,'.APL''')
⍝ TODO: compare WS-FN and FS-FN - which is older
⍝ 2020-12-22 22:13:35
⍝ 2021-08-31 16:25:17
⍝ 2021-08-31 16:29:55
⍝ 2021-08-31 16:33:06
⍝ 2021-08-31 16:34:09
⍝ 2021-08-31 19:18:05
⍝ 2021-08-31 23:21:51
⍝ 2025-02-12 21:29:43
⍝ 2025-02-13 15:01:57
⍝ 2025-02-27 19:20:59
⍝ 2025-03-14 12:16:17
∇
∇D←H2D X
D←⎕AV[1+ 16 16⊥¯1+ '0123456789abcdef'⍳X]
∇
∇R←H2I X
R←((⍴X)⍴16)⊥¯1+'0123456789abcdef'⍳X
∇
∇N←H2N X
N←((⍴X)⍴16)⊥¯1+ '0123456789abcdef'⍳X
∇
∇D←H2T X
D←⎕AV[1+16 16⊥¯1+ '0123456789abcdef'⍳X]
∇
∇ISK
H2D¨BYTES ¯2↓REC_CHR
'ISK' '<>' ( ⊂[1]'0123456789abcdef' [1+16 16 ⊤¯1+⎕av⍳'ISK'])
id←'00 9428 4339'
'ID:' id ( H2N '00059eaa33') '00059eaa33'
∇
∇R←LO ARG
F1←'6200620072630101'
F2←'76010105'
F3←'007605'
F4←'6200620072630701'
F5←'0b0a0149534b'
F6←'00059eaa33'
F7←'010101010b0a05'
F8←'010101010101'
F9←'72620165'
R←''
→ERROR_HEAD×⍳~(16↑ARG)≡'1b1b1b1b01010101'
→ERROR_LENGTH×⍳ ~(⍴ARG)∊425
sv←F1 SV ARG
sv←sv∨F2 SV ARG
sv←sv∨F3 SV ARG
sv←sv∨F4 SV ARG
sv←sv∨F5 SV ARG
sv←sv∨F6 SV ARG
sv←sv∨F7 SV ARG
sv←sv∨F8 SV ARG
sv←sv∨F9 SV ARG
pv←1↓+\1,sv
Rec←pv⊂ARG
R←Rec
→0
ERROR_HEAD:
'ERROR HEAD' ARG
→0
ERROR_LENGTH:
'ERROR LENGTH (425)' (⍴ARG) ARG
∇
∇PROCESS
⍝ RA ¨ (⊂'' 0 0 0),¨ ⊂¨REC_CHR 2
⊃⍉ ¨,[1.1]¨RAl ¨ (⊂'' 0 0 0),¨ ⊂¨REC_CHR 20
∇
∇R←RA ARG
⍝ RA - Record Analyser
⍝ TODO:
⍝ Return Values only ( in order )
⍝ Return IDs and Values only
⍝ Return tree like Message decomposition (make INDENT Working.
⍝ Return a specific value
⍝ Analyse nonconforming records
⍝ CRC processing (last two bytes)
(FLD_ID FLD_CNT FLD_NUM INDENT RAW)←ARG
FLD_ID FLD_CNT FLD_NUM (2↑RAW)
→HEAD×⍳(16↑RAW)≡'1b1b1b1b01010101'
⍝ '######' RAW
→L_7×⍳ '7' ≡ 1⊃RAW
⍝→L_76×⍳(2↑RAW)≡'76'
→L_00×⍳'00' ≡ 2↑RAW
→L_01×⍳'01' ≡ 2↑RAW
→L_01×⍳'01' ≡ 2↑RAW
→L_07×⍳'07' ≡ 2↑RAW
→L_04×⍳'04' ≡ 2↑RAW
→L_05×⍳'05' ≡ 2↑RAW
→L_52×⍳'52' ≡ 2↑RAW
→L_62×⍳'62' ≡ 2↑RAW
→L_63×⍳'63' ≡ 2↑RAW
→L_65×⍳'65' ≡ 2↑RAW
→L_6032×⍳'6032010101010101' ≡ 16↑RAW
→L_6001×⍳'600100ff010101010b0a01'≡ 22↑RAW
⍝→L_07×⍳'070100' ≡ 6↑RAW
→L_08×⍳'0800ff' ≡ 6↑RAW
→L_0B×⍳'0b0a01' ≡ (L←6)↑RAW ⍝ ISK follows
→L_1B×⍳'1b1b1b1b1a01' ≡ (L←12)↑RAW
→L_FF×⍳'ffff' ≡ 4↑RAW
→ISK_SN×⍳ '49534b00059eaa33'≡ 16↑RAW
→ISK×⍳ '49534b' ≡ 6↑RAW
⍝→L_72×⍳(2↑RAW)≡'72'
→ERROR_NO_FIELD_ID
HEAD:
R←(⊂'#########################') (16↑RAW) ( RA '' 0 0 0 (16↓RAW ))
→ END
L_7:
CNT←⍎2⊃RAW
R←(2↑RAW ) (RA '7' CNT (CNT-1) (INDENT+2) (2↓RAW) )
→END
L_00:
R←'00' (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT ( 2↓RAW))
→END
L_01:
R←'01' (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT ( 2↓RAW))
→END
L_04:
VAL ←6↑(2↓RAW)
R←'04' VAL (∊H2T¨ (2/⍳.5×⍴VAL)⊂ VAL) (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (
8↓RAW))
→END
L_05:
VAL ←8↑(2↓RAW)
R←'05' VAL (H2I VAL) (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (10↓RAW) )
→END
L_07:
VAL ←12↑(2↓RAW)
R← '07' VAL (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (14↓RAW))
→END
L_08:
VAL ←L↑RAW
R← VAL (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT ( L↓RAW) )
→END
L_6032:
R←(16↑RAW )(RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (16↓RAW))
→END
L_6001:
R←(22↑RAW )(RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (22↓RAW))
→END
L_52:
VAL ←2↑(2↓RAW)
R←'52' VAL (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (4↓RAW) )
→END
L_62:
VAL ←2↑(2↓RAW)
R←'62' VAL (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (4↓RAW))
→END
L_63:
VAL ←4↑(2↓RAW)
R←'63' VAL (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (6↓RAW))
→END
L_65:
VAL ←8↑(2↓RAW)
R←'65' VAL (H2I VAL) (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (10↓RAW) )
→END
L_0B:
VAL ←10↑(12↓RAW)
R←(6↑RAW) 'ISK' (H2I VAL) (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (22↓RAW))
→END
⍝ END OF RECORD + PARITY
L_1B:
R←(L↑RAW) (L↓RAW) (H2I L↓RAW)
#RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (L↓RAW)
→END
L_FF:
R←(4↑RAW )(RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (4↓RAW))
→END
ISK_SN:
VAL ←10↑(6↓RAW)
R←'ISK' ( H2I VAL)
R
RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (16↓RAW)
→END
ISK:
R←'ISK'
R
RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (6↓RAW)
→END
L_72:
ERROR_HEAD:
'ERROR HEAD' ARG
→0
ERROR_NO_FIELD_ID:
R←'ERROR_NO_FIELD_ID' (2↑ARG) ARG
→0
END:
→0
⍝ 2025-04-11 23:22:04
∇
∇R←RAl ARG ;RAW
⍝ RAl - Record Analyser loop
⍝ TODO:
⍝ Return Values only ( in order )
⍝ Return IDs and Values only
⍝ Return tree like Message decomposition (make INDENT Working.
⍝ Return a specific value
⍝ Analyse nonconforming records
⍝ CRC processing (last two bytes)
DATA←1
(FLD_ID FLD_CNT FLD_NUM INDENT RAW)←ARG
INDENT←⍴0
E←''
→START
⍝ Begin new analysis of remaining data
BEG:
⍝ Collect data from previous cycle
ATT ← ⊂ FLD_ID FLD_CNT FLD_NUM INDENT ((2×⍴,INDENT)⍴' ') R
⍎(DATA = 0)/ 'ATT←⍬'
⍎(DATA = 1)/ 'ATT←∊3⊃⊃R'
E←E,ATT
FLD_NUM ← FLD_NUM - 1
⍎(0<⍴INDENT)/'INDENT←INDENT- (-⍴INDENT)↑1'
INDENT←(INDENT>0)/INDENT
⍝ If done leave loop
→ END ×⍳ 0=⍴RAW
START:
⍎(DATA=1)/'DATA←0'
→HEAD×⍳(16↑RAW)≡'1b1b1b1b01010101'
⍝ '######' RAW
→L_7×⍳ '7' ≡ 1⊃RAW
⍝→L_76×⍳(2↑RAW)≡'76'
→L_00×⍳'00' ≡ 2↑RAW
→L_01×⍳'01' ≡ 2↑RAW
→L_01×⍳'01' ≡ 2↑RAW
→L_07×⍳'07' ≡ 2↑RAW
→L_04×⍳'04' ≡ 2↑RAW
→L_05×⍳'05' ≡ 2↑RAW
→L_52×⍳'52' ≡ 2↑RAW
→L_62×⍳'62' ≡ 2↑RAW
→L_63×⍳'63' ≡ 2↑RAW
→L_65×⍳'65' ≡ 2↑RAW
→L_6032×⍳'6032010101010101' ≡ 16↑RAW
→L_6001×⍳'600100ff010101010b0a01'≡ 22↑RAW
⍝→L_07×⍳'070100' ≡ 6↑RAW
→L_08×⍳'0800ff' ≡ 6↑RAW
→L_0B×⍳'0b0a01' ≡ (L←6)↑RAW ⍝ ISK follows
→L_1B×⍳'1b1b1b1b1a01' ≡ (L←12)↑RAW
→L_FF×⍳'ffff' ≡ 4↑RAW
→ISK_SN×⍳ '49534b00059eaa33'≡ 16↑RAW
→ISK×⍳ '49534b' ≡ 6↑RAW
⍝→L_72×⍳(2↑RAW)≡'72'
→ERROR_NO_FIELD_ID
HEAD:
R←⊂(⊂'#########################') (16↑RAW) ⋄ RAW ← 16↓RAW
→BEG
L_7:
CNT←⍎2⊃RAW
FLD_CNT ← CNT
FLD_NUM ← CNT
INDENT←INDENT,CNT+1
R←(2↑RAW) ⋄ RAW ← 2↓RAW ⍝ (RA '7' CNT
(CNT-1) (INDENT+2) ( 2↓RAW))
→BEG
L_00:
R←,⊂2↑RAW ⋄ RAW ← 2↓RAW ⍝ (RA FLD_ID
FLD_CNT (FLD_NUM-1) INDENT ( 2↓RAW))
⍝INDENT←INDENT +(-⍴INDENT)↑1
→BEG
L_01:
R← ,⊂2↑RAW ⋄ RAW ← 2↓RAW ⍝ (RA FLD_ID
FLD_CNT (FLD_NUM-1) INDENT ( 2↓RAW))
⍝INDENT←INDENT +(-⍴INDENT)↑1
→BEG
L_04:
VAL ←6↑(2↓RAW)
R←(⊂(2↑RAW) VAL (∊H2T¨ (2/⍳.5×⍴VAL)⊂ VAL) ) ⋄ RAW ← 8↓RAW ⍝ (RA
FLD_ID FLD_CNT (FLD_NUM-1) INDENT ( 8↓RAW))
→BEG
L_05:
VAL ←8↑(2↓RAW)
R←⊂(2↑RAW) VAL (H2I VAL) ⋄ RAW ← 10↓RAW ⍝ (RA
FLD_ID FLD_CNT (FLD_NUM-1) INDENT (10↓RAW))
⍎(DATA=0)/'DATA←1'
→BEG
L_07:
VAL ←12↑(2↓RAW)
R←⊂(2↑RAW) VAL ⋄ RAW ← 14↓RAW ⍝ (RA
FLD_ID FLD_CNT (FLD_NUM-1) INDENT (14↓RAW))
→BEG
L_08:
VAL ←L↑RAW
R← ⊂VAL ⋄ RAW ← L↓RAW ⍝ (RA FLD_ID
FLD_CNT (FLD_NUM-1) INDENT ( L↓RAW))
→BEG
L_6032:
R←(16↑RAW ) ⋄ RAW ← 16↓RAW ⍝ (RA FLD_ID
FLD_CNT (FLD_NUM-1) INDENT (16↓RAW))
→BEG
L_6001:
R←(22↑RAW ) ⋄ RAW ← 22↓RAW ⍝ (RA FLD_ID
FLD_CNT (FLD_NUM-1) INDENT (22↓RAW))
→BEG
L_52:
VAL ←2↑(2↓RAW)
R←⊂(2↑RAW) VAL ⋄ RAW ← 4↓RAW ⍝ (RA
FLD_ID FLD_CNT (FLD_NUM-1) INDENT ( 4↓RAW))
→BEG
L_62:
VAL ←2↑(2↓RAW)
R←⊂(2↑RAW) VAL ⋄ RAW ← 4↓RAW ⍝ (RA
FLD_ID FLD_CNT (FLD_NUM-1) INDENT ( 4↓RAW))
→BEG
L_63:
VAL ←4↑(2↓RAW)
R←⊂(2↑RAW) VAL ⋄ RAW ← 6↓RAW ⍝ (RA
FLD_ID FLD_CNT (FLD_NUM-1) INDENT ( 6↓RAW))
→BEG
L_65:
VAL ←8↑(2↓RAW)
R←⊂(2↑RAW) VAL (H2I VAL) ⋄ RAW ← 10↓RAW ⍝ (RA
FLD_ID FLD_CNT (FLD_NUM-1) INDENT (10↓RAW))
⍎(DATA=0)/'DATA←1'
→BEG
L_0B:
VAL ←10↑(12↓RAW)
R←⊂(6↑RAW) 'ISK' (H2I VAL) ⋄ RAW ← 22↓RAW ⍝ (RA FLD_ID
FLD_CNT (FLD_NUM-1) INDENT (22↓RAW))
⍝INDENT←INDENT +(-⍴INDENT)↑1
→BEG
⍝ END OF RECORD + PARITY
L_1B:
R←⊂(L↑RAW) (L↓RAW) (H2I L↓RAW)
RAW ← L↓RAW # RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT ( L↓RAW)
→END
L_FF:
R←⊂(4↑RAW ) ⋄ RAW ← 4↓RAW ⍝ (RA FLD_ID
FLD_CNT (FLD_NUM-1) INDENT ( 4↓RAW))
→BEG
⍝⍝ Obsolete
ISK_SN:
VAL ←10↑(6↓RAW)
R←'ISK' ( H2I VAL)
R
RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (16↓RAW)
→BEG
⍝⍝ Obsolete
ISK:
R←'ISK'
R
RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (6↓RAW)
→BEG
L_72:
ERROR_HEAD:
'ERROR HEAD' RAW
→0
ERROR_NO_FIELD_ID:
R←'ERROR_NO_FIELD_ID' (2↑RAW) RAW
→0
END:
⍝ Return collection
⍝ 1109310 369770 184335 1109311 184335 1835268 1109312
R←E[1 2 3 6]
→0
⍝ 2025-04-11 23:22:04
⍝ 2025-04-12 14:53:43
∇
∇R←RAr ARG
⍝ RAr - Record Analyser recursive
⍝ TODO:
⍝ Return Values only ( in order )
⍝ Return IDs and Values only
⍝ Return tree like Message decomposition (make INDENT Working.
⍝ Return a specific value
⍝ Analyse nonconforming records
⍝ CRC processing (last two bytes)
(FLD_ID FLD_CNT FLD_NUM INDENT RAW)←ARG
FLD_ID FLD_CNT FLD_NUM (2↑RAW)
→HEAD×⍳(16↑RAW)≡'1b1b1b1b01010101'
⍝ '######' RAW
→L_7×⍳ '7' ≡ 1⊃RAW
⍝→L_76×⍳(2↑RAW)≡'76'
→L_00×⍳'00' ≡ 2↑RAW
→L_01×⍳'01' ≡ 2↑RAW
→L_01×⍳'01' ≡ 2↑RAW
→L_07×⍳'07' ≡ 2↑RAW
→L_04×⍳'04' ≡ 2↑RAW
→L_05×⍳'05' ≡ 2↑RAW
→L_52×⍳'52' ≡ 2↑RAW
→L_62×⍳'62' ≡ 2↑RAW
→L_63×⍳'63' ≡ 2↑RAW
→L_65×⍳'65' ≡ 2↑RAW
→L_6032×⍳'6032010101010101' ≡ 16↑RAW
→L_6001×⍳'600100ff010101010b0a01'≡ 22↑RAW
⍝→L_07×⍳'070100' ≡ 6↑RAW
→L_08×⍳'0800ff' ≡ 6↑RAW
→L_0B×⍳'0b0a01' ≡ (L←6)↑RAW ⍝ ISK follows
→L_1B×⍳'1b1b1b1b1a01' ≡ (L←12)↑RAW
→L_FF×⍳'ffff' ≡ 4↑RAW
→ISK_SN×⍳ '49534b00059eaa33'≡ 16↑RAW
→ISK×⍳ '49534b' ≡ 6↑RAW
⍝→L_72×⍳(2↑RAW)≡'72'
→ERROR_NO_FIELD_ID
HEAD:
R←(⊂'#########################') (16↑RAW) ( RA '' 0 0 0 (16↓RAW ))
→ END
L_7:
CNT←⍎2⊃RAW
R←(2↑RAW ) (RA '7' CNT (CNT-1) (INDENT+2) (2↓RAW) )
→END
L_00:
R←'00' (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT ( 2↓RAW))
→END
L_01:
R←'01' (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT ( 2↓RAW))
→END
L_04:
VAL ←6↑(2↓RAW)
R←'04' VAL (∊H2T¨ (2/⍳.5×⍴VAL)⊂ VAL) (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (
8↓RAW))
→END
L_05:
VAL ←8↑(2↓RAW)
R←'05' VAL (H2I VAL) (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (10↓RAW) )
→END
L_07:
VAL ←12↑(2↓RAW)
R← '07' VAL (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (14↓RAW))
→END
L_08:
VAL ←L↑RAW
R← VAL (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT ( L↓RAW) )
→END
L_6032:
R←(16↑RAW )(RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (16↓RAW))
→END
L_6001:
R←(22↑RAW )(RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (22↓RAW))
→END
L_52:
VAL ←2↑(2↓RAW)
R←'52' VAL (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (4↓RAW) )
→END
L_62:
VAL ←2↑(2↓RAW)
R←'62' VAL (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (4↓RAW))
→END
L_63:
VAL ←4↑(2↓RAW)
R←'63' VAL (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (6↓RAW))
→END
L_65:
VAL ←8↑(2↓RAW)
R←'65' VAL (H2I VAL) (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (10↓RAW) )
→END
L_0B:
VAL ←10↑(12↓RAW)
R←(6↑RAW) 'ISK' (H2I VAL) (RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (22↓RAW))
→END
⍝ END OF RECORD + PARITY
L_1B:
R←(L↑RAW) (L↓RAW) (H2I L↓RAW)
#RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (L↓RAW)
→END
L_FF:
R←(4↑RAW )(RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (4↓RAW))
→END
ISK_SN:
VAL ←10↑(6↓RAW)
R←'ISK' ( H2I VAL)
R
RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (16↓RAW)
→END
ISK:
R←'ISK'
R
RA FLD_ID FLD_CNT (FLD_NUM-1) INDENT (6↓RAW)
→END
L_72:
ERROR_HEAD:
'ERROR HEAD' ARG
→0
ERROR_NO_FIELD_ID:
R←'ERROR_NO_FIELD_ID' (2↑ARG) ARG
→0
END:
→0
⍝ 2025-04-11 23:22:04
∇
∇R←REC
R←426 ⎕FIO[ 8] ⎕FIO[ 3] 'YYYY'
∇
∇R←REC_CHR N;H;Rec
⍝ Setup
H←⎕FIO[3] 'YYYY'
R←''
⍝ Read multiple records if N≠1
READ:
Rec←426 ⎕FIO[8] H
⍝ In case - skip now - FIXME later
⍝ 426 above includes NL. NL will be discarded. We are left with 425 chars
→END×⍳425 >⍴Rec
⍝ Collect records.
R←R,⊂ ⎕AV[1+Rec]
→READ ×⍳ N≡''
⍝ Else take N as number of records to be read.
→READ ×⍳ 0 < N←N-1
END:
H ← ⎕FIO[4] H
∇
∇R←REC_CHR_BYTES N;H;Rec
⍝ Setup
H←⎕FIO[3] 'YYYY'
R←''
⍝ Read multiple records if N≠1
READ:
Rec←426 ⎕FIO[8] H
⍝ In case - skip now - FIXME later
⍝ 426 above includes NL. NL will be discarded. We are left with 425 chars
→END×⍳425 >⍴Rec
⍝ Collect records.
R←R,⊂ ⎕AV[1+Rec]
→READ ×⍳ N≡''
⍝ Else take N as number of records to be read.
→READ ×⍳ 0 < N←N-1
END:
H ← ⎕FIO[4] H
∇
∇RR;Rec;Hy;Hz
⍝ Raw Reader
Hy←⎕FIO[ 3] 'YYYY'
Hz←⎕FIO[ 3] 'ZZZZ'
NEXT: →END ×⍳ 10 < N←N+1
⍝ 426 Includes NewLine
Rec←426 ⎕FIO[ 8] Hy
⍝ 424 NewLine removed
→ERL×⍳(⍴Rec)<424
LO ⎕AV[1+Rec]
→NEXT
ERL:
⍝ Error Record Lenght
'ERROR RECORD LENGTH' (⍴Rec) Rec
→END×⍳ 0=⍴Rec
→NEXT
END:
⎕FIO[4] Hy
⍎ (Hz > 0)/'⎕FIO[4] Hz'
∇
∇SAVE ;name_of_WS ;apl ;act
name_of_WS ← NAME_OF_WS
act← 3↓ ∊ ⍎ ')WSID '
→ no_ws_name_change ×⍳ act ≡ name_of_WS
⍎ ')WSID ',name_of_WS
no_ws_name_change:
0↑EDIT '' 'C'
→save
apl←(¯4↓name_of_WS),'.apl'
⍎')DUMP ',apl
'DUMPED' apl
save:
⍎')SAVE '
'SAVED' name_of_WS
⍝ 2025-02-27 19:07:27
∇
∇R←Filter SV ARG;sv
sv←Filter⍷ARG
sv[(⍴Filter)+sv/(⍳⍴sv)]←1
R←sv
∇
∇TEST
')RESET'
∆∆
SAVE
PROCESS
∇
∇∆∆
⍎ ')COPY MT631/RAl.APL'
∇
⎕CT←1E¯13
⎕FC←".,⋆0_¯"
⎕IO←1
⎕L←0
⎕LX←""
⎕PP←10
⎕PR←' '
⎕PS←0 0
⎕PW←1024
⎕R←0
⎕RL←16807
⎕TZ←2
⎕X←0
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<!DOCTYPE Workspace
[
<!ELEMENT Workspace (Function*, Value*, Ravel*, SymbolTable,
Symbol*, Commands?, StateIndicator)>
<!ATTLIST Workspace wsid CDATA #REQUIRED>
<!ATTLIST Workspace year CDATA #REQUIRED>
<!ATTLIST Workspace month CDATA #REQUIRED>
<!ATTLIST Workspace day CDATA #REQUIRED>
<!ATTLIST Workspace hour CDATA #REQUIRED>
<!ATTLIST Workspace minute CDATA #REQUIRED>
<!ATTLIST Workspace second CDATA #REQUIRED>
<!ATTLIST Workspace timezone CDATA #REQUIRED>
<!ATTLIST Workspace saving_SVN CDATA #REQUIRED>
<!ATTLIST Workspace syntax CDATA #IMPLIED>
<!ELEMENT Value (#PCDATA)>
<!ATTLIST Value flg CDATA #REQUIRED>
<!ATTLIST Value vid CDATA #REQUIRED>
<!ATTLIST Value parent CDATA #IMPLIED>
<!ATTLIST Value rk CDATA #REQUIRED>
<!ATTLIST Value sh-0 CDATA #IMPLIED>
<!ATTLIST Value sh-1 CDATA #IMPLIED>
<!ATTLIST Value sh-2 CDATA #IMPLIED>
<!ATTLIST Value sh-3 CDATA #IMPLIED>
<!ATTLIST Value sh-4 CDATA #IMPLIED>
<!ATTLIST Value sh-5 CDATA #IMPLIED>
<!ATTLIST Value sh-6 CDATA #IMPLIED>
<!ATTLIST Value sh-7 CDATA #IMPLIED>
<!ELEMENT Ravel (#PCDATA)>
<!ATTLIST Ravel vid CDATA #REQUIRED>
<!ATTLIST Ravel bytes CDATA #IMPLIED>
<!ATTLIST Ravel cells CDATA #IMPLIED>
<!ATTLIST Ravel depth CDATA #IMPLIED>
<!ELEMENT SymbolTable (Symbol*)>
<!ATTLIST SymbolTable size CDATA #REQUIRED>
<!ELEMENT Symbol (unused-name | Variable | Function|
Label | Shared-Variable)*>
<!ATTLIST Symbol name CDATA #REQUIRED>
<!ATTLIST Symbol stack-size CDATA #REQUIRED>
<!ELEMENT unused-name EMPTY>
<!ELEMENT Variable (#PCDATA)>
<!ATTLIST Variable vid CDATA #REQUIRED>
<!ELEMENT Function (UCS*)>
<!ATTLIST Function fid CDATA #REQUIRED>
<!ATTLIST Function creation-time CDATA #IMPLIED>
<!ATTLIST Function LO-fid CDATA #IMPLIED>
<!ATTLIST Function OPER-fid CDATA #IMPLIED>
<!ATTLIST Function RO-fid CDATA #IMPLIED>
<!ATTLIST Function AXIS-vid CDATA #IMPLIED>
<!ATTLIST Function exec-properties CDATA #IMPLIED>
<!ATTLIST Function macro CDATA #IMPLIED>
<!ATTLIST Function tag CDATA #IMPLIED>
<!ELEMENT Label (#PCDATA)>
<!ATTLIST Label value CDATA #REQUIRED>
<!ELEMENT Shared-Variable (#PCDATA)>
<!ATTLIST Shared-Variable key CDATA #REQUIRED>
<!ELEMENT UCS (#PCDATA)>
<!ATTLIST UCS uni CDATA #REQUIRED>
<!ELEMENT Commands (Command*)>
<!ATTLIST Commands size CDATA #REQUIRED>
<!ELEMENT Command (#PCDATA)>
<!ATTLIST Command name CDATA #REQUIRED>
<!ATTLIST Command mode CDATA #REQUIRED>
<!ATTLIST Command fun CDATA #REQUIRED>
<!ELEMENT StateIndicator (SI-entry*)>
<!ATTLIST StateIndicator levels CDATA #REQUIRED>
<!ELEMENT SI-entry ((Execute | Statements | UserFunction),
Parser+)>
<!ATTLIST SI-entry level CDATA #REQUIRED>
<!ATTLIST SI-entry pc CDATA #REQUIRED>
<!ATTLIST SI-entry line CDATA #REQUIRED>
<!ELEMENT Statements (UCS)>
<!ELEMENT Execute (UCS)>
<!ELEMENT UserFunction (#PCDATA)>
<!ATTLIST UserFunction ufun-name CDATA #IMPLIED>
<!ATTLIST UserFunction macro-num CDATA #IMPLIED>
<!ATTLIST UserFunction lambda-name CDATA #IMPLIED>
<!ATTLIST UserFunction symbol-level CDATA #IMPLIED>
<!ELEMENT Parser (Token*, Function*)>
<!ATTLIST Parser size CDATA #REQUIRED>
<!ATTLIST Parser assign-pending CDATA #REQUIRED>
<!ATTLIST Parser lookahead-high CDATA #REQUIRED>
<!ATTLIST Parser action CDATA #REQUIRED>
<!ELEMENT Token (#PCDATA)>
<!ATTLIST Token pc CDATA #REQUIRED>
<!ATTLIST Token tag CDATA #REQUIRED>
<!ATTLIST Token char CDATA #IMPLIED>
<!ATTLIST Token int CDATA #IMPLIED>
<!ATTLIST Token float CDATA #IMPLIED>
<!ATTLIST Token real CDATA #IMPLIED>
<!ATTLIST Token imag CDATA #IMPLIED>
<!ATTLIST Token sym CDATA #IMPLIED>
<!ATTLIST Token line CDATA #IMPLIED>
<!ATTLIST Token vid CDATA #IMPLIED>
<!ATTLIST Token index CDATA #IMPLIED>
<!ATTLIST Token fun-id CDATA #IMPLIED>
<!ATTLIST Token ufun-name CDATA #IMPLIED>
<!ATTLIST Token symbol-level CDATA #IMPLIED>
<!ATTLIST Token comment CDATA #IMPLIED>
]>
<!-- hour/minute/second is )SAVE time in UTC (aka. GMT).
timezone is +/- offset to UTC in seconds.
local time is UTC + offset -->
<Workspace wsid="MT631_DDD" year="2025" month="4" day="13"
hour="15" minute="4" second="6" timezone="7200"
saving_SVN=" 1860" syntax="1.9.1">
<!-- system functions and primitives... -->
<Function fid="0x7BCCE0" tag="0x41010907"/> <!-- primitive: ⎕AF -->
<Function fid="0x7BCD20" tag="0x41090907"/> <!-- primitive: ⎕AT -->
<Function fid="0x840200" tag="0x43080907"/> <!-- primitive: ⎕CR -->
<Function fid="0x7BCD60" tag="0x44040907"/> <!-- primitive: ⎕DL -->
<Function fid="0x7BD1E0" tag="0x44070907"/> <!-- primitive: ⎕DLX -->
<Function fid="0x7BCDA0" tag="0x45010907"/> <!-- primitive: ⎕EA -->
<Function fid="0x7BCDE0" tag="0x45130907"/> <!-- primitive: ⎕EB -->
<Function fid="0x840260" tag="0x45030907"/> <!-- primitive: ⎕EC -->
<Function fid="0x7BCE20" tag="0x45090907"/> <!-- primitive: ⎕ENV -->
<Function fid="0x8402C0" tag="0x450D0907"/> <!-- primitive: ⎕ES -->
<Function fid="0x7BCE60" tag="0x45100907"/> <!-- primitive: ⎕EX -->
<Function fid="0x7BD220" tag="0x46070907"/> <!-- primitive: ⎕FFT -->
<Function fid="0x7BD2C0" tag="0x46060907"/> <!-- primitive: ⎕FIO -->
<Function fid="0x7BD300" tag="0x46050907"/> <!-- primitive: ⎕FX -->
<Function fid="0x7BD340" tag="0x47020907"/> <!-- primitive: ⎕GTK -->
<Function fid="0x7BD400" tag="0x4D040907"/> <!-- primitive: ⎕MAP -->
<Function fid="0x7BD440" tag="0x4D050907"/> <!-- primitive: ⎕MX -->
<Function fid="0x7BCEA0" tag="0x49060907"/> <!-- primitive: ⎕INP -->
<Function fid="0x7BCEE0" tag="0x4E010907"/> <!-- primitive: ⎕NA -->
<Function fid="0x7BCF20" tag="0x4E030907"/> <!-- primitive: ⎕NC -->
<Function fid="0x7BCF60" tag="0x4E040907"/> <!-- primitive: ⎕NL -->
<Function fid="0x7BD480" tag="0x500B0907"/> <!-- primitive: ⎕PLOT -->
<Function fid="0x7BD540" tag="0x500C0907"/> <!-- primitive: ⎕PNG -->
<Function fid="0x7BD600" tag="0x53130907"/> <!-- primitive: ⎕RE -->
<Function fid="0x7BD820" tag="0x52160907"/> <!-- primitive: ⎕RVAL -->
<Function fid="0x7BCFA0" tag="0x53040907"/> <!-- primitive: ⎕SI -->
<Function fid="0x7BD860" tag="0x53160907"/> <!-- primitive: ⎕SQL -->
<Function fid="0x7BD8E0" tag="0x530B0907"/> <!-- primitive: ⎕SVC -->
<Function fid="0x7BD920" tag="0x530D0907"/> <!-- primitive: ⎕SVO -->
<Function fid="0x7BD960" tag="0x530E0907"/> <!-- primitive: ⎕SVQ -->
<Function fid="0x7BD9A0" tag="0x530F0907"/> <!-- primitive: ⎕SVR -->
<Function fid="0x7BD9E0" tag="0x53100907"/> <!-- primitive: ⎕SVS -->
<Function fid="0x7BD020" tag="0x53150907"/> <!-- primitive: ⎕STOP -->
<Function fid="0x7BDA40" tag="0x54030907"/> <!-- primitive: ⎕TF -->
<Function fid="0x7BD3C0" tag="0x4A020907"/> <!-- primitive: ⎕JSON -->
<Function fid="0x7BDAC0" tag="0x58020907"/> <!-- primitive: ⎕XML -->
<Function fid="0x7BD060" tag="0x54080907"/> <!-- primitive: ⎕TRACE -->
<Function fid="0x7BCFE0" tag="0x55010907"/> <!-- primitive: ⎕UCS -->
<Function fid="0x7AF980" tag="0x43040907"/> <!-- primitive: , -->
<Function fid="0x7AF9C0" tag="0x43050907"/> <!-- primitive: ⍪ -->
<Function fid="0x7AFA00" tag="0x44050907"/> <!-- primitive: ⌹ -->
<Function fid="0x7AFAC0" tag="0x46040907"/> <!-- primitive: ⍕ -->
<Function fid="0x7AFA40" tag="0x49020907"/> <!-- primitive: ⍳ -->
<Function fid="0x7AFB00" tag="0x50010907"/> <!-- primitive: ⊂ -->
<Function fid="0x7AFB40" tag="0x50020907"/> <!-- primitive: ⊃ -->
<Function fid="0x7AFB80" tag="0x53070907"/> <!-- primitive: ⍋ -->
<Function fid="0x7AFBC0" tag="0x53080907"/> <!-- primitive: ⍒ -->
<Function fid="0x7AFC00" tag="0x54010907"/> <!-- primitive: ↑ -->
<Function fid="0x7AFC40" tag="0x44060907"/> <!-- primitive: ↓ -->
<Function fid="0x7AFC80" tag="0x43060909"/> <!-- primitive: ⍨ -->
<Function fid="0x7AFCC0" tag="0x45020909"/> <!-- primitive: ¨ -->
<Function fid="0x7AFF20" tag="0x52080909"/> <!-- primitive: / -->
<Function fid="0x7AFF60" tag="0x52090909"/> <!-- primitive: ⌿ -->
<Function fid="0x7AFFA0" tag="0x53010909"/> <!-- primitive: \ -->
<Function fid="0x7AFFE0" tag="0x53020909"/> <!-- primitive: ⍀ -->
<Function fid="0x7AFD40" tag="0x4908090A"/> <!-- primitive: . -->
<Function fid="0x7AFE00" tag="0x4A010907"/> <!-- primitive: ∘ -->
<Function fid="0x7AFE40" tag="0x4F05090A"/> <!-- primitive: ∘. -->
<Function fid="0x7AFD00" tag="0x500A090A"/> <!-- primitive: ⍣ -->
<Function fid="0x7AFEE0" tag="0x5206090A"/> <!-- primitive: ⍤ -->
<Function fid="0x7BCC80" tag="0x5A010906"/> <!-- primitive: ⍬ -->
<Function fid="0x7BC9C0" tag="0x45110907"/> <!-- primitive: ⍎ -->
<Function fid="0x7BCA00" tag="0x49010907"/> <!-- primitive: ⌷ -->
<Function fid="0x7BC900" tag="0x45040907"/> <!-- primitive: ϵ -->
<Function fid="0x7BC980" tag="0x450B0907"/> <!-- primitive: ≡ -->
<Function fid="0x7BCAC0" tag="0x4E080907"/> <!-- primitive: ≢ -->
<Function fid="0x7BC940" tag="0x45060907"/> <!-- primitive: ⊤ -->
<Function fid="0x7BC8C0" tag="0x44010907"/> <!-- primitive: ⊥ -->
<Function fid="0x7BCB80" tag="0x52140907"/> <!-- primitive: ⌽ -->
<Function fid="0x7BCBC0" tag="0x52150907"/> <!-- primitive: ⊖ -->
<Function fid="0x7BCC00" tag="0x54050907"/> <!-- primitive: ⍉ -->
<Function fid="0x7BCB40" tag="0x520E0907"/> <!-- primitive: ⍴ -->
<Function fid="0x7BCC40" tag="0x55040907"/> <!-- primitive: ∪ -->
<Function fid="0x7BCA40" tag="0x49070907"/> <!-- primitive: ∩ -->
<Function fid="0x7BCA80" tag="0x4C060907"/> <!-- primitive: ⊣ -->
<Function fid="0x7BCB00" tag="0x520F0907"/> <!-- primitive: ⊢ -->
<Function fid="0x7BDB80" tag="0x42010907"/> <!-- primitive: ! -->
<Function fid="0x7BDE00" tag="0x4C080907"/> <!-- primitive: < -->
<Function fid="0x7BDCC0" tag="0x450A0907"/> <!-- primitive: = -->
<Function fid="0x7BDD00" tag="0x45140907"/> <!-- primitive: ⊤= -->
<Function fid="0x7BE380" tag="0x55060907"/> <!-- primitive: ⊤≠ -->
<Function fid="0x7BDB00" tag="0x41040907"/> <!-- primitive: ∧ -->
<Function fid="0x7BDB40" tag="0x410E0907"/> <!-- primitive: ⊤∧ -->
<Function fid="0x7BE000" tag="0x4F020907"/> <!-- primitive: ∨ -->
<Function fid="0x7BE040" tag="0x4F060907"/> <!-- primitive: ⊤∨ -->
<Function fid="0x7BDDC0" tag="0x4C070907"/> <!-- primitive: ≤ -->
<Function fid="0x7BDE80" tag="0x4D010907"/> <!-- primitive: ≥ -->
<Function fid="0x7BE340" tag="0x55030907"/> <!-- primitive: ≠ -->
<Function fid="0x7BDD40" tag="0x46020907"/> <!-- primitive: ⍷ -->
<Function fid="0x7BDF80" tag="0x4E070907"/> <!-- primitive: ⍱ -->
<Function fid="0x7BDFC0" tag="0x4E0A0907"/> <!-- primitive: ⊤⍱ -->
<Function fid="0x7BDF00" tag="0x4E020907"/> <!-- primitive: ⍲ -->
<Function fid="0x7BDF40" tag="0x4E090907"/> <!-- primitive: ⊤⍲ -->
<Function fid="0x7BE140" tag="0x50040907"/> <!-- primitive: ⋆ -->
<Function fid="0x7BE080" tag="0x50030907"/> <!-- primitive: + -->
<Function fid="0x7BDEC0" tag="0x4D020907"/> <!-- primitive: - -->
<Function fid="0x7BE200" tag="0x52130907"/> <!-- primitive: ? -->
<Function fid="0x7BE3C0" tag="0x57020907"/> <!-- primitive: ∼ -->
<Function fid="0x7BE280" tag="0x54040907"/> <!-- primitive: × -->
<Function fid="0x7BDC80" tag="0x44030907"/> <!-- primitive: ÷ -->
<Function fid="0x7BDBC0" tag="0x43020907"/> <!-- primitive: ○ -->
<Function fid="0x7BE180" tag="0x52120907"/> <!-- primitive: ⌈ -->
<Function fid="0x7BE1C0" tag="0x52110907"/> <!-- primitive: ⌊ -->
<Function fid="0x7BE240" tag="0x530A0907"/> <!-- primitive: ∣ -->
<Function fid="0x7BDE40" tag="0x4C090907"/> <!-- primitive: ⍟ -->