/*
    This file is part of GNU APL, a free implementation of the
    ISO/IEC Standard 13751, "Programming Language APL, Extended"

    Copyright (C) 2008-2016  Dr. Jürgen Sauermann

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should hste received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

   // to maintain )SAVE / )LOAD compatibility, append new items at the end
   // of their character!


// make Solaris happy
//
#ifdef ES
#undef ES
#endif

//      Id              UCS        = Value    Macro
//-------------------------------------------------
pp( No_ID         , ---       , = 0      )
pp( No_ID1        , ---       , = 1      )
pp( No_ID2        , ---       , = 2      )
pp( No_ID3        , ---       , = 3      )
pp( FUN           , ---       , = 4      )
pp( VAR           , ---       , = 5      )

qf( AF            , "⎕AF"     , = 0x4101 )
qv( AI            , "⎕AI"     ,          )
qv( ARG           , "⎕ARG"    ,          )
sf( F2_AND        , "∧"       ,          )
pp( APL_VALUE1    , ---       ,          )
pp( APL_VALUE2    , ---       ,          )
pp( APL_VALUE3    , ---       ,          )
st( ASSIGN        , "←"       ,          )
qf( AT            , "⎕AT"     ,          )
qv( AV            , "⎕AV"     ,          )
st( ALPHA         , "⍺"       ,          )
st( ALPHA_U       , "⍶"       ,          )
st( ASSIGN1       , "←"       ,          )
sf( F2_AND_B      , "∧∧"       ,         )

sf( F12_BINOM     , "!"       , = 0x4201 )
st( BRANCH        , "→"       ,          )

pp( CHARACTER     , ---       , = 0x4301 )
sf( F12_CIRCLE    , "○"       ,          )
st( COLON         , ":"       ,          )
sf( F12_COMMA     , ","       ,          )
sf( F12_COMMA1    , "⍪"       ,          )
sf( OPER1_COMMUTE , "⍨"       ,          )
pp( COMPLEX       , ---       ,          )
qf( CR            , "⎕CR"     ,          )
qv( CT            , "⎕CT"     ,          )
st( CHI           , "χ"       ,          )

sf( F12_DECODE    , "⊥"       , = 0x4401 )
st( DIAMOND       , "◊"       ,          )
sf( F12_DIVIDE    , "÷"       ,          )
qf( DL            , "⎕DL"     ,          )
sf( F12_DOMINO    , "⌹"       ,          )
sf( F12_DROP      , "↓"       ,          )
qf( DLX           , "⎕DLX"    ,          )

qf( EA            , "⎕EA"     , = 0x4501 )
sf( OPER1_EACH    , "¨"       ,          )
qf( EC            , "⎕EC"     ,          )
sf( F12_ELEMENT   , "∈"       ,          )
qv( EM            , "⎕EM"     ,          )
sf( F12_ENCODE    , "⊤"       ,          )
pp( END           , ---       ,          )
pp( ENDL          , ---       ,          )  // last END in line
qf( ENV           , "⎕ENV"    ,          )
sf( F2_EQUAL      , "="       ,          )
sf( F12_EQUIV     , "≡"       ,          )
pp( ERROR         , ---       ,          )
qf( ES            , "⎕ES"     ,          )
st( ESCAPE        , "→"       ,          )
qv( ET            , "⎕ET"     ,          )
qf( EX            , "⎕EX"     ,          )
sf( F1_EXECUTE    , "⍎"       ,          )
pp( ES_EXEC       , ---       ,          )
qf( EB            , "⎕EB"     ,          )
sf( F2_EQUAL_B    , "=="      ,          )
pp( ES_BRA        , ---       ,          )
pp( ES_COM        , ---       ,          )
pp( ES_ERR        , ---       ,          )
pp( ES_ESC        , ---       ,          )

qv( FC            , "⎕FC"     , = 0x4601 )
sf( F2_FIND       , "⋸"       ,          )
pp( FIRST_TIME    , ---       ,          )
sf( F12_FORMAT    , "⍕"       ,          )
qf( FX            , "⎕FX"     ,          )
qf( FIO           , "⎕FIO"    ,          )
qf( FFT           , "⎕FFT"    ,          )

sf( F2_GREATER    , ">"       , = 0x4701 )
qf( GTK           , "⎕GTK"    ,          )

sf( F2_INDEX      , "⌷"       , = 0x4901 )
sf( F12_INDEX_OF  , "⍳"       ,          )
pp( INTEGER       , ---       ,          )
pp( INVALID       , ---       ,          )
qv( IO            , "⎕IO"     ,          )
qf( INP           , "⎕INP"    ,          )
sf( F2_INTER      , "∩"       ,          )
sf( OPER2_INNER   , "."       ,          )

sf( JOT           , "∘"       , = 0x4A01 )

qv( L             , "⎕L"      , = 0x4C01 )
st( L_BRACK       , "["       ,          )
st( L_CURLY       , "{"       ,          )
st( L_PARENT      , "("       ,          )
qv( LC            , "⎕LC"     ,          )
sf( F2_LEFT       , "⊣"       ,          )
sf( F2_LEQ        , "≤"       ,          )
sf( F2_LESS       , "<"       ,          )
sf( F12_LOGA      , "⍟"       ,          )
pp( LVAL          , ---       ,          )
qv( LX            , "⎕LX"     ,          )
st( LAMBDA        , "λ"       ,          )

sf( F2_MEQ        , "≥"       , = 0x4D01 )
sf( F12_MINUS     , "-"       ,          )
st( MACRO         , "MACRO"   ,          )

qf( NA            , "⎕NA"     , = 0x4E01 )
sf( F2_NAND       , "⍲"       ,          )
qf( NC            , "⎕NC"     ,          )
qf( NL            , "⎕NL"     ,          )
  /**  ⎕NLT removed                       **/
