'DSTD16Q.BAS Display 16-channel timing data from file. ' All data displayed. 'Left and right arrows now move automatically beyond boundaries. 2/15/07 'All BEEPS removed, as they slow down later operating systems. 'Entry for label file added. ' 5 CLS 'Clear screen SCREEN 12 'Video mode hex 12 KEY OFF 'No function key display DEFINT A-Z 'Define integers DIM L(15) 'Up/down storage DIM CRS%(671) 'Line save area CH0$ = " " 'Channel name CH1$ = " " 'Channel name CH2$ = " " 'Channel name CH3$ = " " 'Channel name CH4$ = " " 'Channel name CH5$ = " " 'Channel name CH6$ = " " 'Channel name CH7$ = " " 'Channel name CH8$ = " " 'Channel name CH9$ = " " 'Channel name CHA$ = " " 'Channel name CHB$ = " " 'Channel name CHC$ = " " 'Channel name CHD$ = " " 'Channel name CHE$ = " " 'Channel name CHF$ = " " 'Channel name ' LOCATE 24, 3 'Set cursor PRINT "Do you want to read label file? (y/N) " 15 a$ = INKEY$: IF a$ = "" THEN 15 'Wait for keyboard input IF ((a$ = "y") OR (a$ = "Y")) THEN GOTO 20 ELSE GOTO 30 20 LOCATE 25, 3 'Set cursor INPUT "Enter Pathname of label file (NO extension) ", i$ OPEN i$ + ".LBL" FOR BINARY ACCESS READ AS #3 CH0$ = INPUT$(10, #3) 'Read label 0 CH1$ = INPUT$(10, #3) 'Read label 1 CH2$ = INPUT$(10, #3) 'Read label 2 CH3$ = INPUT$(10, #3) 'Read label 3 CH4$ = INPUT$(10, #3) 'Read label 4 CH5$ = INPUT$(10, #3) 'Read label 5 CH6$ = INPUT$(10, #3) 'Read label 6 CH7$ = INPUT$(10, #3) 'Read label 7 CH8$ = INPUT$(10, #3) 'Read label 8 CH9$ = INPUT$(10, #3) 'Read label 9 CHA$ = INPUT$(10, #3) 'Read label A CHB$ = INPUT$(10, #3) 'Read label B CHC$ = INPUT$(10, #3) 'Read label C CHD$ = INPUT$(10, #3) 'Read label D CHE$ = INPUT$(10, #3) 'Read label E CHF$ = INPUT$(10, #3) 'Read label F 30 SWH = 0 'Force home switch SWE = 0 'Force end switch LOCATE 27, 3 'Set cursor INPUT "Enter Pathname of sample file ", i$ ' I$ = "DEMO.NDL" LOCATE 28, 3 'Set cursor PRINT "Do you want to expand display? (y/N) " 35 a$ = INKEY$: IF a$ = "" THEN 35 'Wait for keyboard input IF ((a$ = "y") OR (a$ = "Y")) THEN GOTO 40 ELSE p% = 1: GOTO 50 40 LOCATE 28, 3 'Set cursor COLOR 12: PRINT "Enter expansion factor (1,2,4,8 or 16)"; COLOR 15: INPUT " ", p% IF p% = 1 THEN GOTO 50 'Check for legal entry IF p% = 2 THEN GOTO 50 'Check for legal entry IF p% = 4 THEN GOTO 50 'Check for legal entry IF p% = 8 THEN GOTO 50 'Check for legal entry IF p% = 16 THEN GOTO 50 'Check for legal entry 'BEEP 'Oops, illegal entry LOCATE 27, 10 'Set cursor COLOR 12 'Red color PRINT "ILLEGAL ENTRY" PRINT " " COLOR 15 'White color GOTO 45 b% = 0 'Starting sample 45 S% = 0 'Sample number 50 IF b% > 2047 - (512 \ p%) THEN b% = 2047 - (512 \ p%) CLS 'Clear screen OPEN i$ FOR BINARY ACCESS READ AS #1 c$ = INPUT$(8, #1) 'Load 8-byte header t% = ABS(CVI(MID$(c$, 3, 2))) 'Trigger point position a$ = INPUT$(b% * 2, #1) 'Skip data H% = 7 'Timing height 'DRAW SAMPLING CURSOR 100 LINE (16, 360)-(527, 360) 'Horizontal line FOR i% = 0 TO 511 \ p% j% = 16 + i% * p% + p% \ 2 LINE (j%, 360)-(j%, 356) 'Vertical marker NEXT i% 'PRINT PROBE NUMBERS PRINT COLOR 12 'Red color PRINT "0" PRINT "1" PRINT "2" PRINT "3" PRINT PRINT "4" PRINT "5" PRINT "6" PRINT "7" PRINT PRINT PRINT "8" PRINT "9" PRINT "A" PRINT "B" PRINT PRINT "C" PRINT "D" PRINT "E" PRINT "F" COLOR 15 'White color FOR i% = 0 TO 15 'Initialize start L(i%) = 0 NEXT i% FOR j% = 0 TO (512 \ p%) - 1 X% = 16 + j% * p% a$ = INPUT$(1, #1) 'Read byte a = ASC(a$) 'Value y% = 20 'DRAW 16 TIMING DIAGRAMS IF L(0) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 1) < 1 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(0) = 0 IF (a AND 1) >= 1 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(0) = 1 y% = 36 IF L(1) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 2) < 2 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(1) = 0 IF (a AND 2) >= 2 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(1) = 1 y% = 52 IF L(2) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 4) < 4 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(2) = 0 IF (a AND 4) >= 4 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(2) = 1 y% = 68 IF L(3) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 8) < 8 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(3) = 0 IF (a AND 8) >= 8 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(3) = 1 y% = 100 IF L(4) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 16) < 16 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(4) = 0 IF (a AND 16) >= 16 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(4) = 1 y% = 116 IF L(5) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 32) < 32 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(5) = 0 IF (a AND 32) >= 32 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(5) = 1 y% = 132 IF L(6) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 64) < 64 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(6) = 0 IF (a AND 64) >= 64 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(6) = 1 y% = 148 IF L(7) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 128) < 128 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(7) = 0 IF (a AND 128) >= 128 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(7) = 1 a$ = INPUT$(1, #1) 'Read byte a = ASC(a$) 'Value y% = 196 IF L(8) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 1) < 1 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(8) = 0 IF (a AND 1) >= 1 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(8) = 1 y% = 212 IF L(9) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 2) < 2 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(9) = 0 IF (a AND 2) >= 2 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(9) = 1 y% = 228 IF L(10) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 4) < 4 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(10) = 0 IF (a AND 4) >= 4 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(10) = 1 y% = 244 IF L(11) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 8) < 8 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(11) = 0 IF (a AND 8) >= 8 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(11) = 1 y% = 276 IF L(12) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 16) < 16 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(12) = 0 IF (a AND 16) >= 16 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(12) = 1 y% = 292 IF L(13) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 32) < 32 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(13) = 0 IF (a AND 32) >= 32 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(13) = 1 y% = 308 IF L(14) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 64) < 64 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(14) = 0 IF (a AND 64) >= 64 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(14) = 1 y% = 324 IF L(15) = 0 THEN PRESET (X%, y% + H%) ELSE PRESET (X%, y%) IF (a AND 128) < 128 THEN LINE -(X%, y% + H%): LINE -(X% + p%, y% + H%): L(15) = 0 IF (a AND 128) >= 128 THEN LINE -(X%, y%): LINE -(X% + p%, y%): L(15) = 1 NEXT j% a$ = "0" 's% = 0 'PRINT MENU ITEMS AT THE BOTTOM COLOR 14 LOCATE 24, 3: PRINT "PgDn" 'Set cursor LOCATE 24, 19: PRINT "Home "; PRINT "ShTab "; PRINT CHR$(27); " "; CHR$(26); " "; PRINT "Tab "; PRINT "End"; LOCATE 24, 63: PRINT "PgUp" LOCATE 27, 3: PRINT " " COLOR 15 LOCATE 28, 3: PRINT "e"; : COLOR 14: PRINT "X"; : COLOR 15: PRINT "pansion factor:"; COLOR 12: PRINT p%: COLOR 15 LOCATE 26, 63: COLOR 14: PRINT "Q"; : COLOR 15: PRINT "uit "; : COLOR 12: PRINT i$ LOCATE 27, 63: COLOR 14: PRINT "L"; : COLOR 15: PRINT "oad" COLOR 15 'ENTRY POINT FROM LATER KEYBOARD ENTRY 150 'FIRST TEST FOR UPPER LIMIT OF CURSOR POSITION IF (a$ = "M") AND (S% + b%) = 2046 THEN 200 'Outside boundary IF (a$ = "M") AND ((S% + 1) * p%) > 511 THEN 155 ELSE 160 ' 155 CLOSE #1 'Close file b% = b% + (512 \ p%) 'Increment IF b% > 2047 - (512 \ p%) THEN b% = 2047 - (512 \ p%) SWH = 1 'Force "home" GOTO 50 160 IF (a$ = "K") AND (S% + b%) = 0 THEN 200 'Outside boundary IF (a$ = "K") AND (S% = 0) THEN 165 ELSE 170 'Outside boundary 165 CLOSE #1 'Close file b% = b% - (512 \ p%) 'Decrement IF b% < 0 THEN b% = 0 'Oops, too far SWL = 1 GOTO 50 170 X% = S% y% = 0 IF a$ = "M" THEN PUT (16 + X% * p% + p% \ 2, y% + 17), CRS%, PSET 'Restore screen data S% = S% + 1 END IF IF a$ = "K" THEN PUT (16 + X% * p% + p% \ 2, y% + 17), CRS%, PSET 'Restore screen data S% = S% - 1 END IF 180 IF a$ = "G" THEN PUT (16 + X% * p% + p% \ 2, y% + 17), CRS%, PSET 'Restore screen data S% = 0 END IF IF a$ = "O" THEN PUT (16 + X% * p% + p% \ 2, y% + 17), CRS%, PSET 'Restore screen data S% = 512 \ p - 1 END IF IF a$ = CHR$(9) THEN PUT (16 + X% * p% + p% \ 2, y% + 17), CRS%, PSET 'Restore screen data S% = S% + 512 \ p% \ 16 END IF IF a$ = CHR$(15) THEN PUT (16 + X% * p% + p% \ 2, y% + 17), CRS%, PSET 'Restore screen data S% = S% - 512 \ p% \ 16 END IF COLOR 14: IF S% < 0 THEN S% = 0 'Keep within boundary IF S% > 512 \ p% - 1 THEN S% = 512 \ p% - 1 'Keep within boundary X% = S% y% = 0 HX! = 0 'Summed value of 16 pts LOCATE 2, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 20) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 1 LOCATE 3, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 36) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 2 LOCATE 4, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 52) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 4 LOCATE 5, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 68) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 8 LOCATE 7, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 100) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 16 LOCATE 8, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 116) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 32 LOCATE 9, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 132) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 64 LOCATE 10, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 148) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 128 LOCATE 13, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 196) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 256 LOCATE 14, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 212) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 512 LOCATE 15, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 228) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 1024 LOCATE 16, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 244) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 2048 LOCATE 18, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 276) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 4096 LOCATE 19, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 292) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 8192 LOCATE 20, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 308) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 16384 LOCATE 21, 68 'Set cursor IF POINT(16 + X% * p% + p% \ 2, y% + 324) = 0 THEN PRINT "0" ELSE PRINT "1": HX! = HX! + 32768 ' HX$ = HEX$(HX!) LOCATE 23, 68 IF LEN(HX$) = 1 THEN PRINT "000"; HX$ IF LEN(HX$) = 2 THEN PRINT "00"; HX$ IF LEN(HX$) = 3 THEN PRINT "0"; HX$ PRINT HEX$(HX!) 'SAVE SCREEN DATA AND DRAW YELLOW CURSOR GET (16 + X% * p% + p% \ 2, y% + 17)-(16 + X% * p% + p% \ 2, y% + 334), CRS% 'Save screen data LINE (16 + X% * p% + p% \ 2, y% + 17)-(16 + X% * p% + p% \ 2, y% + 334), 14 'DRAW RED TRIGGER LINE, IF WITHIN RANGE IF t% < (S% + b%) THEN GOTO 190 'Out if too far left IF t% >= (S% + b% + 512 \ p%) THEN GOTO 190 'Out if too far right LINE (16 + t% * p% - b% * p%, y% + 17)-(16 + t% * p% - b% * p%, y% + 334), 4 'Draw line 190 LOCATE 26, 3: PRINT " " LOCATE 26, 3: COLOR 14: PRINT "S"; : COLOR 15: PRINT "ample #:"; COLOR 12: PRINT S% + b% LOCATE 27, 3: COLOR 15: PRINT "Range: "; b%; "to"; b% + 512 \ p% - 1 LOCATE 26, 25: PRINT "Trigger point:"; t% COLOR 12 LOCATE 2, 70: PRINT CH0$ 'Print channel name LOCATE 3, 70: PRINT CH1$ 'Print channel name LOCATE 4, 70: PRINT CH2$ 'Print channel name LOCATE 5, 70: PRINT CH3$ 'Print channel name LOCATE 7, 70: PRINT CH4$ 'Print channel name LOCATE 8, 70: PRINT CH5$ 'Print channel name LOCATE 9, 70: PRINT CH6$ 'Print channel name LOCATE 10, 70: PRINT CH7$ 'Print channel name LOCATE 13, 70: PRINT CH8$ 'Print channel name LOCATE 14, 70: PRINT CH9$ 'Print channel name LOCATE 15, 70: PRINT CHA$ 'Print channel name LOCATE 16, 70: PRINT CHB$ 'Print channel name LOCATE 18, 70: PRINT CHC$ 'Print channel name LOCATE 19, 70: PRINT CHD$ 'Print channel name LOCATE 20, 70: PRINT CHE$ 'Print channel name LOCATE 21, 70: PRINT CHF$ 'Print channel name COLOR 15 200 IF SWH = 1 THEN SWH = 0: a$ = "G": GOTO 150 'Go "home" IF SWL = 1 THEN SWL = 0: a$ = "O": GOTO 150 'Go "end" 202 a$ = INKEY$: IF a$ = "" THEN 202 'Wait for keyboard input LOCATE 28, 55 'Set cursor PRINT " " IF LEN(a$) = 2 THEN a$ = RIGHT$(a$, 1) ELSE GOTO 230 IF a$ = "M" THEN GOTO 150 'Right arrow IF a$ = "K" THEN GOTO 150 'Left arrow IF a$ = "G" THEN GOTO 150 'Home IF a$ = "O" THEN GOTO 150 'End IF a$ = CHR$(15) THEN GOTO 150 'Tab left IF a$ = "I" THEN GOTO 210 'PgUp IF a$ = "Q" THEN GOTO 220 'PgDn GOTO 235 210 CLOSE #1 'Close file b% = b% + (512 \ p%) 'Increment IF b% > 2047 - (512 \ p%) THEN b% = 2047 - (512 \ p%) GOTO 50 220 CLOSE #1 'Close file b% = b% - (512 \ p%) 'Decrement IF b% < 0 THEN b% = 0 'Oops, too far GOTO 50 230 IF (a$ = "X" OR a$ = "x") THEN CLOSE #1: GOTO 40 'Expansion requested IF (a$ = "S" OR a$ = "s") THEN CLOSE #1: GOTO 240 'Sample number selected IF (a$ = "L" OR a$ = "l") THEN CLOSE #1: GOTO 5 'Load new file IF (a$ = "Q" OR a$ = "q") THEN CLOSE #1: END 'Quit program IF (a$ = "W" OR a$ = "w") THEN GOTO 300 'Write screen to file IF (a$ = "R" OR a$ = "r") THEN CLOSE #1: GOTO 40 'Refresh screen (test) IF a$ = CHR$(9) THEN GOTO 150 'Tab right 235 ' 'Wrong key used LOCATE 28, 55 'Set cursor COLOR 12 'Red color PRINT "Key entry not recognized." COLOR 15 'White color GOTO 200 240 LOCATE 28, 3 'Set cursor COLOR 12 'Red color max% = 2047 - (512 \ p%) 'Highest sample PRINT "Enter starting sample number (0 to"; max%; ")"; COLOR 15: INPUT " ", b% IF b% < 0 THEN b% = 0 'Too low, set zero IF b% > max% THEN b% = max% 'Too high, set max COLOR 15 'White color GOTO 50 300 LOCATE 28, 25 COLOR 12 INPUT "Enter file name for screen save ", S$ COLOR 15 LOCATE 28, 25 PRINT " "; LOCATE 29, 3: OPEN S$ FOR OUTPUT AS #2 'WRITE HEADER FOR i = 1 TO 6 PRINT #2, CHR$(0); '6 zero's NEXT i PRINT #2, CHR$(224); 'Rows = 480 PRINT #2, CHR$(1); PRINT #2, CHR$(128); 'Columns = 640 PRINT #2, CHR$(2); FOR i = 1 TO 502 PRINT #2, CHR$(0); '502 zero's NEXT i 'WRITE PIXELS IN B/W FOR j% = 0 TO 479 FOR i% = 0 TO 639 IF (POINT(i%, j%) > 0) THEN PRINT #2, CHR$(0); ELSE PRINT #2, CHR$(255); 'Invert for later printing NEXT i% ' LOCATE 28, 30: PRINT j%; NEXT j% LOCATE 28, 55 COLOR 12 PRINT "Screen save completed"; COLOR 15 CLOSE #2 GOTO 200