]> asedeno.scripts.mit.edu Git - pssh.git/commitdiff
My 2006-07-10 release.
authorAlejandro R. Sedeño <asedeno@mit.edu>
Sun, 18 Mar 2007 18:37:24 +0000 (18:37 +0000)
committerAlejandro R. Sedeño <asedeno@mit.edu>
Sun, 18 Mar 2007 18:37:24 +0000 (18:37 +0000)
Pulling in some binary files:
* libc.a   (Greg Parker's site)
* libgcc.a (Greg Parker's site)

Updating the arm Makefile to know where the above files are.

Added jhutz's alt-chars patch. Press alt and you get a new keymap.
Open up your favorite text editor and experiment, or read the source,
to get the keymap.

arm/Makefile
arm/util/includes.h
arm/util/stdint.h [new file with mode: 0644]
external-libs/libc.a [new file with mode: 0644]
external-libs/libgcc.a [new file with mode: 0644]
forms/terminalform.c
forms/terminalform.h
rsrc/fnav03e8.bin [new file with mode: 0644]
rsrc/pssh.rcp
rsrc/rsrc.h

index 4cd439d11751c27a725b2e28846717c842daea1d..4afaf1d0cdd3433a2d1f51f1042edfdab0770516 100644 (file)
@@ -8,8 +8,8 @@ OPTIMIZATION = -Os
 WARNINGS = -W -Wall -Wmissing-declarations -Wmissing-prototypes -Wpointer-arith -Wno-multichar
 
 # libc and libgcc (must be either ARM with thumb-interwork, or Thumb)
-LIBC = ../../libc.a
-LIBGCC = ../../libgcc.a
+LIBC = ../external-libs/libc.a
+LIBGCC = ../external-libs/libgcc.a
 
 # Peal
 PEAL = ../../peal
@@ -84,7 +84,7 @@ pssh-arm-prelink: $(PEAL_FILES) $(OBJDIRS) $(OBJECTS) $(LIBC) $(LIBGCC)
 
 define compile
        arm-palmos-gcc -fPIC -mthumb -msingle-pic-base $(OPTIMIZATION) $(WARNINGS) \
-          -I. -Iutil $(addprefix -I,$1) \
+          -I. -Iutil -I/usr/lib/gcc-lib/arm-palmos/3.3.1/include/ $(addprefix -I,$1) \
           -c $2 -o $3
 endef
 
index f4b9fcae3279ab0357ad44c618f11188f38264c6..0d23c0da6b76010174e630303bd1e6f6448a2d22 100644 (file)
@@ -25,7 +25,7 @@
 #ifndef INCLUDES_H
 #define INCLUDES_H
 
-#include <stdint.h>
+#include "stdint.h"
 #include <stddef.h>
 #include <stdarg.h>
 
diff --git a/arm/util/stdint.h b/arm/util/stdint.h
new file mode 100644 (file)
index 0000000..92024af
--- /dev/null
@@ -0,0 +1,131 @@
+/* stdint.h: ISO/IEC 9899:1999  7.18  Integer types.
+
+   Placed in the public domain by John Marshall.
+
+   This file is part of prc-tools, but is not licensed in the same way as the
+   majority of prc-tools.  The contents of this file are in the public domain.
+
+   One particular consequence of this is that you may use this header file
+   in Palm OS executables without concern that doing so by itself causes
+   the resulting executable to be covered by any particular license, such as
+   the GNU General Public License that covers much of the rest of prc-tools.
+   However this does not invalidate any other reasons why the executable
+   might be covered by such a license (such as the use of functions from
+   other header files that are so-covered).  */
+
+#ifndef _PRC_TOOLS_STDINT_H
+#define _PRC_TOOLS_STDINT_H
+
+/* 7.18.1  Integer types.  */
+
+typedef   signed char           int8_t,   int_least8_t,   int_fast8_t;
+typedef unsigned char          uint8_t,  uint_least8_t,  uint_fast8_t;
+typedef   signed short int      int16_t,  int_least16_t;
+typedef unsigned short int     uint16_t, uint_least16_t;
+typedef   signed int                                      int_fast16_t;
+typedef unsigned int                                     uint_fast16_t;
+typedef   signed long int       int32_t,  int_least32_t,  int_fast32_t;
+typedef unsigned long int      uint32_t, uint_least32_t, uint_fast32_t;
+typedef   signed long long int  int64_t,  int_least64_t,  int_fast64_t;
+typedef unsigned long long int uint64_t, uint_least64_t, uint_fast64_t;
+
+typedef   signed long int       intptr_t;
+typedef unsigned long int      uintptr_t;
+
+typedef   signed long long int  intmax_t;
+typedef unsigned long long int uintmax_t;
+
+/* 7.18.2  Limits of specified-width integer types.  */
+
+#if !defined __cplusplus || defined __STDC_LIMIT_MACROS
+
+#define  INT8_MIN              (-128)
+#define  INT8_MAX              (+127)
+#define UINT8_MAX              (+255)
+
+#define  INT16_MIN             (-32767 - 1)
+#define  INT16_MAX             (+32767)
+#define UINT16_MAX             (+65535U)
+
+#define  INT32_MIN             (-2147483647L - 1)
+#define  INT32_MAX             (+2147483647L)
+#define UINT32_MAX             (+4294967295UL)
+
+#define  INT64_MIN             (-9223372036854775807LL - 1)
+#define  INT64_MAX             (+9223372036854775807LL)
+#define UINT64_MAX             (+18446744073709551615ULL)
+
+#define  INT_LEAST8_MIN                 INT8_MIN
+#define  INT_LEAST8_MAX                 INT8_MAX
+#define UINT_LEAST8_MAX                UINT8_MAX
+
+#define  INT_LEAST16_MIN        INT16_MIN
+#define  INT_LEAST16_MAX        INT16_MAX
+#define UINT_LEAST16_MAX       UINT16_MAX
+
+#define  INT_LEAST32_MIN        INT32_MIN
+#define  INT_LEAST32_MAX        INT32_MAX
+#define UINT_LEAST32_MAX       UINT32_MAX
+
+#define  INT_LEAST64_MIN        INT64_MIN
+#define  INT_LEAST64_MAX        INT64_MAX
+#define UINT_LEAST64_MAX       UINT64_MAX
+
+#define  INT_FAST8_MIN          INT8_MIN
+#define  INT_FAST8_MAX          INT8_MAX
+#define UINT_FAST8_MAX         UINT8_MAX
+
+#if __INT_MAX__ == 32767
+#define  INT_FAST16_MIN                 INT16_MIN
+#define  INT_FAST16_MAX                 INT16_MAX
+#define UINT_FAST16_MAX                UINT16_MAX
+#else
+#define  INT_FAST16_MIN                 INT32_MIN
+#define  INT_FAST16_MAX                 INT32_MAX
+#define UINT_FAST16_MAX                UINT32_MAX
+#endif
+
+#define  INT_FAST32_MIN                 INT32_MIN
+#define  INT_FAST32_MAX                 INT32_MAX
+#define UINT_FAST32_MAX                UINT32_MAX
+
+#define  INT_FAST64_MIN                 INT64_MIN
+#define  INT_FAST64_MAX                 INT64_MAX
+#define UINT_FAST64_MAX                UINT64_MAX
+
+#define  INTPTR_MIN             INT32_MIN
+#define  INTPTR_MAX             INT32_MAX
+#define UINTPTR_MAX            UINT32_MAX
+
+#define  INTMAX_MIN             INT64_MIN
+#define  INTMAX_MAX             INT64_MAX
+#define UINTMAX_MAX            UINT64_MAX
+
+/* 7.18.3  Limits of other integer types [no sig_atomic_t, wchar_t, wint_t].  */
+
+#define PTRDIFF_MIN             INT32_MIN
+#define PTRDIFF_MAX             INT32_MAX
+
+#define SIZE_MAX               UINT32_MAX
+
+#endif
+
+/* 7.18.4  Macros for integer constants.  */
+
+#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
+
+#define  INT8_C(n)     n
+#define UINT8_C(n)     n ## U
+#define  INT16_C(n)    n
+#define UINT16_C(n)    n ## U
+#define  INT32_C(n)    n ##  L
+#define UINT32_C(n)    n ## UL
+#define  INT64_C(n)    n ##  LL
+#define UINT64_C(n)    n ## ULL
+
+#define  INTMAX_C(n)   n ##  LL
+#define UINTMAX_C(n)   n ## ULL
+
+#endif
+
+#endif
diff --git a/external-libs/libc.a b/external-libs/libc.a
new file mode 100644 (file)
index 0000000..f04c628
Binary files /dev/null and b/external-libs/libc.a differ
diff --git a/external-libs/libgcc.a b/external-libs/libgcc.a
new file mode 100644 (file)
index 0000000..20e2c69
Binary files /dev/null and b/external-libs/libgcc.a differ
index db0b2814254fa9805a7dcd6bc32139ca60860450..73f3a8d2cf768adc7fdd813172b8229faf411050 100644 (file)
@@ -891,7 +891,52 @@ static void SetKeyboard(keyboard_t newKeyboard)
     FrmDrawForm(FrmGetActiveForm());
 }
 
-
+static unsigned char altsym_symbol_map[32] = {
+    /* SP */ ' ',     /* !  */ '|',     /* "  */ '~',     /* #  */ '{',
+    /* $  */ '%',     /* %  */ '%',     /* &  */ '&',     /* '  */ '`',
+    /* (  */ '[',     /* )  */ ']',     /* *  */ '^',     /* +  */ '=',
+    /* ,  */ '<',     /* -  */ '_',     /* .  */ '>',     /* /  */ '\\',
+    /* 0  */ ')',     /* 1  */ '!',     /* 2  */ '@',     /* 3  */ '#',
+    /* 4  */ '$',     /* 5  */ '%',     /* 6  */ '^',     /* 7  */ '&',
+    /* 8  */ '*',     /* 9  */ '(',     /* :  */ ';',     /* ;  */ ':',
+    /* <  */ ',',     /* =  */ '+',     /* >  */ '.',     /* ?  */ '}'
+};
+
+static unsigned char altsym_treo_map[26] = {
+    /* A */ '&',   /* B */ '{',   /* C */ '*',   /* D */ '$',   /* E */ '!',
+    /* F */ '%',   /* G */ '^',   /* H */ '%',   /* I */ '&',   /* J */ '|',
+    /* K */ ';',   /* L */ '`',   /* M */ '<',   /* N */ '}',   /* O */ '~',
+    /* P */ '%',   /* Q */ '\\',  /* R */ '@',   /* S */ '_',   /* T */ '#',
+    /* U */ ']',   /* V */ '(',   /* W */ '=',   /* X */ '&',   /* Y */ '[',
+    /* Z */ '^'
+};
+
+static unsigned char altsym_tungsten_map[26] = {
+    /* A */ ';',   /* B */ '|',   /* C */ ']',   /* D */ '=',   /* E */ '#',
+    /* F */ '_',   /* G */ '^',   /* H */ '-',   /* I */ '*',   /* J */ '~',
+    /* K */ '`',   /* L */ '&',   /* M */ '}',   /* N */ '<',   /* O */ '(',
+    /* P */ ')',   /* Q */ '!',   /* R */ '$',   /* S */ '\\',  /* T */ '%',
+    /* U */ '&',   /* V */ '{',   /* W */ '@',   /* X */ '[',   /* Y */ '^',
+    /* Z */ '%'
+
+};
+
+static unsigned char altsym_character(unsigned char c)
+{
+    if (c == '@') return '&';
+    if (c == '_') return '-';
+    if (c >= 0x20 && c < 0x40) return altsym_symbol_map[c - 0x20];
+    if (deviceTreo6x0) {
+        if (c >= 'A' && c <= 'Z') return altsym_treo_map[c - 'A'];
+        if (c >= 'a' && c <= 'z') return altsym_treo_map[c - 'a'];
+    } else {
+        // for now, use tungsten layout on all but treo
+        // note there is currently no way to get altPressed on the tungsten
+        if (c >= 'A' && c <= 'Z') return altsym_tungsten_map[c - 'A'];
+        if (c >= 'a' && c <= 'z') return altsym_tungsten_map[c - 'a'];
+    }
+    return c;
+}
 
 static unsigned char control_character(unsigned char c)
 {
@@ -903,15 +948,41 @@ static unsigned char control_character(unsigned char c)
     return c;
 }
 
+static struct {
+    Boolean pressed;  // active - affects characters
+    Boolean locked;   // locked - does not reset on keypress
+    int gsiState;     // indicator to display - 0=off, 1=down, 2=lock
+    int onPress;      // new state if button is pressed
+    int onRelease;    // new state if button is released
+} altStateTable[] = {
+    { 0, 0, 0, 1, 0 }, // state 0 - clear
+    { 1, 1, 1, 7, 3 }, // state 1 - held
+    { 1, 1, 1, 1, 0 }, // state 2 - held+
+    { 1, 0, 1, 4, 3 }, // state 3 - set
+    { 1, 1, 1, 6, 5 }, // state 4 - held set
+    { 1, 1, 2, 6, 5 }, // state 5 - locked
+    { 1, 1, 1, 0, 0 }, // state 6 - locked held
+    { 1, 1, 2, 0, 0 }, // state 7 - double-press
+    { 0, 0, 0, 1, 8 }, // state 8 - locked, masked by graffiti
+};
+#define NUM_ALTSTATES (sizeof(altStateTable)/sizeof(altStateTable[0]))
+
 // ctrl or shift locked down (i.e. don't release after sending a key)
 static Boolean ctrlLocked = 0;
 static Boolean shiftLocked = 0;
 
+static Boolean altPressed = 0;
+static Boolean altLocked = 0;
+static int altState = 0;
+static Boolean altSavedCapsLock = 0;
+static Boolean altSavedNumLock = 0;
+
 static Boolean jogPressed = 0;
 static Boolean jogPressedCtrl = 0;
 static Boolean jogPressedMeta = 0;
 static Boolean keyPressedDuringJogPress = 0;
 static Boolean jogMovedDuringJogPress = 0;
+static Boolean scrollByPage = 0;
 
 
 static Boolean CtrlPressed(void)
@@ -942,6 +1013,62 @@ static void ShiftPress(Boolean down, Boolean lockDown)
     else shiftLocked = 0;
 }
 
