Página 1 de 1

PC-TOOLS quem lembra?

Enviado: 16 Fev 2016 23:11
por asimoes
PC_Tools_1.10.png
PC_Tools_1.10.png (6.39 KiB) Exibido 3966 vezes

PC-TOOLS quem lembra?

Enviado: 17 Fev 2016 00:19
por fladimir
Cara eu lembro...

Lembro tb do

Norton Disk Doctor (usava de mais... ganhava até uns trocos com ele)
E outros...

Disquetes de 3 1/2" (lançamento) era o top do top...

PC-TOOLS quem lembra?

Enviado: 17 Fev 2016 08:48
por asimoes
Fladimir,

O NDD era conhecido também como Norton Destrói Disco, kkk

PC-TOOLS quem lembra?

Enviado: 18 Fev 2016 00:50
por fladimir
Sério... não sabia... pra mim era muito bom...

PC-TOOLS quem lembra?

Enviado: 20 Fev 2016 23:10
por Claudio Soto
Me acuerdo, que tiempos aquellos, tambien me acuerdo del XTree y del Norton Change Directory (NCD) por el cual podiamos navegar por el arbol de directorios del DOS. Uno de mis primeros programas en C alla por el 91/92 fue crear el CCD (Claudio Change Directory) una imitacion burda del NCD, voy a buscar el codigo en mis archivos, si lo encuentro lo posteo solo por el recuerdo.

PC-TOOLS quem lembra?

Enviado: 20 Fev 2016 23:18
por Claudio Soto
Se acuerdan tambien de los discos de 5"1/4, los buenos podias doblarlos a la mitad y seguian funcionando, existian varias marcas si mal no recuerdo como Verbatim, TDK... inclusive llegue a ver los discos de 8" y las cintas de casette en los PC.

PC-TOOLS quem lembra?

Enviado: 21 Fev 2016 12:09
por Toledo
Claudio Soto escreveu:Se acuerdan tambien de los discos de 5"1/4
Tenho várias caixas deste disquetes... e já trabalhei também com disquetes de 8", pena que não guardei nenhum.
Image.jpg
Até hoje as vezes uso o ZTree...
Image2.jpg
Abraços.

PC-TOOLS quem lembra?

Enviado: 21 Fev 2016 14:06
por asimoes
Eu tenho um disquete de 8"
Tem o CP/M e um sistema em basic 80 de conta-corrente.

PC-TOOLS quem lembra?

Enviado: 21 Fev 2016 14:58
por alxsts
Olá!

Ainda vivi o tempo das coisas abaixo, a partir de 1979:

Cartões perfurados de 80 e 96 colunas. Um cadastro de clientes, por exemplo, precisava ter 3 cartões para caber todos os dados e o programa tinha que controlar a existência e ordem dos 3 cartões. Naqueles tempos, um byte valia muito. Difícil imaginar hoje um cadastro de cliente com apenas 240 bytes...
Cartão perfurado de 80 colunas
Cartão perfurado de 80 colunas
Cartão perfurado de 96 colunas
Cartão perfurado de 96 colunas
Às vezes o boot a partir dos discos falhava e era preciso fazê-lo através de código gravado (perfurado) em uma fita de papel.
Burroughs B700 bootstrap loader tape
Burroughs B700 bootstrap loader tape
Atualmente, já temos um "chaveirinho" onde cabem 1 tera bytes...
Kingston 1 TB USB 3.0 Flash Drive
Kingston 1 TB USB 3.0 Flash Drive
Viva a evolução! Que Deus nos permita participar disto por mais tempo.

PC-TOOLS quem lembra?

Enviado: 21 Fev 2016 15:38
por JoséQuintas
Tem muita coisa que não roda mais em 64 bits, ou no Windows, mas não apaguei.
Não perguntem porque não apaguei, porque não sei.

Código: Selecionar todos


