Отличалась тогда или отличается сейчас ? И что интересует что у нее было лучшее (или есть) и что у нее хуже чем везде (было или есть) ? Я в том смысле что конкртнее пиши и спрашивай, а не так размыто.
Могу сказать единственное, что все эти сказки про дружелюбность амигаоси может еще и были правдой, но совсем давно, лет 12-15 назад :)
Чтобы сейчас более менее нормально программить, надо пол года потрахать себе мозг с настройками, с глюками (в смысле если ты первый раз видишь это все). Ну самое быстрое (если время дофига, месяца 2-3). Настроить нормально голдед (в нем кстати настроить кнопки аля как в редаторе фара, чтоб по шифт вверх/вниз выделять и в таком духе, совсем не интуитивно просто, но в целом можно), все эти раскарски и прочие замазки настроить, чтобы более менее уже можно было работать както. К голдеду привязать sasc/gcc/storm/vbcc. У всех компилеров этих свои особенности,свои приколы, свои баги. Чтобы амижный gcc настроить, надо в целом конечно врубаться как и что, иначе опухнешь. sasc давно не поддерживается, storm тоже. Только gcc и vbcc делают переодически версии (до сих пор, что странно).
Что касается конкретно сисемного програминга, ну в целом аля винда смешанная с юниксом. Тоесть если ты программер, то вот например кусок прожки которую какоето время назад делал:
- Код: Выделить всё
void ProcessMsg(void)
{
CxMsg *msg;
ULONG msgid, msgtype;
for(;;)
{
if((new_fd = accept(sockfd_recv, (struct sockaddr *)&addr,&addrlen))<0)
{
msg = (CxMsg *)GetMsg(broker_mp);
msgid = CxMsgID(msg);
msgtype = CxMsgType(msg);
switch(msgtype)
{
case CXM_IEVENT:
switch(msgid)
{
case EVT_HOTKEY: // quit + unload
unload();
CloseSocket(sockfd_recv);
shutdown(sockfd_recv,2);
return;
//break;
case EVT_HOTKEY2: // send
//Execute("newcli",0,0);
clip_loop_send_func();
break;
default:
break;
}
case CXM_COMMAND:
switch(msgid)
{
case CXCMD_DISABLE:
ActivateCxObj(broker,0L);
break;
case CXCMD_ENABLE:
ActivateCxObj(broker,1L);
break;
case CXCMD_KILL:
//unload();
CloseSocket(sockfd_recv);
shutdown(sockfd_recv,2);
return;
// break;
case CXCMD_APPEAR:
break;
case CXCMD_DISAPPEAR:
break;
}
} // end switch(msgtype)
} // end if
Или вот например asm мешать с C, можно либо вставлять через всякие аля __asm, но я обычно прям делал асмовую функцию типа такого:
- Код: Выделить всё
xdef _write2file
_write2file
movem.l d0-d6/a6,-(sp) ; save regs
move.l a1,filename ; a1 (char filename)
move.l a2,buffer ; a2 (char buffer)
move.l d1,len ; d1 (int size)
.......blablabla.........
movem.l (sp)+,d0-d6/a6 ; back regs
rts
filename dc.l 0
len dc.l 0
buffer dc.l 0
DosName dc.b "dos.library",0
even
DOSBase dc.l 0
conhandle dc.l 1
компилял ее phxass'ом в объектник, и потом уже в Сишном куске основном:
- Код: Выделить всё
#include <proto/dos.h>
#include <stdio.h>
void __asm write2file(register __a1 char*, register __a2 char*, register __d1 int);
main()
{
char filename[]="faktiheskiy file";
char buffer[]="a dovayte v txt otpishem";
write2file(filename,buffer,sizeof(buffer)-1);
}
Т.е. в целом есть какието приколы как в мсдосе были, есть те которые сейчас у винды, есть и юниховые.. Вот как в данный момент это у меня выглядит все:
Тут видно кстати, сбоку такая удобная панель и сверху, щелкать по сорцам. Но это уже давно везде все есть (и на виндах и на юниксах), надо только поискать :) Ну и голдед старый, новый посимпотявей такой ..