+static void AltSetState(int newstate)
+{
+    UInt16 tst;
+    Boolean ast;
+
+    if (newstate < 0 || newstate > NUM_ALTSTATES) return;
+
+    altPressed = altStateTable[newstate].pressed;
+    altLocked  = altStateTable[newstate].locked;
+    if (altStateTable[newstate].gsiState != altStateTable[altState].gsiState) {
+        switch (altStateTable[newstate].gsiState) {
+            case 0: // not active; display GSI
+                GrfSetState(altSavedCapsLock, altSavedNumLock, 0);
+               if (PrvObjectVisibleByID(TerminalCtrlButtonID))
+               {
+                    PrvHideObjectByID(TerminalAltPressedBitmapID);
+                    PrvHideObjectByID(TerminalAltLockedBitmapID);
+               }
+                GsiEnable(1);
+                break;
+
+            case 1: // active
+                GrfGetState(&altSavedCapsLock, &altSavedNumLock, &tst, &ast);
+                GrfSetState(0, 0, 0);
+                GsiEnable(0);
+               if (PrvObjectVisibleByID(TerminalCtrlButtonID))
+               {
+                    PrvHideObjectByID(TerminalAltLockedBitmapID);
+                    PrvShowObjectByID(TerminalAltPressedBitmapID);
+               }
+                break;
+
+            case 2: // locked
+                altSavedCapsLock = altSavedNumLock = 0;
+                GrfSetState(0, 0, 0);
+                GsiEnable(0);
+               if (PrvObjectVisibleByID(TerminalCtrlButtonID))
+               {
+                    PrvHideObjectByID(TerminalAltPressedBitmapID);
+                    PrvShowObjectByID(TerminalAltLockedBitmapID);
+               }
+                break;
+        }
+    }
+
+    altState  = newstate;
+}
+    
+static void AltPress(Boolean down)
+{
+    if (down)
+        AltSetState(altStateTable[altState].onPress);
+    else
+        AltSetState(altStateTable[altState].onRelease);
+}
+
 static void MetaPress(Boolean down, Boolean lockDown)
 {
     // nothing here yet
@@ -967,6 +1094,10 @@ static void ClearModifiers(void)
     if (!shiftLocked && !PrvGetControlValue(TerminalTABCCapsButtonID)) {
         ShiftPress(0, 0);
     }
+    if (altState == 1)
+        AltSetState(2);
+    else if (!altLocked && altState != 8)
+        AltSetState(0);
 }
 
 
