[comp.sys.amiga] M2Amiga, a new Modula-2 compiler

schaub@sugar.UUCP (Markus Schaub) (10/30/87)

ANNOUNCEMENT:

        //    							        //
       //     M2Amiga						       //
   \\ //      A new single pass Modula-2 compiler for the Amiga    \\ //
    \X/ 							    \X/

M2Amiga the ultimate Modula-2 compiler for the Amiga is available now!  This
compiler is derived directly from Professor Wirth's new single pass compiler
and has been adapted to the Amiga environment by the same team that released
the public domain ETHZ compiler on Fish Disk #24. Since the release of  this
version a lot  of changes  had been  made to  fit optimally  into  the Amiga
environment.

M2Amiga works with version 1.2 of the Amiga operating system and runs on the
Amiga 500, Amiga 1000 and on the Amiga 2000 with at least one disk drive and
at least 512k of RAM. The system  can be  used either  from the CLI (Command
Line Interface) or from within the workbench environment 

This system comprises:

- an English or German language User Guide which explains in detail how  the
  system works, describes the basic modules and contains all interfaces with
  the Amiga operating system as Modula-2 definitions. This documentation and
  the English introductory guide allow  both the  beginner and the  advanced
  user to find the information he or she needs quickly and easily.

- a single  pass compiler  which produces  68000 machine  code from standard
  ASCII files at high speed. It can  generate on request  code to test array
  limits, stack  limits, overflow  and missing  return instructions etc. The
  compiler  does not interrupt on  errors but  continues compilation, noting
  any further ones. Exceptionally accurate error messages  are recorded in a
  file for later display by the editor.

- mc68000 specific operations as reading and writing registers, inline 68000
  instructions, FFP representation of REAL numbers (together with IEEE)  are
  supported by the compiler. Also supported are double precision  types. ROM
  calls (Exec, Intuition etc) DO NOT REQUIRE intermediate code.

- a  run-time system  takes into  account the special conditions of a multi-
  tasking system. Program crashes  (division by 0, address errors etc.)  are
  trapped, all open files are closed and all allocated memory is released.

- an editor derived from microEmacs that places the cursor at  the error and
  reports the error in plain text. Menus and error messages are  displayable
  in either German or English.

- a linker which automatically searches for all the  implementation  modules
  belonging  to  a module  and combines them  into a  program  which can run
  either from the workbench environment or from the CLI.

- all definitions relating to  the Amiga  operating system.  The definitions
  follow  the  official  definitions  for  the  C  programming  language  in
  structure and nomenclature. Modula-2's  much more  stringement data typing
  has been used in these definitions wherever possible. Remember: NO  OBJECT
  files with intermediate code needed!

- a  large  number  of  basic  libraries:  Arguments,   ASCII,   Conversions,
  Coroutines, FileNames, FileSystem,  FFPConversions, Heap,  InOut, MathLib0,
  MathLibLong, RandomNumbers,  RealConversions,  Storage,  Strings, Terminal,
  TextWindows and many more.

- even more: additional utilities are available for this basic package. There
  is a loader with  a source level  debugger, a converter for  standard Amiga
  object files  and further libraries  which are extremly  useful for program
  development.


The single pass compiler, the  user-friendly run-time  system and the absence
of   intermediate  code for  ROM calls  makes this system very  suitable  for
efficient program development on the Amiga.

M2Amiga  is  available  in  its  German version since August 87 and Interface
Technologies  Corporation and I are  very proud to  announce this product now 
on the American market. 

M2Amiga costs $199 (+$5 for shipping and handling) and is available from

Interface Technologies Corporation	further info (713) 523 8422 Markus
3336 Richmond,  Suite 323		orders       (800) 922 9049
Houston, Tx 77098

Also available:
- a demo version for limited  programs and with just a few libraries.
  Cost: $5 (+$1 for shipping and handling)
  Will be on a Fish Disk soon.

In Europe:
A.+L. Meier-Vogt, Im Spaeten 23, CH 8906 Bonstetten/ZH, +41 1 700 3037

