'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...        es.geocities.com/jm00092
'
'______________________________________________________________________
'                                            VISOR DE ARCHIVOS DE TEXTO                                              
'                                                      VERSION AMPLIADA
'                                    CON MENU DE ARCHIVOS Y DIRECTORIOS
'
'
'  <!> P R O G R A M A    S I N    T E R M I N A R
'
'
DECLARE FUNCTION Archivo$ ()
DECLARE SUB mensaje (t$)
DECLARE SUB desplazamiento (v!, n!)
DECLARE SUB borde (Row1!, COL1!, row2!, col2!, PAPEL!, MARCO!)
DIM SHARED mat$(0 TO 1000)
ON ERROR GOTO errores

COLOR 15, 1: CLS
PALETTE 6, 62
PALETTE 1, 8
PALETTE 4, 36

nombre$ = Archivo$

OPEN nombre$ FOR INPUT AS #1

borde 1, 1, 25, 80, 6, 1
COLOR 1, 6: LOCATE 1, 6: PRINT SPACE$(35)
LOCATE 1, 7: PRINT "Presentaci¢n de archivos de texto"
COLOR 1, 6: LOCATE 25, 30: PRINT SPACE$(45);
LOCATE 25, 31: COLOR 1: PRINT "Escribir el nombre ";
COLOR 1: PRINT "          Hecho en Ronda";
COLOR 1, 6: LOCATE 25, 30: PRINT SPACE$(45);
LOCATE 25, 31: COLOR 4: PRINT " Cargando Archivo...  ";
COLOR 1: PRINT "       Hecho en Ronda ";


DO
   n = n + 1
   LINE INPUT #1, mat$(n)
LOOP WHILE NOT EOF(1)

FOR nnnn = 1 TO 22
   n = n + 1
   mat$(n) = SPACE$(78)
NEXT
COLOR 15, 1
vv = 0
DO
   LOCATE 2, 1
   FOR nn = 1 + vv TO 23 + vv
      txt$ = MID$(mat$(nn), 1, 78)
      COLOR 6, 1: PRINT "³";
      COLOR 15: PRINT txt$; SPACE$(78 - LEN(txt$));
      COLOR 9: PRINT "°";
   NEXT
   desplazamiento vv, n


   COLOR 1, 6: LOCATE 25, 30: PRINT SPACE$(45);
   LOCATE 25, 31: COLOR 4: PRINT "";
   COLOR 1: PRINT " Mover  ";
   COLOR 4: PRINT "ESC ";
   COLOR 1: PRINT "Salir          Hecho en Ronda ";

   DO
      kbd$ = INKEY$
   LOOP WHILE kbd$ = ""
   IF n > 23 THEN
      SELECT CASE kbd$
         CASE CHR$(0) + "H": vv = vv - 1
         CASE CHR$(0) + "P": vv = vv + 1
         CASE CHR$(27): END
      END SELECT
      IF vv < 0 THEN vv = 0
      IF vv > n - 23 THEN vv = n - 23
   END IF
LOOP UNTIL kbd$ = CHR$(27)


END


errores:
SELECT CASE ERR
CASE 5: mensaje "Llamado a funci¢n no v lido."
CASE 7: CLEAR : mensaje "Memoria agotada."
CASE 14: CLEAR : mensaje "Archivo demasiado grande."
CASE 52: mensaje "El nombre del archivo es incorrecto."
CASE 53: mensaje "No se ha encontrado el archivo."
CASE 55: mensaje "El archivo ya est  abierto."
CASE 64: mensaje "El nombre del archivo es incorrecto."
CASE 70: mensaje "Permiso de acceso denegado."
CASE 71: mensaje "No se encuentra el diskete en la unidad."
CASE 72: mensaje "Error en los discos."
CASE 75: mensaje "Error de acceso al archivo."
CASE 76: mensaje "No se encuentran los directorios de la ruta de acceso."

CASE ELSE
mensaje "Se ha producido el error n§" + STR$(ERR) + " de QBasic."
END SELECT

'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...    www.jm-web.tk     ::    es.geocities.com/jm00092
'
'______________________________________________________________________
'                                                
FUNCTION Archivo$

