home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / dos_ency / 18 / commdump.bas < prev    next >
Encoding:
BASIC Source File  |  1988-08-11  |  4.3 KB  |  127 lines

  1. ' **********************************************************************
  2. ' *                                                                    *
  3. ' *  COMMDUMP                                                          *
  4. ' *                                                                    *
  5. ' *  This routine dumps the contents of the COMMSCOP trace buffer to   *
  6. ' *  the screen in a formatted manner.  Received data is shown in      *
  7. ' *  reverse video.  Where possible, the ASCII character for the byte  *
  8. ' *  is shown; otherwise a dot is shown.  The value of the byte is     *
  9. ' *  displayed in hex below the character.  Points where tracing was   *
  10. ' *  stopped are shown by a solid bar.                                 *
  11. ' *                                                                    *
  12. ' **********************************************************************
  13.  
  14.         '
  15.         '  Establish system constants and variables
  16.         '
  17.         DEFINT A-Z
  18.  
  19.         DIM INREG(7), OUTREG(7)         'Define register arrays
  20.  
  21.         RAX = 0                         'Establish values for 8086
  22.         RBX = 1                         ' registers
  23.         RCX = 2                         '  .
  24.         RDX = 3                         '  .
  25.         RBP = 4                         '  .
  26.         RSI = 5                         '  .
  27.         RDI = 6                         '  .
  28.         RFL = 7                         '  .
  29.  
  30.         '
  31.         '  Interrogate COMMSCOP to obtain addresses and count of data in
  32.         '  trace buffer
  33.         '
  34.         INREG(RAX) = &H0300             'Request address data and count
  35.         CALL INT86(&H60, VARPTR(INREG(0)), VARPTR(OUTREG(0)))
  36.  
  37.         NUM = OUTREG(RCX)               'Number of bytes in buffer
  38.         BUFSEG = OUTREG(RDX)            'Buffer segment address
  39.         BUFOFF = OUTREG(RBX)            'Offset of buffer start
  40.  
  41.         IF NUM = 0 THEN END
  42.  
  43.         '
  44.         '  Set screen up and display control data
  45.         '
  46.         CLS
  47.         KEY OFF
  48.         LOCATE 25, 1
  49.         PRINT "NUM ="; NUM;"BUFSEG = "; HEX$(BUFSEG); " BUFOFF = ";
  50.         PRINT HEX$(BUFOFF);
  51.         LOCATE 4, 1
  52.         PRINT STRING$(80,"-")
  53.         DEF SEG = BUFSEG
  54.  
  55.         '
  56.         '  Set up display control variables
  57.         '
  58.         DLINE = 1
  59.         DCOL = 1
  60.         DSHOWN = 0
  61.  
  62.         '
  63.         '  Fetch and display each character in buffer
  64.         '
  65.         FOR I= BUFOFF TO BUFOFF+NUM-2 STEP 2
  66.             STAT = PEEK(I)
  67.             DAT = PEEK(I + 1)
  68.  
  69.             IF (STAT AND 1) = 0 THEN
  70.                 COLOR 7, 0
  71.             ELSE
  72.                 COLOR 0, 7
  73.             END IF
  74.  
  75.             RLINE = (DLINE-1) * 4 + 1
  76.             IF (STAT AND &H80) = 0 THEN
  77.                 LOCATE RLINE, DCOL
  78.                 C$ = CHR$(DAT)
  79.                 IF DAT < 32 THEN C$ = "."
  80.                 PRINT C$;
  81.                 H$ = RIGHT$("00" + HEX$(DAT), 2)
  82.                 LOCATE RLINE + 1, DCOL
  83.                 PRINT LEFT$(H$, 1);
  84.                 LOCATE RLINE + 2, DCOL
  85.                 PRINT RIGHT$(H$, 1);
  86.             ELSE
  87.                 LOCATE RLINE, DCOL
  88.                 PRINT CHR$(178);
  89.                 LOCATE RLINE + 1, DCOL
  90.                 PRINT CHR$(178);
  91.                 LOCATE RLINE + 2, DCOL
  92.                 PRINT CHR$(178);
  93.             END IF
  94.  
  95.             DCOL = DCOL + 1
  96.             IF DCOL > 80 THEN
  97.                 COLOR 7, 0
  98.                 DCOL = 1
  99.                 DLINE = DLINE + 1
  100.                 SHOWN = SHOWN + 1
  101.                 IF SHOWN = 6 THEN
  102.                     LOCATE 25, 50
  103.                     COLOR 0, 7
  104.                     PRINT "ENTER ANY KEY TO CONTINUE:  ";
  105.                     WHILE LEN(INKEY$) = 0
  106.                     WEND
  107.                     COLOR 7, 0
  108.                     LOCATE 25, 50
  109.                     PRINT SPACE$(29);
  110.                     SHOWN = 0
  111.                 END IF
  112.                 IF DLINE > 6 THEN
  113.                     LOCATE 24, 1
  114.                     PRINT : PRINT : PRINT : PRINT
  115.                     LOCATE 24, 1
  116.                     PRINT STRING$(80, "-");
  117.                     DLINE = 6
  118.                 ELSE
  119.                     LOCATE DLINE * 4, 1
  120.                     PRINT STRING$(80, "-");
  121.                 END IF
  122.             END IF
  123.  
  124.         NEXT I
  125.  
  126.         END
  127.