-- Tioga.tip; Last edited by Paxton, November 11, 1982 8:30 am
-- keep ReadonlyTioga.tip up to date when you change this!

OPTIONS
	Fast,
	PrintKeys;

-- miscellaneous macro definitions

[DEF,ClickTime,(200)]

[DEF,DownClick,(~1 Down BEFORE [ClickTime])]

[DEF,UpClick,(~1 Up BEFORE [ClickTime])]

[DEF,Click,([UpClick,~1] AND [DownClick,~1])]

[DEF,BothUp,(~1 Up WHILE ~2 Up)]

[DEF,FourUp,(~1 Up WHILE ~2 Up WHILE ~3 Up WHILE ~4 Up)]
      
[DEF,WhileSixUp,
	(WHILE ~1 Up WHILE ~2 Up WHILE ~3 Up WHILE ~4 Up WHILE ~5 Up WHILE ~6 Up)]

[DEF,CTRL,(Ctrl Down | Spare3 Down)]

[DEF,SHIFT,(LeftShift Down | RightShift Down)]

[DEF,IfShift,(SELECT ENABLE FROM
	[SHIFT] => ~1;
	ENDCASE => ~2)]

[DEF,IfCtrl,(SELECT ENABLE FROM
	[CTRL] => ~1;
	ENDCASE => ~2)]


SELECT TRIGGER FROM -- top level trigger select

-- mouse buttons and mouse movement

  [DEF,Sel,(SELECT ENABLE FROM
  	  [CTRL] => [IfShift,
  	  	{ ~2 Coords SelSecondary ToPrimary SelPendDel ~1 },
  	  	{ ~2 Coords ToLimbo SelPendDel ~1 }];
      [SHIFT] => { ~2 Coords SelSecondary ToPrimary SelNotPendDel ~1 };
      ENDCASE => { ~2 Coords SelNotPendDel ~1 })]

  [DEF,ClickSel,(SELECT ENABLE FROM
      [SHIFT] WHILE Ctrl Up WHILE Spare3 Up => [Sel,~1,~2 ForceSelNotPendDel];
      ENDCASE => [Sel,~1,~2])]
  
  [DEF,MouseClick,(SELECT TRIGGER FROM
      [Click,~1] => [ClickSel,~3,~1Mouse];
      ENDCASE => [ClickSel,~2,~1Mouse])]
    
  Red Down => [MouseClick,Red,SelChar,SelNode];
  
  Yellow Down => SELECT ENABLE FROM
    Red Up => [MouseClick,Yellow,SelWord,SelBranch];
    ENDCASE;
  
  [DEF,Extend,(
    [IfShift,[Sel,~1 SelStartExtend,BlueMouse],[Sel,~1 SelStartExtend,BlueMouse ForceSelPendDel]])]
  
  Blue Down => SELECT ENABLE FROM
    [BothUp,Red,Yellow] => SELECT TRIGGER FROM
      [Click,Blue] => SELECT TRIGGER FROM
         [Click,Blue] => [Extend,SelExpand];
         ENDCASE => [Extend,SelReduce];
      ENDCASE => [Extend];
    ENDCASE;
  
  Mouse => SELECT ENABLE FROM
      Red Down => [Sel,SelUpdate];
      Yellow Down => [Sel,SelUpdate];
      Blue Down => { Coords SelExtend };
      ENDCASE;

  [DEF,ButtonUp,(SELECT ENABLE FROM
    [FourUp,LeftShift,RightShift,Ctrl,Spare3] WHILE [BothUp,~1,~2] => SELECT ENABLE FROM
    	ESC Down => Repeat;
    	ENDCASE => DoEdit;
     ENDCASE)]
	  
  Red Up => SELECT ENABLE FROM
	Blue Down => [Extend,ForceSelPendDel];
	ENDCASE => [ButtonUp,Blue,Yellow];

  Yellow Up =>  SELECT ENABLE FROM
	Blue Down WHILE Red Up => [Extend,ForceSelPendDel];
	ENDCASE => [ButtonUp,Red,Blue];

  Blue Up => [ButtonUp,Red,Yellow];


