Hex Artifact Content
Not logged in

Artifact 9d8e9e0a4ef550452d6eb546cd3eb0be0b400531:


0000: 0a 3b 3b 3b 20 54 65 73 74 20 66 6f 72 6d 61 74  .;;; Test format
0010: 20 69 6d 70 6f 72 74 20 6f 66 20 69 6d 70 6c 65   import of imple
0020: 6d 65 6e 74 61 74 69 6f 6e 0a 3b 3b 3b 20 73 70  mentation.;;; sp
0030: 65 63 69 66 69 63 20 72 6f 75 74 69 6e 65 3a 20  ecific routine: 
0040: 70 72 65 74 74 79 2d 70 72 69 6e 74 0a 0a 23 7c  pretty-print..#|
0050: 0a 4c 41 52 43 45 4e 59 20 55 53 41 47 45 3a 0a  .LARCENY USAGE:.
0060: 3d 3d 3e 20 6c 61 72 63 65 6e 79 20 2d 72 36 72  ==> larceny -r6r
0070: 73 20 2d 70 72 6f 67 72 61 6d 20 70 72 69 6e 74  s -program print
0080: 2d 61 73 63 69 69 2e 73 73 0a 0a 49 4b 41 52 55  -ascii.ss..IKARU
0090: 53 20 55 53 41 47 45 0a 3d 3d 3e 20 69 6b 61 72  S USAGE.==> ikar
00a0: 75 73 20 2d 2d 72 36 72 73 2d 73 63 72 69 70 74  us --r6rs-script
00b0: 20 70 72 69 6e 74 2d 61 73 63 69 69 2e 73 73 0a   print-ascii.ss.
00c0: 0a 7c 23 0a 0a 28 69 6d 70 6f 72 74 20 28 72 6e  .|#..(import (rn
00d0: 72 73 20 28 36 29 29 0a 20 20 20 20 20 20 20 20  rs (6)).        
00e0: 28 73 75 72 66 61 67 65 20 73 34 38 20 69 6e 74  (surfage s48 int
00f0: 65 72 6d 65 64 69 61 74 65 2d 66 6f 72 6d 61 74  ermediate-format
0100: 2d 73 74 72 69 6e 67 73 29 29 0a 20 20 20 20 20  -strings)).     
0110: 20 20 20 0a 28 64 65 66 69 6e 65 20 70 61 0a 20     .(define pa. 
0120: 27 28 64 65 66 69 6e 65 20 28 70 72 69 6e 74 2d  '(define (print-
0130: 61 73 63 69 69 2d 63 68 61 72 74 20 2e 20 72 61  ascii-chart . ra
0140: 64 69 78 2b 70 6f 72 74 29 20 20 0a 20 20 28 6c  dix+port)  .  (l
0150: 65 74 20 28 20 28 72 61 64 69 78 20 28 69 66 20  et ( (radix (if 
0160: 28 6e 75 6c 6c 3f 20 72 61 64 69 78 2b 70 6f 72  (null? radix+por
0170: 74 29 20 31 36 20 28 63 61 72 20 72 61 64 69 78  t) 16 (car radix
0180: 2b 70 6f 72 74 29 29 29 20 20 20 20 20 20 20 20  +port)))        
0190: 20 0a 20 20 20 20 20 20 20 20 20 28 70 6f 72 74   .         (port
01a0: 20 20 28 69 66 20 28 6f 72 20 28 6e 75 6c 6c 3f    (if (or (null?
01b0: 20 72 61 64 69 78 2b 70 6f 72 74 29 20 28 6e 75   radix+port) (nu
01c0: 6c 6c 3f 20 28 63 64 72 20 72 61 64 69 78 2b 70  ll? (cdr radix+p
01d0: 6f 72 74 29 29 29 0a 20 20 20 20 20 20 20 20 20  ort))).         
01e0: 20 20 20 20 20 20 20 20 20 28 63 75 72 72 65 6e           (curren
01f0: 74 2d 6f 75 74 70 75 74 2d 70 6f 72 74 29 0a 20  t-output-port). 
0200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0210: 20 28 63 61 64 72 20 72 61 64 69 78 2b 70 6f 72   (cadr radix+por
0220: 74 29 29 29 20 20 0a 20 20 20 20 20 20 20 20 20  t)))  .         
0230: 28 6d 61 78 2d 72 6f 77 20 20 20 20 31 35 29 20  (max-row    15) 
0240: 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20          .       
0250: 20 20 28 6d 61 78 2d 63 6f 6c 20 20 20 20 20 37    (max-col     7
0260: 29 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 20  )         .     
0270: 20 20 20 20 28 6d 61 78 2d 61 73 63 69 69 20 31      (max-ascii 1
0280: 32 37 29 20 20 20 20 20 20 20 20 20 0a 20 20 20  27)         .   
0290: 20 20 20 20 20 20 28 6d 61 78 2d 63 6f 6e 74 72        (max-contr
02a0: 6f 6c 20 33 31 29 20 20 3b 20 5b 30 2e 2e 33 31  ol 31)  ; [0..31
02b0: 5d 20 61 72 65 20 63 6f 6e 74 72 6f 6c 20 63 6f  ] are control co
02c0: 64 65 73 0a 20 20 20 20 20 20 20 29 20 20 20 0a  des.       )   .
02d0: 0a 20 20 20 20 28 64 65 66 69 6e 65 20 28 70 72  .    (define (pr
02e0: 69 6e 74 61 62 6c 65 3f 20 4e 29 20 3b 20 4e 2e  intable? N) ; N.
02f0: 42 2e 3a 20 69 6e 74 65 67 65 72 20 69 6e 70 75  B.: integer inpu
0300: 74 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 28  t       .      (
0310: 3c 20 6d 61 78 2d 63 6f 6e 74 72 6f 6c 20 4e 20  < max-control N 
0320: 6d 61 78 2d 61 73 63 69 69 29 29 20 3b 20 63 6f  max-ascii)) ; co
0330: 6e 74 72 6f 6c 20 6f 72 20 44 45 4c 20 20 0a 0a  ntrol or DEL  ..
0340: 20 20 20 20 28 64 65 66 69 6e 65 20 28 70 72 69      (define (pri
0350: 6e 74 2d 61 2d 63 68 61 72 20 4e 29 20 0a 20 20  nt-a-char N) .  
0360: 20 20 20 20 28 69 66 20 28 70 72 69 6e 74 61 62      (if (printab
0370: 6c 65 3f 20 4e 29 20 0a 20 20 20 20 20 20 20 20  le? N) .        
0380: 28 62 65 67 69 6e 20 20 20 20 20 20 20 20 0a 20  (begin        . 
0390: 20 20 20 20 20 20 20 20 20 28 64 69 73 70 6c 61           (displa
03a0: 79 20 23 5c 27 20 20 20 20 20 20 20 20 20 20 20  y #\'           
03b0: 20 20 20 20 70 6f 72 74 29 0a 20 20 20 20 20 20      port).      
03c0: 20 20 20 20 28 64 69 73 70 6c 61 79 20 28 69 6e      (display (in
03d0: 74 65 67 65 72 2d 3e 63 68 61 72 20 4e 29 20 70  teger->char N) p
03e0: 6f 72 74 29 20 0a 20 20 20 20 20 20 20 20 20 20  ort) .          
03f0: 28 64 69 73 70 6c 61 79 20 23 5c 27 20 20 20 20  (display #\'    
0400: 20 20 20 20 20 20 20 20 20 20 20 70 6f 72 74 29             port)
0410: 20 0a 20 20 20 20 20 20 20 20 20 20 29 20 20 20   .          )   
0420: 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 28 63       .        (c
0430: 6f 6e 64 20 3b 20 70 72 69 6e 74 20 61 20 63 6f  ond ; print a co
0440: 6e 74 72 6f 6c 20 63 68 61 72 61 63 74 65 72 20  ntrol character 
0450: 20 0a 20 20 20 20 20 20 20 20 20 28 28 3d 20 4e   .         ((= N
0460: 20 6d 61 78 2d 61 73 63 69 69 29 20 28 64 69 73   max-ascii) (dis
0470: 70 6c 61 79 20 22 44 45 4c 22 20 70 6f 72 74 29  play "DEL" port)
0480: 29 20 20 0a 20 20 20 20 20 20 20 20 20 28 65 6c  )  .         (el
0490: 73 65 20 20 20 20 20 20 20 20 20 20 20 20 0a 20  se            . 
04a0: 20 20 20 20 20 20 20 20 20 28 64 69 73 70 6c 61           (displa
04b0: 79 20 23 5c 5e 20 20 20 70 6f 72 74 29 20 20 20  y #\^   port)   
04c0: 20 0a 20 20 20 20 20 20 20 20 20 20 28 64 69 73   .          (dis
04d0: 70 6c 61 79 20 28 69 6e 74 65 67 65 72 2d 3e 63  play (integer->c
04e0: 68 61 72 20 28 2b 20 28 63 68 61 72 2d 3e 69 6e  har (+ (char->in
04f0: 74 65 67 65 72 20 23 5c 40 29 20 4e 29 29 20 70  teger #\@) N)) p
0500: 6f 72 74 29 20 0a 20 20 20 20 20 20 20 20 20 20  ort) .          
0510: 29 20 29 20 20 20 20 20 29 20 20 20 20 20 20 0a  ) )     )      .
0520: 20 20 20 20 20 20 28 64 69 73 70 6c 61 79 20 22        (display "
0530: 20 3d 20 22 20 20 20 20 20 20 20 20 20 20 20 20   = "            
0540: 20 20 20 20 20 20 20 20 70 6f 72 74 29 20 20 0a          port)  .
0550: 20 20 20 20 20 20 28 64 69 73 70 6c 61 79 20 28        (display (
0560: 6e 75 6d 62 65 72 2d 3e 73 74 72 69 6e 67 20 4e  number->string N
0570: 20 72 61 64 69 78 29 20 70 6f 72 74 29 20 0a 20   radix) port) . 
0580: 20 20 20 20 20 28 64 69 73 70 6c 61 79 20 23 5c       (display #\
0590: 73 70 61 63 65 20 20 20 20 20 20 20 20 20 20 20  space           
05a0: 20 20 20 20 20 20 20 70 6f 72 74 29 20 20 0a 20         port)  . 
05b0: 20 20 20 20 20 28 64 69 73 70 6c 61 79 20 23 5c       (display #\
05c0: 73 70 61 63 65 20 20 20 20 20 20 20 20 20 20 20  space           
05d0: 20 20 20 20 20 20 20 70 6f 72 74 29 20 0a 20 20         port) .  
05e0: 20 20 20 20 28 64 69 73 70 6c 61 79 20 23 5c 73      (display #\s
05f0: 70 61 63 65 20 20 20 20 20 20 20 20 20 20 20 20  pace            
0600: 20 20 20 20 20 20 70 6f 72 74 29 20 20 20 0a 20        port)   . 
0610: 20 20 20 20 20 29 20 20 20 0a 0a 20 20 20 20 3b       )   ..    ;
0620: 20 6f 75 74 70 75 74 20 74 68 65 20 63 68 61 72   output the char
0630: 74 2e 2e 2e 20 20 0a 20 20 20 20 28 6e 65 77 6c  t...  .    (newl
0640: 69 6e 65 20 70 6f 72 74 29 20 20 20 0a 20 20 20  ine port)   .   
0650: 20 28 6c 65 74 20 72 6f 77 2d 6c 6f 6f 70 20 28   (let row-loop (
0660: 20 28 72 6f 77 20 30 29 20 29 20 20 0a 20 20 20   (row 0) )  .   
0670: 20 20 20 28 69 66 20 28 3e 20 72 6f 77 20 6d 61     (if (> row ma
0680: 78 2d 72 6f 77 29 20 20 20 20 20 20 20 20 0a 20  x-row)        . 
0690: 20 20 20 20 20 20 20 28 6e 65 77 6c 69 6e 65 20         (newline 
06a0: 70 6f 72 74 29 20 20 3b 20 64 6f 6e 65 20 20 20  port)  ; done   
06b0: 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20         .        
06c0: 28 6c 65 74 20 63 6f 6c 75 6d 6e 2d 6c 6f 6f 70  (let column-loop
06d0: 20 28 20 28 63 6f 6c 20 30 29 20 29 20 20 20 0a   ( (col 0) )   .
06e0: 20 20 20 20 20 20 20 20 20 20 28 70 72 69 6e 74            (print
06f0: 2d 61 2d 63 68 61 72 20 28 2b 20 72 6f 77 20 28  -a-char (+ row (
0700: 2a 20 63 6f 6c 20 28 2b 20 6d 61 78 2d 72 6f 77  * col (+ max-row
0710: 20 31 29 29 29 29 20 0a 20 20 20 20 20 20 20 20   1)))) .        
0720: 20 20 28 69 66 20 28 3c 20 63 6f 6c 20 6d 61 78    (if (< col max
0730: 2d 63 6f 6c 29 20 20 20 20 20 20 20 20 0a 20 20  -col)        .  
0740: 20 20 20 20 20 20 20 20 20 20 28 63 6f 6c 75 6d            (colum
0750: 6e 2d 6c 6f 6f 70 20 28 2b 20 63 6f 6c 20 31 29  n-loop (+ col 1)
0760: 29 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20  )   .           
0770: 20 28 62 65 67 69 6e 20 20 20 20 20 20 20 20 20   (begin         
0780: 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20           .      
0790: 20 20 20 20 20 20 20 20 28 6e 65 77 6c 69 6e 65          (newline
07a0: 20 20 70 6f 72 74 29 20 20 20 20 20 20 0a 20 20    port)      .  
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 28 72 6f 77              (row
07c0: 2d 6c 6f 6f 70 20 28 2b 20 72 6f 77 20 31 29 29  -loop (+ row 1))
07d0: 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    .             
07e0: 20 29 20 20 20 29 20 20 20 20 20 20 20 20 20 20   )   )          
07f0: 0a 20 20 20 20 20 20 20 20 20 20 29 20 20 20 29  .          )   )
0800: 20 20 20 20 0a 20 20 20 20 20 20 29 29 20 29 0a      .      )) ).
0810: 29 0a 0a 28 66 6f 72 6d 61 74 20 23 74 20 22 7e  )..(format #t "~
0820: 59 7e 25 22 20 70 61 29 0a 0a 3b 3b 09 09 2d 2d  Y~%" pa)..;;..--
0830: 2d 20 45 20 4f 20 46 20 2d 2d 2d 09 09 3b 3b 0a  - E O F ---..;;.