EntryPoint.avt

Переключить прокрутку окна
Загрузить этот исходный код

/*
    Реализация среды исполнения языка программирования
    Объектно-ориентированный продвинутый векторный транслятор

    Copyright © 2021, 2024 Малик Разработчик

    Это свободная программа: вы можете перераспространять ее и/или изменять
    ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
    в каком она была опубликована Фондом свободного программного обеспечения;
    либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.

    Эта программа распространяется в надежде, что она будет полезной,
    но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
    или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
    общественной лицензии GNU.

    Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
    вместе с этой программой. Если это не так, см.
    <https://www.gnu.org/licenses/>.
*/

package platform.dependent.mswindows;

import avtx.application.*;
import platform.dependent.mswindows.runtime.*;

service EntryPoint(Object)
{
    public static int main() {
        int exitCode = -1;
        try
        {
            Win32Runtime.initialize();
            try
            {
                try
                {
                    exitCode = ((ConsoleApp) getAppType().newInstance()).execute();
                }
                catch(Throwable exception)
                {
                    Thread main = Thread.current();
                    UnhandledExceptionHandler handler = main.unhandledExceptionHandler;
                    if(handler == null) handler = Thread.getDefaultUnhandledExceptionHandler();
                    handler.unhandledException(main, exception);
                }
            } finally
            {
                Win32Runtime.finalize();
            }
        }
        catch(Throwable exception) {  }
        return exitCode;
    }

    private static Class getAppType() throws ClassNotFoundException {
        for(Package[] packs = Package.enumerate(), int packidx = packs.length; packidx-- > 0; ) for(Class[] types = packs[packidx].enumerateTypes(), int typeidx = types.length; typeidx-- > 0; )
        {
            Class type = types[typeidx];
            if(ConsoleApp.class.isAssignableFrom(type) && !type.isAbstract() && type.visibility >= ReflectiveObject.PUBLIC) return type;
        }
        throw new ClassNotFoundException(package.getResourceString("not-found.class.app"));
    }
}