-- Shift key Commands

  LeftShift Up [WhileSixUp,Red,Yellow,Blue,Ctrl,Spare3,RightShift] => DoEdit;
  
  RightShift Up [WhileSixUp,Red,Yellow,Blue,Ctrl,Spare3,LeftShift] => DoEdit;
  
  Ctrl Up [WhileSixUp,LeftShift,Red,Yellow,Blue,Spare3,RightShift] => DoEdit;

  Spare3 Up [WhileSixUp,LeftShift,Red,Yellow,Blue,Ctrl,RightShift] => DoEdit;


-- Function key Commands

  BS Down => [IfCtrl,
      [IfShift,{ 1 DeleteNextWord },{ 1 BackWord }],
      [IfShift,{ 1 DeleteNextChar },{ 1 BackSpace }]];
  
  Spare2 Down => [IfCtrl,
  	[IfShift,{ IntermediateUser CtrlPrevPlaceholder },{ IntermediateUser CtrlNextPlaceholder }],
  	[IfShift,{ IntermediateUser PreviousPlaceholder },{ IntermediateUser NextPlaceholder }]];

  ESC Down WHILE Ctrl Up WHILE Spare3 Up => [IfShift,Undo,Repeat];
  
  LF Down => [IfCtrl,
  	  { IntermediateUser AnonymousLoadImpl },
  	  { IntermediateUser AnonymousLoad }];
  	  
  DEL Down => SELECT ENABLE FROM
      [SHIFT] => EditAbort;
      [CTRL] => EditAbort;
      Red Down => EditAbort;
      Yellow Down => EditAbort;
      Blue Down => EditAbort;
      ENDCASE => Delete;
      
  Space Down WHILE BW Down => SELECT TRIGGER FROM
      [Click,Space] => ClearCaretLooks;
      ENDCASE => ClearLooks;


-- Number Commands

  [DEF,Num,(~1 Down => SELECT ENABLE FROM
      ~3
      [CTRL] => { IntermediateUser Command~2 };
      ENDCASE)]

  [Num,Zero,0, [SHIFT] WHILE [CTRL] => { IntermediateUser SelectMatchingParens };];
  [Num,One,1, [SHIFT] WHILE [CTRL] => { AdvancedUser ReadProfile };];
  [Num,Two,2];
  [Num,Three,3];
  [Num,Four,4];
  [Num,Five,5];
  [Num,Six,6];
  [Num,Seven,7];
  [Num,Eight,8];
  [Num,Nine,9, [SHIFT] WHILE [CTRL] => { IntermediateUser ParenBrackets };];
  
  
