Sauts de programmes
8 sujets de 16 à 23 (sur un total de 23)
- 1
- 2
-
@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.
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).
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
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)/
#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*/
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, ‘