HDTenEightyP/NetNews huggingface dataset:
From: utoddl@guitar.oit.unc.edu (Todd M. Lewis)
Subject: CheckIO return type
Organization: UNC Office of Information Technology
Date: Mon, 31 Aug 1992 12:54:33 GMT

Does CheckIO() really return a BOOL or a pointer?  The 2.04 includes
and autodocs say it returns a BOOL (FALSE) if the I/O has not
completed, and a pointer to the IORequest block if it has.  BOOLs
are 16 bits.  What happens when the IORequest block starts on a
64k boundary?  Am I missing something here or should it really be
declared as "struct IORequest *CheckIO( struct IORequest *);" rather
than "BOOL CheckIO(struct IORequest *);" like the includes and
autodocs say?  Have we been through this already and I just missed it?

Part of the autodoc entry follows:
> SYNOPSIS
>	result = CheckIO(iORequest)
>	D0		 A1
>
>	BOOL CheckIO(struct IORequest *);
>
>   FUNCTION
>	This function determines the current state of an I/O request and
>	returns FALSE if the I/O has not yet completed.  [...]
>   RESULTS
>	result - NULL if I/O is still in progress.  Otherwise
>		 D0 points to the IORequest block.

With CheckIO defined a returning a BOOL, won't it always look like
NULL for IORequests on a 64k boundary?  Doesn't the pointer get
truncated to the low-order 16 bits?
--
Todd M. Lewis / utoddl@guitar.oit.unc.edu
From: griffin@eecae.msu.edu (Dan Griffin)
Newsgroups: comp.sys.amiga.programmer
Subject: ClipBlit() and brushes
Date: 2 Sep 92 06:23:19 GMT
Organization: Michigan State University, College of Engineering, East Lansing
Originator: griffin@eecae.ee.msu.edu


I am trying to perform a graphics operation similar to moving a brush
in DPaint.  Here is what I am doing:

newx = Wnd->MouseX - 26;	// center image around pointer
newy = Wnd->MouseY - 13;
oldx = newx - x;        	// delta x and y movements
oldy = newy - y;

ClipBlit(undorp, 0, 0, rp, oldx, oldy, 52, 27, 0xc0);	// replace destroyed
WaitBlit();                                           
ClipBlit(rp, newx, newy, undorp, 0, 0, 52, 27, 00c0);	// copy new region
WaitBlit();                                           
ClipBlit(erp, 6, 12, rp, newx, newy, 52, 27, 0x60);	// draw 'brush'
WaitBlit();

This does exactly what I want it to.  However, I get stray bits of image
left on the screen, even though I copy the mouse position so it doesn't
change between ClipBlit() calls and I use WaitBlit() between them.  As
a matter of fact, adding WaitBlit() didn't seem to help at all.  What
could be wrong, and is there a faster way of doing this?
-- 
Dan Griffin
griffin@egr.msu.edu
"If an application takes two years to be developed, it's running at
0 MIPS, no matter what hardware platform it's running on" - Jobs
From: jesup@cbmvax.commodore.com (Randell Jesup)
Newsgroups: comp.sys.amiga.programmer
Subject: Re: fork() for AmigaDOS?
Keywords: fork
Date: 27 Aug 92 01:17:22 GMT
Reply-To: jesup@cbmvax.commodore.com (Randell Jesup)
Organization: Commodore, West Chester, PA

gest_ss@uhura.cc.rochester.edu (Gavin Stark) writes:
>Is there a AmigaDOS fork() that works like UNIX fork()?

	No, that either requires an MMU or requires swapping the two processes
into the same memory on every task switch.

>Or is there a way to get a 'C' program to spawn a subroutine as a child that
>runs concurently?

	Yes: CreateNewProc(NP_Entry,mysubroutine).  (In practice you may
well have more tags than that.)  Also be careful for compiler-related issues
like forcing the pointer to global data to be loaded on entry to the
routine (geta4() in Manx, __saveds in SAS).

-- 
"Rev on the redline, you're on your own; seems like a lifetime, but soon it's
 gone..."  Foreigner
