DECLARE FUNCTION Data$ (Tipo!, Coluna, Linha, CorDeFundo!, CorDaLetra!, Caractere$, Caractere2$)
DECLARE FUNCTION Password$ (Coluna!, Linha!, Tamanho!, CorDeFundo!, CorDaLetra!, Caractere$, Caractere2$)
DECLARE FUNCTION MedeString$ (Coluna!, Linha!, Tamanho!, CorDeFundo!, CorDaLetra!, Caractere$)
DECLARE SUB MudaCor (x1, y1, x2, y2, Cor1, Cor2 AS INTEGER)
DECLARE SUB Pause ()
        

FUNCTION Data$ (Tipo, Coluna, Linha, CorDeFundo, CorDaLetra, Caractere$, Caractere2$)

        IF Caractere$ = "" THEN Caractere$ = " "
        IF Caractere2$ = "" THEN Caractere2$ = " "
       
        IF Tipo < 1 OR Tipo > 2 THEN
        BEEP
        DO
        LOCATE 12, 23
        PRINT "Erro na definicao do tipo da data"
        LOOP UNTIL INKEY$ <> ""
        END
        END IF

        RESET

CriacaoDosCampos:

        LOCATE Linha, Coluna
        COLOR CorDaLetra, CorDeFundo
        SELECT CASE Tipo
        CASE 1
        i = 0
        FOR i = 1 TO 8
        PRINT Caractere$;
        NEXT i
        CASE 2
        i = 0
        FOR i = 1 TO 10
        PRINT Caractere$;
        NEXT i
        END SELECT
        LOCATE Linha, Coluna + 2
        PRINT Caractere2$;
        LOCATE Linha, Coluna + 5
        PRINT Caractere2$;




CampoDia:

        DO
        IF LEN(Dia$) = 2 GOTO CampoMes
        Tecla$ = INKEY$
        IF Tecla$ = CHR$(13) OR Tecla$ = CHR$(9) THEN GOTO FimDaData
        IF Tecla$ <> "" THEN GOTO AddDia
        LOOP

AddDia:

        IF Tecla$ <> CHR$(8) THEN
        Dia$ = Dia$ + Tecla$
        ELSE
        IF LEN(Dia$) = 0 THEN GOTO AtualizaDia
        Dia$ = MID$(Dia$, 1, LEN(Dia$) - 1)
        END IF

AtualizaDia:

        LOCATE Linha, Coluna
        COLOR CorDaLetra, CorDeFundo
        IF LEN(Dia$) = 0 THEN
        PRINT Caractere$ + Caractere$ + Caractere2$;
        END IF
        IF LEN(Dia$) = 1 THEN
        PRINT Dia$ + Caractere$ + Caractere2$;
        END IF
        IF LEN(Dia$) = 2 THEN
        PRINT Dia$ + Caractere2$;
        END IF
        GOTO CampoDia


CampoMes:

        DO
        IF LEN(Mes$) = 2 GOTO CampoAno
        Tecla$ = INKEY$
        IF Tecla$ = CHR$(13) OR Tecla$ = CHR$(9) THEN EXIT DO
        IF Tecla$ <> "" THEN GOTO AddMes
        LOOP
        GOTO FimDaData

AddMes:

        IF Tecla$ <> CHR$(8) THEN
        Mes$ = Mes$ + Tecla$
        ELSE
        IF LEN(Mes$) = 0 THEN
        Dia$ = MID$(Dia$, 1, 1)
        GOTO AtualizaDia
        END IF
        Mes$ = MID$(Mes$, 1, LEN(Mes$) - 1)
        END IF

AtualizaMes:

        LOCATE Linha, Coluna + 3
        COLOR CorDaLetra, CorDeFundo
        IF LEN(Mes$) = 0 THEN
        PRINT Caractere$ + Caractere$ + Caractere2$;
        END IF
        IF LEN(Mes$) = 1 THEN
        PRINT Mes$ + Caractere$ + Caractere2$;
        END IF
        IF LEN(Mes$) = 2 THEN
        PRINT Mes$ + Caractere2$;
        END IF
        GOTO CampoMes


CampoAno:

        DO
        SELECT CASE Tipo
        CASE 1
        IF LEN(Ano$) > 2 THEN
        BEEP
        Ano$ = MID$(Ano$, 1, 2)
        END IF
        CASE 2
        IF LEN(Ano$) > 4 THEN
        BEEP
        Ano$ = MID$(Ano$, 1, 4)
        END IF
        END SELECT
        Tecla$ = INKEY$
        IF Tecla$ = CHR$(13) OR Tecla$ = CHR$(9) THEN GOTO FimDaData
        IF Tecla$ <> "" THEN GOTO AddAno
        LOOP


        GOTO FimDaData

AddAno:

        IF Tecla$ <> CHR$(8) THEN
        Ano$ = Ano$ + Tecla$
        ELSE
        IF LEN(Ano$) = 0 THEN
        Mes$ = MID$(Mes$, 1, 1)
        GOTO AtualizaMes
        END IF
        Ano$ = MID$(Ano$, 1, LEN(Ano$) - 1)
        END IF

AtualizaAno:

        LOCATE Linha, Coluna + 6
        COLOR CorDaLetra, CorDeFundo
        IF Tipo = 1 THEN
        IF LEN(Ano$) = 0 THEN
        PRINT Caractere$ + Caractere$;
        END IF
        IF LEN(Ano$) = 1 THEN
        PRINT Ano$ + Caractere$;
        END IF
        IF LEN(Ano$) = 2 THEN
        PRINT Ano$;
        END IF
        ELSE
        IF LEN(Ano$) = 0 THEN
        PRINT Caractere$ + Caractere$ + Caractere$ + Caractere$;
        END IF
        IF LEN(Ano$) = 1 THEN
        PRINT Ano$ + Caractere$ + Caractere$ + Caractere$;
        END IF
        IF LEN(Ano$) = 2 THEN
        PRINT Ano$ + Caractere$ + Caractere$;
        END IF
        IF LEN(Ano$) = 3 THEN
        PRINT Ano$ + Caractere$;
        END IF
        IF LEN(Ano$) = 4 THEN
        PRINT Ano$;
        END IF
        END IF
        GOTO CampoAno