Being one of the developers of this product I'll be happy to answer your
questions by e-mail, mail or on the phone.

Markus Schaub
M2Amiga Developer

cs162ffl@sdcc18.ucsd.EDU (John Schultz) (11/01/87)

How does the M2Amiga Compiler compare to the Benchmark compiler from
Oxxi? It too is a one pass emacs integrated compiler...I have been
using it for a week without finding any major bugs (and the version
I have is pre-release).
Supported and developed in the US by Leon Frenkel and Oxxi, Inc.

I am an ex-TDI user and am no way associated with Oxxi, Inc., just a
very impressed user.

The Benchmark compiler is advertised at 10000 lines per minute with
30000 lines in bursts.  What are the M2Amiga Specs?

Curious,

  John

schaub@sugar.UUCP (Markus Schaub) (11/05/87)

In <796@sdcc18.ucsd.EDU>, cs162ffl@sdcc18.ucsd.EDU (John Schultz) writes:
> How does the M2Amiga Compiler compare to the Benchmark compiler from
> Oxxi? It too is a one pass emacs integrated compiler...I have been
No, compiler, linker, editor etc are standalone programs. No hot-keys.
Compiler and linker support interactive mode, where you can run each program
in its own CLI window and have the same effects. I know Benchmark and I really
have problems on my 512k Amiga. M2Amiga was totally developed on 512k/2 drive
machines.

> using it for a week without finding any major bugs (and the version
> I have is pre-release).
Bugs, well I found some, I don't know if you would call them 'major bugs'.

> Supported and developed in the US by Leon Frenkel and Oxxi, Inc.
I doubt this is 100% true. I found some famous Wirth bugs in the compiler.
I have reason to believe that Leon Frenkel uses Wirth's source too, just
without mentioning it. M2Amiga is developed in Switzerland and I support it
here in the US. I'm one of the developers, I'm a swiss guy, too. Have you
ever heard anything bad about Swiss quality? :-)

> I am an ex-TDI user and am no way associated with Oxxi, Inc., just a
> very impressed user.
I acknowledge the idea of integrating everything into the editor. 

> The Benchmark compiler is advertised at 10000 lines per minute with
> 30000 lines in bursts.  What are the M2Amiga Specs?
Lightning fast, same compiler (basically), same speed...
M2Amiga uses a more compact symbol file which takes a little more time to read
in. The M2Amiga linker is faster (no search for files as Intuition.obj needed).
Amiga specific programs (based on Intuition/Dos/Exec/etc) are more compact in
M2Amiga 'cause there is no intermediate code for ROM calls which has to be
linked to the object file.
Further all OpenLibrary/CloseLibrary calls are done by the run-time system.
It is possible to write:

MODULE slowDown;
FROM Dos IMPORT Delay;
BEGIN
 Delay(10000)
END slowDown.
NOTE: only libraries you use are opened, works also with disk libraries. Also
it is very easy to write your own interfaces to private or commercial libraries
No Assembly needed, just parameter placing and library offset,and there you go!

> Curious,
>   John
Ask and you'll get an answer! Any more questions any other curious people?
----
        // Markus Schaub	uunet!nuchat!sugar!schaub	 (713) 523 8422
       //  This routine does no error-checking.  If your  delta  values specify
   \\ //   some far corner of the universe, Intuition will attempt to size your
    \X/	   window to that far corner. Because of the distortions in the space -
  time continuum that can result from this, as  predicted by special relativity
  the result is generally not desirable. (RKM II A-165 SizeWindow)

haitex@pnet01.cts.com (Wade Bickel) (11/10/87)

        If the M2Amiga Linker works as you suggest, isn't the prep code
     which must be generated prior to the call to a ROM routine redundantly
     created at every call of the same routine.  I can see this being faster,
     but not more compact.

        I am currently a beta-tester for the Benchmark compiler.  Thus far
     it has been very impressive, and I only discovered one bug, a very 
     minor one which was fixed for the release.  If you properly configure
     the startup file and disk, it is possible to work with only one drive
     and 512K, if your work needs are small to moderate.  But I would not
     generally recomend it.

        Hopefully I will get a copy of M2Amiga in the near future.  I am 
     still open minded and if it is as good as you say when compared to 
     Benchmark I will admit it.  But if it is'nt...

                                                Thanks,

                                                        Wade.

        PS:  Aside from being an uncompensated beta-tester of the
               Benchmark compiler I have no other assc. with either
               Leon Frenkel or OXXI, Inc.  

