]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Erm, major change at the moment is a new test case. You need a file called
authorBen Harris <bjh21@bjh21.me.uk>
Sun, 28 Feb 1999 17:05:11 +0000 (17:05 +0000)
committerBen Harris <bjh21@bjh21.me.uk>
Sun, 28 Feb 1999 17:05:11 +0000 (17:05 +0000)
'fragment' to build it, but its licence prevents me distributing it at present.
Now, about those scrolling optimisations...

[originally from svn r63]

mac.c
mac.h
mac_res.r
macterm.c

diff --git a/mac.c b/mac.c
index 25ac2ce9f5007f87c47ad82e0cf1903ad4acc2eb..d245512b8d0f2fc641351a245846c8f4c7ad80f9 100644 (file)
--- a/mac.c
+++ b/mac.c
@@ -1,4 +1,4 @@
-/* $Id: mac.c,v 1.1.2.8 1999/02/28 02:38:40 ben Exp $ */
+/* $Id: mac.c,v 1.1.2.9 1999/02/28 17:05:10 ben Exp $ */
 /*
  * mac.c -- miscellaneous Mac-specific routines
  */
@@ -29,8 +29,7 @@
 QDGlobals qd;
 
 static int cold = 1;
-long mac_qdversion;
-long mac_apprversion;
+struct mac_gestalts mac_gestalts;
 
 static void mac_startup(void);
 static void mac_eventloop(void);
@@ -73,17 +72,20 @@ static void mac_startup(void) {
     cold = 0;
     
     /* Find out if we've got Color Quickdraw */
-    if (Gestalt(gestaltQuickdrawVersion, &mac_qdversion) != noErr)
-       mac_qdversion = gestaltOriginalQD;
+    if (Gestalt(gestaltQuickdrawVersion, &mac_gestalts.qdvers) != noErr)
+       mac_gestalts.qdvers = gestaltOriginalQD;
     /* ... and the Appearance Manager? */
-    if (Gestalt(gestaltAppearanceVersion, &mac_apprversion) != noErr)
+    if (Gestalt(gestaltAppearanceVersion, &mac_gestalts.apprvers) != noErr)
        if (Gestalt(gestaltAppearanceAttr, NULL) == noErr)
-           mac_apprversion = 0x0100;
+           mac_gestalts.apprvers = 0x0100;
        else
-           mac_apprversion = 0;
+           mac_gestalts.apprvers = 0;
+    /* Mac OS 8.5 Control Manager (proportional scrollbars)? */
+    if (Gestalt(gestaltControlMgrAttr, &mac_gestalts.cntlattr) != noErr)
+       mac_gestalts.cntlattr = 0;
 
     /* We've been tested with the Appearance Manager */
-    if (mac_apprversion != 0)
+    if (mac_gestalts.apprvers != 0)
        RegisterAppearanceClient();
     
     menuBar = GetNewMBar(128);
diff --git a/mac.h b/mac.h
index ce1cef0ea75a8eaaf567120b242006ce1f4ed1a1..1f0839743e625298443407b5f5809b61f28c58b3 100644 (file)
--- a/mac.h
+++ b/mac.h
 
 extern long mac_qdversion;
 
+struct mac_gestalts {
+    long qdvers;
+    long apprvers;
+    long cntlattr;
+};
+
+extern struct mac_gestalts mac_gestalts;
+
 /* from macterm.c */
 extern void mac_newsession(void);
 extern void mac_activateterm(WindowPtr, Boolean);
index e9b8358210fd51457461084dd467af9e7eeb6bc3..c03261bbad0ab9b1b86972421574a117b1d38354 100644 (file)
--- a/mac_res.r
+++ b/mac_res.r
@@ -1,4 +1,30 @@
-/* $Id: mac_res.r,v 1.1.2.5 1999/02/28 02:38:40 ben Exp $ */
+/* $Id: mac_res.r,v 1.1.2.6 1999/02/28 17:05:11 ben Exp $ */
+/*
+ * Copyright (c) 1999 Ben Harris
+ * All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
 /* PuTTY resources */
 
 #include "Types.r"
@@ -590,3 +616,4 @@ resource 'pltt' (PREF_pltt, purgeable) {
     }
 };
 
+read 'pTST' (128, "test data", purgeable) "fragment";
index 54ab1b1e319faacb02e9e80cc168ff14546c6f27..fb9ce60b5f38181abb6aad4458c00e88c3b99a71 100644 (file)
--- a/macterm.c
+++ b/macterm.c
@@ -1,14 +1,43 @@
+/* $Id: macterm.c,v 1.1.2.8 1999/02/28 17:05:11 ben Exp $ */
+/*
+ * Copyright (c) 1999 Ben Harris
+ * All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
 /*
  * macterm.c -- Macintosh terminal front-end
  */
 
 #include <MacTypes.h>