25/06/1991  20:08             6.284 BAT2EXEC.COM - transforma BAT em EXE
02/10/2001  09:24             6.915 DR.COM - visualização rápida
07/05/1990  23:00             1.816 LOG.COM - registra log 
30/06/1992  23:00             1.309 RECORDER.COM - registra log
07/05/1990  23:00               591 SWEEP.COM - recursividade nos diretórios
14/05/1985  17:58            20.316 DFLOW.EXE - fluxograma de PRGS
28/02/1994  07:00           114.775 FILEFIX.EXE - corrige dbf, lótus, etc
28/01/2000  09:25           234.822 GHOST.EXE - clonar hd (versão antes norton)
18/04/1995  06:55            93.399 LL3.EXE - laplink 3
12/02/1993  20:03           268.701 LL5.EXE - laplink 5
25/01/1988  13:27           102.403 PCTOOLS.EXE
01/12/1988  14:00            73.472 PE2.EXE - editor de texto ibm
23/11/1992  16:38            66.213 PRINTQ.EXE - spooler de impressão
29/08/1995  14:58            44.768 qedit.exe - editor de texto
02/04/1987  00:00           129.153 TB.EXE - Turbo Basic da Borland

PC-TOOLS quem lembra?

Enviado: 21 Fev 2016 15:56
por JoséQuintas
Eliminei algumas coisas do texto antes de postar
Acabei apagando:

1.386 prn2file.com -> desvia impressão pra disco

Detalhe: 1.386 significa 1.3KB, e não 1.3MB.
É maior o bloco de alocação do Windows do que o programa... rs

PC-TOOLS quem lembra?

Enviado: 21 Fev 2016 15:59
por asimoes
Quintas,

Você pode matar saudade, usando o dosbox, heheh.

PC-TOOLS quem lembra?

Enviado: 21 Mar 2016 16:59
por Claudio Soto
Claudio Soto escreveu:Me acuerdo, que tiempos aquellos, tambien me acuerdo del XTree y del Norton Change Directory (NCD) por el cual podiamos navegar por el arbol de directorios del DOS. Uno de mis primeros programas en C alla por el 91/92 fue crear el CCD (Claudio Change Directory) una imitacion burda del NCD, voy a buscar el codigo en mis archivos, si lo encuentro lo posteo solo por el recuerdo.
Buscando encontré el código del Claudio Change Directory:

Código: Selecionar todos


 // PROGRAMA: Claudio Change Directory
 // VERSION:  1.0
 // AUTOR:    Claudio Soto
 // FECHA:    Abril 1992
 // LENGUAJE: C
 // COMPILADOR: Borland Turbo C/C++

 
 #include <conio.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <dir.h>
 #include <dos.h>
 #include <ctype.h>
 #include <string.h>
 #include <time.h>


// #define  DEBUG
 #define  DIR_ESCONDIDO  0x12
 #define  SUBDIRECTORIO  FA_DIREC|DIR_ESCONDIDO
 #define  TOPE_DIR       300
 #define  FINAL          i-1
 #define  FINAL2         i2-1
 #define  ON             1
 #define  OFF            0

 #define  COLOR_NOMBRE         14
 #define  COLOR_RAMAS           9
 #define  COLOR_DIRECTORIOS    11
 #define  COLOR_CURSOR_BARRA    7
 #define  COLOR_CURSOR_FONDO    0
 #define  COLOR_FLECHA         15
 #define  COLOR_FONDO_PANTALLA  0
 #define  COLOR_PATH           14

 void reloj ();
 void recuadro (int x1, int y1, int x2, int y2, char caracter [9], int y3, char cracter2 [5]);
 int  mostrar_pedazo (int x, int y, char texto [], int inicio, int fin);
 void trazar_linea (int x, int y1, int y2, char caracter []);
 void pantalla ();
 void burbuja ();
 void cursor (int modo);
 void activar_dir (int minima_x, int minima_y, int maxima_x, int maxima_y, int y3, int posx1_mouse, int posy1_mouse, int posx2_mouse, int posy2_mouse);
 int  boton_mouse (int num);
 int  existe_mouse ();
 void gotoxy_mouse (int x, int y);
 void mostrar_cursor_mouse ();
 void sacar_cursor_mouse ();
 void posicion_mouse (int *x, int *y);


 struct ffblk reg;
 char   dir [TOPE_DIR] [80], camino [80], directorio [80];
 char   rama [TOPE_DIR], nombre [TOPE_DIR] [80], auxiliar [80];
 int    posx [TOPE_DIR], posy [TOPE_DIR], padre [TOPE_DIR];
 int    i=1, k=0, cont=1, status =0, p=1, j;
 int    mayor, fin, a, inicio, control1,control2;
 int    x=1, y=1, control3, i2, posx2 [TOPE_DIR], posy2 [TOPE_DIR];
 int    incremento_en_x = 2;
 char   drive, dir_corriente [80];


