README 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. Oberon Microsystems BlackBox Component Builder (http://www.oberon.ch/)
  2. Port for OpenBSD/i386, GNU/Linux/i386, FreeBSD/i386
  3. Tested on:
  4. OpenBSD 6.2
  5. Fedora Core 17
  6. Ubuntu 12.04 LTS, 12.10, 13.10, 14.04
  7. FreeBSD 11.0
  8. Status:
  9. non-GUI part: stable, but TODO list is not empty
  10. GUI part: incomplete, but runnable implementation
  11. How to build:
  12. if you have 64-bit version of Ubuntu, do this:
  13. sudo apt-get install libc6-dev-i386
  14. cd BlackBox
  15. ./clean
  16. ./switch-target `uname -s` [ GUI ]
  17. compile loader executable:
  18. cd BlackBox/Lin/Rsrc/loader
  19. make clean
  20. make
  21. mv loader ../../../_`uname -s`_/Lin/Rsrc/loader/
  22. compile self:
  23. cd BlackBox
  24. ./build
  25. ./pack-dev0
  26. How to run (after build):
  27. GUI only:
  28. if you have 64-bit version of Ubuntu, do this:
  29. sudo apt-get install libgtk2.0-0:i386
  30. cd BlackBox
  31. ./run-BlackBox
  32. or ./run-BlackBox1
  33. Files:
  34. original:
  35. BlackBox:
  36. Comm/Mod/Streams.odc
  37. Comm/Docu/*
  38. Dev/Mod/*
  39. all except ElfLinker16
  40. Dev/Docu/*
  41. all except ElfLinker
  42. Dev/Rsrc/*
  43. Dev/Spec/*
  44. Docu/BB-License.odc
  45. Obx/*
  46. Std/*
  47. System/Mod/
  48. all except Console
  49. System/Rsrc/*
  50. Text/*
  51. Xhtml
  52. _Windows_/{Comm,BlackBox.exe,BlackBox.exe.manifest}
  53. _Windows_GUI/*
  54. __GUI/{Comm,Dev,Form,Host/Rsrc/*.odc,Obx,Std,System,Empty.odc,Tour.odc}
  55. OpenBUGS (http://www.openbugs.net/):
  56. Dev/Mod/ElfLinker16.odc
  57. Dev/Docu/ElfLinker.odc
  58. Docu/OpenBUGS-License.odc
  59. http://forum.oberoncore.ru/viewtopic.php?f=34&t=1159&sid=3e82517160caa46c64331178c1b61e95:
  60. _FreeBSDLinuxOpenBSD_/System/Mod/Kernel_so_init.odc
  61. http://oberoncore.ru/projects/bb16ru-kras/:
  62. Dev/Rsrc/ru/Strings.odc
  63. Std/Rsrc/ru/Strings.odc
  64. System/Rsrc/ru/Strings.odc
  65. __GUI/Host/Rsrc/ru/Strings.odc
  66. http://gitlab.molpit.com/oberon/blackbox-freenix/:
  67. _{LinuxOpenBSD,Linux,OpenBSD}_GUI
  68. alternative linker (http://forum.oberoncore.ru/viewtopic.php?f=34&t=5459&start=40#p99038):
  69. Dev2/*
  70. modified:
  71. _OpenBSD_/System/Mod/Kernel.odc:
  72. BlackBox 1.6 System/Mod/Kernel.odc, OpenBUGS Lin/Mod/linKernel.odc:
  73. OpenBSD specific:
  74. Memory management rewritten (based on mmap)
  75. Kernel.TrapHandler
  76. OpenBSD sigcontext-specific
  77. Kernel.Time
  78. Kernel.InitModule
  79. Kernel.InstallSignals:
  80. do not install signal handler for SIGTHR (when executable linked with -pthread)
  81. IsReadable
  82. GetRefVar memory access protection
  83. _Linux_/System/Mod/Kernel.odc:
  84. _OpenBSD_/System/Mod/Kernel.odc modified for Linux:
  85. Time*
  86. TrapHandler
  87. mmap: use "/dev/zero" device instead of -1
  88. mprotect addresses must be page-aligned
  89. do not show warning message if signal install failed
  90. _FreeBSD_/System/Mod/Kernel.odc:
  91. _OpenBSD_/System/Mod/Kernel.odc modified for FreeBSD:
  92. Time*
  93. TrapHandler
  94. SetupModListAccess: initial module list must be writeable (read only by default in FreeBSD)
  95. _Linux_/Host/Mod/Files.odc:
  96. OpenBUGS Lin/Mod/linHostFiles.odc:
  97. synchronized with BlackBox 1.6
  98. server configuration via BB_PRIMARY_DIR and BB_SECONDARY_DIR environment variables (not command line)
  99. filenames encoding translation implemented
  100. _OpenBSD_/Host/Mod/Files.odc:
  101. _Linux_/Host/Mod/Files.odc:
  102. OpenBSD-specific:
  103. size_t
  104. __xstat -> stat
  105. LEN(clock_t) = 8
  106. _FreeBSD_/Host/Mod/Files.odc:
  107. _Linux_/Host/Mod/Files.odc:
  108. FreeBSD-specific:
  109. size_t
  110. __xstat -> stat
  111. mode_t
  112. _Linux_/Lin/Mod/Libc.odc:
  113. OpenBUGS Lin/Mod/Libc.odc:
  114. PROT_*, MAP_*, O_*, _SC_PAGESIZE, SIGSTKSZ CONSTs added
  115. open, close, read, write, mmap, munmap, mprotect, getenv, sysconf, sigaltstack functions added
  116. _Linux_/Lin/Mod/Dl.odc:
  117. OpenBUGS Lin/Mod/Dl.odc
  118. _Linux_/Host/Mod/Dates.odc: from http://oberoncore.ru/
  119. _FreeBSDOpenBSD_/Host/Mod/Dates.odc:
  120. _Linux_/Host/Mod/Dates.odc: OpenBSD and FreeBSD specific
  121. _FreeBSDLinuxOpenBSD_/Host/Mod/TextConv.odc:
  122. BlackBox 1.6 Host/Mod/TextConv.odc:
  123. Windows-specific converters removed
  124. _FreeBSDLinuxOpenBSD_/Host/Mod/PackedFiles.odc:
  125. BlackBox 1.6 Host/Mod/PackedFiles.odc:
  126. use BB_PACKED_NAME environment variable instead of appName
  127. GetNextSubLoc, GetLoc: filenames-specific
  128. _FreeBSDLinuxOpenBSD_Interp/Host/Mod/DevPackedFiles.odc:
  129. _FreeBSDLinuxOpenBSD_/Host/Mod/PackedFiles.odc:
  130. with priority to packed files
  131. _FreeBSDLinuxOpenBSD_/System/Mod/Config.odc:
  132. BlackBox 1.6 System/Mod/Config.odc:
  133. Windows-specific removed
  134. _FreeBSDLinuxOpenBSD_GUI/Host/Mod/Registry.odc:
  135. BlackBox 1.6 Host/Mod/Registry.odc
  136. _Windows_Interp/Host/Mod/{Dates.odc,Lang.odc}:
  137. part of BlackBox 1.6 Host/Mod/Dialog.odc
  138. _Windows_Interp/Host/Mod/DevPackedFiles.odc:
  139. BlackBox 1.6 Host/Mod/PackedFiles.odc:
  140. with priority to packed files
  141. Dev2/Mod/{LnkBase.odc,LnkLoad.odc,LnkWriteElf.odc,Linker.odc}:
  142. FreeBSD, OpenBSD-specific
  143. new:
  144. Console:
  145. System/Mod/Console.odc: Console interface
  146. _FreeBSDLinuxOpenBSD_/Host/Mod/Console.odc:
  147. Console implementation for Linux and FreeBSD, and OpenBSD
  148. _Windows_{GUI,Interp}/Host/Mod/Console.odc:
  149. Console implementation for Windows
  150. Cons/Mod
  151. Interp.odc: console interpreter
  152. Compiler.odc: console interface to Dev compiler
  153. Log.odc: Log.Hook console implementation
  154. {_OpenBSD_,_FreeBSD_}/Lin/Mod/Libc.odc: OpenBSD and FreeBSD specific libc interface
  155. {_OpenBSD_,_FreeBSD_}/Lin/Mod/Dl.odc: OpenBSD and FreeBSD specific interface to dl
  156. {_FreeBSD_,_Linux_,_OpenBSD_}/Lin/Mod/Iconv.odc: interface to iconv
  157. {_FreeBSD_,_Linux_,_OpenBSD_}/Lin/Mod/Ioctl.odc: interface to ioctl
  158. {_Linux_,_OpenBSD_}/Lin/Mod/Termios.odc: interface to termios
  159. {_FreeBSD_,_Linux_,_OpenBSD_}/Lin/Mod/Net.odc: interface to network functionality
  160. _FreeBSDLinuxOpenBSD_/Host/Mod/Lang.odc: Dialog.LanguageHook implementation and LANG environment variable support
  161. _LinuxOpenBSD_/Comm/Mod/V24.odc: CommV24 implementation for Linux and OpenBSD
  162. _OpenBSD_/Comm/Mod/TCP.odc: CommTCP implementation for OpenBSD
  163. _Linux_/Comm/Mod/TCP.odc: CommTCP implementation for Linux
  164. _FreeBSD_/Comm/Mod/TCP.odc: CommTCP implementation for FreeBSD
  165. _Linux_/Lin/Mod/Rt.odc: interface to librt
  166. {_FreeBSD_,_OpenBSD_,_Linux_}/BlackBox1.run: compiled and linked BlackBox executable
  167. {_FreeBSD_,_OpenBSD_,_Linux_}/libBB.so: compiled and linked shared library to run BlackBox
  168. {_FreeBSD_,_OpenBSD_,_Linux_}/libBB0.so: compiled, linked and packed shared library to run console interpreter
  169. _Windows_/dev0.exe: compiled and linked simple development interpreter
  170. Dev0/Views.odc: minimal Views implementation required to compile StdInterpreter
  171. __Interp/Host/Mod: Fonts.odc, Dialog.odc, Windows.odc: simple Host implementation
  172. __Interp/System/Mod/Init.odc: Init for console interpreter
  173. Notes:
  174. Kernel.baseStack issue:
  175. baseStack is upper border:
  176. * of garbage collector stack scan range (see Kernel.MarkLocals)
  177. * of TrapViewer stack show range (see Kernel.TrapHandler)
  178. it is initialized in Kernel.INIT and initially points close to upper
  179. border of library stack (because Kernel.INIT called from library
  180. constructor, which executes close to upper border of library stack)
  181. it can be changed in Kernel.Start to skip unnecessary stack addresses
  182. if libBB.so exports procedure for calling from main program,
  183. then it will be executed on main program stack, not on library
  184. stack, at stack addresses higher than baseStack.
  185. Thus, MarkLocals and TrapViewer will work incorrectly.
  186. in this case, to solve problem, baseStack should be adjusted and
  187. should point to stack on which this exported procedure executes
  188. if necessary, this can be done using auxiliary module Kernel_so_init,
  189. or by using Kernel.Start
  190. Command line support removed because there is no easy way to access argc argv from outside main()
  191. Environment variables supported instead:
  192. BB_PRIMARY_DIR
  193. BB_SECONDARY_DIR (was: /USE command line option)
  194. BB_PACKED_NAME
  195. Alexander V. Shiryaev, 2019