Custom APL Keyboard

Custom APL Keyboard

PostPosted by TheRavenDog » Wed Jan 27, 2016 3:10 am

I have a custom made APL keyboard that allows me to enter APL symbols as Unicode characters in almost any program (provided, of course, I use a font that supports the APL Unicode character set). Basically, the keyboard has an additional modifier key (labeled "APL", not surprisingly) that sends a unique scan code. An AutoHotKey script translates the new modifier key plus the appropriate other key(s) into the desired APL Unicode character.

For example, I'll hold down the "APL" key and press the "R" key to produce "⍴" (Hey it works in this web page!). Holding "APL" plus "Ctrl" and pressing "9" produces "⍱". "APL" plus "Shift" plus "=" produces "÷".

However, when I try type in NARS2000, I'm unable to type the characters. I type the proper key sequence and no characters appear.

If I copy my typed text from another program into NARS2000, APL Unicode characters appear properly.

Any ideas on how I can type Unicode characters directly into NARS2000?

Thanks,

Chris Petersen.
TheRavenDog
 
Posts: 7
Joined: Wed Jan 27, 2016 1:17 am

Re: Custom APL Keyboard

PostPosted by TheRavenDog » Wed Feb 03, 2016 4:15 pm

Here's a picture of the keyboard:

You can see the APL modifier key next to the right shift key.

Image
TheRavenDog
 
Posts: 7
Joined: Wed Jan 27, 2016 1:17 am

Re: Custom APL Keyboard

PostPosted by Robert Wallick » Sat Feb 13, 2016 6:56 pm

Hi Chris,

Welcome to NARS and thank you for downloading and using the program! Thanks also for taking the time to post your situation and desired goal. It is always a pleasure to hear from an APL user, particularly one who has a custom-APL-keyboard - your keyboard implies additional, dedicated APL language interest and usage. That is a very nice custom APL keyboard image you posted, congratulations on purchasing and using it.

I am using a standard Microsoft PC keyboard, wireless, i.e. blue-tooth enabled. The NARS APL font I am using and which normally downloads automatically with NARS, both 32 and 64-bit Windows PC versions is SImPL-Medium.ttf, which can normally be found in your downloaded NARS2000 program folder, e.g. C:\Program Files (x86)\NARS2000 (32-bit program) and or C:\Program Files\NARS2000 (64-bit version). The keyboard layout can be found here: http://www.sudleyplace.com/APL/Keyboard.ahtml. For me and most users, the SimPL Medium font works perfectly with any standard PC keyboard. Most of the APL keys, specifically, are available in NARS2000 using Alt + some key, e.g. Alt + L (or Alt plus lower-case-l) generates the Quad ⎕ symbol, again in NARS. Alt + = generates the division symbol or ÷ in NARS.

Suggested solutions:
1. It could be a simple matter of letting your custom keyboard know which font to use, such as SimPL-Medium.ttf OR
2. It could also be that NOT using your <APL> key and simply using PC key <Alt> with(plus, key-combinations) the SimPL keyboard layout will generate all desired APL symbols within NARS. Shift and Alt-Shift key-combinations are also used.

For me and most NARS APL'ers, printing out the keyboard layout at http://www.sudleyplace.com/APL/Keyboard.ahtml has worked out very nicely.

An alternative font which frequently is used by APL'ers is APL385.ttf. More NARS documentation on the NARS keyboard and symbol input may be found here http://wiki.nars2000.org/index.php/APL_Font.

If neither of the two suggested solutions above works for you, perhaps you might relate the keyboard manufacturer's name and model number of the APL keyboard you own, including the approximate year-of-purchase. Also, it could be helpful to know what scan codes each APL (mode ON) / non-APL (APL mode OFF) keystrokes generate using your APL keyboard, i.e. a complete key-codes / scan-codes list along with keystrokes actually pressed, per the manufacturer.

Best regards,
Robert Wallick
Robert Wallick
 
Posts: 22
Joined: Thu Feb 05, 2015 5:35 pm

Re: Custom APL Keyboard

PostPosted by TheRavenDog » Mon Feb 15, 2016 8:20 pm

I'm a complete APL novice, but I find it fascinating how the language and symbols used to represent mathematics effects our ability to think about mathematics.

Sadly, contacting the manufacturer of the keyboard isn't an option: because it's me! The keyboard is an old IBM Model M that I've modified with the extra APL key. The extra key produces scancode SC0073. I have an AutoHotKey script that translates the scancode plus key combination into Unicode character (here's the entry for the = key):