void main ()
{  int zz;
   char CARAC_RECUADRO  [] = { 218, 196, 191, 179, 217, 196, 192, 179, 176, 32, 0 };
   char CARAC_RECUADRO2 [] = { 198, 205, 181, 0};
   char CARAC_LINEA     [] = { 194, 179, 193, 0};

   // 218 196 191 179 217 196 192 179 176 198 205 181 194 193
   // Ú   Ä   ¿   ³   Ù   Ä   À   ³   °   Æ   Í   µ   Â   Á

   textmode (C80);
   clrscr ();
   randomize ();
   cursor (OFF);
   mostrar_cursor_mouse ();

   textcolor (14);
   textbackground (9);
   recuadro (3,11,77,14, CARAC_RECUADRO, 0,"   ");

   textbackground (0);
   textcolor (8);
   for (zz=4; zz <= 78; zz++)
   {  gotoxy (zz,15);
      cprintf ("%c",177);
   }
   for (zz=12; zz <= 15; zz++)
   {  gotoxy (78,zz);
      cprintf ("%c",177);
   }
   textbackground (9);
   textcolor (11);


   drive = getdisk ();
   getcurdir (drive + 1, auxiliar);

   directorio [0] = drive + 65;
   strcat (directorio, ":");

   strcpy (camino, directorio);
   strcat (camino,"\\*.*");

   strcpy (nombre [0], directorio);
   strcat (nombre [0], "\\");

   strcpy (dir_corriente, nombre [0]);
   strcat (dir_corriente, auxiliar);

   strcpy (dir [0], nombre[0]);


   /************************************************************************/
   /*                     Lectura de subdirectorios                        */
   /************************************************************************/

   do
   {
      status = findfirst (camino, &reg, SUBDIRECTORIO);
      while (status == 0)
      {  if ((reg.ff_attrib == DIR_ESCONDIDO) || (reg.ff_attrib == FA_DIREC) && (reg.ff_name[0] !='.') && (reg.ff_name[1] !='.'))
         {  if (reg.ff_attrib == DIR_ESCONDIDO)
            {  for (k=0 ;k <= strlen(reg.ff_name); k++)
                  nombre [i] [k] = tolower (reg.ff_name [k]);
            }
            else
               strcpy (nombre [i], reg.ff_name);

            strcpy ( dir[i], directorio);
            strcat ( dir[i], "\\");
            strcat ( dir[i], reg.ff_name);
            padre  [i] = p -1;
            i++;

            textbackground (9);
            gotoxy (23,12);
            cprintf ("Explorando %4d sub-directorio(s).",i-1);

            gotoxy (4,13);cprintf ("                                                                         ");

            gotoxy ((80 - strlen (dir [i-1]))/2,13);
            cprintf ("%s",dir [i-1]);
            delay (50);

         }
         status = findnext (&reg);
      }
      strcpy (camino, dir [cont]);
      strcat (camino, "\\*.*");
      strcpy (directorio, dir [cont]);
      cont ++;
      p++;
   } while (cont <= i);

   textcolor (7);
   textbackground (0);


   /************************************************************************/
   /*                       Formacion del arbol                            */
   /************************************************************************/

   cont     = 0;
   posx [0] = x;
   posy [0] = y;
   control1 = 0;
   if (FINAL > 0)
   {  control2 = padre [1];
      a        = padre [1];
      mayor    = padre [1];

      for (k=1; k <= i-1; k++)
      {  if (padre [k] > control2)
         {  control2 = padre [k];
            mayor ++;
         }
      }
      control2 = padre [0];
      mayor ++;

      do
      {  for (j=1; j<= FINAL; j++)
         {  if ((control1 == 0) && (control2 == padre [j]))
            {  inicio   = j;
               control1 = 1;
            }
            if (control2 == padre [j])
               fin = j;
         }

         control3 = 0;
         for (j=inicio; j <= fin; j++)
         {  a = control2;
            y = posy [a] + 1;
            x = posx [a] + incremento_en_x;

            if (control3 == 0)
            {  rama [j] = 192;
               control3 = 1;
            }
            else
               rama [j] = 195;


            for (k=1; k <= FINAL; k++)
            {  if (posy [k] >= y)
                  posy [k] = posy [k] +1;
            }
            x = posx [a] + incremento_en_x;
            y = posy [a] + 1;

            posx [j] = x;
            posy [j] = y;
         }
         cont ++;
         control1 =0;
         control2 = padre [fin + 1];

      } while (cont < mayor);
   }


   /************************************************************************/
   /*                   Union de las ramas del arbol                       */
   /************************************************************************/

   i2       = 0;
   cont     = 0;
   if (FINAL > 0)
   {  control1 = padre [1];
      control2 = posy  [1];
      do
      {  for (k=1; k <= FINAL; k++)
         {  if (control1 == padre [k])
            {  a = control2 - posy [k];
               if (a > 1)
               {  for (j=1; j <= a-1; j++)
                  {  posx2 [i2] = posx [k];
                     posy2 [i2] = posy [k] + j;
                     i2 ++;
                  }
               }
               control2 = posy [k];
            }
         }

         for (k=1; k <= FINAL; k++)
         {  if (padre [k] > control1)
            {  control1 = padre [k];
               control2 = posy  [k];
               break;
            }
         }

         cont ++;
      } while (cont < mayor);
   }


   clrscr ();
   sacar_cursor_mouse ();
   cursor (OFF);
   pantalla ();

   textcolor (14);
   textbackground (9);

   recuadro (3,2,77,4,CARAC_RECUADRO, 0,"   ");

   textbackground (0);
   textcolor (8);
   for (zz=4; zz <= 78; zz++)
   {  gotoxy (zz,5);
      cprintf ("%c",176);
   }

   gotoxy (78,3);
   cprintf ("%c",176);
   gotoxy (78,4);
   cprintf ("%c",176);

   textbackground (9);
   textcolor (COLOR_NOMBRE);
   gotoxy (5,3); cprintf ("Claudio Change Directory,  Ver 1.0");
   gotoxy (53,3);cprintf ("(c) Claudio Soto, 1992.");

   textbackground (0);
   textcolor (8);
   recuadro (3,7,77,22,CARAC_RECUADRO, 9, CARAC_RECUADRO2);

   trazar_linea (73,7,22, CARAC_LINEA);
   gotoxy (73,9); cprintf ("%c   %c",181, 179);
   textcolor (15);
   gotoxy (74,8); cprintf ("[%c]",30);
   gotoxy (74,21);cprintf ("[%c]",31);

   activar_dir (4,10,80,21,8,75,8,75,21);
   cursor (ON);
   textmode (C80);
}