UUCP: {cbosgd, hplabs!hp-sdd, sdcsvax, nosc}!crash!pnet01!haitex
ARPA: crash!pnet01!haitex@nosc.mil
INET: haitex@pnet01.CTS.COM

daveh@cbmvax.UUCP (Dave Haynie) (11/11/87)

in article <1982@crash.CTS.COM>, haitex@pnet01.cts.com (Wade Bickel) says:
> Xref: cbmvax comp.sys.amiga:10462 comp.lang.modula2:509
> 
>         If the M2Amiga Linker works as you suggest, isn't the prep code
>      which must be generated prior to the call to a ROM routine redundantly
>      created at every call of the same routine.  I can see this being faster,
>      but not more compact.

It could be a close call, size wise.  I'm not sure about M2 calling conventions,
but in C, all function arguments are pushed on the stack.  The stub from 
Amiga.Lib pops these stack arguments into the appropriate registers, loads
the library base into A6, then calls the appropriate library routine relative
to that library base.  If a compiler can generate an alternate calling 
convention for library routines, based on specific knowledge that the routine
is a library routine, all the stack stuff (compiler pushes for function call,
stub pops for library call) can be eliminated.  The in-line library call
still has to get the right arguments into registers, but in most cases either
they're already in registers, or they'd have to pass through registers on the
way to the stack, so this isn't extra work.  Exclusive of argument handling,
the setup for library call is only one or two extra instructions over the
normal function call.

>         Hopefully I will get a copy of M2Amiga in the near future.  I am 
>      still open minded and if it is as good as you say when compared to 
>      Benchmark I will admit it.  But if it is'nt...

In any case, it looks like Amiga-based M2 compilers are evolving at least as
quickly as C compilers, making M2 a really viable language for the Amiga.
I bought TDI way-back-when, and was throughly unimpressed.  I've been using
Lattice since then, and their new compiler is a pretty good one.  But from
what I've been reading about the state of M2, I'm just about ready to
reconsider it again, and may soon spring for M2Amiga, or possibly BenchMark
if they ever figure out who really owns that sucker.

> 
>                                                         Wade.
-- 
Dave Haynie     Commodore-Amiga    Usenet: {ihnp4|caip|rutgers}!cbmvax!daveh
   "The B2000 Guy"              PLINK : D-DAVE H             BIX   : hazy
    "Computers are what happen when you give up sleeping" - Iggy the Cat

schaub@sugar.UUCP (Markus Schaub) (11/13/87)

In article <1982@crash.CTS.COM>, haitex@pnet01.cts.com (Wade Bickel) writes:
> 
>         If the M2Amiga Linker works as you suggest, isn't the prep code
>      which must be generated prior to the call to a ROM routine redundantly
>      created at every call of the same routine.  I can see this being faster,
>      but not more compact.
The code for a ROM call is exactly the same as the code for a procedure call
to a prodecure of an other module. The placing of parameters into registers
doesn't make a big difference. With other compilers you have an external call
to the assembler stub popping parameters into registers and eventually pushing
results back on the stack again and the basic ROM call.

Simplified: The time others arrive in their stubs we arrive at the function in
ROM. 

A German jounalist doing some reseach on this came up with following figures.
machine cycles for a Library Call.
TDI ~250, Manx ~140, M2Amiga 94, he complained because the optimal Assembler
call only uses 74 cycles. This still leaves some space for improvement :-) 
> 
>         Hopefully I will get a copy of M2Amiga in the near future.  I am 
>      still open minded and if it is as good as you say when compared to 
>      Benchmark I will admit it.  But if it is'nt...
> 
You won't be disappointed, I hope.
M2Amiga is in stock, should I reserve a copy for you :-)

     //	Markus Schaub		uunet!nuchat!sugar!schaub      (713) 523 8422
    //	M2Amiga Developer	trying to get back the money I  paid  for  my
