public VersionitConsole(string[] args,IVersionRepository versionRepository) : base("Versionit") { _args = args; _versionRepository = versionRepository; _logger = new ConsoleUtility(); _setupParameters = new SetupParameters(); _fileUtility = new FileUtility(); _sqlMessageUtility = new SqlMessageUtility(); }
/// <summary> /// Used for make image url to be base64 url, single item single image /// </summary> /// <param name="item">Model has image</param> /// <param name="fileUtility">file utility helper</param> /// <param name="folderName">folder group name => Manufacturer, Product, Category</param> /// <param name="cancellationToken"></param> /// <returns>base64 format image model</returns> public static async Task <T> GetImageBase64UrlAsync(T item, IFileUtility fileUtility, string folderName, CancellationToken cancellationToken) { var imageFileExtension = Path.GetExtension(item.ImageName); var buffer = await fileUtility.ReadFileAsync(folderName + "/" + item.Id, item.ImageName, cancellationToken); item.ImageUrl = "data:image/" + imageFileExtension.Substring(1) + ";base64," + Convert.ToBase64String(buffer); return(item); }
public MediaService(IMediaRepository mediaRepository, IWebHostEnvironment webHostEnvironment, IConfiguration configuration, IFileUtility fileUtility, IFileSystem fileSystem) { _mediaRepository = mediaRepository; _webHostEnvironment = webHostEnvironment; _configuration = configuration; _fileUtility = fileUtility; _fileSystem = fileSystem; }
public PermissionsStore(IFileUtility fileUtility, IConfiguration configuration) { _urlTemplateTable = new UriTemplateTable(); _scopesListTable = new Dictionary <int, object>(); _delegatedScopesInfoTable = new Dictionary <string, ScopeInformation>(); _applicationScopesInfoTable = new Dictionary <string, ScopeInformation>(); _fileUtility = fileUtility; _permissionsFilePaths = configuration.GetSection("Permissions:FilePaths").Get <List <string> >(); _scopesInformation = configuration["Permissions:ScopesInformationList"]; SeedTables(); }
public BasicSetupRepository(UserManager <ApplicationUser> userManager, IEmailService emailService, IHostingEnvironment environment, IStringConstants stringConstants, ConnectionString connectionString, EmailSettings emailSettings, IDbUtility dbUtility, IFileUtility fileUtility) { _userManager = userManager; _emailService = emailService; _environment = environment; _stringConstants = stringConstants; _connectionString = connectionString; _emailSettings = emailSettings; _dbUtility = dbUtility; _fileUtility = fileUtility; }
private protected ExportedModuleBase(ILogger logger, AppSettings configuration, IFileUtility fileUtility, IGlobalCache globalCache, MbbsModule module, PointerDictionary <SessionBase> channelDictionary) { _logger = logger; _configuration = configuration; _fileFinder = fileUtility; _globalCache = globalCache; Module = module; ChannelDictionary = channelDictionary; FilePointerDictionary = new PointerDictionary <FileStream>(1, int.MaxValue); McvPointerDictionary = new PointerDictionary <McvFile>(); }
/// <summary> /// Initializes a new instance of the <see cref="ConsoleValidator"/> class. /// </summary> /// <param name="logger">The logger.</param> /// <param name="settings">The settings.</param> /// <param name="fileUtility">The file utility.</param> /// <param name="directoryUtility">The directory utility.</param> /// <param name="pathUtility">The path utility.</param> public ConsoleValidator( ILogger logger, IHyperValidatorSettings settings, IFileUtility fileUtility, IDirectoryUtility directoryUtility, IPathUtility pathUtility) { Logger = logger; Settings = settings; FileUtility = fileUtility; DirectoryUtility = directoryUtility; PathUtility = pathUtility; }
public CloudProxyController(ILogger <TController> logger, IAdaptationServiceClient <AdaptationOutcomeProcessor> adaptationServiceClient, IFileUtility fileUtility, ICloudSdkConfiguration cloudSdkConfiguration, IProcessingConfiguration processingConfiguration, IStoreConfiguration storeConfiguration, IZipUtility zipUtility, IHttpService httpService) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _fileUtility = fileUtility ?? throw new ArgumentNullException(nameof(fileUtility)); _cloudSdkConfiguration = cloudSdkConfiguration ?? throw new ArgumentNullException(nameof(cloudSdkConfiguration)); _processingConfiguration = processingConfiguration ?? throw new ArgumentNullException(nameof(processingConfiguration)); _storeConfiguration = storeConfiguration ?? throw new ArgumentNullException(nameof(storeConfiguration)); _adaptationServiceClient = adaptationServiceClient ?? throw new ArgumentNullException(nameof(adaptationServiceClient)); _zipUtility = zipUtility ?? throw new ArgumentNullException(nameof(zipUtility)); _httpService = httpService ?? throw new ArgumentNullException(nameof(httpService)); }
public MsgFile(IFileUtility fileUtility, string modulePath, string msgName) { MsgValues = new Dictionary <string, byte[]>(); _modulePath = modulePath; _moduleName = msgName; _fileUtility = fileUtility; FileName = $"{msgName.ToUpper()}.MSG"; FileNameAtRuntime = $"{msgName.ToUpper()}.MCV"; _logger.Debug($"({_moduleName}) Compiling MCV from {FileName}"); BuildMCV(); }
private protected static readonly byte[] NEW_LINE = { (byte)'\r', (byte)'\n' }; //Just easier to read private protected ExportedModuleBase(MbbsModule module, PointerDictionary <SessionBase> channelDictionary) { _logger = ServiceResolver.GetService <ILogger>(); _configuration = ServiceResolver.GetService <IConfiguration>(); _fileFinder = ServiceResolver.GetService <IFileUtility>(); _globalCache = ServiceResolver.GetService <IGlobalCache>(); Module = module; ChannelDictionary = channelDictionary; FilePointerDictionary = new PointerDictionary <FileStream>(1, int.MaxValue); McvPointerDictionary = new PointerDictionary <McvFile>(); BtrievePointerDictionaryNew = new Dictionary <IntPtr16, BtrieveFileProcessor>(); }
/// <summary> /// Initializes a new instance of the <see cref="SystemRepository" /> class. /// </summary> /// <param name="settings">The settings.</param> /// <param name="logger">The logger.</param> /// <param name="directoryUtility">The directory utility.</param> /// <param name="fileUtility">The file utility.</param> /// <param name="pathUtility">The path utility.</param> /// <param name="consoleRepository">The console repository.</param> public SystemRepository( IHyperValidatorSettings settings, ILogger logger, IDirectoryUtility directoryUtility, IFileUtility fileUtility, IPathUtility pathUtility, IConsoleRepository consoleRepository) { Settings = settings; Logger = logger; DirectoryUtility = directoryUtility; FileUtility = fileUtility; PathUtility = pathUtility; ConsoleRepository = consoleRepository; }
public ScriptCommand(SetupParameters setupParameters, IVersionRepository versionRepository, IFileUtility fileUtility, IMessageUtility messageUtility) { _setupParameters = setupParameters; _utility = new ConsoleUtility(); _versionRepository = versionRepository; _fileUtility = fileUtility; _messageUtility = messageUtility; }
public SamplesStore(IConfiguration configuration, IHttpClientUtility httpClientUtility, IFileUtility fileUtility, IMemoryCache samplesCache) { _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration), $"{ NullValueError }: { nameof(configuration) }"); _httpClientUtility = httpClientUtility ?? throw new ArgumentNullException(nameof(httpClientUtility), $"{ NullValueError }: { nameof(httpClientUtility) }"); _fileUtility = fileUtility ?? throw new ArgumentNullException(nameof(fileUtility), $"{ NullValueError }: { nameof(fileUtility) }"); _samplesCache = samplesCache ?? throw new ArgumentNullException(nameof(samplesCache), $"{ NullValueError }: { nameof(samplesCache) }");; _sampleQueriesContainerName = _configuration["BlobStorage:Containers:SampleQueries"]; _sampleQueriesBlobName = _configuration["BlobStorage:Blobs:SampleQueries"]; _defaultRefreshTimeInHours = FileServiceHelper.GetFileCacheRefreshTime(configuration["FileCacheRefreshTimeInHours:SampleQueries"]); }
/// <summary> /// Initializes a new instance of the <see cref="GameRepository"/> class. /// </summary> /// <param name="settings">The settings.</param> /// <param name="logger">The logger.</param> /// <param name="directoryUtility">The directory utility.</param> /// <param name="fileUtility">The file utility.</param> /// <param name="pathUtility">The path utility.</param> /// <param name="consoleSerializer">The console serializer.</param> public GameRepository( IHyperValidatorSettings settings, ILogger logger, IDirectoryUtility directoryUtility, IFileUtility fileUtility, IPathUtility pathUtility, IConsoleSerializer consoleSerializer) { Settings = settings; Logger = logger; DirectoryUtility = directoryUtility; FileUtility = fileUtility; PathUtility = pathUtility; ConsoleSerializer = consoleSerializer; }
public DocxGenerator( IConfiguration configuration, ITimeService timeService, IFileUtility fileUtility, IFileService fileService, IAzureStorageService azureStorageService, IOvertimeUtility overtimeUtility, ILogger <DocxGenerator> logger) { _configuration = configuration; _timeService = timeService; _fileUtility = fileUtility; _fileService = fileService; _azureStorageService = azureStorageService; _overtimeUtility = overtimeUtility; _logger = logger; }
public PermissionsStore(IConfiguration configuration, IHttpClientUtility httpClientUtility, IFileUtility fileUtility, IMemoryCache permissionsCache) { _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration), $"{ NullValueError }: { nameof(configuration) }"); _permissionsCache = permissionsCache ?? throw new ArgumentNullException(nameof(permissionsCache), $"{ NullValueError }: { nameof(permissionsCache) }"); _httpClientUtility = httpClientUtility ?? throw new ArgumentNullException(nameof(httpClientUtility), $"{ NullValueError }: { nameof(httpClientUtility) }"); _fileUtility = fileUtility ?? throw new ArgumentNullException(nameof(fileUtility), $"{ NullValueError }: { nameof(fileUtility) }"); _permissionsContainerName = configuration[PermissionsContainerBlobConfig] ?? throw new ArgumentNullException(nameof(PermissionsContainerBlobConfig), $"Config path missing: { PermissionsContainerBlobConfig }"); _permissionsBlobNames = configuration.GetSection(PermissionsNamesBlobConfig).Get <List <string> >() ?? throw new ArgumentNullException(nameof(PermissionsNamesBlobConfig), $"Config path missing: { PermissionsNamesBlobConfig }"); _scopesInformation = configuration[ScopesInfoBlobConfig] ?? throw new ArgumentNullException(nameof(ScopesInfoBlobConfig), $"Config path missing: { ScopesInfoBlobConfig }"); _defaultRefreshTimeInHours = FileServiceHelper.GetFileCacheRefreshTime(configuration[CacheRefreshTimeConfig]); }
/// <summary> /// Constructor to load the specified Btrieve File at the given Path /// </summary> /// <param name="fileUtility"></param> /// <param name="path"></param> /// <param name="fileName"></param> public BtrieveFileProcessor(IFileUtility fileUtility, string path, string fileName) { _fileFinder = fileUtility; Keys = new Dictionary <ushort, BtrieveKey>(); AutoincrementedKeys = new Dictionary <ushort, BtrieveKey>(); if (string.IsNullOrEmpty(path)) { path = Directory.GetCurrentDirectory(); } if (!Path.EndsInDirectorySeparator(path)) { path += Path.DirectorySeparatorChar; } var loadedFileName = _fileFinder.FindFile(path, fileName); // hack for MUTANTS which tries to load a DATT file if (Path.GetExtension(loadedFileName).ToUpper() == ".DATT") { loadedFileName = Path.ChangeExtension(loadedFileName, ".DAT"); } // If a .DB version exists, load it over the .DAT file var dbFileName = loadedFileName.ToUpper().Replace(".DAT", ".DB"); var fullPath = Path.Combine(path, dbFileName); if (File.Exists(fullPath)) { LoadSqlite(fullPath); } else { var btrieveFile = new BtrieveFile(); btrieveFile.LoadFile(_logger, path, loadedFileName); CreateSqliteDB(fullPath, btrieveFile); } //Set Position to First Record StepFirst(); }
/// <summary> /// Initializes a new instance of the <see cref="ConsoleRepository" /> class. /// </summary> /// <param name="settings">The settings.</param> /// <param name="logger">The logger.</param> /// <param name="directoryUtility">The directory utility.</param> /// <param name="fileUtility">The file utility.</param> /// <param name="pathUtility">The path utility.</param> /// <param name="consoleSerializer">The console serializer.</param> /// <param name="databaseSerializer">The database serializer.</param> /// <param name="gameValidator">The game validator.</param> /// <param name="consoleValidator">The console validator.</param> public ConsoleRepository( IHyperValidatorSettings settings, ILogger logger, IDirectoryUtility directoryUtility, IFileUtility fileUtility, IPathUtility pathUtility, IConsoleSerializer consoleSerializer, IDatabaseSerializer databaseSerializer, IGameValidator gameValidator, IConsoleValidator consoleValidator) { Settings = settings; Logger = logger; DirectoryUtility = directoryUtility; FileUtility = fileUtility; PathUtility = pathUtility; ConsoleSerializer = consoleSerializer; DatabaseSerializer = databaseSerializer; GameValidator = gameValidator; ConsoleValidator = consoleValidator; }
public MbbsHost(ILogger logger, IGlobalCache globalCache, IFileUtility fileUtility, IEnumerable <IHostRoutine> mbbsRoutines, IConfiguration configuration, IEnumerable <IGlobalRoutine> globalRoutines) { _logger = logger; _globalCache = globalCache; _fileUtility = fileUtility; _mbbsRoutines = mbbsRoutines; _configuration = configuration; _globalRoutines = globalRoutines; _logger.Info("Constructing MBBSEmu Host..."); _channelDictionary = new PointerDictionary <SessionBase>(); _modules = new Dictionary <string, MbbsModule>(); _exportedFunctions = new Dictionary <string, IExportedModule>(); _realTimeStopwatch = Stopwatch.StartNew(); _incomingSessions = new Queue <SessionBase>(); _cleanupTime = ParseCleanupTime(); _timer = new Timer(unused => _performCleanup = true, this, NowUntil(_cleanupTime), TimeSpan.FromDays(1)); _logger.Info("Constructed MBBSEmu Host!"); }
/// <summary> /// Creates a mocked IPermissionsStore object. /// </summary> /// <param name="configFilePath">Optional: The path of the config file.</param> /// <param name="configuration">Optional: Mock <see cref="IConfigurationRoot"/> object.</param> /// <param name="fileUtility">Optional: Mock <see cref="IFileUtility"/> object.</param> /// <param name="httpClientUtility">Optional: Mock <see cref="IHttpClientUtility"/> object.</param> /// <param name="permissionsCache">Optional: Mock <see cref="IMemoryCache"/> object.</param> /// <returns>A mocked IPermissionsStore object.</returns> public static IPermissionsStore GetPermissionStore(string configFilePath = null, IConfigurationRoot configuration = null, IFileUtility fileUtility = null, IHttpClientUtility httpClientUtility = null, IMemoryCache permissionsCache = null) { if (string.IsNullOrEmpty(configFilePath) && configuration == null) { // Either the configFilePath or the configuration parameters needs to be specified, // that is, they can't both be null. throw new ArgumentNullException($"{nameof(configFilePath)} and {nameof(configuration)}", $"Specify values for either {nameof(configFilePath)} or {nameof(configuration)}"); } fileUtility ??= new FileUtilityMock(); httpClientUtility ??= new FileUtilityMock(); permissionsCache ??= Create.MockedMemoryCache(); configuration ??= new ConfigurationBuilder() .AddJsonFile(configFilePath) .Build(); return(new PermissionsStore(configuration, httpClientUtility, fileUtility, permissionsCache)); }
public FileTypeDetectionController(IAdaptationServiceClient <AdaptationOutcomeProcessor> adaptationServiceClient, IStoreConfiguration storeConfiguration, IProcessingConfiguration processingConfiguration, ILogger <FileTypeDetectionController> logger, IFileUtility fileUtility, ITracer tracer) : base(logger) { _adaptationServiceClient = adaptationServiceClient ?? throw new ArgumentNullException(nameof(adaptationServiceClient)); _fileUtility = fileUtility ?? throw new ArgumentNullException(nameof(fileUtility)); if (storeConfiguration == null) { throw new ArgumentNullException(nameof(storeConfiguration)); } if (processingConfiguration == null) { throw new ArgumentNullException(nameof(processingConfiguration)); } _processingTimeoutDuration = processingConfiguration.ProcessingTimeoutDuration; _processingCancellationTokenSource = new CancellationTokenSource(_processingTimeoutDuration); _originalStorePath = storeConfiguration.OriginalStorePath; _rebuiltStorePath = storeConfiguration.RebuiltStorePath; _tracer = tracer; }
/// <summary> /// Constructor to load the specified Btrieve File at the given Path /// </summary> /// <param name="fileName"></param> /// <param name="path"></param> public BtrieveFileProcessor(string fileName, string path) { _fileFinder = DependencyInjection.ServiceResolver.GetService <IFileUtility>(); if (string.IsNullOrEmpty(path)) { path = Directory.GetCurrentDirectory(); } if (!path.EndsWith(Path.DirectorySeparatorChar)) { path += Path.DirectorySeparatorChar; } LoadedFilePath = path; LoadedFileName = _fileFinder.FindFile(path, fileName); //If a .EMU version exists, load it over the .DAT file var jsonFileName = LoadedFileName.ToUpper().Replace(".DAT", ".EMU"); if (File.Exists($"{LoadedFilePath}{jsonFileName}")) { LoadedFileName = jsonFileName; LoadJson(LoadedFilePath, LoadedFileName); } else { LoadBtrieve(LoadedFilePath, LoadedFileName); SaveJson(); } //Ensure loaded records (regardless of source) are in order by their offset within the Btrieve file LoadedFile.Records = LoadedFile.Records.OrderBy(x => x.Offset).ToList(); //Set Position to First Record Position = LoadedFile.Records.OrderBy(x => x.Offset).FirstOrDefault()?.Offset ?? 0; }
internal Phapi(IClock clock, ILogger logger, AppSettings configuration, IFileUtility fileUtility, IGlobalCache globalCache, MbbsModule module, PointerDictionary <SessionBase> channelDictionary) : base( clock, logger, configuration, fileUtility, globalCache, module, channelDictionary) { }
public GraphExplorerSamplesAdminController(IFileUtility fileUtility, IConfiguration configuration, IOptionsMonitor <SamplesAdministrators> administrators) { _fileUtility = fileUtility; _policiesFilePathSource = configuration["Samples:SampleQueriesPoliciesFilePathName"]; // sets the path of the policies file _administrators = administrators.CurrentValue; // sets the list of samples administrators }
public Worker(IFileUtility fileUtility) { _fileUtility = fileUtility; }
internal Doscalls(IClock clock, ILogger logger, AppSettings configuration, IFileUtility fileUtility, IGlobalCache globalCache, MbbsModule module, PointerDictionary <SessionBase> channelDictionary, ITextVariableService textVariableService) : base( clock, logger, configuration, fileUtility, globalCache, module, channelDictionary, textVariableService) { }
public GraphExplorerSamplesController(IFileUtility fileUtility, IConfiguration configuration) { _fileUtility = fileUtility; _queriesFilePathSource = configuration["Samples:SampleQueriesFilePathName"]; // sets the path of the sample queries JSON file _policiesFilePathSource = configuration["Samples:SampleQueriesPoliciesFilePathName"]; // sets the path of the sample queries policies JSON file }
/// <summary> /// Creates a new repository. /// </summary> /// <param name="invoiceManager">The invoice manager to use</param> public RemoteRepository(IInvoiceManager invoiceManager, IContext context, IWebClientUtility webClientUtility, IFileUtility fileUtility) { this.invoiceManager = invoiceManager; this.context = context; this.webClientUtility = webClientUtility; this.fileUtility = fileUtility; }
/// <summary> /// Creates a new documentation manager. /// </summary> /// <param name="remoteRepository">The remote respository to download versions from.</param> /// <param name="fileUtility">The file utility to use.</param> /// <param name="installationDirectory">The directory to place DR documentation in.</param> public DocumentationManager(IRemoteRepository remoteRepository, IFileUtility fileUtility, string installationDirectory) { this.installationDirectory = installationDirectory; this.remoteRepository = remoteRepository; this.fileUtility = fileUtility; }
public Problem022(IFileUtility fileUtility) { FileUtility = fileUtility; }
public void WriteConversations(string sender, IList <FacebookConversation> conversations, string outputDirectory, IFileUtility fileUtility) { // Clean up the conversations which seem to be with a single person to include the sender. foreach (var conversation in conversations) { if (conversation.Participants.Count < 2 && conversation.Participants.First() != sender) { conversation.Participants.Add(sender); } } foreach (var conversationGroup in conversations.GroupBy(g => g.Participants.OrderBy(o => o).Aggregate((a, b) => a.Trim() + b.Trim()))) { var conversationList = conversationGroup.ToList(); var serializedConversation = JsonConvert.SerializeObject(conversationList); var filePath = Path.Combine(outputDirectory, (conversationList.First().Participants.Take(5).Aggregate((a, b) => a + "-" + b)).Replace("/", "-").Replace(":", "-").Replace("facebook.com", string.Empty)); if (fileUtility.Exists(filePath)) { fileUtility.Delete(filePath); } fileUtility.WriteAllText(filePath, serializedConversation); } }
internal Doscalls(ILogger logger, AppSettings configuration, IFileUtility fileUtility, IGlobalCache globalCache, MbbsModule module, PointerDictionary <SessionBase> channelDictionary) : base( logger, configuration, fileUtility, globalCache, module, channelDictionary) { }
/// <summary> /// Constructor for MbbsModule /// /// Pass in an empty/blank moduleIdentifier for a Unit Test/Fake Module /// </summary> /// <param name="logger"></param> /// <param name="moduleIdentifier">Will be null in a test</param> /// <param name="path"></param> /// <param name="memoryCore"></param> /// <param name="fileUtility"></param> public MbbsModule(IFileUtility fileUtility, IClock clock, ILogger logger, string moduleIdentifier, string path = "", MemoryCore memoryCore = null) { _fileUtility = fileUtility; _logger = logger; _clock = clock; ModuleIdentifier = moduleIdentifier; ModuleDlls = new List <MbbsDll>(); //Sanitize and setup Path if (string.IsNullOrEmpty(path)) { path = Directory.GetCurrentDirectory(); } if (!Path.EndsInDirectorySeparator(path)) { path += Path.DirectorySeparatorChar; } ModulePath = path; // will be null in tests if (string.IsNullOrEmpty(ModuleIdentifier)) { Mdf = MdfFile.createForTest(); ModuleDlls.Add(new MbbsDll(fileUtility, logger) { File = NEFile.createForTest() }); } else { //Verify MDF File Exists var mdfFile = fileUtility.FindFile(ModulePath, $"{ModuleIdentifier}.MDF"); var fullMdfFilePath = Path.Combine(ModulePath, mdfFile); if (!System.IO.File.Exists(fullMdfFilePath)) { throw new FileNotFoundException($"Unable to locate Module: {fullMdfFilePath}"); } Mdf = new MdfFile(fullMdfFilePath); var moduleDll = new MbbsDll(fileUtility, logger); moduleDll.Load(Mdf.DLLFiles[0].Trim(), ModulePath); ModuleDlls.Add(moduleDll); if (Mdf.Requires.Count > 0) { foreach (var r in Mdf.Requires) { var requiredDll = new MbbsDll(fileUtility, logger); if (requiredDll.Load(r.Trim(), ModulePath)) { requiredDll.SegmentOffset = (ushort)(ModuleDlls.Sum(x => x.File.SegmentTable.Count) + 1); ModuleDlls.Add(requiredDll); } } } if (Mdf.MSGFiles.Count > 0) { Msgs = new List <MsgFile>(Mdf.MSGFiles.Count); foreach (var m in Mdf.MSGFiles) { Msgs.Add(new MsgFile(ModulePath, m)); } } } //Set Initial Values RtkickRoutines = new PointerDictionary <RealTimeRoutine>(); RtihdlrRoutines = new PointerDictionary <RealTimeRoutine>(); TaskRoutines = new PointerDictionary <RealTimeRoutine>(); TextVariables = new Dictionary <string, FarPtr>(); GlobalCommandHandlers = new List <FarPtr>(); ExportedModuleDictionary = new Dictionary <ushort, IExportedModule>(6); ExecutionUnits = new Queue <ExecutionUnit>(2); Memory = memoryCore ?? new MemoryCore(); //Declare PSP Segment var psp = new PSPStruct { NextSegOffset = 0x9FFF, EnvSeg = 0xFFFF }; Memory.AddSegment(0x4000); Memory.SetArray(0x4000, 0, psp.Data); Memory.AllocateVariable("Int21h-PSP", sizeof(ushort)); Memory.SetWord("Int21h-PSP", 0x4000); //Find _INIT_ values if any foreach (var dll in ModuleDlls) { //If it's a Test, setup a fake _INIT_ if (string.IsNullOrEmpty(ModuleIdentifier)) { dll.EntryPoints["_INIT_"] = null; return; } //Setup _INIT_ Entrypoint FarPtr initEntryPointPointer; var initResidentName = dll.File.ResidentNameTable.FirstOrDefault(x => x.Name.StartsWith("_INIT__")); if (initResidentName == null) { //This only happens with MajorMUD -- I have no idea why it's a special little snowflake ¯\_(ツ)_/¯ _logger.Warn($"({moduleIdentifier}) Unable to locate _INIT_ in Resident Name Table, checking Non-Resident Name Table..."); var initNonResidentName = dll.File.NonResidentNameTable.FirstOrDefault(x => x.Name.StartsWith("_INIT__")); if (initNonResidentName == null) { throw new Exception("Unable to locate _INIT__ entry in Resident Name Table"); } var initEntryPoint = dll.File.EntryTable.First(x => x.Ordinal == initNonResidentName.IndexIntoEntryTable); initEntryPointPointer = new FarPtr((ushort)(initEntryPoint.SegmentNumber + dll.SegmentOffset), initEntryPoint.Offset); } else { var initEntryPoint = dll.File.EntryTable.First(x => x.Ordinal == initResidentName.IndexIntoEntryTable); initEntryPointPointer = new FarPtr((ushort)(initEntryPoint.SegmentNumber + dll.SegmentOffset), initEntryPoint.Offset); } _logger.Debug($"({ModuleIdentifier}) Located _INIT__: {initEntryPointPointer}"); dll.EntryPoints["_INIT_"] = initEntryPointPointer; } }