void activar_dir (int minima_x, int minima_y, int maxima_x, int maxima_y, int y3, int posx1_mouse, int posy1_mouse, int posx2_mouse, int posy2_mouse)
{  int x, y, k, num =0, num2, num_inicio, num_fin;
   int control, antigua_y, mouse = 0;
   int x_mouse, y_mouse;
   char tecla, arriba [160], abajo [160], path [160], limpiar [4000];


   if (existe_mouse () != 0)
   {  gotoxy_mouse (500,100);
      mouse = 1;
   }

   burbuja ();
   for (k=0; k <= FINAL; k++)
   {  if (strcmp (dir_corriente, dir [k]) == 0)
      {  num2 = k;
         break;
      }
   }
   gettext (minima_x, minima_y, maxima_x, maxima_y, limpiar);
   gettext (1, minima_y, 80, minima_y, arriba);
   gettext (1, maxima_y, 80, maxima_y, abajo);
   gettext (1, y3, 80, y3, path);

   textbackground (COLOR_FONDO_PANTALLA);
   num = 0;
   num_inicio = 0;
   for (k= minima_y; ((k <= maxima_y) && (num <= FINAL)); k++)
   {  x = posx [num] + minima_x;
      y = posy [num] + minima_y -1;
      gotoxy (x,y);
      textcolor (COLOR_RAMAS);
      cprintf  ("%c", rama [num]);
      textcolor (COLOR_DIRECTORIOS);
      cprintf  ("%s ", nombre [num]);
      if (num == num2)
      {  gotoxy (x + strlen (nombre [num]) + 2, y);
         textcolor (COLOR_FLECHA | 128);
         cprintf ("%c",27);
         textcolor      (COLOR_DIRECTORIOS);
      }
      num ++;
   }
   num_fin = num - 1;


   for (k=0; k <= FINAL2; k++)
   {  x = posx2 [k] + minima_x;
      y = posy2 [k] + minima_y -1;
      gotoxy (x,y);
      textcolor (COLOR_RAMAS);
      if ((y >= minima_y) && (y <= maxima_y))
         cprintf ("%c",179);
   }
   num = 0;

   gotoxy (posx[0] + minima_x, y3);
   textcolor (COLOR_PATH);
   cprintf ("Path: %s", dir[num]);

#ifdef DEBUG
gotoxy (10,5);
cprintf ("inicio  %s         ",nombre [num_inicio]);
gotoxy (50,5);
cprintf ("fin  %s            ",nombre [num_fin]);
#endif
 
   y = minima_y;
   do 
   {  x = posx [num] + minima_x;
      gotoxy (x,y);
      textcolor      (COLOR_CURSOR_FONDO);
      textbackground (COLOR_CURSOR_BARRA);
      cprintf ("%c",  rama [num]);
      cprintf ("%s ", nombre [num]);
   // textcolor      (COLOR_CURSOR_BARRA);
      textbackground (COLOR_FONDO_PANTALLA);

      if (num == num2)
      {  gotoxy (x + strlen (nombre [num]) + 2, y);
         textcolor      (COLOR_FLECHA | 128);
         cprintf ("%c",27);
         textcolor      (COLOR_DIRECTORIOS);
      }

      if (mouse == 1) 
         mostrar_cursor_mouse ();
      
      do 
      {  reloj ();
         tecla = 0;
         if (kbhit ())
         {  tecla = getch ();
            if (tecla == 0)
               tecla = getch ();
         }

         if (mouse == 1)
         {  posicion_mouse (&x_mouse, &y_mouse);
            x_mouse = x_mouse / 8 + 1;   // convierte pixels en caracteres
            y_mouse = y_mouse / 8 + 1;   // convierte pixels en caracteres
            
            if ((posx1_mouse == x_mouse) && (posy1_mouse == y_mouse) && (boton_mouse (0) == 1))
            {  tecla = 'H';
               delay (130);
            }
            if ((posx2_mouse == x_mouse) && (posy2_mouse == y_mouse) && (boton_mouse (0) == 1))
            {  tecla = 'P';
               delay (130);
            }
         }
      } while (tecla == 0);

      if (tecla == 'I') tecla = 'H';
      if (tecla == 'Q') tecla = 'P';

      if (mouse == 1)
         sacar_cursor_mouse ();

      gotoxy (x,y);
      textcolor (COLOR_RAMAS);
      cprintf ("%c", rama [num]);
      textcolor (COLOR_DIRECTORIOS);
      cprintf ("%s ", nombre [num]);

      if ((tecla == 'H') && (num > 0))
      {  num --;
         y --;

         if (y < minima_y)
         {  y ++;
            num_inicio --;
            num_fin --;
            gotoxy (x,maxima_y);
            delline ();

            gotoxy (x,minima_y);
            insline ();
            puttext (1, minima_y, 80, minima_y, arriba);

            gotoxy (posx[num]+minima_x,y);
            textcolor (COLOR_RAMAS);
            cprintf ("%c", rama [num]);
            textcolor (COLOR_DIRECTORIOS);
            cprintf ("%s ", nombre [num]);

#ifdef DEBUG
gotoxy (10,5);
cprintf ("inicio  %s         ",nombre [num_inicio]);
gotoxy (50,5);
cprintf ("fin  %s            ",nombre [num_fin]);
#endif

            for (k=0; k <= FINAL2; k++)
            {  x = posx2 [k] + minima_x;
               gotoxy (x,y);
               textcolor (COLOR_RAMAS);
               if (num == (posy2 [k] - 1) )
                  cprintf ("%c",179);
            }
         }
      }

      if ((tecla == 'P') && (num < FINAL))
      {  num ++;
         y ++;
         if (y > maxima_y)
         {  y --;
            num_inicio ++;
            num_fin ++;
            gotoxy (x,minima_y);
            delline ();

            gotoxy (x,maxima_y);
            insline ();

            puttext (1, maxima_y, 80, maxima_y, abajo);
            gotoxy (posx2_mouse-1, maxima_y-1);
            cprintf ("   ");

            gotoxy (posx[num]+minima_x,y);
            textcolor (COLOR_RAMAS);
            cprintf ("%c", rama [num]);
            textcolor (COLOR_DIRECTORIOS);
            cprintf ("%s ", nombre [num]);
            
#ifdef DEBUG
gotoxy (10,5);
cprintf ("inicio  %s         ",nombre [num_inicio]);
gotoxy (50,5);
cprintf ("fin  %s            ",nombre [num_fin]);
#endif

            for (k=0; k <= FINAL2; k++)
            {  x = posx2 [k] + minima_x;
               gotoxy (x,y);
               textcolor (COLOR_RAMAS);
               if (num == (posy2 [k] - 1) )
                  cprintf ("%c",179);
            }
         }
      }

      if ((tecla == 'Q') && (num < FINAL) && (num_fin < FINAL))
      {  num = num_fin + 1;
         antigua_y = y;
         control = 0;
         y = minima_y -1;
         num_inicio = num;

         puttext (minima_x, minima_y, maxima_x, maxima_y, limpiar);

         for (k= minima_y; ((k <= maxima_y) && (num <= FINAL)); k++)
         {  x = posx [num] + minima_x;
            y ++;
            if (y == antigua_y) 
               control = num;
            gotoxy (x,y);
            textcolor (COLOR_RAMAS);
            cprintf  ("%c", rama [num]);
            textcolor (COLOR_DIRECTORIOS);
            cprintf  ("%s ", nombre [num]);
            if (num == num2)
            {  gotoxy (x + strlen (nombre [num]) + 2, y);
               textcolor      (COLOR_FLECHA | 128);
               cprintf ("%c",27);
               textcolor      (COLOR_DIRECTORIOS);
            }
            num ++;
         }
         num_fin = num - 1;

#ifdef DEBUG
gotoxy (10,5);
cprintf ("inicio  %s         ",nombre [num_inicio]);
gotoxy (50,5);
cprintf ("fin  %s            ",nombre [num_fin]);
#endif

         for (k=0; k <= FINAL2; k++)
         {  x = posx2 [k] + minima_x;
            y = posy2 [k] + minima_y -1 - num_inicio;
            gotoxy (x,y);
            textcolor (COLOR_RAMAS);
            if ((y >= minima_y) && (y <= maxima_y))
               cprintf ("%c",179);
         }

         num --;
         if (control != 0)
         {  y = antigua_y;
            num = control;
         }
      }


      if ((tecla == 'I') && (num > 0) && (num_inicio > 0))
      {  num = num - (maxima_y - minima_y - 1);
         if (num < 0) num = 0;
         num_inicio = num;

         antigua_y = y;
         control = 0;
         y = minima_y -1;

         puttext (minima_x, minima_y, maxima_x, maxima_y, limpiar);

         for (k= minima_y; ((k <= maxima_y) && (num <= FINAL)); k++)
         {  x = posx [num] + minima_x;
            y ++;
            if (y == antigua_y) 
               control = num;
            gotoxy (x,y);
            textcolor (COLOR_RAMAS);
            cprintf  ("%c", rama [num]);
            textcolor (COLOR_DIRECTORIOS);
            cprintf  ("%s ", nombre [num]);
            if (num == num2)
            {  gotoxy (x + strlen (nombre [num]) + 2, y);
               textcolor      (COLOR_FLECHA | 128);
               cprintf ("%c",27);
               textcolor      (COLOR_DIRECTORIOS);
            }
            num ++;
         }
         num_fin = num - 1;

#ifdef DEBUG
gotoxy (10,5);
cprintf ("inicio  %s         ",nombre [num_inicio]);
gotoxy (50,5);
cprintf ("fin  %s            ",nombre [num_fin]);
#endif

         for (k=0; k <= FINAL2; k++)
         {  x = posx2 [k] + minima_x;
            y = posy2 [k] + minima_y -1 - num_inicio;
            gotoxy (x,y);
            textcolor (COLOR_RAMAS);
            if ((y >= minima_y) && (y <= maxima_y)) 
               cprintf ("%c",179);
         }

         num --;
         if (control != 0)
         {  y = antigua_y;
            num = control;
         }
      }

      puttext (1, y3, 80, y3, path);
      gotoxy (posx[0] + minima_x, y3);
      textcolor (COLOR_PATH);
      cprintf ("Path: %s", dir[num]);

      textcolor (15);
      gotoxy (74,21);cprintf ("[%c]",31);
      textcolor (COLOR_PATH);

   } while ((tecla != 13) && (tecla != 27));

   if (tecla == 13) chdir (dir [num]);
// if (mouse == 1) sacar_cursor_mouse ();

}