\\ //				Amiga by selling a few M2Amiga.
 \X/	c/o Interface Technologies Corp, 3336 Richmond #323, Houston Tx 77098

dillon@CORY.BERKELEY.EDU (Matt Dillon) (11/15/87)

:The code for a ROM call is exactly the same as the code for a procedure call
:to a prodecure of an other module. The placing of parameters into registers
:doesn't make a big difference. With other compilers you have an external call
:to the assembler stub popping parameters into registers and eventually pushing
:results back on the stack again and the basic ROM call.
:
:Simplified: The time others arrive in their stubs we arrive at the function in
:ROM. 
:
:A German jounalist doing some reseach on this came up with following figures.
:machine cycles for a Library Call.
:TDI ~250, Manx ~140, M2Amiga 94, he complained because the optimal Assembler
:call only uses 74 cycles. This still leaves some space for improvement :-) 

	Well, I wouldn't get too caught up in it.  For one thing, those 
numbers are obviously averages over quite a few different calls, because 
things like Remove() from assembly take maybe 22 cycles of overhead
(loadregister-4, jsr-18) in the call... common RTS and meat not included.
If you look carefully, I think you will find that the library calls that run
quickest take fewer arguments and thus less overhead, and the library calls 
that take more arguments generally take longer to complete anyway, so the 
overhead can almost be thought of as a straight percentage of the execution
time for the call.

	This straight percentage is going to be very low, so optimizing
from 140 to 74 isn't going to be noticeable at all.

				-Matt
	

schaub@sugar.UUCP (Markus Schaub) (11/15/87)

In article <2730@cbmvax.UUCP>, daveh@cbmvax.UUCP (Dave Haynie) writes:
> in article <1982@crash.CTS.COM>, haitex@pnet01.cts.com (Wade Bickel) says:
> > Xref: cbmvax comp.sys.amiga:10462 comp.lang.modula2:509
> >  created at every call of the same routine.  I can see this being faster,
> >  but not more compact.
> It could be a close call,size wise.I'm not sure about M2 calling conventions,
> but in C, all function arguments are pushed on the stack.  The stub from 

Same in Modula-2, only difference: M2 routines clean the stack, fixed number
of parameters (in difference to C) makes this possible.

> Amiga.Lib pops these stack arguments into the appropriate registers, loads
> the library base into A6, then calls the appropriate library routine relative

In M2Amiga the library base is loaded pc relative not from an absolute address,
and the library offset is coded as a 16-bit value instead of a 32-bit external
absolute value. This the difference to C stubs.

> to that library base.  If a compiler can generate an alternate calling 
> convention for library routines, based on specific knowledge that the routine

Thanx, to precompiled definitions (symbol files)

> the setup for library call is only one or two extra instructions over the
> normal function call.

Almost exactly, I wish this were my words, but although being 4 months in the
States now my English could need some lessons.We don't need extra instructions
because M2Amiga also loads basepointers for imported modules the same way. 

> In any case, it looks like Amiga-based M2 compilers are evolving at least as
> quickly as C compilers, making M2 a really viable language for the Amiga.

I hope my friends back in Switzerland will soon release the source level
debugger! There will be real competition to C!
Hey Claudio, maybe you can tell us about the state of the debugger.

> >                                                         Wade.
> -- 
> Dave Haynie     Commodore-Amiga    Usenet: {ihnp4|caip|rutgers}!cbmvax!daveh

-- 
     //	Markus Schaub		uunet!nuchat!sugar!schaub      (713) 523 8422
    //	M2Amiga Developer	trying to get back the money I  paid  for  my
\\ //				Amiga by selling a few M2Amiga.
 \X/	c/o Interface Technologies Corp, 3336 Richmond #323, Houston Tx 77098

peter@sugar.UUCP (Peter da Silva) (11/16/87)

