Sauts de programmes

8 sujets de 16 à 23 (sur un total de 23)

  • 1
  • 2
  • centaurz

      #149869

      @Artblink

      C’est une méthode parmi d’autres. D’une part Screetch n’a pas donné trop d’infos sur le type de données à échanger, et d’autre part on va pas utiliser un char d’assaut pour enfoncer une porte ;-).

      Selon que le programme principal charge lui-même les plugins en mémoire ou se contente de les appeler via le DOS, utilise des sous-processus ou non, l’un ou l’autre des méthodes évoquées est plus adaptée.

      corto

        #149870

        Pour lancer un programme externe avec des arguments et attendre qu’il se termine, il y a les fonctions DOS Execute et System / SystemTags.

        J’ai des exemples sous le coude si besoin.

        Counia

          #149871

          Je n’ai jamais étais très fort en système, donc si je peux me permettre dans le genre simple (ce que j’aime sur Amiga c’est que la mémoire reste pleinement adressable).

          Il suffit d’écrire quelque part et un autre programme peut lire ce même espace.

          Les données n’ont pas à être transférées, elles sont le programme appelant lui même (si c’est lui qui déclare l’espace bien sur).

          Anonyme

            #149872

            @Centaurz: Vous m’avez fais peur lol… je croyais que ma bidouille a 2 sou était la meilleur solution. Tu me rassure ;-)

            Anonyme

              #149873

              si sa peux t’aider, j’ai un vieux code de 1991 :

              /* AMIGADOS

              **


              */

              #ifdef INC_DOS

              #include

              #include

              #include

              TYPE FileHandle FILE;

              TYPE FileInfoBlock FILE_INFO;

              TYPE DateStamp DATE;

              #define OpenFile(file,name) IF( NOT (file=(FILE *)Open(name,MODE_READWRITE)))Request(NL, »Ok », »Can’t open file: %sn »,name)

              #define CloseFile(file) IF(file){Close(file);file=NL;}

              #define ReadFile(file,buf,len) IF( NOT (LEN=(INT)Read(file,buf,len)))Request(NL, »Ok », »Can’t read file: %sn »,NL)

              #define WriteFile(file,buf,len) IF( NOT (LEN=(INT)Write(file,buf,len)))Request(NL, »Ok », »Can’t write file: %sn »,NL)

              #define CmdA(cmd,in,out) IF( SystemTags((STRPTR)cmd,SYS_Asynch,TRUE,SYS_Input,(BPTR)in,SYS_Output,(BPTR)out,0L)==-1 ) Request(NL, »Ok », »Can’t Execute %sn »,cmd)

              #define CmdS(cmd,in,out) IF( SystemTags((STRPTR)cmd,SYS_Asynch,FALSE,SYS_Input,(BPTR)in,SYS_Output,(BPTR)out,0L)==-1 ) Request(NL, »Ok », »Can’t Execute %sn »,cmd)

              #ifndef NO_BASE

              LONG DosBase = NL ;

              #define OpenDos() DosBase=(LONG)OpenLib(« dos.library »,VER);

              #define CloseDos() CloseLib( DosBase );

              #endif

              #endif

              Anonyme

                #149874

                et puis m…. voici une partie de mon travail je vous le passe, si cela intéresse quelqu’un je peux luis passer divers sources codes comme la version non finie de president (multiplayer simcity) et des codes auto éducatif version 3.1 4.0 Win XP (marche sous seven);

                Macro.h :

                #ifndef MACROS

                #define MACROS

                #include

                #include

                #include

                #define VER 36L

                #define NOT !

                #define OR ||

                #define ORBIT |

                #define AND &&

                #define ANDBIT &

                #define IF if

                #define ELSE else

                #define FOR for

                #define WHILE while

                #define DO do

                #define SWITCH switch

                #define CASE case

                #define DEFAULT default

                #define BREAK break

                #define CONTINUE continue

                #define RETURN return

                #define SIZEOF sizeof

                #define UNION union

                #define TYPEDEF typedef

                #define REGISTER register

                #define EXTERN extern

                #define STRUCT struct

                #define TYPE typedef struct

                #define int INT

                #define NL 0L

                #define LEFT_BUTTON 1

                #define MIDDLE_BUTTON 2

                #define RIGHT_BUTTON 4

                #ifndef NO_BASE

                INT BUG=NL, COUNT=NL, EXIT=NL, POS=NL, LEN=NL;

                #endif

                TYPE Library *LIB;

                /* MACROS

                **


                */

                #define GetSig(port) ( 1 << port->mp_SigBit)

                /* STD

                **


                */

                #ifdef INC_STD

                #include

                #include

                #include

                #endif

                /* HARDWARE

                **


                */

                #ifdef INC_HARDWARE

                #include

                #include

                #include

                #endif

                /* GRAPHICS

                **


                */

                #ifdef INC_GRAPHICS

                #define INC_EXEC /* alloc… */

                #include

                #include

                #include

                #include

                #include

                #include

                #include

                #include

                #include

                #include

                TYPE View VIEW;

                TYPE ViewPort VIEW_PORT;

                TYPE RasInfo RAST_INFO;

                TYPE RastPort RAST_PORT;

                TYPE TmpRas RAST_TEMP;

                TYPE AreaInfo AREA_INFO;

                TYPE TextAttr TEXT_ATTR;

                TYPE TextFont TEXT_FONT;

                TYPE ColorMap COLOR_MAP;

                TYPE UCopList COPL_USR;

                TYPE cprlist COPL;

                TYPE BitMap BIT_MAP;

                TYPE BitScaleArgs BIT_MAP_SCALE;

                TYPE {

                struct BitMap *bm;

                UWORD w; /* Width */

                UWORD cw; /* Center Width */

                UWORD h; /* Height */

                UWORD ch; /* Center Height */

                UWORD d; /* Depth */

                WORD posx; /* scr posx */

                WORD posy; /* scr posy */

                ULONG type; } BIT_MAP_OBJ;

                TYPE { LONG posx; LONG posy; LONG type; }CEL ;

                #define BLIT 0x0c0

                #define ALLPLANES 0xFF

                #define NewBitMap(bm,w,h,d,flags) IF( NOT (bm=(BIT_MAP *)AllocBitMap(w,h,d,flags,NL)))Error(NL, »Alloc BitMap »,10)

                #define RemBitMap(bm) IF(bm){FreeBitMap(bm);bm=NL;}

                /* NewBitMapPlanes() in dfk.lib */

                #define RemBitMapPlanes(bm) IF(bm)FreeMem(bm,SIZEOF(BIT_MAP))

                #define NewBMO(bmo,width,height,depth) {NewChip( bmo, BIT_MAP_OBJ );bmo->w=width; bmo->h=height; bmo->d=depth; bmo->cw=width/2; bmo->ch=height/2;NewBitMap(bmo->bm,width,height,depth,(BMF_CLEAR|BMF_DISPLAYABLE|BMF_INTERLEAVED));}

                #define RemBMO(bmo) {RemBitMap(bmo->bm);RemMem( bmo, BIT_MAP_OBJ );}

                /* NewBMOPlanes in dfk.lib */

                #define RemBMOPlanes(bmo) {IF(bmo->bm)FreeMem(bmo->bm,SIZEOF(BIT_MAP));RemMem( bmo, BIT_MAP_OBJ );}

                #define BltBMO( bmos, bmod, x, y) BltBitMap( bmos->bm,0,0,bmod->bm,x,y,bmos->w,bmos->h,BLIT,ALLPLANES,NL)

                #define NewRaster(plan,w,h) IF( NOT (plan=(PLANEPTR)AllocRaster(w,h)))Error(NL, »Alloc Raster »,20)

                #define RemRaster(plan,w,h) IF(plan){FreeRaster(plan,w,h);plan=NL;}

                #define NewCmp(cmp,n) IF( NOT (cmp=(COLOR_MAP *)GetColorMap(n)))Error(NL, »Get Color Map »,30)

                #define RemCmp(cmp) IF(cmp){FreeColorMap(cmp);cmp=NL;}

                #define RemCpl(cpl) IF(cpl){FreeCprList(cpl);cpl=NL;}

                #define Color(scr,no,r,g,b) IF(scr)SetRGB4( &scr->ViewPort,no,r,g,b)

                #define SaveView(view) IF(GfxBase)view=GfxBase->ActiView

                #ifndef NO_BASE

                struct GfxBase *GfxBase = NL ;

                #define OpenGraphics() GfxBase=(struct GfxBase *)OpenLib(« graphics.library »,VER)

                #define CloseGraphics() CloseLib( GfxBase )

                #endif

                #endif

                /* EXEC

                **


                */

                #ifdef INC_EXEC

                #include

                #include

                #include

                #include

                TYPE Message MSG;

                TYPE MsgPort MSG_PORT;

                TYPE Node NODE;

                TYPE Task TASK;

                #define NewChip(ptr,size) IF( NOT (ptr=(size *)AllocMem(SIZEOF(size),MEMF_CLEAR|MEMF_CHIP)))Error(NL, »Allocate Chip Mem »,40)

                #define NewFast(ptr,size) IF( NOT (ptr=(size *)AllocMem(SIZEOF(size),MEMF_CLEAR|MEMF_FAST)))Error(NL, »Allocate Fast Mem »,50)

                #define RemMem(ptr,size) IF(ptr)FreeMem(ptr,SIZEOF(size))

                #define OpenMsgPort(mp) IF( NOT (mp=(MSG_PORT *)CreateMsgPort()))Error(NL, »Creation MsgPort »,60)

                #define CloseMsgPort(mp) IF(mp){DeleteMsgPort(mp);mp=NL;}

                #ifndef NO_BASE

                struct ExecBase *ExecBase = NL ;

                #define OpenExec() ExecBase=(struct ExecBase *)OpenLib(« exec.library »,VER )

                #define CloseExec() CloseLib( ExecBase )

                #endif

                #endif

                /* AMIGADOS

                **


                */

                #ifdef INC_DOS

                #include

                #include

                #include

                TYPE FileHandle FILE;

                TYPE FileInfoBlock FILE_INFO;

                TYPE DateStamp DATE;

                #define OpenFile(file,name) IF( NOT (file=(FILE *)Open(name,MODE_READWRITE)))Request(NL, »Ok », »Can’t open file: %sn »,name)

                #define CloseFile(file) IF(file){Close(file);file=NL;}

                #define ReadFile(file,buf,len) IF( NOT (LEN=(INT)Read(file,buf,len)))Request(NL, »Ok », »Can’t read file: %sn »,NL)

                #define WriteFile(file,buf,len) IF( NOT (LEN=(INT)Write(file,buf,len)))Request(NL, »Ok », »Can’t write file: %sn »,NL)

                #define CmdA(cmd,in,out) IF( SystemTags((STRPTR)cmd,SYS_Asynch,TRUE,SYS_Input,(BPTR)in,SYS_Output,(BPTR)out,0L)==-1 ) Request(NL, »Ok », »Can’t Execute %sn »,cmd)

                #define CmdS(cmd,in,out) IF( SystemTags((STRPTR)cmd,SYS_Asynch,FALSE,SYS_Input,(BPTR)in,SYS_Output,(BPTR)out,0L)==-1 ) Request(NL, »Ok », »Can’t Execute %sn »,cmd)

                #ifndef NO_BASE

                LONG DosBase = NL ;

                #define OpenDos() DosBase=(LONG)OpenLib(« dos.library »,VER);

                #define CloseDos() CloseLib( DosBase );

                #endif

                #endif

                /* FONT

                **


                */

                #ifdef INC_FONT

                #define NewFont(tf,ta) if( NOT ( tf =(TEXT_FONT *)OpenDiskFont( &ta)))Error(NL, »Impossible d’ouvrir une fonte »,70)

                #define RemFont(tf) if(tf){CloseFont(tf);tf=NL;}

                #ifndef NO_BASE

                LIB DiskfontBase;

                #define OpenFontDisk() DiskfontBase=(LIB)OpenLib(« diskfont.library »,VER)

                #define CloseFontDisk() CloseLib( DiskfontBase )

                #endif

                #endif

                /* INTUITION

                **


                */

                #ifdef INC_INTUITION

                #include

                #include

                #include

                #include

                #include

                #include

                #include

                #include

                TYPE IntuiMessage INTUI_MSG;

                TYPE IntuiMessage INTUI_MSG;

                TYPE IntuiText INTUI_TXT;

                TYPE Screen SCR;

                TYPE NewScreen SCR_NEW;

                TYPE ScreenBuffer SCR_BUF;

                TYPE Window WIN;

                TYPE NewWindow WIN_NEW;

                TYPE Gadget GAD;

                TYPE Image IMG;

                TYPE StringInfo STR_INFO;

                TYPE Menu MENU;

                TYPE MenuItem MENU_ITEM;

                #define OpenScr(scr,tag) IF( NOT (scr=(SCR *)OpenScreenTagList(NL,tag)))Error(NL, »Impossible d’ouvrir l’ecran »,70)

                #define CloseScr(scr) IF(scr){CloseScreen(scr);scr=NL;}

                #define OpenPubScr(scr,name) IF( NOT (scr=(SCR *)LockPubScreen(name)))Error(NL, »Impossible d’ouvrir l’ecran public »,80)

                #define ClosePubScr(scr) IF(scr){UnlockPubScreen(NL,scr);scr=NL;}

                #define OpenWin(win,tag) IF( NOT (win=(WIN *)OpenWindowTagList(NL,&tag))) Error(NL, »Impossible d’ouvrir la fenetre »,90)

                /*efine CloseWin(win) IF(win){CloseWindow(win);win=NL;} */

                #define NewScrBuf(scrbuf,scr,bm,flags,id) {IF( NOT (scrbuf=(SCR_BUF *)AllocScreenBuffer(scr,bm,flags))) Error(NL, »newscrbuf »,100);scrbuf->sb_DBufInfo->dbi_UserData1=(APTR)id;}

                #define RemScrBuf(scrbuf,scr) IF(scr)FreeScreenBuffer(scr,scrbuf)

                #define NewGad(gad,win) IF( NOT (AddGadget(win,&gad,-1)))Error(NL, »Impossible d’ajouter un gad »,110)

                #define RemGad(gad,win) IF(win&&gad)RemoveGadget(win,&gad)

                #define GetStr(gad) (((SI *)gad->SpecialInfo)->Buffer)

                #define GetNum(gad) (((SI *)gad->SpecialInfo)->LongInt)

                #define GetSize(ws,fs) (((ws*fs)+4)/8)

                #ifndef NO_BASE

                struct IntuitionBase *IntuitionBase = NL;

                #define OpenIntuition() IntuitionBase=(struct IntuitionBase *)OpenLib(« intuition.library »,VER)

                #define CloseIntuition() CloseLib(IntuitionBase)

                #endif

                #endif

                /* GADTOOLS

                **


                */

                #ifdef INC_GADTOOLS

                #include

                #include

                #include

                TYPE NewGadget GAD_NEW;

                TYPE NewMenu MENU_NEW;

                #define GetVI(vi,scr) IF( NOT (vi=(APTR)GetVisualInfoA(scr,NL)))Error(NL, »Info Visuel »,120)

                #define RemVI(vi) IF(vi){FreeVisualInfo(vi);vi=NL;}

                #define NewCtx(gad,glist) IF( NOT (gad=(GAD *)CreateContext(glist)))Error(NL, »Creation Contexte »,130)

                #define NewGads(gad,type,ngad,tag) IF( NOT (gad=(GAD *)CreateGadgetA((ULONG)type,gad,&ngad,&tag)))Error(NL, »Nouveau Gadget »,140)

                #define RemGads(glist) IF(glist){FreeGadgets(glist);glist=NL;}

                #define NewMenu(menu,nm,vi,win) IF( NOT ( (menu=(MENU *)CreateMenusA(nm,0L)) && (LayoutMenus( menu, vi,GTMN_NewLookMenus,TRUE,0L)) && (SetMenuStrip(win,menu)) ))Error(NL, »Nouveau Menu »,150)

                #define RemMenu(menu,win) IF(win){ClearMenuStrip(win);IF(menu)FreeMenus(menu);}

                #define CloneMenu(winsrce,windest) LendMenus(windest,winsrce)

                #define UnCloneMenu(windest) IF(windest)ClearMenuStrip(windest)

                #ifndef NO_BASE

                LIB GadToolsBase = NL ;

                #define OpenGadtools() GadToolsBase=(LIB)OpenLib(« gadtools.library »,VER)

                #define CloseGadtools() CloseLib(GadToolsBase)

                #endif

                #endif

                /* ASL

                **


                */

                #ifdef INC_ASL

                #include

                TYPE FileRequester REQ_FILE;

                TYPE FontRequester REQ_FONT;

                TYPE ScreenModeRequester REQ_SMOD;

                #ifndef NO_BASE

                LIB AslBase = NL ;

                #define OpenAsl() AslBase=(LIB)OpenLib(« asl.library »,VER)

                #define CloseAsl() CloseLib(AslBase)

                #endif

                #endif

                /* WORKBENCH

                **


                */

                #ifdef INC_WORKBENCH

                #include

                #include

                #include

                TYPE WBStartup WB_START;

                TYPE WBArg WB_ARG;

                TYPE DiskObject WB_OBJET;

                TYPE AppMessage APP_MSG;

                TYPE AppWindow APP_WIN;

                TYPE AppIcon APP_ICO;

                TYPE AppMenuItem APP_MEN;

                #define OpenAppWin(aw,win,mp) IF( NOT (aw=(APP_WIN *)AddAppWindowA((ULONG)0,(ULONG)0,win,mp,NL)))Error(NL, »AppWindow »,160)

                #define CloseAppWin(aw) IF(aw){RemoveAppWindow(aw);aw=NL;}

                #ifndef NO_BASE

                LIB WorkbenchBase;

                LIB IconBase;

                #define OpenWorkbench() WorkbenchBase=(LIB)OpenLib(« workbench.library »,VER)

                #define CloseWorkbench() CloseLib(WorkbenchBase)

                #define OpenIcon() IconBase=(LIB)OpenLib(« icon.library »,VER)

                #define CloseIcon() CloseLib(IconBase)

                #endif

                #endif

                /* UTILITY

                **


                */

                #ifdef INC_UTILITY

                #include

                #include

                TYPE TagItem TAG;

                #ifndef NO_BASE

                struct UtilityBase *UtilityBase = NL ;

                #define OpenUtility() UtilityBase=(struct UtilityBase *)OpenLib(« utility.library »,VER)

                #define CloseUtility() CloseLib(UtilityBase)

                #endif

                #endif

                #endif /*MACROS*/

                Anonyme

                  #149875

                  je me rapelle plus de ce que j’ai fait : c quoi ce code ????? :

                  #include

                  #include

                  main(int argc, char arg[1] )

                  {

                  WORD i=NULL;

                  BPTR lock = Lock( arg[1] , ACCESS_READ ) ;

                  IF( lock )

                  {

                  struct FileInfoBlock *fib = NewDosObject( DOS_FIB );

                  IF( fib )

                  {

                  Examine( lock, fib );

                  IF( fib->fib_Size )

                  {

                  CHAR *buffer = New( fib->fib_Size, MEMF_CLEAR );

                  CHAR *p =NL;

                  BPTR src = NewFile( file );

                  BPTR des = NewFile( « Ram:t » );

                  IF( src && des )

                  {

                  INT in = FALSE;

                  ReadFile( src, buffer, fib->fib_Size);

                  p = buffer;

                  FOR( i=0; i< fib->fib_Size; i++ )

                  {

                  IF( p == 9 ) p = ‘ ‘;

                  IF( p == ‘/’ AND p[i+1] == ‘*’ ) { i=i+2; in = TRUE; }

                  IF( p == ‘*’ AND p[i+1] == ‘/’ ) { i=i+2; in = FALSE; }

                  IF( NOT in ) FPutC( des, p );

                  }

                  FPutC( des, ‘’ );

                  RemFile( src ); RemFile( des );

                  Rem( buffer, fib->fib_Size );

                  buffer = New( fib->fib_Size, MEMF_CLEAR );

                  src = NewFile( « ram:t » );

                  ReadFile( src, buffer, fib->fib_Size);

                  p = buffer;

                  i=0;

                  WHILE( p )

                  {

                  WHILE( p == ‘n’ AND p[i+1] == ‘n’ OR

                  p == ‘ ‘ AND p[i+1] == ‘ ‘ OR

                  p == ‘ ‘ AND p[i+1] == ‘n’ )

                  {

                  i=i+1;

                  }

                  putchar( p );

                  i++;

                  }

                  RemFile( src );

                  Rem( buffer, fib->fib_Size );

                  }

                  }

                  RemDosObject( fib, DOS_FIB );

                  }

                  UnLock( lock );

                  }

                  ELSE printf(« Invalid file name %lsn »,file);

                  bye();

                  }

                  bye()

                  {

                  printf(« bye…n »);

                  Exit(0);

                  }

                  edit : le fichier s’appelle incmake.c : ca a l’air de retirer des retours chariots indésirables, je sais plus; merde j’ai alzymer

                  Rem = Remove

                  Anonyme

                    #149876

                    hello ! et hop codes sources non commentés de mon education C sur AmigaOS 3.1 si cela peux servir…

                    archives 1995

                  8 sujets de 16 à 23 (sur un total de 23)

                  • 1
                  • 2
                  • Vous devez être connecté pour répondre à ce sujet.

                  Forums AmigaOS, MorphOS et AROS Développement Sauts de programmes

                  Amiga Impact