Post by Jure Sah Post by Randall Hyde Post by Jure Sah
I am wondering if attempts to make ASM object-orientated and utilizing a
graphical interface to the coding process has ever been made?
HLA and TASM have object-oriented capabilities.
But to my knowledge, no one has created anything like
Borland's OWL for these assemblers yet.
Mind explaining what Borland's OWL is about?
Actually, since Delphi's success, Borland now use the "VCL" (for C++
Builder and such)...though, it's the same basic idea in both cases...the
VCL is appropriate for Delphi / C++ Builder "dragdropiness", if you know
what I mean (no, as you may guess, "dragdropiness" is not a real technical
term but I don't really know how else to describe it ;)...it's a redesigned
and rewritten OWL, so to speak, for their "visual development" stuff...
"Very good", you think, "but what's OWL, anyway?"...
Ah, well...the basic idea is very simple...it's just a "GUI library",
basically...rather than write your own user interface code, you can just
pull out "windows" and "buttons" and "canvases" and such things from the
library...Borland have written the actual user interface code and "wrapped"
it all in a bunch of C++ classes...that's where the OOP comes into
things...it's all implemented as a big "hierachy" of OOP classes (where
they "inherit" common stuff from each other...like every "control" is
ultimately a "child window"...so, they put all the common window stuff into
some "TWindow" class or whatever...and all "controls" can "inherit" from
that...that's why it's a "hierarchy"...but, basically, this is mostly
"implementation detail", anyway...the basic point is that you can just pull
out classes for things like "buttons" and "listboxes" and whatever from the
The difference between OWL and the later VCL from Borland is only that they
redesigned things specifically to help support the "visual programming" of
Delphi (and, later, C++ Builder did the same thing with C++ rather than
Pascal as the central language, both made "compatible" to use the same
"VCL" library :)...
Or, another - perhaps simpler - way to put it, is that OWL is Borland's
version of Microsoft's MFC (with regard to GUI components)...and the later
VCL from Borland is the "new improved version" of OWL designed to fit in
with their whole "visual programming" stuff in Delphi and C++ Builder...
As Jure Sah actually stated "utilizing a graphical interface to the coding
process" in his original question, Randy really should have said "VCL" and
not "OWL"...but, as noted, they really are the exact same idea...VCL is
just "re-implemented" OWL in order to make it fit in nicely with the
"visual programming" model (which is Jure's "utilizing a graphical
interface to the coding process" in different wording ;)...
[ Oh, for the record, not that I much ever care about what things "stand
for" in acronyms but it might help some people appreciate what they are:
OWL stands for "Object Window Library", VCL stands for "Visual Component
Library" and MFC stands for "Microsoft(R) Foundation Classes(R)TM"...
So, as you can see, VCL has "Visual" in its name...also, Borland have
better names because they actually bother to, you know, say that these
things are _libraries_ and stress that they are "object-based" or "visual"
in the name too...whilst simultaneously, with "OWL", giving it a funny
"English word" name too...whereas, you can rely on Microsoft to prefix
their name inside the acronym itself and insert the word "foundation" which
means nothing and is totally misleading...the "foundation" of what exactly?
Nothing...it's, in fact, a _middle man_ as a code library, sitting _above_
the "foundations" of the Win32 API...only "classes" tells you anything
useful, that there's some OOP "classes" in there somewhere (well, maybe
not, they also use the word "class" sometimes when it has nothing
specifically to do with OOP)...good old Microsoft...you can rely on them to
supply meaningless, misleading names with "Microsoft(R)" prefixed in front
of everything...indeed, it's surprising it isn't "MMFMC" as "Microsoft(R)
Microsoft(R) Foundation Microsoft(R) Classes" or something...
"Sir" Bill clearly has a serious ego problem and a big "inferiority
complex", convinced everyone would somehow "forget" his empire of evil just
because it might forget the "Microsoft(R)" prefix somewhere...I mean,
"Microsoft(R)" is written multiple times on the Windows loading screen (it
makes sense to be on the copyright notice, of course...but what's the
excuse elsewhere?), which itself is, of course, nothing more than an
"advert" to look at while you're waiting for the darn thing to load,
anyway...and, once it loads, there's the Windows logo on the "Start"
menu...open that - using the Windows logo key on your keyboard that's not
even manufactured by Microsoft for a machine that doesn't even necessarily
have to run Windows in any way that there is no "right" or logic for the
logo to be stamped on the keyboard, other than that Microsoft(R) _FORCE_ it
onto there (or you don't get yourself a "designed for" badge...with which
Microsoft dupes the general public - without explicitly saying so because
it would, of course, be a lie, in fact - into believing "implicitly" that
the absence of a "designed for Windows" badge means Windows won't run or
something...total crap, of course...my machine has the "boycott" badge of
"Powered by Red Hat" on it instead...I'm seriously considering getting
replacement Penguin keys to pop out the Windows key and replace
them...though, I'd prefer if there was some more basic and amusing
"obvious" badges available...you know, "powered by electricity" or
"designed for general purpose data processing" or "microchips by lots of
different manufacturers inside!"...well, it's more honest and accurate,
isn't it? ;) - and (depending on settings but "by default") "Microsoft" is
written down the side of that menu...then there's the Windows logo in the
top right corner of the Explorer windows (replaced by an Internet Explorer
logo in the "Microsoft(R)" prefixed Internet Explorer...though, Outlook
Express uses the Windows logo rather than the Outlook logo)...
Oh, and just in case you still haven't got the message of who wrote Windows
somehow (which seems to require you to be blind and deaf and have no
connection to reality at all...because it's such common knowledge, anyway,
without the logos and things, so much so that most people on the face of
planet Earth know who Bill Gates - just "the bloke who owns it all" - is
without any introductions...who owns McDonald's? Exactly...and that even
has a "clue" in the name that someone called "McDonald" must have at least
started the company at some point ;), "Microsoft Sam" will happily read out
all the hundreds of instances of "Microsoft" covering your screen
(including being specially programmed to say "Microsoft Windows logo"
whenever it discovers the logo on a page...why on Earth does a blind person
need to know there's a logo there at all? If they've been blind all their
life, they have no idea what the "Microsoft Windows logo" looks like...
This is evidence of a pretty serious psychological "inferiority complex"
from Mr.Gates and his mates...this goes way, way beyond "advertising"
towards "golden cow" false idols or something...bow before your "Emperor",
hail the Glory of Redmond! Nice try, ma'am, to give him an honourary "Sir"
prefix (not that he technically can actually use it because he's an
American) in an attempt to perhaps shut him up with all those "Microsoft"
prefixes everywhere, by giving a _real_ prefix "title" to show off to
people with ("hey, I'd be a 'Sir', you know, if I was British...beat
that!")...a white not-really-a-knight in distinctly rusty armour...lucky
for the Queen that "knights" are only ceremonial titles these days (a
method to "honour" someone for "doing good works" :) or, if charged with
her protection, he'd probably just sell her to Bin Laden as a hostage for a
buck fifty...well, it'd be a "profit" for him, wouldn't it? ;) ]
Post by Jure Sah Post by Randall Hyde
All Win32 GUI
programming is done using the Win32 API. Under Linux,
it's calls to the GNOME API (or whatever window manager
you're using) which isn't OO IIRC.
Post by Randall Hyde
But why not make it portable between Win32 and Linux?
Now that would be really neat.
Well I am yet to suceed in installing GNOME on my box... last time I
tried it seemed like there was a neverending stream of dependencies, one
of which just wouldn't install when downloaded.
What "distro" are you using? The simple method is to use a "distro" that
automatically installs it with Linux...or one that can use the "RPM"
installation method (surely GNOME can be got in an "RPM"? I don't
know...just guessing ;)...
I prefer KDE's style, anyway...looks better...
Post by Jure Sah
Other than that I still have to learn C or something I can actually use
in Linux for starters. (I'm lazy ;)
Hey, no need to learn C once LuxAsm is up and running! ;)
Post by Jure Sah
My idea of portability otherwise (given my experience in programing so
far) is not to create a program that will compile everywhere, but to set
up a standard for the datakeeping and then seperate programs that
utilize each OS to the best of their abbility seperately. Tends to save
a lot of nerve as well as allow for more portability (between GNOME and
X11, for example ;).
Hallelujah! Someone's got it, at last! :)
Yes, there are many different _types_ of "portability" (even though it is
often spoken of as if some all-or-nothing binary attribute..."is your
program portable?" is NOT actually a "yes" or "no" question but more of a
"it's source-level but not binary compatible...doesn't utilise UNICODE,
follows the OpenGL standard, etc., etc." answer should come out of that
And one of the most elegant "portability" solutions is simply
"standardisation"...to define a platform-independent "standard" and then,
as you say, each OS can implement it as best as possible to the specific
machine...this is what X uses, the internet protocols use, UNIX uses ("de
facto"), Java uses, etc., etc....X is a particularly nice example because,
for instance, it uses a simple solution to "endianness"...when setting up a
"connection" to an X server, the client sends a "byte order mark" as its
first message to the server...then all communications happen in that
Potentially more efficient than the internet's "network order is
big-endian" throughout...kind of proved by the unfortunate accident that
the majority of the world's machines are x86 based - which is little
endian - and, thus, most internet communications are being continually
"byte swapped" all the time...kind of funny, really...the numbers get "byte
swapped" to be sent and then, once they reach the destination, they are
"byte swapped" straight back to what it already was originally...physically
speaking, there's no need to swap anything at all in that situation...they
had the sense, though, to make the IP address a series of _bytes_ that we
don't get constant "byte swapping" all along the chain of "propogation"
(because, of course, internet messages rarely go directly to their
destination but have to be "propogated" from server to server (which, at a
minimum, has to read the IP address of the destination out of the packet to
know where to be delivering it next ;)...hence, consider having to "byte
swap" just to read the packet to know where to deliver it: "packet -> byte
swap -> ISP -> byte swap -> read -> byte swap -> next server -> byte
swap -> read -> byte swap -> next server -> byte swap -> read -> byte
swap -> destination -> byte swap -> use"...a ludicrous situation, really,
when, chances are, every machine in the chain is, in fact, little endian
(an x86, probably) so there was no physical reason whatsoever to perform
even one byte swap, other than to fit in with the "standard" :)...
X's method to deal with "endianness" is a little better in that it sends a
"byte order" message to say "hello, Mr.Server, I'm a little-endian machine"
when it first connects (and from then on, the connection is set at this
endianness...which makes sense, because CPUs usually don't suddenly change
"endianess" half-way through communications or anything...it's one of those
"up front" solutions...sort it all out _ONCE_ at "initialisation" rather
than continually pay a "portability" cost with every packet / message /
whatever ;)...then it's - here's the clever bit - up to the server how it
wants to exactly _implement_ that...it could use the same code and some
"endianess" flag...it could have separate hard-wired "big endian" and
"little endian" code (trading a little "code size" for some "speed"...now
the only "endianness" problems are the ones you can't avoid because the
machines are _physically_ different "endianness" :)...
X has a few examples of this smart use of "restraint"...you know, when it's
smart to specify and when it's actually far, far smarter to "use restraint"
and NOT specify something...the act of NOT specifying something in a
standard can be as smart and effective as specifying things...how do jazz
musicians like to phrase it? "It's not just the notes we're playing, it's
the notes we _aren't_ playing"...the gaps between the notes are just as
important as the actual notes played...good music is as much about dischord
as it is harmony...about the timing between notes as much as the duration
of the notes themselves (playing "pizzicato" - short stunted notes or,
taking a negative perspective, playing long "gap" non-notes - is found just
as much in classical music as playing funky guitar as in a techno bassline
Hence, X doesn't specify things like the "endianness" outright like the
internet protocols do...it specifies a means for machines to communicate
their "endianness" to each other (how the X server actually wants to deal
with this is an "implementation detail"...one of the smart things that the
X standard uses "restraint" to NOT specify ;)...and X specifies the
"requests" and "events" (collectively: the messages between client and
server...the terms reflect the direction..."request = client -> server",
"event = server -> client" ;)...what messages there are, the format of the
data packets, etc....but it doesn't specify the actual "transport" on which
those messages are sent...again, a smart use of _RESTRAINT_ in the standard
to know when to leave things as "implementation details"...hence, the
"transport" can potentially be selected according to the situation (for
instance, an X implementation could choose to use "sockets" for remote
communications while using direct IPC - a queue or shared memory or
something - when both client and server are "local" to reduce
"overhead"...it can also select a different caching policy for both...for
the "remote" connection, it can try to cache as much as possible to
conserve bandwidth...but for "local" connections, it can instead prioritise
_responsiveness_ rather than throughput, as "bandwidth" is typically a
non-issue...unfortunately, not all X implementations seem to have realised
that the lack of specification was _delibrate_ to allow this ability to
actually _change_ "transports" and caching policies to prioritise either
responsiveness or throughput, according to the type of connection
needed...by just saying "it is cached" but not specifying anything specific
like the size or "policy" of that caching, the implementation can select
different caching policies that are appropriate to the specific
situation...indeed, including a caching policy of "write through" that it
doesn't cache at all, if that ever made sense as a good idea :)...
There are many, many examples of "portability" where the implementors
clearly don't "get" it whatsoever...unsurprisingly, Microsoft have a nice
example in the Win32 API...
Post by Jure Sah
Post by Randall Hyde
Someday, well in to the future, once I get HLA v2.0 operational,
So you can't install it either, eh? :))
Post by Randall Hyde
my goal is to begin work on a portable GUI library that allows one
to write GUI apps that recompile under Linux, Win32, BSD, and
other x86 OSes (GNOME or Win32 based). Maybe even BeOS.
Using the hardware VGA instructions for this seems to be the universial
solution. Works under any OS. ;)
Anyway, I get your idea... using objects of ASM code that are
interchangable depending on the machine they happen to be 'compiling'
on. However, remind me if I'm mistaken, but isn't that exactly C? =P
Post by Randall Hyde
Obviously, I have an interest in this. :-) But I have other priorities
http://dustworld.dyndns.org/x/moonlink.gif ) It won't take much to do
the innitial version, it's mainly working on the GUI... After that I can
link it to an organizer application to make it automatically select
modules in accordance to the hardware it is intended for.
...and OMG it's 3 am. =P ...TTYL.
Primary function: Coprocessor
Secondary function: Cluster commander