

@jarokuczi, post #1
"ARCHIVE/A,DEST/A"Nazwy we wzorcu są nieistotne, ale wzorzec jest wyświetlany użytkownikowi, gdy poda "?" jako argument, więc dobrze by było, żeby coś mówiły o argumentach. "/A" oznacza, że argument jest wymagany. Następnie tworzymy tablicę LONG-ów, w której znajdą się wyniki. Mamy 2 argumenty, więc tablica będzie miała 2 elementy:
LONG values[2];Po udanym wykonaniu funkcji w tej tablicy znajdą się wskaźniki na teksty - wartości argumentów. Pamięć na nie została zaalokowana automatycznie, więc trzeba ją potem zwolnić za pomocą FreeArgs().
struct RDArgs *rda;
LONG values[2];
if (rda = ReadArgs("ARCHIVE/A,DEST/A", values, NULL))
{
printf("Argumenty: %s, %s\n", (STRPTR)values[0], (STRPTR)values[1]);
FreeArgs(rda);
}@Krashan, post #4
@jarokuczi, post #5
Plan jest taki żeby podpiąć mój program jako tool dla archiwów i po kliknięciu w archiwum ma pojawić się gui, wtedy nazwe pliku archiwum muszę odczytać z parametru a miejsce docelowe będę chciał odczytać z tooltype.Wtedy działasz inaczej. W strukturze WBStartup jest pole sm_ArgList, które jest wskaźnikiem na tablicę struktur WBArg. W przypadku kiedy Twój program został wywołany przez kliknięcie ikony typu "project", będąc wpisanym jako "default tool", w drugim elemencie tej tablicy (sm_ArgList[1]) będziesz miał strukturę WBArg z polami jak niżej:
@Krashan, post #7
rc = wbmain((struct WBStartup *)argv);
@jarokuczi, post #8
@Krashan, post #10
@jarokuczi, post #11
#define TEMPLATE "SPACE/N/K,PICTURE/K,SIZE/N/K,STATIC/N/K"
LONG args[]={ (LONG)&Odstep,
NULL,
(LONG)&SkalaIkon,
(LONG)&Statik};
struct RDArgs *rda=NULL;
struct DiskObject *dob=NULL;
BPTR out;
if (argc)
{
if (!(rda=ReadArgs(TEMPLATE, args, NULL)))
{
PrintFault(IoErr(), argv[0]);
return 10;
}
out=Output();
}
else
{
struct WBStartup *wbs=(struct WBStartup*)argv;
struct WBArg *wba=&wbs->sm_ArgList[wbs->sm_NumArgs-1];
BPTR oldcd;
if (!(*wba->wa_Name)) return 10;
oldcd=CurrentDir(wba->wa_Lock);
if ((dob=GetDiskObjectNew(wba->wa_Name)))
{
STRPTR str;
if ((str=FindToolType(dob->do_ToolTypes, "DELAY")))
*(ULONG*)args[ARG_SPACE]=(ULONG)atoi(str);
if ((str=FindToolType(dob->do_ToolTypes, "PICTURE")))
{
args[ARG_PICTURE]=(LONG)str;
Obrazek = TRUE;
}
if ((str=FindToolType(dob->do_ToolTypes, "SIZE")))
*(ULONG*)args[ARG_SIZE]=(ULONG)atoi(str);
if ((str=FindToolType(dob->do_ToolTypes, "STATIC")))
*(ULONG*)args[ARG_STATIC]=(ULONG)atoi(str);
}
CurrentDir(oldcd);
outt=TRUE;
}
if (out || outt)
{
sprintf(nazwa_podkladu, "%s", (STRPTR)args[ARG_PICTURE]);
Odstep = *(LONG*)args[ARG_SPACE];
Statik = *(LONG*)args[ARG_STATIC];
SkalaIkon = *(LONG*)args[ARG_SIZE];
}
if (rda) FreeArgs(rda);
if (dob) FreeDiskObject(dob);
//printf("podano opcje: SPACE=%d, PICTURE=%s, STATIC=%d, SIZE=%d\n", Odstep, nazwa_podkladu, Statik, SkalaIkon); @Krashan, post #10
@jarokuczi, post #11
@jarokuczi, post #1