Path: ...!news.mixmin.net!proxad.net!feeder1-2.proxad.net!cleanfeed4-a.proxad.net!nnrp2-1.free.fr!not-for-mail Date: Sat, 4 Jan 2025 19:16:24 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: =?UTF-8?Q?Re=3A_Proc=C3=A9dure_ARGV?= Newsgroups: fr.comp.sys.atari References: <6776c99f$0$12931$426a74cc@news.free.fr> <6778159f$0$513$426a74cc@news.free.fr> <677826a2$0$29717$426a74cc@news.free.fr> <67785429$0$375$426a74cc@news.free.fr> <677866ee$0$12914$426a34cc@news.free.fr> <6778765b$0$29730$426a34cc@news.free.fr> <6779084b$0$407$426a74cc@news.free.fr> Content-Language: fr From: Good Old TOS <_remove_vision@atari.org> In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Lines: 68 Message-ID: <67797af9$0$11457$426a74cc@news.free.fr> Organization: Guest of ProXad - France NNTP-Posting-Date: 04 Jan 2025 19:16:25 CET NNTP-Posting-Host: 83.159.222.32 X-Trace: 1736014585 news-3.free.fr 11457 83.159.222.32:2426 X-Complaints-To: abuse@proxad.net Bytes: 3705 Le 04/01/2025 à 15:32, OL a écrit : > Le 04/01/2025 à 11:07, Good Old TOS a écrit : >> Hello, >> >> pb résolu grâce à Olivier! Un grand merci! >> Voilà le code fonctionnel: >> long XPexec_eas(int mode, char* full_name, char* cmdline) >> { >>    /* A BIG thnaks to Olivier Landemarre ! */ >>    char  buffer[1500] ; >>    char  eas_cmd[128] ; >>    char* pt_env = buffer ; >>    char* source ; >>    char* envp = _BasPag->p_env ; >> >>    /* Program Environment is required else it fails (e.g. err 27 with >> curl) */ >>    while( *envp ) >>    { >>      while ( *envp ) *pt_env++ = *envp++ ; >>      *pt_env++ = 0 ; >>      envp++ ; >>    } >> >>    *pt_env++='A' ; >>    *pt_env++='R' ; >>    *pt_env++='G' ; >>    *pt_env++='V' ; >>    *pt_env++='=' ; >>    *pt_env++ = 0 ; >>    *pt_env++ = ' ' ; /* These 2 are important else */ >>    *pt_env++ = 0 ;   /* First parameter is ignored ! */ >>    while ( *cmdline ) >>    { >>      if ( *cmdline == ' ' )       *pt_env++ = 0 ;        /* New >> parameter/value */ >>      else if ( *cmdline == '\\' ) *pt_env++ = '/' ;      /* Change \ >> to / */ >>      else                         *pt_env++ = *cmdline ; /* Next char >> of parameter/value */ >>      cmdline++ ; >>    } >> >>    *pt_env++  = 0 ; >>    *pt_env    = 0 ; >>    eas_cmd[0] = 127 ; >>    return Pexec( mode, full_name, eas_cmd, buffer ) ; >> } >> >> Il manquait un espace + \0 après "ARGV=" avant la génération des >> paramètres. > > Yep cool > > une fois j'ai passé une semaine a chercher un bug totalement stupide de > niveau débutant, j'avais mis mis: > if(condition = 1) ... au lieu de if(condition == 1) ... !!!! > J'ai eu beau relire 1000 fois le code je ne voyais pas > > Bon là j'ai du tester avec un petit logiciel écrit il y a 30 ans pour > voir ce qui était passé à l'application sinon je n'aurais pas trouvé > pourtant c'est du C classique mais on ne gère pas cela tous les jours! Ouaip... En fait en premier c'est argv[0] qui doit être passé, soit le nom de l'applicatif à lancer, mais un espace suffit, si pas présent du coup ça décale les paramètres passés (cf. message de Thorsten). Mais quelle galère pour faire juste un appel ""long" à Pexec ! Merci beaucoup en tout cas!