-
Randell Jesup, Jack-of-quite-a-few-trades, Commodore Engineering.
{uunet|rutgers}!cbmvax!jesup, jesup@cbmvax.cbm.commodore.com  BIX: rjesup  
Disclaimer: Nothing I say is anything other than my personal opinion.
Organization: Sophomore, Electrical and Computer Engineering, Carnegie Mellon, Pittsburgh, PA
Newsgroups: comp.sys.amiga.programmer
Date: Thu,  3 Sep 1992 17:47:40 -0400 
From: Jonathan Michael Kraly <jk72+@andrew.cmu.edu>
Subject: Bitplanes

	I'm writing a program in Modula-2 and need to add another
bitplane to the workbench screen.  I've tried a number of things but
can't do it.  Anybody know specifically what records and things need
to be changed to do this?
(jk72@andrew.cmu.edu)
Newsgroups: comp.sys.amiga.programmer
From: jeh@raster.kodak.com (Ed Hanway)
Subject: Re: SAS/C 6.0 Details (LONG!)
Organization: Eastman Kodak Company, Digital Systems Center
X-Newsreader: Tin 1.1 PL5
Date: Wed, 26 Aug 1992 17:10:35 GMT

Fabbian G. Dufoe, III (fgd3@nifty.UUCP) wrote:
: ...will the 2.04 header files work for 1.3 development?

I think that as long as you're aware of what to avoid when developing for
1.3, there should be no problem with using 2.0 headers, since they're a
superset of the 1.3 ones, more or less.

The only problem I encountered with this is that the ARP includes conflicted
with some of the 2.0 asl includes, and perhaps some dos includes as well.
Since the ARP code was limited to a single source file, this wasn't much of
a problem.

--
Ed Hanway --- jeh@raster.kodak.com
This message is packed as full as practicable by modern automated equipment.
Contents may settle during shipment.
From: peter@cbmvax.commodore.com (Peter Cherna)
Newsgroups: comp.sys.amiga.programmer
Subject: Re: Boopsi custom gadget problem
Date: 31 Aug 92 14:07:05 GMT
Reply-To: peter@cbmvax.commodore.com (Peter Cherna)
Organization: Commodore-Amiga, Inc.  West Chester, PA.
Keywords: Boopsi, custom gadget.

In article <1992Aug31.134444.571@csc.canterbury.ac.nz> cree@elec.canterbury.ac.nz (Michael Cree) writes:
>I am having a problem implementing a string gadget as a subclass of
>'strgclass'.

>This, in fact, works from the viewpoint of the user running the code,
>however a check of memory afterwards finds 8 bytes not freed. I then
>run mungwall which illuminates the problem further. It reports a
>mismatched FreeMem of 15 bytes when it should be 20 bytes (hence the
>lost 8 bytes) and then causes the programme to crash with a CPU trap
>(think it was illegal address violation). This all happens when the
>programme is exiting and deallocating the string gadget class I
>implemented. Using the owner command on the address from which the
>FreeMem was called reports that it occured somewhere in the intuition
>library ROM code, but doesn't identify which routine.

Please post or email the mungwall hit.

>Michael Cree                              Gold there is

     Peter
--
Peter Cherna, User Interface Development Group, Commodore-Amiga, Inc.
{uunet|rutgers}!cbmvax!peter    peter@cbmvax.commodore.com
My opinions do not necessarily represent the opinions of my employer.
"Did you code here for forgiveness?  Did you kludge to raise the dead?"
From: heinz@edohwg.UUCP (Heinz Wrobel)
Newsgroups: comp.sys.amiga.programmer
Subject: Re:  1.2, 1.3, and 2.0 question
Date: 1 Sep 92 19:37:26 GMT
Organization: Edotronik GmbH

In article <65001@cup.portal.com> Tony-Preston@cup.portal.com (ANTHONY FRANCIS PRESTON) writes:
>Why not just:
>
>   BPTR nil;
>   nil = Open("NIL:",MODE_OLDFILE);
>   Execute(Command,nil,nil);
>
> This way I get a valid file pointer for both 1.2/1.3/2.0 and don't
> have to worry.  At least I am trying this solution(btw, I Close(nil);
> after the Execute returns).

You have a valid FileHandle but NIL: doesn't have a handler process. SO any
program or command you start that makes use of DeviceProc() and relies on
a return value will die. That's why NULL: was suggested.