@@ -1447,11 +1578,16 @@ Boolean TerminalFormHandleEvent(EventPtr e)
         titleShown = true;
         ctrlLocked = 0;
         shiftLocked = 0;
+        altPressed = 0;
+        altLocked = 0;
+        altState = 0;
+        altSavedCapsLock = altSavedNumLock = 0;
         jogPressed = 0;
         jogPressedCtrl = 0;
         jogPressedMeta = 0;
         keyPressedDuringJogPress = 0;
         jogMovedDuringJogPress = 0;
+        scrollByPage = 0;
 
         // check for device-specific hacks and features
         CheckDevice();
@@ -1461,6 +1597,10 @@ Boolean TerminalFormHandleEvent(EventPtr e)
                             PrvGetObjectIndexByID(TerminalTextGadgetID), 
                             VT100EventHandler);
         SetTitleBar(! PrefsGetInt(prefHideTitleBar, 0));
+       
+        PrvHideObjectByID(TerminalAltPressedBitmapID);
+        PrvHideObjectByID(TerminalAltLockedBitmapID);
+        GsiEnable(1);
 
         {
             int top = PrefsGetInt(prefTopPane, topNone);
@@ -1609,6 +1749,8 @@ Boolean TerminalFormHandleEvent(EventPtr e)
             if (c == 10) c = 13;
             // remap DEL or BS based on backspace configuration
             if (c == 8  ||  c == 127) c = Backspace();
+            if (altPressed) c = altsym_character(c);
+
             // remap ` based on backquote configuration
             if (c == '`') c = Backquote();
 
@@ -1668,7 +1810,37 @@ Boolean TerminalFormHandleEvent(EventPtr e)
             }
             return true;
         }
