EntryPoint.avt

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

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

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

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

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

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

package platform.dependent.mswindows;

import avtx.application.*;
import platform.dependent.*;
import platform.dependent.mswindows.services.*;
import platform.independent.osservices.*;

public service EntryPoint(Object)
{
    public static int main() {
        int exitCode = -1;
        try
        {
            if(MSWindowsServices.initialization()) try
            {
                try
                {
                    ConsoleApp app = (ConsoleApp) getAppType().newInstance();
                    String[] args = Process.current().commandLine;
                    int argc = args.length;
                    Array.copy(args, 0, args = new String[argc], 0, argc);
                    exitCode = app.main(args);
                } catch(Throwable exception)
                {
                    Thread main = Thread.current();
                    UnhandledExceptionHandler handler = main.unhandledExceptionHandler;
                    if(handler == null) handler = Thread.getDefaultUnhandledExceptionHandler();
                    handler.unhandledException(main, exception);
                }
            } finally
            {
                MSWindowsServices.finalization();
            }
        } catch(Throwable exception) {  }
        return exitCode;
    }

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