The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,854 other subscribers

Archive for the ‘History’ Category

delphi – What are the list of all possible values for DVCLAL? – Stack Overflow

Posted by jpluimers on 2020/11/17

From a while ago, from notes even longer ago – around 1994 on DVCLAL the Delphi VCL Access License code which is actually a checking logic for determining the SKU (stock keeping unit) or Delphi license: [WayBack] delphi – What are the list of all possible values for DVCLAL? – Stack Overflow

There is no official documentation on this, so here is something from my notes of 15+ years ago:

The DVCLAL is there to check which SKU of Delphi you are using and it varies per SKU.

There are only checks for the Professional (RPR) and Client/Server (RCS) SKUs:

procedure RCS;

procedure RPR;

If they fail, they call this method:

procedure ALV;
begin
  raise Exception.CreateRes(@SNL);
end;

where

resourcestring
  SNL = 'Application is not licensed to use this feature';

Depending on the feature matrix and Delphi version, various components call RPR and RCS in their Create constructors to guarantee a minimum SKU.

Underneath, these RPR and RCS functions call the function  GDAL . Their names are historic and got documented around Delphi 2007:

  • [WayBack] GDAL (Get Delphi Access License)
  • [WayBack] RPR will Restrict to PRofessional license and higher
  • [WayBack] RCS will Restrict to Client/Service license and higher

Historically you had these levels of Delphi editions that could be distinguished this way:

  1. Personal
  2. Professional
  3. Client/Server (or Enterprise)

This excludes Starter and Community (which are “just” Personal), Turbo (which was “just” Professional), Architect and Ultimate, which are “just” Client/Server with extra tools.

A few years ago, another answer got added to that question explaining more details:

I am just adding another answer to this question, for all the people who search the for actual DVCLAL (Delphi Visual Component Library Access License) values, as well as some other information for all people who are curious how stuff works.

1) Like Jeroen Wiert Pluimers said, if you want to check for “Professional or higher” or “Enterprise only” inside your Delphi application/library/package/component, you can use RPR (Require Professional) or RCS (“Require Client/Server”; Client/Server was the name for the Enterprise edition in early Delphi versions) respectively. If the requirement is not met, ALV (Access License Violation) will be called which will raise an Exception with the message defined in SysConst.SNL (S Not Licensed). In English:

Application is not licensed to use this feature

2) In case you want to check for one specific edition, you can use the output of the function GDAL (Get Delphi Access License), which is one of the following (AL1s array):

AL1s[0] = $FFFFFFF0; // Standard/Personal edition DVCLAL value
AL1s[1] = $FFFFEBF0; // Professional edition DVCLAL value
AL1s[2] = $00000000; // Enterprise/ClientServer edition DVCLAL value
AL1s[3] = $FFFFFFFF; // DVCLAL resource not existing

if the DVCLAL resource has an invalid value, GDAL will call ALVwhich will raise an Exception with message SysConst.SNL.

3) In case you want to check the DVCLAL value of a foreign EXE/DLL file (e.g. if you want to write a Resource Editor, decompiler etc), then you’ll have to query the DVCLAL resource directly.

There are only three official values:

Standard:      23 78 5D 23 B6 A5 F3 19 43 F3 40 02 26 D1 11 C7
Professional:  A2 8C DF 98 7B 3C 3A 79 26 71 3F 09 0F 2A 25 17
Enterprise:    26 3D 4F 38 C2 82 37 B8 F3 24 42 03 17 9B 3A 83

4) Just for fun: If you solve the formula 0 = (ROR(a,15) xor a) xor (ROR(b,10) xor b) xor (ROR(c,5) xor c) xor (AL1 xor AL2) you can define any DVCLAL value (tuple a, b, c, d) you want! (AL1 and AL2 are the values in the AL1s and AL2s arrays which describe the desired Delphi edition; ROR is rotate right through carry)

For example, here are alternative DVCLALs which work too:

Standard:      00 00 00 00 00 00 00 00 9B 70 0C 66 6B 8F F3 99
Professional:  00 00 00 00 00 00 00 00 9A DB 73 0F 6A 30 8C F0
Enterprise:    00 00 00 00 00 00 00 00 D8 B2 48 11 D8 B2 48 11

To validate a DVCLAL, you calculate

AL1 := DVCLAL[0] xor DVCLAL[1] xor DVCLAL[2] xor DVCLAL[3];
AL2 := ROR(DVCLAL[0],15) xor ROR(DVCLAL[1],10) xor ROR(DVCLAL[2],5) xor DVCLAL[3];

and look up AL1 and AL2 in the array AL1s and AL2s,