void burbuja ()
{  int cont, j, tope, auxnum;
   char aux [80], auxchar;

   tope = FINAL;
   do
   {
      cont =0;
      for (j=0; j <= tope -1; j++)
      {
         if (posy [j] > posy [j+1] )
         {  auxnum     = posy [j];
            posy [j]   = posy [j+1];
            posy [j+1] = auxnum;

            auxnum     = posx [j];
            posx [j]   = posx [j+1];
            posx [j+1] = auxnum;

            auxnum      = padre [j];
            padre [j]   = padre [j+1];
            padre [j+1] = auxnum;

            auxchar     = rama [j];
            rama [j]    = rama [j+1];
            rama [j+1]  = auxchar;

            strcpy (aux, dir [j]);
            strcpy (dir [j], dir [j+1]);
            strcpy (dir [j+1], aux);

            strcpy (aux, nombre [j]);
            strcpy (nombre [j], nombre [j+1]);
            strcpy (nombre [j+1], aux);

            cont = j;
         }
      }
      tope = cont;
   } while (tope > 2);
}


void cursor (int modo)
{  union REGS reg;
   if (modo == 0)
   {  reg.x.cx = 0x2000;
      reg.x.ax = 0x100;
      int86 (0x10, &reg, &reg);
   }
   else
   {  reg.x.cx = 0;
      reg.x.ax = 0;
      int86 (0x10, &reg, &reg);
   }
}