-- Punctuation Commands

  Return Down => SELECT ENABLE FROM
  	[SHIFT] => Char;
  	ENDCASE => [IfCtrl,{ AdvancedUser Break }, InsertLineBreak];

  Arrow Down WHILE [CTRL] =>
  	[IfShift,{ AdvancedUser GetType }, {AdvancedUser SetType }];

  BackSlash Down WHILE [CTRL] => 
	 [IfShift,{ AdvancedUser SetNotComment },{ AdvancedUser SetComment }];

  Dash Down WHILE [CTRL] => { IntermediateUser DashBrackets };

  Comma Down WHILE [SHIFT] WHILE [CTRL] =>
  	{ IntermediateUser AngleBrackets };

  Period Down WHILE [SHIFT] WHILE [CTRL] =>
  	{ IntermediateUser SelectMatchingAngleBrackets };
  
  Quote Down WHILE [CTRL] =>
  	[IfShift,{ IntermediateUser DoubleQuoteBrackets },{ IntermediateUser SingleQuoteBrackets }];
  
  LeftBracket Down WHILE [CTRL] => 
  	[IfShift,{ IntermediateUser CurlyBrackets },{ IntermediateUser SquareBrackets }];
   
  RightBracket Down WHILE [CTRL] => 
  	[IfShift,{ IntermediateUser SelectMatchingCurlyBrackets },
  		{ IntermediateUser SelectMatchingSquareBrackets }];
  
  
 -- Letter Commands

  [DEF,Letter,(
  ~1 Down => SELECT ENABLE FROM
      BW Down => SELECT TRIGGER FROM
          [Click,~1] => [IfShift,{ ~2 RemoveCaretLook },{ ~2 ApplyCaretLook }];
          ENDCASE => [IfShift,{ ~2 RemoveLook },{ ~2 ApplyLook }];
      ~3
      ENDCASE)]
  
  [Letter,A,0,
    [CTRL] => [IfShift,{ IntermediateUser 1 DeleteNextChar },{ 1 BackSpace }]];
  [Letter,B,1,
    [CTRL] => { IntermediateUser PlaceholderBrackets }];
  [Letter,C,2,
    [CTRL] => SELECT TRIGGER FROM
      [Click,C] => [IfShift,{ IntermediateUser InitialCaps },{ IntermediateUser FirstCap }];
      ENDCASE => [IfShift,{ IntermediateUser AllCaps },{ IntermediateUser AllLower }]];
  [Letter,D,3,
    [CTRL] => { IntermediateUser Everything }];
  [Letter,E,4,
    [CTRL] => { IntermediateUser ExpandAbbrev }];
  [Letter,F,5,
  	[CTRL] => { AdvancedUser ToPrimary SelSecondary SelNotPendDel EditType }];
  [Letter,G,6];
  [Letter,H,7,
    [CTRL] => [IfShift,{ IntermediateUser 1 DeleteNextChar },{ 1 BackSpace }]];
  [Letter,I,8,
    [CTRL] => [IfShift,{ AdvancedUser Break UnNest },{ AdvancedUser Break Nest }]];
  [Letter,J,9,
    [CTRL] => { AdvancedUser Join }];
  [Letter,K,10,
    [CTRL] => [IfShift,{ IntermediateUser UnMakeControlCharacter },
    	{ IntermediateUser MakeControlCharacter }]];
  [Letter,L,11];
  [Letter,M,12,
    [CTRL] => { IntermediateUser SetMesaLooks }];
  [Letter,N,13,
    [CTRL] => [IfShift,{ AdvancedUser UnNest },{ AdvancedUser Nest }]];
  [Letter,O,14,
    [CTRL] => [IfShift,{ IntermediateUser UnMakeOctalCharacter },
    	{ IntermediateUser MakeOctalCharacter }]];
  [Letter,P,15,
  	[CTRL] => { IntermediateUser Paste }];
  [Letter,Q,16,
    [CTRL] => { IntermediateUser ToPrimary SelSecondary SelNotPendDel EditLooks }];
  [Letter,R,17];
  [Letter,S,18,	-- copy primary
    [CTRL] => { IntermediateUser MakeNotPendingDelete ToSecondary SelSecondary SelNotPendDel }];
  [Letter,T,19,
    [CTRL] => { IntermediateUser Time }]; 
  [Letter,U,20];
  [Letter,V,21,
    [CTRL] => { IntermediateUser GrowSelectionToBlanks }];
  [Letter,W,22,
    [CTRL] => [IfShift,{ IntermediateUser 1 DeleteNextWord },{ 1 BackWord }]];
  [Letter,X,23,	-- transpose
    [CTRL] => { IntermediateUser ToBoth SelSecondary SelNotPendDel }];
  [Letter,Y,24];
  [Letter,Z,25,	-- move primary
    [CTRL] => { IntermediateUser MakePendingDelete ToSecondary SelSecondary SelNotPendDel }];
    
ENDCASE...