/* T”tulo : Minhas M£sicas M¢dulo : FUNCOES.PRG Coment rio : Fun‡”es diversas Clipper 5.3 + CT.LIB + NANFOR.LIB + LFN.LIB + LL.LIB + CPMI.LIB + WAPI.LIB + TIMESLIC.OBJ (COP.BAT) */ #include "inkey.ch" #include "setcurs.ch" #include "musicas.ch" #include "memoedit.ch" #include "achoice.ch" #define MY_HSEP "ÄĀÄ" #define MY_CSEP " ³ " #define AR_SKIPBLOCK(atb,ai,ar) atb:skipblock={|n, sa| sa:=ai,iif(ai+n > LEN(AR), ai:= LEN(AR), iif(ai+n < 1, ai:=1, ai += n)), ai-sa} Function Configura(VOP) IF VOP=NIL VOP:=1 ENDIF VQCOR_10:=SETCOLOR() VTELA_10:=SAVESCREEN(00,00,24,80) IF !FILE("MUSICAS.MEM") VMUS_ARQ:=SPACE(50) VMUS_LET:=SPACE(50) VMUS_FOR:=SPACE(50) VMUS_COR:="09/0715/01" ELSE RESTORE FROM MUSICAS.MEM ADDI ENDIF JANELA(04,05,21,73,"Configura‡”es") DO WHILE .T. SETCOLOR( CONTECOR[2] ) @ 06,09 CLEAR TO 19,69 @ 07,12 TO 09,65 @ 07,23 SAY " Pasta dos arquivos de m£sicas " COLOR CONTECOR[02] @ 10,12 TO 12,65 @ 10,24 SAY " Pasta das letras das m£sicas " COLOR CONTECOR[02] @ 13,12 TO 15,65 @ 13,16 SAY " Habilitar arquivos de audio de acordo formato " COLOR CONTECOR[02] @ 16,12 TO 18,65 @ 16,27 SAY " Configura‡„o de cores " COLOR CONTECOR[02] MENSAGEM("Utilize as teclas <"+CHR(25)+"> e <"+CHR(24)+"> | Para selecionar") SETCOLOR( CONTECOR[ 2 ] + ", 15/00 ,,," + CONTECOR[ 9 ] ) @ 08,14 PROMPT (IF(LEN(ALLTRIM(VMUS_ARQ))<3,PADC("<< A definir >>",50),PADR(VMUS_ARQ,50))) MESSAGE {||PINTA(1,"OUTRO")} @ 11,14 PROMPT (IF(LEN(ALLTRIM(VMUS_LET))<3,PADC("<< A definir >>",50),PADR(VMUS_LET,50))) MESSAGE {||PINTA(1,"OUTRO")} @ 14,14 PROMPT (IF(LEN(ALLTRIM(VMUS_FOR))=0,PADC("<< A definir >>",50),PADR(VMUS_FOR,50))) MESSAGE {||PINTA(1,"OUTRO")} @ 17,14 PROMPT "" MESSAGE {||PINTA(1,"CORES")} MENU TO VOP DO CASE CASE VOP=1 xMUS_ARQ:=(IF(VMUS_ARQ=PADC("<< A definir >>",50),SPACE(50),PADR(VMUS_ARQ,50))) SET CURSOR ON @ 08,14 GET xMUS_ARQ PICT "!"+":\"+REPLICATE("!",47) COLOR CONTECOR[09] VALID VERDIR(ALLTRIM(xMUS_ARQ)) READ IF LASTKEY()=13 VMUS_ARQ:=ALLTRIM(xMUS_ARQ) SAVE TO MUSICAS.MEM ALL LIKE VMUS_* ENDIF SET CURSOR OFF CASE VOP=2 xMUS_LET:=(IF(VMUS_LET=PADC("<< A definir >>",50),SPACE(50),PADR(VMUS_LET,50))) SET CURSOR ON @ 11,14 GET xMUS_LET PICT "!"+":\"+REPLICATE("!",47) COLOR CONTECOR[09] VALID VERDIR(ALLTRIM(xMUS_LET)) READ IF LASTKEY()=13 VMUS_LET:=ALLTRIM(xMUS_LET) SAVE TO MUSICAS.MEM ALL LIKE VMUS_* ENDIF SET CURSOR OFF CASE VOP=3 IF !ABREARQ("AUDIOS",2,.F.,20) ALERTAR("O arquivo de audio, n„o est  dispon”vel") CLOSE 2 RETURN NIL ENDIF VTELA_20:=SAVESCREEN(01,00,22,79) MYBROWSE(03,02,20,77,"Cadastro de formatos de arquivos de audio","AUDIOS") XMUS_FOR:="" VQT:=0 GOTO TOP DO WHILE (2->(!EOF())) IF LEN(ALLTRIM(2->SOFTWARE))>3 XLEN:=LEN(XMUS_FOR)+1 XMUS_FOR:=XMUS_FOR+(IF(VQT=0,"",", "))+ALLTRIM(2->EXTENSAO) VQT:=VQT+1 ENDIF SKIP ENDDO CLOSE 2 IF VQT>0 IF VQT>1 XMUS_FOR:=STUFF(XMUS_FOR,XLEN,1," e") ENDIF VMUS_FOR:=XMUS_FOR SAVE TO MUSICAS.MEM ALL LIKE VMUS_* ENDIF RESTSCREEN(01,00,22,79,VTELA_20) CASE VOP=4 FOR I=6 TO 19 @ I,09 SAY REPLICATE("Ū",61) COLOR "W+/B" NEXT SETCOLOR(CONTECOR[12]) @ 07,37 TO 17,67 @ 07,39 SAY " Exemplo de mudan‡a de cor " CONTECOR[ 08 ]:=(IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) CONTECOR[ 09 ]:=(IF(SUBSTR(VMUS_COR,6,5)=SPACE(50),"15/04",SUBSTR(VMUS_COR,6,5))) SETCOLOR(CONTECOR[8]) @ 08,38 SAY "T”tulo da M£sica Letra da M£s" COLOR (IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) @ 09,38 SAY "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĀÄÄÄÄÄÄÄÄÄÄÄÄ" COLOR (IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) @ 10,38 SAY "M£sica 1 ³M£sica 4: " COLOR (IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) @ 11,38 SAY "M£sica 2 ³-------- " COLOR (IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) @ 12,38 SAY "M£sica 3 ³L  l  l ... " COLOR (IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) @ 13,38 SAY "M£sica 4 ³La ra la l  " COLOR (IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) @ 13,38 SAY "M£sica 4 " COLOR (IF(SUBSTR(VMUS_COR,6,5)=SPACE(50),"15/04",SUBSTR(VMUS_COR,6,5))) @ 14,38 SAY "M£sica 5 ³Laaaaa... " COLOR (IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) @ 15,38 SAY "M£sica 6 ³ " COLOR (IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) @ 16,38 SAY "M£sica 7 ³ " COLOR (IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) SOMBRA( 07, 37, 17, 67 ) SET CURSOR ON JANELA(10,12,15,34) SETCOLOR( CONTECOR[ 2 ] + "," + CONTECOR[3] + ",,," + CONTECOR[ 9 ] ) @ 12,15 PROMPT " Fundo normal " MESSAGE {||PINTA(2,"FUNDO")} @ 13,15 PROMPT " Destaque cursor " MESSAGE {||PINTA(2,"CURSOR")} MENU TO OPC_COR IF OPC_COR = 0 SETCOLOR(VQCOR_10) RESTSCREEN(00,00,24,80,VTELA_10) RETURN 0 ENDIF FOR I=6 TO 19 @ I,09 SAY REPLICATE("Ū",61) COLOR "W+/B" NEXT X_COR := 07; Y_COR := 50 CURSOR( DESLIGA ) SETCOLOR( "BG/RB" ) @ X_COR, Y_COR, X_COR + 9, Y_COR + 17 BOX "Ū" SOMBRA( X_COR, Y_COR, X_COR+9, Y_COR+17 ) FOR F_COR = 0 TO 7 FOR C_COR = 0 TO 15 SETCOLOR( ALLTRIM( STR( C_COR, 2 ) ) + "/" + ALLTRIM( STR( F_COR, 2 ) ) ) @ F_COR + X_COR + 1, C_COR + Y_COR + 1 SAY "ž" NEXT NEXT C_COR := VAL( SUBS( CONTECOR[ OPC_COR+7 ], 1, 2 ) ) F_COR := VAL( SUBS( CONTECOR[ OPC_COR+7 ], 4 ) ) OK := .T. DO WHILE .T. SETCOLOR( "N/BG" ) @ X_COR, Y_COR, X_COR + 9, Y_COR + 17 BOX " " @ F_COR + X_COR + 1, Y_COR + 17 SAY CHR( 17 ) @ X_COR, Y_COR + C_COR + 1 SAY CHR( 31 ) SETCOLOR( ALLTRIM( STR( C_COR, 3 ) ) + "/" + ALLTRIM( STR( F_COR, 3 ) ) ) CONTECOR[ OPC_COR+7 ] := STRZERO( C_COR, 2 ) + "/" + STRZERO( F_COR, 2 ) SETCOLOR(CONTECOR[12]) @ 07,14 TO 17,44 SETCOLOR(CONTECOR[8]) @ 08,15 SAY "T”tulo da M£sica Letra da M£s" @ 09,15 SAY "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĀÄÄÄÄÄÄÄÄÄÄÄÄ" @ 10,15 SAY "M£sica 1 ³M£sica 4: " @ 11,15 SAY "M£sica 2 ³-------- " @ 12,15 SAY "M£sica 3 ³L  l  l ... " @ 13,15 SAY "M£sica 4 ³La ra la l  " @ 14,15 SAY "M£sica 5 ³Laaaaa... " @ 15,15 SAY "M£sica 6 ³ " @ 16,15 SAY "M£sica 7 ³ " IF OK OK := .F. SOMBRA( 07, 14, 17, 44 ) ENDIF @ 13,15 SAY "M£sica 4 " COLOR CONTECOR[9] @ 13,30 SAY "" COLOR CONTECOR[9] TECLA := INKEY( 0 ) SETCOLOR( "W/BG" ) @ X_COR + F_COR + 1, Y_COR + 17 SAY " " @ X_COR, C_COR + Y_COR + 1 SAY " " F_COR += IIF( TECLA = T_CIMA, -1, IIF( TECLA = T_BAIXO, 1, 0 ) ) C_COR += IIF( TECLA = T_ESQUERDA, -1, IIF( TECLA = T_DIREITA, 1, 0 ) ) F_COR = IIF( F_COR < 0, 7, IIF( F_COR > 7, 0, F_COR ) ) C_COR = IIF( C_COR < 0, 15, IIF( C_COR > 15, 0, C_COR ) ) IF TECLA = T_ESC .OR. TECLA = T_ENTER EXIT ENDIF ENDDO IF TECLA=13 CONTECOR[ OPC_COR+7 ] := STRZERO( C_COR, 2 ) + "/" + STRZERO( F_COR, 2 ) IF OPC_COR=1 VMUS_COR := CONTECOR[ OPC_COR+7 ]+SUBSTR(VMUS_COR,6,5) ELSE VMUS_COR := SUBSTR(VMUS_COR,1,5)+CONTECOR[ OPC_COR+7 ] ENDIF SAVE TO MUSICAS.MEM ALL LIKE VMUS_* SETCOLOR(VQCOR_10) RESTSCREEN(00,00,24,80,VTELA_10) RETURN 4 ENDIF OTHERWISE EXIT ENDCASE ENDDO SETCOLOR(VQCOR_10) RESTSCREEN(00,00,24,80,VTELA_10) Return VOP FUNCTION MyBrowse(nTop, nLeft, nBottom, nRight, VTIT, VDBF) local b, column, n, lMore, nKey, lAppend PUBLIC VSTRING,VMOSTRA VSTRING="" MENSAGEM("Utilize as teclas <"+CHR(25)+"> , <"+CHR(24)+"> , <"+CHR(27)+"> e <"+CHR(26)+">") SET COLOR TO (CONTECOR[2]) @ NTOP-1,NLEFT-1 CLEAR TO NBOTTOM+1,NRIGHT+1 SET COLOR TO (CONTECOR[12]) @ NTOP-1,NLEFT-1 TO NBOTTOM+1,NRIGHT+1 IF LEN(ALLTRIM(VTIT))>0 @ NTOP-1,NLEFT SAY PADC(VTIT,(NRIGHT-NLEFT)+1,"") COLOR CONTECOR[13] ENDIF SET COLOR TO (CONTECOR[2]) SOMBRA(NTOP-1,NLEFT-1,NBOTTOM+1,NRIGHT+1) SETCOLOR(SUBSTR(VMUS_COR,1,5) + "," + SUBSTR(VMUS_COR,6,5) + ",,," + CONTECOR[ 4 ] ) b := TBrowseDB(nTop, nLeft, nBottom, nRight) b:headSep := MY_HSEP b:colSep := MY_CSEP b:skipBlock := {|x| DBSkipper(x, lAppend)} b:colorSpec := SUBSTR(VMUS_COR,1,5)+","+SUBSTR(VMUS_COR,6,5)+","+CONTECOR[08]+","+CONTECOR[10]+","+SUBSTR(CONTECOR[09],1,2)+"/"+SUBSTR(CONTECOR[08],4,2) DO CASE CASE VDBF="MUSICAS" column := TBColumnNew( PADC("T”tulo da M£sica",(NRIGHT-NLEFT)+1), { || PADR(ALLTRIM(1->TITULO),72)+(IF(FILE(VMUS_LET+"\"+VQLYRICS(1->NOMEDOS)),CHR(175)," ")) } ) b:addColumn(column) CASE VDBF="AUDIOS" column := TBColumnNew( "Extens„o", { || (2->EXTENSAO) } ) column:colorblock({ || IIF( EMPTY(ALLTRIM(2->SOFTWARE)), {5,2}, {1,2}) }) column : cargo := { FIELDBLOCK("EXTENSAO"),"@!" } b:addColumn(column) column := TBColumnNew( "Descri‡„o do arquivo de audio", { || SUBSTR((2->DESCRICAO),1,65) } ) column:colorblock({ || IIF( EMPTY(ALLTRIM(2->SOFTWARE)), {5,2}, {1,2}) }) column : cargo := { FIELDBLOCK("DESCRICAO"),"@S65" } b:addColumn(column) column := TBColumnNew( "Programa que ser  usado para tocar", { || (2->SOFTWARE) } ) column:colorblock({ || IIF( EMPTY(ALLTRIM(2->SOFTWARE)), {5,2}, {1,2}) }) column : cargo := { FIELDBLOCK("SOFTWARE"),"@!" } b:addColumn(column) ENDCASE lMore := .t. lAppend := .f. VP="" while (lMore) while ( !b:stabilize() ) nKey := InKey() if ( nKey != 0 ) exit endif enddo if ( b:stable ) if ( b:hitTop .or. b:hitBottom ) Tone(125, 0) endif IF LEN(VP)>0 .AND. VDBF="MUSICAS" SET CURSOR ON VRW:=(b:rowpos)+nTop+1 column := b:getColumn(b:colPos) VT=LEN(VP) VCL:=COL() @ VRW,VCL SAY SUBSTR(EVAL(column:Block()),1,VT) COLOR CONTECOR[3] ELSE SET CURSOR OFF ENDIF nKey := InKey(0) endif do case case ( nKey == K_F1 ) .AND. VDBF="MUSICAS" SET CURSOR OFF VTELA_11:=SAVESCREEN(05,10,20,74) JANELA(06,12,18,74," Ajuda") @ 08,15 SAY " Efetua pesquisa por texto " COLOR CONTECOR[4] @ 09,15 SAY " Continua pesquisa localizada " COLOR CONTECOR[4] @ 10,15 SAY " Altera nome do arquivo de m£sica " COLOR CONTECOR[4] @ 11,15 SAY " Edita a letra da m£sica " COLOR CONTECOR[4] @ 12,15 SAY " Configura‡„o " COLOR CONTECOR[4] @ 13,15 SAY " Toca lista de m£sicas pre-selecionadas " COLOR CONTECOR[4] @ 15,15 SAY " Obs.: A medida que digitar o ponteiro ir  posiconar-se " COLOR CONTECOR[4] @ 16,15 SAY " no t”tulo conforme o digitado. " COLOR CONTECOR[4] INKEY(0) RESTSCREEN(05,10,20,74,VTELA_11) case ( nKey == K_F1 ) .AND. VDBF="AUDIOS" case ( nKey == K_F2 ) .AND. VDBF="MUSICAS" VSTRING=SPACE(39) SET CURSOR OFF VTELA13:=SAVESCREEN(21,19,23,61) GWEXPLODE(21,19,23,61,10000,"T","BG+/B") SOMBRA(21,19,23,61) @ 21,20 SAY PADC(" Procurar por: ",41,"Ä") COLOR "BG+/B" SET CURSOR ON @ 22,21 GET VSTRING PICT "@!" COLOR "W+/N" READ SET CURSOR OFF RESTSCREEN(21,19,23,61,VTELA13) IF !LASTKEY()=27 IF !EMPTY(VSTRING) SELE 1 lAppend := .f. b:goTop() LOCATE FOR MAIORIZA(ALLTRIM(VSTRING)) $ MAIORIZA(1->TITULO) IF !FOUND() BEEP() MENSAGEM("Trecho n„o encontrado !",3) ELSE b:refreshall() ENDIF ENDIF ENDIF case ( nKey == K_F3 ) .AND. VDBF="MUSICAS" IF EMPTY(VSTRING) VSTRING=VP ENDIF SELE 1 SKIP // LOCATE REST FOR ALLTRIM(VSTRING) $ UPPER((1->TITULO)) LOCATE REST FOR MAIORIZA(ALLTRIM(VSTRING)) $ MAIORIZA(1->TITULO) IF !FOUND() BEEP() MENSAGEM("Trecho n„o encontrado !",3) lAppend:=.F. ELSE lAppend:=.F. b:refreshall() ENDIF SET ORDER TO 1 case ( nKey == K_F4 ) .AND. VDBF="MUSICAS" VTITOLD:=(1->TITULO) nLin:=(b:RowPos)+nTop+1 nCol:=nLeft IF MUDACAMP(VTITOLD,nLin,nCol) b:refreshCurrent() ENDIF case ( nKey == K_F5 ) .AND. VDBF="MUSICAS" VQCOR:=SETCOLOR() VTELA_14:=SAVESCREEN(nTop, nLeft, nBottom, nRight) @ nTop,nLeft SAY PADC("Letra da M£sica",(NRIGHT-NLEFT)+1) SET CURSOR ON VARQUIVO:=VQLYRICS(1->NOMEDOS) IF FILE(VMUS_LET+"\"+VARQUIVO) VTXT:=MEMOREAD(VMUS_LET+"\"+VARQUIVO) ELSE VTXT:="" ENDIF SETCOLOR(SUBSTR(VMUS_COR,1,5) + "," + SUBSTR(VMUS_COR,6,5) + ",,," + CONTECOR[ 4 ] ) SET KEY 27 TO VESE_GRAVA() MODET:=.F. VTXT:=MEMOEDIT(VTXT,nTop+2, nLeft, nBottom, nRight, .T., "CONTROL", 73) IF !LASTKEY()=27 IF LEN(ALLTRIM(VTXT))<4 IF FILE(VMUS_LET+"\"+VARQUIVO) DELETE FILE(VMUS_LET+"\"+VARQUIVO) ENDIF ELSE MEMOWRIT(VMUS_LET+"\"+VARQUIVO,HARDCR(VTXT)) ENDIF b:refreshCurrent() ENDIF SET KEY 27 TO SET CURSOR OFF SETCOLOR(VQCOR) RESTSCREEN(nTop, nLeft, nBottom, nRight,VTELA_14) case ( nKey == K_F6 ) .AND. VDBF="MUSICAS" VQF:=Configura(1) SELE 1 IF VQF=4 b:colorSpec := SUBSTR(VMUS_COR,1,5)+","+SUBSTR(VMUS_COR,6,5)+","+CONTECOR[08]+","+CONTECOR[10]+","+SUBSTR(CONTECOR[09],1,2)+"/"+SUBSTR(CONTECOR[08],4,2) b:Configure() ENDIF case ( nKey == K_F7 ) .AND. VDBF="MUSICAS" XARQ_LST:=LF_DIRECTORY("*.M3U",,,,.F.) // LFN LIB VARQ_LST:={} FOR I=1 TO LEN(XARQ_LST) AADD(VARQ_LST,XARQ_LST[I,1]) NEXT RELEASE XARQ_LST VTAM2:=LEN(VARQ_LST) IF VTAM2=1 VOP3:=1 ELSE VQCOR16:=SETCOLOR() VTELA16:=SAVESCREEN(05,25,22,78) VTELA17:=SAVESCREEN(05,44,20,78) SETCOLOR(SUBSTR(CONTECOR[12],1,2)+"/"+SUBSTR(CONTECOR[4],4,2)) @ 05,28 CLEAR TO VTAM2+6,43 @ 05,28 TO VTAM2+6,43 @ 05,29 SAY PADC(" Listas ",12,"Ä") SOMBRA(05,28,VTAM2+6,43) SETCOLOR( CONTECOR[ 4 ] + "," + CONTECOR[3] + "*,,," + CONTECOR[ 4 ] ) VMOSTRA:=.T. KEYBOARD CHR(4) VOP3:=ACHOICE(06,29,20,42,VARQ_LST,.T.,"AMFUNC") SETCOLOR(VQCOR16) RESTSCREEN(05,25,22,78,VTELA16) IF LASTKEY()=27 LOOP ENDIF ENDIF VARQ_JOB:=VARQ_LST[VOP3] IF ALERTAR("Deseja tocar esta lista: "+VARQ_JOB+" ?",{"Tocar agora","Tocar depois"},2)=1 VRODA:="START /R COOLPLAY "+VARQ_JOB ELSE VRODA:="" ENDIF IF !EMPTY(ALLTRIM(VRODA)) // RUN (VRODA) SWPRUNCMD(VRODA,0,"","") /* nao funcionou, ainda continua aparecendo o cursor apos o RUN VIDEOINIT() SETCURSOR(3) SETCURSOR(0) */ ENDIF case ( nKey == K_DOWN ) lAppend := .f. b:down() VP="" case ( nKey == K_UP ) lAppend := .f. b:up() VP="" case ( nKey == K_PGDN ) lAppend := .f. b:pageDown() VP="" case ( nKey == K_PGUP ) lAppend := .f. b:pageUp() VP="" case ( nKey == K_CTRL_PGUP ) lAppend := .f. b:goTop() VP="" case ( nKey == K_CTRL_PGDN ) lAppend := .f. b:goBottom() VP="" case ( nKey == K_RIGHT ) IF VDBF="AUDIOS" b:right() ELSE VP="" IF "." $ (1->NOMEDOS) VARQUIVO:=SUBSTR(1->NOMEDOS,1,(AT(".",(1->NOMEDOS))-1))+".TXT" ELSE VARQUIVO:=(1->NOMEDOS)+".TXT" ENDIF IF FILE(VMUS_LET+"\"+VARQUIVO) VQLETRA(VARQUIVO) ENDIF ENDIF case ( nKey == K_LEFT ) b:left() VP="" case ( nKey == K_HOME ) b:home() VP="" case ( nKey == K_END ) b:end() VP="" case ( nKey == K_CTRL_DOWN ) b:goBottom() VP="" case ( nKey == K_CTRL_LEFT ) b:panLeft() VP="" case ( nKey == K_CTRL_RIGHT ) b:panRight() VP="" case ( nKey == K_CTRL_HOME ) b:panHome() VP="" case ( nKey == K_CTRL_END ) b:panEnd() VP="" case ( nKey == K_BS ) .AND. VDBF="MUSICAS" IF LEN(VP)=1 VP="" SET CURSOR OFF ELSE VP=SUBSTR(VP,1,LEN(VP)-1) ENDIF case ( nKey == K_ESC ) lMore := .f. case ( nKey == K_RETURN ) .AND. VDBF="MUSICAS" VAUD_ARQ:=ALLTRIM(1->NOMEDOS) IF !("." $ VAUD_ARQ) // VEXT_ARQ:=UPPER(ALLTRIM(SUBSTR(1->TITULO,(AT(".",(1->TITULO))+1)))) VEXT_ARQ:=SUBSTR(ALLTRIM(1->TITULO), (AT(".",ALLTRIM(1->TITULO)))+1 ) VAUD_ARQ:=VAUD_ARQ+"."+VEXT_ARQ ELSE VEXT_ARQ:=UPPER(ALLTRIM(SUBSTR(1->NOMEDOS,(AT(".",(1->NOMEDOS))+1)))) ENDIF VSOFTWARE:=PESQ_EXT(VEXT_ARQ) IF VSOFTWARE="COOLPLAY" // Player Freeware VOP2:=ALERTAR("Adicionar esta m£sica … lista ?",{"Cancelar","Adicionar","Tocar agora"},2) IF VOP2=1 VRODA:="" ELSEIF VOP2=2 XARQ_LST:=LF_DIRECTORY("*.M3U",,,,.F.) // LFN LIB VARQ_LST:={"Nova Lista"} FOR I=1 TO LEN(XARQ_LST) AADD(VARQ_LST,XARQ_LST[I,1]) NEXT RELEASE XARQ_LST VTAM2:=LEN(VARQ_LST) IF VTAM2=1 VOP3:=1 ELSE VQCOR16:=SETCOLOR() VTELA16:=SAVESCREEN(05,25,22,45) SETCOLOR( CONTECOR[ 4 ] + "," + CONTECOR[3] + "*,,," + CONTECOR[ 4 ] ) @ 05,28 CLEAR TO VTAM2+6,43 @ 05,28 TO VTAM2+6,43 @ 05,29 SAY PADC(" Listas ",12,"Ä") SOMBRA(05,28,VTAM2+6,43) VMOSTRA:=.F. VOP3:=ACHOICE(06,29,20,42,VARQ_LST,.T.,"AMFUNC") SETCOLOR(VQCOR16) RESTSCREEN(05,25,22,45,VTELA16) IF LASTKEY()=27 LOOP ENDIF ENDIF IF VOP3=1 VARQ_JOB:=SPACE(8) SET CURSOR OFF VTELA15:=SAVESCREEN(21,19,23,61) GWEXPLODE(21,34,23,47,10000,"T","BG+/B") SOMBRA(21,34,23,47) @ 21,35 SAY PADC(" Arquivo ",12,"Ä") COLOR "BG+/B" MENSAGEM("Informe o nome do arquivo que deseja para esta lista") SET CURSOR ON @ 22,43 SAY ".M3U" COLOR "W+/N" @ 22,35 GET VARQ_JOB PICT "@!" COLOR "W+/N" READ SET CURSOR OFF RESTSCREEN(21,19,23,61,VTELA15) IF LASTKEY()=27 LOOP ELSE IF LEN(ALLTRIM(VARQ_JOB))=0 LOOP ELSE VARQ_JOB:=ALLTRIM(VARQ_JOB)+".M3U" ENDIF ENDIF ELSE VARQ_JOB:=VARQ_LST[VOP3] ENDIF IF FILE(VARQ_JOB) cHand=FOPEN(VARQ_JOB, 2 ) FSeek( cHand, 0, 2 ) ELSE cHand=FCREATE(VARQ_JOB,0) ENDIF If FError() == 0 IF DIRNAME()=ALLTRIM(SUBSTR(VMUS_ARQ,3)) VONDE:="" ELSE VONDE:="..\.."+ALLTRIM(SUBSTR(VMUS_ARQ,3))+"\" ENDIF FWRITE( cHand,VONDE+ALLTRIM(1->TITULO) + CHR(13)+CHR(10) ) EndIf FCLOSE(cHand) IF ALERTAR("Deseja tocar esta lista: "+VARQ_JOB+" ?",{"Tocar agora","Tocar depois"},2)=1 VRODA:="START /R "+VSOFTWARE+" "+VARQ_JOB ELSE VRODA:="" ENDIF ELSE VRODA:="START /R "+VSOFTWARE+" "+VMUS_ARQ+"\"+VAUD_ARQ ENDIF ELSE VRODA:="START /R "+VSOFTWARE+" "+VMUS_ARQ+"\"+VAUD_ARQ ENDIF IF !EMPTY(ALLTRIM(VRODA)) // RUN (VRODA) SWPRUNCMD(VRODA,0,"","") /* nao funcionou, ainda continua aparecendo o cursor apos o RUN VIDEOINIT() SETCURSOR(3) SETCURSOR(0) */ ENDIF case ( nKey == K_RETURN ) .AND. VDBF="AUDIOS" lAppend := .f. IF BLOQREG(20) VSAI=DoGet(b, lAppend) UNLOCK ENDIF VP="" b:refreshCurrent() otherwise lAppend := .f. IF VDBF="MUSICAS" VQRF=RECNO() VP=VP+MAIORIZA(CHR(NKEY)) SELE 1 SET ORDER TO 1 SEEK VP IF FOUND() SET CURSOR ON ELSE GOTO VQRF VP=SUBSTR(VP,1,LEN(VP)-1) SET CURSOR OFF ENDIF b:pageDown() b:pageUp() b:refreshall() ELSE KEYBOARD( Chr(nKey) ) lAppend := .f. IF BLOQREG(20) VSAI=DoGet(b, lAppend) UNLOCK b:refreshCurrent() ENDIF VP="" ENDIF endcase enddo return nil Function DBSkipper(n, lAppend) local i i := 0 if ( LastRec() != 0 ) if ( n == 0 ) SKIP 0 elseif ( n > 0 .and. Recno() != LastRec() + 1 ) while ( i < n ) SKIP 1 if ( Eof() ) if ( lAppend ) i++ else SKIP -1 endif exit endif i++ enddo elseif ( n < 0 ) while ( i > n ) SKIP -1 if ( Bof() ) exit endif i-- enddo endif endif return (i) Function DoGet(b, lAppend) local bInsSave, lScoreSave, lExitSave PRIVATE column,get,Key,VMSG while ( !b:stabilize() ) enddo lScoreSave := Set(_SET_SCOREBOARD, .f.) lExitSave := Set(_SET_EXIT, .t.) bInsSave := SetKey(K_INS) SetKey( K_INS, {|| SetCursor( if(ReadInsert(!ReadInsert()), SC_NORMAL, SC_INSERT))} ) SetCursor( if(ReadInsert(), SC_INSERT, SC_NORMAL) ) column := b:getColumn(b:colPos) get := GetNew(Row(), Col(), column:cargo[1], column:heading,column:cargo[2],b:colorSpec) // get : Postblock:={ || FSN(DESCRICAO) } ReadModal( {get} ) SetCursor(0) Set(_SET_SCOREBOARD, lScoreSave) Set(_SET_EXIT, lExitSave) SetKey(K_INS, bInsSave) b:refreshCurrent() nKey := LastKey() if ( nKey == K_UP .or. nKey == K_DOWN .or. nKey == K_PGUP .or. nKey == K_PGDN ) KEYBOARD( Chr(nKey) ) endif if nKey == 27 return .f. else return .t. endif FUNCTION MENSAGEM( TEXTO, PAUSA ) STATIC ULT_MENSAGEM := "" LOCAL ULT_CURSOR := SETCURSOR() IF TEXTO = NIL; TEXTO := ""; ENDIF CURSOR( DESLIGA ) @ MAXROW(), 11 SAY PADC( TEXTO, 58 ) COLOR CONTECOR[ 2 ] IF PAUSA = NIL ULT_MENSAGEM := TEXTO ELSE INKEY( PAUSA ) @ MAXROW(), 11 SAY PADC( ULT_MENSAGEM, 58 ) COLOR CONTECOR[ 2 ] ENDIF SETCURSOR( ULT_CURSOR ) RETURN NIL FUNCTION SOMBRA( LIN_SUP, COL_SUP, LIN_INF, COL_INF ) IF PCOUNT() = 2 .OR. PCOUNT() = 3 C_SOM := COL_SUP; L_SOM := LIN_SUP LIN_SUP := VAL( SUBS( C_SOM, 1, 2 ) ) COL_SUP := VAL( SUBS( C_SOM, 3, 2 ) ) LIN_INF := VAL( SUBS( C_SOM, 5, 2 ) ) COL_INF := VAL( SUBS( C_SOM, 7, 2 ) ) COL_SOM := SUBS( C_SOM, 9 ) LIN_SOM := L_SOM ENDIF IF COL_SUP < 2 .OR. LIN_INF > 22 C_SOM := ""; L_SOM := "" RETURN .F. ENDIF IF PCOUNT() = 3 RESTSCREEN( LIN_SUP + 1, COL_SUP - 2, LIN_INF + 1, COL_SUP - 1, COL_SOM ) RESTSCREEN( LIN_INF + 1, COL_SUP - 2, LIN_INF + 2, COL_INF - 2, LIN_SOM ) RETURN .F. ENDIF IF PCOUNT() != 2 COL_SOM := SAVESCREEN( LIN_SUP + 1, COL_SUP - 2, LIN_INF + 1, COL_SUP - 1 ) LIN_SOM := SAVESCREEN( LIN_INF + 1, COL_SUP - 2, LIN_INF + 2, COL_INF - 2 ) ENDIF IF SUBS( COL_SOM, 2, 1 ) != CHR( 8 ) C_SOM := STR( LIN_SUP, 2 ) + STR( COL_SUP, 2 ) + STR( LIN_INF, 2 ) +; STR( COL_INF, 2 ) + COL_SOM L_SOM := LIN_SOM ENDIF FOR I = 2 TO LEN( COL_SOM ) STEP 2 COL_SOM := STUFF( COL_SOM, I, 1, CHR( 8 ) ) NEXT FOR I = 2 TO LEN( LIN_SOM ) / 2 STEP 2 LIN_SOM := STUFF( LIN_SOM, I, 1, CHR( 8 ) ) NEXT RESTSCREEN( LIN_SUP + 1, COL_SUP - 2, LIN_INF + 1, COL_SUP - 1, COL_SOM ) RESTSCREEN( LIN_INF + 1, COL_SUP - 2, LIN_INF + 2, COL_INF - 2, LIN_SOM ) RETURN .T. FUNCTION PERGUNTA( TEX_TO1, TEX_TO2, ATENTI ) RES_POSTA="S" PER_COR := SETCOLOR() CURSOR( DESLIGA ) SAVE SCREEN TO PER_TELA M->SIM_NAO := IIF( RES_POSTA ="N", 2, 1 ) M->LAR_G := LEN( TEX_TO1 ) IF M->LAR_G < 37 M->LAR_G := 51 ELSE M->LAR_G += 14 ENDIF IF TEX_TO2=NIL M->ALT_G=08 ELSE M->ALT_G=07 ENDIF COL_SUP := INT( ( 80 - M->LAR_G ) / 2 ) COL_INF := COL_SUP + LAR_G - 1 IF ATENTI=NIL JANELA( ALT_G, COL_SUP, 16, COL_INF) VCOR="JANELA DE DIALOGO" ELSE JANELA( ALT_G, COL_SUP, 16, COL_INF, ATENTI,"DESTAQUE") VCOR="JANELA EM DESTAQUE" ENDIF COR(VCOR) IF TEX_TO2=NIL @ 11, ( 80 - LEN( TEX_TO1 ) ) / 2 SAY TEX_TO1 ELSE @ 10, ( 80 - LEN( TEX_TO1 ) ) / 2 SAY TEX_TO1 @ 11, ( 80 - LEN( TEX_TO2 ) ) / 2 SAY TEX_TO2 ENDIF botao:ADD( 13, 25, "Sim " ) botao:ADD( 13, 42, "N„o " ) SIM_NAO := botao:RODA() RESTORE SCREEN FROM PER_TELA SETCOLOR( PER_COR ) RETURN IIF( M->SIM_NAO = 1, "S", "N" ) FUNCTION BOTAO( LINHA_SUPERIOR, COLUNA_ESQUERDA, NOME_BOTAO ) LOCAL TIPO_OPERACAO, LARGURA_BOTAO, CONTAR, TECLA, PONTEIRO := 1 VQCOR=NTOCOLOR(SCREENATTR((OBJBOTAO[1,1])-1,OBJBOTAO[1,2]),.F.) IF PCOUNT() = 0 TIPO_OPERACAO := EDITA_BOTOES ELSEIF PCOUNT() = 1 TIPO_OPERACAO := EDITA_BOTOES PONTEIRO := LINHA_SUPERIOR ELSEIF PCOUNT() = 2 TIPO_OPERACAO := MOSTRA_BOTOES ELSEIF PCOUNT() = 3 TIPO_OPERACAO := MOVIMENTA_BOTAO ENDIF IF TIPO_OPERACAO = MOVIMENTA_BOTAO LARGURA_BOTAO := LEN( NOME_BOTAO ) + 2 SETCOLOR(VQCOR) @ LINHA_SUPERIOR, COLUNA_ESQUERDA SAY " " @ LINHA_SUPERIOR + 1, COLUNA_ESQUERDA - 1 SAY SPACE( LARGURA_BOTAO ) @ LINHA_SUPERIOR, COLUNA_ESQUERDA + LARGURA_BOTAO - 1 SAY " " SETCOLOR(CONTECOR[07]+"*") @ LINHA_SUPERIOR, COLUNA_ESQUERDA - 1 SAY " " + NOME_BOTAO + " " INKEY( .2 ) COR( "BOTOES" ) @ LINHA_SUPERIOR, COLUNA_ESQUERDA SAY " " + NOME_BOTAO + " " SETCOLOR( "N/" + ALLTRIM( SUBS( VQCOR, 4 ) ) ) @ LINHA_SUPERIOR, COLUNA_ESQUERDA - 1 SAY "Ü" @ LINHA_SUPERIOR + 1, COLUNA_ESQUERDA - 1 SAY REPL( "ß", LARGURA_BOTAO ) + " " INKEY( .2 ) ENDIF IF TIPO_OPERACAO = EDITA_BOTOES .OR. TIPO_OPERACAO = MOSTRA_BOTOES FOR CONTAR := 1 TO LEN( ObjBotao ) LARGURA_BOTAO := LEN( ObjBotao[ CONTAR ][ 3 ] ) + 2 COR( "BOTOES" ) @ ObjBotao[ CONTAR ][ 1 ], ObjBotao[ CONTAR ][ 2 ] SAY " "+ObjBotao[ CONTAR ][ 3 ] + " " SETCOLOR( "N/" + ALLTRIM( SUBS( VQCOR, 4 ) ) ) @ ObjBotao[ CONTAR ][ 1 ], ObjBotao[ CONTAR ][ 2 ] - 1 SAY "Ü" @ ObjBotao[ CONTAR ][ 1 ] + 1, ObjBotao[ CONTAR ][ 2 ] - 1 SAY REPL( "ß", LARGURA_BOTAO ) + " " NEXT ENDIF IF TIPO_OPERACAO = EDITA_BOTOES TECLA := 0 WHILE .T. LARGURA_BOTAO := LEN( ObjBotao[ PONTEIRO ][ 3 ] ) + 2 SETCOLOR(CONTECOR[07]+"*") @ ObjBotao[ PONTEIRO ][ 1 ], ObjBotao[ PONTEIRO ][ 2 ] SAY " "+ObjBotao[ PONTEIRO ][ 3 ] + " " SETCOLOR( "N/" + ALLTRIM( SUBS( VQCOR, 4 ) ) ) @ ObjBotao[ PONTEIRO ][ 1 ], ObjBotao[ PONTEIRO ][ 2 ] - 1 SAY "Ü" @ ObjBotao[ PONTEIRO ][ 1 ] + 1, ObjBotao[ PONTEIRO ][ 2 ] - 1 SAY REPL( "ß", LARGURA_BOTAO ) + " " IF TECLA = T_ENTER INKEY( .2 ) botao:LIMPA() RETURN PONTEIRO ENDIF TECLA := INKEY( 0 ) IF TECLA = T_F1 botao:LIMPA() RETURN 28 ENDIF IF TECLA = T_ESC botao:LIMPA() RETURN 0 ENDIF COR( "BOTOES" ) @ ObjBotao[ PONTEIRO ][ 1 ], ObjBotao[ PONTEIRO ][ 2 ] + 1 SAY ObjBotao[ PONTEIRO ][ 3 ] FOR CONTAR = 1 TO LEN( ObjBotao ) IF SUBS( ObjBotao[ CONTAR ][ 3 ], 1, 1 ) = UPPER( CHR( TECLA ) ) PONTEIRO := CONTAR TECLA := T_ENTER EXIT ENDIF NEXT IF TECLA = T_ENTER LARGURA_BOTAO := LEN( ObjBotao[ PONTEIRO ][ 3 ] ) + 2 SETCOLOR( "N/" + ALLTRIM( SUBS( VQCOR, 4 ) ) ) @ ObjBotao[ PONTEIRO ][ 1 ], ObjBotao[ PONTEIRO ][ 2 ] SAY " " @ ObjBotao[ PONTEIRO ][ 1 ] + 1, ObjBotao[ PONTEIRO ][ 2 ] - 1 SAY SPACE( LARGURA_BOTAO ) @ ObjBotao[ PONTEIRO ][ 1 ], ObjBotao[ PONTEIRO ][ 2 ] + LARGURA_BOTAO - 1 SAY " " SETCOLOR(CONTECOR[07]+"*") @ ObjBotao[ PONTEIRO ][ 1 ], ObjBotao[ PONTEIRO ][ 2 ] - 1 SAY " " + ObjBotao[ PONTEIRO ][ 3 ] + " " INKEY( .2 ) LOOP ENDIF IF TECLA = T_ESQUERDA .OR. TECLA = T_CIMA PONTEIRO-- ELSEIF TECLA = T_DIREITA .OR. TECLA = T_BAIXO PONTEIRO++ ENDIF PONTEIRO := IIF( PONTEIRO < 1, LEN( ObjBotao ),IIF( PONTEIRO > LEN( ObjBotao ), 1, PONTEIRO ) ) ENDDO ENDIF botao:LIMPA() RETURN NIL FUNCTION COR( NOM_COR ) QUAL_COR := ASCAN( NOMECOR, UPPER( NOM_COR ) ) IF QUAL_COR != 0 IF QUAL_COR = 2 SETCOLOR( CONTECOR[ 2 ] + "," + CONTECOR[ 3 ] + ",,," + CONTECOR[ 2 ] ) ELSEIF QUAL_COR = 8 SETCOLOR( CONTECOR[ 11 ] + "," + CONTECOR[ 9 ] + ",,," + CONTECOR[ 8 ] ) ELSE SETCOLOR( CONTECOR[ QUAL_COR ] ) ENDIF ENDIF RETURN .T. FUNCTION JANELA( PJAN1, PJAN2, PJAN3, PJAN4, PJAN5, PJAN6 ) IF PJAN5=NIL PJAN5 := "" ENDIF SOMBRA( PJAN1, PJAN2, PJAN3, PJAN4 ) IF PJAN6=NIL SETCOLOR( CONTECOR[ 4 ] ) ELSE SETCOLOR( CONTECOR[ 11 ] ) ENDIF @ PJAN1, PJAN2 CLEAR TO PJAN3, PJAN4 SETCOLOR( CONTECOR[ 5 ] ) @ PJAN1, PJAN2, PJAN3, PJAN4 BOX " " @ PJAN1, PJAN2 SAY "ž" IF LEN( TRIM( PJAN5 ) ) > 0 @ PJAN1, PJAN2 + ( ( ( PJAN4 + 1 - PJAN2 ) - LEN( PJAN5 ) ) / 2 ) SAY PJAN5 ENDIF RETURN NIL FUNCTION ABREARQ(arq,ape,modo,vezes) LOCAL sempre,vtela vtela:=SAVESCREEN(24,00,24,79) sempre:=(vezes = 0) MENSAGEM("Aguarde. Tentando acesso ao arquivo "+TOKEN(ARQ,"\")) DO WHILE (sempre .OR. vezes > 0) SELECT(ape) IF modo // Exclusivo USE (arq) ALIAS (ape) EXCLUSIVE ELSE USE (arq) ALIAS (ape) SHARED ENDIF IF !NETERR() RESTSCREEN(24,00,24,79,vtela) RETURN(.T.) ENDIF INKEY(1) vezes-- ENDDO RESTSCREEN(24,00,24,79,vtela) RETURN(.F.) FUNCTION BLOQARQ(vezes) LOCAL vtela,NK IF FLOCK() RETURN(.T.) ENDIF vtela:=SAVESCREEN(24,00,24,79) MENSAGEM("Aguarde. Tentando acesso ao arquivo "+(DBF())) DO WHILE (vezes > 0) .AND. !(NK=27) NK=INKEY(1) vezes-- IF FLOCK() RESTSCREEN(24,00,24,79,vtela) RETURN(.T.) ENDIF ENDDO RESTSCREEN(24,00,24,79,vtela) RETURN(.F.) FUNCTION BLOQREG(vezes) LOCAL vtela,NK IF RLOCK() RETURN(.T.) ENDIF vtela:=SAVESCREEN(24,00,24,79) MENSAGEM("Aguarde. Tentando acesso ao arquivo "+(DBF())) DO WHILE (vezes > 0) .AND. !(NK=27) IF RLOCK() RESTSCREEN(24,00,24,79,vtela) RETURN(.T.) ENDIF NK=INKEY(1) vezes-- ENDDO RESTSCREEN(24,00,24,79,vtela) RETURN(.F.) FUNCTION ADIREG(vezes) LOCAL vtela APPEND BLANK IF !NETERR() RETURN(.T.) ENDIF vtela:=SAVESCREEN(24,00,24,79) MENSAGEM("Aguarde. Tentando acesso ao arquivo "+(DBF())) DO WHILE VEZES > 0 APPEND BLANK IF !NETERR() RESTSCREEN(24,00,24,79,vtela) RETURN(.T.) ENDIF INKEY(1) vezes-- ENDDO RESTSCREEN(24,00,24,79,vtela) RETURN(.F.) FUNCTION VERDIR(VARQ) IF !(ASC(SUBSTR(VARQ,1,1))>64 .AND. ASC(SUBSTR(VARQ,1,1))<91 .AND. SUBSTR(VARQ,2,1)=":") BEEP() MENSAGEM("Informe a letra da unidade do drive, no incio !",5) RETURN .F. ENDIF IF DRIVETYPE(SUBSTR(VARQ,1,1))=0 BEEP() MENSAGEM("Esta unidade n„o est  acessivel !.",5) RETURN .F. ENDIF SET CURSOR OFF VDIRE:=DIRECTORY(VARQ,"D") IF LEN(VDIRE)=0 IF ALERTAR("A pasta "+VARQ+" n„o existe.;Deseja cri -la ?",{"Sim","N„o"})=1 IF DIRMAKE(VARQ)=0 VRET:=.T. ELSE VRET:=.F. ENDIF ELSE VRET:=.F. ENDIF ELSE VRET:=.T. ENDIF SET CURSOR ON RETURN VRET Function Alertar(expC1,expA2,expC3,VMORE) /* Mensagem de Alerta Array com Op‡”es de Retorno Express„o de Cores do Video + Linha abaixo */ Local Fundo := SaveScreen() ,; Corant := SetColor() ,; Curant := SetCursor() ,; MsgAlert:= {} ,; PxyAlert:= Array(4) ,; TamAlert:= 00 ,; IniAlert:= 01 ,; MenAlert:= space(01) ,; OpcAlert:= 00 expC1:= If( Empty(expC1) , 'Erro do sistema', expC1 ) expA2:= If( Empty(expA2) , { CHR(17)+' Ok '+CHR(16) }, expA2 ) expC3:= If( Empty(expC3) , 0, expC3 ) IF VMORE=NIL VMORE:=0 ENDIF DO CASE CASE expC3=0 SetColor('W+/N,W+/R') expC3:='GR+/N' CASE expC3=1 SetColor('B/W,W+/R') expC3:='B+/W' CASE expC3=2 SetColor('R/W,W+/R') expC3:='R+/W' CASE expC3=3 SetColor('W+/N,W+/R') expC3:='G+/N' CASE expC3=4 SetColor('W+/N,W+/R') expC3:='R+/N' CASE expC3=5 SetColor('W+/N,W+/R') expC3:='B+/N' OTHERWISE SetColor('W+/N,W+/R') expC3:='RB+/N' ENDCASE SetCursor(0) While At(';',expC1) > 0 Aadd( MsgAlert , Substr( expC1 , 1 , At(';',expC1)-1 ) ) expC1 := Substr( expC1 , At(';',expC1)+1 ) TamAlert:= If( Len( MsgAlert[Len(MsgAlert)] ) > TamAlert , ; Len( MsgAlert[Len(MsgAlert)] ) , ; TamAlert ) EndDo Aadd( MsgAlert , expC1 ) TamAlert:= If( Len( MsgAlert[Len(MsgAlert)] ) > TamAlert , ; Len( MsgAlert[Len(MsgAlert)] ) , ; TamAlert ) MenAlert:= CHR(17)+" "+ALLTRIM(expA2[1])+" "+CHR(16) For IniAlert:= 2 to Len(expA2) MenAlert+= Space(03) + CHR(17)+" "+ALLTRIM(expA2[IniAlert])+" "+CHR(16) EndFor TamAlert:= If( Len( MenAlert ) > TamAlert , Len( MenAlert ) , TamAlert ) PxyAlert[1]:= Int( ( 24 - ( Len(MsgAlert) + 6 ) ) / 2 )+VMORE PxyAlert[2]:= Int( ( 80 - ( TamAlert + 4 ) ) / 2 ) PxyAlert[3]:= PxyAlert[01] + Len(MsgAlert) + 3 PxyAlert[4]:= PxyAlert[02] + TamAlert + 3 DispBox( PxyAlert[1], PxyAlert[2], PxyAlert[3], PxyAlert[4], ; Chr(219)+Chr(223)+Chr(219)+Chr(219)+Chr(219)+Chr(220)+ ; Chr(219)+Chr(219)+' ', expC3 ) SOMBRA(PxyAlert[1], PxyAlert[2], PxyAlert[3], PxyAlert[4]) For IniAlert:= 1 to Len(MsgAlert) DevPos( PxyAlert[1] + IniAlert , PxyAlert[2]+2 ) DevOut( Padc( MsgAlert[IniAlert] , TamAlert ) ) EndFor MenAlert:= Int( ( 79 - Len( AllTrim(MenAlert) ) ) / 2 ) - 3 While OpcAlert == 0 DevPos( PxyAlert[1] + 2 + Len(MsgAlert) , MenAlert ) For IniAlert:= 1 to Len(expA2) @ PxyAlert[1] + 2 + Len(MsgAlert) , Col() + 3 Prompt CHR(17)+" "+ALLTRIM(expA2[IniAlert])+" "+CHR(16) EndFor Menu To OpcAlert EndDo SetColor( Corant ) SetCursor( Curant ) RestScreen(,,,,Fundo) Return OpcAlert FUNCTION PINTA(VONDE,VOQUE) IF VONDE=1 IF VOQUE="CORES" @ 17,14 SAY SPACE(50) COLOR "W+/N" @ 17,21 SAY "( Cor do fundo )" COLOR (IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) @ 17,40 SAY "( Cor do cursor )" COLOR (IF(SUBSTR(VMUS_COR,6,5)=SPACE(50),"15/04",SUBSTR(VMUS_COR,6,5))) ELSE @ 17,14 SAY SPACE(50) COLOR "N/W" @ 17,21 SAY "( Cor do fundo )" COLOR (IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) @ 17,40 SAY "( Cor do cursor )" COLOR (IF(SUBSTR(VMUS_COR,6,5)=SPACE(50),"15/04",SUBSTR(VMUS_COR,6,5))) ENDIF ELSE VMSG:="Muda o "+VOQUE+" que est  nesta C O R" @ 24,11 SAY SPACE(58) COLOR "N/W" @ 24,23 SAY VMSG COLOR "N/W" IF VOQUE="FUNDO" @ 24,23+(LEN(VMSG)-5) SAY "C O R" COLOR (IF(SUBSTR(VMUS_COR,1,5)=SPACE(50),"08/07",SUBSTR(VMUS_COR,1,5))) ELSE @ 24,23+(LEN(VMSG)-5) SAY "C O R" COLOR (IF(SUBSTR(VMUS_COR,6,5)=SPACE(50),"15/04",SUBSTR(VMUS_COR,6,5))) ENDIF ENDIF RETURN "" Function GWEXPLODE(xArg1,xArg2,xArg3,xArg4,xArg5,xArg6,xArg7,xArg8) Local xVar1,xVar2,xVar3,xVar4,xVar5,xVar6,xVar7 xArg5:= IIf(xArg5 == Nil,8*gwspeed(),xArg5) xArg6:= IIf(xArg6 == Nil,"CC",xArg6) xArg7:= IIf(xArg7 == Nil,"W+/B",xArg7) xArg8:= IIf(xArg8 == Nil,"ŚÄæ³ŁÄĄ³"+" ",xArg8) xVar1:= xVar3:= (xArg2+xArg4)/2 xVar2:= xVar4:= (xArg1+xArg3)/2 xVar5:= (xVar1-xArg2)/xArg5 xVar6:= (xVar2-xArg1)/xArg5 If ("L" $ Upper(xArg6)) xVar1:= xVar3:= xArg2 xVar5:= (xArg4-xArg2)/xArg5 EndIf If ("R" $ Upper(xArg6)) xVar1:= xVar3:= xArg4 xVar5:= (xArg4-xArg2)/xArg5 EndIf If ("T" $ Upper(xArg6)) xVar2:= xVar4:= xArg1 xVar6:= (xArg3-xArg1)/xArg5 EndIf If ("B" $ Upper(xArg6)) xVar2:= xVar4:= xArg3 xVar6:= (xArg3-xArg1)/xArg5 EndIf Do While (xVar1 > xArg2 .OR. xVar2 > xArg1 .OR. xVar3 < xArg4 .OR. xVar4 < xArg3) xVar1:= Max(xVar1-xVar5,xArg2) xVar3:= Min(xVar3+xVar5,xArg4) xVar2:= Max(xVar2-xVar6,xArg1) xVar4:= Min(xVar4+xVar6,xArg3) mdispbegin() mdispbox(xVar2,xVar1,xVar4,xVar3,xArg8,xArg7) mdispend() EndDo Return Nil Function MDISPBOX(xArg1,xArg2,xArg3,xArg4,xArg5,xArg6) Local xVar1 @ xArg1,xArg2,xArg3,xArg4 Box xArg5 Color xArg6 Return Nil Function MDISPBEGIN Local xVar1 dispbegin() Return Nil Function MDISPEND Local xVar1 dispend() Return Nil Function GWSPEED If (Static2 == 0) _gwspeed(.F.) _gwspeed(.T.) EndIf Return Static2 Static Function _GWSPEED(xArg1) Local xVar1,xVar2 xVar2:= 0 xVar1:= Seconds()+0.2 Do While (xVar1 >= Seconds()) xVar2++ EndDo Static2:= Round(xVar2/215,1) Return Static2 FUNCTION VQEXT(VMUS_FOR) VQTX:={} VI:=1 VF:=LEN(VMUS_FOR) FOR I=1 TO VF IF SUBSTR(VMUS_FOR,I,1)="," AADD(VQTX,ALLTRIM(SUBSTR(VMUS_FOR,VI,I-1))) VI:=I+2 ENDIF IF SUBSTR(VMUS_FOR,I,1)="e" AADD(VQTX,ALLTRIM(SUBSTR(VMUS_FOR,VI,I-1))) VI:=I+2 ENDIF NEXT AADD(VQTX,ALLTRIM(SUBSTR(VMUS_FOR,VI,VF))) RETURN VQTX FUNCTION PESQ_EXT(VEXT_ARQ) SELE 2 LOCATE FOR EXTENSAO=VEXT_ARQ IF FOUND() VRET:=ALLTRIM(2->SOFTWARE) ELSE VRET:="" ENDIF SELE 1 RETURN VRET FUNCTION AMFUNC( nMode, nCurElement, nRowPos ) LOCAL nRetVal := AC_CONT, nKey := LASTKEY() IF nMode=0 .AND. VMOSTRA=.T. MOSTRAM3U(VARQ_LST[nRowPos+1]) ENDIF DO CASE CASE nMode == AC_IDLE nRetVal := AC_CONT CASE nMode == AC_HITTOP TONE( 100, 3 ) CASE nMode == AC_HITBOTTOM TONE( 100, 3 ) CASE nMode == AC_EXCEPT DO CASE CASE nKey == K_RETURN nRetVal := AC_SELECT CASE nKey == K_ESC nRetVal := AC_ABORT OTHERWISE nRetVal := AC_GOTO ENDCASE ENDCASE RETURN nRetVal FUNCTION VEREXT(VARQ_NEW,VARQ_OLD) IF "." $ VARQ_NEW VEXT_NEW:=SUBSTR( ALLTRIM(VARQ_NEW), (AT(".",ALLTRIM(VARQ_NEW)))+1 ) ELSE VEXT_NEW:=REPLICATE(CHR(255),3) ENDIF VEXT_OLD:=SUBSTR( ALLTRIM(VARQ_OLD), (AT(".",ALLTRIM(VARQ_OLD)))+1 ) IF VEXT_NEW=VEXT_OLD VRET:=.T. ELSE IF ALERTAR("Se a extens„o de um nome de arquivo for mudado,;esse arquivo pode ser inutilizado.;;Tem certeza de que deseja aleter -lo ?",{"N„o, alterar","Sim, alterar"},3)=1 VRET:=.F. ELSE VRET:=.T. ENDIF ENDIF RETURN VRET FUNCTION MOSTRAM3U(cTextFile) nFileHandle = FOPEN( cTextFile ) nFileSize = FSEEK( nFileHandle, 0, 2 ) FSEEK( nFileHandle, 0, 0 ) nBytesRead = 0 WLINHA = ReadLin( nFileSize, 14 ) WTAM:=LEN(WLINHA) IF WTAM=0 WLINHA:={SPACE(30)} ENDIF FCLOSE( nFileHandle ) RESTSCREEN(05,44,20,78,VTELA17) @ 05,45 TO WTAM+6,76 COLOR SUBSTR(CONTECOR[12],1,2)+"/"+SUBSTR(CONTECOR[4],4,2) @ 05,46 SAY PADC(" Conte£do do arquivo ",30,"Ä") COLOR SUBSTR(CONTECOR[12],1,2)+"/"+SUBSTR(CONTECOR[4],4,2) FOR U=1 TO WTAM @ 05+U,46 SAY PADR((IF(SUBSTR(WLINHA[U],1,5)="..\..",SUBSTR(WLINHA[U],5+LEN(ALLTRIM(VMUS_ARQ)),30),SUBSTR(WLINHA[U],1,30))),30) COLOR CONTECOR[4] next RETURN NIL FUNCTION ReadLin(nFileSize, nVec) v_L:={} cAccumText:="" DO WHILE .T. cSingle = FREADSTR( nFileHandle, 1 ) nBytesRead = nBytesRead + 1 IF cSingle = CHR(13) cSingle = FREADSTR( nFileHandle, 1 ) nBytesRead = nBytesRead + 1 IF cSingle = CHR(10) cSingle = FREADSTR( nFileHandle, 1 ) nBytesRead = nBytesRead + 1 IF !(cSingle = CHR(26) .OR. ASC(cSingle) = 0) FSEEK( nFileHandle, -1, 1 ) nBytesRead = nBytesRead - 1 ENDIF ELSE IF !(cSingle = CHR(26) .OR. ASC(cSingle) = 0) FSEEK( nFileHandle, -1, 1 ) nBytesRead = nBytesRead - 1 ENDIF ENDIF AADD(v_L,cAccumText) cSingle = "" cAccumText = "" ELSE IF !(cSingle = CHR(26)) cAccumText = cAccumText + cSingle ENDIF ENDIF IF nVec>0 IF LEN(v_L)=nVec EXIT ENDIF ENDIF IF nBytesRead>nFileSize IF LEN(cAccumText)>1 .AND. ASCAN(v_L,cAccumText)=0 AADD(v_L,cAccumText) ENDIF EXIT ENDIF ENDDO RETURN v_L FUNCTION MUDACAMP(VTITOLD,nLin,nCol) VRET:=.F. SET CURSOR ON DO WHILE .T. SETPOS(nLin,nCol) VTITNEW:=GETINPUT(VTITOLD,nLin,nCol,.f.,"","@S30") IF LASTKEY()=27 EXIT ENDIF IF VEREXT(VTITNEW,VTITOLD) IF !(VTITNEW=VTITOLD) VREN:=LF_FRENAME(VMUS_ARQ+"\"+VTITOLD,VMUS_ARQ+"\"+VTITNEW) // LFN LIB IF VREN=.T. IF BLOQREG(20) REPLACE TITULO WITH VTITNEW DBCOMMIT() VRET:=.T. ENDIF EXIT ELSE MENSAGEM("N„o foi possivel renomear arquivo !",3) ENDIF ENDIF ENDIF ENDDO SET CURSOR OFF RETURN VRET FUNCTION VQLETRA( cTextFile) nFileHandle = FOPEN( VMUS_LET+"\"+cTextFile ) nFileSize = FSEEK( nFileHandle, 0, 2 ) FSEEK( nFileHandle, 0, 0 ) nBytesRead = 0 AR := ReadLin( nFileSize, 0 ) WTAM:=LEN(AR) IF WTAM=0 AR:={SPACE(73)} ENDIF FCLOSE( nFileHandle ) TELA_TAB:=SAVESCREEN(02,00,22,79) SET CURSOR OFF AR:=LYRICS(03,04,20,76,ar) RESTSCREEN(02,00,22,79,TELA_TAB) RETURN FUNCTION LYRICS(tt,tl,bb,br,ar) LOCAL exit_requested:=.F., lkey, lAppend PRIVATE aindex:=1 ab:=tbrowsenew(tt,tl,bb,br) ab:headsep=MY_HSEP ab:colsep=MY_CSEP ab:gobottomblock={||aindex:=LEN(AR)} ab:gotopblock={||aindex:=1} AR_SKIPBLOCK(ab,aindex,ar) ab:colorSpec := SUBSTR(VMUS_COR,1,5)+","+SUBSTR(VMUS_COR,6,5)+","+CONTECOR[08]+","+CONTECOR[10]+","+SUBSTR(CONTECOR[09],1,2)+"/"+SUBSTR(CONTECOR[08],4,2) coluna := TBColumnNew(PADC("Letra da M£sica",73),{|| PADR(AR[aindex],73) }) ab:addcolumn(coluna) lAppend := .f. exit_requested=.F. DO WHILE !exit_requested DO WHILE (!ab:stabilize()) lKey := InKey() if ( lKey != 0 ) exit endif ENDDO if ( ab:stable ) if ( ab:hitTop ) .or. ( ab:hitBottom ) Tone(125, 0) endif lKey := INKEY(0) endif DO CASE CASE lkeY=K_F1 CASE lkeY=K_DOWN IF AINDEX=LEN(AR) TONE(125,0) ELSE AB:DOWN() ENDIF CASE lkeY=K_UP ab:UP() CASE lkeY=K_PGDN ab:PAGEDOWN() CASE lkeY=K_PGUP ab:PAGEUP() CASE lkeY=K_CTRL_PGUP ab:GOTOP() CASE lkeY=K_CTRL_PGDN ab:GOBOTTOM() CASE LKEY=K_TAB .OR. LKEY=K_ESC .OR. lkeY=K_LEFT .OR. LKEY=K_CTRL_HOME .OR. lkeY=K_HOME exit_requested=.t. ENDCASE ENDDO RETURN AR FUNCTION VESE_GRAVA() IF MODET=.T. IF ALERTAR("Gravar antes de sair ?",{"Sim","N„o"},1)=1 KBDEMULATE(CHR(23)) ELSE SET KEY 27 TO KBDEMULATE(CHR(27)) ENDIF ELSE SET KEY 27 TO KBDEMULATE(CHR(27)) ENDIF RETURN FUNCTION CONTROL(MODO,LINHA,COLUNA) PUBLIC INS_MUDA,MODET IF MODO=ME_INIT INS_MUDA=.F. MODET=.F. KSETINS(.F.) SETCURSOR(1) ENDIF IF MODO=0 @ 21,07 SAY " Linha: "+STRZERO(LINHA,3,0)+" " COLOR CONTECOR[12] @ 21,62 SAY " Coluna: "+STRZERO(COLUNA,3,0)+" " COLOR CONTECOR[12] QTECLA:=LASTKEY() IF !(QTECLA=27) IF QTECLA=7 .OR. QTECLA=8 .OR. QTECLA=9 .OR. QTECLA=13 .OR. QTECLA=127 .OR. (QTECLA>32 .AND. QTECLA<255) MODET=.T. ENDIF ENDIF ENDIF IF KSETINS() SETCURSOR(3) ELSE SETCURSOR(1) ENDIF IF INS_MUDA=.T. // Acerta o Ins READINSERT(.T.) INS_MUDA=.F. ENDIF DO CASE CASE LASTKEY()=-9 VCLIP:=GetWinClip() IF LEN(ALLTRIM(VCLIP))=0 BEEP() MENSAGEM("O Clipboard est  vazio !.",5) ELSE VCLIP:=ANSI2OEM(VCLIP) KEYBOARD VCLIP ENDIF CASE LASTKEY()=11 VK=INKEY(0) IF UPPER(CHR(LASTKEY()))="R" .OR. LASTKEY()=18 VMSG=SCREENSTR(24,11,58) @ 24,11 SAY SPACE(58) @ 24,11 SAY "" VARQ=GETINPUT(SPACE(30),24,11,,"Informe o nome do arquivo:","@!") STRSCREEN(VMSG,24,11) IF FILE(VARQ) VINS=MEMOREAD(VARQ) VINS=SUBSTR(VINS,1,LEN(VINS)-2) IF KSETINS()=.F. READINSERT(.T.) OPOE=CHR(22) ELSE OPOE="" ENDIF MODET=.T. KEYBOARD VINS+OPOE ELSE MENSAGEM("Arquivo "+ALLTRIM(VARQ)+" n„o encontrado !",5,) ENDIF ELSE BEEP() ENDIF ENDCASE RETURN 0 FUNCTION ANSI2OEM(VTXT) WIN_CAR_LOW:={'į','é','ķ','ó','ś','ć','õ','ā','ź','ī','ō','ū','ą','č','ģ','ņ','ł','ä','ė','ļ','ö','ü','ē','ń'} WIN_CAR_HIG:={'Į','É','Ķ','Ó','Ś','Ć','Õ','Ā','Ź','Ī','Ō','Ū','Ą','Č','Ģ','Ņ','Ł','Ä','Ė','Ļ','Ö','Ü','Ē','Ń'} DOS_CAR_LOW:={' ','‚','”','¢','£','Ę','ä','ƒ','ˆ','Œ','“','–','…','Š','','•','—','„','‰','‹','”','','‡','¤'} DOS_CAR_HIG:={'µ','','Ö','ą','é','Ē','å','¶','Ņ','×','ā','ź','·','Ō','Ž','ć','ė','Ž','Ó','Ų','™','š','€','„'} VT:=LEN(VTXT) VRET:="" FOR I=1 TO VT VCAR:=SUBSTR(VTXT,I,1) WCAR:=VCAR V_P:=ASCAN(WIN_CAR_LOW,VCAR) IF V_P=0 V_P:=ASCAN(WIN_CAR_HIG,VCAR) IF V_P>0 WCAR:=DOS_CAR_HIG[V_P] ENDIF ELSE WCAR:=DOS_CAR_LOW[V_P] ENDIF IF VCAR="Ŗ" WCAR:="¦" ENDIF VRET:=VRET+WCAR NEXT RETURN VRET FUNCTION MAIORIZA(cPalavra) LOCAL i:=0,cAcento:= '',cRetiraAcento:= '' FOR I = 1 To Len(cPalavra) cAcento:=SUBST(cPalavra, I, 1) DO CASE CASE cAcento $ "µĒ¶·Ž" cAcento = "A" CASE cAcento $ "ŅŌÓ" cAcento = "E" CASE cAcento $ "Ö׎Ų" cAcento = "I" CASE cAcento $ "ąåā™" cAcento = "O" CASE cAcento $ "éźėš" cAcento = "U" CASE cAcento $ " Ęƒ…„" cAcento = "A" CASE cAcento $ "‚ˆŠ‰" cAcento = "E" CASE cAcento $ "”‹Œ" cAcento = "I" CASE cAcento = "¢ä“•”" cAcento = "O" CASE cAcento $ "£–—" cAcento = "U" CASE cAcento $ "‡" cAcento = "C" CASE cAcento $ "€" cAcento = "C" OTHERWISE cAcento = UPPER(cAcento) ENDCASE cRetiraAcento += cAcento NEXT RETURN cRetiraAcento FUNCTION VQLYRICS(VNOM) IF "." $ (VNOM) VRET:=SUBSTR(VNOM,1,(AT(".",VNOM)-1))+".TXT" ELSE VRET:=VNOM+".TXT" ENDIF RETURN VRET * Final do programa FUNCOES.PRG