SC0073 & =::
IF GetKeyState("Shift","P")
Send {U+00F7} ; ÷
ELSE IF GetKeyState("Ctrl","P")
Send {U+2339} ; ⌹
ELSE
Send {U+00D7} ; ×
RETURN

Basically, this script detects that my custom APL character and the "=" key have been pressed. It then switches based on the the Shift and Ctrl modifier and send the appropriate Unicode character.


I think perhaps the correct solution is to not send the Unicode character (although that is very convenient for this forum!), but rather send the Alt-key combination that NARS needs.

I was just hoping that there was a way to allow the NARS UI to directly accept Unicode character input.

I'll try creating a new AutoHotKey script that sends key combinations expected by NARS.
TheRavenDog
 
Posts: 7
Joined: Wed Jan 27, 2016 1:17 am

Re: Custom APL Keyboard

PostPosted by Robert Wallick » Tue Feb 16, 2016 12:44 pm

Chris,
You may be an APL novice, but you certainly possess Keyboard Hardware expertise, a rare skill in and of itself!

Like most things APL, an APL'er needs one I/O environment while programming or working inside the APL environment, another set of I/O requirements for keying-in and displaying APL outside APL's programming/Interpreter environment. Thus a good APL keyboard needs a toggle switch, either virtual(scripted) and or hardware triggered. The same keyboard/programming/font dichotomy situation exists on Android devices. Google, aka Android's Operating System(Linux core), is still waking up to the fact that un-rooted Android devices need to be able to quickly and easily switch fonts, ttf files.

Further, I'd love to be able to open up my Microsoft Wireless Keyboard 6000 v3.0 and dual hot-wire it for APL/fonts on/off, inside and outside the programming environment. The manufacturer's warranty on the Microsoft keyboard is expired here; having the keyboard's warranty voided would therefore be a non-event.

As you mention: APL's intrinsic syntax and conceptualization, programming directly with symbols, springs mathematics vividly to life in ways totally unattainable in spreadsheets and other programming languages. APL has been described as a beautiful language - "Exploring Beautiful Languages", http://langexplr.blogspot.com/2011/03/quick-look-at-apl.html. Scientific American 9/1/2014, "Beauty in Math and Art Activate Same Brain Area: Elegant equations evoke the same activity in mathematicians' brains as gorgeous art or music." http://www.scientificamerican.com/article/beauty-in-math-and-art-activate-same-brain-area/.

All the best,
Robert Wallick
Robert Wallick
 
Posts: 22
Joined: Thu Feb 05, 2015 5:35 pm

Re: Custom APL Keyboard

PostPosted by TheRavenDog » Tue Feb 16, 2016 4:31 pm

OK. I think I'm on my way.

I've modified my AutoHotKey script to send different keys depending on whether NARS2000 has focus.

Here's the AutoHotKey entry for [APL] [1] (my poor nomenclature for pressing the APL key and then pressing the 1 key).
Code: Select all
SC0073 & 1::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !1 ; Alt 1
   ELSE
      Send {U+00A8} ; ¨ Diaeresis
ELSE IF GetKeyState("Ctrl","P")
    Send {U+2336} ; ⌶ I-beam functions to execute System/360 commands ?
ELSE
   IF WinActive("NARS2000.64")
      Send !1 ; Alt 1
   ELSE
      Send {U+00A8} ; ¨ Diaeresis
RETURN


It seems to work just fine. It will take a while to get all the keys working.

However, it seems like the APL keycap set I purchased from Unicomp (formally the IBM Model M plant in Kentucky) has more APL symbols than NARS2000?

Is this possible? For example, on my keyboard the front of the "1" key has the APL I-beam symbol (for I-beam functions which according to The Design of APL "were first introduced by the system programmers to allow them to execute System/360 instructions from within APL programs"). So, that's a bad example; it makes sense that NARS2000 on a Windows 7 machine wouldn't execute System/360 commands :).

But here's another example: the APL Quad Circle symbol. It's one my keyboard, but it doesn't appear in NARS2000. Actually I can't figure out with googling what it even does in APL!

Oh my, I am very ignorant of APL! (Lot's to learn...)

Regarding your desire to modify your keyboard. You probably can't easily add an additional modifier key (IBM had additional "secret" keys in place for international keyboard layouts), but you could change your CapsLock (or right Control) key into an "APL" modifier key. Then (if you're using Windows) use AutoHotKey to remap certain key combinations to Unicode and NARS2000 key combinations.

