/* * WETabs.c * * WASTE TABS PACKAGE * Routines for installing/removing tab hooks; accessors * */ #include "WETabs.h" #include "WETabHooks.h" #if !defined(__ERRORS__) && defined(WITHOUT_FRAMEWORKS) #include #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 ); } }