ruta$ = "C:\"
DO
   COLOR 14, 1: CLS

   LOCATE 1, 1: PRINT STRING$(80, 196);
   LOCATE 25, 1: PRINT STRING$(80, 196);

   COLOR 1, 6: LOCATE 1, 6: PRINT " Presentaci¢n de archivos de texto "
   COLOR 15, 4: LOCATE 25, 7: PRINT SPACE$(50);
   LOCATE 25, 8:  PRINT ruta$;
   LOCATE 25, 57: COLOR 1, 6: PRINT " Hecho en Ronda ";

   COLOR 15, 1
   VIEW PRINT 2 TO 24
   FILES ruta$
   VIEW PRINT

   lin = 2
   col = 1
   alin = 1
   acol = 1
   nomb$ = ""
   anomb$ = ""
   DO
      DO
         kbd$ = INKEY$
      LOOP WHILE kbd$ = ""
      alin = lin
      acol = col
      SELECT CASE kbd$
         CASE CHR$(0) + "H": lin = lin - 1
         CASE CHR$(0) + "P": lin = lin + 1
         CASE CHR$(0) + "K": col = col - 18
         CASE CHR$(0) + "M": col = col + 18
         CASE CHR$(13)
            IF nomb$ = "        ..  <DIR> " THEN
               FOR n = LEN(ruta$) - 1 TO 1 STEP -1
                  x$ = MID$(ruta$, n, 1)
                  IF x$ = "\" THEN
                     ruta$ = MID$(ruta$, 1, n)
                     EXIT FOR
                  END IF
               NEXT
               EXIT DO
            END IF

            IF MID$(nomb$, 13, 1) = "<" AND MID$(nomb$, 1, 1) <> " " THEN
               ruta$ = ruta$ + RTRIM$(MID$(nomb$, 1, 12)) + "\"
               EXIT DO
            ELSE
               Archivo$ = ruta$ + nomb$
               EXIT FUNCTION
            END IF

         CASE CHR$(27)
            IF LEN(ruta$) > 3 THEN
               FOR n = LEN(ruta$) - 1 TO 1 STEP -1
                  x$ = MID$(ruta$, n, 1)
                  IF x$ = "\" THEN
                     ruta$ = MID$(ruta$, 1, n)
                     EXIT FOR
                  END IF
               NEXT
               EXIT DO
            ELSE
               END
            END IF
      END SELECT

      IF lin > 25 XOR lin < 1 THEN lin = alin
      IF col > 58 XOR col < 1 THEN col = acol

      anomb$ = nomb$

      nomb$ = ""
      FOR h = col TO col + 17
         nomb$ = nomb$ + CHR$(SCREEN(lin, h))
      NEXT

      IF MID$(nomb$, 9, 1) = "." OR MID$(nomb$, 13, 1) = "<" THEN
         LOCATE alin, acol: COLOR 15, 1: PRINT anomb$;
         IF MID$(nomb$, 13, 1) = "<" THEN COLOR 15, 4 ELSE COLOR 0, 6
         IF nomb$ = "        .   <DIR> " THEN COLOR 0, 3
         IF nomb$ = "        ..  <DIR> " THEN COLOR 31, 4
         LOCATE lin, col: PRINT nomb$;
      ELSE
         lin = alin
         col = acol
         nomb$ = anomb$
      END IF
   LOOP
LOOP
END FUNCTION

SUB borde (Row1, COL1, row2, col2, PAPEL, MARCO) STATIC
COLOR PAPEL, MARCO
ANCHO = col2 - COL1 + 1
LOCATE Row1, COL1
PRINT "Ú"; STRING$(ANCHO - 2, "Ä"); "¿";
FOR A = Row1 + 1 TO row2 - 1
LOCATE A, COL1
PRINT "³";
LOCATE A, COL1 + (ANCHO - 1): PRINT "³";
NEXT A
LOCATE row2, COL1
PRINT "À"; STRING$(ANCHO - 2, "Ä"); "Ù";
END SUB

'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...    www.jm-web.tk     ::    es.geocities.com/jm00092
'
'______________________________________________________________________
'                                                
SUB desplazamiento (v, n)
COLOR 1, 6
LOCATE 2, 80: PRINT ""
LOCATE 24, 80: PRINT "";
'li = ((25 / n) * v) + 3
li = INT((v / n) * 25) + 3
IF li > 23 THEN li = 23
LOCATE li, 80: COLOR 15, 4: PRINT " "; '"";
LOCATE 25, 12: PRINT SPACE$(18);
LOCATE 25, 12: PRINT " L¡nea"; v + 1; "de"; n - 22;
END SUB

'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...    www.jm-web.tk     ::    es.geocities.com/jm00092
'
'______________________________________________________________________
'                                                
SUB mensaje (t$)
COLOR 14, 1: CLS
borde 11, 6, 15, 75, 6, 1
LOCATE 13, 41 - (LEN(t$) / 2): PRINT t$
COLOR 1, 1
END
END SUB