pp( NO_VALUE      , ---       , = 0x4E06 )
sf( F2_NOR        , "⍱"       ,          )
sf( F12_NEQUIV    , "≢"       ,          )
sf( F2_NAND_B     , "⍲⍲"      ,          )
sf( F2_NOR_B       , "⍱⍱"     ,          )

pp( OFF           , ---       , = 0x4F01 )
sf( F2_OR         , "∨"       ,          )
st( OMEGA         , "⍵"       ,          )
st( OMEGA_U       , "⍹"       ,          )
sf( OPER2_OUTER   , "∘."      ,          )
sf( F2_OR_B       , "∨∨"      ,          )

sf( F12_PARTITION , "⊂"       , = 0x5001 )
sf( F12_PICK      , "⊃"       ,          )
sf( F12_PLUS      , "+"       ,          )
sf( F12_POWER     , "⋆"       ,          )
qv( PP            , "⎕PP"     ,          )
qv( PR            , "⎕PR"     ,          )
qv( PS            , "⎕PS"     ,          )
  /** ⎕PT            removed              **/
  /**  OPER2_PRODUCT removed              **/
qv( PW            , "⎕PW"     , = 0x5009 )
sf( OPER2_POWER   , "⍣"       ,          )
qf( PLOT          , "⎕PLOT"   ,          )

st( Quad_Quad     , "⎕"       , = 0x5101 )
st( QUOTE1        , "'"       ,          )
st( QUOTE2        , "\""      ,          )
st( QUOTE_Quad    , "⍞"       ,          )
st( Quad_PREFIX   , ""        ,          )

qv( R             , "⎕R"      , = 0x5201 )
st( R_ARROW       , "→"       ,          )
st( R_BRACK       , "]"       ,          )
st( R_CURLY       , "}"       ,          )
st( R_PARENT      , ")"       ,          )
sf( OPER2_RANK    , "⍤"       ,          )
pp( REAL          , ---       ,          )
sf( OPER1_REDUCE  , "/"       ,          )
sf( OPER1_REDUCE1 , "⌿"       ,          )
pp( RETURN_EXEC   , ---       ,          )   // ⍎X
pp( RETURN_STATS  , ---       ,          )   // A ◊ B ◊ C
pp( RETURN_SYMBOL , ---       ,          )   // Z←A FUN B
pp( RETURN_VOID   , ---       ,          )   // A FUN B
sf( F12_RHO       , "⍴"       ,          )
sf( F2_RIGHT      , "⊢"       ,          )
qv( RL            , "⎕RL"     ,          )
sf( F12_RND_DN    , "⌊"       ,          )
sf( F12_RND_UP    , "⌈"       ,          )
sf( F12_ROLL      , "?"       ,          )
sf( F12_ROTATE    , "⌽"       ,          )
sf( F12_ROTATE1   , "⊖"       ,          )

sf( OPER1_SCAN    , "\\"      , = 0x5301 )
sf( OPER1_SCAN1   , "⍀"       ,          )
st( SEMICOL       , ";"       ,          )
qf( SI            , "⎕SI"     ,          )
pp( SI_PUSHED     , ---       ,          )
pp( SI_EVAL_ERR   , ---       ,          )
sf( F12_SORT_ASC  , "⍋"       ,          )
sf( F12_SORT_DES  , "⍒"       ,          )
st( SPACE         , " "       ,          )
sf( F12_STILE     , "∣"       ,          )
qf( SVC           , "⎕SVC"    ,          )
qv( SVE           , "⎕SVE"    ,          )
qf( SVO           , "⎕SVO"    ,          )
qf( SVQ           , "⎕SVQ"    ,          )
qf( SVR           , "⎕SVR"    ,          )
qf( SVS           , "⎕SVS"    ,          )
qv( SYL           , "⎕SYL"    ,          )
pp( USER_SYMBOL   , ---       ,          )
qf( RE            , "⎕RE"     ,          )
pp( STOP_LINE     , ---       ,          )
qf( STOP          , "⎕STOP"   ,          )
qf( SQL           , "⎕SQL"    ,          )

sf( F12_TAKE      , "↑"       , = 0x5401 )
qv( TC            , "⎕TC"     ,          )
qf( TF            , "⎕TF"     ,          )
sf( F12_TIMES     , "×"       ,          )
sf( F12_TRANSPOSE , "⍉"       ,          )
qv( TS            , "⎕TS"     ,          )
qv( TZ            , "⎕TZ"     ,          )
qf( TRACE         , "⎕TRACE"  ,          )

qf( UCS           , "⎕UCS"    , = 0x5501 )
qv( UL            , "⎕UL"     ,          )
sf( F2_UNEQ       , "≠"       ,          )
sf( F12_UNION     , "∪"       ,          )
pp( FUN_USER      , ---       ,          )
sf( F2_UNEQ_B     , "≠≠"      ,          )

pp( VARIABLE      , ---       , = 0x5601 )
pp( VOID          , ---       ,          )

qv( WA            , "⎕WA"     , = 0x5701 )
sf( F12_WITHOUT   , "∼"       ,          )
qv( X             , "⎕X"      , = 0x5801 )

sf( F0_ZILDE      , "⍬"       , = 0x5A01 )

//-----------------------------------------------------------------------------

#undef pp
#undef qf
#undef qv
#undef sf
#undef st

