Spaces:
NSOUP
/
No application file

seitoku's picture
Upload folder using huggingface_hub
ba8d952 verified
# -*- coding: utf-8 -*-
# Copyright 2019 Avram Lubkin, All Rights Reserved
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
"""
**ANSICON Python module**
A Python wrapper for loading Jason Hood's ANSICON
ANSICON can be found at https://github.com/adoxa/ansicon
"""
import ctypes
from ctypes import wintypes
import os
import sys
KERNEL32 = ctypes.windll.kernel32
KERNEL32.FreeLibrary.argtypes = (wintypes.HANDLE,)
KERNEL32.FreeLibrary.restype = wintypes.BOOL
def _get_dll_path():
"""
Determines the path of the ANSICON DLL
"""
directory = os.path.dirname(os.path.abspath(__file__))
dll = 'ANSI64.dll' if sys.maxsize > 2**31 else 'ANSI32.dll'
return os.path.join(directory, dll)
class _Loader(object):
"""
DLL Loader
Keeps track of DLL handle for unloading
"""
def __init__(self):
self.dll = None
def load(self):
"""
Load the DLL
Does nothing if the DLL is already loaded.
Will raise an exception, most likely WindowsError, if it fails.
"""
if self.dll is None:
self.dll = ctypes.WinDLL(_get_dll_path(), use_last_error=True)
def unload(self):
"""
Unload the DLL
Does nothing if the DLL has not been loaded.
Will raise a WindowsError exception if it fails.
"""
if self.dll is None:
return
if not KERNEL32.FreeLibrary(self.dll._handle): # pylint: disable=protected-access
raise ctypes.WinError(ctypes.get_last_error())
self.dll = None
def loaded(self):
"""
Returns True if the the DLL was previously loaded
"""
return self.dll is not None
_ANSICON = _Loader()
load = _ANSICON.load # pylint: disable=invalid-name
unload = _ANSICON.unload # pylint: disable=invalid-name
loaded = _ANSICON.loaded # pylint: disable=invalid-name