This way you can disguise the edition you have used a little.

5) In the meantime, an official documentation, at least for the functions GDALRPR and RCS, has been published.

6) Of course, everything works for C++ Builder, too.

In the mean time, new posts explaining bits of DVCLAL related resources (like PACKAGEINFO and CHARTABLE) and the TPF0 form/datamodule resource have appeared, of which this is a selection:

jeroen

miscprogs.zip

Posted in Conference Topics, Conferences, Delphi, Development, Event, History, Software Development, Undocumented Delphi | Leave a Comment »

Reverse engineering Delphi and Turbo Pascal unit interfaces (and maybe DCP files too)

Posted by jpluimers on 2020/10/07

Boy, I wish there was both an Embarcadero sanctioned grammar (see Delphi code completion fail with anonymous methods – Stack Overflow) and a DCU parser.

This might work for DCP files as well, since the PKX0 signature at the start of DCP files is in [WayBack] DCU32INT/DCP.pas at master · rfrezino/DCU32INT · GitHub.

Being able to dump DCP files makes it way easier to create documenting a matrix of all DCP files and units, to their interdependencies and containments become clear (including any unit scopes).

Right now that is only documented from the unit to the package on the page of the unit (see for instance [WayBack] System.SysUtils – RAD Studio API Documentation), not the other way around. This is a pain to select which packages you need in your project when building with packages.

