Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Everything posted by Mefistotelis

  1. Thanks @Rolf Kalbermatter. You're right about the `.lib` files - just looked at one and it's just a collection of stubs. It's not for dynamic symbol loading, instead it calls `CallLVRT`, giving it a static struct as first parameter - this first parameter contains the symbol name to actually call. There's more than a thousand of symbols in that `.lib` and all of them do that. For compiling the LV 2.5 ASM - it would require some minor changes, but not the arch conversion - toolchains today still have `-m32` or `-arch i386` or other parameters to switch to 32-bit, and PC OSes, at least for now, offer 32-bit user space. (I'm actually curious about compiling 64-bit app with 32-bit sub-module inside.. seen people experimenting with code segment selector to get to 32-bit mode. Requires mmapping any memory to be accessible in 32-bit space. Not sure if it works outside Linux though.) Still, it's just ASM - with todays disassembly tools (and some minimal manual work) I can get compilable ASM for any version of LV, the only difference would be lack of comments and lack of names for static symbols.
  2. When I was still at university, I've heard an anecdote about NI once releasing complete source code with a specific LabVIEW version, by mistake. I think I later saw a confirmation on one of LV-related forums (not sure if this one). But after a quick search, I can't find it. Anyone knows more about this? I'm not really interested in working on LV sources, but would be interesting to just compile that with a modern toolchain. Looking at the releases I have: * cintools-2_5 has a few ASM files, including assembly source for LVRT. But doesn't look like the whole thing - there's 400k of `.asm` and `.h` files in total. * cintools-3 has a header (extcode.h) which is a concatenation of all headers from LV - so there's 327k of headers. No sources though. * cintools-6_0 only has standard cintools headers, but there are lots of `.lib` files included (static libraries are a collections of .obj files). So no source code, but there seem to be enough `.obj` files for the whole labview - 1.2M in total the releases after 6.0 don't seem to have much interesing stuff in them. And considering when I was at university, the rumored release must have been not newer than v8.0.
  3. When I'm trying to figure out checksums, I'm first trying various online tools which compute them. They often support many varieties. Checksum byte is very rarely used for checksum. I've seen once an algorithm which used that area, assuming it is zero filled. Count is sometimes included, sometimes not - hard to judge. If a simple check with few sites/tools won't help, i'm going into REing the code. It is simpler than checking all possibilities. Also, implementations of CRC used in various products are often incorrect, ie. incorrectly treating sign, byte order, or just having a typo. So sometimes it's not possible to figure out the algorithm without reversing the target code.
  4. There are two APIs to graphical systems: X-window and Wayland. X-window contains compatibility layer for Wayland, Wayland contains compatibility layer for X-window. And most libraries which help creating GUIs allow to compile the same user code for both. Microsoft won by donating Windows to schools, and providing courses for teachers. This paid out over years, making Windows a template by which all OSes are judged. Now, at least is EU, there is a movement to require open-source OS in all public institutions. This should, over years, remove some of that bias.
  5. Depends on a kid. Depends on his interests. If you're just after programming a PC: Scratch is quite popular. There's also similar thing called Blocky. If the kid won't get into things unless that's a game: Baba is you is a great game for kids. He probably already has some favorite games, and many games today use LUA. So he could also start modifying a game he knows using LUA scripts. If he prefers to drive something mechanic, like a robot: There are some DJI products for kids, like Robomaster or Tello. Not the cheapest, but high quality. You can program these. There are actually many programmable robots and robotic arms for kids, just search the net. Arduino is also easily programmable, and there are many sensors, LEDs, displays, motors etc. which you can drive with it.
  6. I actually don't care enough for LV to get triggered by the first sentence. But the last one... 😡
  7. Tough decisions are definitely required to put LV back on its feet. But those also have to be correct decisions - and that's not easy to judge at this point. Approach to some features may change now, as "this design flaw was solved in NXG" is no longer an argument.
  8. Read this: https://en.wikipedia.org/wiki/Name_mangling Symbols are decorated this way only in C++. If you just don't want the decoration, compile with C compiler, or use `extern "C" {` and declare your functions within that block. For how LabVIEW handles name mangling - someone who knows LV would have to reply.
  9. Typically, people tend to use 'repo' from Android to make a project from multiple git repos. It's a lot more flexible than submodules. With 'repo', you create a 'manifest' (or multiple manifests) which contain all repositories to be included, with indication on branch and commit to be used. It's intuitive, and anyone who worked with Android already knows how to use it.
  10. Right; sorry, I had attention span only to read a few last posts. From a few projects I looked into, only text files like *.lvproj files seem to be detected. Projects with only VIs in them are not marked as LabVIEW, no matter how much are there or what's the file/project name.
  11. The idea of comparing a quarter instead of full timeline is to have kind of derivative of the use of each language - change in the amount of uses, instead of the total uses. Popularity of LV is on decline for several years now. Whether it's 38th or 51st on a chart isn't going to change much. There are many reasons why that is happening; lack of long-term strategy is visible. There was no reaction to HW engineering being transformed from diagrams into Hardware Description Languages. There was no reaction to major languages giving jurisdiction over specifications to non-profit standardizing orgs. For govs shifting towards open-source SW in bureaucracy and education. Even the reaction to expansion of Code Versioning Systems was lacking. That would be a long post if I tried to list all such missteps. I'm wondering if there is a strategy now. Some recent actions may suggest NI did set up some goals to reach. I wonder if they realize how far they have to go to reverse the trend in the world we have now.
  12. Thanks! That is quite strange that I know exactly how LabVIEW works, but can't properly use it for what it is intended.
  13. Wow.. yes, that seem to work exactly as I expected. Makes a new VI file with given control. Can I make it iterate through all the types and open every possible VI in one run?
  14. I need a group of VI files, each containing only one control on Front Panel. Basically, I want every control available in LV menus in its own separate VI. Is there a way to automate creation of such VIs?
  15. Made CPC2 re-creation - connector pane is now there, but LV seem to not want to display it without BD... While at it, also made a simple icon creation.
  16. Yes. What I didn't mention in the video is - ATM the tool only supports the specific components I put into project. I didn't even looked at other controls yet. And for various flavors of numeric/boolean controls - all we can figure out is whether that's a control or indicator, the specific visual representation of the switch is lost - recovered one always looks the same. Thank you, will consider that. Complex projects are already supported - you just need `find` to list all extracted files, and do the 3 actions for each of them: extract to XML, recover FP, re-create VI. Default data type for that numeric control is Double. For this type, my tool sets an increment of 0,1. If it was Integer, the increase would be 1. The original value of that increment is lost with the removal of FP.
  17. Oh, going into that is definitely not for 15 minutes video. Recovering it completely and automatically, for every VI - would be a project for several months (considering this is my afternoon project). It's way easier to make partial recovery, requiring the user to finish. And just placing block diagram with the components we've already recovered for FP - is trivial. Yeah, noticed that as well.. the whole connectors pane is very easy to handle, I will likely fix that in the nearby future. Yes. That is probably the main use of that solution - recover the project without Block Diagrams, then re-create only VIs that need updating, and re-build everything.
  18. I sorted all the extracted LV14 files by size, and one stands out. Size of Block Diagram in XML form: 15MB And the size is not due to some binary blob stored inside - no, the is just a lot of parts in the block diagram heap. Amount of XML tags: # xmllint --xpath "count(//*)" ex_allChanPropsMod_BDHb.xml 234903 File: vi.lib/Platform/express/ex_EditUserDefinedProperties/ex_allChanPropsMod.vi And its content isn't even that impressive: There are just a lot of cases hiding in the "Case Structure", and a lot of copies of the same chunk of diagram within each case. Also the file seem to have syntax errors? Is it normal that some library files from NI doesn't even compile?
  19. Yes. "&lt;" and "&gt;" are just symbols used to allow storage in XML; these are so-called HTML Entities. So this string really is "<vilib>". No idea. There are more tags which can be used, but I never cared for listing them, or checking whether they're all hard-coded. EDIT: Reading @Rolf Kalbermatter answer above, I see he already answered this.
  20. Yes. Extract your file, and paths will be in XML. "LVPath" is actually a class, which is instantiated for many things. So all paths basically have the same structure. I export it to XML as list of strings - this is how it is really stored. Elements in the list are either normal strings, or tags which LV replaces with value from current config. Example: <LIvi> <!-- LinkObj Refs for VI --> <Section Index="0" Format="inline"> <LVIN Unk1="NI_InternetTK_Common_VIs.lvlib:Close Calling VI's Windows.vi" Unk2=""> <!-- VI To Lib Object Ref --> <VILB LinkSaveFlag="2"> <LinkSaveQualName /> <LinkSavePathRef Ident="PTH0" TpVal="0"> <String>&lt;vilib&gt;</String> <String>addons</String> <String>internet</String> <String>NI_InternetTK_Common_VIs.lvlib</String> </LinkSavePathRef> </VILB> </LVIN> </Section> </LIvi>
  21. Thanks @Rolf Kalbermatter, did proper update. Watcom actually had Windows extender, separate to the DOS extender. Also, interesting prediction. Personally, I think Apple overestimates scalability of their phone silicon. But we'll see.
  22. What you want is to flush your output file occasionally. File writes are buffered, and performed only when enough data has gathered, or the file is being closed. In C, flushing is done by fflush(); for LV - someone else will have to answer.
  23. Thank you! That added some important info to my list: https://github.com/mefistotelis/pylabview/blob/master/LVcode.py#L224 A little below the arch list, there's getVICodeProcName() function where I added mangled names for the dispatch table items which I got from LV for MacOS. Pylabview will now, upon extraction of a VI file, create a MAP file with offsets and names of known symbols within the executable bytecode.
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.