; ; ### ASCII v 1.70 ### ; ; - Created 880808 by TM - ; ; ; This program helps you to find the ASCII codes of different characters. ; It also 'knows' the control characters (NUL, BEL, LF, CR etc.). ; ; Original code by Tomi Marin, comments by Jukka Marin. ; ; Bugs: Not very well commented. Sorry. Not easy to write comments to a ; proggie that's not written by me. ; ; ; Edited: ; ; - 881020 by TM -> v1.50 - Code compressed ; - 881020 by JM -> v1.60 - Code compressed and commented. ; Code size dropped from 1408 to 856 bytes! ; - 881021 by JM,TM -> v1.70 - Code still compressed. Some features added. ; Code size is now 856 bytes. ; ; CSI equ $9b ; control sequence introducer xref _LVOOpen ; external references xref _LVOOpenLibrary xref _LVOClose xref _LVOCloseLibrary xref _LVORead xref _LVOWrite xref _LVOOutput xref _LVOExecute xref _LVOWaitForChar include "jmplibs.i" ; contains some useful macros start openlib Dos,clean2 ; open dos.library openlib Intuition,clean2 ; open intuition.library lea ibuf(pc),a3 ; address of input buffer (1 byte) move.l #name1,d1 ; raw window file move.l #1005,d2 lib Dos,Open move.l d0,d5 ; put filehandle in d5 bne fileok cleanup move.l d5,d1 beq clean1 flib Dos,Close ; close file (=window) clean1 closl Dos closl Intuition clean2 moveq.l #0,d0 rts fileok move.l _IntuitionBase(pc),a0 move.l 52(a0),a0 ; pointer to active window lea 16(a0),a0 move.l #(250<<16)+77,d0 ; set window size -> no sizing allowed move.l d0,(a0)+ move.l d0,(a0) lea INIT(pc),a2 ; print initializing string move.b #' ',(a3) ; number of first char displayed bsr output jumppi move.b (a3),d4 subq.b #4,d4 syppi lea CLEAR(pc),a2 ; clear window wyppi bsr output move.b d4,d7 moveq.l #6,d6 bra sup2 sup1 lea LINEF(pc),a2 ; print line feed bsr output sup2 addq.b #1,d7 move.b d7,d0 bsr fprint move.l d5,d1 moveq #3,d2 flib Dos,WaitForChar ; check if a key pressed tst.l d0 dbne d6,sup1 ; loop to print all lines ph move.l d5,d1 ; read a char from keyboard move.l a3,d2 moveq.l #1,d3 flib Dos,Read cmp.b #27,(a3) ; if ESC, then exit beq cleanup cmp.b #CSI,(a3) ; check for cursor keys bne jumppi phii move.l d5,d1 move.l a3,d2 moveq.l #1,d3 flib Dos,Read cmp.b #'?',(a3) bls phii cmp.b #'A',(a3) bne ph1 lea HOME(pc),a2 ; scroll & cursor home bsr output move.b d4,d0 bsr fprint subq.b #1,d4 bra ph ph1 cmp.b #'B',(a3) bne ph2 lea BOTTOM(pc),a2 ; scroll & cursor to the bottommost line bsr output move.b d4,d0 addq.b #8,d0 bsr fprint addq.b #1,d4 ph2 bra ph fprint lea buffer+2(pc),a2 ; build one line into output buffer moveq #' ',d2 move.b d0,d1 and.b #127,d1 cmp.b d2,d1 bhs fprin2 move.b d0,d1 bpl fprin1 moveq #'*',d2 fprin1 and.w #31,d1 mulu.w #3,d1 lea sohi(pc),a0 move.b 0(a0,d1.w),(a2) ; copy 'NUL' etc. move.b 1(a0,d1.w),1(a2) move.b 2(a0,d1.w),2(a2) bra fprin3 fprin2 move.b #'"',(a2) move.b d0,1(a2) move.b #'"',2(a2) fprin3 lea hextable(pc),a0 ; convert to hexadecimal move.b d0,d1 and.w #15,d1 move.b d2,3(a2) move.b 0(a0,d1.w),d2 ; low nybble move.b d2,12(a2) move.b d0,d1 lsr.b #4,d1 move.b 0(a0,d1.w),d2 ; high nybble move.b d2,11(a2) moveq.l #0,d1 ; convert to decimal move.b d0,d1 divu #10,d1 swap d1 or.b #'0',d1 move.b d1,7(a2) ; 1's moveq.l #0,d2 clr.w d1 swap d1 divu #10,d1 swap d1 ; get 10's in d1[0...3] or.b #'0',d1 ; convert to ASCII move.b d1,d2 ; save it swap d1 ; remainder = 100's or.b #'0',d1 cmp.b #'0',d1 bne fprin4 moveq.l #' ',d1 ; blank leading zeros cmp.b #'0',d2 bne fprin4 move.b d1,d2 fprin4 move.b d2,6(a2) ; 10's move.b d1,5(a2) ; 100's move.b d0,d2 ; convert to octal and.b #7,d2 or.b #'0',d2 move.b d2,18(a2) ; lsd lsr.b #3,d0 move.b d0,d2 and.b #7,d2 or.b #'0',d2 move.b d2,17(a2) ; isd lsr.b #3,d0 and.b #7,d0 or.b #'0',d0 move.b d0,16(a2) ; msd subq.w #2,a2 output printa a2,d5 ; print a string at a2 to file in d5 rts hextable dc.b '0123456789ABCDEF' ;012345678901234567890 buffer dc.b ' "C" DEC $HX &OCT',0 name1 dc.b 'Raw:0/0/250/77/Ascii Table' ibuf dc.b 0 LINEF dc.b 10,0 INIT dc.b CSI,'7t',CSI,'0 p',0 CLEAR dc.b 12,0 HOME dc.b CSI,$54,CSI,'0;0H',0 BOTTOM dc.b CSI,$53,CSI,'8;0H',0 sohi dc.b 'NULSOHSTXETXEOTENQACKBEL BSTAB LF' dc.b ' VT FF CR SO SIDLEDC1DC2DC3DC4NAK' dc.b 'SYNETBCAN EMSUBESC FS GS RS US' libnames end