117 lines
2.4 KiB
C
117 lines
2.4 KiB
C
|
/*
|
||
|
* 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 );
|
||
|
}
|
||
|
}
|