1 2#------------------------------------------------------------------------------ 3# $File: xenix,v 1.15 2022/10/19 20:15:16 christos Exp $ 4# xenix: file(1) magic for Microsoft Xenix 5# 6# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small 7# model" lifted from "magic.xenix", with comment "derived empirically; 8# treat as folklore until proven" 9# 10# "small model", "large model", "huge model" stuff lifted from XXX 11# 12# XXX - "x.out" collides with PDP-11 archives 13# 140 string core core file (Xenix) 15# URL: http://www.polarhome.com/service/man/?qf=86rel&tf=2&of=Xenix 16# http://fileformats.archiveteam.org/wiki/OMF 17# Reference: http://www.azillionmonkeys.com/qed/Omfg.pdf 18# Update: Joerg Jenderek 19# recordtype~TranslatorHEADerRecord 200 byte 0x80 21# GRR: line above is too general as it catches also Extensible storage engine DataBase, 22# all lif files like forth.lif hpcc88.lif lex90b.lif ( See ./lif) 23# and all compressed DEGAS low-res bitmaps like: MUNCHIE.PC1 PIDER1.PC1 24# skip examples like GENA.SND Switch.Snd by looking for record length maximal 1024-3 25>1 uleshort <1022 26# skip examples like GAME.PICTURE Strange.Pic by looking for positive record length 27>>1 uleshort >0 28# skip examples like Xtable.Data FRACTAL.GEN SHR.VIEW by looking for positive string length 29>>>3 ubyte >0 30# skip examples like OMBRE.6 with "UUUUUU" name by looking for valid high second record type 31>>>>(1.s+3) ubyte >0x6D 32# skip few Atari DEGAS bitmap TPDEMO.PC2 RECIPE.PC2 with invalid "high" second record type FEh FFh 33>>>>>(1.s+3) ubyte <0xF2 8086 relocatable (Microsoft) 34#!:mime application/octet-stream 35!:mime application/x-object 36!:ext obj/o/a 37# T-module name often source name like "hello.c" or "jmppm32.asm" in JMPPM32.OBJ or 38# "kbhit" in KBHITS.OBJ or "CAUSEWAY_KERNAL" in CWAPI.OBJ 39>>>>>>3 pstring x \b, "%s" 40# data length probably lower 256 according to TrID obj_omf.trid.xml 41>>>>>>1 uleshort x \b, 1st record data length %u 42# checksum 43#>>>>>>(3.b+4) ubyte x \b, checksum %#2.2x 44# second recordtype: 96h~LNAMES 88h~COMENT 8CH~EXTDEF 45# highest F1h~Library End Record 46>>>>>>(1.s+3) ubyte x \b, 2nd record type %#x 47>>>>>>(1.s+4) uleshort x \b, 2nd record data length %u 480 leshort 0xff65 x.out 49>2 string __.SYMDEF randomized 50>0 byte x archive 510 leshort 0x206 Microsoft a.out 52>8 leshort 1 Middle model 53>0x1e leshort &0x10 overlay 54>0x1e leshort &0x2 separate 55>0x1e leshort &0x4 pure 56>0x1e leshort &0x800 segmented 57>0x1e leshort &0x400 standalone 58>0x1e leshort &0x8 fixed-stack 59>0x1c byte &0x80 byte-swapped 60>0x1c byte &0x40 word-swapped 61>0x10 lelong >0 not-stripped 62>0x1e leshort ^0xc000 pre-SysV 63>0x1e leshort &0x4000 V2.3 64>0x1e leshort &0x8000 V3.0 65>0x1c byte &0x4 86 66>0x1c byte &0xb 186 67>0x1c byte &0x9 286 68>0x1c byte &0xa 386 69>0x1f byte <0x040 small model 70>0x1f byte =0x048 large model 71>0x1f byte =0x049 huge model 72>0x1e leshort &0x1 executable 73>0x1e leshort ^0x1 object file 74>0x1e leshort &0x40 Large Text 75>0x1e leshort &0x20 Large Data 76>0x1e leshort &0x120 Huge Objects Enabled 77>0x10 lelong >0 not stripped 78 790 leshort 0x140 old Microsoft 8086 x.out 80>0x3 byte &0x4 separate 81>0x3 byte &0x2 pure 82>0 byte &0x1 executable 83>0 byte ^0x1 relocatable 84>0x14 lelong >0 not stripped 85 860 lelong 0x206 b.out 87>0x1e leshort &0x10 overlay 88>0x1e leshort &0x2 separate 89>0x1e leshort &0x4 pure 90>0x1e leshort &0x800 segmented 91>0x1e leshort &0x400 standalone 92>0x1e leshort &0x1 executable 93>0x1e leshort ^0x1 object file 94>0x1e leshort &0x4000 V2.3 95>0x1e leshort &0x8000 V3.0 96>0x1c byte &0x4 86 97>0x1c byte &0xb 186 98>0x1c byte &0x9 286 99>0x1c byte &0x29 286 100>0x1c byte &0xa 386 101>0x1e leshort &0x4 Large Text 102>0x1e leshort &0x2 Large Data 103>0x1e leshort &0x102 Huge Objects Enabled 104 1050 leshort 0x580 XENIX 8086 relocatable or 80286 small model 106# GRR: line above is too general as it catches also all 8086 relocatable (Microsoft) with 1st record data length 5 C0M.OBJ C0T.OBJ C0S.OBJ 107