FimDaData:

       IF Dia$ = "" THEN Dia$ = Caractere$ + Caractere$
       IF Mes$ = "" THEN Mes$ = Caractere$ + Caractere$
       SELECT CASE Tipo
       CASE 1
       IF Ano$ = "" THEN Ano$ = Caractere$ + Caractere$
       CASE 2
       IF Ano$ = "" THEN Ano$ = Caractere$ + Caractere$ + Caractere$ + Caractere$
       END SELECT

       Data$ = Dia$ + Caractere2$ + Mes$ + Caractere2$ + Ano$

END FUNCTION

FUNCTION MedeString$ (Coluna, Linha, Tamanho, CorDeFundo, CorDaLetra, Caractere$)

        IF Caractere$ = "" THEN Caractere$ = " "
        COLOR CorDaLetra, CorDeFundo
        LOCATE Linha, Coluna
        FOR i = 1 TO Tamanho
        PRINT Caractere$;
        NEXT i

        RESET
        DO
        Tecla$ = INKEY$
        IF Tecla$ = CHR$(13) OR Tecla$ = CHR$(9) THEN EXIT DO
        IF Tecla$ <> "" THEN GOSUB AddString
        LOOP

        GOTO FimDaFunc

AddString:
       
        IF Tecla$ <> CHR$(8) THEN
        Frase$ = Frase$ + Tecla$
        ELSE
        IF LEN(Frase$) = 0 THEN GOTO Atualiza
        Frase$ = MID$(Frase$, 1, LEN(Frase$) - 1)
        END IF

Atualiza:
      
        COLOR CorDaLetra, CorDeFundo
        LOCATE Linha, Coluna
        IF LEN(Frase$) > Tamanho THEN
        BEEP
        Frase$ = MID$(Frase$, 1, Tamanho)
        END IF
        IF LEN(Frase$) <> Tamanho THEN
        PRINT Frase$ + Caractere$
        ELSE
        PRINT Frase$
        END IF

        RETURN


FimDaFunc:

       LOCATE Linha, Coluna
       PRINT Frase$;
       i = 0
       FOR i = 1 TO Tamanho - LEN(Frase$)
       PRINT " ";
       NEXT i
       MedeString$ = Frase$
       COLOR CorDaLetra, CorDeFundo

END FUNCTION

SUB MudaCor (x1, y1, x2, y2, Cor1, Cor2 AS INTEGER)

        FOR Linha = 1 TO y2 - y1
                FOR Pixel = 1 TO x2 - x1
                IF POINT(x1 - 1 + Pixel, Linha) = Cor1 THEN PSET (x1 - 1 + Pixel, Linha), Cor2
                NEXT Pixel
        NEXT Linha

END SUB

FUNCTION Password$ (Coluna, Linha, Tamanho, CorDeFundo, CorDaLetra, Caractere$, Caractere2$)
      
        IF Caractere$ = "" THEN Caractere$ = " "
        IF Caractere2$ = "" THEN Caractere2$ = " "

        COLOR CorDaLetra, CorDeFundo
        LOCATE Linha, Coluna
        FOR i = 1 TO Tamanho
        PRINT Caractere$;
        NEXT i

        RESET
        DO
        Tecla$ = INKEY$
        IF Tecla$ = CHR$(13) OR Tecla$ = CHR$(9) THEN EXIT DO
        IF Tecla$ <> "" THEN GOSUB AddPassword
        LOOP

        GOTO FimDoPassword

AddPassword:
      
        IF Tecla$ <> CHR$(8) THEN
        Frase$ = Frase$ + Tecla$
        ELSE
        IF LEN(Frase$) = 0 THEN GOTO AtualizaPassword
        Frase$ = MID$(Frase$, 1, LEN(Frase$) - 1)
        END IF

AtualizaPassword:
     
        COLOR CorDaLetra, CorDeFundo
        LOCATE Linha, Coluna
        IF LEN(Frase$) > Tamanho THEN
        BEEP
        Frase$ = MID$(Frase$, 1, Tamanho)
        END IF
        IF LEN(Frase$) <> Tamanho THEN
        i = 0
        FOR i = 1 TO LEN(Frase$)
        PRINT Caractere2$;
        NEXT i
        PRINT Caractere$
        ELSE
        i = 0
        FOR i = 1 TO Tamanho
        PRINT Caractere2$;
        NEXT i
        END IF

        RETURN


FimDoPassword:

       LOCATE Linha, Coluna
       i = 0
       FOR i = 1 TO LEN(Frase$)
       PRINT Caractere2$;
       NEXT i
       i = 0
       FOR i = 1 TO Tamanho - LEN(Frase$)
       PRINT " ";
       NEXT i
       Password$ = Frase$
       COLOR CorDaLetra, CorDeFundo

END FUNCTION

SUB Pause

        DO: LOOP UNTIL INKEY$ <> ""

END SUB

SUB PrintScr12 (Frase AS STRING, Coluna, Linha, CorDeFundo, CorDaLetra AS INTEGER)

        SCREEN 12
        LOCATE Linha, Coluna
        PRINT Frase
        FOR Pixel = 1 TO LEN(Frase) * 7
        IF POINT(Pixel, Linha) <> CorDaLetra THEN PSET (Pixel, Linha), CorDeFundo
        NEXT Pixel

END SUB

