summaryrefslogtreecommitdiffstats
path: root/Mac/Wastemods/WETabs.c
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/Wastemods/WETabs.c')
-rw-r--r--Mac/Wastemods/WETabs.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/Mac/Wastemods/WETabs.c b/Mac/Wastemods/WETabs.c
new file mode 100644
index 0000000..6f59e37
--- /dev/null
+++ b/Mac/Wastemods/WETabs.c
@@ -0,0 +1,116 @@
+/*
+ * WETabs.c
+ *
+ * WASTE TABS PACKAGE
+ * Routines for installing/removing tab hooks; accessors
+ *
+ */
+
+
+#include "WETabs.h"
+#include "WETabHooks.h"
+
+#ifndef __ERRORS__
+#include <Errors.h>
+#endif
+
+/* static UPP's */
+static WEDrawTextUPP _weTabDrawTextProc = nil;
+static WEPixelToCharUPP _weTabPixelToCharProc = nil;
+static WECharToPixelUPP _weTabCharToPixelProc = nil;
+static WELineBreakUPP _weTabLineBreakProc = nil;
+
+pascal OSErr WEInstallTabHooks(WEReference we)
+{
+ OSErr err;
+
+ /* if first time, create routine descriptors */
+ if (_weTabDrawTextProc == nil)
+ {
+ _weTabDrawTextProc = NewWEDrawTextProc(_WETabDrawText);
+ _weTabPixelToCharProc = NewWEPixelToCharProc(_WETabPixelToChar);
+ _weTabCharToPixelProc = NewWECharToPixelProc(_WETabCharToPixel);
+ _weTabLineBreakProc = NewWELineBreakProc(_WETabLineBreak);
+ }
+
+ if ((err = WESetInfo( weDrawTextHook, &_weTabDrawTextProc, we )) != noErr)
+ {
+ goto cleanup;
+ }
+ if ((err = WESetInfo( wePixelToCharHook, &_weTabPixelToCharProc, we )) != noErr)
+ {
+ goto cleanup;
+ }
+ if ((err = WESetInfo( weCharToPixelHook, &_weTabCharToPixelProc, we )) != noErr)
+ {
+ goto cleanup;
+ }
+ if ((err = WESetInfo( weLineBreakHook, &_weTabLineBreakProc, we )) != noErr)
+ {
+ goto cleanup;
+ }
+
+cleanup:
+ return err;
+}
+
+pascal OSErr WERemoveTabHooks(WEReference we)
+{
+ UniversalProcPtr nullHook = nil;
+ OSErr err;
+
+ if ((err = WESetInfo( weDrawTextHook, &nullHook, we )) != noErr)
+ {
+ goto cleanup;
+ }
+ if ((err = WESetInfo( wePixelToCharHook, &nullHook, we )) != noErr)
+ {
+ goto cleanup;
+ }
+ if ((err = WESetInfo( weCharToPixelHook, &nullHook, we )) != noErr)
+ {
+ goto cleanup;
+ }
+ if ((err = WESetInfo( weLineBreakHook, &nullHook, we )) != noErr)
+ {
+ goto cleanup;
+ }
+
+cleanup:
+ return err;
+}
+
+pascal Boolean WEIsTabHooks(WEReference we)
+{
+ WEPixelToCharUPP hook = nil;
+
+ /* return true if our tab hooks are installed */
+
+ return ( _weTabPixelToCharProc != nil ) &&
+ ( WEGetInfo( wePixelToCharHook, &hook, we ) == noErr) &&
+ ( _weTabPixelToCharProc == hook );
+}
+
+pascal SInt16 WEGetTabSize(WEReference we)
+{
+ SInt32 result;
+
+ if (WEGetUserInfo( kTabSizeTag, &result, we ) != noErr)
+ {
+ result = kDefaultTabSize;
+ }
+ return result;
+}
+
+pascal OSErr WESetTabSize(SInt16 tabSize, WEReference we)
+{
+ // make sure tabSize is a reasonable size
+ if ((tabSize < kMinTabSize) || (tabSize > kMaxTabSize))
+ {
+ return paramErr;
+ }
+ else
+ {
+ return WESetUserInfo( kTabSizeTag, tabSize, we );
+ }
+}