void pantalla ()
{  register int i;
   char fondo [1921];

   for (i=0; i <= 1919; i++)
      fondo [i] = 177;
   fondo [1920] = '\0';
   cprintf ("%s",fondo);
}


void recuadro (int x1, int y1, int x2, int y2, char caracter [9], int y3, char caracter2 [5])
{  int i;

   for (i=y1 + 1; i <= y2 -1 ; i++)
   {
      for (k=x1 + 1; k <= x2 -1 ; k++)
      {  gotoxy (k,i);
         cprintf ("%c", caracter [9]);
      }
   }

   for (i=x1 + 1; i <= x2 -1 ; i++)
   {  gotoxy (i, y1);
      cprintf  ("%c", caracter [1]);

      gotoxy (i, y2);
      cprintf  ("%c", caracter [5]);

      gotoxy (i, y2+1);
      cprintf  ("%c", caracter [8]);

      if ((caracter2 [1] != ' ') && (caracter2 [1] != '\0'))
      {  gotoxy (i, y3);
         cprintf  ("%c", caracter2 [1]);
      }
   }

   gotoxy (x2, y2+1);
   cprintf ("%c%c", caracter[8], caracter[8]);

   gotoxy (x2+1, y2);
   cprintf ("%c", caracter[8]);

   for (i=y1 + 1; i <= y2 -1 ; i++)
   {  gotoxy (x1, i);
      cprintf  ("%c", caracter [3]);

      gotoxy (x2, i);
      cprintf  ("%c", caracter [7]);

      gotoxy (x2+1, i);
      cprintf  ("%c", caracter [8]);
   }

   gotoxy (x1, y1);
   cprintf  ("%c", caracter [0]);

   gotoxy (x2, y1);
   cprintf  ("%c", caracter [2]);

   gotoxy (x2, y2);
   cprintf  ("%c", caracter [4]);

   gotoxy (x1, y2);
   cprintf  ("%c", caracter [6]);

   if ((caracter2 [0] != ' ') && (caracter2 [0] != '\0'))
   {  gotoxy (x1,y3);
      cprintf ("%c", caracter2 [0]);
   }

   if ((caracter2 [2] != ' ') && (caracter2 [2] != '\0'))
   {  gotoxy (x2,y3);
      cprintf ("%c", caracter2 [2]);
   }
}


