v86 0.3.7 → 0.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/Readme.md +64 -108
  2. package/build/libv86-debug.js +12677 -0
  3. package/build/libv86-debug.mjs +732 -0
  4. package/build/libv86.js +710 -0
  5. package/build/libv86.mjs +636 -0
  6. package/build/v86-debug.wasm +0 -0
  7. package/build/v86-fallback.wasm +0 -0
  8. package/build/v86.wasm +0 -0
  9. package/package.json +12 -35
  10. package/bios/.gitignore +0 -1
  11. package/bios/COPYING.LESSER +0 -165
  12. package/bios/bochs-bios.bin +0 -0
  13. package/bios/bochs-vgabios.bin +0 -0
  14. package/bios/fetch-and-build-seabios.sh +0 -13
  15. package/bios/seabios/.config +0 -113
  16. package/bios/seabios/.config.old +0 -114
  17. package/bios/seabios/.gitignore +0 -4
  18. package/bios/seabios/COPYING +0 -674
  19. package/bios/seabios/COPYING.LESSER +0 -165
  20. package/bios/seabios/Makefile +0 -286
  21. package/bios/seabios/README +0 -17
  22. package/bios/seabios/docs/Build_overview.md +0 -104
  23. package/bios/seabios/docs/Contributing.md +0 -20
  24. package/bios/seabios/docs/Debugging.md +0 -111
  25. package/bios/seabios/docs/Developer_Documentation.md +0 -25
  26. package/bios/seabios/docs/Developer_links.md +0 -86
  27. package/bios/seabios/docs/Download.md +0 -27
  28. package/bios/seabios/docs/Execution_and_code_flow.md +0 -178
  29. package/bios/seabios/docs/Linking_overview.md +0 -160
  30. package/bios/seabios/docs/Mailinglist.md +0 -8
  31. package/bios/seabios/docs/Memory_Model.md +0 -253
  32. package/bios/seabios/docs/README +0 -5
  33. package/bios/seabios/docs/Releases.md +0 -482
  34. package/bios/seabios/docs/Runtime_config.md +0 -193
  35. package/bios/seabios/docs/SeaBIOS.md +0 -17
  36. package/bios/seabios/docs/SeaVGABIOS.md +0 -39
  37. package/bios/seabios/out/autoconf.h +0 -117
  38. package/bios/seabios/out/include/config/acpi/dsdt.h +0 -0
  39. package/bios/seabios/out/include/config/acpi.h +0 -0
  40. package/bios/seabios/out/include/config/ahci.h +0 -0
  41. package/bios/seabios/out/include/config/apmbios.h +0 -0
  42. package/bios/seabios/out/include/config/ata/dma.h +0 -0
  43. package/bios/seabios/out/include/config/ata/pio32.h +0 -0
  44. package/bios/seabios/out/include/config/ata.h +0 -0
  45. package/bios/seabios/out/include/config/auto.conf +0 -69
  46. package/bios/seabios/out/include/config/auto.conf.cmd +0 -9
  47. package/bios/seabios/out/include/config/boot.h +0 -0
  48. package/bios/seabios/out/include/config/bootorder.h +0 -0
  49. package/bios/seabios/out/include/config/build/vgabios.h +0 -0
  50. package/bios/seabios/out/include/config/call32/smm.h +0 -0
  51. package/bios/seabios/out/include/config/cdrom/boot.h +0 -0
  52. package/bios/seabios/out/include/config/cdrom/emu.h +0 -0
  53. package/bios/seabios/out/include/config/debug/level.h +0 -0
  54. package/bios/seabios/out/include/config/drives.h +0 -0
  55. package/bios/seabios/out/include/config/entry/extrastack.h +0 -0
  56. package/bios/seabios/out/include/config/esp/scsi.h +0 -0
  57. package/bios/seabios/out/include/config/flash/floppy.h +0 -0
  58. package/bios/seabios/out/include/config/floppy.h +0 -0
  59. package/bios/seabios/out/include/config/fw/romfile/load.h +0 -0
  60. package/bios/seabios/out/include/config/hardware/irq.h +0 -0
  61. package/bios/seabios/out/include/config/kbd/call/int15/4f.h +0 -0
  62. package/bios/seabios/out/include/config/keyboard.h +0 -0
  63. package/bios/seabios/out/include/config/lpt.h +0 -0
  64. package/bios/seabios/out/include/config/lsi/scsi.h +0 -0
  65. package/bios/seabios/out/include/config/malloc/uppermemory.h +0 -0
  66. package/bios/seabios/out/include/config/megasas.h +0 -0
  67. package/bios/seabios/out/include/config/mouse.h +0 -0
  68. package/bios/seabios/out/include/config/mpt/scsi.h +0 -0
  69. package/bios/seabios/out/include/config/mptable.h +0 -0
  70. package/bios/seabios/out/include/config/mtrr/init.h +0 -0
  71. package/bios/seabios/out/include/config/optionroms.h +0 -0
  72. package/bios/seabios/out/include/config/override/pci/id.h +0 -0
  73. package/bios/seabios/out/include/config/pcibios.h +0 -0
  74. package/bios/seabios/out/include/config/pirtable.h +0 -0
  75. package/bios/seabios/out/include/config/pmm.h +0 -0
  76. package/bios/seabios/out/include/config/pmtimer.h +0 -0
  77. package/bios/seabios/out/include/config/pnpbios.h +0 -0
  78. package/bios/seabios/out/include/config/ps2port.h +0 -0
  79. package/bios/seabios/out/include/config/pvscsi.h +0 -0
  80. package/bios/seabios/out/include/config/qemu/hardware.h +0 -0
  81. package/bios/seabios/out/include/config/qemu.h +0 -0
  82. package/bios/seabios/out/include/config/rom/size.h +0 -0
  83. package/bios/seabios/out/include/config/rtc/timer.h +0 -0
  84. package/bios/seabios/out/include/config/s3/resume.h +0 -0
  85. package/bios/seabios/out/include/config/sdcard.h +0 -0
  86. package/bios/seabios/out/include/config/serial.h +0 -0
  87. package/bios/seabios/out/include/config/tcgbios.h +0 -0
  88. package/bios/seabios/out/include/config/threads.h +0 -0
  89. package/bios/seabios/out/include/config/tristate.conf +0 -4
  90. package/bios/seabios/out/include/config/tsc/timer.h +0 -0
  91. package/bios/seabios/out/include/config/use/smm.h +0 -0
  92. package/bios/seabios/out/include/config/vga/allocate/extra/stack.h +0 -0
  93. package/bios/seabios/out/include/config/vga/bochs/stdvga.h +0 -0
  94. package/bios/seabios/out/include/config/vga/bochs.h +0 -0
  95. package/bios/seabios/out/include/config/vga/did.h +0 -0
  96. package/bios/seabios/out/include/config/vga/extra/stack/size.h +0 -0
  97. package/bios/seabios/out/include/config/vga/fixup/asm.h +0 -0
  98. package/bios/seabios/out/include/config/vga/pci.h +0 -0
  99. package/bios/seabios/out/include/config/vga/stdvga/ports.h +0 -0
  100. package/bios/seabios/out/include/config/vga/vbe.h +0 -0
  101. package/bios/seabios/out/include/config/vga/vid.h +0 -0
  102. package/bios/seabios/out/include/config/vgahooks.h +0 -0
  103. package/bios/seabios/out/include/config/virtio/blk.h +0 -0
  104. package/bios/seabios/out/include/config/virtio/scsi.h +0 -0
  105. package/bios/seabios/out/include/config/xen.h +0 -0
  106. package/bios/seabios/out/scripts/kconfig/conf +0 -0
  107. package/bios/seabios/out/scripts/kconfig/conf.o +0 -0
  108. package/bios/seabios/out/scripts/kconfig/zconf.hash.c +0 -289
  109. package/bios/seabios/out/scripts/kconfig/zconf.lex.c +0 -2420
  110. package/bios/seabios/out/scripts/kconfig/zconf.tab.c +0 -2538
  111. package/bios/seabios/out/scripts/kconfig/zconf.tab.o +0 -0
  112. package/bios/seabios/scripts/acpi_extract.py +0 -366
  113. package/bios/seabios/scripts/acpi_extract_preprocess.py +0 -41
  114. package/bios/seabios/scripts/buildrom.py +0 -56
  115. package/bios/seabios/scripts/buildversion.py +0 -134
  116. package/bios/seabios/scripts/checkrom.py +0 -95
  117. package/bios/seabios/scripts/checkstack.py +0 -226
  118. package/bios/seabios/scripts/checksum.py +0 -16
  119. package/bios/seabios/scripts/encodeint.py +0 -21
  120. package/bios/seabios/scripts/gen-offsets.sh +0 -17
  121. package/bios/seabios/scripts/kconfig/.gitignore +0 -22
  122. package/bios/seabios/scripts/kconfig/Makefile +0 -331
  123. package/bios/seabios/scripts/kconfig/POTFILES.in +0 -12
  124. package/bios/seabios/scripts/kconfig/check.sh +0 -13
  125. package/bios/seabios/scripts/kconfig/conf.c +0 -718
  126. package/bios/seabios/scripts/kconfig/confdata.c +0 -1250
  127. package/bios/seabios/scripts/kconfig/expr.c +0 -1168
  128. package/bios/seabios/scripts/kconfig/expr.h +0 -241
  129. package/bios/seabios/scripts/kconfig/gconf.c +0 -1542
  130. package/bios/seabios/scripts/kconfig/gconf.glade +0 -661
  131. package/bios/seabios/scripts/kconfig/images.c +0 -326
  132. package/bios/seabios/scripts/kconfig/kxgettext.c +0 -235
  133. package/bios/seabios/scripts/kconfig/lex.zconf.c +0 -2430
  134. package/bios/seabios/scripts/kconfig/list.h +0 -131
  135. package/bios/seabios/scripts/kconfig/lkc.h +0 -200
  136. package/bios/seabios/scripts/kconfig/lkc_proto.h +0 -57
  137. package/bios/seabios/scripts/kconfig/lxdialog/.gitignore +0 -4
  138. package/bios/seabios/scripts/kconfig/lxdialog/BIG.FAT.WARNING +0 -4
  139. package/bios/seabios/scripts/kconfig/lxdialog/check-lxdialog.sh +0 -87
  140. package/bios/seabios/scripts/kconfig/lxdialog/checklist.c +0 -332
  141. package/bios/seabios/scripts/kconfig/lxdialog/dialog.h +0 -257
  142. package/bios/seabios/scripts/kconfig/lxdialog/inputbox.c +0 -301
  143. package/bios/seabios/scripts/kconfig/lxdialog/menubox.c +0 -437
  144. package/bios/seabios/scripts/kconfig/lxdialog/textbox.c +0 -408
  145. package/bios/seabios/scripts/kconfig/lxdialog/util.c +0 -713
  146. package/bios/seabios/scripts/kconfig/lxdialog/yesno.c +0 -114
  147. package/bios/seabios/scripts/kconfig/mconf.c +0 -1036
  148. package/bios/seabios/scripts/kconfig/menu.c +0 -697
  149. package/bios/seabios/scripts/kconfig/merge_config.sh +0 -150
  150. package/bios/seabios/scripts/kconfig/nconf.c +0 -1556
  151. package/bios/seabios/scripts/kconfig/nconf.gui.c +0 -656
  152. package/bios/seabios/scripts/kconfig/nconf.h +0 -96
  153. package/bios/seabios/scripts/kconfig/qconf.cc +0 -1795
  154. package/bios/seabios/scripts/kconfig/qconf.h +0 -338
  155. package/bios/seabios/scripts/kconfig/streamline_config.pl +0 -647
  156. package/bios/seabios/scripts/kconfig/symbol.c +0 -1373
  157. package/bios/seabios/scripts/kconfig/util.c +0 -157
  158. package/bios/seabios/scripts/kconfig/zconf.gperf +0 -48
  159. package/bios/seabios/scripts/kconfig/zconf.hash.c_shipped +0 -289
  160. package/bios/seabios/scripts/kconfig/zconf.l +0 -363
  161. package/bios/seabios/scripts/kconfig/zconf.lex.c_shipped +0 -2420
  162. package/bios/seabios/scripts/kconfig/zconf.tab.c_shipped +0 -2538
  163. package/bios/seabios/scripts/kconfig/zconf.y +0 -733
  164. package/bios/seabios/scripts/layoutrom.py +0 -705
  165. package/bios/seabios/scripts/python23compat.py +0 -14
  166. package/bios/seabios/scripts/readserial.py +0 -190
  167. package/bios/seabios/scripts/tarball.sh +0 -36
  168. package/bios/seabios/scripts/test-build.sh +0 -90
  169. package/bios/seabios/scripts/transdump.py +0 -53
  170. package/bios/seabios/scripts/vgafixup.py +0 -96
  171. package/bios/seabios/src/Kconfig +0 -579
  172. package/bios/seabios/src/apm.c +0 -215
  173. package/bios/seabios/src/asm-offsets.c +0 -23
  174. package/bios/seabios/src/biosvar.h +0 -130
  175. package/bios/seabios/src/block.c +0 -623
  176. package/bios/seabios/src/block.h +0 -121
  177. package/bios/seabios/src/bmp.c +0 -117
  178. package/bios/seabios/src/boot.c +0 -793
  179. package/bios/seabios/src/bootsplash.c +0 -255
  180. package/bios/seabios/src/bregs.h +0 -80
  181. package/bios/seabios/src/byteorder.h +0 -71
  182. package/bios/seabios/src/cdrom.c +0 -322
  183. package/bios/seabios/src/clock.c +0 -506
  184. package/bios/seabios/src/code16gcc.s +0 -1
  185. package/bios/seabios/src/config.h +0 -108
  186. package/bios/seabios/src/cp437.c +0 -275
  187. package/bios/seabios/src/cp437.h +0 -1
  188. package/bios/seabios/src/disk.c +0 -779
  189. package/bios/seabios/src/e820map.c +0 -152
  190. package/bios/seabios/src/e820map.h +0 -26
  191. package/bios/seabios/src/entryfuncs.S +0 -165
  192. package/bios/seabios/src/farptr.h +0 -208
  193. package/bios/seabios/src/font.c +0 -139
  194. package/bios/seabios/src/fw/acpi-dsdt-cpu-hotplug.dsl +0 -78
  195. package/bios/seabios/src/fw/acpi-dsdt-dbug.dsl +0 -26
  196. package/bios/seabios/src/fw/acpi-dsdt-hpet.dsl +0 -36
  197. package/bios/seabios/src/fw/acpi-dsdt-isa.dsl +0 -102
  198. package/bios/seabios/src/fw/acpi-dsdt-pci-crs.dsl +0 -90
  199. package/bios/seabios/src/fw/acpi-dsdt.dsl +0 -342
  200. package/bios/seabios/src/fw/acpi-dsdt.hex +0 -554
  201. package/bios/seabios/src/fw/acpi.c +0 -685
  202. package/bios/seabios/src/fw/biostables.c +0 -491
  203. package/bios/seabios/src/fw/coreboot.c +0 -569
  204. package/bios/seabios/src/fw/csm.c +0 -347
  205. package/bios/seabios/src/fw/dev-pci.h +0 -52
  206. package/bios/seabios/src/fw/dev-piix.h +0 -29
  207. package/bios/seabios/src/fw/dev-q35.h +0 -52
  208. package/bios/seabios/src/fw/lzmadecode.c +0 -398
  209. package/bios/seabios/src/fw/lzmadecode.h +0 -67
  210. package/bios/seabios/src/fw/mptable.c +0 -197
  211. package/bios/seabios/src/fw/mtrr.c +0 -105
  212. package/bios/seabios/src/fw/multiboot.c +0 -111
  213. package/bios/seabios/src/fw/paravirt.c +0 -624
  214. package/bios/seabios/src/fw/paravirt.h +0 -63
  215. package/bios/seabios/src/fw/pciinit.c +0 -1187
  216. package/bios/seabios/src/fw/pirtable.c +0 -103
  217. package/bios/seabios/src/fw/q35-acpi-dsdt.dsl +0 -450
  218. package/bios/seabios/src/fw/romfile_loader.c +0 -259
  219. package/bios/seabios/src/fw/romfile_loader.h +0 -91
  220. package/bios/seabios/src/fw/shadow.c +0 -208
  221. package/bios/seabios/src/fw/smbios.c +0 -585
  222. package/bios/seabios/src/fw/smm.c +0 -269
  223. package/bios/seabios/src/fw/smp.c +0 -194
  224. package/bios/seabios/src/fw/ssdt-misc.dsl +0 -104
  225. package/bios/seabios/src/fw/ssdt-misc.hex +0 -88
  226. package/bios/seabios/src/fw/ssdt-pcihp.dsl +0 -36
  227. package/bios/seabios/src/fw/ssdt-pcihp.hex +0 -38
  228. package/bios/seabios/src/fw/ssdt-proc.dsl +0 -48
  229. package/bios/seabios/src/fw/ssdt-proc.hex +0 -35
  230. package/bios/seabios/src/fw/xen.c +0 -149
  231. package/bios/seabios/src/fw/xen.h +0 -125
  232. package/bios/seabios/src/gen-defs.h +0 -19
  233. package/bios/seabios/src/hw/ahci.c +0 -697
  234. package/bios/seabios/src/hw/ahci.h +0 -201
  235. package/bios/seabios/src/hw/ata.c +0 -1046
  236. package/bios/seabios/src/hw/ata.h +0 -163
  237. package/bios/seabios/src/hw/blockcmd.c +0 -372
  238. package/bios/seabios/src/hw/blockcmd.h +0 -114
  239. package/bios/seabios/src/hw/dma.c +0 -67
  240. package/bios/seabios/src/hw/esp-scsi.c +0 -241
  241. package/bios/seabios/src/hw/esp-scsi.h +0 -8
  242. package/bios/seabios/src/hw/floppy.c +0 -741
  243. package/bios/seabios/src/hw/lsi-scsi.c +0 -221
  244. package/bios/seabios/src/hw/lsi-scsi.h +0 -8
  245. package/bios/seabios/src/hw/megasas.c +0 -405
  246. package/bios/seabios/src/hw/megasas.h +0 -8
  247. package/bios/seabios/src/hw/mpt-scsi.c +0 -319
  248. package/bios/seabios/src/hw/mpt-scsi.h +0 -8
  249. package/bios/seabios/src/hw/nvme-int.h +0 -199
  250. package/bios/seabios/src/hw/nvme.c +0 -708
  251. package/bios/seabios/src/hw/nvme.h +0 -17
  252. package/bios/seabios/src/hw/pci.c +0 -133
  253. package/bios/seabios/src/hw/pci.h +0 -47
  254. package/bios/seabios/src/hw/pci_ids.h +0 -2632
  255. package/bios/seabios/src/hw/pci_regs.h +0 -556
  256. package/bios/seabios/src/hw/pcidevice.c +0 -192
  257. package/bios/seabios/src/hw/pcidevice.h +0 -76
  258. package/bios/seabios/src/hw/pic.c +0 -115
  259. package/bios/seabios/src/hw/pic.h +0 -60
  260. package/bios/seabios/src/hw/ps2port.c +0 -543
  261. package/bios/seabios/src/hw/ps2port.h +0 -67
  262. package/bios/seabios/src/hw/pvscsi.c +0 -333
  263. package/bios/seabios/src/hw/pvscsi.h +0 -8
  264. package/bios/seabios/src/hw/ramdisk.c +0 -108
  265. package/bios/seabios/src/hw/rtc.c +0 -100
  266. package/bios/seabios/src/hw/rtc.h +0 -75
  267. package/bios/seabios/src/hw/sdcard.c +0 -572
  268. package/bios/seabios/src/hw/serialio.c +0 -113
  269. package/bios/seabios/src/hw/serialio.h +0 -29
  270. package/bios/seabios/src/hw/timer.c +0 -259
  271. package/bios/seabios/src/hw/tpm_drivers.c +0 -636
  272. package/bios/seabios/src/hw/tpm_drivers.h +0 -127
  273. package/bios/seabios/src/hw/usb-ehci.c +0 -650
  274. package/bios/seabios/src/hw/usb-ehci.h +0 -177
  275. package/bios/seabios/src/hw/usb-hid.c +0 -442
  276. package/bios/seabios/src/hw/usb-hid.h +0 -29
  277. package/bios/seabios/src/hw/usb-hub.c +0 -205
  278. package/bios/seabios/src/hw/usb-hub.h +0 -64
  279. package/bios/seabios/src/hw/usb-msc.c +0 -222
  280. package/bios/seabios/src/hw/usb-msc.h +0 -10
  281. package/bios/seabios/src/hw/usb-ohci.c +0 -568
  282. package/bios/seabios/src/hw/usb-ohci.h +0 -144
  283. package/bios/seabios/src/hw/usb-uas.c +0 -289
  284. package/bios/seabios/src/hw/usb-uas.h +0 -9
  285. package/bios/seabios/src/hw/usb-uhci.c +0 -571
  286. package/bios/seabios/src/hw/usb-uhci.h +0 -128
  287. package/bios/seabios/src/hw/usb-xhci.c +0 -1161
  288. package/bios/seabios/src/hw/usb-xhci.h +0 -133
  289. package/bios/seabios/src/hw/usb.c +0 -499
  290. package/bios/seabios/src/hw/usb.h +0 -254
  291. package/bios/seabios/src/hw/virtio-blk.c +0 -211
  292. package/bios/seabios/src/hw/virtio-blk.h +0 -43
  293. package/bios/seabios/src/hw/virtio-pci.c +0 -501
  294. package/bios/seabios/src/hw/virtio-pci.h +0 -151
  295. package/bios/seabios/src/hw/virtio-ring.c +0 -147
  296. package/bios/seabios/src/hw/virtio-ring.h +0 -121
  297. package/bios/seabios/src/hw/virtio-scsi.c +0 -220
  298. package/bios/seabios/src/hw/virtio-scsi.h +0 -47
  299. package/bios/seabios/src/jpeg.c +0 -1055
  300. package/bios/seabios/src/kbd.c +0 -599
  301. package/bios/seabios/src/list.h +0 -91
  302. package/bios/seabios/src/malloc.c +0 -561
  303. package/bios/seabios/src/malloc.h +0 -70
  304. package/bios/seabios/src/memmap.h +0 -21
  305. package/bios/seabios/src/misc.c +0 -195
  306. package/bios/seabios/src/mouse.c +0 -342
  307. package/bios/seabios/src/optionroms.c +0 -475
  308. package/bios/seabios/src/output.c +0 -584
  309. package/bios/seabios/src/output.h +0 -68
  310. package/bios/seabios/src/pcibios.c +0 -241
  311. package/bios/seabios/src/pmm.c +0 -176
  312. package/bios/seabios/src/pnpbios.c +0 -88
  313. package/bios/seabios/src/post.c +0 -337
  314. package/bios/seabios/src/resume.c +0 -157
  315. package/bios/seabios/src/romfile.c +0 -146
  316. package/bios/seabios/src/romfile.h +0 -21
  317. package/bios/seabios/src/romlayout.S +0 -698
  318. package/bios/seabios/src/sercon.c +0 -677
  319. package/bios/seabios/src/serial.c +0 -317
  320. package/bios/seabios/src/sha1.c +0 -147
  321. package/bios/seabios/src/sha1.h +0 -8
  322. package/bios/seabios/src/stacks.c +0 -771
  323. package/bios/seabios/src/stacks.h +0 -68
  324. package/bios/seabios/src/std/LegacyBios.h +0 -985
  325. package/bios/seabios/src/std/acpi.h +0 -323
  326. package/bios/seabios/src/std/bda.h +0 -174
  327. package/bios/seabios/src/std/disk.h +0 -175
  328. package/bios/seabios/src/std/mptable.h +0 -77
  329. package/bios/seabios/src/std/multiboot.h +0 -260
  330. package/bios/seabios/src/std/optionrom.h +0 -59
  331. package/bios/seabios/src/std/pirtable.h +0 -35
  332. package/bios/seabios/src/std/pmm.h +0 -19
  333. package/bios/seabios/src/std/pnpbios.h +0 -24
  334. package/bios/seabios/src/std/smbios.h +0 -167
  335. package/bios/seabios/src/std/tcg.h +0 -554
  336. package/bios/seabios/src/std/vbe.h +0 -156
  337. package/bios/seabios/src/std/vga.h +0 -63
  338. package/bios/seabios/src/string.c +0 -251
  339. package/bios/seabios/src/string.h +0 -31
  340. package/bios/seabios/src/system.c +0 -357
  341. package/bios/seabios/src/tcgbios.c +0 -2014
  342. package/bios/seabios/src/tcgbios.h +0 -19
  343. package/bios/seabios/src/types.h +0 -156
  344. package/bios/seabios/src/util.h +0 -251
  345. package/bios/seabios/src/version.c +0 -5
  346. package/bios/seabios/src/vgahooks.c +0 -355
  347. package/bios/seabios/src/x86.c +0 -23
  348. package/bios/seabios/src/x86.h +0 -277
  349. package/bios/seabios/vgasrc/Kconfig +0 -211
  350. package/bios/seabios/vgasrc/bochsdisplay.c +0 -59
  351. package/bios/seabios/vgasrc/bochsvga.c +0 -447
  352. package/bios/seabios/vgasrc/bochsvga.h +0 -57
  353. package/bios/seabios/vgasrc/cbvga.c +0 -337
  354. package/bios/seabios/vgasrc/clext.c +0 -627
  355. package/bios/seabios/vgasrc/geodevga.c +0 -434
  356. package/bios/seabios/vgasrc/geodevga.h +0 -89
  357. package/bios/seabios/vgasrc/ramfb.c +0 -163
  358. package/bios/seabios/vgasrc/stdvga.c +0 -485
  359. package/bios/seabios/vgasrc/stdvga.h +0 -81
  360. package/bios/seabios/vgasrc/stdvgaio.c +0 -186
  361. package/bios/seabios/vgasrc/stdvgamodes.c +0 -534
  362. package/bios/seabios/vgasrc/swcursor.c +0 -96
  363. package/bios/seabios/vgasrc/vbe.c +0 -432
  364. package/bios/seabios/vgasrc/vgabios.c +0 -1131
  365. package/bios/seabios/vgasrc/vgabios.h +0 -88
  366. package/bios/seabios/vgasrc/vgaentry.S +0 -161
  367. package/bios/seabios/vgasrc/vgafb.c +0 -661
  368. package/bios/seabios/vgasrc/vgafb.h +0 -42
  369. package/bios/seabios/vgasrc/vgafonts.c +0 -785
  370. package/bios/seabios/vgasrc/vgahw.h +0 -152
  371. package/bios/seabios/vgasrc/vgainit.c +0 -202
  372. package/bios/seabios/vgasrc/vgalayout.lds.S +0 -23
  373. package/bios/seabios/vgasrc/vgautil.h +0 -103
  374. package/bios/seabios/vgasrc/vgaversion.c +0 -6
  375. package/bios/seabios-debug.bin +0 -0
  376. package/bios/seabios-debug.config +0 -117
  377. package/bios/seabios.bin +0 -0
  378. package/bios/seabios.config +0 -114
  379. package/bios/vgabios-debug.bin +0 -0
  380. package/bios/vgabios.bin +0 -0
  381. package/build/binaries.js +0 -1
  382. package/build/index-debug.cjs +0 -1
  383. package/build/index-debug.js +0 -1
  384. package/build/index.cjs +0 -1
  385. package/build/index.js +0 -1
  386. package/v86.css +0 -259
