'=========================================================================== ' Subject: SIMPLE FILE BROWSER Date: 02-29-96 (14:39) ' Author: Alexander Podkolzin Code: PB32 ' Origin: APP@nw.sbank.e-burg.su Packet: TEXT.ABC '=========================================================================== '-------------------------------------------------------------------------- ' Simple File Browser. Author: Alexander Podkolzin ' Use it as you want... ' PowerBASIC 3.2 '-------------------------------------------------------------------------- $CPU 8086 $OPTIMIZE SIZE $COMPILE EXE $DEBUG MAP OFF $DEBUG PBDEBUG OFF $LIB ALL OFF $ERROR ALL OFF $COM 0 $STRING 4 $STACK 2048 $SOUND 1 $DIM ARRAY $DYNAMIC $OPTION CNTLBREAK OFF '-------------------------------------------------------------------------- %MaxLines = 5000 ' Max strings to show %MaxLen=240 ' Max LEN of a string ' DEFINT a-z DIM txt$(%MaxLines) ' InsKey$=CHR$(0,82) ' Key codes Enter$=CHR$(13) Esc$ = CHR$(27) Home$ = CHR$(0,71) PgUp$ = CHR$(0,73) EndKey$ = CHR$(0,79) PgDn$ = CHR$(0,81) Up$ = CHR$(0,72) Down$ = CHR$(0,80) LeftKey$ = CHR$(0,75) RightKey$ = CHR$(0,77) CtrlPgUp$ = CHR$(0,132) CtrlPgDn$ = CHR$(0,118) CtrlHome$ = CHR$(0,119) CtrlEnd$ = CHR$(0,117) ' Twin%=1 ' Win type xb%=1 : yb%=2 : xe%=80 : ye%=24 ' Edit window coordinates ' ct%=7 ' Main colors cb%=0 ' ' FileName$ = COMMAND$ ' File to edit ' IF NOT FileExists(FileName$) THEN PRINT "Command line not found..." BEEP END END IF ' src% = FREEFILE OPEN FileName$ FOR INPUT AS src% i%=0 DO WHILE EOF(src%)=0 AND i% < %MaxLines INCR i% LINE INPUT #src%,txt$(i%) IF txt$(i%)="" THEN txt$(i%)=" " REPLACE CHR$(9) WITH " " IN txt$(i%) LOOP CLOSE src% nlines%=i% ' COLOR 0,7 LOCATE 1,1 PRINT SPACE$(80); LOCATE 1,4 PRINT "File = ";FileName$; LOCATE 25,1 PRINT SPACE$(80); ' COLOR ct%,cb% ' lpage%=ye%-yb%-1 CALL win(twin%,xb%,yb%,xe%,ye%,ct%,cb%) Aprint 3,ye%,"´ : = Ã" ' begx%=1 begy%=1 endy%=MIN(lpage%,nlines%) CurY%=1 CurX%=1 GOSUB ShowText GOSUB ShowCursor DO GOSUB ShowCursor WHILE NOT INSTAT: WEND ' begy% - first line to show, IF nlines%<1 THEN EXIT LOOP ' endy% - last line to show (array) k$=INKEY$ ' CurY% - the cursor bar line SELECT CASE k$ ' lpage%- length of window (page) CASE InsKey$ : ITERATE LOOP CASE Esc$ : CurY%=0 : begy%=1:EXIT LOOP CASE Enter$ : EXIT LOOP CASE Home$ : CurX%=2 : begx%=1 CASE EndKey$ : l%=LEN(txt$(begy%+CurY%-1)) : CurX%=MIN(l%+1,78)+1 : endx%=MAX(l%+1,78)+1 : begx%=endx%-78 CASE Up$ IF CurY%>1 THEN DECR CurY% ELSE begy%=begy%-1 endy%=endy%-1 END IF CASE Down$ IF CurY%2 THEN DECR CurX% ELSE begx%=begx%-1 IF begx%<1 THEN begx%=1 END IF CASE RightKey$ IF CurX% < 79 THEN INCR CurX Show=0 ELSE INCR begx IF begx >%MaxLen-79 THEN begx=%MaxLen-79 END IF CASE PgUp$ : begy%=begy%-lpage% : endy%=endy%-lpage% CASE PgDn$ : begy%=begy%+lpage% : endy%=endy%+lpage% CASE CtrlPgUp$ : begy%=1 : endy%=begy%+lpage%-1 : CurX%=2 : CurY%=1 CASE CtrlPgDn$ : endy%=nlines% : begy%=endy%-lpage%+1 : CurX%=2 : CurY%=21 CASE CtrlHome$ : CurY%=1 CASE CtrlEnd$ : CurY%=21 CASE ELSE : k$="" END SELECT GOSUB ShowText LOOP CLS END '-------------------------------------------------------------------------- ShowText: CALL Numerer(nlines%,lpage%,begy%,endy%) GOSUB MakeRuler FOR i%=begy% TO endy% Aprint xb%+1,yb%+i%-begy%+1,_ MID$(txt$(i%)+SPACE$(xe%-xb%+1),begx%,78) NEXT i% RETURN '-------------------------------------------------------------------------- ShowCursor: LOCATE ye%,4,0 PRINT RIGHT$("0000"+LTRIM$(STR$(begy%+CurY%-1)),5) LOCATE ye%,10,0 PRINT RIGHT$("00"+LTRIM$(STR$(begx%+Curx%-2)),3) IF CurX%< 2 THEN CurX%= 2 IF CurX%>79 THEN CurX%=79 LOCATE ye%,14,0 PRINT RIGHT$("00"+LTRIM$(STR$(SCREEN(CurY%+2,CurX%))),3) LOCATE yb%+CurY%,CurX,1 RETURN '-------------------------------------------------------------------------- MakeRuler: FOR i%=yb%+1 TO ye%-1 Aprint xe%,i%,CHR$(177) NEXT k%=((begy%+CurY%-1)/nlines%)*(ye%-yb%-1) IF k%=0 THEN k%=1 Aprint xe%,yb%+k%,CHR$(219) RETURN '-------------------------------------------------------------------------- SUB Numerer(nlines%,lpage%,begy%,endy%) IF nlines%<=lpage% THEN begy%=1 endy%=nlines% EXIT SUB END IF IF begy%<1 THEN begy%=1 endy%=begy%+lpage%-1 EXIT SUB END IF IF begy%+lpage%-1>=nlines% THEN endy%=nlines% begy%=nlines%-lpage%+1 EXIT SUB END IF endy%=begy%+lpage%-1 END SUB '-------------------------------------------------------------------------- SUB Win(t%,xb%,yb%,xe%,ye%,ct%,cb%) ' OldColor% = pbvScrnTxtAttr ' Internal PB variable SELECT CASE t% ' Window types ' ' (you can make as much types, ' ' as you want): CASE 1 a%=218:b%=196:c%=191 'ÚÄÄÄÄÄÄÄ¿ h%=179: :d%=179 '³ 1 ³ g%=192:f%=196:e%=217 'ÀÄÄÄÄÄÄÄÙ CASE 2 a%=201:b%=205:c%=187 'ÉÍÍÍÍÍÍÍ» h%=186: :d%=186 'º 2 º g%=200:f%=205:e%=188 'ÈÍÍÍÍÍÍͼ CASE ELSE a%=032:b%= a%:c%= a% ' h%= a%: :d%= a% ' Blanks only g%= a%:f%= a%:e%= a% ' END SELECT COLOR ct%,cb% LOCATE yb%,xb% PRINT CHR$(a%)+REPEAT$(xe%-xb%-1,CHR$(b%))+CHR$(c%); FOR i%=yb%+1 TO ye%-1 LOCATE i%,xb% PRINT CHR$(h%)+ SPACE$(xe%-xb%-1) +CHR$(d%); NEXT LOCATE ye%,xb% PRINT CHR$(g%)+REPEAT$(xe%-xb%-1,CHR$(f%))+CHR$(e%); ct%=OldColor% AND 15 ' restore colors cb%=OldColor%\16 COLOR ct%,cb% END SUB '-------------------------------------------------------------------------- SUB Aprint(x%,y%,st$) ox%=POS(0) oy%=CSRLIN LOCATE y%,x%,0 PRINT st$; LOCATE oy%,ox%,1 END SUB '-------------------------------------------------------------------------- FUNCTION FileExists%(FileName$) S$=DIR$(FileName$) IF LEN(S$) = 0 THEN FileExists% = 0 ELSE FileExists% = -1 END IF END FUNCTION '--------------------------------------------------------------------------