@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