-        else if (chr == vchrThumbWheelUp  ||  chr == vchrJogUp) {
+        else if (chr == 0x1609 &&
+                 !(e->data.keyDown.modifiers & autoRepeatKeyMask)) {
+            AltPress(1);
+            return true;
+        }
+        else if (chr == 0x161b) {
+            // Treo volume up -> scroll up
+            if (ss) {
+                if (scrollByPage)
+                    ssh_scroll(ss, -(ssh_visible_height(ss)-1));
+                else
+                    ssh_scroll(ss, -1);
+            }
+            return true;
+        }
+        else if (chr == 0x161c) {
+            // Treo volume down -> scroll down
+            if (ss) {
+                if (scrollByPage)
+                    ssh_scroll(ss, (ssh_visible_height(ss)-1));
+                else
+                    ssh_scroll(ss, 1);
+            }
+            return true;
+        }
+        else if (chr == 0x161f) {
+            // Treo side button -> toggle scroll mode
+            scrollByPage = !scrollByPage;
+            return true;
+        }
+       else if (chr == vchrThumbWheelUp  ||  chr == vchrJogUp) {
             // scroll up (fixme how far?)
             if (ss) ssh_scroll(ss, -1);
             return true;
@@ -1774,6 +1946,23 @@ Boolean TerminalFormHandleEvent(EventPtr e)
         return false;
     }
 
+    case keyHoldEvent:
+        if (e->data.keyHold.chr == 0x1609) {
+            // Treo alt key, held down
+            if (altState == 1)
+                AltSetState(2);
+            return true;
+        }
+        return false;
+
+    case keyUpEvent:
+        if (e->data.keyUp.chr == 0x1609) {
+            // Treo alt key, released
+            AltPress(0);
+            return true;
+        }
+        return false;
+        
     case winExitEvent:
         if ((FormPtr)e->data.winExit.exitWindow == 
             FrmGetFormPtr(TerminalFormID))
@@ -1821,6 +2010,9 @@ Boolean TerminalFormHandleEvent(EventPtr e)
 
 static Boolean IsStealableVchr(EventPtr e)
 {
+    if (e->data.keyDown.chr == 0x1609) return true; // treo alt
+    if (e->data.keyDown.chr == 0x161b) return true; // volume up
+    if (e->data.keyDown.chr == 0x161c) return true; // volume down
     if (e->data.keyDown.chr == vchrKeyboard) return true;
     if (e->data.keyDown.chr == vchrKeyboardAlpha) return true;
     if (e->data.keyDown.chr == vchrKeyboardNumeric) return true;
@@ -1837,6 +2029,7 @@ static Boolean IsStealableVchr(EventPtr e)
 
 // Terminal form wants to catch some key events before the system uses them:
 // - keyboard vchrs to display its own keyboard
+// - Treo alt key for second symbol shift level
 // - Sony jog wheel and Treo 5-way vchrs
 Boolean TerminalFormStealEvent(EventPtr e)
 {
@@ -1844,6 +2037,90 @@ Boolean TerminalFormStealEvent(EventPtr e)
     if (FrmGetActiveFormID() != TerminalFormID) return false;
     if (e->eType != keyDownEvent) return false;
 
+    // Special processing per event type
+    switch (e->eType) {
+        case keyDownEvent:
+            // keycode debugging
+            if (TerminalWindowActive) {
+                FieldPtr displayField;
+                char keytext[40];
+                Boolean caps, num, autoshift;
+                UInt16 shift;
+
+                GrfGetState(&caps, &num, &shift, &autoshift);
+                sprintf(keytext, "+c:%04x k:%04x m:%04x %s%s%s%d",
+                        e->data.keyDown.chr, e->data.keyDown.keyCode,
+                        e->data.keyDown.modifiers,
+                        caps ? "C" : "-", num ? "N" : "-",
+                        autoshift ? "N" : "-", shift);
+
+                displayField = PrvGetObjectByID(TerminalHostFieldID);
+                PrvSetFieldToValue(displayField, keytext);
+                FldDrawField(displayField);
+            }
+
+            // any keyboard modifier press turns off alt
+            if (e->data.keyDown.chr == 0x160d) {
+                if (altState == 5 || altState == 8)
+                    AltSetState(8);
+                else
+                    AltSetState(0);
+            }
+
+            // steal some key-down events for the form event handler
+            break;
+
+        case keyHoldEvent:
+            // keycode debugging
+            if (TerminalWindowActive) {
+                FieldPtr displayField;
+                char keytext[40];
+                Boolean caps, num, autoshift;
+                UInt16 shift;
+
+                GrfGetState(&caps, &num, &shift, &autoshift);
+                sprintf(keytext, "*c:%04x k:%04x m:%04x %s%s%s%d",
+                        e->data.keyDown.chr, e->data.keyDown.keyCode,
+                        e->data.keyDown.modifiers,
+                        caps ? "C" : "-", num ? "N" : "-",
+                        autoshift ? "N" : "-", shift);
+
+                displayField = PrvGetObjectByID(TerminalHostFieldID);
+                PrvSetFieldToValue(displayField, keytext);
+                FldDrawField(displayField);
+            }
+
+            // steal some key-hold events for the form event handler
+            break;
+
+        case keyUpEvent:
+            // keycode debugging
+            if (TerminalWindowActive) {
+                FieldPtr displayField;
+                char keytext[40];
+                Boolean caps, num, autoshift;
+                UInt16 shift;
+
+                GrfGetState(&caps, &num, &shift, &autoshift);
+                sprintf(keytext, "-c:%04x k:%04x m:%04x %s%s%s%d",
+                        e->data.keyUp.chr, e->data.keyUp.keyCode,
+                        e->data.keyUp.modifiers,
+                        caps ? "C" : "-", num ? "N" : "-",
+                        autoshift ? "N" : "-", shift);
+
+                displayField = PrvGetObjectByID(TerminalHostFieldID);
+                PrvSetFieldToValue(displayField, keytext);
+                FldDrawField(displayField);
+            }
+
+            // steal some key-up events for the form event handler
+            break;
+
+        default:
+            // don't steal other events
+            return false;
+    }
+
     // steal some virtual chars anytime
     if (EvtKeydownIsVirtual(e)  &&  IsStealableVchr(e)) return true;
 
@@ -1851,6 +2128,32 @@ Boolean TerminalFormStealEvent(EventPtr e)
     return false;
 }
 
+// Special handling _after_ an event is processed
+void TerminalFormPostEvent(EventPtr e)
+{
+    // don't process if terminal is not active
+    if (FrmGetActiveFormID() != TerminalFormID) return;
+
+    // Special processing per event type
+    switch (e->eType) {
+        case keyUpEvent:
+            // if a keyboard modifier was released, update alt state
+            if (e->data.keyDown.chr == 0x160d) {
+                Boolean caps, num, autoshift;
+                UInt16 shift;
+
+                GrfGetState(&caps, &num, &shift, &autoshift);
+                if (caps || num) {
+                    // any lock state resets saved alt lock
+                    AltSetState(0);
+                } else if (altState == 8 && !shift) {
+                    // no modifiers still down; restore alt lock state
+                    AltSetState(5);
+                }
+            }
+        default:
+    }
+}
 
 // Resize the terminal form 
 void TerminalFormResize(FormPtr frmP, Int16 dh, Int16 dv) 
index 9b72476a834bcc91cbf9346aaf631c7825a74bf0..16dc40c18d256ce05984fa4e5c980a0c76a272ec 100644 (file)
@@ -29,6 +29,7 @@
 
 Boolean TerminalFormHandleEvent(EventPtr e) FORMS_SEGMENT;
 Boolean TerminalFormStealEvent(EventPtr e) FORMS_SEGMENT;
+void TerminalFormPostEvent(EventPtr e) FORMS_SEGMENT;
 void TerminalFormResize(FormPtr frmP, Int16 dh, Int16 dv) FORMS_SEGMENT;
 
 #endif
diff --git a/rsrc/fnav03e8.bin b/rsrc/fnav03e8.bin
new file mode 100644 (file)
index 0000000..3e735bd
Binary files /dev/null and b/rsrc/fnav03e8.bin differ
index c64612f95329df653971fc0796873d39994e8c7a..3ee7d6da3e70fd34278d1bba8ab7f3b3c34a4744 100755 (executable)
@@ -147,6 +147,17 @@ BEGIN
     BITMAP "pagedowndisabled.bmp" BPP 1 DENSITY 72\r
     BITMAP "pagedowndisabledhi.bmp" BPP 1 DENSITY 144\r
 END\r
+BITMAP ID TerminalAltPressedBitmapID COMPRESS\r
+BEGIN\r
+    BITMAP "closebox.bmp" BPP 1 DENSITY 72\r
+    BITMAP "closeboxhi.bmp" BPP 1 DENSITY 144\r
+END\r
+\r
+BITMAP ID TerminalAltLockedBitmapID COMPRESS\r
+BEGIN\r
+    BITMAP "closeboxselected.bmp" BPP 1 DENSITY 72\r
+    BITMAP "closeboxselectedhi.bmp" BPP 1 DENSITY 144\r
+END\r
 \r
 DATA "nfnt" ID NanoFontDoubleID "nano.font"\r
 DATA "nfnt" ID NanoFontSingleID "nanosingle.font"\r
@@ -224,7 +235,7 @@ BEGIN
     GRAFFITISTATEINDICATOR AT (142 84)\r
 END\r
 \r
-\r
+DATA "fnav" ID MainFormID "fnav03e8.bin"\r
 FORM ID MainFormID AT (0 0 160 160)\r
 USABLE\r
 MENUID MainMenuBar\r
@@ -264,6 +275,8 @@ BEGIN
 \r
     /* Graffiti indicator */\r
     GRAFFITISTATEINDICATOR AT (119 150)\r
+    FORMBITMAP AT (119 150) BITMAP TerminalAltPressedBitmapID\r
+    FORMBITMAP AT (119 150) BITMAP TerminalAltLockedBitmapID\r
 \r
     /* username@host  - this should be BEFORE text gadget*/\r
     FIELD ID TerminalHostFieldID AT (29 1 131 12) NONEDITABLE RIGHTALIGN MAXCHARS 80\r
index 13f5df3363f9888b1bfcf016a289fffbe6e33097..9b7ef8c8a1cab7a971e3c163f6e127bb5c66d9f6 100644 (file)
@@ -22,8 +22,8 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  **********/
 
-#define PSSH_VERSION "2005-06-23"
-#define PSSH_UVERSION "2005_06_23"
+#define PSSH_VERSION "2005-06-23-asedeno1"
+#define PSSH_UVERSION "2005_06_23-asedeno1"
 
 #define PSSH_CREATOR 'GPss'
 
@@ -85,6 +85,8 @@
 #define TerminalRScrollPageDownBitmapID 1211
 #define TerminalRScrollPageDownSelectedBitmapID 1212
 #define TerminalRScrollPageDownDisabledBitmapID 1213
+#define TerminalAltPressedBitmapID 1214
+#define TerminalAltLockedBitmapID 1215
 
 #define TerminalFormID 1300
 // 1300-1305 Controls present on all Terminal form flavors