MAX and MIN in SYMBOL

hippy

Ex-Staff (retired)
Programming Editor 4.1.4

Both the following cause WSTAMP16.EXE to thow an Illegal Opcode error and crash ...

- SYMBOL testMin = 1 MIN 1
- SYMBOL testMax = 1 MAX 1

Also ...

1) Is it possible to extend the maths of a SYMBOL expression to include more than two operands ?

2) Is it possible to add comparisons to SYMBOL expressions ?

I'm currently trying to implement the following pseudo code ( to configure by only changing the "BIT" definition ), and can't find any easy way to do it automatically ...

- SYMBOL BIT = 0 ' 0..7
-
- IF BIT = 0 THEN SYMBOL MASK = %00010000
- IF BIT = 1 THEN SYMBOL MASK = %00001000
- IF BIT = 2 THEN SYMBOL MASK = %00100000
- IF BIT = 3 THEN SYMBOL MASK = %00000100
- IF BIT = 4 THEN SYMBOL MASK = %01000000
- IF BIT = 5 THEN SYMBOL MASK = %00000010
- IF BIT = 6 THEN SYMBOL MASK = %10000000
- IF BIT = 7 THEN SYMBOL MASK = %00000001

The following would work nicely if the previous two ideas were allowed, and True=1/False=0 ...

- SYMBOL BIT = 0 ' 0..7
-
- SYMBOL MASK0 = BIT EQ 0 * %00010000
- SYMBOL MASK1 = BIT EQ 1 * %00001000
- SYMBOL MASK2 = BIT EQ 2 * %00100000
- SYMBOL MASK3 = BIT EQ 3 * %00000100
- SYMBOL MASK4 = BIT EQ 4 * %01000000
- SYMBOL MASK5 = BIT EQ 5 * %00000010
- SYMBOL MASK6 = BIT EQ 6 * %10000000
- SYMBOL MASK7 = BIT EQ 7 * %00000001
-
- SYMBOL MASK = MASK0 OR MASK1 OR ... OR MASK7

The above could be effected nearly as nicely with more operands allowed even without comparisons, but the best I can envisage at present is ...

- SYMBOL BIT = 0 ' 0..7
-
- SYMBOL USE0a = BIT-0
- SYMBOL USE1a = BIT-1
- :
- SYMBOL USE6a = BIT-6
- SYMBOL USE7a = BIT-7
-
- SYMBOL USE0b = USE0a MAX 1
- SYMBOL USE1b = USE1a MAX 1
- :
- SYMBOL USE6b = USE6a MAX 1
- SYMBOL USE7b = USE7a MAX 1
-
- SYMBOL USE0c = 1-USE0b
- SYMBOL USE1c = 1-USE1b
- :
- SYMBOL USE6c = 1-USE6b
- SYMBOL USE7c = 1-USE7b
-
- SYMBOL MASK0 = USE0c * %00010000
- SYMBOL MASK1 = USE1c * %00001000
- :
- SYMBOL MASK6 = USE6c * %10000000
- SYMBOL MASK7 = USE7c * %00000001
-
- SYMBOL MASKa = MASK0 OR MASK1
- SYMBOL MASKb = MASKa OR MASK2
- SYMBOL MASKc = MASKb OR MASK3
- :
- SYMBOL MASKf = MASKe OR MASK6
- SYMBOL MASK = MASKf OR MASK7

Not very elegant, and not very short.
 
Top