+#include <Controls.h>
 #include <Fonts.h>
 #include <Gestalt.h>
 #include <MacWindows.h>
 #include <Palettes.h>
 #include <Quickdraw.h>
 #include <QuickdrawText.h>
+#include <Resources.h>
 #include <Sound.h>
 
 #include <limits.h>
@@ -44,6 +73,26 @@ static void inbuf_putstr(const char *c) {
        inbuf_putc(*c++);
 }
 
+static void display_resource(unsigned long type, short id) {
+    Handle h;
+    int len, i;
+    char *t;
+
+    h = GetResource(type, id);
+    if (h == NULL)
+       fatalbox("Can't get test resource");
+    SetResAttrs(h, GetResAttrs(h) | resLocked);
+    t = *h;
+    len = GetResourceSizeOnDisk(h);
+    for (i = 0; i < len; i++) {
+       inbuf_putc(t[i]);
+       term_out();
+    }
+    SetResAttrs(h, GetResAttrs(h) & ~resLocked);
+    ReleaseResource(h);
+}
+       
+
 void mac_newsession(void) {
     struct mac_session *s;
     int i;
@@ -54,7 +103,7 @@ void mac_newsession(void) {
     onlysession = s;
        
     /* XXX: Own storage management? */
-    if (mac_qdversion == gestaltOriginalQD)
+    if (mac_gestalts.qdvers == gestaltOriginalQD)
        s->window = GetNewWindow(wTerminal, NULL, (WindowPtr)-1);
     else
        s->window = GetNewCWindow(wTerminal, NULL, (WindowPtr)-1);
@@ -68,19 +117,7 @@ void mac_newsession(void) {
     SetPalette(s->window, s->palette, TRUE); 
     ActivatePalette(s->window);
     ShowWindow(s->window);
-    inbuf_putstr("\033[1mBold\033[m    \033[2mfaint\033[m   \033[3mitalic\033[m  \033[4mu_line\033[m  "
-                 "\033[5mslow bl\033[m \033[6mfast bl\033[m \033[7minverse\033[m \033[8mconceal\033[m "
-                 "\033[9mstruck\033[m  \033[21mdbl ul\033[m\015\012");
-    term_out();
-    inbuf_putstr("\033[30mblack   \033[31mred     \033[32mgreen   \033[33myellow  "
-                 "\033[34mblue    \033[35mmagenta \033[36mcyan    \033[37mwhite\015\012");
-    term_out();
-    inbuf_putstr("\033[1m\033[30mblack   \033[31mred     \033[32mgreen   \033[33myellow  "
-                 "\033[1m\033[34mblue    \033[35mmagenta \033[36mcyan    \033[37mwhite\015\012");
-    term_out();
-    inbuf_putstr("\033[37;44mwhite on blue     \033[32;41mgreen on red\015\012");
-    term_out();
-
+    display_resource('pTST', 128);
 }
 
 static void mac_initfont(struct mac_session *s) {
@@ -120,7 +157,7 @@ static void mac_adjustsize(struct mac_session *s) {
 static void mac_initpalette(struct mac_session *s) {
     WinCTab ct;
   
-    if (mac_qdversion == gestaltOriginalQD)
+    if (mac_gestalts.qdvers == gestaltOriginalQD)
        return;
     s->palette = NewPalette((*cfg.colours)->pmEntries, NULL, pmCourteous, 0);
     if (s->palette == NULL)
@@ -253,10 +290,22 @@ void free_ctx(struct mac_session *ctx) {
 
 /*
  * Set the scroll bar position
+ *
+ * total is the line number of the bottom of the working screen
+ * start is the line number of the top of the display
+ * page is the length of the displayed page
  */
 void set_sbar(int total, int start, int page) {
+    struct mac_session *s = onlysession;
 
-    /* Do something once we actually have a scroll bar */
+    SetControlMinimum(s->scrollbar, 0);
+    SetControlMaximum(s->scrollbar, total - page);
+    SetControlValue(s->scrollbar, start);
+#if 0
+    /* XXX: This doesn't compile for me - bjh */
+    if (mac_gestalts.cntlattr & gestaltControlMgrPresent)
+       SetControlViewSize(s->scrollbar, page);
+#endif
 }
 
 /*
@@ -326,7 +375,7 @@ void palette_set(int n, int r, int g, int b) {
 void palette_reset(void) {
     struct mac_session *s = onlysession;
 
-    if (mac_qdversion == gestaltOriginalQD)
+    if (mac_gestalts.qdvers == gestaltOriginalQD)
        return;
     CopyPalette(cfg.colours, s->palette, 0, 0, (*cfg.colours)->pmEntries);
     ActivatePalette(s->window);