|
1 | 1 | :Class EventCodes
|
2 | 2 | ⍝ This class carries all trappable event codes in Dyalog APL up to -- and including -- version 17.0.\\
|
3 |
| -⍝ For transforming a number to the symbolic name see function `GetName`. |
| 3 | +⍝ For transforming a number to the symbolic name see function `GetName`.\\ |
| 4 | +⍝ Instead of using `⎕EM` you can use `QEM`: fed with an integer it behaves exactly as `⎕EM`. Fed with an error message |
| 5 | +⍝ it transforms this error message into the error code. If the error is unknwon |
4 | 6 |
|
5 | 7 | ⎕IO←1 ⋄ ⎕ML←1
|
6 | 8 |
|
|
60 | 62 |
|
61 | 63 | ∇ r←Version
|
62 | 64 | :Access Public Shared
|
63 |
| - r←({⍵}⍕⎕THIS)'1.3.0.1.1' '2018-10-25' |
| 65 | + r←({⍵}⍕⎕THIS)'1.4.0.13' '2019-11-06' |
64 | 66 | ∇
|
65 | 67 |
|
66 | 68 | ∇ History
|
67 | 69 | :Access Public Shared
|
68 |
| - ⍝ * 1.3.0 |
69 |
| - ⍝ * `List` now excepts a left argument: '' (the default) results in the matrix being sorted |
70 |
| - ⍝ by symbolic name. `⍬` results in it being sorted by number. |
71 |
| - ⍝ * Bug fix: `List` crashed on a right argument `⍬`. |
| 70 | + ⍝ * 1.4.0 |
| 71 | + ⍝ * Method `QEM` added. Accepts either a positive integer (same as `⎕EM`) or a character vector |
| 72 | + ⍝ (error message). In the latter case the error number is returned or, if the error message |
| 73 | + ⍝ is unknown, and error is thrown. |
| 74 | + ⍝ * Bug fix: `List` crashed when sorting by number was required. |
72 | 75 | ⍝\\
|
73 | 76 | ⍝ For information regarding older versions see <https://github.com/aplteam/EventCodes/releases>
|
74 | 77 | ∇
|
|
78 | 81 | ⍝ * If the right argument is a scalar or a one-element vector then a text vector is returned.
|
79 | 82 | ⍝ * If the right argument is a vector then a vector of text vectors is returned.
|
80 | 83 | :Access Public Shared
|
81 |
| - :If 0∊⍴__eventCode |
| 84 | + :If 0=≢__eventCode |
82 | 85 | __name←''
|
83 | 86 | :Else
|
84 |
| - __allNumbers←⎕NL-2 |
| 87 | + __allNumbers←' '~¨⍨↓⎕NL 2 |
85 | 88 | __allNumbers←⍎¨('__'∘≢¨2↑¨__allNumbers)/__allNumbers
|
86 | 89 | __ind←__allNumbers⍳__eventCode
|
87 | 90 | 'Unknown event number'⎕SIGNAL 6/⍨__ind∨.>⍴__allNumbers
|
|
90 | 93 | :EndIf
|
91 | 94 | ∇
|
92 | 95 |
|
| 96 | + ∇ __r←QEM __y;__list;__bool |
| 97 | + ⍝ In case `y` is an integer `r` becomes the associated error message.\\ |
| 98 | + ⍝ In case `y` is a character vector r becomes the associated error number.\\ |
| 99 | + ⍝ If a provided error message is unknown `⍬` is returned. If `y` is empty `r` is empty. |
| 100 | + :Access Public Shared |
| 101 | + :If 0=1↑0⍴∊__y |
| 102 | + :If 0=≢__y |
| 103 | + __r←'' |
| 104 | + :Else |
| 105 | + __list←List'' |
| 106 | + :If 1≠+/__bool←__y=__list[;2] |
| 107 | + 'Unknown error number'⎕SIGNAL 11 |
| 108 | + :Else |
| 109 | + __r←1⊃__list[__bool⍳1;] |
| 110 | + :EndIf |
| 111 | + :EndIf |
| 112 | + :Else |
| 113 | + :If 0=≢__y |
| 114 | + __r←⍬ |
| 115 | + :Else |
| 116 | + __list←List'' |
| 117 | + :If 1≠+/__bool←__y∘≡¨__list[;1] |
| 118 | + 'Unknown error message'⎕SIGNAL 11 |
| 119 | + :Else |
| 120 | + __r←2⊃__list[__bool⍳1;] |
| 121 | + :EndIf |
| 122 | + :EndIf |
| 123 | + :EndIf |
| 124 | + ∇ |
| 125 | + |
93 | 126 | ∇ __allNumbers←{__sortType}List __start
|
94 | 127 | ⍝ Returns a matrix with all symbolic names and their numbers in case `__start` is empty.\\
|
95 | 128 | ⍝ In case `__start` is not empty only the symbolic names that start with `__start` are listed.\\
|
|
100 | 133 | :If 0=⎕NC'__sortType'
|
101 | 134 | __sortType←''
|
102 | 135 | :EndIf
|
103 |
| - __allNumbers←⎕NL-2 |
| 136 | + __allNumbers←' '~¨⍨↓⎕NL 2 |
104 | 137 | __allNumbers←('__'∘≢¨2↑¨__allNumbers)/__allNumbers
|
105 | 138 | __allNumbers←__allNumbers,[1.5]⍎¨__allNumbers
|
106 | 139 | :If ''≡__sortType
|
107 |
| - __allNumbers←__allNumbers[⍋__allNumbers[;1];] |
| 140 | + __allNumbers←__allNumbers[⍋↑__allNumbers[;1];] |
108 | 141 | :ElseIf ⍬≡__sortType
|
109 | 142 | __allNumbers←__allNumbers[⍋__allNumbers[;2];]
|
110 | 143 | :Else
|
111 | 144 | 'Invalid sort type: either '''' (alpha) or ⍬ (numeric)'⎕SIGNAL 11
|
112 | 145 | :EndIf
|
113 |
| - :If ~0∊⍴__start←{1(819⌶)⍕⍵}__start~'*' |
| 146 | + :If 0≠≢__start←{1(819⌶)⍕⍵}__start~'*' |
114 | 147 | __allNumbers←(((⍴,__start)↑[2]↑__allNumbers[;1])∧.=__start)⌿__allNumbers
|
115 | 148 | :EndIf
|
116 | 149 | ∇
|
|
0 commit comments