The list at [WayBack] Unit List – RAD Studio API Documentation (which actually is an “Alphabetical list of unit scopes, along with miscellaneous units that have no unit scope.” is only partially helpful, especially as for instance the System unit page at [WayBack] System – RAD Studio API Documentation is 90% about the System unit scope, has the System unit itself about a 3rd down and does not mention it lives in the rtl.dcp package.

The list at [WayBack] Deciding Which Runtime Packages to Use – RAD Studio is even worse than the unit list, as it misses many useful packages (like dsnap)

For my link archive:

Johan wanted to create a compiler symbol table from the binary DCU files (unlike DelphiAST which does it from the Pascal source files).

From the pre-Delphi era, I found back some info from my own archive:

In the Turbo Pascal days, you had TW1UNA and TPUUNA by William L. Peavy, which I think led to INTRFC from Duncan Murdoch (or maybe vice versa) which got updated to Turbo/Borland Pascal 7 format by Milan Dadok (see [Wayback/Archive] http://sources.ru/pascal/hacker/intrfc70.htm). Since the basic format of DCU files is very similar to that, my guess is that DCU32INT built on that.

Later I found [Wayback/Archive] The Programmer’s Corner » TPU60C.ZIP » Pascal Source Code also by William L. Peavy and Wayback/Archive] Duncan Murdoch’s Programs .

Edit 20220621:

  • moved the www8.pair.com links to murdoch-sutherland.com
  • added more Wayback and Archive links

–jeroen

Posted in Borland Pascal, Conference Topics, Conferences, Delphi, Development, Event, History, Pascal, Software Development, Turbo Pascal | Leave a Comment »

Jeroen Pluimers on Twitter: “You will likely complete the circle at least twice in your career (;… “

Posted by jpluimers on 2020/10/02

For anyone in IT: [WayBack] You will likely complete the circle at least twice in your career (;…

–jeroen

Posted in Development, Fun, History, Infrastructure, Quotes | Leave a Comment »

References for “The Future of Programming” a 2013 DBX conference talk still very relevant

Posted by jpluimers on 2020/09/24

At [WayBack] References for “The Future of Programming” you find the links and quotes Bret Victor used for his great talk.

The talk reminds me talks by Kevlin Henney, which combine a historic perspective on software development with how to apply that knowledge.

Time to dig into some more talks by Bret Victor and his site [WayBack] Bret Victor, beast of burden

He has done a lot of things, including designing the great resistor decoder I mentioned at Source: Electronics components and resistor decoder colours.

–jeroen

via: [WayBack] Jonas Bandi on Twitter: “It is easy to adopt new technologies, it can be hard to adopt new ways of thinking. https://t.co/gwbDrpWido”

Read the rest of this entry »

Posted in Development, History, Software Development | Leave a Comment »

Women should rule IT again, not just because inheritance in Cobol functions differently than in other languages.

Posted by jpluimers on 2020/09/22

From a while back, but still relevant: [WayBack] Vererbung funktioniert in Cobol anders als in anderen Sprachen… – Kristian Köhntopp – Google+

Translated, this is:

I found some COBOL code at a client. Nothing special. The last comment in it was from 1985, written by my mother. That was my WTF moment of the year, including the look on the face of the technical manager: here inheritance gets a totally different perspective.

An interesting take from that thread is that in the past, women ruled IT.

They should do this again while they can, as a mixed team can combine “first time right” with “minimum viable product”. It is all about balance.

Andreas Dorfer
Cool-Programmierung in den 70ern und frühen 80ern scheint eine Frauendomäne gewesen zu sein. Zumindest bei uns waren die letzten Aktiven daran in den späten 90ern (die mehr als nur Hotfixes drangebastelt haben), gestandene Frauen mit Lesebrillen an Perlenketten.

Jeroen Wiert Pluimers
+Andreas Dorfer yup, and they were doing excellent jobs. Women still could rule IT, there are just to few working in IT.

Andreas Dorfer
+Jeroen Wiert Pluimers those folks really listened and asked relevant questions before making any half baked proposal. Then they produced a lot of documents in binders, including flow diagrams… made a prototype, tested the unit and produced another binder full of paper.. And if there any question after going live, they just told you on the phone: “Look at sheet xy, paragraph z, there we documented this behaviour as conforming your request. Shall we schedule a meeting to setup a change request together?”. They had been working like accounting: sometimes incredibly slow, but with precision and accuracy… if things went wrong, the best advice was always to ask yourself, where you might have a flaw in the initial request.

Andreas Dorfer

Archive.is 384da9306d6501301d80001dd8b71c47 (900×266)

This apart from the fact that comments have not changed much over time:

Read the rest of this entry »

Posted in Development, History, Software Development | Leave a Comment »

Computer Hardware Chart – Imgur

Posted by jpluimers on 2020/08/28

Geek pr0n from now all the way back to the 1980s [WayBackComputer Hardware Chart – Imgur.

Basically all sorts of modules and connectors you find in computers:

  • Notebook RAM
  • Desktop RAM
  • Hard Drives
  • CPU Sockets
  • Processor Card Slots
  • Processor Card Sockets
  • I/O ports
  • Peripheral Cards
  • Desktop Card Slots
  • Power Connectors

Via: [WayBack] #NerdPorn Computer Hardware Chart https://imgur.com/gallery/hBE7ZF8 – DoorToDoorGeek “Stephen McLaughlin” – Google+

–jeroen

Read the rest of this entry »

Posted in Hardware, History, Power User | Leave a Comment »

Happy birthday UDP!

Posted by jpluimers on 2020/08/20

Today it’s the 40th birthday of UDP. Or more precise: 40 years after [WayBackRFC 768 – User Datagram Protocol got submitted.

It is still used a lot today, so be sure to read more background on [WayBackUser Datagram Protocol – Wikipedia.

And of course on a birthday, it is nice to have few good jokes. So here we go:

[WayBack“I would tell you a joke about UDP, but you probably wouldn’t get it.” | Hacker News

[WayBack] I would tell you a joke about UDP, but you probably wouldn’t get it. So here’s a TCP joke | reddit.

[Archive.is]:

  • UDP packet bar walks into
  • The best thing about UDP jokes is that I don’t care if you get it. #sysadmin #networking #IT

You can generate more yourself: udpjoke.py

–jeroen

Read the rest of this entry »

Posted in Communications Development, Conference Topics, Conferences, Development, Event, History, Internet protocol suite, UDP | Leave a Comment »

Delphi What’s new history and a docwiki URL trick

Posted by jpluimers on 2020/08/05

One of the great things about the Delphi docwiki structure is that the naming system is very consistent.

The consistency helps you quickly finding the What’s new for any version, just by getting the latest first.

Getting the latest one is based based on a docwiki redirection trick that always redirects from an “unversioned” URL to the latest one.

So these two “unversioned” URLs always get you there:

When writing this, the above links got me the below list. For consistency (as you cannot save URLs for prior versions in the WayBack machine because a brain-dead robots.txt setting which archive.is luckily ignores):

By now, there will hopefully be a few more Delphi versions released.

Reminder to self: update the list (:

–jeroen

Read the rest of this entry »

Posted in Conference Topics, Conferences, Delphi, Development, History, Software Development | Leave a Comment »

Dutch public broadcast Teletext in plain text: Tekst TT

Posted by jpluimers on 2020/08/03

This page always has the Dutch public broadcast teletekst page 101 in plain text: Tekst TT.

It is sources from the teletext mode teletekst.nl, which usually is the fastest fact checked public news source in The Netherlands.

[WayBack] Tekst TT FAQ:


■ Dit is NOS Teletekst 101 in platte tekst. Het belangrijkste nieuws van Nederland, zonder opsmuk, snel en actueel. Handig voor op je iPhone/Android onderweg.

■ Deze pagina’s worden automatisch uit openbare bronnen samengesteld. Soms hikt er iets. En zie je nog minder. Maar minder is meer!

■ Sportnieuws gaat nog niet altijd goed. Met het huidige beperkte aanbod sport in de media is dit een probleem dat alle prioriteit heeft.

■ Contact krijg je via info@teletek.st of volg @TTCAPS voor echt ouderwets brekend nieuws.

–jeroen

Posted in History, LifeHacker, Power User | Leave a Comment »

Op dat we de cruciale beroepen niet vergeten: die horen meer extra te krijgen

Posted by jpluimers on 2020/08/01

[WayBack] Vragen over noodopvang voor kinderen van ouders in cruciale beroepen of vitale processen | Coronavirus COVID-19 | Rijksoverheid.nl

Cruciale beroepsgroepen voor COVID-19

Specifiek voor COVID-19 zijn er cruciale beroepsgroepen om de samenleving draaiende te houden tijdens de COVID-19-uitbraak. Ouders of verzorgenden in deze beroepsgroepen kunnen gebruik maken van noodopvang. De lijst met deze cruciale beroepsgroepen is als volgt:

  • Zorg, Jeugdhulp en (Maatschappelijke) Ondersteuning, inclusief productie en transport van medicijnen en medische hulpmiddelen.
  • Leraren en personeel benodigd op school, zoals voor afstandsonderwijs, opvang van kinderen en examens.
  • Openbaar vervoer.
  • Voedselketen: de voedselketen moet breed worden gezien. Deze bestaat uit supermarkten, de aanlevering van supermarkten, de verwerkende industrie en de transporten van deze industrie maar ook het ophalen van producten bij boeren, het aanleveren van bijvoorbeeld veevoer en andere producten bij boeren, de toegang van arbeiders voor de oogst.
  • Transport van brandstoffen zoals kolen, olie, benzine en diesel, etcetera.
  • Vervoer van afval en vuilnis.
  • Kinderopvang.
  • Media en communicatie: ten behoeve van informatievoorziening aan de samenleving die van noodzaak is om op de hoogte te blijven van wat er speelt.
  • Continuïteit hulpverleningsdiensten (politie en defensie zijn reeds vitaal verklaard):
    • meldkamerprocessen
    • brandweerzorg
    • ambulancezorg
    • GHOR
    • crisisbeheersing van de veiligheidsregio’s
  • Noodzakelijke overheidsprocessen (Rijk, provincies, gemeenten en waterschappen), bijvoorbeeld betalen uitkeringen en toeslagen, burgerzaken, consulaten en ambassades, justitiële inrichtingen en forensische klinieken.

Vitale processen

Voor Nederland gelden altijd al bedrijven die processen hebben die zijn aangemerkt als ‘vitaal’. Ouders en verzorgenden die in deze vitale sectoren werken of onmisbaar zijn voor vitale processen, kunnen een beroep doen op de noodopvang als de kinderen geen klachten hebben zoals koorts, hoesten of verkoudheid. Het gaat om circa 100 bedrijven die hier al van op de hoogte zijn.

  • Landelijk transport en distributie elektriciteit
  • Regionale distributie elektriciteit
  • Gasproductie, landelijk transport en distributie gas
  • Regionale distributie gas
  • Olievoorziening
  • Internet- en datadiensten
  • Internettoegang en dataverkeer
  • Spraakdienst en SMS
  • Plaats- en tijdsbepaling middels GNSS
  • Drinkwatervoorziening
  • Keren en beheren waterkwantiteit
  • Vlucht- en vliegtuigafhandeling
  • Scheepvaartafwikkeling
  • Grootschalige productie/verwerking en/of opslag (petro)chemische stoffen
  • Opslag, productie en verwerking nucleair materiaal
  • Toonbankbetalingsverkeer
  • Massaal giraal betalingsverkeer
  • Hoogwaardig betalingsverkeer tussen banken
  • Effectenverkeer
  • Communicatie met en tussen hulpdiensten middels 112 en C2000
  • Inzet politie
  • Basisregistraties personen en organisaties
  • Interconnectiviteit (transactie-infrastructuur voor informatie uit basisregistraties)
  • Elektronisch berichtenverkeer en informatieverschaffing aan burgers
  • Identificatie en authenticatie van burgers en bedrijven
  • Inzet defensie
  • Vervoer van personen en goederen over (hoofd)spoorweginfrastructuur
  • Vervoer over (hoofd)wegennet

Posted in History, Power User | Leave a Comment »