1#lang racket/base
2
3(define filename "stypes.h")
4
5(define lines
6  (with-input-from-file filename
7    (lambda ()
8      (let loop ()
9	(let ([l (read-line)])
10	  (if (eof-object? l)
11	      null
12	      (cons l (loop))))))))
13
14(define n 0)
15
16(with-output-to-file filename
17  #:exists 'truncate
18  (lambda ()
19    (for-each
20     (lambda (l)
21       (cond
22	[(regexp-match #rx"^( +[a-z_A-Z][a-z_A-Z0-9]*,) *(?:/[*] [0-9]* [*]/)? *$" l)
23	 => (lambda (m)
24	      (let ([s (cadr m)])
25		(printf "~a~a\n"
26			s
27			(format "~a/* ~a */"
28				(make-string (max 0 (- 40 (string-length s))) #\space)
29				n)))
30	      (set! n (add1 n)))]
31	[(regexp-match #rx"^ +[a-zA-Z_][a-z_A-Z0-9]*," l)
32	 (set! n (add1 n))
33	 (printf "~a\n" l)]
34	[else
35	 (printf "~a\n" l)]))
36     lines)))
37