void trazar_linea (int x, int y1, int y2, char caracter [])
{  int i;
   gotoxy (x,y1);
   cprintf ("%c",caracter [0]);
   for (i=y1+1; i <= y2-1; i++)
   {  gotoxy (x,i);
      cprintf ("%c",caracter [1]);
   }
   gotoxy (x,y2);
   cprintf ("%c",caracter [2]);
 }


int mostrar_pedazo (int x, int y, char texto [],int inicio, int fin)
{  int i;
   gotoxy (x,y);
   for (i=inicio; (i <= fin) && (i <= strlen (texto)); i++)
      cprintf ("%c", texto [i]);
   return i;
 }


int boton_mouse (int num)
{  // 0 = boton sin presionar.
   // 1 = boton izquierdo presionado.
   // 2 = boton del medio o el derecho presionado.
   // 3 = boton izq y dech presionado o izq y del medio presionado
   //     o los tres botones presionados.
   union REGS reg;
   reg.x.ax = 5;
   reg.x.bx = num;
   int86 (0x33, &reg, &reg);
   return (reg.x.ax);
}


int existe_mouse ()
{  union REGS reg;
   reg.x.ax = 0;
   int86 (0x33, &reg, &reg);
   return (reg.x.ax);
}


void gotoxy_mouse (int x, int y)
{  union REGS reg;
   reg.x.ax = 4;
   reg.x.cx = x;   // en pixels
   reg.x.dx = y;   // en pixels
   int86 (0x33, &reg, &reg);
}