AutoHotKey is strange and esoteric and wildly powerful. We tend not to think about keyboards very much, but they remain the primary(and fastest) input into computers. Once you commit to "hacking" your keyboard, the possibilities for increased efficiency really open up.

Thanks for your help. I'm off to learn some APL!
TheRavenDog
 
Posts: 7
Joined: Wed Jan 27, 2016 1:17 am

Re: Custom APL Keyboard

PostPosted by TheRavenDog » Wed Feb 17, 2016 8:15 pm

I finished my AutoHotKey script. I'll share it here, so that anyone else who wants to use the Unicomp APL keys ( http://www.pckeyboard.com/page/product/USAPLSET) can use them inside and outside of NARS2000.

Obviously most people won't have the special APL modifier key, but you could use a different Modifier key (such as CapsLock). Just substitute your modifier scancode (e.g. SC03A for CapsLock) for SC0073 in the script.

Anyway here's the AutoHotKey script:

Code: Select all
#IfWinActive
SC0073 & `::
IF GetKeyState("Shift","P")
    Send {U+233C} ; ⌼
ELSE IF GetKeyState("Ctrl","P")
    Send {U+2342} ; ⍂
ELSE
    Send {U+233C} ; ⌼
RETURN


SC0073 & 1::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !1 ; Alt 1
   ELSE
      Send {U+00A8} ; ¨ Diaeresis
ELSE IF GetKeyState("Ctrl","P")
    Send {U+2336} ; ⌶ I-beam functions to execute System/360 commands
ELSE
   IF WinActive("NARS2000.64")
      Send !1 ; Alt 1
   ELSE
      Send {U+00A8} ; ¨ Diaeresis
RETURN

SC0073 & 2::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !2 ; Alt 2
   ELSE
      Send {U+00AF} ; ¯ Overbar
ELSE IF GetKeyState("Ctrl","P")
    Send {U+2371} ; ⍱
ELSE
   IF WinActive("NARS2000.64")
      Send !2 ; Alt 2
   ELSE
      Send {U+00AF} ; ¯
RETURN


SC0073 & 3::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !3 ; <
   ELSE
      Send {U+003C} ; <
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send +!3 ; <
   ELSE
      Send {U+2352} ; ⍒
ELSE
   IF WinActive("NARS2000.64")
      Send !3 ; <
   ELSE
      Send {U+003C} ; <
RETURN


SC0073 & 4::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !4 ; ≤
   ELSE
      Send {U+2264} ; ≤
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send +!4 ; ≤
   ELSE
      Send {U+234B} ; ⍋
ELSE
   IF WinActive("NARS2000.64")
      Send !4 ; ≤
   ELSE
      Send {U+2264} ; ≤
RETURN


SC0073 & 5::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !5 ; =
   ELSE
      Send {U+003D} ; =
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send +!5 ; =
   ELSE
      Send {U+233D} ; ⌽
ELSE
   IF WinActive("NARS2000.64")
      Send !5 ; =
   ELSE
      Send {U+003D} ; =
RETURN


SC0073 & 6::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !6 ; ≥
   ELSE
      Send {U+02265} ; ≥
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send +!6 ; ≥
   ELSE
      Send {U+2349} ; ⍉
ELSE
   IF WinActive("NARS2000.64")
      Send !6 ; ≥
   ELSE
      Send {U+02265} ; ≥
RETURN

SC0073 & 7::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !7 ; >
   ELSE
      Send {U+003E} ; >
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send +!7 ; >
   ELSE
      Send {U+2296} ; ⊖
ELSE
   IF WinActive("NARS2000.64")
      Send !7 ; >
   ELSE
      Send {U+003E} ; >
RETURN


SC0073 & 8::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !8 ; >
   ELSE
      Send {U+2260} ; ≠
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send +!8 ; >
   ELSE
      Send {U+235F} ; ⍟
ELSE
   IF WinActive("NARS2000.64")
      Send !8 ; >
   ELSE
      Send {U+2260} ; ≠
RETURN


SC0073 & 9::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !9 ; ∨
   ELSE
      Send {U+2228} ; ∨
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send +!9 ; ⍱
   ELSE
      Send {U+2371} ; ⍱
ELSE
   IF WinActive("NARS2000.64")
      Send !9 ; >
   ELSE
      Send {U+2228} ; ∨
RETURN


SC0073 & 0::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !0 ; ∧
   ELSE
      Send {U+2227} ; ∧
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send +!0 ; ∧
   ELSE
      Send {U+2372} ; ⍲
ELSE
   IF WinActive("NARS2000.64")
      Send !0 ; ∧
   ELSE
      Send {U+2227} ; ∧
RETURN


SC0073 & -::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send -
   ELSE
      Send {U+2212} ; −
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send {!}
   ELSE
      Send {U+0021} ; !
ELSE
   IF WinActive("NARS2000.64")
      Send {+}
   ELSE
      Send {U+002B} ; +
RETURN


SC0073 & =::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !=
   ELSE
      Send {U+00F7} ; ÷
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send +!=
   ELSE
      Send {U+2339} ; ⌹
ELSE
   IF WinActive("NARS2000.64")
      Send !-
   ELSE
      Send {U+00D7} ; ×
RETURN


SC0073 & q::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !q
   ELSE
      Send {U+003F} ; ?
ELSE
   IF WinActive("NARS2000.64")
      Send !q
   ELSE
      Send {U+003F} ; ?
RETURN


SC0073 & w::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !w
   ELSE
      Send {U+2375} ; ⍵
ELSE
   IF WinActive("NARS2000.64")
      Send !w
   ELSE
      Send {U+2375} ; ⍵
RETURN


SC0073 & e::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !e
   ELSE
      Send {U+2208} ; ∈
ELSE
   IF WinActive("NARS2000.64")
      Send !e
   ELSE
      Send {U+2208} ; ∈
RETURN


SC0073 & r::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !r
   ELSE
      Send {U+2374} ; ⍴
ELSE
   IF WinActive("NARS2000.64")
      Send !r
   ELSE
      Send {U+2374} ; ⍴
RETURN


SC0073 & t::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !t
   ELSE
      Send {U+223C} ; ∼
ELSE
   IF WinActive("NARS2000.64")
      Send !t
   ELSE
      Send {U+223C} ; ∼
RETURN


SC0073 & y::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !y
   ELSE
      Send {U+2191} ; ↑
ELSE
   IF WinActive("NARS2000.64")
      Send !y
   ELSE
      Send {U+2191} ; ↑
RETURN


SC0073 & u::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !u
   ELSE
      Send {U+2193} ; ↓
ELSE
   IF WinActive("NARS2000.64")
      Send !u
   ELSE
      Send {U+2193} ; ↓
RETURN


SC0073 & i::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !i
   ELSE
      Send {U+2373} ; ⍳
ELSE
   IF WinActive("NARS2000.64")
      Send !i
   ELSE
      Send {U+2373} ; ⍳
RETURN


SC0073 & o::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !o
   ELSE
      Send {U+25CB} ; ○
ELSE
   IF WinActive("NARS2000.64")
      Send !o
   ELSE
      Send {U+25CB} ; ○
RETURN


SC0073 & p::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send *
   ELSE
      Send {U+22C6} ; ⋆
ELSE
   IF WinActive("NARS2000.64")
      Send *
   ELSE
      Send {U+22C6} ; ⋆
RETURN


SC0073 & [::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !]
   ELSE
      Send {U+2192} ; →
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send +![
   ELSE
      Send {U+235E} ; ⍞
ELSE
   IF WinActive("NARS2000.64")
      Send ![
   ELSE
      Send {U+2190} ; ←
RETURN


SC0073 & ]::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send +!i
   ELSE
      Send {U+2378} ; ⍸
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send +!h
   ELSE
      Send {U+2359} ; ⍙
ELSE
   IF WinActive("NARS2000.64")
      Send +!l
   ELSE
      Send {U+2337} ; ⌷
RETURN


SC0073 & \::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send +!e
   ELSE
      Send {U+2377} ; ⍷
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send ∵
   ELSE
      Send {U+2235} ; ∵
ELSE
   IF WinActive("NARS2000.64")
      Send +!1
   ELSE
      Send {U+2261} ; ≡
RETURN


SC0073 & a::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !a
   ELSE
      Send {U+237A} ; ⍺
ELSE
   IF WinActive("NARS2000.64")
      Send !a
   ELSE
      Send {U+237A} ; ⍺
RETURN


SC0073 & s::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !s
   ELSE
      Send {U+2308} ; ⌈
ELSE
   IF WinActive("NARS2000.64")
      Send !s
   ELSE
      Send {U+2308} ; ⌈
RETURN


SC0073 & d::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !d
   ELSE
      Send {U+230A} ; ⌊
ELSE
   IF WinActive("NARS2000.64")
      Send !d
   ELSE
      Send {U+230A} ; ⌊
RETURN


SC0073 & f::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send _
   ELSE
      Send {U+005F} ; _
ELSE
   IF WinActive("NARS2000.64")
      Send _
   ELSE
      Send {U+005F} ; _
RETURN


SC0073 & g::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !g
   ELSE
      Send {U+2207} ; ∇
ELSE
   IF WinActive("NARS2000.64")
      Send !g
   ELSE
      Send {U+2207} ; ∇
RETURN


SC0073 & h::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !h
   ELSE
      Send {U+2206} ; ∆
ELSE
   IF WinActive("NARS2000.64")
      Send !h
   ELSE
      Send {U+2206} ; ∆
RETURN


SC0073 & j::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !j
   ELSE
      Send {U+2218} ; ∘
ELSE
   IF WinActive("NARS2000.64")
      Send !j
   ELSE
      Send {U+2218} ; ∘
RETURN


SC0073 & k::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !k
   ELSE
      Send {U+0027} ; '
ELSE
   IF WinActive("NARS2000.64")
      Send !k
   ELSE
      Send {U+0027} ; '
RETURN


SC0073 & l::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !l
   ELSE
      Send {U+2395} ; ⎕
ELSE
   IF WinActive("NARS2000.64")
      Send !l
   ELSE
      Send {U+2395} ; ⎕
RETURN


SC0073 & SC0027::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send (
   ELSE
      Send {U+0028} ; (
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send !;
   ELSE
      Send {U+234E} ; ⍎
ELSE
   IF WinActive("NARS2000.64")
      Send {[}
   ELSE
      Send {U+005B} ; [
RETURN


SC0073 & '::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send )
   ELSE
      Send {U+0029} ; )
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send !'
   ELSE
      Send {U+2355} ; ⍕
ELSE
   IF WinActive("NARS2000.64")
      Send {]}
   ELSE
      Send {U+005D} ; ]
RETURN


SC0073 & z::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !z
   ELSE
      Send {U+2282} ; ⊂
ELSE
   IF WinActive("NARS2000.64")
      Send !z
   ELSE
      Send {U+2282} ; ⊂
RETURN


SC0073 & x::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !x
   ELSE
      Send {U+2283} ; ⊃
ELSE
   IF WinActive("NARS2000.64")
      Send !x
   ELSE
      Send {U+2283} ; ⊃
RETURN


SC0073 & c::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !c
   ELSE
      Send {U+2229} ; ∩
ELSE
   IF WinActive("NARS2000.64")
      Send !c
   ELSE
      Send {U+2229} ; ∩
RETURN


SC0073 & v::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !v
   ELSE
      Send {U+222A} ; ∪
ELSE
   IF WinActive("NARS2000.64")
      Send !v
   ELSE
      Send {U+222A} ; ∪
RETURN


SC0073 & b::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !b
   ELSE
      Send {U+22A5} ; ⊥
ELSE
   IF WinActive("NARS2000.64")
      Send !b
   ELSE
      Send {U+22A5} ; ⊥
RETURN


SC0073 & n::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send !n
   ELSE
      Send {U+22A4} ; ⊤
ELSE
   IF WinActive("NARS2000.64")
      Send !n
   ELSE
      Send {U+22A4} ; ⊤
RETURN


SC0073 & m::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send +\
   ELSE
      Send {U+2223} ; ∣
ELSE
   IF WinActive("NARS2000.64")
      Send +\
   ELSE
      Send {U+2223} ; ∣
RETURN


SC0073 & ,::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send {;}
   ELSE
      Send {U+003B} ; ;
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send !,
   ELSE
      Send {U+235D} ; ⍝
ELSE
   IF WinActive("NARS2000.64")
      Send {,}
   ELSE
      Send {U+002C} ; ,
RETURN


SC0073 & .::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send :
   ELSE
      Send {U+003A} ; :
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send !.
   ELSE
      Send {U+2340} ; ⍀
ELSE
   IF WinActive("NARS2000.64")
      Send .
   ELSE
      Send {U+002E} ; .
RETURN


SC0073 & /::
IF GetKeyState("Shift","P")
   IF WinActive("NARS2000.64")
      Send \
   ELSE
      Send {U+005C} ; \
ELSE IF GetKeyState("Ctrl","P")
   IF WinActive("NARS2000.64")
      Send !/
   ELSE
      Send {U+233F} ; ⌿
ELSE
   IF WinActive("NARS2000.64")
      Send /
   ELSE
      Send {U+002F} ; /
RETURN

TheRavenDog
 
Posts: 7
Joined: Wed Jan 27, 2016 1:17 am


Return to Entering APL Characters

Who is online

Users browsing this forum: No registered users and 0 guests

cron