--
Heinz Wrobel, Edotronik GmbH (ECG018)
FAX +49 89 850 51 25 / TEL +49 89 850 25 20 (HOME!&VOICE, sometimes...)
From: ST25370@VM.CC.LATECH.EDU
Subject: Re: GCC 2.2.2 Help
Organization: LOUISIANA TECH UNIVERSITY
Date: Thu, 27 Aug 92 07:51:55 CST

In article <1684FD50C.ST25370@VM.CC.LATECH.EDU>
ST25370@VM.CC.LATECH.EDU writes:
 
>
>
>I'm having trouble with GCC 2.2. under KS 1.3 (cc1 refuses to load because of
>insufficient free store).  Is there anyone out there runing 2.2.2 under KS 1.3
>that can help me out?
>
>
 
 
Thanx to those who replied...
The trouble turns out to be that, while I do have 4 Meg RAM, it is configured
in 0.5 meg NON-CONTIGUOUS blocks.  (grumble grumble ARRGHH!!)  What's the
point of non-contiguous RAM? (grumble grrr)
 
Thanks also to Markus who put up with me before I found this group!!
 
 
 
 
Bill Jamison
rwj@engr.latech.edu
From: mbs@adastra.cvl.va.us (Michael B. Smith)
Newsgroups: comp.sys.amiga.programmer
Subject: Re: OS/2 vs. AmigaOS
Distribution: world
X-NewsSoftware: GRn 1.16f (beta) by Mike Schwartz & Michael B. Smith
Date: 31 Aug 92 20:05:01 EDT
Organization: Private UUCP Node

In article <BtuypA.5zq@gpu.utcs.utoronto.ca> engb@gpu.utcs.utoronto.ca (Ben Eng) writes:
> Every unix hacker wishes for an equivalent to fork() on the amiga,
> but we'll never see it.  Wild's ixem library offers a vfork(),
> I believe.  I wonder just how usable that vfork() is in real
> life.  What are it's limitations (there must be some)?

It's a real honest-to-gosh vfork(). I used it extensively in my port of "ash".
It has, actually, a couple of additional things that it does to make it more
useful: it creates new copies of all open fd's (non-exclusive), a copy of the
stack is made.

If you take GREAT care, you can simulate a fork() using vfork() and vfork_resume()
(which lets the parent resume), but you have to copy global memory areas, and
use some tricks to do a geta4() inline call.

Unless you use some of these extensions, it looks like a standard vfork().
Be VERY careful not to return back on top of the caller's stack though. If you
do, you've screwed yourself (this is "undefined" in SVR4 anyway, I don't know
what BSD says).

A very small piece of sample code from an early beta of pdksh is appended.
Markus' standard copyright and copyleft apply.
--
  //   Michael B. Smith
\X/    mbs@adastra.cvl.va.us  -or-  uunet.uu.net!virginia.edu!adastra!mbs