> > In any case, it looks like Amiga-based M2 compilers are evolving at least as
> > quickly as C compilers, making M2 a really viable language for the Amiga.
> 
> I hope my friends back in Switzerland will soon release the source level
> debugger! There will be real competition to C!

How about statically initialised structures? How do you do the equivalent in
Modula of the 'C':

struct Gadget STD_Gadget[GADGETS] = {
/*NEXT, LFT, TP,WDTH, H, FLAG,  ACT, TYP, REND, Z, TXT, Z, SPEC, ID, Z */
{ G(1), IN1,TP1, WD1,HT, SF,     SA,  SG,    Z, Z,   Z, Z, SI(0), 0, 0 },
{ G(2), IN1,TP2, WD1,HT, SF|SEL, SA,  SG,    Z, Z,   Z, Z, SI(1), 1, 0 },
{ G(3), IN1,TP3, WD1,HT, SF,     SA,  SG,    Z, Z,   Z, Z, SI(2), 2, 0 },
{ G(4), IN3,TP4, WD3,HT4,BF1,    BA,  BG,BB(0), Z, TOK, Z,     Z, 3, 0 },
{ G(5), IN4,TP4, WD4,HT4,BF2,    BA,  BG,BB(1), Z, TNO, Z,     Z, 4, 0 },
{ G(6), IN6,TP4, WD6,HT4,BF1,    BA,  BG,BB(2), Z, TVL, Z,     Z, 5, 0 },
{ NULL, IN5,TP5, WD5,HT5,PF,     PA,  PG, IMAG, Z,   Z, Z,  PROP, 6, 0 }
};
-- 
-- Peter da Silva  `-_-'  ...!hoptoad!academ!uhnix1!sugar!peter
-- Disclaimer: These U aren't mere opinions... these are *values*.

schaub@sugar.UUCP (Markus Schaub) (11/16/87)

In article <1069@sugar.UUCP>, peter@sugar.UUCP (Peter da Silva) writes:
> How about statically initialised structures? How do you do the equivalent in
> Modula of the 'C':
> 
> struct Gadget STD_Gadget[GADGETS] = {
> /*NEXT, LFT, TP,WDTH, H, FLAG,  ACT, TYP, REND, Z, TXT, Z, SPEC, ID, Z */
> { G(1), IN1,TP1, WD1,HT, SF,     SA,  SG,    Z, Z,   Z, Z, SI(0), 0, 0 },

We know about this problem, a guy in Switzerland is working on some kind of
language extension. Release date unknown. This moment just one possibility:

PROCEDURE MyWindow; (* $E- no entry/exit code for this procedure please *)
BEGIN
 INLINE(
  0, 5, 0, 4, 0FFE0H, ... your data ...
 )
END MyWindow;
...
 wp:=OpenWindow(ADR(MyWindow));
...

Not very nice, but it works!

-- 
     //	Markus Schaub		uunet!nuchat!sugar!schaub      (713) 523 8422
    //	M2Amiga Developer	trying to get back the money I  paid  for  my
\\ //				Amiga by selling a few M2Amiga.
 \X/	c/o Interface Technologies Corp, 3336 Richmond #323, Houston Tx 77098

dillon@CORY.BERKELEY.EDU (Matt Dillon) (11/16/87)

>Same in Modula-2, only difference: M2 routines clean the stack, fixed number
>of parameters (in difference to C) makes this possible.

	You mean the calee restores the stack rather than the caller?  That's
an interesting nitpick, but the designers of C wanted programmers to be able
to make calls to the same routine with a varying number of arguments.  This
doesn't make the code any slower, just slightly longer.

> Amiga.Lib pops these stack arguments into the appropriate registers, loads
> the library base into A6, then calls the appropriate library routine relative

>In M2Amiga the library base is loaded pc relative not from an absolute address,
>and the library offset is coded as a 16-bit value instead of a 32-bit external
>absolute value. This the difference to C stubs.

	Hate to say this, but it's pc relative in Aztec as well, at least
with the small code model.  and the library offset is coded as a 16 bit value
(you can't HAVE 32 bit offsets with the 68000).

	Still, I admit the library interface in both Aztec and Lattice are
somewhat inefficient.  Lattice will fix this in 4.0, hopefully Aztec will
come up with something to (but as I said before the overhead usually isn't
worth optimization when compared to actual execution time of the library
function).

>> In any case, it looks like Amiga-based M2 compilers are evolving at least as
>> quickly as C compilers, making M2 a really viable language for the Amiga.
>
>I hope my friends back in Switzerland will soon release the source level
>debugger! There will be real competition to C!
>Hey Claudio, maybe you can tell us about the state of the debugger.

	All I can say is..... Go for it!

						-Matt

schaub@sugar.UUCP (Markus Schaub) (11/17/87)

In article <8711142308.AA01690@cory.Berkeley.EDU>, dillon@CORY.BERKELEY.EDU (Matt Dillon) writes:
> 
> 	This straight percentage is going to be very low, so optimizing
> from 140 to 74 isn't going to be noticeable at all.
> 
> 				-Matt

Noticeable? I never said you will notice any change, all compilers produce
fast (very fast :-) code. But there might be a difference for REAL computation
where FFP and MathIEEDoubbas routines are called. But still you're right.
Faster calls don't make faster routine execution. Let's speed up the libraries!

-- 
     //	Markus Schaub		uunet!nuchat!sugar!schaub      (713) 523 8422
    //	M2Amiga Developer	trying to get back the money I  paid  for  my
\\ //				Amiga by selling a few M2Amiga.
 \X/	c/o Interface Technologies Corp, 3336 Richmond #323, Houston Tx 77098

haitex@pnet01.cts.com (Wade Bickel) (11/17/87)

dillon@CORY.BERKELEY.EDU (Matt Dillon) writes:
>:The code for a ROM call is exactly the same as the code for a procedure call
>:to a prodecure of an other module. The placing of parameters into registers
>:doesn't make a big difference. With other compilers you have an external call
>:to the assembler stub popping parameters into registers and eventually pushing
>:results back on the stack again and the basic ROM call.
>:
>:Simplified: The time others arrive in their stubs we arrive at the function in
>:ROM. 
>:
>:A German jounalist doing some reseach on this came up with following figures.
>:machine cycles for a Library Call.
>:TDI ~250, Manx ~140, M2Amiga 94, he complained because the optimal Assembler
>:call only uses 74 cycles. This still leaves some space for improvement :-) 
>
>	Well, I wouldn't get too caught up in it.  For one thing, those 
>numbers are obviously averages over quite a few different calls, because 
>things like Remove() from assembly take maybe 22 cycles of overhead
>(loadregister-4, jsr-18) in the call... common RTS and meat not included.
>If you look carefully, I think you will find that the library calls that run
>quickest take fewer arguments and thus less overhead, and the library calls 
>that take more arguments generally take longer to complete anyway, so the 
>overhead can almost be thought of as a straight percentage of the execution
>time for the call.
>
>	This straight percentage is going to be very low, so optimizing
>from 140 to 74 isn't going to be noticeable at all.
>
>				-Matt
>	


        Seems to me any cycles are important.  Perhaps not for general
    code, but when it comes to the decision as to weather or not to use
    assembly, this could make a difference.

                                                Wade.

        PS: Matt, have you tried Modula-2?  I know your a C programmer, 
                and just wondered if you'd given M2 a look.


UUCP: {cbosgd, hplabs!hp-sdd, sdcsvax, nosc}!crash!pnet01!haitex
ARPA: crash!pnet01!haitex@nosc.mil
INET: haitex@pnet01.CTS.COM

kent@xanth.UUCP (11/18/87)

[They're talking machine cycles for a procedure call here, folks]

In article <1074@sugar.UUCP> schaub@sugar.UUCP (Markus Schaub) writes:
>In article <8711142308.AA01690@cory.Berkeley.EDU>,
>dillon@CORY.BERKELEY.EDU (Matt Dillon) writes:
>> 
>> 	This straight percentage is going to be very low, so optimizing
>> from 140 to 74 isn't going to be noticeable at all.
>> 
>> 				-Matt
>
>Noticeable? I never said you will notice any change, all compilers
>produce fast (very fast :-) code. But there might be a difference for
>REAL computation where FFP and MathIEEDoubbas routines are called. But
>still you're right.  Faster calls don't make faster routine execution.
>Let's speed up the libraries!

Well, yes, lets do, but the rest of the argument is pretty bogus.

The speed of procedure calls, if you are aware of it and care about
speed of your program, changes the STYLE of your programming.

No matter what the language, I find myself, as a fanatic modular
programming devotee, frequently writing procedures containing only ONE
executable line.  Why?  Because it makes the code much more readable
to put a one word name for what I want done in the calling routine,
and hide the grungy details in a separate procedure.  My goal, not
always achieved, is to have the executable code of any procedure fit
on a single, not too busy screen.

In terms of program maintenance, this is a Good Thing.  But, if the
cost of that procedure call is high relative to the amount of code
being executed, I'm suddenly reluctant to Do Things Right.

So improve the libraries all you want, but remember, high procedure
call overhead has negative affects beyond just the extra time spent;
it can actually worsen coding style.  Thus, time spent improving this
area is also very worth while.

Thanks for listening.

Kent, the (impoverished) man from xanth.

"Computer - a mass occupying my desk with an unusual attraction for
money." (me)

"Sometimes I think mine is a black hole, located in the general
vicinity of my checkbook." (Blaine Gardner, in response.)

haitex@pnet01.cts.com (Wade Bickel) (11/18/87)

schaub@sugar.UUCP (Markus Schaub) writes:
>In article <1069@sugar.UUCP>, peter@sugar.UUCP (Peter da Silva) writes:
>> How about statically initialised structures? How do you do the equivalent in
>> Modula of the 'C':
>> 
>> struct Gadget STD_Gadget[GADGETS] = {
>> /*NEXT, LFT, TP,WDTH, H, FLAG,  ACT, TYP, REND, Z, TXT, Z, SPEC, ID, Z */
>> { G(1), IN1,TP1, WD1,HT, SF,     SA,  SG,    Z, Z,   Z, Z, SI(0), 0, 0 },
>
>We know about this problem, a guy in Switzerland is working on some kind of
>language extension. Release date unknown. This moment just one possibility:
>
>PROCEDURE MyWindow; (* $E- no entry/exit code for this procedure please *)
>BEGIN
> INLINE(
>  0, 5, 0, 4, 0FFE0H, ... your data ...
> )
>END MyWindow;
>...
> wp:=OpenWindow(ADR(MyWindow));
>...
>
>Not very nice, but it works!
>
>-- 
>     //	Markus Schaub		uunet!nuchat!sugar!schaub      (713) 523 8422
>    //	M2Amiga Developer	trying to get back the money I  paid  for  my
>\\ //				Amiga by selling a few M2Amiga.
> \X/	c/o Interface Technologies Corp, 3336 Richmond #323, Houston Tx 77098


UUCP: {cbosgd, hplabs!hp-sdd, sdcsvax, nosc}!crash!pnet01!haitex
ARPA: crash!pnet01!haitex@nosc.mil
INET: haitex@pnet01.CTS.COM

haitex@pnet01.cts.com (Wade Bickel) (11/18/87)

schaub@sugar.UUCP (Markus Schaub) writes:
>In article <1069@sugar.UUCP>, peter@sugar.UUCP (Peter da Silva) writes:
>> How about statically initialised structures? How do you do the equivalent in
>> Modula of the 'C':
>> 
>> struct Gadget STD_Gadget[GADGETS] = {
>> /*NEXT, LFT, TP,WDTH, H, FLAG,  ACT, TYP, REND, Z, TXT, Z, SPEC, ID, Z */
>> { G(1), IN1,TP1, WD1,HT, SF,     SA,  SG,    Z, Z,   Z, Z, SI(0), 0, 0 },
>
>We know about this problem, a guy in Switzerland is working on some kind of
>language extension. Release date unknown. This moment just one possibility:
>
>PROCEDURE MyWindow; (* $E- no entry/exit code for this procedure please *)
>BEGIN
> INLINE(
>  0, 5, 0, 4, 0FFE0H, ... your data ...
> )
>END MyWindow;
>...
> wp:=OpenWindow(ADR(MyWindow));
>...
>
>Not very nice, but it works!
>
>-- 
>     //	Markus Schaub		uunet!nuchat!sugar!schaub      (713) 523 8422
>    //	M2Amiga Developer	trying to get back the money I  paid  for  my
>\\ //				Amiga by selling a few M2Amiga.
> \X/	c/o Interface Technologies Corp, 3336 Richmond #323, Houston Tx 77098


    ====================================================================

        Seems like a good solution to me.  I'd like to know more about this
      $E option.  If it is clean, and relocatable (??) this should work quite
      well.  It would be nice to coerce the structure pointer into a record,
      which should work.  ie, Rather than ignoring type checking using ADR,
      couldn't you say

                wp := OpenWindow(NewWindow(MyWindow));

                        at least I think this might work.  

        
        When will the M2Amiga Source Level Debugger be released?  Will it be
      included in the $195 price?  

        What libraries are included?

                                                Thanx,

                                                        Wade.

                PS: sorry, a few bad characters on the line caused an un-
                       finished version of this comment to be sent.


UUCP: {cbosgd, hplabs!hp-sdd, sdcsvax, nosc}!crash!pnet01!haitex
ARPA: crash!pnet01!haitex@nosc.mil
INET: haitex@pnet01.CTS.COM

schaub@sugar.UUCP (Markus Schaub) (11/18/87)

[ ATTENTION COMMERCIAL INFO ON M2AMIGA ]
Sorry about this kind of info posted to the net, but I get a lotta messages
with the same questions.

Problems with M2Amiga prices! Sorry about this.

The price I called retail price in the announcement is just an introductory
offer. Retail will be $249.

M2Amiga, now -> Dec 31, 1987		$199
after Dec 31, 1987			$249

Dealers also profit on orders until end of the year.

The same final product -- We do not sell prereleases!

We do not expect an update before mid 88.
Upgrade policy: Registered users are informed and can get the upgrade for
a very reasonable price.

Add $10 for shipping and handling. Texas resident add 8% sales tax.

Check or Plastic welcome.		Orders: (800) 922 9049
Checks made out to Interface Technologies Corp, see address in disclaimer.

M2Amiga is in stock, orders are shipped the next day.

For Flyers, send me your mailing address.
-- 
     //	Markus Schaub		uunet!nuchat!sugar!schaub      (713) 523 8422
    //	M2Amiga Developer	trying to get back the money I  paid  for  my
\\ //				Amiga by selling a few M2Amiga.
 \X/	c/o Interface Technologies Corp, 3336 Richmond #323, Houston Tx 77098

toebes@sas.UUCP (11/18/87)

In article <8711161753.AA05748@cory.Berkeley.EDU>, dillon@CORY.BERKELEY.EDU (Matt Dillon) writes:
> 	Still, I admit the library interface in both Aztec and Lattice are
> somewhat inefficient.  Lattice will fix this in 4.0, hopefully Aztec will
> come up with something to (but as I said before the overhead usually isn't
> worth optimization when compared to actual execution time of the library
> function).
> 						-Matt
Actually you mean "Lattice fixed this in 4.0" because it has been out for
almost a month.  The overhead for the call is quite significant, especially
for short programs.  With the 4.0 compiler I have been able to reduce frags to
528 bytes and avail to 748 due to the inline code.  When lines has been
compiled with the builtin functions it runs noticably faster.

/*---------------------All standard Disclaimers apply---------------------*/
/*----Working for but not officially representing SAS or Lattice Inc.-----*/
/*----John A. Toebes, VIII         usenet:...!mcnc!rti-sel!sas!toebes-----*/
/*------------------------------------------------------------------------*/