@Phibrizzo, post #1
#include <string.h> #include <libraries/asl.h> #include <clib/dos_protos.h> #define BUFOR 256 char bufor[BUFOR + 1]; struct FileRequester *fr; strncpy(bufor, fr->fr_Drawer, BUFOR); AddPart(bufor, fr->fr_File, BUFOR);
@Phibrizzo, post #1
MODULE 'asl', 'libraries/asl', 'dos/dos', 'utility/tagitem' ENUM ERR_NONE, ERR_ASL, ERR_KICK, ERR_LIB RAISE ERR_ASL IF AllocAslRequest()=NIL, /* ERR_KICK IF KickVersion()=FALSE, */ ERR_LIB IF OpenLibrary()=NIL CONST BUFFERSIZE=512, MYLEFTEDGE=0, MYTOPEDGE=0, MYWIDTH=320, MYHEIGHT=400, MAXFNLEN=108 DEF plik, filename[MAXFNLEN]:STRING PROC main() HANDLE DEF fr:PTR TO filerequester, katalog[MAXFNLEN]:STRING /* KickVersion(37) -> E-Note: requires V37 */ aslbase:=OpenLibrary('asl.library',0) fr:=AllocAslRequest(ASL_FILEREQUEST, [ASL_HAIL, 'Wybierz plik mbx', ASL_HEIGHT, MYHEIGHT, ASL_WIDTH, MYWIDTH, ASL_LEFTEDGE, MYLEFTEDGE, ASL_TOPEDGE, MYTOPEDGE, /* ASL_OKTEXT, 'Ok',*/ ASL_CANCELTEXT, 'Cancel', /* ASL_FILE, 'asl.library',*/ ASL_DIR, 'Ram:', NIL]) IF AslRequest(fr, NIL) StrCopy(filename,'',ALL) StrCopy(katalog,'',ALL) StrCopy(katalog,fr.drawer,ALL) AddPart(filename,katalog,MAXFNLEN) AddPart(filename,fr.file,MAXFNLEN) WriteF('Nazwa pliku: \s\n',filename) ELSE WriteF('Przerwanie uûytkownika\n') ENDIF wczytajmaile() EXCEPT DO IF fr THEN FreeAslRequest(fr) IF aslbase THEN CloseLibrary(aslbase) SELECT exception CASE ERR_ASL; WriteF('Error: Could not allocate ASL request\n') CASE ERR_KICK; WriteF('Error: Requires V37\n') CASE ERR_LIB; WriteF('Error: Could not open ASL library\n') ENDSELECT ENDPROC
@Skotos, post #3
@Phibrizzo, post #1
ULONG publicColors[3 * 32]; GetRGB32(pPubScreen->ViewPort.ColorMap, 0, 32, &publicColors[0]); LoadRGB32(&g_pGameScreen->ViewPort, source); int i; for (i = 0; i <= 8; i++) SetRGB32(&g_pGameScreen->ViewPort, i, publicColors[i * 3], publicColors[i * 3 + 1], publicColors[i * 3 + 2]); for (i = 16; i <= 24; i++) SetRGB32(&g_pGameScreen->ViewPort, i, publicColors[i * 3], publicColors[i * 3 + 1], publicColors[i * 3 + 2]);
@Krashan, post #4
lock = Lock(fr.drawer)
olddir = CurrentDir(lock)
@Phibrizzo, post #10
Jesli chce uzyc tagow ASLFR_Window lub ASLFR_Screen to dostaje blad kompilacji:
"Invalid constatn expression" (SAS/C).
if (tag = FindTagItem(ASLFR_Window, taglist)) { tag->ti_Data = window; }
filerequest = AllocAslRequestTags(ASL_FileRequest, ASLFR_Window, window, ..., TAG_DONE);
@Hexmage960, post #13
@Phibrizzo, post #14
@Skotos, post #8
Dlaczego zachowujesz a potem "oddajesz" stary katalog?Ponieważ jeżeli program zostanie uruchomiony z shella, to - gdybym tego nie zrobił - po jego zakończeniu katalog bieżący będzie inny niż przed. Może to być niewygodne i zaskakujące dla użytkownika. Przy uruchamianiu z ikony możnaby tego nie robić. CurrentDir() zmienia katalog bieżący procesu, w ten sposób można nawet samemu sobie w kodzie podstawić nogę, bo wszystkie odwołania do plików z względnymi ścieżkami (bez urządzenia/wolumenu na początku) są względem katalogu bieżącego.