@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.