void mostrar_cursor_mouse ()
{  union REGS reg;
   reg.x.ax = 1;
   int86 (0x33, &reg, &reg);
}


void sacar_cursor_mouse ()
{  union REGS reg;
   reg.x.ax = 2;
   int86 (0x33, &reg, &reg);
}


void posicion_mouse (int *x, int *y)
{  union REGS reg;
   reg.x.ax = 3;
   int86 (0x33, &reg, &reg);
   *x = reg.x.cx;   // en pixels
   *y = reg.x.dx;   // en pixels
}


void reloj ()
{  long far *pnt_hora = MK_FP(0x40, 0x6C), reloj2;
   int h, m, s;
   char a [10];
   struct date d;

   reloj2  = *pnt_hora;
   h       = reloj2 / 65543;
   reloj2 -= h * 65543;
   m       = reloj2 / 1092;
   reloj2 -= m * 1092;
   s       = reloj2 / 18.2;

   itoa (s,a,10);
   gotoxy (46,25);

   textcolor (14); 
   cprintf ("HORA: ");
   printf ("%2d:%2d:%c%c", h, m, a [strlen (a)-2], a [strlen (a)-1]);

   getdate(&d);
   gotoxy (20,25);
   cprintf ("FECHA: ");
   printf  ("%2d:%2d:%2d", d.da_day, d.da_mon, d.da_year);
}

Captura de imagen en Windows 10 corriendo bajo el emulador DOS BOX: