blob: 6f59e371cae38093d01d9a334c70de3675b2d374 [file] [log] [blame]
Jack Jansenc982ef22001-02-15 22:56:41 +00001/*
2 * WETabs.c
3 *
4 * WASTE TABS PACKAGE
5 * Routines for installing/removing tab hooks; accessors
6 *
7 */
8
9
10#include "WETabs.h"
11#include "WETabHooks.h"
12
13#ifndef __ERRORS__
14#include <Errors.h>
15#endif
16
17/* static UPP's */
18static WEDrawTextUPP _weTabDrawTextProc = nil;
19static WEPixelToCharUPP _weTabPixelToCharProc = nil;
20static WECharToPixelUPP _weTabCharToPixelProc = nil;
21static WELineBreakUPP _weTabLineBreakProc = nil;
22
23pascal OSErr WEInstallTabHooks(WEReference we)
24{
25 OSErr err;
26
27 /* if first time, create routine descriptors */
28 if (_weTabDrawTextProc == nil)
29 {
30 _weTabDrawTextProc = NewWEDrawTextProc(_WETabDrawText);
31 _weTabPixelToCharProc = NewWEPixelToCharProc(_WETabPixelToChar);
32 _weTabCharToPixelProc = NewWECharToPixelProc(_WETabCharToPixel);
33 _weTabLineBreakProc = NewWELineBreakProc(_WETabLineBreak);
34 }
35
36 if ((err = WESetInfo( weDrawTextHook, &_weTabDrawTextProc, we )) != noErr)
37 {
38 goto cleanup;
39 }
40 if ((err = WESetInfo( wePixelToCharHook, &_weTabPixelToCharProc, we )) != noErr)
41 {
42 goto cleanup;
43 }
44 if ((err = WESetInfo( weCharToPixelHook, &_weTabCharToPixelProc, we )) != noErr)
45 {
46 goto cleanup;
47 }
48 if ((err = WESetInfo( weLineBreakHook, &_weTabLineBreakProc, we )) != noErr)
49 {
50 goto cleanup;
51 }
52
53cleanup:
54 return err;
55}
56
57pascal OSErr WERemoveTabHooks(WEReference we)
58{
59 UniversalProcPtr nullHook = nil;
60 OSErr err;
61
62 if ((err = WESetInfo( weDrawTextHook, &nullHook, we )) != noErr)
63 {
64 goto cleanup;
65 }
66 if ((err = WESetInfo( wePixelToCharHook, &nullHook, we )) != noErr)
67 {
68 goto cleanup;
69 }
70 if ((err = WESetInfo( weCharToPixelHook, &nullHook, we )) != noErr)
71 {
72 goto cleanup;
73 }
74 if ((err = WESetInfo( weLineBreakHook, &nullHook, we )) != noErr)
75 {
76 goto cleanup;
77 }
78
79cleanup:
80 return err;
81}
82
83pascal Boolean WEIsTabHooks(WEReference we)
84{
85 WEPixelToCharUPP hook = nil;
86
87 /* return true if our tab hooks are installed */
88
89 return ( _weTabPixelToCharProc != nil ) &&
90 ( WEGetInfo( wePixelToCharHook, &hook, we ) == noErr) &&
91 ( _weTabPixelToCharProc == hook );
92}
93
94pascal SInt16 WEGetTabSize(WEReference we)
95{
96 SInt32 result;
97
98 if (WEGetUserInfo( kTabSizeTag, &result, we ) != noErr)
99 {
100 result = kDefaultTabSize;
101 }
102 return result;
103}
104
105pascal OSErr WESetTabSize(SInt16 tabSize, WEReference we)
106{
107 // make sure tabSize is a reasonable size
108 if ((tabSize < kMinTabSize) || (tabSize > kMaxTabSize))
109 {
110 return paramErr;
111 }
112 else
113 {
114 return WESetUserInfo( kTabSizeTag, tabSize, we );
115 }
116}