'od predchozi se lisi podporou Windows 2000 DECLARE FUNCTION DirDlgBox! (x!, y!) DECLARE FUNCTION GetKey! (nWait) DECLARE FUNCTION ListBox! (list$, pocet!, x!, y!, rows!, cols!, itemLen!, SelColor!, StdColor!, active!, FrameColor!, DefaultPosition!) DECLARE SUB Replace (kde$, co$, cim$) DECLARE SUB SlideShow (soub$) DECLARE SUB Help () DECLARE SUB Tabulka (x!, y!, w!, h!, StdColor!, LineType!, Clean!) DECLARE SUB FindFile (ASCIIZ$, atrib!, outstring$, found!) DECLARE SUB GetCurDir (dir$, drv!) DECLARE SUB ChDrive (num!) TYPE Rec Ukon AS STRING * 1 x AS INTEGER y AS INTEGER lx AS INTEGER ly AS INTEGER c AS INTEGER END TYPE TYPE Registry AX AS INTEGER: BX AS INTEGER: CX AS INTEGER DX AS INTEGER: BP AS INTEGER: SI AS INTEGER di AS INTEGER: FLAGS AS INTEGER DS AS INTEGER: ES AS INTEGER END TYPE DECLARE FUNCTION ScrollBar! (x1!, y1!, x2!, y2!, MinVal!, MaxVal!, Default!, Viewing!, OnChange!, OnlyDraw!) DECLARE FUNCTION VObjektu! (mysX%, mysY%, x1!, y1!, x2!, y2!) DECLARE FUNCTION Settings () DECLARE SUB Koukni (File$) DECLARE SUB Tlacitko (x%, y%, ex%, ey%, OnOff!) DECLARE SUB VystinujOkno (x1!, y1!, x2!, y2!) DECLARE SUB Nakresli (File$, x!, y!, Pomer!, Zpomal!, exitt) DECLARE SUB CekejVolnouMys (timed!) DECLARE SUB MysNactiPozadi (x%, y%, PodKurzorem() AS INTEGER) DECLARE SUB MysUkazKurzor (x%, y%) DECLARE SUB MysVratPozadi (x%, y%, PodKurzorem() AS INTEGER) DECLARE SUB MousePut (x%, y%) DECLARE SUB MouseShow () DECLARE SUB MouseStatus (lb%, rb%, xmouse%, ymouse%) DECLARE SUB MouseDriver (AX%, BX%, CX%, DX%) DECLARE FUNCTION MouseInit% () COMMON SHARED mouse$, MouseEnabled%, Zpomaleni, syst%, inside AS INTEGER DIM atfirst, PodKurzorem(9, 9) AS INTEGER DIM xa, ya, xx, yy, ua, va, Pomer, pomerb DIM Filess(100) AS STRING File$ = LTRIM$(COMMAND$) GOSUB InitMouse atfirst = -1 CLS PRINT "Zvolte prosim operacni system stiskem klaves A ci B" PRINT " Pozor! Chybna volba by vedla k nefunkci ci k padu aplikace." PRINT " A - Pokud pouzivate system DOS, Win 3.11, Win 95 nebo Win 98" PRINT " B - Pokud pouzivate system Windows 2000" PRINT " Esc ukonci aplikaci" PRINT : PRINT : PRINT PRINT "Choose your operating system by pressing key A or B" PRINT " Warning! Bad choice should cause application error." PRINT " A for DOS, Win 3.11, Win 95 or Win 98 OS" PRINT " B for Windows 2000" PRINT " Esc for exit" DO: v$ = LCASE$(INKEY$) IF v$ = CHR$(27) THEN GOTO KonecAplikace LOOP UNTIL (v$ = "a") OR (v$ = "b") IF v$ = "a" THEN syst% = 1 ELSE syst% = 2 CLS : PRINT "Vas system / Your system:" IF syst% = 1 THEN PRINT "DOS, Win 3.11, Win 95, Win 98" ELSE PRINT "Windows 2000" END IF PRINT "Cekejte / Wait ..." a = TIMER: DO: LOOP UNTIL (TIMER - a > 1) CALL FindFile("*.VEC", 0, soub$, pocet) Thumbs: SCREEN 12: CLS soub$ = "": pocets = 0 CALL FindFile("*.VEC", 0, soub$, pocet) GOSUB FilesParser IF pocet < 0 THEN IF DirDlgBox(15, 5) = 0 THEN GOTO KonecAplikace ELSE GOTO Thumbs END IF END IF IF pocet > 15 THEN xx = 80: yy = 60: Pomer = 8: pp = 10 ELSE xx = 160: yy = 120: Pomer = 4: pp = 4.4 END IF i = -1 FOR y = 0 TO Pomer - 1 FOR x = 0 TO Pomer - 1 i = i + 1 xa = x * xx + 7: ya = y * yy + 7: ua = 640 / pp: va = 480 / pp CALL VystinujOkno(xa - 6, ya - 6, xa + ua + 6, ya + va + 6) CALL Nakresli(Filess(i), xa, ya, pp, 0, 0) IF pocet = i THEN GOTO Hotovo NEXT x NEXT y Hotovo: DO lxmouse% = xmouse%: lymouse% = ymouse% CALL MouseStatus(lb%, rb%, xmouse%, ymouse%) pohybMysi = ((lxmouse% <> xmouse%) OR (lymouse% <> ymouse%)) IF pohybMysi THEN IF NOT (atfirst) THEN CALL MysVratPozadi(lxmouse%, lymouse%, PodKurzorem()) atfirst = 0 CALL MysNactiPozadi(xmouse%, ymouse%, PodKurzorem()) RESTORE KurzorStinovanaSipka CALL MysUkazKurzor(xmouse%, ymouse%) ELSEIF rb% THEN CALL MysVratPozadi(xmouse%, ymouse%, PodKurzorem()) GOSUB Sett END IF i = -1 FOR y = 0 TO Pomer - 1 FOR x = 0 TO Pomer - 1 i = i + 1 IF i <= pocet THEN xa = x * xx + 6: ya = y * yy + 5: ua = 640 / pp + 2: va = 480 / pp + 4 IF (xmouse% > xa) AND (xmouse% < (xa + ua)) THEN IF (ymouse% > ya) AND (ymouse% < (ya + va)) THEN IF NOT (lb%) THEN CALL Tlacitko(INT(xa), INT(ya), xa + ua, ya + va, 0) ELSE CALL MysVratPozadi(lxmouse%, lymouse%, PodKurzorem()) CALL Tlacitko(INT(xa), INT(ya), xa + ua, ya + va, 1) CALL CekejVolnouMys(0) CALL Koukni(Filess(i)) END IF ELSE LINE (xa, ya)-(xa + ua, ya + va), 0, B END IF ELSE LINE (xa, ya)-(xa + ua, ya + va), 0, B END IF END IF NEXT x NEXT y keypressed = GetKey(0) IF keypressed <> 0 THEN CALL MysVratPozadi(xmouse%, ymouse%, PodKurzorem()) SELECT CASE keypressed CASE 27: EXIT DO CASE 13: CALL SlideShow(soub$) CASE 32: IF DirDlgBox(15, 5) = -1 THEN GOTO Thumbs CASE -59: CALL Help CASE -68: GOSUB Sett END SELECT LOOP GOTO KonecAplikace BezMysi: pocet = 0: soub$ = "" CALL FindFile(File$, 0, soub$, pocet) IF pocet > 0 THEN CLS : CALL Nakresli(File$, 0, 0, 1, 0, 0) IF GetKey(-1) = 27 THEN RETURN END IF pocet = 0: soub$ = "" CALL FindFile("*.VEC", 0, soub$, pocet) IF pocet > 1 THEN GOSUB FilesParser: a = 0 DO a = a + 1 IF a > pocet THEN a = 0 IF a < 0 THEN a = pocet CLS CALL Nakresli(Filess(a), 0, 0, 1, 0, -1) SELECT CASE GetKey(-1) CASE 27: RETURN CASE 8: a = a - 2 END SELECT LOOP END IF RETURN Sett: SELECT CASE Settings CASE -1: IF DirDlgBox(15, 5) = -1 THEN GOTO Thumbs CASE -2: GOTO KonecAplikace END SELECT RETURN FilesParser: a = -1: soubx$ = soub$ DO i = INSTR(soubx$, "?") IF i = 0 THEN EXIT DO a = a + 1 Filess(a) = LEFT$(soubx$, i - 1) soubx$ = MID$(soubx$, i + 1, LEN(soubx$) - i) LOOP pocet = a RETURN InitMouse: RESTORE Mousedata mouse$ = SPACE$(57) FOR i% = 1 TO 57 READ a$ h$ = CHR$(VAL("&H" + a$)) MID$(mouse$, i%, 1) = h$ NEXT i% MouseEnabled% = MouseInit% IF NOT MouseEnabled% THEN SCREEN 12: CLS COLOR 7 PRINT "Ovladac mysi nenalezen:" PRINT "Nainstalujte si mys pro plne komfortni vyuziti programu!" PRINT "---" PRINT "Mouse driver NOT found:" PRINT "For full comfortable using of program install mouse!" PRINT "---" PRINT "Hit any key to continue / pokracujte libovolnou klavesou" COLOR 15 PRINT "ÚÄÄÄÄ¿" PRINT "³  ³" PRINT "ÀÄÄÄÄÙ" IF GetKey(-1) = 27 THEN GOTO KonecAplikace GOSUB BezMysi GOTO KonecAplikace END IF LET amouse$ = "YES" RETURN KonecAplikace: SCREEN 0 CLS PRINT "Prohlizec obrazku z KRESLENI" PRINT "KRESLENI pictures viewer" PRINT "22.12.2003 18:25" PRINT "freeware (C) Matej Kasper, konikula@post.cz, Czech Republic" PRINT "Dekuji, ze jsem vam mohl poslouzit" PRINT "Thanks for using" PRINT "- - -" END KurzorStinovanaSipka: DATA 15,15,7,8,8,7,15,7,8,,15,15,15,7,7,7,8,,,,7,15,15,15,8,1,,,,,8,7 DATA 15,15,15,15,8,,,,8,7,8,15,15,15,15,7,,,7,7,1,15,15,7,7,15,15,7,15 DATA 8,,8,15,7,8,8,1,,7,,,,7,15,8,1,,,8,,,,8,15,1,,,,,,,,,7,,,,0 KurzorRuka: DATA 0,,,,,,,,,,,,,,,,,,,,,15,7,,,,,,,,15,15,15,7,,7,7,7,,0 DATA 0,,,15,7,15,15,15,7,,,,,,15,15,15,15,15,7,,,,,,15,15,15,15,15 DATA 0,,15,7,0,15,15,15,15,15,,,,15,15,15,15,15,15,15,,,,,,,,,,15 KurzorRukaDole: DATA 0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,7,7,,7,7,7,,,15,15,15,15,7,15 DATA 15,15,7,,,,,,15,15,15,15,15,7,,,,,,15,15,15,15,15,,,15,7,,15,15 DATA 15,15,15,,,,15,15,15,15,15,15,15,,,,,,,,,,15 KurzorSavle: DATA 15,,,,,,,,,,7,15,,,,,,,,,,7,15,,,,,,,,,,7,15,,,,,,,,,,7,15,,,,0 DATA 0,,,,,7,15,15,15,,,,,,,,7,15,,15,,,,,,,,15,15,,,,,,,,15,7,,15,0 DATA 0,,,,,,,,7,7 Mousedata: DATA 55,89,E5,8B,5E,C,8B,7,50,8B,5E,A,8B,7,50,8B,5E,8,8B DATA F,8B,5E,6,8B,17,5B,58,1E,7,CD,33,53,8B,5E,C,89,7,58 DATA 8B,5E,A,89,7,8B,5E,8,89,F,8B,5E,6,89,17,5D,CA,08,00 SUB CekejVolnouMys (timed!) DIM a a = TIMER DO CALL MouseStatus(lb%, rb%, xmouse%, ymouse%) IF timed THEN IF (TIMER - a) > .3 THEN EXIT SUB END IF LOOP UNTIL (INKEY$ = "") AND ((NOT (lb%)) AND (NOT (rb%))) END SUB SUB ChDrive (num) DIM InReg AS Registry, OuReg AS Registry InReg.AX = &HE00 'ah = 0eh InReg.DX = num 'DL = disk CALL INTERRUPT(&H21, InReg, OuReg) END SUB FUNCTION DirDlgBox (dlgX, dlgY) DIM InReg AS Registry, OuReg AS Registry DIM disk(27) AS INTEGER, por DIM SN AS STRING * 50 DIM a2 AS INTEGER, CurDrv lp = 15000 DIM Zaloha(15000) GET (112, 73)-(511, 339), Zaloha object = 0: dp2 = 0 '--------------------------------DIR & DRIVE BACKUP------- CALL GetCurDir(dir$, drv) ' CurDir$ = dir$: CurDrv = drv ' CALL GetCurDir(dir$, drv): LastDir$ = dir$: LastDrv = drv' '---------------------------------------------------------' IF syst% = 1 THEN '---------------------------------------------------------DISKINFO por = -1: disky$ = "" ' FOR i = 3 TO 26 ' InReg.DS = VARSEG(SN): InReg.DX = VARPTR(SN) ' InReg.AX = &H6900: InReg.BX = i: OuReg.AX = 0 ' CALL INTERRUPT(&H21, InReg, OuReg): CF = OuReg.FLAGS AND 1 ' IF CF = 0 THEN ' por = por + 1: disk(por) = i - 1 ' jmenoD$ = RTRIM$(MID$(SN, 7, 11)) ' CALL Replace(jmenoD$, CHR$(0), "") ' disky$ = disky$ + CHR$(64 + i) + ":" + jmenoD$ + "?" ' END IF ' NEXT i: por = por + 1 ' '-----------------------------------------------------------------' ELSE '---------------------------------------------------------DISKINFO por = -1: disky$ = "" ' FOR i = 3 TO 26 ' por = por + 1: disk(por) = i - 1 ' disky$ = disky$ + CHR$(64 + i) + ":" + "?" ' NEXT i: por = por + 1 ' '-----------------------------------------------------------------' END IF '---------------------------------------------------------DIRINFO Znova: ' adres$ = "": pocet = 0 ' CALL FindFile("*.*", 16, adres$, pocet) '--- REDIM Adresar(pocet) AS STRING: a2 = -1: listx$ = adres$ ' DO ' i = INSTR(listx$, "?") ' IF i = 0 THEN EXIT DO ' a2 = a2 + 1 ' Adresar(a2) = LEFT$(listx$, i - 1) ' ' listx$ = MID$(listx$, i + 1, LEN(listx$) - i) ' ' LOOP ' ' '---' '----------------------------------------------------------------' '---------------------------------------------------------VECFILES soub$ = "": pocets = 0 ' CALL FindFile("*.VEC", 0, soub$, pocets) '--- REDIM Soubory(pocets) AS STRING: a2 = -1: soubx$ = soub$ ' DO ' i = INSTR(soubx$, "?") ' IF i = 0 THEN EXIT DO ' a2 = a2 + 1 ' Soubory(a2) = LEFT$(soubx$, i - 1) ' ' soubx$ = MID$(soubx$, i + 1, LEN(soubx$) - i) ' ' LOOP ' ' '---' '----------------------------------------------------------------' a2 = ListBox(adres$, pocet, dlgX + 3, dlgY + 8, 8, 1, 15, 11, 7, 0, 7, 0) a2 = ListBox(disky$, por, dlgX + 3, dlgY + 3, 2, 1, 15, 11, 7, 0, 7, 0) a2 = ListBox(soub$, pocets, dlgX + 20, dlgY + 3, 13, 2, 15, 11, 7, 0, 7, 0) dp1 = 0: IF pocets > 0 THEN object = 2 DO SELECT CASE object CASE 0: dis = ListBox(disky$, por, dlgX + 3, dlgY + 3, 2, 1, 15, 11, 7, -1, 7, 0) IF dis = -3 THEN GOTO BackSpace IF dis = -4 THEN object = 1 IF dis = -2 THEN object = 2 IF dis = -1 THEN GOTO Storno IF dis >= 0 THEN CALL GetCurDir(dir$, drv): LastDir$ = dir$: LastDrv = drv ChDrive (disk(dis)) GOTO Znova END IF CASE 1: a2 = ListBox(adres$, pocet, dlgX + 3, dlgY + 8, 8, 1, 15, 11, 7, -1, 7, dp2) IF a2 = -3 THEN GOTO BackSpace IF a2 = -4 THEN object = 2 IF a2 = -2 THEN object = 0 IF a2 = -1 THEN GOTO Storno IF a2 >= 0 THEN ldp2 = a2: dp2 = 0 CALL GetCurDir(dir$, drv): LastDir$ = dir$: LastDrv = drv CHDIR Adresar(a2) GOTO Znova END IF CASE 2: sou = ListBox(soub$, pocets, dlgX + 20, dlgY + 3, 13, 2, 15, 11, 7, -1, 7, dp1) IF sou = -3 THEN GOTO BackSpace IF sou = -4 THEN object = 0 IF sou = -2 THEN object = 1 IF sou = -1 THEN GOTO Storno IF sou >= 0 THEN DirDlgBox = -1 GOTO Konec END IF END SELECT LOOP BackSpace: CALL ChDrive(LastDrv) CHDIR "\" CHDIR (LastDir$) dp2 = ldp2 object = 1 GOTO Znova Storno: CALL ChDrive(CurDrv) CHDIR "\" CHDIR (CurDir$) DirDlgBox = 0 Konec: PUT (112, 73), Zaloha, PSET END FUNCTION SUB FindFile (ASCIIZ$, atrib, outstring$, found!) DIM DTA AS STRING * 100 DIM FILEPATH AS STRING * 100 DIM InReg AS Registry, OuReg AS Registry DTA = "": outstring$ = "": found! = 0 '------------------------------------------------------ Nastavi DTA InReg.AX = &H1A00: InReg.DS = VARSEG(DTA): InReg.DX = VARPTR(DTA) CALL INTERRUPT(&H21, InReg, OuReg) '------------------------------------------------------ Hledani souboru FILEPATH = ASCIIZ$ + CHR$(0) ASEG = VARSEG(FILEPATH): APTR = VARPTR(FILEPATH) InReg.AX = &H4E00 'AH pro prvni hledani InReg.CX = 255 DO InReg.DS = ASEG InReg.DX = APTR CALL INTERRUPT(&H21, InReg, OuReg) InReg.AX = &H4F00 'AH pro dalsi hledani AL = OuReg.AX - (OuReg.AX \ 256) * 256 IF AL = 0 THEN 'Kdyz je to nalezen tak AL = 0 name$ = "" FOR i = 31 TO 43 x$ = MID$(DTA, i, 1) IF x$ = CHR$(0) THEN EXIT FOR name$ = name$ + x$ NEXT i atr = ASC(MID$(DTA, 22, 1)) IF (atr AND atrib) = atrib THEN IF name$ = "." THEN name$ = "\" outstring$ = outstring$ + name$ + "?" found! = found! + 1 END IF END IF LOOP WHILE AL = 0 END SUB SUB GetCurDir (dir$, drv) DIM InReg AS Registry, OuReg AS Registry DIM aCurDir AS STRING * 500 InReg.AX = &H4700 'get cur DIR InReg.DS = VARSEG(aCurDir) InReg.SI = VARPTR(aCurDir) InReg.DX = 0 CALL INTERRUPT(&H21, InReg, OuReg) ppo = 0: dir$ = "" DO ppo = ppo + 1: k$ = MID$(aCurDir, ppo, 1) IF k$ <> CHR$(0) THEN dir$ = dir$ + k$ ELSE EXIT DO END IF LOOP 'get cur DRV InReg.AX = &H1900 OuReg.AX = 0 CALL INTERRUPT(&H21, InReg, OuReg) DO WHILE OuReg.AX > 99 OuReg.AX = OuReg.AX - 100 LOOP drv = OuReg.AX END SUB FUNCTION GetKey (nWait) DIM ke AS STRING, KeyCode AS INTEGER, Hotovo AS INTEGER ke = "" KeyCode = 0 Hotovo = NOT (nWait) DO ke = INKEY$ SELECT CASE LEN(ke) CASE 0: GOTO gkn CASE IS > 0: KeyCode = ASC(ke): Hotovo = -1 END SELECT IF KeyCode = 0 THEN KeyCode = -ASC(MID$(ke, 2, 1)): Hotovo = -1 END IF gkn: LOOP UNTIL Hotovo GetKey = KeyCode END FUNCTION SUB Help x = 13000 DIM Zaloha(x) GET (149, 141)-(500, 320), Zaloha CALL Tabulka(20, 10, 42, 10, 7, 1, -1) COLOR 15 LOCATE 11, 22: PRINT "Napoveda"; SPC(27); "Help" COLOR 7 LOCATE 12, 22: PRINT "Miniatury(Thumbnails):" COLOR 8 LOCATE 13, 22: PRINT "nastaveni"; SPC(23); "setting" LOCATE 14, 22: PRINT "adresar"; SPC(23); "directory" LOCATE 15, 22: PRINT "napoveda"; SPC(27); "help" LOCATE 16, 22: PRINT "prezentace"; SPC(20); "slideshow" COLOR 7 LOCATE 17, 22: PRINT "Obrazek(Picture):" COLOR 8 LOCATE 18, 22: PRINT "pozastavit"; SPC(24); "pause" LOCATE 19, 22: PRINT "zavrit"; SPC(28); "close" COLOR 2 LOCATE 13, 33: PRINT "F10 / right mouse" LOCATE 14, 33: PRINT "mezernik / space" LOCATE 15, 33: PRINT "F1" LOCATE 16, 33: PRINT "ENTER" LOCATE 18, 33: PRINT "left mouse" LOCATE 19, 33: PRINT "ESC / right mouse" DO CALL MouseStatus(lb%, rb%, xmouse%, ymouse%) LOOP UNTIL (INKEY$ <> "") OR rb% OR lb% PUT (149, 141), Zaloha, PSET CALL CekejVolnouMys(0) END SUB SUB Koukni (File$) DIM atfirst, PodKurzorem(9, 9) AS INTEGER x = 13000: atfirst = -1 DIM Zaloha(x), Zaloha1(x), Zaloha2(x) GET (1, 1)-(639, 160), Zaloha GET (1, 161)-(639, 322), Zaloha1 GET (1, 323)-(639, 479), Zaloha2 CLS CALL Nakresli(File$, 0, 0, 1, Zpomaleni, -1) DO lxmouse% = xmouse%: lymouse% = ymouse% CALL MouseStatus(lb%, rb%, xmouse%, ymouse%) pohybMysi = ((lxmouse% <> xmouse%) OR (lymouse% <> ymouse%)) IF pohybMysi THEN IF NOT (atfirst) THEN CALL MysVratPozadi(lxmouse%, lymouse%, PodKurzorem()) atfirst = 0 CALL MysNactiPozadi(xmouse%, ymouse%, PodKurzorem()) RESTORE KurzorSavle CALL MysUkazKurzor(xmouse%, ymouse%) END IF LOOP UNTIL (INKEY$ <> "") OR rb% CLS PUT (1, 1), Zaloha, PSET PUT (1, 161), Zaloha1, PSET PUT (1, 323), Zaloha2, PSET CALL CekejVolnouMys(0) END SUB FUNCTION ListBox (list$, pocet, x, y, rows, cols, itemLen, SelColor, StdColor, active, FrameColor, DefaultPosition) IF pocet = 0 THEN active = 0 ListBox = -2 END IF sloupcu = pocet \ rows + 1 DIM Pole(sloupcu, rows) AS STRING DIM Delka AS INTEGER DIM poloha AS INTEGER, polohav AS INTEGER DIM px, py, lpx, lpy, posuv, B AS INTEGER DIM SloupcuHotovo AS INTEGER, p1, p2 DIM delitel AS INTEGER DIM atfirst, PodKurzorem(9, 9) AS INTEGER DIM locX, locy, npy, npx, npoloha, keypressed DIM ScrollerYpos, ScrollerXpos atfirst = -1 IF pocet = 1 THEN delitel = 1 ELSE delitel = pocet - 1 END IF CALL Tabulka(x - 2, y - 2, cols * itemLen, rows + 2, FrameColor, 2, -1) COLOR FrameColor: LOCATE y + rows, x + 1: PRINT "<±±±±±±±±±±>" a = -1: B = 0: bk = 0: lin = rows + 1: winsize = lin * cols - 1 poloha = 0: p1 = x - 1: p2 = y - 1 listx$ = list$ COLOR StdColor DO i = INSTR(listx$, "?") IF i = 0 THEN EXIT DO a = a + 1 IF a > rows THEN a = 0 B = B + 1 END IF Pole(B, a) = LEFT$(listx$, i - 1) listx$ = MID$(listx$, i + 1, LEN(listx$) - i) LOOP a = -1: B = 0: posuv = 0 IF DefaultPosition > 0 THEN poloha = DefaultPosition rpt: polohav = poloha - posuv * lin IF polohav > winsize THEN posuv = posuv + 1: B = posuv: GOTO rpt ELSEIF polohav < 0 THEN posuv = posuv - 1: B = posuv: GOTO rpt END IF polohav = poloha - posuv * lin py = polohav MOD lin: px = polohav \ lin COLOR SelColor: LOCATE py + p2, px * itemLen + p1: PRINT "" COLOR SelColor: LOCATE py + p2, px * itemLen + x: PRINT Pole(px + posuv, py) COLOR StdColor END IF Nakresli: SloupcuHotovo = 0 DO a = a + 1 IF a > rows THEN a = 0 B = B + 1 SloupcuHotovo = SloupcuHotovo + 1 IF SloupcuHotovo = cols THEN EXIT DO IF (B * lin + a) > pocet THEN EXIT DO END IF LOCATE a + p2, x + (B - posuv) * itemLen PRINT Pole(B, a) LOOP IF bk = -1 THEN RETURN IF active = 0 THEN EXIT FUNCTION IF DefaultPosition = 0 THEN COLOR SelColor: LOCATE p2, p1: PRINT "" LOCATE p2, x: PRINT Pole(posuv, 0) ELSE COLOR SelColor: LOCATE py + p2, px * itemLen + p1: PRINT "" COLOR SelColor: LOCATE py + p2, px * itemLen + x: PRINT Pole(px + posuv, py) COLOR StdColor END IF DO NotKeys: lpx = px: lpy = py: lpoloha = poloha lxmouse% = xmouse%: lymouse% = ymouse% CALL MouseStatus(lb%, rb%, xmouse%, ymouse%) IF inside THEN IF NOT (lb%) THEN inside = 0 ELSE ScrollerYpos = (y + rows - 1) * 16 ScrollerXpos = (x + 1) * 8 IF (ymouse% < ScrollerYpos) OR ((ScrollerYpos + 16) < ymouse%) THEN ymouse% = ScrollerYpos + 6 CALL MousePut(xmouse%, ymouse%) END IF IF (xmouse% < ScrollerXpos) THEN xmouse% = ScrollerXpos + 2 CALL MousePut(xmouse%, ymouse%) ELSEIF ((ScrollerXpos + 88) < xmouse%) THEN xmouse% = ScrollerXpos + 83 CALL MousePut(xmouse%, ymouse%) END IF END IF END IF pohybMysi = ((lxmouse% <> xmouse%) OR (lymouse% <> ymouse%)) IF pohybMysi THEN IF NOT (atfirst) THEN CALL MysVratPozadi(lxmouse%, lymouse%, PodKurzorem()) atfirst = 0 CALL MysNactiPozadi(xmouse%, ymouse%, PodKurzorem()) RESTORE KurzorRuka CALL MysUkazKurzor(xmouse%, ymouse%) ELSEIF rb% THEN CALL MysVratPozadi(lxmouse%, lymouse%, PodKurzorem()) COLOR 0: LOCATE lpy + p2, lpx * itemLen + p1: PRINT "" ListBox = -1 CALL CekejVolnouMys(0) EXIT FUNCTION END IF IF lb% THEN locX = xmouse% \ 8 locy = ymouse% \ 16 IF (locy = (rows + y - 1)) THEN IF (locX = x) THEN keypressed = -75 CALL CekejVolnouMys(-1): GOTO MouseMoved ELSEIF (locX = x + 12) THEN keypressed = -77 CALL CekejVolnouMys(-1): GOTO MouseMoved ELSEIF (locX < x + 12) AND (locX > x) THEN inside = -1 keypressed = 300 poloha = INT((pocet) * ((locX - x) / 12)) GOTO MouseMoved ELSE keypressed = 0 END IF END IF IF (locX >= (p1 - 2)) AND (locy >= (p2 - 2)) THEN IF (locX < (p1 + cols * itemLen - 1)) AND (locy < (p2 + rows + 1)) THEN npx = (locX - p1) \ itemLen: npy = locy - p2 + 1 npoloha = poloha + (npx - px) * lin + npy - py IF npoloha < 0 THEN npoloha = 0 ELSEIF npoloha > (pocet - 1) THEN npoloha = pocet - 1 END IF IF poloha = npoloha THEN IF (TIMER - dblclick) < .25 THEN '' odstranit keypressed = 13 'CALL CekejVolnouMys(0) END IF '' pri ovladani ELSE keypressed = 300 poloha = npoloha END IF CALL MysVratPozadi(xmouse%, ymouse%, PodKurzorem()) ' odstranit RESTORE KurzorRukaDole ' pro CALL MysUkazKurzor(xmouse%, ymouse%) CALL CekejVolnouMys(0) '' 1 kliknutim CALL MysVratPozadi(xmouse%, ymouse%, PodKurzorem()) ' jednoduchy RESTORE KurzorRuka ' kurzor CALL MysUkazKurzor(xmouse%, ymouse%) ' dblclick = TIMER GOTO MouseMoved ELSEIF NOT (inside) THEN keypressed = 9: GOTO MouseMoved END IF ELSEIF NOT (inside) THEN keypressed = 9: GOTO MouseMoved END IF END IF keypressed = GetKey(0) MouseMoved: IF keypressed <> 0 THEN CALL MysVratPozadi(xmouse%, ymouse%, PodKurzorem()) SELECT CASE keypressed CASE 8: ListBox = -3: EXIT FUNCTION CASE 9: COLOR 0: LOCATE lpy + p2, lpx * itemLen + p1: PRINT "" ListBox = -2: EXIT FUNCTION CASE -15: COLOR 0: LOCATE lpy + p2, lpx * itemLen + p1: PRINT "" ListBox = -4: EXIT FUNCTION CASE 27: COLOR 0: LOCATE lpy + p2, lpx * itemLen + p1: PRINT "" ListBox = -1: EXIT FUNCTION CASE 13: COLOR 0: LOCATE lpy + p2, lpx * itemLen + p1: PRINT "" ListBox = poloha: EXIT FUNCTION CASE -72: up: IF poloha > 0 THEN poloha = poloha - 1 CASE -80: dw: IF (poloha < pocet - 1) THEN poloha = poloha + 1 CASE -75: IF (poloha > rows) THEN poloha = poloha - lin ELSE GOTO up CASE -77: IF (poloha < pocet - lin) THEN poloha = poloha + lin ELSE GOTO dw CASE -71: poloha = 0 CASE -79: poloha = pocet - 1 CASE 300: keypressed = 0 CASE ELSE: GOTO NotKeys END SELECT 'polohav je zobrazovana poloha, a tedy poloha snizena 'o celkove posunuti okna - poloha je opravdova poloha 'kurzoru v filelistu ' Kdyz jsem posunuty v okne o sloupec do prava, ' pak polohav na prvnim souboru v okne je rovna 0, ' zatimco opravdova poloha ukazuje cislo o 7 vyssi,\ ' to proto aby se tento soubor jevil v okne prvni polohav = poloha - posuv * lin IF (polohav > winsize) OR (polohav < 0) THEN a = -1: B = posuv 'posunout -> clearwin bk = -1: COLOR 0: GOSUB Nakresli rpt2: polohav = poloha - posuv * lin 'vypocet virtualni polohy z realne IF polohav > winsize THEN posuv = posuv + 1: a = -1: B = posuv: GOTO rpt2 'posun nestaci->posun++ ELSEIF polohav < 0 THEN posuv = posuv - 1: a = -1: B = posuv: GOTO rpt2 END IF COLOR StdColor: GOSUB Nakresli: bk = 0 END IF py = polohav MOD lin: px = polohav \ lin 'vypocet souradnic kurzoru v okne COLOR 0: LOCATE lpy + p2, lpx * itemLen + p1: PRINT "" COLOR StdColor: LOCATE lpy + p2, lpx * itemLen + x: PRINT Pole(lpx + posuv, lpy) COLOR SelColor LOCATE py + p2, px * itemLen + p1: PRINT "" LOCATE py + p2, px * itemLen + x: PRINT Pole(px + posuv, py) COLOR FrameColor LOCATE y + rows, x + 2 + INT(10 * lpoloha / delitel): PRINT "±" LOCATE y + rows, x + 2 + INT(10 * poloha / delitel): PRINT "" lxmouse% = xmouse%: lymouse% = ymouse% CALL MysNactiPozadi(xmouse%, ymouse%, PodKurzorem()) RESTORE KurzorRuka CALL MysUkazKurzor(xmouse%, ymouse%) LOOP END FUNCTION SUB MouseDriver (AX%, BX%, CX%, DX%) DEF SEG = VARSEG(mouse$) mouse% = SADD(mouse$) CALL Absolute(AX%, BX%, CX%, DX%, mouse%) END SUB SUB MouseHide AX% = 2 MouseDriver AX%, 0, 0, 0 END SUB FUNCTION MouseInit% AX% = 0 MouseDriver AX%, 0, 0, 0 MouseInit% = AX% END FUNCTION SUB MousePut (x%, y%) AX% = 4 CX% = x% DX% = y% MouseDriver AX%, 0, CX%, DX% END SUB SUB MouseShow AX% = 1 MouseDriver AX%, 0, 0, 0 END SUB SUB MouseStatus (lb%, rb%, xmouse%, ymouse%) AX% = 3 MouseDriver AX%, BX%, CX%, DX% lb% = ((BX% AND 1) <> 0) rb% = ((BX% AND 2) <> 0) xmouse% = CX% ymouse% = DX% END SUB SUB MysNactiPozadi (x%, y%, PodKurzorem() AS INTEGER) DIM u AS INTEGER, v AS INTEGER, RY AS INTEGER FOR u = 0 TO 9 RY = y% + u FOR v = 0 TO 9 PodKurzorem(v, u) = POINT(x% + v, RY) NEXT v NEXT u END SUB SUB MysUkazKurzor (x%, y%) DIM u AS INTEGER, v AS INTEGER, RY AS INTEGER, RX AS INTEGER FOR u = 0 TO 9 RY = y% + u FOR v = 0 TO 9 RX = x% + v READ ba IF ba > 0 THEN PSET (RX, RY), ba NEXT v NEXT u END SUB SUB MysVratPozadi (x%, y%, PodKurzorem() AS INTEGER) DIM u AS INTEGER, v AS INTEGER, RY AS INTEGER FOR u = 0 TO 9 RY = y% + u FOR v = 0 TO 9 PSET (x% + v, RY), PodKurzorem(v, u) NEXT v NEXT u END SUB SUB Nakresli (File$, x!, y!, Pomer!, Zpomal!, exitt) DIM Rec AS Rec, c1, c2 OPEN File$ FOR BINARY AS #1 max = LOF(1) / LEN(Rec) FOR i = 1 TO max GET #1, , Rec c1 = Rec.lx: c2 = Rec.ly IF Pomer <> 1 THEN Rec.x = Rec.x / Pomer + x Rec.lx = Rec.lx / Pomer + x Rec.y = Rec.y / Pomer + y Rec.ly = Rec.ly / Pomer + y END IF SELECT CASE Rec.Ukon CASE "L": LINE (Rec.x, Rec.y)-(Rec.lx, Rec.ly), Rec.c CASE "#": IF Pomer <> 1 THEN LINE (x, y)-(x + 640 / Pomer, y + 480 / Pomer), c2, B PAINT (Rec.x, Rec.y), c1, c2 END SELECT IF exitt THEN FOR z = 0 TO Zpomal: NEXT z CALL MouseStatus(lb%, rb%, xmouse%, ymouse%) IF ((INKEY$ <> "") OR rb%) THEN CLOSE #1 EXIT SUB ELSEIF lb% THEN CALL CekejVolnouMys(0) END IF END IF NEXT i CLOSE #1 LINE (x, y)-(x + 640 / Pomer, y + 480 / Pomer), 0, B END SUB SUB Replace (kde$, co$, cim$) dcim = LEN(cim$) DO poz = INSTR(1, kde$, co$) IF poz = 0 THEN EXIT DO kde$ = LEFT$(kde$, poz - 1) + cim$ + MID$(kde$, poz + 1, LEN(kde$)) LOOP END SUB FUNCTION ScrollBar! (x1!, y1!, x2!, y2!, MinVal!, MaxVal!, Default!, Viewing!, OnChange!, OnlyDraw!) DIM PodKurzorem(9, 9) AS INTEGER, atfirst AS INTEGER DIM FyzRozsah AS DOUBLE, GrRozsah AS DOUBLE, ScrollBa AS DOUBLE DIM lSc AS DOUBLE DIM OrigX AS INTEGER, OrigY AS INTEGER, px, py, pom1 AS INTEGER DIM Clicked AS INTEGER xxx = (x2 - x1) * (y2 - y1) + 500 DIM Zaloha(xxx) LINE (x1, y1)-(x2, y2), 7, BF CALL Tlacitko(INT(x1), INT(y1), INT(x2), INT(y2), 1) ScrollBa = Default: lSc = Default FyzRozsah = MaxVal - MinVal GrRozsah = x2 - x1 GET (x1, y1)-(x2 + 1, y2), Zaloha pom1 = x1 + ((Default - MinVal) / (FyzRozsah)) * GrRozsah CALL Tlacitko(pom1, INT(y1), pom1 + 1, INT(y2), 0) IF OnlyDraw THEN ScrollBar = Default EXIT FUNCTION END IF atfirst = -1 DO lxmouse% = xmouse%: lymouse% = ymouse% CALL MouseStatus(lb%, rb%, xmouse%, ymouse%) pohybMysi = ((lxmouse% <> xmouse%) OR (lymouse% <> ymouse%)) IF pohybMysi THEN IF lb% THEN IF NOT (atfirst) THEN CALL MysVratPozadi(lxmouse%, lymouse%, PodKurzorem()) CALL MysNactiPozadi(xmouse%, ymouse%, PodKurzorem()) IF (ymouse% > y1) AND (ymouse% < y2) THEN IF (xmouse% >= OrigX) AND (xmouse% <= x2) THEN DO lxmouse1% = xmouse1% CALL MouseStatus(lb%, rb%, xmouse1%, ymouse%) pohybMysi1 = (lxmouse1% <> xmouse1%) IF pohybMysi1 THEN DO CALL MouseStatus(lb%, rb%, xmouse1%, ymouse%) IF xmouse1% < x1 THEN xmouse1% = x1 ELSEIF xmouse1% > x2 THEN xmouse1% = x2 END IF IF ymouse% < y1 THEN ymouse% = y1 ELSEIF ymouse% > y2 THEN ymouse% = y2 END IF PUT (x1, y1), Zaloha, PSET CALL Tlacitko(xmouse1%, INT(y1), xmouse1% + 1, INT(y2), 0) CALL MysNactiPozadi(xmouse1%, ymouse%, PodKurzorem()) lSc = ScrollBa ScrollBa = (((xmouse1% - x1) / GrRozsah) * FyzRozsah) + MinVal LOCATE 4, 19: PRINT " " LOCATE 4, 19: PRINT ScrollBa LOOP UNTIL NOT (lb%) END IF LOOP UNTIL NOT (lb%) IF OnChange THEN ScrollBar = ScrollBa: EXIT FUNCTION END IF END IF END IF ELSE IF NOT (atfirst) THEN CALL MysVratPozadi(lxmouse%, lymouse%, PodKurzorem()) atfirst = 0 CALL MysNactiPozadi(xmouse%, ymouse%, PodKurzorem()) RESTORE KurzorStinovanaSipka CALL MysUkazKurzor(xmouse%, ymouse%) END IF ELSEIF lb% AND Clicked THEN Clicked = 0 IF (ymouse% > y1) AND (ymouse% < y2) THEN IF (xmouse% > x1) AND (xmouse% < x2) THEN CALL MysVratPozadi(lxmouse%, lymouse%, PodKurzorem()) PUT (x1, y1), Zaloha, PSET CALL Tlacitko(xmouse%, INT(y1), xmouse% + 1, INT(y2), 0) lSc = ScrollBa ScrollBa = (((xmouse% - x1) / GrRozsah) * FyzRozsah) + MinVal LOCATE 3, 11: PRINT ScrollBa; " " CALL MysNactiPozadi(xmouse%, ymouse%, PodKurzorem()) ELSE CALL MysVratPozadi(lxmouse%, lymouse%, PodKurzorem()) ScrollBar = ScrollBa: EXIT FUNCTION END IF ELSE CALL MysVratPozadi(lxmouse%, lymouse%, PodKurzorem()) ScrollBar = ScrollBa: EXIT FUNCTION END IF ELSEIF NOT (lb%) THEN Clicked = -1 IF OnChange THEN ScrollBar = ScrollBa: EXIT FUNCTION END IF END IF LOOP END FUNCTION FUNCTION Settings DIM PodKurzorem(9, 9) AS INTEGER DIM x1, x2, y1, y2 x = 13000 DIM Zaloha(x), Zaloha1(x), Zaloha2(x) GET (1, 1)-(639, 160), Zaloha GET (1, 161)-(639, 322), Zaloha1 GET (1, 323)-(639, 479), Zaloha2 Zas: CLS COLOR 15 PRINT "Nastaveni / Settings..." LOCATE 4, 1 COLOR 14 PRINT " Rychlost / Speed: "; Zpomaleni COLOR 8 PRINT "Cim vetsi hodnotu zvolite tim pomaleji se bude obrazek vykreslovat" PRINT "This value sets the speed of picture painting animation [0=fastest]" COLOR 14 LOCATE 8, 1: PRINT " Zmenit adresar / change directory ..." COLOR 11 LOCATE 20, 15: PRINT "Potvrdit / Submit" COLOR 12 LOCATE 20, 50: PRINT "Ukoncit / Exit" pom = ScrollBar(220, 49, 500, 59, 0, 28000, Zpomaleni, -1, 0, -1) CALL MouseStatus(lb%, rb%, xmouse%, ymouse%) CALL MysNactiPozadi(xmouse%, ymouse%, PodKurzorem()) DO lxmouse% = xmouse%: lymouse% = ymouse% CALL MouseStatus(lb%, rb%, xmouse%, ymouse%) pohybMysi = ((lxmouse% <> xmouse%) OR (lymouse% <> ymouse%)) IF pohybMysi THEN CALL MysVratPozadi(lxmouse%, lymouse%, PodKurzorem()) CALL MysNactiPozadi(xmouse%, ymouse%, PodKurzorem()) SELECT CASE kurzor CASE 0: RESTORE KurzorStinovanaSipka CASE 1: RESTORE KurzorRuka END SELECT CALL MysUkazKurzor(xmouse%, ymouse%) END IF IF lb% THEN IF VObjektu(xmouse%, ymouse%, 220, 49, 500, 59) THEN CALL MysVratPozadi(xmouse%, ymouse%, PodKurzorem()) Zpomaleni = ScrollBar(220, 49, 500, 59, 0, 28000, Zpomaleni, -1, -1, 0) CALL MysNactiPozadi(xmouse%, ymouse%, PodKurzorem()) END IF END IF kurzor = 0 IF VObjektu(xmouse%, ymouse%, 220, 49, 500, 59) THEN CALL Tlacitko(0, 46, 205, 64, 0): kurzor = 1 ELSE LINE (0, 46)-(205, 64), 0, B END IF IF VObjektu(xmouse%, ymouse%, 0, 107, 307, 128) THEN CALL Tlacitko(0, 107, 307, 128, 0): kurzor = 1 IF lb% THEN Settings = -1 GOTO vrat END IF ELSE LINE (0, 107)-(307, 128), 0, B END IF IF VObjektu(xmouse%, ymouse%, 80, 300, 290, 324) THEN CALL Tlacitko(80, 300, 290, 324, 0): kurzor = 1 IF lb% THEN EXIT DO END IF ELSE LINE (80, 300)-(290, 324), 0, B END IF IF VObjektu(xmouse%, ymouse%, 350, 300, 550, 324) THEN CALL Tlacitko(350, 300, 550, 324, 0): kurzor = 1 IF lb% THEN Settings = -2 GOTO vrat END IF ELSE LINE (350, 300)-(550, 324), 0, B END IF LOOP IF Zpomaleni >= 0 THEN Settings = 0 ELSE GOTO Zas END IF vrat: PUT (1, 1), Zaloha, PSET PUT (1, 161), Zaloha1, PSET PUT (1, 323), Zaloha2, PSET CALL CekejVolnouMys(0) END FUNCTION SUB SlideShow (soub$) DIM Filess(100) AS STRING ao = -1: soubx$ = soub$ DO i = INSTR(soubx$, "?") IF i = 0 THEN EXIT DO ao = ao + 1 Filess(ao) = LEFT$(soubx$, i - 1) soubx$ = MID$(soubx$, i + 1, LEN(soubx$) - i) LOOP pocet = ao x = 13000 DIM Zaloha(x), Zaloha1(x), Zaloha2(x) GET (1, 1)-(639, 160), Zaloha GET (1, 161)-(639, 322), Zaloha1 GET (1, 323)-(639, 479), Zaloha2 CLS : COLOR 15 LOCATE 14, 29: PRINT "Prezentace / Slideshow" ao = -1 DO DO IF MouseEnabled% THEN CALL MouseStatus(lb%, rb%, xmouse%, ymouse%) IF lb% AND rb% THEN GOTO EndSlideShow ELSEIF rb% THEN ao = ao - 2: EXIT DO ELSEIF lb% THEN EXIT DO END IF END IF SELECT CASE GetKey(0) CASE 27: GOTO EndSlideShow CASE 8: ao = ao - 2: EXIT DO CASE 13: EXIT DO END SELECT LOOP ao = ao + 1 IF ao > pocet THEN ao = 0 IF ao < 0 THEN ao = pocet CLS CALL Nakresli(Filess(ao), 0, 0, 1, 0, 0) LOOP EndSlideShow: IF MouseEnabled% THEN CALL CekejVolnouMys(0) PUT (1, 1), Zaloha, PSET PUT (1, 161), Zaloha1, PSET PUT (1, 323), Zaloha2, PSET END SUB SUB Tabulka (x, y, w, h, StdColor, LineType!, Clean) DIM aT AS STRING, bT AS STRING, cT AS STRING DIM dT AS STRING, eT AS STRING, fT AS STRING DIM mT AS INTEGER, nT AS INTEGER, oT AS INTEGER SELECT CASE LineType! CASE 1: aT = "Ú": bT = "¿": cT = "À": dT = "Ù": eT = "Ä": fT = "³" CASE 2: aT = "É": bT = "»": cT = "È": dT = "¼": eT = "Í": fT = "º" END SELECT COLOR StdColor IF Clean = -1 THEN FOR yy = y + 1 TO y + h - 1 LOCATE yy, x + 1: PRINT SPC(w - 1); NEXT yy END IF mT = y + h: nT = x + w LOCATE mT, x: PRINT cT LOCATE y, x: PRINT aT LOCATE y, nT: PRINT bT LOCATE mT, nT: PRINT dT FOR xx = 1 TO w - 1 oT = x + xx LOCATE mT, oT: PRINT eT LOCATE y, oT: PRINT eT NEXT xx FOR yy = 1 TO h - 1 oT = y + yy LOCATE oT, x: PRINT fT LOCATE oT, nT: PRINT fT NEXT yy END SUB SUB Tlacitko (x%, y%, ex%, ey%, OnOff) DIM c1, c2 IF OnOff = 0 THEN c1 = 8: c2 = 15 ELSE c1 = 15: c2 = 8 END IF LINE (x%, y%)-(x%, ey%), c1, B LINE (x%, ey%)-(ex%, ey%), c1, B LINE (ex%, y%)-(ex%, ey%), c2, B LINE (ex%, y%)-(x%, y%), c2, B END SUB FUNCTION VObjektu (mysX%, mysY%, x1, y1, x2, y2) VObjektu = 0 IF mysX% < x1 THEN EXIT FUNCTION IF mysX% > x2 THEN EXIT FUNCTION IF mysY% < y1 THEN EXIT FUNCTION IF mysY% > y2 THEN EXIT FUNCTION VObjektu = -1 END FUNCTION SUB VystinujOkno (x1, y1, x2, y2) LINE (x1, y1)-(x2, y2), 0, BF LINE (x1, y1)-(x2, y2), 8, B: LINE (x1 + 5, y1 + 4)-(x2 - 5, y2 - 4), 8, B LINE (x1, y1)-(x1 + 5, y1 + 4), 8: LINE (x2, y2)-(x2 - 5, y2 - 4), 8 PAINT (x1 + 2, y1 + 4), 8, 8: PAINT (x2 - 2, y2 - 4), 15, 8 END SUB