unsigned int inline static geta4 ()
{
  u_int res;
  asm ("movel   a4,%0" : "=g" (res));
  return res;
}
static inline int dbsize()
{
  int res;
  asm ("movel #___data_size,%0; addl #___bss_size,%0" : "=r" (res));
  return res;
}
extern int __datadata_relocs();

        .....
        if (i == 0) {           /* child */
#ifdef amigados
                extern char **_ctype_, **environ;
                extern int sys_nerr;
                extern int SysBase, DOSBase;

                /* reinit stdio */
                ix_get_vars2 (6, &_ctype_, &sys_nerr, &SysBase, &DOSBase, &__sF, &environ);
                fopenshf(0);    fopenshf(1);    fopenshf(2);

                ix_resident (4, geta4(), dbsize(), __datadata_relocs);
                vfork_resume ();

                ainit (&e.area);
                e.savefd = 0;

                t = tcopy (t, ATEMP);
#endif

Newsgroups: comp.sys.amiga.programmer
From: utoddl@guitar.oit.unc.edu (Todd M. Lewis)
Subject: Re: Manx C and Boopsi Question
Organization: UNC Office of Information Technology
Date: Mon, 31 Aug 1992 14:19:57 GMT

In article <BtuLL0.IuB@unx.sas.com> walker@twix.unx.sas.com (Doug Walker)  
writes:
>
> Franz Hemmer (hemmer@hemmer.adsp.sub.org) wrote:
>> [...] the Manx library structure is different and
>> more sophisticated than the standard Amiga (which SAS follows) library
>> format. The Manx linker can use the standard Amiga format libraries
>> because it mistakes them for object files and so includes the whole
>
>[...]The SAS/C system is certainly implemented
>more robustly [than Manx's], since it can at least handle the
>concatenated form of the library correctly.

The Manx linker will handle it correctly as well if you use the +l 
option which tells it to treat the following file(s) as libraries.
Franz is working hard in public to solve a non-problem.  The Manx
library structure is "different" for reasons of compatability with
their compilers on other platforms.  The "more sophisticated" claim
is more subjective.  These are all useful tools.  There is room
for competition.

(Just trying to keep the compiler wars balanced wrt the facts.)
--
Todd M. Lewis / utoddl@guitar.oit.unc.edu
From: jamie@cdevil.unx.sas.com (James Cooper)
Newsgroups: comp.sys.amiga.programmer
Subject: Re: Query: Does SAS 6.0 support "inline" assembly?
Date: 1 Sep 92 14:01:55 GMT
Organization: SAS Institute Inc.
Originator: jamie@cdevil.unx.sas.com


In article <1992Aug31.214820.58541@cc.usu.edu>, slmt9@cc.usu.edu (Joshua Dinerstein) writes:
>       The question is this. In SAS C Version 6.0, is there a way to put ASM
>coding in the actual C code? As in something like the #asm stuff in manx?

No.

>       I know that this particular idea is flame bait, so no flames please.
>What I want is the ability to put similar code in the same file. For example, I
>am working on updating a debugger. I would like to mix the display code with
>the console code. However one is in Assembly and one is in C.

Well, you could try turning the asm code back into C.  V6 does much
better code generation than before, so you may no longer need the asm
downcoding to get what you want.

-- 
---------------
Jim Cooper
(jamie@unx.sas.com)                             bix: jcooper

Any opinions expressed herein are mine (Mine, all mine!  Ha, ha, ha!),
and not necessarily those of my employer.
From: fgd3@nifty.UUCP (Fabbian G. Dufoe, III)
Newsgroups: comp.sys.amiga.programmer
Subject: Re:  SAS/C 6.0 Details (LONG!)
Distribution: world
Date: 25 Aug 92 22:54:07 EDT
Organization: Fabbian G. Dufoe, III

In article <BtHr2H.DD7@unx.sas.com> jamie@cdevil.unx.sas.com (James Cooper) writes:
>SAS/C only comes with 2.0 headers now (the 2.0!4! release files).

   Am I reading this right?  SAS/C version 6.0 will not include header files
for use with Workbench 1.3?  If so, will the 1.3 header files from 5.10b
work with version 6.0 for those developers who want their programs to be
compatible with Workbench 1.3?  Or will the 2.04 header files work for 1.3
development?

--Fabbian G. Dufoe, III
   350 Ling-A-Mor Terrace South   | GEnie:    F.DUFOE3
   St. Petersburg, Florida  33705 | internet: fgd3%nifty@tct.com
   813-823-2350                   | uucp:     ...tct!deep6!nifty!fgd3
From: nsd20463@uxa.cso.uiuc.edu (Nicolas S. Dade)
Newsgroups: comp.sys.amiga.programmer
Subject: Re: problem with movea.l
Date: 29 Aug 92 23:28:26 GMT
Article-I.D.: news.BtrqJF.D7B
Organization: University of Illinois at Urbana

jwp@panix writes:

>> [more move v. movea confusion]

>Actually, a move <something>,An _is_ a movea <something>,An.

>Here's the coding for a move.l <something>,<somethingelse>

>%0010 xxx xxx xxx xxx
> ^    ^   ^   ^   ^
> |    |   |   |   |
> |    |   |   |   source register
> |    |   |   source mode
> |    |   destination mode
> |    destination register
> opcode

>Here are the modes and register values--
>Addressing mode                      mode    register    syntax
>Data reg. direct                      000    (number)      Dn
>Address reg. direct                   001    (number)      An
>Address reg. indirect                 010    (number)     (An)
>Address reg. indirect w/ postincre.   011    (number)     (An)+
>Address reg. indirect w/ predecrem.   100    (number)    -(An)
>Address reg. indirect w/ displacem.   101    (number)    d(An)
>Address reg. indirect w/ index        110    (number)    d(An,Xi)
>Absolute short address                111      000        xxx.W
>Absolute long address                 111      001        xxx.L
>Program conter w/ displacement        111      010       d(PC)
>Program conter w/ index               111      011       d(PC,Xi)
>Immediate data                        111      100       #xxx
>Status register                       111      100      SR or CCR

>* Immediate data may only be used for a source operand, and the status 
>register may only be used for a destination operand.

you need another "*" here: not all the address modes may be used for
the source, and not all the address modes may be used for the destination,
and the prescription is more complicated than what you've indicated:

On a 68000 the source can be anything except the CCR. (However using
the SR as the source should not be done unless you've checked the 
AttnFlags and know that you are on a plain 68000 system, or if you
know you are in supervisor mode. Use GetSR() instead)

However the destination may _not_ _be_ _address_ _register_ _direct_, 
any PC relative mode, or, obviously, immeadiate. 

Also the move instructions involving the SR and CCR are not part of the
general move instruction, as they change the CCR in a quite different way
than the general move does, or they don't change it at all, and they do
not have a general addressing mode & register bit pattern. (If you place
the bit pattern you list above into your instruction you don't get a
move.w SR,xx or move.w xx,CCR or move.w xx,SR instruction.)


>Using those, here is a move.l (a5)+,a0

>%0010 000 001 011 101

All this talk is fine, but what happens when you feed this to a 68000?
I'll tell you: it punts, and heads straight for the Illegal Op Code
exception vector. There ain't no such instruction.


> [perfectly correct movea explanation & example]

>The only difference is that a movea must move to a address register. (and 
>movea.b is illegal)

and movea does not change the condition codes.

-Nicolas Dade
From: heinz@edohwg.UUCP (Heinz Wrobel)
Newsgroups: comp.sys.amiga.programmer
Subject: Re:  ToolMaker from CATS
Date: 25 Aug 92 20:03:05 GMT
Organization: Edotronik GmbH

In article <hemmer.01tt@hemmer.adsp.sub.org> hemmer@hemmer.adsp.sub.org (Franz Hemmer) writes:
>ToolMaker has nits, but is however very useful. It can produce source code
>for ARexx compatibility, supports #pragma's, asl.library etc. etc. If you
>spend much time programming GUI's, it's strongly recommendable.

But it's not font independent in its GUIs which makes it IMHO useless for
2.04 conforming development.

>| Franz Hemmer - Software Developer located in Silkeborg, Denmark, Europe |

--
Heinz Wrobel, Edotronik GmbH (ECG018)
FAX +49 89 850 51 25 / TEL +49 89 850 25 20 (HOME!&VOICE, sometimes...)
From: elascurn@daimi.aau.dk (Lars R{der Clausen)
Newsgroups: comp.sys.amiga.programmer
Subject: Anybody knows the MAXON (sp?) C-compiler?
Date: 30 Aug 92 21:33:30 GMT
Organization: DAIMI: Computer Science Department, Aarhus University, Denmark

Hello out there!

As I might get an assignment where I will have to use the MAXON (sp?) 
C-compiler, I would like very much to hear from anyone that has had a chance to
try it, as it will be an important factor in deciding whether to accept the
assignment or not. If you have tried it, or even heard of it, could you tell me
something about its
 
1) Ease of use - easily installable, integrated environment etc?
2) Speed.
3) Compatibility - does it confirm with ANSI?
4) C++ part.
5) Debugging utilities/warning generation. 
6) Support and documentation.