@@ -1,1373 +0,0 @@
1
- /*
2
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
3
- * Released under the terms of the GNU GPL v2.0.
4
- */
5
-
6
- #include <ctype.h>
7
- #include <stdlib.h>
8
- #include <string.h>
9
- #include <regex.h>
10
- #include <sys/utsname.h>
11
-
12
- #include "lkc.h"
13
-
14
- struct symbol symbol_yes = {
15
- .name = "y",
16
- .curr = { "y", yes },
17
- .flags = SYMBOL_CONST|SYMBOL_VALID,
18
- }, symbol_mod = {
19
- .name = "m",
20
- .curr = { "m", mod },
21
- .flags = SYMBOL_CONST|SYMBOL_VALID,
22
- }, symbol_no = {
23
- .name = "n",
24
- .curr = { "n", no },
25
- .flags = SYMBOL_CONST|SYMBOL_VALID,
26
- }, symbol_empty = {
27
- .name = "",
28
- .curr = { "", no },
29
- .flags = SYMBOL_VALID,
30
- };
31
-
32
- struct symbol *sym_defconfig_list;
33
- struct symbol *modules_sym;
34
- tristate modules_val;
35
-
36
- struct expr *sym_env_list;
37
-
38
- static void sym_add_default(struct symbol *sym, const char *def)
39
- {
40
- struct property *prop = prop_alloc(P_DEFAULT, sym);
41
-
42
- prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST));
43
- }
44
-
45
- void sym_init(void)
46
- {
47
- struct symbol *sym;
48
- struct utsname uts;
49
- static bool inited = false;
50
-
51
- if (inited)
52
- return;
53
- inited = true;
54
-
55
- uname(&uts);
56
-
57
- sym = sym_lookup("UNAME_RELEASE", 0);
58
- sym->type = S_STRING;
59
- sym->flags |= SYMBOL_AUTO;
60
- sym_add_default(sym, uts.release);
61
- }
62
-
63
- enum symbol_type sym_get_type(struct symbol *sym)
64
- {
65
- enum symbol_type type = sym->type;
66
-
67
- if (type == S_TRISTATE) {
68
- if (sym_is_choice_value(sym) && sym->visible == yes)
69
- type = S_BOOLEAN;
70
- else if (modules_val == no)
71
- type = S_BOOLEAN;
72
- }
73
- return type;
74
- }
75
-
76
- const char *sym_type_name(enum symbol_type type)
77
- {
78
- switch (type) {
79
- case S_BOOLEAN:
80
- return "boolean";
81
- case S_TRISTATE:
82
- return "tristate";
83
- case S_INT:
84
- return "integer";
85
- case S_HEX:
86
- return "hex";
87
- case S_STRING:
88
- return "string";
89
- case S_UNKNOWN:
90
- return "unknown";
91
- case S_OTHER:
92
- break;
93
- }
94
- return "???";
95
- }
96
-
97
- struct property *sym_get_choice_prop(struct symbol *sym)
98
- {
99
- struct property *prop;
100
-
101
- for_all_choices(sym, prop)
102
- return prop;
103
- return NULL;
104
- }
105
-
106
- struct property *sym_get_env_prop(struct symbol *sym)
107
- {
108
- struct property *prop;
109
-
110
- for_all_properties(sym, prop, P_ENV)
111
- return prop;
112
- return NULL;
113
- }
114
-
115
- struct property *sym_get_default_prop(struct symbol *sym)
116
- {
117
- struct property *prop;
118
-
119
- for_all_defaults(sym, prop) {
120
- prop->visible.tri = expr_calc_value(prop->visible.expr);
121
- if (prop->visible.tri != no)
122
- return prop;
123
- }
124
- return NULL;
125
- }
126
-
127
- static struct property *sym_get_range_prop(struct symbol *sym)
128
- {
129
- struct property *prop;
130
-
131
- for_all_properties(sym, prop, P_RANGE) {
132
- prop->visible.tri = expr_calc_value(prop->visible.expr);
133
- if (prop->visible.tri != no)
134
- return prop;
135
- }
136
- return NULL;
137
- }
138
-
139
- static long long sym_get_range_val(struct symbol *sym, int base)
140
- {
141
- sym_calc_value(sym);
142
- switch (sym->type) {
143
- case S_INT:
144
- base = 10;
145
- break;
146
- case S_HEX:
147
- base = 16;
148
- break;
149
- default:
150
- break;
151
- }
152
- return strtoll(sym->curr.val, NULL, base);
153
- }
154
-
155
- static void sym_validate_range(struct symbol *sym)
156
- {
157
- struct property *prop;
158
- int base;
159
- long long val, val2;
160
- char str[64];
161
-
162
- switch (sym->type) {
163
- case S_INT:
164
- base = 10;
165
- break;
166
- case S_HEX:
167
- base = 16;
168
- break;
169
- default:
170
- return;
171
- }
172
- prop = sym_get_range_prop(sym);
173
- if (!prop)
174
- return;
175
- val = strtoll(sym->curr.val, NULL, base);
176
- val2 = sym_get_range_val(prop->expr->left.sym, base);
177
- if (val >= val2) {
178
- val2 = sym_get_range_val(prop->expr->right.sym, base);
179
- if (val <= val2)
180
- return;
181
- }
182
- if (sym->type == S_INT)
183
- sprintf(str, "%lld", val2);
184
- else
185
- sprintf(str, "0x%llx", val2);
186
- sym->curr.val = strdup(str);
187
- }
188
-
189
- static void sym_calc_visibility(struct symbol *sym)
190
- {
191
- struct property *prop;
192
- tristate tri;
193
-
194
- /* any prompt visible? */
195
- tri = no;
196
- for_all_prompts(sym, prop) {
197
- prop->visible.tri = expr_calc_value(prop->visible.expr);
198
- tri = EXPR_OR(tri, prop->visible.tri);
199
- }
200
- if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))
201
- tri = yes;
202
- if (sym->visible != tri) {
203
- sym->visible = tri;
204
- sym_set_changed(sym);
205
- }
206
- if (sym_is_choice_value(sym))
207
- return;
208
- /* defaulting to "yes" if no explicit "depends on" are given */
209
- tri = yes;
210
- if (sym->dir_dep.expr)
211
- tri = expr_calc_value(sym->dir_dep.expr);
212
- if (tri == mod)
213
- tri = yes;
214
- if (sym->dir_dep.tri != tri) {
215
- sym->dir_dep.tri = tri;
216
- sym_set_changed(sym);
217
- }
218
- tri = no;
219
- if (sym->rev_dep.expr)
220
- tri = expr_calc_value(sym->rev_dep.expr);
221
- if (tri == mod && sym_get_type(sym) == S_BOOLEAN)
222
- tri = yes;
223
- if (sym->rev_dep.tri != tri) {
224
- sym->rev_dep.tri = tri;
225
- sym_set_changed(sym);
226
- }
227
- }
228
-
229
- /*
230
- * Find the default symbol for a choice.
231
- * First try the default values for the choice symbol
232
- * Next locate the first visible choice value
233
- * Return NULL if none was found
234
- */
235
- struct symbol *sym_choice_default(struct symbol *sym)
236
- {
237
- struct symbol *def_sym;
238
- struct property *prop;
239
- struct expr *e;
240
-
241
- /* any of the defaults visible? */
242
- for_all_defaults(sym, prop) {
243
- prop->visible.tri = expr_calc_value(prop->visible.expr);
244
- if (prop->visible.tri == no)
245
- continue;
246
- def_sym = prop_get_symbol(prop);
247
- if (def_sym->visible != no)
248
- return def_sym;
249
- }
250
-
251
- /* just get the first visible value */
252
- prop = sym_get_choice_prop(sym);
253
- expr_list_for_each_sym(prop->expr, e, def_sym)
254
- if (def_sym->visible != no)
255
- return def_sym;
256
-
257
- /* failed to locate any defaults */
258
- return NULL;
259
- }
260
-
261
- static struct symbol *sym_calc_choice(struct symbol *sym)
262
- {
263
- struct symbol *def_sym;
264
- struct property *prop;
265
- struct expr *e;
266
- int flags;
267
-
268
- /* first calculate all choice values' visibilities */
269
- flags = sym->flags;
270
- prop = sym_get_choice_prop(sym);
271
- expr_list_for_each_sym(prop->expr, e, def_sym) {
272
- sym_calc_visibility(def_sym);
273
- if (def_sym->visible != no)
274
- flags &= def_sym->flags;
275
- }
276
-
277
- sym->flags &= flags | ~SYMBOL_DEF_USER;
278
-
279
- /* is the user choice visible? */
280
- def_sym = sym->def[S_DEF_USER].val;
281
- if (def_sym && def_sym->visible != no)
282
- return def_sym;
283
-
284
- def_sym = sym_choice_default(sym);
285
-
286
- if (def_sym == NULL)
287
- /* no choice? reset tristate value */
288
- sym->curr.tri = no;
289
-
290
- return def_sym;
291
- }
292
-
293
- void sym_calc_value(struct symbol *sym)
294
- {
295
- struct symbol_value newval, oldval;
296
- struct property *prop;
297
- struct expr *e;
298
-
299
- if (!sym)
300
- return;
301
-
302
- if (sym->flags & SYMBOL_VALID)
303
- return;
304
-
305
- if (sym_is_choice_value(sym) &&
306
- sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES) {
307
- sym->flags &= ~SYMBOL_NEED_SET_CHOICE_VALUES;
308
- prop = sym_get_choice_prop(sym);
309
- sym_calc_value(prop_get_symbol(prop));
310
- }
311
-
312
- sym->flags |= SYMBOL_VALID;
313
-
314
- oldval = sym->curr;
315
-
316
- switch (sym->type) {
317
- case S_INT:
318
- case S_HEX:
319
- case S_STRING:
320
- newval = symbol_empty.curr;
321
- break;
322
- case S_BOOLEAN:
323
- case S_TRISTATE:
324
- newval = symbol_no.curr;
325
- break;
326
- default:
327
- sym->curr.val = sym->name;
328
- sym->curr.tri = no;
329
- return;
330
- }
331
- if (!sym_is_choice_value(sym))
332
- sym->flags &= ~SYMBOL_WRITE;
333
-
334
- sym_calc_visibility(sym);
335
-
336
- /* set default if recursively called */
337
- sym->curr = newval;
338
-
339
- switch (sym_get_type(sym)) {
340
- case S_BOOLEAN:
341
- case S_TRISTATE:
342
- if (sym_is_choice_value(sym) && sym->visible == yes) {
343
- prop = sym_get_choice_prop(sym);
344
- newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no;
345
- } else {
346
- if (sym->visible != no) {
347
- /* if the symbol is visible use the user value
348
- * if available, otherwise try the default value
349
- */
350
- sym->flags |= SYMBOL_WRITE;
351
- if (sym_has_value(sym)) {
352
- newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri,
353
- sym->visible);
354
- goto calc_newval;
355
- }
356
- }
357
- if (sym->rev_dep.tri != no)
358
- sym->flags |= SYMBOL_WRITE;
359
- if (!sym_is_choice(sym)) {
360
- prop = sym_get_default_prop(sym);
361
- if (prop) {
362
- sym->flags |= SYMBOL_WRITE;
363
- newval.tri = EXPR_AND(expr_calc_value(prop->expr),
364
- prop->visible.tri);
365
- }
366
- }
367
- calc_newval:
368
- if (sym->dir_dep.tri == no && sym->rev_dep.tri != no) {
369
- struct expr *e;
370
- e = expr_simplify_unmet_dep(sym->rev_dep.expr,
371
- sym->dir_dep.expr);
372
- fprintf(stderr, "warning: (");
373
- expr_fprint(e, stderr);
374
- fprintf(stderr, ") selects %s which has unmet direct dependencies (",
375
- sym->name);
376
- expr_fprint(sym->dir_dep.expr, stderr);
377
- fprintf(stderr, ")\n");
378
- expr_free(e);
379
- }
380
- newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
381
- }
382
- if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
383
- newval.tri = yes;
384
- break;
385
- case S_STRING:
386
- case S_HEX:
387
- case S_INT:
388
- if (sym->visible != no) {
389
- sym->flags |= SYMBOL_WRITE;
390
- if (sym_has_value(sym)) {
391
- newval.val = sym->def[S_DEF_USER].val;
392
- break;
393
- }
394
- }
395
- prop = sym_get_default_prop(sym);
396
- if (prop) {
397
- struct symbol *ds = prop_get_symbol(prop);
398
- if (ds) {
399
- sym->flags |= SYMBOL_WRITE;
400
- sym_calc_value(ds);
401
- newval.val = ds->curr.val;
402
- }
403
- }
404
- break;
405
- default:
406
- ;
407
- }
408
-
409
- sym->curr = newval;
410
- if (sym_is_choice(sym) && newval.tri == yes)
411
- sym->curr.val = sym_calc_choice(sym);
412
- sym_validate_range(sym);
413
-
414
- if (memcmp(&oldval, &sym->curr, sizeof(oldval))) {
415
- sym_set_changed(sym);
416
- if (modules_sym == sym) {
417
- sym_set_all_changed();
418
- modules_val = modules_sym->curr.tri;
419
- }
420
- }
421
-
422
- if (sym_is_choice(sym)) {
423
- struct symbol *choice_sym;
424
-
425
- prop = sym_get_choice_prop(sym);
426
- expr_list_for_each_sym(prop->expr, e, choice_sym) {
427
- if ((sym->flags & SYMBOL_WRITE) &&
428
- choice_sym->visible != no)
429
- choice_sym->flags |= SYMBOL_WRITE;
430
- if (sym->flags & SYMBOL_CHANGED)
431
- sym_set_changed(choice_sym);
432
- }
433
- }
434
-
435
- if (sym->flags & SYMBOL_AUTO)
436
- sym->flags &= ~SYMBOL_WRITE;
437
-
438
- if (sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES)
439
- set_all_choice_values(sym);
440
- }
441
-
442
- void sym_clear_all_valid(void)
443
- {
444
- struct symbol *sym;
445
- int i;
446
-
447
- for_all_symbols(i, sym)
448
- sym->flags &= ~SYMBOL_VALID;
449
- sym_add_change_count(1);
450
- if (modules_sym)
451
- sym_calc_value(modules_sym);
452
- }
453
-
454
- void sym_set_changed(struct symbol *sym)
455
- {
456
- struct property *prop;
457
-
458
- sym->flags |= SYMBOL_CHANGED;
459
- for (prop = sym->prop; prop; prop = prop->next) {
460
- if (prop->menu)
461
- prop->menu->flags |= MENU_CHANGED;
462
- }
463
- }
464
-
465
- void sym_set_all_changed(void)
466
- {
467
- struct symbol *sym;
468
- int i;
469
-
470
- for_all_symbols(i, sym)
471
- sym_set_changed(sym);
472
- }
473
-
474
- bool sym_tristate_within_range(struct symbol *sym, tristate val)
475
- {
476
- int type = sym_get_type(sym);
477
-
478
- if (sym->visible == no)
479
- return false;
480
-
481
- if (type != S_BOOLEAN && type != S_TRISTATE)
482
- return false;
483
-
484
- if (type == S_BOOLEAN && val == mod)
485
- return false;
486
- if (sym->visible <= sym->rev_dep.tri)
487
- return false;
488
- if (sym_is_choice_value(sym) && sym->visible == yes)
489
- return val == yes;
490
- return val >= sym->rev_dep.tri && val <= sym->visible;
491
- }
492
-
493
- bool sym_set_tristate_value(struct symbol *sym, tristate val)
494
- {
495
- tristate oldval = sym_get_tristate_value(sym);
496
-
497
- if (oldval != val && !sym_tristate_within_range(sym, val))
498
- return false;
499
-
500
- if (!(sym->flags & SYMBOL_DEF_USER)) {
501
- sym->flags |= SYMBOL_DEF_USER;
502
- sym_set_changed(sym);
503
- }
504
- /*
505
- * setting a choice value also resets the new flag of the choice
506
- * symbol and all other choice values.
507
- */
508
- if (sym_is_choice_value(sym) && val == yes) {
509
- struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
510
- struct property *prop;
511
- struct expr *e;
512
-
513
- cs->def[S_DEF_USER].val = sym;
514
- cs->flags |= SYMBOL_DEF_USER;
515
- prop = sym_get_choice_prop(cs);
516
- for (e = prop->expr; e; e = e->left.expr) {
517
- if (e->right.sym->visible != no)
518
- e->right.sym->flags |= SYMBOL_DEF_USER;
519
- }
520
- }
521
-
522
- sym->def[S_DEF_USER].tri = val;
523
- if (oldval != val)
524
- sym_clear_all_valid();
525
-
526
- return true;
527
- }
528
-
529
- tristate sym_toggle_tristate_value(struct symbol *sym)
530
- {
531
- tristate oldval, newval;
532
-
533
- oldval = newval = sym_get_tristate_value(sym);
534
- do {
535
- switch (newval) {
536
- case no:
537
- newval = mod;
538
- break;
539
- case mod:
540
- newval = yes;
541
- break;
542
- case yes:
543
- newval = no;
544
- break;
545
- }
546
- if (sym_set_tristate_value(sym, newval))
547
- break;
548
- } while (oldval != newval);
549
- return newval;
550
- }
551
-
552
- bool sym_string_valid(struct symbol *sym, const char *str)
553
- {
554
- signed char ch;
555
-
556
- switch (sym->type) {
557
- case S_STRING:
558
- return true;
559
- case S_INT:
560
- ch = *str++;
561
- if (ch == '-')
562
- ch = *str++;
563
- if (!isdigit(ch))
564
- return false;
565
- if (ch == '0' && *str != 0)
566
- return false;
567
- while ((ch = *str++)) {
568
- if (!isdigit(ch))
569
- return false;
570
- }
571
- return true;
572
- case S_HEX:
573
- if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
574
- str += 2;
575
- ch = *str++;
576
- do {
577
- if (!isxdigit(ch))
578
- return false;
579
- } while ((ch = *str++));
580
- return true;
581
- case S_BOOLEAN:
582
- case S_TRISTATE:
583
- switch (str[0]) {
584
- case 'y': case 'Y':
585
- case 'm': case 'M':
586
- case 'n': case 'N':
587
- return true;
588
- }
589
- return false;
590
- default:
591
- return false;
592
- }
593
- }
594
-
595
- bool sym_string_within_range(struct symbol *sym, const char *str)
596
- {
597
- struct property *prop;
598
- long long val;
599
-
600
- switch (sym->type) {
601
- case S_STRING:
602
- return sym_string_valid(sym, str);
603
- case S_INT:
604
- if (!sym_string_valid(sym, str))
605
- return false;
606
- prop = sym_get_range_prop(sym);
607
- if (!prop)
608
- return true;
609
- val = strtoll(str, NULL, 10);
610
- return val >= sym_get_range_val(prop->expr->left.sym, 10) &&
611
- val <= sym_get_range_val(prop->expr->right.sym, 10);
612
- case S_HEX:
613
- if (!sym_string_valid(sym, str))
614
- return false;
615
- prop = sym_get_range_prop(sym);
616
- if (!prop)
617
- return true;
618
- val = strtoll(str, NULL, 16);
619
- return val >= sym_get_range_val(prop->expr->left.sym, 16) &&
620
- val <= sym_get_range_val(prop->expr->right.sym, 16);
621
- case S_BOOLEAN:
622
- case S_TRISTATE:
623
- switch (str[0]) {
624
- case 'y': case 'Y':
625
- return sym_tristate_within_range(sym, yes);
626
- case 'm': case 'M':
627
- return sym_tristate_within_range(sym, mod);
628
- case 'n': case 'N':
629
- return sym_tristate_within_range(sym, no);
630
- }
631
- return false;
632
- default:
633
- return false;
634
- }
635
- }
636
-
637
- bool sym_set_string_value(struct symbol *sym, const char *newval)
638
- {
639
- const char *oldval;
640
- char *val;
641
- int size;
642
-
643
- switch (sym->type) {
644
- case S_BOOLEAN:
645
- case S_TRISTATE:
646
- switch (newval[0]) {
647
- case 'y': case 'Y':
648
- return sym_set_tristate_value(sym, yes);
649
- case 'm': case 'M':
650
- return sym_set_tristate_value(sym, mod);
651
- case 'n': case 'N':
652
- return sym_set_tristate_value(sym, no);
653
- }
654
- return false;
655
- default:
656
- ;
657
- }
658
-
659
- if (!sym_string_within_range(sym, newval))
660
- return false;
661
-
662
- if (!(sym->flags & SYMBOL_DEF_USER)) {
663
- sym->flags |= SYMBOL_DEF_USER;
664
- sym_set_changed(sym);
665
- }
666
-
667
- oldval = sym->def[S_DEF_USER].val;
668
- size = strlen(newval) + 1;
669
- if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) {
670
- size += 2;
671
- sym->def[S_DEF_USER].val = val = xmalloc(size);
672
- *val++ = '0';
673
- *val++ = 'x';
674
- } else if (!oldval || strcmp(oldval, newval))
675
- sym->def[S_DEF_USER].val = val = xmalloc(size);
676
- else
677
- return true;
678
-
679
- strcpy(val, newval);
680
- free((void *)oldval);
681
- sym_clear_all_valid();
682
-
683
- return true;
684
- }
685
-
686
- /*
687
- * Find the default value associated to a symbol.
688
- * For tristate symbol handle the modules=n case
689
- * in which case "m" becomes "y".
690
- * If the symbol does not have any default then fallback
691
- * to the fixed default values.
692
- */
693
- const char *sym_get_string_default(struct symbol *sym)
694
- {
695
- struct property *prop;
696
- struct symbol *ds;
697
- const char *str;
698
- tristate val;
699
-
700
- sym_calc_visibility(sym);
701
- sym_calc_value(modules_sym);
702
- val = symbol_no.curr.tri;
703
- str = symbol_empty.curr.val;
704
-
705
- /* If symbol has a default value look it up */
706
- prop = sym_get_default_prop(sym);
707
- if (prop != NULL) {
708
- switch (sym->type) {
709
- case S_BOOLEAN:
710
- case S_TRISTATE:
711
- /* The visibility may limit the value from yes => mod */
712
- val = EXPR_AND(expr_calc_value(prop->expr), prop->visible.tri);
713
- break;
714
- default:
715
- /*
716
- * The following fails to handle the situation
717
- * where a default value is further limited by
718
- * the valid range.
719
- */
720
- ds = prop_get_symbol(prop);
721
- if (ds != NULL) {
722
- sym_calc_value(ds);
723
- str = (const char *)ds->curr.val;
724
- }
725
- }
726
- }
727
-
728
- /* Handle select statements */
729
- val = EXPR_OR(val, sym->rev_dep.tri);
730
-
731
- /* transpose mod to yes if modules are not enabled */
732
- if (val == mod)
733
- if (!sym_is_choice_value(sym) && modules_sym->curr.tri == no)
734
- val = yes;
735
-
736
- /* transpose mod to yes if type is bool */
737
- if (sym->type == S_BOOLEAN && val == mod)
738
- val = yes;
739
-
740
- switch (sym->type) {
741
- case S_BOOLEAN:
742
- case S_TRISTATE:
743
- switch (val) {
744
- case no: return "n";
745
- case mod: return "m";
746
- case yes: return "y";
747
- }
748
- case S_INT:
749
- case S_HEX:
750
- return str;
751
- case S_STRING:
752
- return str;
753
- case S_OTHER:
754
- case S_UNKNOWN:
755
- break;
756
- }
757
- return "";
758
- }
759
-
760
- const char *sym_get_string_value(struct symbol *sym)
761
- {
762
- tristate val;
763
-
764
- switch (sym->type) {
765
- case S_BOOLEAN:
766
- case S_TRISTATE:
767
- val = sym_get_tristate_value(sym);
768
- switch (val) {
769
- case no:
770
- return "n";
771
- case mod:
772
- sym_calc_value(modules_sym);
773
- return (modules_sym->curr.tri == no) ? "n" : "m";
774
- case yes:
775
- return "y";
776
- }
777
- break;
778
- default:
779
- ;
780
- }
781
- return (const char *)sym->curr.val;
782
- }
783
-
784
- bool sym_is_changable(struct symbol *sym)
785
- {
786
- return sym->visible > sym->rev_dep.tri;
787
- }
788
-
789
- static unsigned strhash(const char *s)
790
- {
791
- /* fnv32 hash */
792
- unsigned hash = 2166136261U;
793
- for (; *s; s++)
794
- hash = (hash ^ *s) * 0x01000193;
795
- return hash;
796
- }
797
-
798
- struct symbol *sym_lookup(const char *name, int flags)
799
- {
800
- struct symbol *symbol;
801
- char *new_name;
802
- int hash;
803
-
804
- if (name) {
805
- if (name[0] && !name[1]) {
806
- switch (name[0]) {
807
- case 'y': return &symbol_yes;
808
- case 'm': return &symbol_mod;
809
- case 'n': return &symbol_no;
810
- }
811
- }
812
- hash = strhash(name) % SYMBOL_HASHSIZE;
813
-
814
- for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
815
- if (symbol->name &&
816
- !strcmp(symbol->name, name) &&
817
- (flags ? symbol->flags & flags
818
- : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE))))
819
- return symbol;
820
- }
821
- new_name = strdup(name);
822
- } else {
823
- new_name = NULL;
824
- hash = 0;
825
- }
826
-
827
- symbol = xmalloc(sizeof(*symbol));
828
- memset(symbol, 0, sizeof(*symbol));
829
- symbol->name = new_name;
830
- symbol->type = S_UNKNOWN;
831
- symbol->flags |= flags;
832
-
833
- symbol->next = symbol_hash[hash];
834
- symbol_hash[hash] = symbol;
835
-
836
- return symbol;
837
- }
838
-
839
- struct symbol *sym_find(const char *name)
840
- {
841
- struct symbol *symbol = NULL;
842
- int hash = 0;
843
-
844
- if (!name)
845
- return NULL;
846
-
847
- if (name[0] && !name[1]) {
848
- switch (name[0]) {
849
- case 'y': return &symbol_yes;
850
- case 'm': return &symbol_mod;
851
- case 'n': return &symbol_no;
852
- }
853
- }
854
- hash = strhash(name) % SYMBOL_HASHSIZE;
855
-
856
- for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
857
- if (symbol->name &&
858
- !strcmp(symbol->name, name) &&
859
- !(symbol->flags & SYMBOL_CONST))
860
- break;
861
- }
862
-
863
- return symbol;
864
- }
865
-
866
- /*
867
- * Expand symbol's names embedded in the string given in argument. Symbols'
868
- * name to be expanded shall be prefixed by a '$'. Unknown symbol expands to
869
- * the empty string.
870
- */
871
- const char *sym_expand_string_value(const char *in)
872
- {
873
- const char *src;
874
- char *res;
875
- size_t reslen;
876
-
877
- reslen = strlen(in) + 1;
878
- res = xmalloc(reslen);
879
- res[0] = '\0';
880
-
881
- while ((src = strchr(in, '$'))) {
882
- char *p, name[SYMBOL_MAXLENGTH];
883
- const char *symval = "";
884
- struct symbol *sym;
885
- size_t newlen;
886
-
887
- strncat(res, in, src - in);
888
- src++;
889
-
890
- p = name;
891
- while (isalnum(*src) || *src == '_')
892
- *p++ = *src++;
893
- *p = '\0';
894
-
895
- sym = sym_find(name);
896
- if (sym != NULL) {
897
- sym_calc_value(sym);
898
- symval = sym_get_string_value(sym);
899
- }
900
-
901
- newlen = strlen(res) + strlen(symval) + strlen(src) + 1;
902
- if (newlen > reslen) {
903
- reslen = newlen;
904
- res = realloc(res, reslen);
905
- }
906
-
907
- strcat(res, symval);
908
- in = src;
909
- }
910
- strcat(res, in);
911
-
912
- return res;
913
- }
914
-
915
- const char *sym_escape_string_value(const char *in)
916
- {
917
- const char *p;
918
- size_t reslen;
919
- char *res;
920
- size_t l;
921
-
922
- reslen = strlen(in) + strlen("\"\"") + 1;
923
-
924
- p = in;
925
- for (;;) {
926
- l = strcspn(p, "\"\\");
927
- p += l;
928
-
929
- if (p[0] == '\0')
930
- break;
931
-
932
- reslen++;
933
- p++;
934
- }
935
-
936
- res = xmalloc(reslen);
937
- res[0] = '\0';
938
-
939
- strcat(res, "\"");
940
-
941
- p = in;
942
- for (;;) {
943
- l = strcspn(p, "\"\\");
944
- strncat(res, p, l);
945
- p += l;
946
-
947
- if (p[0] == '\0')
948
- break;
949
-
950
- strcat(res, "\\");
951
- strncat(res, p++, 1);
952
- }
953
-
954
- strcat(res, "\"");
955
- return res;
956
- }
957
-
958
- struct sym_match {
959
- struct symbol *sym;
960
- off_t so, eo;
961
- };
962
-
963
- /* Compare matched symbols as thus:
964
- * - first, symbols that match exactly
965
- * - then, alphabetical sort
966
- */
967
- static int sym_rel_comp(const void *sym1, const void *sym2)
968
- {
969
- const struct sym_match *s1 = sym1;
970
- const struct sym_match *s2 = sym2;
971
- int exact1, exact2;
972
-
973
- /* Exact match:
974
- * - if matched length on symbol s1 is the length of that symbol,
975
- * then this symbol should come first;
976
- * - if matched length on symbol s2 is the length of that symbol,
977
- * then this symbol should come first.
978
- * Note: since the search can be a regexp, both symbols may match
979
- * exactly; if this is the case, we can't decide which comes first,
980
- * and we fallback to sorting alphabetically.
981
- */
982
- exact1 = (s1->eo - s1->so) == strlen(s1->sym->name);
983
- exact2 = (s2->eo - s2->so) == strlen(s2->sym->name);
984
- if (exact1 && !exact2)
985
- return -1;
986
- if (!exact1 && exact2)
987
- return 1;
988
-
989
- /* As a fallback, sort symbols alphabetically */
990
- return strcmp(s1->sym->name, s2->sym->name);
991
- }
992
-
993
- struct symbol **sym_re_search(const char *pattern)
994
- {
995
- struct symbol *sym, **sym_arr = NULL;
996
- struct sym_match *sym_match_arr = NULL;
997
- int i, cnt, size;
998
- regex_t re;
999
- regmatch_t match[1];
1000
-
1001
- cnt = size = 0;
1002
- /* Skip if empty */
1003
- if (strlen(pattern) == 0)
1004
- return NULL;
1005
- if (regcomp(&re, pattern, REG_EXTENDED|REG_ICASE))
1006
- return NULL;
1007
-
1008
- for_all_symbols(i, sym) {
1009
- if (sym->flags & SYMBOL_CONST || !sym->name)
1010
- continue;
1011
- if (regexec(&re, sym->name, 1, match, 0))
1012
- continue;
1013
- if (cnt >= size) {
1014
- void *tmp;
1015
- size += 16;
1016
- tmp = realloc(sym_match_arr, size * sizeof(struct sym_match));
1017
- if (!tmp)
1018
- goto sym_re_search_free;
1019
- sym_match_arr = tmp;
1020
- }
1021
- sym_calc_value(sym);
1022
- /* As regexec returned 0, we know we have a match, so
1023
- * we can use match[0].rm_[se]o without further checks
1024
- */
1025
- sym_match_arr[cnt].so = match[0].rm_so;
1026
- sym_match_arr[cnt].eo = match[0].rm_eo;
1027
- sym_match_arr[cnt++].sym = sym;
1028
- }
1029
- if (sym_match_arr) {
1030
- qsort(sym_match_arr, cnt, sizeof(struct sym_match), sym_rel_comp);
1031
- sym_arr = malloc((cnt+1) * sizeof(struct symbol));
1032
- if (!sym_arr)
1033
- goto sym_re_search_free;
1034
- for (i = 0; i < cnt; i++)
1035
- sym_arr[i] = sym_match_arr[i].sym;
1036
- sym_arr[cnt] = NULL;
1037
- }
1038
- sym_re_search_free:
1039
- /* sym_match_arr can be NULL if no match, but free(NULL) is OK */
1040
- free(sym_match_arr);
1041
- regfree(&re);
1042
-
1043
- return sym_arr;
1044
- }
1045
-
1046
- /*
1047
- * When we check for recursive dependencies we use a stack to save
1048
- * current state so we can print out relevant info to user.
1049
- * The entries are located on the call stack so no need to free memory.
1050
- * Note insert() remove() must always match to properly clear the stack.
1051
- */
1052
- static struct dep_stack {
1053
- struct dep_stack *prev, *next;
1054
- struct symbol *sym;
1055
- struct property *prop;
1056
- struct expr *expr;
1057
- } *check_top;
1058
-
1059
- static void dep_stack_insert(struct dep_stack *stack, struct symbol *sym)
1060
- {
1061
- memset(stack, 0, sizeof(*stack));
1062
- if (check_top)
1063
- check_top->next = stack;
1064
- stack->prev = check_top;
1065
- stack->sym = sym;
1066
- check_top = stack;
1067
- }
1068
-
1069
- static void dep_stack_remove(void)
1070
- {
1071
- check_top = check_top->prev;
1072
- if (check_top)
1073
- check_top->next = NULL;
1074
- }
1075
-
1076
- /*
1077
- * Called when we have detected a recursive dependency.
1078
- * check_top point to the top of the stact so we use
1079
- * the ->prev pointer to locate the bottom of the stack.
1080
- */
1081
- static void sym_check_print_recursive(struct symbol *last_sym)
1082
- {
1083
- struct dep_stack *stack;
1084
- struct symbol *sym, *next_sym;
1085
- struct menu *menu = NULL;
1086
- struct property *prop;
1087
- struct dep_stack cv_stack;
1088
-
1089
- if (sym_is_choice_value(last_sym)) {
1090
- dep_stack_insert(&cv_stack, last_sym);
1091
- last_sym = prop_get_symbol(sym_get_choice_prop(last_sym));
1092
- }
1093
-
1094
- for (stack = check_top; stack != NULL; stack = stack->prev)
1095
- if (stack->sym == last_sym)
1096
- break;
1097
- if (!stack) {
1098
- fprintf(stderr, "unexpected recursive dependency error\n");
1099
- return;
1100
- }
1101
-
1102
- for (; stack; stack = stack->next) {
1103
- sym = stack->sym;
1104
- next_sym = stack->next ? stack->next->sym : last_sym;
1105
- prop = stack->prop;
1106
- if (prop == NULL)
1107
- prop = stack->sym->prop;
1108
-
1109
- /* for choice values find the menu entry (used below) */
1110
- if (sym_is_choice(sym) || sym_is_choice_value(sym)) {
1111
- for (prop = sym->prop; prop; prop = prop->next) {
1112
- menu = prop->menu;
1113
- if (prop->menu)
1114
- break;
1115
- }
1116
- }
1117
- if (stack->sym == last_sym)
1118
- fprintf(stderr, "%s:%d:error: recursive dependency detected!\n",
1119
- prop->file->name, prop->lineno);
1120
- if (stack->expr) {
1121
- fprintf(stderr, "%s:%d:\tsymbol %s %s value contains %s\n",
1122
- prop->file->name, prop->lineno,
1123
- sym->name ? sym->name : "<choice>",
1124
- prop_get_type_name(prop->type),
1125
- next_sym->name ? next_sym->name : "<choice>");
1126
- } else if (stack->prop) {
1127
- fprintf(stderr, "%s:%d:\tsymbol %s depends on %s\n",
1128
- prop->file->name, prop->lineno,
1129
- sym->name ? sym->name : "<choice>",
1130
- next_sym->name ? next_sym->name : "<choice>");
1131
- } else if (sym_is_choice(sym)) {
1132
- fprintf(stderr, "%s:%d:\tchoice %s contains symbol %s\n",
1133
- menu->file->name, menu->lineno,
1134
- sym->name ? sym->name : "<choice>",
1135
- next_sym->name ? next_sym->name : "<choice>");
1136
- } else if (sym_is_choice_value(sym)) {
1137
- fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n",
1138
- menu->file->name, menu->lineno,
1139
- sym->name ? sym->name : "<choice>",
1140
- next_sym->name ? next_sym->name : "<choice>");
1141
- } else {
1142
- fprintf(stderr, "%s:%d:\tsymbol %s is selected by %s\n",
1143
- prop->file->name, prop->lineno,
1144
- sym->name ? sym->name : "<choice>",
1145
- next_sym->name ? next_sym->name : "<choice>");
1146
- }
1147
- }
1148
-
1149
- if (check_top == &cv_stack)
1150
- dep_stack_remove();
1151
- }
1152
-
1153
- static struct symbol *sym_check_expr_deps(struct expr *e)
1154
- {
1155
- struct symbol *sym;
1156
-
1157
- if (!e)
1158
- return NULL;
1159
- switch (e->type) {
1160
- case E_OR:
1161
- case E_AND:
1162
- sym = sym_check_expr_deps(e->left.expr);
1163
- if (sym)
1164
- return sym;
1165
- return sym_check_expr_deps(e->right.expr);
1166
- case E_NOT:
1167
- return sym_check_expr_deps(e->left.expr);
1168
- case E_EQUAL:
1169
- case E_UNEQUAL:
1170
- sym = sym_check_deps(e->left.sym);
1171
- if (sym)
1172
- return sym;
1173
- return sym_check_deps(e->right.sym);
1174
- case E_SYMBOL:
1175
- return sym_check_deps(e->left.sym);
1176
- default:
1177
- break;
1178
- }
1179
- printf("Oops! How to check %d?\n", e->type);
1180
- return NULL;
1181
- }
1182
-
1183
- /* return NULL when dependencies are OK */
1184
- static struct symbol *sym_check_sym_deps(struct symbol *sym)
1185
- {
1186
- struct symbol *sym2;
1187
- struct property *prop;
1188
- struct dep_stack stack;
1189
-
1190
- dep_stack_insert(&stack, sym);
1191
-
1192
- sym2 = sym_check_expr_deps(sym->rev_dep.expr);
1193
- if (sym2)
1194
- goto out;
1195
-
1196
- for (prop = sym->prop; prop; prop = prop->next) {
1197
- if (prop->type == P_CHOICE || prop->type == P_SELECT)
1198
- continue;
1199
- stack.prop = prop;
1200
- sym2 = sym_check_expr_deps(prop->visible.expr);
1201
- if (sym2)
1202
- break;
1203
- if (prop->type != P_DEFAULT || sym_is_choice(sym))
1204
- continue;
1205
- stack.expr = prop->expr;
1206
- sym2 = sym_check_expr_deps(prop->expr);
1207
- if (sym2)
1208
- break;
1209
- stack.expr = NULL;
1210
- }
1211
-
1212
- out:
1213
- dep_stack_remove();
1214
-
1215
- return sym2;
1216
- }
1217
-
1218
- static struct symbol *sym_check_choice_deps(struct symbol *choice)
1219
- {
1220
- struct symbol *sym, *sym2;
1221
- struct property *prop;
1222
- struct expr *e;
1223
- struct dep_stack stack;
1224
-
1225
- dep_stack_insert(&stack, choice);
1226
-
1227
- prop = sym_get_choice_prop(choice);
1228
- expr_list_for_each_sym(prop->expr, e, sym)
1229
- sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
1230
-
1231
- choice->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
1232
- sym2 = sym_check_sym_deps(choice);
1233
- choice->flags &= ~SYMBOL_CHECK;
1234
- if (sym2)
1235
- goto out;
1236
-
1237
- expr_list_for_each_sym(prop->expr, e, sym) {
1238
- sym2 = sym_check_sym_deps(sym);
1239
- if (sym2)
1240
- break;
1241
- }
1242
- out:
1243
- expr_list_for_each_sym(prop->expr, e, sym)
1244
- sym->flags &= ~SYMBOL_CHECK;
1245
-
1246
- if (sym2 && sym_is_choice_value(sym2) &&
1247
- prop_get_symbol(sym_get_choice_prop(sym2)) == choice)
1248
- sym2 = choice;
1249
-
1250
- dep_stack_remove();
1251
-
1252
- return sym2;
1253
- }
1254
-
1255
- struct symbol *sym_check_deps(struct symbol *sym)
1256
- {
1257
- struct symbol *sym2;
1258
- struct property *prop;
1259
-
1260
- if (sym->flags & SYMBOL_CHECK) {
1261
- sym_check_print_recursive(sym);
1262
- return sym;
1263
- }
1264
- if (sym->flags & SYMBOL_CHECKED)
1265
- return NULL;
1266
-
1267
- if (sym_is_choice_value(sym)) {
1268
- struct dep_stack stack;
1269
-
1270
- /* for choice groups start the check with main choice symbol */
1271
- dep_stack_insert(&stack, sym);
1272
- prop = sym_get_choice_prop(sym);
1273
- sym2 = sym_check_deps(prop_get_symbol(prop));
1274
- dep_stack_remove();
1275
- } else if (sym_is_choice(sym)) {
1276
- sym2 = sym_check_choice_deps(sym);
1277
- } else {
1278
- sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
1279
- sym2 = sym_check_sym_deps(sym);
1280
- sym->flags &= ~SYMBOL_CHECK;
1281
- }
1282
-
1283
- if (sym2 && sym2 == sym)
1284
- sym2 = NULL;
1285
-
1286
- return sym2;
1287
- }
1288
-
1289
- struct property *prop_alloc(enum prop_type type, struct symbol *sym)
1290
- {
1291
- struct property *prop;
1292
- struct property **propp;
1293
-
1294
- prop = xmalloc(sizeof(*prop));
1295
- memset(prop, 0, sizeof(*prop));
1296
- prop->type = type;
1297
- prop->sym = sym;
1298
- prop->file = current_file;
1299
- prop->lineno = zconf_lineno();
1300
-
1301
- /* append property to the prop list of symbol */
1302
- if (sym) {
1303
- for (propp = &sym->prop; *propp; propp = &(*propp)->next)
1304
- ;
1305
- *propp = prop;
1306
- }
1307
-
1308
- return prop;
1309
- }
1310
-
1311
- struct symbol *prop_get_symbol(struct property *prop)
1312
- {
1313
- if (prop->expr && (prop->expr->type == E_SYMBOL ||
1314
- prop->expr->type == E_LIST))
1315
- return prop->expr->left.sym;
1316
- return NULL;
1317
- }
1318
-
1319
- const char *prop_get_type_name(enum prop_type type)
1320
- {
1321
- switch (type) {
1322
- case P_PROMPT:
1323
- return "prompt";
1324
- case P_ENV:
1325
- return "env";
1326
- case P_COMMENT:
1327
- return "comment";
1328
- case P_MENU:
1329
- return "menu";
1330
- case P_DEFAULT:
1331
- return "default";
1332
- case P_CHOICE:
1333
- return "choice";
1334
- case P_SELECT:
1335
- return "select";
1336
- case P_RANGE:
1337
- return "range";
1338
- case P_SYMBOL:
1339
- return "symbol";
1340
- case P_UNKNOWN:
1341
- break;
1342
- }
1343
- return "unknown";
1344
- }
1345
-
1346
- static void prop_add_env(const char *env)
1347
- {
1348
- struct symbol *sym, *sym2;
1349
- struct property *prop;
1350
- char *p;
1351
-
1352
- sym = current_entry->sym;
1353
- sym->flags |= SYMBOL_AUTO;
1354
- for_all_properties(sym, prop, P_ENV) {
1355
- sym2 = prop_get_symbol(prop);
1356
- if (strcmp(sym2->name, env))
1357
- menu_warn(current_entry, "redefining environment symbol from %s",
1358
- sym2->name);
1359
- return;
1360
- }
1361
-
1362
- prop = prop_alloc(P_ENV, sym);
1363
- prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST));
1364
-
1365
- sym_env_list = expr_alloc_one(E_LIST, sym_env_list);
1366
- sym_env_list->right.sym = sym;
1367
-
1368
- p = getenv(env);
1369
- if (p)
1370
- sym_add_default(sym, p);
1371
- else
1372
- menu_warn(current_entry, "environment variable %s undefined", env);
1373
- }