I thank you very much for any help.

Yours, Lars Clausen
-- 
        The computer menu:           | Lars Clausen - | I wonder if ANY part of
2 bits - a tayste 16 bits - a playte |   Human being  |  your body is NOT an
4 bits - a nybble 32 bits - a dinner |    Programmer  |  erogenous zone now?
8 bits - a byte   64 bits - an orgi  |     Roleplayer |      -My girlfriend :-D
Newsgroups: comp.sys.amiga.programmer,comp.sys.amiga.hardware,comp.os.mach
From: gblock@csd4.csd.uwm.edu (Gregory R Block)
Newsgroups: comp.sys.amiga.programmer
Subject: Some questions...  Ram usage, clipboard stuff, and HotLinks...
Date: 25 Aug 92 23:43:47 GMT
Article-I.D.: uwm.1992Aug25.234347.3117
Organization: Computing Services Division, University of Wisconsin - Milwaukee
Originator: gblock@csd4.csd.uwm.edu

(reposted 'cause I got zero answers...)

     I know how this sounds, but:  I need to open all 255 clipboard units
using 2.0's iffparse OpenClipboard.

     As a rough guess, how much memory is this going to eat?  Each
clipboard unit is opened and then a cliphook is set up to a procedure
to weed through which ones are active, and when they change...

(I can't believe I just asked that...  ;)

A few other questions:
     Where can one get the HotLinks development
kit?  I need to add copy to/from HotLinks support, and I've got to
figure out how to do it quickly.

     What's the best, fastest, and most system-compliant way to figure
out if a clipboard unit is empty?

     How does one create an ANNO or an AUTH chunk?

     Are there any clipboard bugs that I should know about right away
using IFFParse?  I remember something about reads and writes above
unit 0 having problems...

Greg
-- 
(: (: (: (: Have you overdosed on smileys today?  Why NOT!?! :) :) :) :) :)
(: "...and here's Clinton giving the correct spelling of bong-resin..."  :)
(:	gblock@csd4.csd.uwm.edu			Gregory R. Block         :)
(: (: (: (: (: (: (: (: (: (: (: (: (:) :) :) :) :) :) :) :) :) :) :) :) :)
Newsgroups: comp.sys.amiga.programmer
From: walker@twix.unx.sas.com (Doug Walker)
Subject: Re: lpatch/lcompare from SAS
Originator: walker@twix.unx.sas.com
Date: Fri, 28 Aug 1992 14:39:55 GMT
Organization: SAS Institute Inc.


In article <1992Aug27.195216.1@misvax.mis.arizona.edu>, gstark@misvax.mis.arizona.edu writes:
|> 
|> I was told by SAS that I need to use a program called "lcompare" to
|> generate files usable by "lpatch" if I want to generate binary diffs. 
|> Where-o-where can I find lcompare?  I did an archie search but it turned
|> up nothing.  From what I gathered from SAS lcompare/lpatch are
|> distributable.  Is this true?  If so, perhaps someone could tell me where I
|> could FTP it from?  

lpatch is freely redistributable, but lcompare is not.  In other
words, you must own a copy of the compiler in order to create
patches, but your customers can use lpatch to apply the changes
without owning SAS/C.

You need to contact SAS/C Technical support to get a copy of 
lcompare, it isn't on the normal compiler disks (not enough room).

--Doug
-- 
  *****
=*|_o_o|\\=====Doug Walker, Software Distiller====== BBS: (919)460-7430 =
 *|. o.| ||                                          1200/2400/9600 Dual
  | o  |//     For all you do, this bug's for you!
  ====== 
usenet: walker@unx.sas.com                            bix: djwalker 
Any opinions expressed are mine, not those of SAS Institute, Inc.
From: entity@nsq.uucp (cybernetworx)
Newsgroups: comp.sys.amiga.programmer
Subject: Locking Window Input -- How?
Date: 28 Aug 92 20:59:06 GMT
Reply-To: entity@nsq.uucp (cybernetworx)
Organization: NSQ

Ok, I need to know how to do the following as I don't think it's supported by
the operating system:
 
I want to open a foreign window on an applications screen and then lock the
input strictly to that window so that the user cannot click back to the
application until I release the window (close it or whatever).  I've gone
through the RKM's and can't seem to find anything that does this.
 
The method DOESN'T have to be friendly or anything.. as long as it works.  I
would however like to keep the entire thing system friendly in the sense that
it doesn't screw up any other tasks etc.  However, it can do anything as long
as it's restricted to the current screen. (my VB handler keeps track of that)
 
I fooled around with various methods, and the best I could come up with was to
have a VB interrupt which checks to see if I am on the proper screen and if
so, I force MY window to be the active window by stuffing it's address in
Intuition Bases's  ib_ActiveWindow pointer.  This sort of works, but doesn't
give exactly the results I'm looking for.
 
If you have any ideas, please let me know.  I definitely don't want any idiots
telling me that what I'm doing is not system friendly etc.  I know that.  It's
not relevant in this case.  If you've got a nice system compliant way of doing
it, great!  I'll use it... if not, any method will do :-)  
 
I would prefer direct email response since I can never find the time to keep
up with this newsgroup.  Thanks!


Newsgroups: comp.sys.amiga.programmer