Artifact
cc34f7c51ff148f7bde598a68e54766b8c7bc67b:
0000: 0a 28 72 65 71 75 69 72 65 2d 65 78 74 65 6e 73 .(require-extens
0010: 69 6f 6e 20 73 71 6c 69 74 65 33 20 72 65 67 65 ion sqlite3 rege
0020: 78 20 70 6f 73 69 78 20 65 66 6f 72 6d 61 74 20 x posix eformat
0030: 73 69 6c 65 78 20 73 74 61 63 6b 20 72 65 67 65 silex stack rege
0040: 78 29 0a 0a 28 64 65 66 69 6e 65 20 68 65 6c 70 x)..(define help
0050: 20 22 0a 55 73 61 67 65 3a 20 6e 6c 64 62 20 5b ".Usage: nldb [
0060: 6f 70 74 69 6f 6e 73 5d 0a 0a 0a 47 65 6e 65 72 options]...Gener
0070: 61 6c 0a 20 20 2d 68 20 20 20 20 20 20 20 20 20 al. -h
0080: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 : t
0090: 68 69 73 20 68 65 6c 70 0a 0a 4e 65 74 6c 69 73 his help..Netlis
00a0: 74 20 64 61 74 61 20 71 75 65 72 69 65 73 0a 0a t data queries..
00b0: 20 20 2d 66 69 6e 64 70 61 74 68 20 73 74 61 72 -findpath star
00c0: 74 2c 65 6e 64 20 20 20 20 20 3a 20 66 69 6e 64 t,end : find
00d0: 20 70 61 74 68 20 66 72 6f 6d 20 73 74 61 72 74 path from start
00e0: 20 74 6f 20 65 6e 64 2e 20 25 20 69 73 20 61 20 to end. % is a
00f0: 77 69 6c 64 63 61 72 64 0a 0a 4d 61 6e 61 67 69 wildcard..Managi
0100: 6e 67 20 6e 65 74 6c 69 73 74 20 64 61 74 61 0a ng netlist data.
0110: 0a 20 20 2d 6c 6f 61 64 20 2f 70 61 74 68 2f 74 . -load /path/t
0120: 6f 2f 6e 65 74 6c 69 73 74 20 20 3a 20 6c 6f 61 o/netlist : loa
0130: 64 20 61 20 6d 6f 64 65 6c 20 69 6e 74 6f 20 74 d a model into t
0140: 68 65 20 64 62 0a 20 20 2d 64 20 64 62 6e 61 6d he db. -d dbnam
0150: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e
0160: 3a 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 2e 64 : name of the .d
0170: 62 20 66 69 6c 65 0a 20 20 2d 64 75 6d 70 20 66 b file. -dump f
0180: 6e 61 6d 65 20 20 20 20 20 20 20 20 20 20 20 20 name
0190: 20 3a 20 64 75 6d 70 20 74 68 65 20 6e 65 74 6c : dump the netl
01a0: 69 73 74 20 69 6e 20 74 6f 20 76 65 72 69 6c 6f ist in to verilo
01b0: 67 20 66 69 6c 65 0a 0a 22 29 0a 0a 28 69 6e 63 g file..")..(inc
01c0: 6c 75 64 65 20 22 2f 6e 66 73 2f 61 6e 2f 68 6f lude "/nfs/an/ho
01d0: 6d 65 2f 6d 72 77 65 6c 6c 61 6e 2f 73 74 75 66 me/mrwellan/stuf
01e0: 66 2f 74 6f 6f 6c 73 2f 6c 6e 6b 6d 6b 72 2f 61 f/tools/lnkmkr/a
01f0: 72 67 73 2e 73 63 6d 22 29 0a 28 69 6e 63 6c 75 rgs.scm").(inclu
0200: 64 65 20 22 76 65 72 69 6c 6f 67 2e 6c 2e 73 63 de "verilog.l.sc
0210: 6d 22 29 0a 0a 3b 3b 20 70 72 6f 63 65 73 73 20 m")..;; process
0220: 61 72 67 73 0a 28 64 65 66 69 6e 65 20 72 65 6d args.(define rem
0230: 61 72 67 73 20 28 67 65 74 2d 61 72 67 73 20 28 args (get-args (
0240: 61 72 67 76 29 0a 09 09 09 20 20 28 6c 69 73 74 argv).... (list
0250: 20 22 2d 6c 6f 61 64 22 0a 09 09 09 09 22 2d 64 "-load"....."-d
0260: 22 20 20 20 20 20 20 20 20 20 20 22 2d 64 75 6d " "-dum
0270: 70 22 20 0a 09 09 09 09 22 2d 66 69 6e 64 70 61 p" ....."-findpa
0280: 74 68 22 29 0a 09 09 09 20 20 0a 09 09 09 20 20 th").... ....
0290: 28 6c 69 73 74 20 22 2d 68 22 0a 09 09 09 09 29 (list "-h".....)
02a0: 0a 09 09 09 20 20 61 72 67 2d 68 61 73 68 0a 09 .... arg-hash..
02b0: 09 09 20 20 30 29 29 20 3b 3b 0a 0a 28 64 65 66 .. 0)) ;;..(def
02c0: 69 6e 65 20 64 62 70 61 74 68 73 20 28 6c 69 73 ine dbpaths (lis
02d0: 74 20 22 74 65 73 74 69 6e 67 2e 64 62 22 29 29 t "testing.db"))
02e0: 0a 0a 28 64 65 66 69 6e 65 20 64 62 70 61 74 68 ..(define dbpath
02f0: 20 23 66 29 0a 0a 28 69 66 20 28 67 65 74 2d 61 #f)..(if (get-a
0300: 72 67 20 22 2d 64 22 29 0a 20 20 20 20 28 73 65 rg "-d"). (se
0310: 74 21 20 64 62 70 61 74 68 20 28 67 65 74 2d 61 t! dbpath (get-a
0320: 72 67 20 22 2d 64 22 29 29 0a 20 20 20 20 28 66 rg "-d")). (f
0330: 6f 72 2d 65 61 63 68 0a 20 20 20 20 20 28 6c 61 or-each. (la
0340: 6d 62 64 61 20 28 70 61 74 68 29 0a 20 20 20 20 mbda (path).
0350: 20 20 20 28 69 66 20 28 66 69 6c 65 2d 65 78 69 (if (file-exi
0360: 73 74 73 3f 20 70 61 74 68 29 0a 09 20 20 20 28 sts? path).. (
0370: 73 65 74 21 20 64 62 70 61 74 68 20 70 61 74 68 set! dbpath path
0380: 29 29 29 0a 20 20 20 20 20 64 62 70 61 74 68 73 ))). dbpaths
0390: 29 29 0a 0a 28 69 66 20 28 61 6e 64 20 28 6e 6f ))..(if (and (no
03a0: 74 20 64 62 70 61 74 68 29 20 28 67 65 74 2d 61 t dbpath) (get-a
03b0: 72 67 20 22 2d 64 22 29 29 0a 20 20 20 20 28 62 rg "-d")). (b
03c0: 65 67 69 6e 0a 20 20 20 20 20 20 28 70 72 69 6e egin. (prin
03d0: 74 20 22 43 61 6e 27 74 20 66 69 6e 64 20 64 62 t "Can't find db
03e0: 2e 20 22 20 28 67 65 74 2d 61 72 67 20 22 2d 64 . " (get-arg "-d
03f0: 22 29 20 22 20 54 72 79 20 61 67 61 69 6e 20 6f ") " Try again o
0400: 72 20 63 6f 6e 74 61 63 74 20 4d 61 74 74 21 22 r contact Matt!"
0410: 29 0a 20 20 20 20 20 20 28 65 78 69 74 20 31 29 ). (exit 1)
0420: 29 29 0a 0a 28 64 65 66 69 6e 65 20 64 62 65 78 ))..(define dbex
0430: 69 73 74 73 20 28 66 69 6c 65 2d 65 78 69 73 74 ists (file-exist
0440: 73 3f 20 64 62 70 61 74 68 29 29 0a 0a 28 64 65 s? dbpath))..(de
0450: 66 69 6e 65 20 72 65 61 6c 75 73 65 72 20 28 67 fine realuser (g
0460: 65 74 65 6e 76 20 22 55 53 45 52 22 29 29 0a 28 etenv "USER")).(
0470: 64 65 66 69 6e 65 20 75 73 65 72 20 72 65 61 6c define user real
0480: 75 73 65 72 29 0a 0a 28 64 65 66 69 6e 65 20 64 user)..(define d
0490: 62 20 28 73 71 6c 69 74 65 33 3a 6f 70 65 6e 20 b (sqlite3:open
04a0: 64 62 70 61 74 68 29 29 0a 28 73 71 6c 69 74 65 dbpath)).(sqlite
04b0: 33 3a 73 65 74 2d 62 75 73 79 2d 74 69 6d 65 6f 3:set-busy-timeo
04c0: 75 74 21 20 64 62 20 31 30 30 30 30 30 30 29 0a ut! db 1000000).
04d0: 0a 28 64 65 66 69 6e 65 20 28 6d 6b 2d 74 61 62 .(define (mk-tab
04e0: 6c 65 73 29 0a 20 20 28 66 6f 72 2d 65 61 63 68 les). (for-each
04f0: 0a 20 20 20 28 6c 61 6d 62 64 61 20 28 73 71 6c . (lambda (sql
0500: 73 74 6d 74 29 0a 20 20 20 20 20 28 73 71 6c 69 stmt). (sqli
0510: 74 65 33 3a 65 78 65 63 20 64 62 20 73 71 6c 73 te3:exec db sqls
0520: 74 6d 74 29 29 0a 20 20 20 28 6c 69 73 74 20 22 tmt)). (list "
0530: 43 52 45 41 54 45 20 54 41 42 4c 45 20 6d 6f 64 CREATE TABLE mod
0540: 75 6c 65 73 28 69 64 20 49 4e 54 45 47 45 52 20 ules(id INTEGER
0550: 50 52 49 4d 41 52 59 20 4b 45 59 2c 6e 61 6d 65 PRIMARY KEY,name
0560: 5f 69 64 20 49 4e 54 45 47 45 52 29 3b 22 0a 09 _id INTEGER);"..
0570: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 6e "CREATE TABLE n
0580: 65 74 73 20 20 20 28 69 64 20 49 4e 54 45 47 45 ets (id INTEGE
0590: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 6e 61 R PRIMARY KEY,na
05a0: 6d 65 5f 69 64 20 49 4e 54 45 47 45 52 2c 6d 6f me_id INTEGER,mo
05b0: 64 75 6c 65 5f 69 64 20 49 4e 54 45 47 45 52 29 dule_id INTEGER)
05c0: 3b 22 0a 09 20 22 43 52 45 41 54 45 20 54 41 42 ;".. "CREATE TAB
05d0: 4c 45 20 69 6e 73 74 73 20 20 28 69 64 20 49 4e LE insts (id IN
05e0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
05f0: 59 2c 6e 61 6d 65 5f 69 64 20 49 4e 54 45 47 45 Y,name_id INTEGE
0600: 52 2c 6d 6f 64 75 6c 65 5f 69 64 20 49 4e 54 45 R,module_id INTE
0610: 47 45 52 2c 70 61 72 65 6e 74 5f 69 64 20 49 4e GER,parent_id IN
0620: 54 45 47 45 52 29 3b 22 0a 09 20 22 43 52 45 41 TEGER);".. "CREA
0630: 54 45 20 54 41 42 4c 45 20 70 69 6e 73 20 20 20 TE TABLE pins
0640: 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d (id INTEGER PRIM
0650: 41 52 59 20 4b 45 59 2c 6e 61 6d 65 5f 69 64 20 ARY KEY,name_id
0660: 49 4e 54 45 47 45 52 2c 6d 6f 64 75 6c 65 5f 69 INTEGER,module_i
0670: 64 20 49 4e 54 45 47 45 52 2c 6e 65 74 5f 69 64 d INTEGER,net_id
0680: 20 49 4e 54 45 47 45 52 2c 74 79 70 65 5f 69 64 INTEGER,type_id
0690: 20 49 4e 54 45 47 45 52 29 3b 22 0a 09 20 22 43 INTEGER);".. "C
06a0: 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6e 6e REATE TABLE conn
06b0: 73 20 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 s (id INTEGER P
06c0: 52 49 4d 41 52 59 20 4b 45 59 2c 6e 65 74 5f 69 RIMARY KEY,net_i
06d0: 64 20 20 49 4e 54 45 47 45 52 2c 69 6e 73 74 5f d INTEGER,inst_
06e0: 69 64 20 49 4e 54 45 47 45 52 2c 70 69 6e 5f 69 id INTEGER,pin_i
06f0: 64 20 49 4e 54 45 47 45 52 29 3b 22 0a 09 20 22 d INTEGER);".. "
0700: 43 52 45 41 54 45 20 54 41 42 4c 45 20 6e 61 6d CREATE TABLE nam
0710: 65 73 20 20 28 69 64 20 49 4e 54 45 47 45 52 20 es (id INTEGER
0720: 50 52 49 4d 41 52 59 20 4b 45 59 2c 6e 61 6d 65 PRIMARY KEY,name
0730: 20 54 45 58 54 29 3b 22 0a 09 20 22 43 52 45 41 TEXT);".. "CREA
0740: 54 45 20 54 41 42 4c 45 20 74 79 70 65 73 28 69 TE TABLE types(i
0750: 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 d INTEGER PRIMAR
0760: 59 20 4b 45 59 2c 74 79 70 65 20 54 45 58 54 29 Y KEY,type TEXT)
0770: 3b 22 0a 09 20 22 49 4e 53 45 52 54 20 49 4e 54 ;".. "INSERT INT
0780: 4f 20 74 79 70 65 73 20 56 41 4c 55 45 53 28 31 O types VALUES(1
0790: 2c 20 27 75 6e 64 65 66 27 29 3b 22 0a 09 20 22 , 'undef');".. "
07a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 79 70 65 INSERT INTO type
07b0: 73 20 56 41 4c 55 45 53 28 32 2c 20 27 69 6e 70 s VALUES(2, 'inp
07c0: 75 74 27 29 3b 22 0a 09 20 22 49 4e 53 45 52 54 ut');".. "INSERT
07d0: 20 49 4e 54 4f 20 74 79 70 65 73 20 56 41 4c 55 INTO types VALU
07e0: 45 53 28 33 2c 20 27 6f 75 74 70 75 74 27 29 3b ES(3, 'output');
07f0: 22 0a 09 20 22 49 4e 53 45 52 54 20 49 4e 54 4f ".. "INSERT INTO
0800: 20 74 79 70 65 73 20 56 41 4c 55 45 53 28 34 2c types VALUES(4,
0810: 20 27 69 6e 6f 75 74 27 29 3b 22 0a 09 20 22 49 'inout');".. "I
0820: 4e 53 45 52 54 20 49 4e 54 4f 20 74 79 70 65 73 NSERT INTO types
0830: 20 56 41 4c 55 45 53 28 35 2c 20 27 70 77 72 27 VALUES(5, 'pwr'
0840: 29 3b 22 0a 09 20 22 50 52 41 47 4d 41 20 73 79 );".. "PRAGMA sy
0850: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 3b 22 29 nchronous=OFF;")
0860: 29 29 0a 0a 28 69 66 20 28 6e 6f 74 20 64 62 65 ))..(if (not dbe
0870: 78 69 73 74 73 29 28 6d 6b 2d 74 61 62 6c 65 73 xists)(mk-tables
0880: 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ))..;;==========
0890: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 ============.;;
08d0: 4e 45 54 4c 49 53 54 20 52 45 41 44 49 4e 47 0a NETLIST READING.
08e0: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
08f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0900: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0910: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0920: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 55 73 65 ========..;; Use
0930: 20 61 20 73 74 61 63 6b 20 74 6f 20 74 72 61 63 a stack to trac
0940: 6b 69 6e 67 20 73 74 61 74 65 0a 3b 3b 0a 28 64 king state.;;.(d
0950: 65 66 69 6e 65 20 6e 6c 64 62 3a 2a 73 74 61 63 efine nldb:*stac
0960: 6b 2a 20 28 6d 61 6b 65 2d 73 74 61 63 6b 29 29 k* (make-stack))
0970: 0a 0a 28 64 65 66 69 6e 65 20 28 6e 6c 64 62 3a ..(define (nldb:
0980: 72 65 61 64 2d 66 69 6c 65 73 20 66 6e 61 6d 65 read-files fname
0990: 73 29 20 3b 3b 20 72 65 61 64 20 69 6e 20 61 20 s) ;; read in a
09a0: 6c 69 73 74 20 6f 66 20 66 69 6c 65 73 0a 20 20 list of files.
09b0: 28 66 6f 72 2d 65 61 63 68 20 0a 20 20 20 28 6c (for-each . (l
09c0: 61 6d 62 64 61 20 28 66 6e 61 6d 65 29 0a 20 20 ambda (fname).
09d0: 20 20 20 28 69 66 20 28 66 69 6c 65 2d 65 78 69 (if (file-exi
09e0: 73 74 73 3f 20 66 6e 61 6d 65 29 0a 09 20 28 6e sts? fname).. (n
09f0: 6c 64 62 3a 72 65 61 64 2d 66 69 6c 65 20 66 6e ldb:read-file fn
0a00: 61 6d 65 29 29 29 0a 20 20 20 66 6e 61 6d 65 73 ame))). fnames
0a10: 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ))..;;==========
0a20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0a30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0a40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0a50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 ============.;;
0a60: 50 52 45 43 4f 4d 50 49 4c 45 44 20 52 45 47 45 PRECOMPILED REGE
0a70: 58 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d XS.;;===========
0a80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0a90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0aa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0ab0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 ===========..(de
0ac0: 66 69 6e 65 20 6e 6c 64 62 3a 65 73 63 61 70 65 fine nldb:escape
0ad0: 64 2d 6e 61 6d 65 20 20 20 20 20 28 72 65 67 65 d-name (rege
0ae0: 78 70 20 22 5e 5c 5c 73 2a 5c 5c 5c 5c 28 5b 5e xp "^\\s*\\\\([^
0af0: 5c 5c 73 5d 2b 29 5c 5c 73 2a 22 29 29 0a 28 64 \\s]+)\\s*")).(d
0b00: 65 66 69 6e 65 20 6e 6c 64 62 3a 74 72 61 69 6c efine nldb:trail
0b10: 69 6e 67 2d 67 61 72 62 61 67 65 20 28 72 65 67 ing-garbage (reg
0b20: 65 78 70 20 22 5e 5c 5c 73 2a 28 5b 5e 5c 5c 73 exp "^\\s*([^\\s
0b30: 2c 3b 5d 2b 29 5b 2c 3b 5c 5c 73 5d 2a 24 22 29 ,;]+)[,;\\s]*$")
0b40: 29 0a 28 64 65 66 69 6e 65 20 6e 6c 64 62 3a 6d ).(define nldb:m
0b50: 6f 64 75 6c 65 2d 70 69 6e 20 20 20 20 20 20 20 odule-pin
0b60: 28 72 65 67 65 78 70 20 22 5e 5c 5c 73 2a 28 5b (regexp "^\\s*([
0b70: 5e 5c 5c 73 5d 2b 29 5c 5c 73 2a 28 5b 2c 5c 5c ^\\s]+)\\s*([,\\
0b80: 73 5c 5c 29 5d 2a 29 22 29 29 0a 28 64 65 66 69 s\\)]*)")).(defi
0b90: 6e 65 20 6e 6c 64 62 3a 70 69 6e 73 2d 65 6e 64 ne nldb:pins-end
0ba0: 20 20 20 20 20 20 20 20 20 28 72 65 67 65 78 70 (regexp
0bb0: 20 22 5c 5c 29 5c 5c 73 2a 3b 22 29 29 0a 28 64 "\\)\\s*;")).(d
0bc0: 65 66 69 6e 65 20 6e 6c 64 62 3a 69 6e 70 75 74 efine nldb:input
0bd0: 2d 6f 75 74 70 75 74 20 20 20 20 20 28 72 65 67 -output (reg
0be0: 65 78 70 20 22 5c 5c 73 2a 28 69 6e 70 75 74 7c exp "\\s*(input|
0bf0: 6f 75 74 70 75 74 29 5c 5c 73 2b 28 5b 5e 5c 5c output)\\s+([^\\
0c00: 73 5d 2b 29 5b 5c 5c 73 3b 2c 5d 22 29 29 0a 0a s]+)[\\s;,]"))..
0c10: 3b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;;
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 mod
0c40: 6e 61 6d 65 20 69 6e 73 74 6e 61 6d 65 28 20 2e name instname( .
0c50: 5c 70 69 6e 6e 61 6d 65 5b 33 35 5d 20 28 5c 6e \pinname[35] (\n
0c60: 65 74 6e 61 6d 65 20 29 2c 0a 28 64 65 66 69 6e etname ),.(defin
0c70: 65 20 6e 6c 64 62 3a 69 6e 73 74 61 6e 63 65 20 e nldb:instance
0c80: 20 20 20 20 20 20 20 20 28 72 65 67 65 78 70 20 (regexp
0c90: 22 5e 5c 5c 73 2a 28 5b 5e 5c 5c 73 5d 2b 29 5c "^\\s*([^\\s]+)\
0ca0: 5c 73 2b 28 5b 5e 5c 5c 73 5d 2b 29 5c 5c 73 2a \s+([^\\s]+)\\s*
0cb0: 5c 5c 28 5c 5c 73 2a 5c 5c 2e 28 5b 5e 5c 5c 73 \\(\\s*\\.([^\\s
0cc0: 5d 2b 29 5c 5c 73 2a 5c 5c 28 5c 5c 73 2a 28 5b ]+)\\s*\\(\\s*([
0cd0: 5e 5c 5c 73 5d 2b 29 5c 5c 73 2a 5c 5c 29 5c 5c ^\\s]+)\\s*\\)\\
0ce0: 73 2a 2c 22 29 29 0a 28 64 65 66 69 6e 65 20 6e s*,")).(define n
0cf0: 6c 64 62 3a 69 6e 73 74 2d 63 6f 6e 6e 20 20 20 ldb:inst-conn
0d00: 20 20 20 20 20 28 72 65 67 65 78 70 20 22 5e 5c (regexp "^\
0d10: 5c 73 2a 5c 5c 2e 28 5b 5e 5c 5c 73 5d 2b 29 5c \s*\\.([^\\s]+)\
0d20: 5c 73 2a 5c 5c 28 5c 5c 73 2a 28 5b 5e 5c 5c 73 \s*\\(\\s*([^\\s
0d30: 5d 29 2b 5c 5c 73 2b 5c 5c 29 5c 5c 73 2a 28 5b ])+\\s+\\)\\s*([
0d40: 5c 5c 29 2c 3b 5d 2b 29 22 29 29 0a 0a 3b 3b 20 \\),;]+)"))..;;
0d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0d80: 6d 6f 64 75 6c 65 5f 6e 61 6d 65 20 20 20 20 20 module_name
0d90: 20 20 20 20 6e 65 74 6e 61 6d 65 20 28 6f 70 74 netname (opt
0da0: 29 0a 28 64 65 66 69 6e 65 20 6e 6c 64 62 3a 6d ).(define nldb:m
0db0: 6f 64 75 6c 65 2d 72 65 67 65 78 20 28 72 65 67 odule-regex (reg
0dc0: 65 78 70 20 22 5e 5c 5c 73 2a 6d 6f 64 75 6c 65 exp "^\\s*module
0dd0: 5c 5c 73 2b 28 5b 5e 5c 5c 73 5d 2b 29 5c 5c 73 \\s+([^\\s]+)\\s
0de0: 2a 5c 5c 28 5c 5c 73 2a 28 5b 5e 5c 5c 73 2c 5d *\\(\\s*([^\\s,]
0df0: 2b 5c 5c 73 2a 2c 7c 29 24 22 29 29 0a 0a 3b 3b +\\s*,|)$"))..;;
0e00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0e10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0e20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0e30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0e40: 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 4d 49 53 43 0a 3b ======.;; MISC.;
0e50: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
0e60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0e70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0e80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0e90: 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 61 70 70 6c =======..;; appl
0ea0: 79 20 72 65 67 65 78 20 61 6e 64 20 73 65 74 20 y regex and set
0eb0: 6e 6c 64 62 3a 6d 61 74 63 68 2d 76 61 6c 0a 28 nldb:match-val.(
0ec0: 64 65 66 69 6e 65 20 6e 6c 64 62 3a 6d 61 74 63 define nldb:matc
0ed0: 68 2d 76 61 6c 20 23 66 29 0a 28 64 65 66 69 6e h-val #f).(defin
0ee0: 65 20 28 6e 6c 64 62 3a 72 65 67 65 78 2d 6d 61 e (nldb:regex-ma
0ef0: 74 63 68 20 72 20 6c 29 0a 20 20 28 6c 65 74 20 tch r l). (let
0f00: 28 28 6d 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 ((m (string-matc
0f10: 68 20 72 20 6c 29 29 29 0a 20 20 20 20 28 73 65 h r l))). (se
0f20: 74 21 20 6e 6c 64 62 3a 6d 61 74 63 68 2d 76 61 t! nldb:match-va
0f30: 6c 20 6d 29 20 6d 29 29 0a 0a 3b 3b 20 73 74 6d l m) m))..;; stm
0f40: 74 20 63 61 6e 20 6f 6e 6c 79 20 72 65 74 75 72 t can only retur
0f50: 6e 20 2a 6f 6e 65 2a 20 76 61 6c 75 65 21 21 0a n *one* value!!.
0f60: 28 64 65 66 69 6e 65 20 28 6e 6c 64 62 3a 73 71 (define (nldb:sq
0f70: 6c 69 74 65 33 3a 67 65 74 2d 6f 6e 65 20 73 74 lite3:get-one st
0f80: 6d 74 20 2e 20 70 61 72 61 6d 73 29 0a 20 20 28 mt . params). (
0f90: 6c 65 74 20 28 28 73 71 6c 73 74 6d 74 20 28 73 let ((sqlstmt (s
0fa0: 71 6c 69 74 65 33 3a 70 72 65 70 61 72 65 20 64 qlite3:prepare d
0fb0: 62 20 73 74 6d 74 29 29 0a 09 28 72 65 73 75 6c b stmt))..(resul
0fc0: 74 20 20 23 66 29 29 0a 20 20 20 20 28 61 70 70 t #f)). (app
0fd0: 6c 79 20 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 ly sqlite3:for-e
0fe0: 61 63 68 2d 72 6f 77 0a 09 20 20 20 28 6c 61 6d ach-row.. (lam
0ff0: 62 64 61 20 28 78 29 0a 09 20 20 20 20 20 28 73 bda (x).. (s
1000: 65 74 21 20 72 65 73 75 6c 74 20 78 29 29 20 73 et! result x)) s
1010: 71 6c 73 74 6d 74 20 70 61 72 61 6d 73 29 0a 20 qlstmt params).
1020: 20 20 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 (sqlite3:fina
1030: 6c 69 7a 65 21 20 73 71 6c 73 74 6d 74 29 0a 20 lize! sqlstmt).
1040: 20 20 20 72 65 73 75 6c 74 29 29 0a 0a 3b 3b 3d result))..;;=
1050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1070: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1080: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1090: 3d 3d 3d 3d 3d 0a 3b 3b 20 43 41 43 48 45 0a 3b =====.;; CACHE.;
10a0: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
10b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
10c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
10d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
10e0: 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 =======..(define
10f0: 20 2a 63 61 63 68 65 2a 20 20 20 20 20 20 20 20 *cache*
1100: 20 20 20 20 20 28 6d 61 6b 65 2d 68 61 73 68 2d (make-hash-
1110: 74 61 62 6c 65 29 29 0a 28 64 65 66 69 6e 65 20 table)).(define
1120: 2a 6d 6f 64 75 6c 65 2d 6e 61 6d 65 2d 63 61 63 *module-name-cac
1130: 68 65 2a 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 he* (make-hash-t
1140: 61 62 6c 65 29 29 0a 0a 28 64 65 66 69 6e 65 20 able))..(define
1150: 28 63 61 63 68 65 2d 67 65 74 2d 6d 6f 64 75 6c (cache-get-modul
1160: 65 2d 68 61 73 68 20 6d 6f 64 75 6c 65 29 0a 20 e-hash module).
1170: 20 28 73 75 62 2d 68 61 73 68 2d 63 72 65 61 74 (sub-hash-creat
1180: 65 2d 67 65 74 20 2a 63 61 63 68 65 2a 20 6d 6f e-get *cache* mo
1190: 64 75 6c 65 29 29 0a 0a 28 64 65 66 69 6e 65 20 dule))..(define
11a0: 28 73 75 62 2d 68 61 73 68 2d 63 72 65 61 74 65 (sub-hash-create
11b0: 2d 67 65 74 20 73 75 62 68 61 73 68 20 6b 65 79 -get subhash key
11c0: 29 0a 20 20 28 6c 65 74 20 28 28 73 68 61 73 68 ). (let ((shash
11d0: 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 67 65 74 (hash-table-get
11e0: 2f 64 65 66 61 75 6c 74 20 73 75 62 68 61 73 68 /default subhash
11f0: 20 6b 65 79 29 29 29 0a 20 20 20 20 28 69 66 20 key))). (if
1200: 73 68 61 73 68 20 73 68 61 73 68 0a 09 28 6c 65 shash shash..(le
1210: 74 20 28 28 6e 65 77 68 20 28 6d 61 6b 65 2d 68 t ((newh (make-h
1220: 61 73 68 2d 74 61 62 6c 65 29 29 29 0a 09 20 20 ash-table)))..
1230: 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 (hash-table-set!
1240: 20 73 75 62 68 61 73 68 20 6b 65 79 20 6e 65 77 subhash key new
1250: 68 29 0a 09 20 20 6e 65 77 68 29 29 29 29 0a 0a h).. newh))))..
1260: 3b 3b 20 28 63 61 63 68 65 2d 73 65 74 21 20 22 ;; (cache-set! "
1270: 61 62 63 5f 61 64 64 65 72 22 20 27 70 69 6e 20 abc_adder" 'pin
1280: 22 61 64 64 72 69 6e 22 20 30 29 0a 28 64 65 66 "addrin" 0).(def
1290: 69 6e 65 20 28 63 61 63 68 65 2d 73 65 74 21 20 ine (cache-set!
12a0: 6d 6f 64 75 6c 65 20 6f 62 6a 74 79 70 65 20 6f module objtype o
12b0: 62 6a 6e 61 6d 65 20 76 61 6c 75 65 29 0a 20 20 bjname value).
12c0: 28 6c 65 74 2a 20 28 28 6d 68 61 73 68 20 28 63 (let* ((mhash (c
12d0: 61 63 68 65 2d 67 65 74 2d 6d 6f 64 75 6c 65 2d ache-get-module-
12e0: 68 61 73 68 20 6d 6f 64 75 6c 65 29 29 0a 09 20 hash module))..
12f0: 28 74 68 61 73 68 20 28 73 75 62 2d 68 61 73 68 (thash (sub-hash
1300: 2d 63 72 65 61 74 65 2d 67 65 74 20 6d 68 61 73 -create-get mhas
1310: 68 20 6f 62 6a 74 79 70 65 29 29 29 0a 20 20 20 h objtype))).
1320: 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 74 (hash-table-set
1330: 21 20 74 68 61 73 68 20 6f 62 6a 6e 61 6d 65 20 ! thash objname
1340: 76 61 6c 75 65 29 29 29 0a 0a 28 64 65 66 69 6e value)))..(defin
1350: 65 20 28 63 61 63 68 65 2d 72 65 66 20 6d 6f 64 e (cache-ref mod
1360: 75 6c 65 20 6f 62 6a 74 79 70 65 20 6f 62 6a 6e ule objtype objn
1370: 61 6d 65 29 0a 20 20 28 6c 65 74 20 28 28 6d 68 ame). (let ((mh
1380: 61 73 68 20 28 68 61 73 68 2d 74 61 62 6c 65 2d ash (hash-table-
1390: 72 65 66 2f 64 65 66 61 75 6c 74 20 2a 63 61 63 ref/default *cac
13a0: 68 65 2a 20 6d 6f 64 75 6c 65 29 29 29 0a 20 20 he* module))).
13b0: 20 20 28 69 66 20 6d 68 61 73 68 0a 09 28 6c 65 (if mhash..(le
13c0: 74 20 28 28 6f 68 61 73 68 20 28 68 61 73 68 2d t ((ohash (hash-
13d0: 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c table-ref/defaul
13e0: 74 20 6d 68 61 73 68 20 6f 62 6a 74 79 70 65 29 t mhash objtype)
13f0: 29 29 0a 09 20 20 28 69 66 20 6f 68 61 73 68 0a )).. (if ohash.
1400: 09 20 20 20 20 20 20 28 68 61 73 68 2d 74 61 62 . (hash-tab
1410: 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 6f le-ref/default o
1420: 68 61 73 68 20 6f 62 6a 6e 61 6d 65 29 0a 09 20 hash objname)..
1430: 20 20 20 20 20 23 66 29 29 0a 09 23 66 29 29 29 #f))..#f)))
1440: 0a 20 20 20 20 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d . .;;========
1450: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1460: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1470: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1480: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b ==============.;
1490: 3b 20 4e 41 4d 45 53 0a 3b 3b 3d 3d 3d 3d 3d 3d ; NAMES.;;======
14a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
14b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
14c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
14d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
14e0: 0a 0a 28 64 65 66 69 6e 65 20 6e 6c 64 62 3a 6e ..(define nldb:n
14f0: 61 6d 65 73 2d 68 61 73 68 20 28 6d 61 6b 65 2d ames-hash (make-
1500: 68 61 73 68 2d 74 61 62 6c 65 29 29 0a 0a 3b 3b hash-table))..;;
1510: 20 61 6c 77 61 79 73 20 73 75 63 65 73 73 66 75 always sucessfu
1520: 6c 2e 20 69 6e 73 65 72 74 73 20 6e 61 6d 65 20 l. inserts name
1530: 69 66 20 6e 6f 74 20 66 6f 75 6e 64 0a 28 64 65 if not found.(de
1540: 66 69 6e 65 20 28 6e 6c 64 62 3a 67 65 74 2d 6e fine (nldb:get-n
1550: 61 6d 65 2d 69 64 20 6e 61 6d 65 29 0a 20 20 28 ame-id name). (
1560: 6c 65 74 20 28 28 63 61 63 68 65 64 2d 69 64 20 let ((cached-id
1570: 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f (hash-table-ref/
1580: 64 65 66 61 75 6c 74 20 6e 6c 64 62 3a 6e 61 6d default nldb:nam
1590: 65 73 2d 68 61 73 68 20 6e 61 6d 65 20 23 66 29 es-hash name #f)
15a0: 29 29 0a 20 20 20 20 28 69 66 20 63 61 63 68 65 )). (if cache
15b0: 64 2d 69 64 20 63 61 63 68 65 64 2d 69 64 0a 09 d-id cached-id..
15c0: 28 6c 65 74 20 28 28 69 64 20 28 6e 6c 64 62 3a (let ((id (nldb:
15d0: 73 71 6c 69 74 65 33 3a 67 65 74 2d 6f 6e 65 20 sqlite3:get-one
15e0: 22 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 "SELECT id FROM
15f0: 6e 61 6d 65 73 20 57 48 45 52 45 20 6e 61 6d 65 names WHERE name
1600: 3d 3f 3b 22 20 6e 61 6d 65 29 29 29 0a 09 20 20 =?;" name)))..
1610: 28 69 66 20 69 64 0a 09 20 20 20 20 20 20 28 62 (if id.. (b
1620: 65 67 69 6e 0a 09 09 28 68 61 73 68 2d 74 61 62 egin...(hash-tab
1630: 6c 65 2d 73 65 74 21 20 6e 6c 64 62 3a 6e 61 6d le-set! nldb:nam
1640: 65 73 2d 68 61 73 68 20 6e 61 6d 65 20 69 64 20 es-hash name id
1650: 29 0a 09 09 69 64 29 0a 09 20 20 20 20 20 20 28 )...id).. (
1660: 62 65 67 69 6e 0a 09 09 28 73 71 6c 69 74 65 33 begin...(sqlite3
1670: 3a 65 78 65 63 20 64 62 20 22 49 4e 53 45 52 54 :exec db "INSERT
1680: 20 49 4e 54 4f 20 6e 61 6d 65 73 20 28 6e 61 6d INTO names (nam
1690: 65 29 20 56 41 4c 55 45 53 20 28 3f 29 3b 22 20 e) VALUES (?);"
16a0: 6e 61 6d 65 29 0a 09 09 28 6e 6c 64 62 3a 67 65 name)...(nldb:ge
16b0: 74 2d 6e 61 6d 65 2d 69 64 20 6e 61 6d 65 29 29 t-name-id name))
16c0: 29 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 )))))..(define (
16d0: 6e 6c 64 62 3a 63 6c 65 61 6e 2d 6e 61 6d 65 20 nldb:clean-name
16e0: 6e 61 6d 65 29 0a 20 20 28 69 66 20 28 6e 6c 64 name). (if (nld
16f0: 62 3a 72 65 67 65 78 2d 6d 61 74 63 68 20 6e 6c b:regex-match nl
1700: 64 62 3a 65 73 63 61 70 65 64 2d 6e 61 6d 65 20 db:escaped-name
1710: 6e 61 6d 65 29 20 3b 3b 20 70 72 6f 63 65 73 73 name) ;; process
1720: 20 65 73 63 61 70 65 64 20 69 64 65 6e 74 69 66 escaped identif
1730: 69 65 72 73 0a 20 20 20 20 20 20 28 6c 69 73 74 iers. (list
1740: 2d 72 65 66 20 6e 6c 64 62 3a 6d 61 74 63 68 2d -ref nldb:match-
1750: 76 61 6c 20 31 29 0a 20 20 20 20 20 20 28 69 66 val 1). (if
1760: 20 28 6e 6c 64 62 3a 72 65 67 65 78 2d 6d 61 74 (nldb:regex-mat
1770: 63 68 20 6e 6c 64 62 3a 74 72 61 69 6c 69 6e 67 ch nldb:trailing
1780: 2d 67 61 72 62 61 67 65 20 6e 61 6d 65 29 0a 09 -garbage name)..
1790: 20 20 28 6c 69 73 74 2d 72 65 66 20 6e 6c 64 62 (list-ref nldb
17a0: 3a 6d 61 74 63 68 2d 76 61 6c 20 31 29 0a 09 20 :match-val 1)..
17b0: 20 6e 61 6d 65 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d name)))..;;====
17c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
17d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
17e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
17f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1800: 3d 3d 0a 3b 3b 20 4d 4f 44 55 4c 45 53 0a 3b 3b ==.;; MODULES.;;
1810: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1820: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1830: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1840: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1850: 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 61 64 64 20 61 ======..;; add a
1860: 20 6d 6f 64 75 6c 65 20 61 6e 64 20 72 65 74 75 module and retu
1870: 72 6e 20 69 74 73 20 69 64 2e 0a 28 64 65 66 69 rn its id..(defi
1880: 6e 65 20 28 6e 6c 64 62 3a 67 65 74 2d 6d 6f 64 ne (nldb:get-mod
1890: 75 6c 65 2d 69 64 20 6e 61 6d 65 2d 69 64 29 0a ule-id name-id).
18a0: 20 20 28 6c 65 74 20 28 28 69 64 20 20 28 6e 6c (let ((id (nl
18b0: 64 62 3a 73 71 6c 69 74 65 33 3a 67 65 74 2d 6f db:sqlite3:get-o
18c0: 6e 65 20 0a 09 20 20 20 20 20 20 22 53 45 4c 45 ne .. "SELE
18d0: 43 54 20 69 64 20 46 52 4f 4d 20 6d 6f 64 75 6c CT id FROM modul
18e0: 65 73 20 57 48 45 52 45 20 6e 61 6d 65 5f 69 64 es WHERE name_id
18f0: 3d 3f 3b 22 20 6e 61 6d 65 2d 69 64 29 29 29 0a =?;" name-id))).
1900: 20 20 20 20 28 69 66 20 69 64 20 69 64 0a 09 28 (if id id..(
1910: 62 65 67 69 6e 0a 09 20 20 28 6e 6c 64 62 3a 69 begin.. (nldb:i
1920: 6e 73 65 72 74 2d 6d 6f 64 75 6c 65 20 6e 61 6d nsert-module nam
1930: 65 2d 69 64 29 0a 09 20 20 28 6e 6c 64 62 3a 67 e-id).. (nldb:g
1940: 65 74 2d 6d 6f 64 75 6c 65 2d 69 64 20 6e 61 6d et-module-id nam
1950: 65 2d 69 64 29 29 29 29 29 20 3b 3b 20 6e 6f 77 e-id))))) ;; now
1960: 20 72 65 74 72 69 65 76 65 20 61 6e 64 20 72 65 retrieve and re
1970: 74 75 72 6e 20 74 68 65 20 69 64 0a 0a 3b 3b 20 turn the id..;;
1980: 6e 6f 74 20 73 61 66 65 20 74 6f 20 75 73 65 20 not safe to use
1990: 6f 75 74 73 69 64 65 20 6f 66 20 67 65 74 2d 6d outside of get-m
19a0: 6f 64 75 6c 65 2d 69 64 20 2d 20 63 6f 75 6c 64 odule-id - could
19b0: 20 61 64 64 20 64 75 70 6c 69 63 61 74 65 73 0a add duplicates.
19c0: 28 64 65 66 69 6e 65 20 28 6e 6c 64 62 3a 69 6e (define (nldb:in
19d0: 73 65 72 74 2d 6d 6f 64 75 6c 65 20 6e 61 6d 65 sert-module name
19e0: 2d 69 64 29 0a 20 20 28 73 71 6c 69 74 65 33 3a -id). (sqlite3:
19f0: 65 78 65 63 20 64 62 20 22 49 4e 53 45 52 54 20 exec db "INSERT
1a00: 49 4e 54 4f 20 6d 6f 64 75 6c 65 73 20 28 6e 61 INTO modules (na
1a10: 6d 65 5f 69 64 29 20 56 41 4c 55 45 53 20 28 3f me_id) VALUES (?
1a20: 29 3b 22 20 6e 61 6d 65 2d 69 64 29 29 0a 0a 3b );" name-id))..;
1a30: 3b 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 73 70 61 ; module namespa
1a40: 63 65 20 69 73 20 75 6e 69 71 75 65 20 73 6f 20 ce is unique so
1a50: 74 68 69 73 20 69 73 20 6f 6b 2c 20 73 68 6f 75 this is ok, shou
1a60: 6c 64 20 63 68 65 63 6b 20 66 6f 72 20 72 65 64 ld check for red
1a70: 65 66 69 6e 69 6e 67 20 74 68 6f 75 67 68 2e 0a efining though..
1a80: 28 64 65 66 69 6e 65 20 28 6e 6c 64 62 3a 67 65 (define (nldb:ge
1a90: 74 2d 6d 6f 64 75 6c 65 2d 62 79 2d 6e 61 6d 65 t-module-by-name
1aa0: 20 6e 61 6d 65 29 0a 20 20 28 6c 65 74 20 28 28 name). (let ((
1ab0: 6d 6f 64 75 6c 65 2d 69 64 20 28 68 61 73 68 2d module-id (hash-
1ac0: 74 61 62 6c 65 2d 72 65 66 20 2a 6d 6f 64 75 6c table-ref *modul
1ad0: 65 2d 6e 61 6d 65 2d 63 61 63 68 65 2a 20 6e 61 e-name-cache* na
1ae0: 6d 65 29 29 29 0a 20 20 20 20 28 69 66 20 6d 6f me))). (if mo
1af0: 64 75 6c 65 2d 69 64 20 6d 6f 64 75 6c 65 2d 69 dule-id module-i
1b00: 64 0a 09 28 6c 65 74 20 28 28 6d 69 64 20 28 6e d..(let ((mid (n
1b10: 6c 64 62 3a 67 65 74 2d 6d 6f 64 75 6c 65 2d 69 ldb:get-module-i
1b20: 64 20 28 6e 6c 64 62 3a 67 65 74 2d 6e 61 6d 65 d (nldb:get-name
1b30: 2d 69 64 20 6e 61 6d 65 29 29 29 29 0a 09 20 20 -id name))))..
1b40: 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 (hash-table-set!
1b50: 20 2a 6d 6f 64 75 6c 65 2d 6e 61 6d 65 2d 63 61 *module-name-ca
1b60: 63 68 65 2a 20 6e 61 6d 65 20 6d 69 64 29 29 29 che* name mid)))
1b70: 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ))..;;==========
1b80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1b90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1ba0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1bb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 ============.;;
1bc0: 50 49 4e 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d PINS.;;=========
1bd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1be0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1bf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 =============..(
1c10: 64 65 66 69 6e 65 20 28 6e 6c 64 62 3a 67 65 74 define (nldb:get
1c20: 2d 70 69 6e 2d 69 64 20 6d 6f 64 75 6c 65 2d 69 -pin-id module-i
1c30: 64 20 6e 61 6d 65 2d 69 64 29 0a 20 20 28 6e 6c d name-id). (nl
1c40: 64 62 3a 73 71 6c 69 74 65 33 3a 67 65 74 2d 6f db:sqlite3:get-o
1c50: 6e 65 20 0a 20 20 20 28 73 74 72 69 6e 67 2d 61 ne . (string-a
1c60: 70 70 65 6e 64 20 22 53 45 4c 45 43 54 20 69 64 ppend "SELECT id
1c70: 20 46 52 4f 4d 20 70 69 6e 73 20 57 48 45 52 45 FROM pins WHERE
1c80: 20 6d 6f 64 75 6c 65 5f 69 64 3d 3f 20 41 4e 44 module_id=? AND
1c90: 20 6e 61 6d 65 5f 69 64 3d 3f 3b 22 29 20 0a 20 name_id=?;") .
1ca0: 20 20 6d 6f 64 75 6c 65 2d 69 64 20 6e 61 6d 65 module-id name
1cb0: 2d 69 64 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 -id))..(define (
1cc0: 6e 6c 64 62 3a 61 64 64 2d 70 69 6e 20 6d 6f 64 nldb:add-pin mod
1cd0: 75 6c 65 2d 69 64 20 6e 61 6d 65 2d 69 64 20 74 ule-id name-id t
1ce0: 79 70 65 2d 69 64 29 0a 20 20 28 6c 65 74 20 28 ype-id). (let (
1cf0: 28 70 69 6e 2d 69 64 20 28 6e 6c 64 62 3a 67 65 (pin-id (nldb:ge
1d00: 74 2d 70 69 6e 2d 69 64 20 6d 6f 64 75 6c 65 2d t-pin-id module-
1d10: 69 64 20 6e 61 6d 65 2d 69 64 29 29 29 0a 20 20 id name-id))).
1d20: 20 20 28 69 66 20 70 69 6e 2d 69 64 20 70 69 6e (if pin-id pin
1d30: 2d 69 64 0a 09 28 62 65 67 69 6e 09 0a 09 20 20 -id..(begin...
1d40: 28 6e 6c 64 62 3a 69 6e 73 65 72 74 2d 70 69 6e (nldb:insert-pin
1d50: 20 6d 6f 64 75 6c 65 2d 69 64 20 6e 61 6d 65 2d module-id name-
1d60: 69 64 20 74 79 70 65 2d 69 64 29 0a 09 20 20 28 id type-id).. (
1d70: 6e 6c 64 62 3a 67 65 74 2d 70 69 6e 2d 69 64 20 nldb:get-pin-id
1d80: 6d 6f 64 75 6c 65 2d 69 64 20 6e 61 6d 65 2d 69 module-id name-i
1d90: 64 29 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 d)))))..(define
1da0: 28 6e 6c 64 62 3a 69 6e 73 65 72 74 2d 70 69 6e (nldb:insert-pin
1db0: 20 6d 6f 64 75 6c 65 2d 69 64 20 6e 61 6d 65 2d module-id name-
1dc0: 69 64 20 74 79 70 65 2d 69 64 29 0a 20 20 28 73 id type-id). (s
1dd0: 71 6c 69 74 65 33 3a 65 78 65 63 20 64 62 20 22 qlite3:exec db "
1de0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 70 69 6e 73 INSERT INTO pins
1df0: 20 28 6d 6f 64 75 6c 65 5f 69 64 2c 6e 61 6d 65 (module_id,name
1e00: 5f 69 64 2c 74 79 70 65 5f 69 64 29 20 56 41 4c _id,type_id) VAL
1e10: 55 45 53 20 28 3f 2c 3f 2c 3f 29 3b 22 0a 09 09 UES (?,?,?);"...
1e20: 6d 6f 64 75 6c 65 2d 69 64 20 6e 61 6d 65 2d 69 module-id name-i
1e30: 64 20 28 69 66 20 74 79 70 65 2d 69 64 20 74 79 d (if type-id ty
1e40: 70 65 2d 69 64 20 30 29 29 29 0a 0a 28 64 65 66 pe-id 0)))..(def
1e50: 69 6e 65 20 28 6e 6c 64 62 3a 73 65 74 2d 70 69 ine (nldb:set-pi
1e60: 6e 2d 64 69 72 65 63 74 69 6f 6e 20 70 69 6e 2d n-direction pin-
1e70: 69 64 20 64 69 72 65 63 74 69 6f 6e 29 0a 20 20 id direction).
1e80: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 20 64 62 (sqlite3:exec db
1e90: 20 22 55 50 44 41 54 45 20 70 69 6e 73 20 53 45 "UPDATE pins SE
1ea0: 54 20 74 79 70 65 5f 69 64 3d 28 53 45 4c 45 43 T type_id=(SELEC
1eb0: 54 20 69 64 20 46 52 4f 4d 20 74 79 70 65 73 20 T id FROM types
1ec0: 57 48 45 52 45 20 74 79 70 65 3d 3f 29 20 57 48 WHERE type=?) WH
1ed0: 45 52 45 20 69 64 3d 3f 3b 22 20 64 69 72 65 63 ERE id=?;" direc
1ee0: 74 69 6f 6e 20 70 69 6e 2d 69 64 29 29 0a 0a 28 tion pin-id))..(
1ef0: 64 65 66 69 6e 65 20 28 6e 6c 64 62 3a 73 65 74 define (nldb:set
1f00: 2d 70 69 6e 2d 6e 65 74 20 70 69 6e 2d 69 64 20 -pin-net pin-id
1f10: 6e 65 74 2d 69 64 29 0a 20 20 28 73 71 6c 69 74 net-id). (sqlit
1f20: 65 33 3a 65 78 65 63 20 64 62 20 22 55 50 44 41 e3:exec db "UPDA
1f30: 54 45 20 70 69 6e 73 20 53 45 54 20 6e 65 74 5f TE pins SET net_
1f40: 69 64 3d 3f 20 57 48 45 52 45 20 69 64 3d 3f 3b id=? WHERE id=?;
1f50: 22 20 6e 65 74 2d 69 64 20 70 69 6e 2d 69 64 29 " net-id pin-id)
1f60: 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d )..;;===========
1f70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1f80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1f90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 43 4f 4e =========.;; CON
1fb0: 4e 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d NS.;;===========
1fc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1fd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1fe0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1ff0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 ===========..(de
2000: 66 69 6e 65 20 28 6e 6c 64 62 3a 67 65 74 2d 63 fine (nldb:get-c
2010: 6f 6e 6e 2d 69 64 20 69 6e 73 74 2d 69 64 20 70 onn-id inst-id p
2020: 69 6e 2d 69 64 29 0a 20 20 3b 3b 20 28 69 66 20 in-id). ;; (if
2030: 28 6e 6f 74 20 28 61 6e 64 20 69 6e 73 74 2d 69 (not (and inst-i
2040: 64 20 70 69 6e 2d 69 64 29 29 28 70 72 69 6e 74 d pin-id))(print
2050: 20 22 45 52 52 4f 52 3a 20 6e 6c 64 62 3a 67 65 "ERROR: nldb:ge
2060: 74 2d 63 6f 6e 6e 2d 69 64 20 63 61 6c 6c 65 64 t-conn-id called
2070: 20 77 69 74 68 20 62 61 64 20 70 61 72 61 6d 73 with bad params
2080: 3a 20 69 6e 73 74 2d 69 64 20 22 20 69 6e 73 74 : inst-id " inst
2090: 2d 69 64 20 22 20 70 69 6e 2d 69 64 20 22 20 70 -id " pin-id " p
20a0: 69 6e 2d 69 64 29 0a 20 20 28 6e 6c 64 62 3a 73 in-id). (nldb:s
20b0: 71 6c 69 74 65 33 3a 67 65 74 2d 6f 6e 65 20 20 qlite3:get-one
20c0: 22 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 "SELECT id FROM
20d0: 63 6f 6e 6e 73 20 57 48 45 52 45 20 69 6e 73 74 conns WHERE inst
20e0: 5f 69 64 3d 3f 20 41 4e 44 20 70 69 6e 5f 69 64 _id=? AND pin_id
20f0: 3d 3f 3b 22 20 69 6e 73 74 2d 69 64 20 70 69 6e =?;" inst-id pin
2100: 2d 69 64 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 -id))..(define (
2110: 6e 6c 64 62 3a 61 64 64 2d 63 6f 6e 6e 20 69 6e nldb:add-conn in
2120: 73 74 2d 69 64 20 70 69 6e 2d 69 64 20 6e 65 74 st-id pin-id net
2130: 2d 69 64 29 0a 20 20 3b 3b 20 20 28 69 66 20 28 -id). ;; (if (
2140: 6e 6f 74 20 28 61 6e 64 20 69 6e 73 74 2d 69 64 not (and inst-id
2150: 20 70 69 6e 2d 69 64 20 6e 65 74 2d 69 64 29 29 pin-id net-id))
2160: 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 6e (print "ERROR: n
2170: 6c 64 62 3a 61 64 64 2d 63 6f 6e 6e 20 63 61 6c ldb:add-conn cal
2180: 6c 65 64 20 77 69 74 68 20 62 61 64 20 70 61 72 led with bad par
2190: 61 6d 73 3a 20 69 6e 73 74 2d 69 64 20 22 20 69 ams: inst-id " i
21a0: 6e 73 74 2d 69 64 20 22 20 70 69 6e 2d 69 64 20 nst-id " pin-id
21b0: 22 20 70 69 6e 2d 69 64 20 22 20 6e 65 74 2d 69 " pin-id " net-i
21c0: 64 20 22 20 6e 65 74 2d 69 64 29 0a 20 20 28 6c d " net-id). (l
21d0: 65 74 20 28 28 63 6f 6e 6e 2d 69 64 20 28 6e 6c et ((conn-id (nl
21e0: 64 62 3a 67 65 74 2d 63 6f 6e 6e 2d 69 64 20 69 db:get-conn-id i
21f0: 6e 73 74 2d 69 64 20 70 69 6e 2d 69 64 29 29 29 nst-id pin-id)))
2200: 0a 20 20 20 20 28 69 66 20 63 6f 6e 6e 2d 69 64 . (if conn-id
2210: 20 63 6f 6e 6e 2d 69 64 0a 09 28 62 65 67 69 6e conn-id..(begin
2220: 09 0a 09 20 20 28 6e 6c 64 62 3a 69 6e 73 65 72 ... (nldb:inser
2230: 74 2d 63 6f 6e 6e 20 69 6e 73 74 2d 69 64 20 70 t-conn inst-id p
2240: 69 6e 2d 69 64 20 6e 65 74 2d 69 64 29 0a 09 20 in-id net-id)..
2250: 20 28 6e 6c 64 62 3a 67 65 74 2d 63 6f 6e 6e 2d (nldb:get-conn-
2260: 69 64 20 69 6e 73 74 2d 69 64 20 70 69 6e 2d 69 id inst-id pin-i
2270: 64 29 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 d)))))..(define
2280: 28 6e 6c 64 62 3a 69 6e 73 65 72 74 2d 63 6f 6e (nldb:insert-con
2290: 6e 20 69 6e 73 74 2d 69 64 20 70 69 6e 2d 69 64 n inst-id pin-id
22a0: 20 6e 65 74 2d 69 64 29 0a 20 20 3b 3b 20 20 28 net-id). ;; (
22b0: 69 66 20 28 6e 6f 74 20 28 61 6e 64 20 69 6e 73 if (not (and ins
22c0: 74 2d 69 64 20 70 69 6e 2d 69 64 20 6e 65 74 2d t-id pin-id net-
22d0: 69 64 29 29 28 70 72 69 6e 74 20 22 45 52 52 4f id))(print "ERRO
22e0: 52 3a 20 6e 6c 64 62 3a 69 6e 73 65 72 74 2d 63 R: nldb:insert-c
22f0: 6f 6e 6e 20 63 61 6c 6c 65 64 20 77 69 74 68 20 onn called with
2300: 62 61 64 20 70 61 72 61 6d 73 3a 20 69 6e 73 74 bad params: inst
2310: 2d 69 64 20 22 20 69 6e 73 74 2d 69 64 20 22 20 -id " inst-id "
2320: 70 69 6e 2d 69 64 20 22 20 70 69 6e 2d 69 64 20 pin-id " pin-id
2330: 22 20 6e 65 74 2d 69 64 20 22 20 6e 65 74 2d 69 " net-id " net-i
2340: 64 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 d). (sqlite3:ex
2350: 65 63 20 64 62 20 22 49 4e 53 45 52 54 20 49 4e ec db "INSERT IN
2360: 54 4f 20 63 6f 6e 6e 73 20 28 69 6e 73 74 5f 69 TO conns (inst_i
2370: 64 2c 70 69 6e 5f 69 64 2c 6e 65 74 5f 69 64 29 d,pin_id,net_id)
2380: 20 56 41 4c 55 45 53 20 28 3f 2c 3f 2c 3f 29 3b VALUES (?,?,?);
2390: 22 0a 09 09 69 6e 73 74 2d 69 64 20 70 69 6e 2d "...inst-id pin-
23a0: 69 64 20 6e 65 74 2d 69 64 20 29 29 0a 0a 3b 3b id net-id ))..;;
23b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
23c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
23d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
23e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
23f0: 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 4e 45 54 0a 3b 3b ======.;; NET.;;
2400: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2410: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2420: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2430: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2440: 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 ======..(define
2450: 28 6e 6c 64 62 3a 67 65 74 2d 6e 65 74 2d 69 64 (nldb:get-net-id
2460: 20 6d 6f 64 75 6c 65 2d 69 64 20 6e 61 6d 65 2d module-id name-
2470: 69 64 29 0a 20 20 28 6e 6c 64 62 3a 73 71 6c 69 id). (nldb:sqli
2480: 74 65 33 3a 67 65 74 2d 6f 6e 65 20 22 53 45 4c te3:get-one "SEL
2490: 45 43 54 20 69 64 20 46 52 4f 4d 20 6e 65 74 73 ECT id FROM nets
24a0: 20 57 48 45 52 45 20 6e 61 6d 65 5f 69 64 3d 3f WHERE name_id=?
24b0: 3b 22 20 6e 61 6d 65 2d 69 64 29 29 0a 0a 28 64 ;" name-id))..(d
24c0: 65 66 69 6e 65 20 28 6e 6c 64 62 3a 61 64 64 2d efine (nldb:add-
24d0: 6e 65 74 20 6d 6f 64 75 6c 65 2d 69 64 20 6e 61 net module-id na
24e0: 6d 65 2d 69 64 29 0a 20 20 28 6c 65 74 20 28 28 me-id). (let ((
24f0: 6e 65 74 2d 69 64 20 28 6e 6c 64 62 3a 67 65 74 net-id (nldb:get
2500: 2d 6e 65 74 2d 69 64 20 6d 6f 64 75 6c 65 2d 69 -net-id module-i
2510: 64 20 6e 61 6d 65 2d 69 64 29 29 29 0a 20 20 20 d name-id))).
2520: 20 28 69 66 20 6e 65 74 2d 69 64 20 6e 65 74 2d (if net-id net-
2530: 69 64 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 6e id..(begin.. (n
2540: 6c 64 62 3a 69 6e 73 65 72 74 2d 6e 65 74 20 6d ldb:insert-net m
2550: 6f 64 75 6c 65 2d 69 64 20 6e 61 6d 65 2d 69 64 odule-id name-id
2560: 29 0a 09 20 20 28 6e 6c 64 62 3a 67 65 74 2d 6e ).. (nldb:get-n
2570: 65 74 2d 69 64 20 6d 6f 64 75 6c 65 2d 69 64 20 et-id module-id
2580: 6e 61 6d 65 2d 69 64 29 29 29 29 29 0a 0a 28 64 name-id)))))..(d
2590: 65 66 69 6e 65 20 28 6e 6c 64 62 3a 69 6e 73 65 efine (nldb:inse
25a0: 72 74 2d 6e 65 74 20 6d 6f 64 75 6c 65 2d 69 64 rt-net module-id
25b0: 20 6e 61 6d 65 2d 69 64 29 0a 20 20 28 73 71 6c name-id). (sql
25c0: 69 74 65 33 3a 65 78 65 63 20 64 62 20 22 49 4e ite3:exec db "IN
25d0: 53 45 52 54 20 49 4e 54 4f 20 6e 65 74 73 20 28 SERT INTO nets (
25e0: 6d 6f 64 75 6c 65 5f 69 64 2c 6e 61 6d 65 5f 69 module_id,name_i
25f0: 64 29 20 56 41 4c 55 45 53 28 3f 2c 3f 29 3b 22 d) VALUES(?,?);"
2600: 20 6d 6f 64 75 6c 65 2d 69 64 20 6e 61 6d 65 2d module-id name-
2610: 69 64 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d id))..;;========
2620: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2630: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2640: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2650: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b ==============.;
2660: 3b 20 49 4e 53 54 41 4e 43 45 53 0a 3b 3b 3d 3d ; INSTANCES.;;==
2670: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2680: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2690: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
26a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
26b0: 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 6e ====..(define (n
26c0: 6c 64 62 3a 67 65 74 2d 69 6e 73 74 2d 69 64 20 ldb:get-inst-id
26d0: 70 61 72 65 6e 74 2d 69 64 20 6e 61 6d 65 2d 69 parent-id name-i
26e0: 64 29 0a 20 20 28 6e 6c 64 62 3a 73 71 6c 69 74 d). (nldb:sqlit
26f0: 65 33 3a 67 65 74 2d 6f 6e 65 20 22 53 45 4c 45 e3:get-one "SELE
2700: 43 54 20 69 64 20 46 52 4f 4d 20 69 6e 73 74 73 CT id FROM insts
2710: 20 57 48 45 52 45 20 70 61 72 65 6e 74 5f 69 64 WHERE parent_id
2720: 3d 3f 20 41 4e 44 20 6e 61 6d 65 5f 69 64 3d 3f =? AND name_id=?
2730: 3b 22 20 70 61 72 65 6e 74 2d 69 64 20 6e 61 6d ;" parent-id nam
2740: 65 2d 69 64 29 29 0a 0a 3b 3b 20 73 75 62 2d 6d e-id))..;; sub-m
2750: 6f 64 2d 69 64 20 3d 20 74 79 70 65 20 6f 66 20 od-id = type of
2760: 69 6e 73 74 61 6e 63 65 2c 20 70 61 72 65 6e 74 instance, parent
2770: 2d 69 64 20 3d 20 77 68 65 72 65 20 69 6e 73 74 -id = where inst
2780: 61 6e 74 69 61 74 65 64 0a 28 64 65 66 69 6e 65 antiated.(define
2790: 20 28 6e 6c 64 62 3a 61 64 64 2d 69 6e 73 74 20 (nldb:add-inst
27a0: 6d 6f 64 75 6c 65 2d 69 64 20 70 61 72 65 6e 74 module-id parent
27b0: 2d 69 64 20 6e 61 6d 65 2d 69 64 29 0a 20 20 28 -id name-id). (
27c0: 6c 65 74 20 28 28 69 6e 73 74 2d 69 64 20 28 6e let ((inst-id (n
27d0: 6c 64 62 3a 67 65 74 2d 69 6e 73 74 2d 69 64 20 ldb:get-inst-id
27e0: 70 61 72 65 6e 74 2d 69 64 20 6e 61 6d 65 2d 69 parent-id name-i
27f0: 64 29 29 29 20 3b 3b 20 70 61 72 65 6e 74 20 61 d))) ;; parent a
2800: 6e 64 20 6e 61 6d 65 20 61 72 65 20 65 6e 6f 75 nd name are enou
2810: 67 68 20 74 6f 20 69 64 65 6e 74 69 66 79 20 69 gh to identify i
2820: 74 0a 20 20 20 20 28 69 66 20 69 6e 73 74 2d 69 t. (if inst-i
2830: 64 20 69 6e 73 74 2d 69 64 0a 09 28 62 65 67 69 d inst-id..(begi
2840: 6e 0a 09 20 20 28 6e 6c 64 62 3a 69 6e 73 65 72 n.. (nldb:inser
2850: 74 2d 69 6e 73 74 20 6d 6f 64 75 6c 65 2d 69 64 t-inst module-id
2860: 20 70 61 72 65 6e 74 2d 69 64 20 6e 61 6d 65 2d parent-id name-
2870: 69 64 29 0a 09 20 20 28 6e 6c 64 62 3a 67 65 74 id).. (nldb:get
2880: 2d 69 6e 73 74 2d 69 64 20 70 61 72 65 6e 74 2d -inst-id parent-
2890: 69 64 20 6e 61 6d 65 2d 69 64 29 29 29 29 29 0a id name-id))))).
28a0: 0a 28 64 65 66 69 6e 65 20 28 6e 6c 64 62 3a 69 .(define (nldb:i
28b0: 6e 73 65 72 74 2d 69 6e 73 74 20 6d 6f 64 75 6c nsert-inst modul
28c0: 65 2d 69 64 20 70 61 72 65 6e 74 2d 69 64 20 6e e-id parent-id n
28d0: 61 6d 65 2d 69 64 29 0a 20 20 28 73 71 6c 69 74 ame-id). (sqlit
28e0: 65 33 3a 65 78 65 63 20 64 62 20 22 49 4e 53 45 e3:exec db "INSE
28f0: 52 54 20 49 4e 54 4f 20 69 6e 73 74 73 20 28 6d RT INTO insts (m
2900: 6f 64 75 6c 65 5f 69 64 2c 70 61 72 65 6e 74 5f odule_id,parent_
2910: 69 64 2c 6e 61 6d 65 5f 69 64 29 20 56 41 4c 55 id,name_id) VALU
2920: 45 53 28 3f 2c 3f 2c 3f 29 3b 22 20 6d 6f 64 75 ES(?,?,?);" modu
2930: 6c 65 2d 69 64 20 70 61 72 65 6e 74 2d 69 64 20 le-id parent-id
2940: 6e 61 6d 65 2d 69 64 29 29 0a 0a 3b 3b 3d 3d 3d name-id))..;;===
2950: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2960: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2970: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2980: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2990: 3d 3d 3d 0a 3b 3b 20 52 45 43 4f 52 44 20 46 4f ===.;; RECORD FO
29a0: 52 20 53 54 41 54 45 0a 3b 3b 3d 3d 3d 3d 3d 3d R STATE.;;======
29b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
29c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
29d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
29e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
29f0: 0a 0a 28 64 65 66 69 6e 65 20 2a 73 74 61 74 65 ..(define *state
2a00: 76 65 63 2a 20 28 6d 61 6b 65 2d 76 65 63 74 6f vec* (make-vecto
2a10: 72 20 35 29 29 0a 0a 28 64 65 66 69 6e 65 2d 69 r 5))..(define-i
2a20: 6e 6c 69 6e 65 20 28 63 75 72 72 2d 70 69 6e 2d nline (curr-pin-
2a30: 69 64 29 20 20 20 20 20 20 20 20 20 20 20 28 76 id) (v
2a40: 65 63 74 6f 72 2d 72 65 66 20 20 2a 73 74 61 74 ector-ref *stat
2a50: 65 76 65 63 2a 20 30 29 29 0a 28 64 65 66 69 6e evec* 0)).(defin
2a60: 65 2d 69 6e 6c 69 6e 65 20 28 63 75 72 72 2d 69 e-inline (curr-i
2a70: 6e 73 74 2d 69 64 29 20 20 20 20 20 20 20 20 20 nst-id)
2a80: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 20 2a 73 (vector-ref *s
2a90: 74 61 74 65 76 65 63 2a 20 31 29 29 0a 28 64 65 tatevec* 1)).(de
2aa0: 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 63 75 72 fine-inline (cur
2ab0: 72 2d 6d 6f 64 75 6c 65 2d 69 64 29 20 20 20 20 r-module-id)
2ac0: 20 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 (vector-ref
2ad0: 20 2a 73 74 61 74 65 76 65 63 2a 20 32 29 29 0a *statevec* 2)).
2ae0: 28 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 (define-inline (
2af0: 63 75 72 72 2d 69 6e 73 74 2d 6d 6f 64 75 6c 65 curr-inst-module
2b00: 2d 69 64 29 20 20 20 28 76 65 63 74 6f 72 2d 72 -id) (vector-r
2b10: 65 66 20 20 2a 73 74 61 74 65 76 65 63 2a 20 33 ef *statevec* 3
2b20: 29 29 0a 0a 28 64 65 66 69 6e 65 2d 69 6e 6c 69 ))..(define-inli
2b30: 6e 65 20 28 73 65 74 2d 63 75 72 72 2d 70 69 6e ne (set-curr-pin
2b40: 2d 69 64 21 20 20 20 20 20 20 20 20 20 69 64 29 -id! id)
2b50: 28 76 65 63 74 6f 72 2d 73 65 74 21 20 2a 73 74 (vector-set! *st
2b60: 61 74 65 76 65 63 2a 20 30 20 69 64 29 29 0a 28 atevec* 0 id)).(
2b70: 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 73 define-inline (s
2b80: 65 74 2d 63 75 72 72 2d 69 6e 73 74 2d 69 64 21 et-curr-inst-id!
2b90: 20 20 20 20 20 20 20 20 69 64 29 28 76 65 63 74 id)(vect
2ba0: 6f 72 2d 73 65 74 21 20 2a 73 74 61 74 65 76 65 or-set! *stateve
2bb0: 63 2a 20 31 20 69 64 29 29 0a 28 64 65 66 69 6e c* 1 id)).(defin
2bc0: 65 2d 69 6e 6c 69 6e 65 20 28 73 65 74 2d 63 75 e-inline (set-cu
2bd0: 72 72 2d 6d 6f 64 75 6c 65 2d 69 64 21 20 20 20 rr-module-id!
2be0: 20 20 20 69 64 29 28 76 65 63 74 6f 72 2d 73 65 id)(vector-se
2bf0: 74 21 20 2a 73 74 61 74 65 76 65 63 2a 20 32 20 t! *statevec* 2
2c00: 69 64 29 29 0a 28 64 65 66 69 6e 65 2d 69 6e 6c id)).(define-inl
2c10: 69 6e 65 20 28 73 65 74 2d 63 75 72 72 2d 69 6e ine (set-curr-in
2c20: 73 74 2d 6d 6f 64 75 6c 65 2d 69 64 21 20 69 64 st-module-id! id
2c30: 29 28 76 65 63 74 6f 72 2d 73 65 74 21 20 2a 73 )(vector-set! *s
2c40: 74 61 74 65 76 65 63 2a 20 33 20 69 64 29 29 0a tatevec* 3 id)).
2c50: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
2c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2c90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 46 49 4c =========.;; FIL
2ca0: 45 20 49 2f 4f 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d E I/O.;;========
2cb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2cc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2cd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2ce0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a ==============..
2cf0: 3b 3b 20 49 6e 69 74 69 61 6c 69 7a 61 74 69 6f ;; Initializatio
2d00: 6e 20 61 6e 64 20 73 75 70 70 6f 72 74 20 72 6f n and support ro
2d10: 75 74 69 6e 65 73 20 66 6f 72 20 6e 6c 64 62 3a utines for nldb:
2d20: 72 65 61 64 2d 66 69 6c 65 0a 28 73 74 61 63 6b read-file.(stack
2d30: 2d 70 75 73 68 21 20 6e 6c 64 62 3a 2a 73 74 61 -push! nldb:*sta
2d40: 63 6b 2a 20 27 73 74 61 72 74 29 0a 28 64 65 66 ck* 'start).(def
2d50: 69 6e 65 20 6e 6c 64 62 3a 65 73 63 2d 72 65 67 ine nldb:esc-reg
2d60: 65 78 20 20 28 72 65 67 65 78 70 20 22 5e 5c 5c ex (regexp "^\\
2d70: 5c 5c 28 5b 5e 5c 5c 73 5d 2a 29 5c 5c 73 2a 24 \\([^\\s]*)\\s*$
2d80: 22 29 20 29 0a 28 64 65 66 69 6e 65 20 28 6e 6c ") ).(define (nl
2d90: 64 62 3a 63 6c 65 61 6e 2d 69 64 65 6e 74 69 66 db:clean-identif
2da0: 69 65 72 20 74 6f 6b 65 6e 29 0a 20 20 28 6c 65 ier token). (le
2db0: 74 2a 20 28 28 74 20 20 20 28 63 61 72 20 74 6f t* ((t (car to
2dc0: 6b 65 6e 29 29 0a 09 20 28 76 20 20 20 28 63 61 ken)).. (v (ca
2dd0: 64 72 20 74 6f 6b 65 6e 29 29 0a 09 20 28 63 74 dr token)).. (ct
2de0: 6d 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 m (string-match
2df0: 6e 6c 64 62 3a 65 73 63 2d 72 65 67 65 78 20 76 nldb:esc-regex v
2e00: 29 29 29 0a 20 20 20 20 28 6c 69 73 74 20 27 69 ))). (list 'i
2e10: 64 65 6e 74 69 66 69 65 72 20 28 6c 69 73 74 2d dentifier (list-
2e20: 72 65 66 20 63 74 6d 20 31 29 29 29 29 0a 0a 0a ref ctm 1))))...
2e30: 28 64 65 66 69 6e 65 20 28 6e 6c 64 62 3a 72 65 (define (nldb:re
2e40: 61 64 2d 66 69 6c 65 20 66 6e 61 6d 65 29 0a 20 ad-file fname).
2e50: 20 28 6c 65 74 2a 20 28 28 69 6e 70 20 28 6f 70 (let* ((inp (op
2e60: 65 6e 2d 69 6e 70 75 74 2d 66 69 6c 65 20 66 6e en-input-file fn
2e70: 61 6d 65 29 29 0a 09 20 28 70 72 65 76 2d 73 74 ame)).. (prev-st
2e80: 61 74 65 20 23 66 29 29 0a 20 20 20 20 28 6c 65 ate #f)). (le
2e90: 78 65 72 2d 69 6e 69 74 20 27 70 6f 72 74 20 69 xer-init 'port i
2ea0: 6e 70 29 0a 20 20 20 20 28 6c 65 74 20 6c 6f 6f np). (let loo
2eb0: 70 20 28 28 74 6f 6b 65 6e 20 20 20 20 20 20 20 p ((token
2ec0: 20 20 20 28 6c 65 78 65 72 29 29 29 0a 20 20 20 (lexer))).
2ed0: 20 20 20 28 6c 65 74 20 28 28 74 6f 6b 65 6e 2d (let ((token-
2ee0: 74 79 70 65 20 28 63 61 72 20 74 6f 6b 65 6e 29 type (car token)
2ef0: 29 0a 09 20 20 20 20 28 74 6f 6b 65 6e 2d 76 61 ).. (token-va
2f00: 6c 20 20 28 63 61 64 72 20 74 6f 6b 65 6e 29 29 l (cadr token))
2f10: 0a 09 20 20 20 20 28 73 74 61 74 65 20 20 20 20 .. (state
2f20: 20 20 28 73 74 61 63 6b 2d 70 65 65 6b 20 68 65 (stack-peek he
2f30: 72 63 3a 2a 73 74 61 63 6b 2a 29 29 29 0a 09 28 rc:*stack*)))..(
2f40: 69 66 20 28 6e 6f 74 20 28 65 71 3f 20 70 72 65 if (not (eq? pre
2f50: 76 2d 73 74 61 74 65 20 73 74 61 74 65 29 29 0a v-state state)).
2f60: 09 20 20 20 20 28 62 65 67 69 6e 0a 09 20 20 20 . (begin..
2f70: 20 20 20 28 70 72 69 6e 74 20 22 73 74 61 74 65 (print "state
2f80: 3a 20 22 20 73 74 61 74 65 29 0a 09 20 20 20 20 : " state)..
2f90: 20 20 28 73 65 74 21 20 70 72 65 76 2d 73 74 61 (set! prev-sta
2fa0: 74 65 20 73 74 61 74 65 29 29 29 0a 09 28 63 61 te state)))..(ca
2fb0: 73 65 20 74 6f 6b 65 6e 2d 74 79 70 65 0a 09 20 se token-type..
2fc0: 20 28 27 65 6e 64 2d 6f 66 2d 69 6e 70 75 74 20 ('end-of-input
2fd0: 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 44 6f (print "Do
2fe0: 6e 65 22 29 28 63 6c 6f 73 65 2d 69 6e 70 75 74 ne")(close-input
2ff0: 2d 70 6f 72 74 20 69 6e 70 29 29 0a 09 20 20 28 -port inp)).. (
3000: 27 77 68 69 74 65 73 70 61 63 65 20 20 20 20 20 'whitespace
3010: 20 20 20 20 28 6c 6f 6f 70 20 28 6c 65 78 65 72 (loop (lexer
3020: 29 29 29 20 20 3b 3b 20 73 6b 69 70 20 77 68 69 ))) ;; skip whi
3030: 74 65 73 70 61 63 65 0a 09 20 20 28 27 63 6f 6d tespace.. ('com
3040: 6d 65 6e 74 2d 62 65 67 69 6e 20 20 20 20 20 20 ment-begin
3050: 0a 09 20 20 20 28 73 74 61 63 6b 2d 70 75 73 68 .. (stack-push
3060: 21 20 68 65 72 63 3a 2a 73 74 61 63 6b 2a 20 27 ! herc:*stack* '
3070: 63 6f 6d 6d 65 6e 74 20 29 0a 09 20 20 20 28 6c comment ).. (l
3080: 6f 6f 70 20 28 6c 65 78 65 72 29 29 29 0a 09 20 oop (lexer)))..
3090: 20 28 27 63 6f 6d 6d 65 6e 74 2d 65 6e 64 20 20 ('comment-end
30a0: 20 20 20 20 20 20 28 73 74 61 63 6b 2d 70 6f 70 (stack-pop
30b0: 21 20 68 65 72 63 3a 2a 73 74 61 63 6b 2a 29 28 ! herc:*stack*)(
30c0: 6c 6f 6f 70 20 28 6c 65 78 65 72 29 29 29 0a 09 loop (lexer)))..
30d0: 20 20 28 27 62 65 67 69 6e 20 20 20 20 20 20 20 ('begin
30e0: 20 20 20 20 20 20 20 28 73 74 61 63 6b 2d 70 75 (stack-pu
30f0: 73 68 21 20 68 65 72 63 3a 2a 73 74 61 63 6b 2a sh! herc:*stack*
3100: 20 27 62 65 67 69 6e 29 28 6c 6f 6f 70 20 28 6c 'begin)(loop (l
3110: 65 78 65 72 29 29 29 0a 09 20 20 28 27 65 6e 64 exer))).. ('end
3120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3130: 28 73 74 61 63 6b 2d 70 6f 70 21 20 68 65 72 63 (stack-pop! herc
3140: 3a 2a 73 74 61 63 6b 2a 29 28 6c 6f 6f 70 20 28 :*stack*)(loop (
3150: 6c 65 78 65 72 29 29 29 0a 09 20 20 28 27 63 65 lexer))).. ('ce
3160: 6c 6c 0a 09 20 20 20 28 63 61 73 65 20 73 74 61 ll.. (case sta
3170: 74 65 0a 09 20 20 20 20 20 28 27 62 65 67 69 6e te.. ('begin
3180: 0a 09 20 20 20 20 20 20 20 28 73 74 61 63 6b 2d .. (stack-
3190: 70 75 73 68 21 20 68 65 72 63 3a 2a 73 74 61 63 push! herc:*stac
31a0: 6b 2a 20 27 63 65 6c 6c 2d 6e 61 6d 65 29 0a 09 k* 'cell-name)..
31b0: 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 28 6c 65 (loop (le
31c0: 78 65 72 29 29 29 0a 09 20 20 20 20 20 28 65 6c xer))).. (el
31d0: 73 65 0a 09 20 20 20 20 20 20 28 6c 6f 6f 70 20 se.. (loop
31e0: 28 6c 65 78 65 72 29 29 29 29 29 0a 09 20 20 28 (lexer))))).. (
31f0: 27 70 6c 61 69 6e 69 64 65 6e 74 69 66 69 65 72 'plainidentifier
3200: 0a 09 20 20 20 28 63 61 73 65 20 73 74 61 74 65 .. (case state
3210: 0a 09 20 20 20 20 20 28 27 63 65 6c 6c 2d 6e 61 .. ('cell-na
3220: 6d 65 0a 0a 09 20 20 28 27 73 74 61 74 65 6d 65 me... ('stateme
3230: 6e 74 65 6e 64 20 20 20 20 20 20 20 28 73 74 61 ntend (sta
3240: 63 6b 2d 70 6f 70 21 20 6e 6c 64 62 3a 2a 73 74 ck-pop! nldb:*st
3250: 61 63 6b 2a 29 28 6c 6f 6f 70 20 28 6c 65 78 65 ack*)(loop (lexe
3260: 72 29 29 29 0a 09 20 20 28 27 65 6e 64 70 61 72 r))).. ('endpar
3270: 65 6e 20 20 20 20 20 20 20 20 20 20 20 28 73 74 en (st
3280: 61 63 6b 2d 70 6f 70 21 20 6e 6c 64 62 3a 2a 73 ack-pop! nldb:*s
3290: 74 61 63 6b 2a 29 28 6c 6f 6f 70 20 28 6c 65 78 tack*)(loop (lex
32a0: 65 72 29 29 29 0a 09 20 20 28 27 65 6e 64 6d 6f er))).. ('endmo
32b0: 64 75 6c 65 20 20 20 20 20 20 20 20 20 20 28 73 dule (s
32c0: 74 61 63 6b 2d 70 6f 70 21 20 6e 6c 64 62 3a 2a tack-pop! nldb:*
32d0: 73 74 61 63 6b 2a 29 28 6c 6f 6f 70 20 28 6c 65 stack*)(loop (le
32e0: 78 65 72 29 29 29 0a 0a 09 20 20 28 27 73 74 61 xer)))... ('sta
32f0: 72 74 70 61 72 65 6e 20 0a 09 20 20 20 28 63 61 rtparen .. (ca
3300: 73 65 20 73 74 61 74 65 0a 09 20 20 20 20 20 28 se state.. (
3310: 27 6d 6f 64 75 6c 65 2d 70 69 6e 73 20 20 20 20 'module-pins
3320: 20 28 6c 6f 6f 70 20 28 6c 65 78 65 72 29 29 29 (loop (lexer)))
3330: 0a 09 20 20 20 20 20 28 27 69 6e 73 74 2d 64 65 .. ('inst-de
3340: 66 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 28 f (loop (
3350: 6c 65 78 65 72 29 29 29 0a 09 20 20 20 20 20 28 lexer))).. (
3360: 27 69 6e 73 74 2d 63 6f 6e 6e 2d 64 65 66 20 20 'inst-conn-def
3370: 20 28 6c 6f 6f 70 20 28 6c 65 78 65 72 29 29 29 (loop (lexer)))
3380: 0a 09 20 20 20 20 20 28 27 70 69 6e 2d 6e 65 74 .. ('pin-net
3390: 20 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 28 (loop (
33a0: 6c 65 78 65 72 29 29 29 0a 09 20 20 20 20 20 28 lexer))).. (
33b0: 65 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 else
33c0: 20 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 (print "ERROR:
33d0: 44 69 64 6e 27 74 20 65 78 70 65 63 74 20 61 6e Didn't expect an
33e0: 20 6f 70 65 6e 20 70 61 72 65 6e 20 68 65 72 65 open paren here
33f0: 21 20 4c 69 6e 65 20 22 20 28 6c 65 78 65 72 2d ! Line " (lexer-
3400: 67 65 74 2d 6c 69 6e 65 29 29 29 29 29 0a 0a 09 get-line)))))...
3410: 20 20 28 27 63 6f 6d 6d 61 0a 09 20 20 20 28 63 ('comma.. (c
3420: 61 73 65 20 73 74 61 74 65 0a 09 20 20 20 20 20 ase state..
3430: 28 27 6d 6f 64 75 6c 65 2d 70 69 6e 73 20 20 20 ('module-pins
3440: 20 20 28 6c 6f 6f 70 20 28 6c 65 78 65 72 29 29 (loop (lexer))
3450: 29 0a 09 20 20 20 20 20 28 27 69 6e 70 75 74 2d ).. ('input-
3460: 70 69 6e 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 pin (loop
3470: 28 6c 65 78 65 72 29 29 29 0a 09 20 20 20 20 20 (lexer)))..
3480: 28 27 6f 75 74 70 75 74 2d 70 69 6e 20 20 20 20 ('output-pin
3490: 20 20 28 6c 6f 6f 70 20 28 6c 65 78 65 72 29 29 (loop (lexer))
34a0: 29 0a 09 20 20 20 20 20 28 27 77 69 72 65 20 20 ).. ('wire
34b0: 20 20 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 (loop
34c0: 28 6c 65 78 65 72 29 29 29 0a 09 20 20 20 20 20 (lexer)))..
34d0: 28 27 69 6e 73 74 2d 63 6f 6e 6e 2d 64 65 66 20 ('inst-conn-def
34e0: 20 20 28 6c 6f 6f 70 20 28 6c 65 78 65 72 29 29 (loop (lexer))
34f0: 29 20 3b 3b 20 28 73 74 61 63 6b 2d 70 6f 70 21 ) ;; (stack-pop!
3500: 20 6e 6c 64 62 3a 2a 73 74 61 63 6b 2a 29 20 28 nldb:*stack*) (
3510: 6c 6f 6f 70 20 28 6c 65 78 65 72 29 29 29 0a 09 loop (lexer)))..
3520: 20 20 20 20 20 28 65 6c 73 65 20 20 20 20 20 20 (else
3530: 20 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 45 (print "E
3540: 52 52 4f 52 3a 20 44 69 64 6e 27 74 20 65 78 70 RROR: Didn't exp
3550: 65 63 74 20 61 20 63 6f 6d 6d 61 20 68 65 72 65 ect a comma here
3560: 21 20 4c 69 6e 65 20 22 20 28 6c 65 78 65 72 2d ! Line " (lexer-
3570: 67 65 74 2d 6c 69 6e 65 29 29 29 29 29 0a 0a 09 get-line)))))...
3580: 20 20 28 27 6d 6f 64 75 6c 65 20 0a 09 20 20 20 ('module ..
3590: 28 63 61 73 65 20 73 74 61 74 65 0a 09 20 20 20 (case state..
35a0: 20 20 28 27 73 74 61 72 74 20 0a 09 20 20 20 20 ('start ..
35b0: 20 20 28 73 74 61 63 6b 2d 70 75 73 68 21 20 6e (stack-push! n
35c0: 6c 64 62 3a 2a 73 74 61 63 6b 2a 20 27 6d 6f 64 ldb:*stack* 'mod
35d0: 75 6c 65 29 20 20 20 20 20 20 3b 3b 20 77 65 20 ule) ;; we
35e0: 77 69 6c 6c 20 62 65 20 69 6e 20 61 20 6d 6f 64 will be in a mod
35f0: 75 6c 65 0a 09 20 20 20 20 20 20 28 73 74 61 63 ule.. (stac
3600: 6b 2d 70 75 73 68 21 20 6e 6c 64 62 3a 2a 73 74 k-push! nldb:*st
3610: 61 63 6b 2a 20 27 6d 6f 64 75 6c 65 2d 64 65 66 ack* 'module-def
3620: 29 29 20 3b 3b 20 73 74 61 72 74 69 6e 67 20 69 )) ;; starting i
3630: 6e 20 74 68 65 20 64 65 66 0a 09 20 20 20 20 20 n the def..
3640: 28 65 6c 73 65 0a 09 20 20 20 20 20 20 28 70 72 (else.. (pr
3650: 69 6e 74 20 22 45 52 52 4f 52 3a 20 44 69 64 6e int "ERROR: Didn
3660: 27 74 20 65 78 70 65 63 74 20 6d 6f 64 75 6c 65 't expect module
3670: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 68 65 72 declaration her
3680: 65 21 20 4c 69 6e 65 20 22 20 28 6c 65 78 65 72 e! Line " (lexer
3690: 2d 67 65 74 2d 6c 69 6e 65 29 29 29 29 0a 09 20 -get-line))))..
36a0: 20 20 28 6c 6f 6f 70 20 28 6c 65 78 65 72 29 29 (loop (lexer))
36b0: 29 0a 0a 09 20 20 28 27 69 6e 70 75 74 20 0a 09 )... ('input ..
36c0: 20 20 20 28 63 61 73 65 20 73 74 61 74 65 0a 09 (case state..
36d0: 20 20 20 20 20 28 27 6d 6f 64 75 6c 65 20 20 20 ('module
36e0: 20 20 20 28 73 74 61 63 6b 2d 70 75 73 68 21 20 (stack-push!
36f0: 6e 6c 64 62 3a 2a 73 74 61 63 6b 2a 20 27 69 6e nldb:*stack* 'in
3700: 70 75 74 2d 70 69 6e 29 29 0a 09 20 20 20 20 20 put-pin))..
3710: 28 65 6c 73 65 20 20 20 20 20 20 20 20 20 28 70 (else (p
3720: 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 44 69 64 rint "ERROR: Did
3730: 6e 27 74 20 65 78 70 65 63 74 20 5c 22 69 6e 70 n't expect \"inp
3740: 75 74 5c 22 20 73 74 61 74 65 6d 65 6e 74 20 68 ut\" statement h
3750: 65 72 65 21 20 4c 69 6e 65 6e 75 6d 20 22 20 28 ere! Linenum " (
3760: 6c 65 78 65 72 2d 67 65 74 2d 6c 69 6e 65 29 29 lexer-get-line))
3770: 29 29 0a 09 20 20 20 28 6c 6f 6f 70 20 28 6c 65 )).. (loop (le
3780: 78 65 72 29 29 29 0a 0a 09 20 20 28 27 6f 75 74 xer)))... ('out
3790: 70 75 74 0a 09 20 20 20 28 63 61 73 65 20 73 74 put.. (case st
37a0: 61 74 65 0a 09 20 20 20 20 20 28 27 6d 6f 64 75 ate.. ('modu
37b0: 6c 65 20 20 20 20 20 20 28 73 74 61 63 6b 2d 70 le (stack-p
37c0: 75 73 68 21 20 6e 6c 64 62 3a 2a 73 74 61 63 6b ush! nldb:*stack
37d0: 2a 20 27 6f 75 74 70 75 74 2d 70 69 6e 29 29 0a * 'output-pin)).
37e0: 09 20 20 20 20 20 28 65 6c 73 65 20 20 20 20 20 . (else
37f0: 20 20 20 20 28 70 72 69 6e 74 20 22 45 52 52 4f (print "ERRO
3800: 52 3a 20 44 69 64 6e 27 74 20 65 78 70 65 63 74 R: Didn't expect
3810: 20 5c 22 6f 75 74 70 75 74 5c 22 20 73 74 61 74 \"output\" stat
3820: 65 6d 65 6e 74 20 68 65 72 65 21 20 4c 69 6e 65 ement here! Line
3830: 6e 75 6d 20 22 20 28 6c 65 78 65 72 2d 67 65 74 num " (lexer-get
3840: 2d 6c 69 6e 65 29 29 29 29 0a 09 20 20 20 28 6c -line)))).. (l
3850: 6f 6f 70 20 28 6c 65 78 65 72 29 29 29 0a 09 20 oop (lexer)))..
3860: 20 0a 09 20 20 28 27 69 6e 6f 75 74 0a 09 20 20 .. ('inout..
3870: 20 28 63 61 73 65 20 73 74 61 74 65 0a 09 20 20 (case state..
3880: 20 20 20 28 27 6d 6f 64 75 6c 65 20 20 20 20 20 ('module
3890: 20 28 73 74 61 63 6b 2d 70 75 73 68 21 20 6e 6c (stack-push! nl
38a0: 64 62 3a 2a 73 74 61 63 6b 2a 20 27 69 6e 6f 75 db:*stack* 'inou
38b0: 74 2d 70 69 6e 29 29 0a 09 20 20 20 20 20 28 65 t-pin)).. (e
38c0: 6c 73 65 20 20 20 20 20 20 20 20 20 28 70 72 69 lse (pri
38d0: 6e 74 20 22 45 52 52 4f 52 3a 20 44 69 64 6e 27 nt "ERROR: Didn'
38e0: 74 20 65 78 70 65 63 74 20 5c 22 69 6e 6f 75 74 t expect \"inout
38f0: 5c 22 20 73 74 61 74 65 6d 65 6e 74 20 68 65 72 \" statement her
3900: 65 21 20 4c 69 6e 65 6e 75 6d 20 22 20 28 6c 65 e! Linenum " (le
3910: 78 65 72 2d 67 65 74 2d 6c 69 6e 65 29 29 29 29 xer-get-line))))
3920: 0a 09 20 20 20 28 6c 6f 6f 70 20 28 6c 65 78 65 .. (loop (lexe
3930: 72 29 29 29 0a 0a 09 20 20 28 27 70 69 6e 20 0a r)))... ('pin .
3940: 09 20 20 20 28 63 61 73 65 20 73 74 61 74 65 0a . (case state.
3950: 09 20 20 20 20 20 28 27 69 6e 73 74 2d 63 6f 6e . ('inst-con
3960: 6e 2d 64 65 66 0a 09 20 20 20 20 20 20 28 6c 65 n-def.. (le
3970: 74 2a 20 28 28 70 69 6e 2d 6e 61 6d 65 20 20 20 t* ((pin-name
3980: 20 28 73 75 62 73 74 72 69 6e 67 20 74 6f 6b 65 (substring toke
3990: 6e 2d 76 61 6c 20 31 20 28 73 74 72 69 6e 67 2d n-val 1 (string-
39a0: 6c 65 6e 67 74 68 20 74 6f 6b 65 6e 2d 76 61 6c length token-val
39b0: 29 29 29 0a 09 09 20 20 20 20 20 28 70 69 6e 2d )))... (pin-
39c0: 6e 61 6d 65 2d 69 64 20 28 6e 6c 64 62 3a 67 65 name-id (nldb:ge
39d0: 74 2d 6e 61 6d 65 2d 69 64 20 70 69 6e 2d 6e 61 t-name-id pin-na
39e0: 6d 65 29 29 0a 09 09 20 20 20 20 20 28 70 69 6e me))... (pin
39f0: 2d 69 64 20 20 20 20 20 20 28 6e 6c 64 62 3a 61 -id (nldb:a
3a00: 64 64 2d 70 69 6e 20 28 63 75 72 72 2d 6d 6f 64 dd-pin (curr-mod
3a10: 75 6c 65 2d 69 64 29 20 70 69 6e 2d 6e 61 6d 65 ule-id) pin-name
3a20: 2d 69 64 20 23 66 29 29 29 0a 09 09 28 73 74 61 -id #f)))...(sta
3a30: 63 6b 2d 70 75 73 68 21 20 6e 6c 64 62 3a 2a 73 ck-push! nldb:*s
3a40: 74 61 63 6b 2a 20 27 70 69 6e 2d 6e 65 74 29 0a tack* 'pin-net).
3a50: 09 09 28 73 65 74 2d 63 75 72 72 2d 70 69 6e 2d ..(set-curr-pin-
3a60: 69 64 21 20 70 69 6e 2d 69 64 29 0a 09 09 28 6c id! pin-id)...(l
3a70: 6f 6f 70 20 28 6c 65 78 65 72 29 29 29 29 0a 09 oop (lexer))))..
3a80: 20 20 20 20 20 28 65 6c 73 65 20 20 28 70 72 69 (else (pri
3a90: 6e 74 20 22 45 52 52 4f 52 3a 20 44 69 64 6e 27 nt "ERROR: Didn'
3aa0: 74 20 65 78 70 65 63 74 20 70 69 6e 20 68 65 72 t expect pin her
3ab0: 65 20 22 20 74 6f 6b 65 6e 2d 76 61 6c 20 22 20 e " token-val "
3ac0: 4c 69 6e 65 6e 75 6d 3a 20 22 20 28 6c 65 78 65 Linenum: " (lexe
3ad0: 72 2d 67 65 74 2d 6c 69 6e 65 29 29 29 29 29 0a r-get-line))))).
3ae0: 0a 09 20 20 28 27 69 64 65 6e 74 69 66 69 65 72 .. ('identifier
3af0: 0a 09 20 20 20 28 63 61 73 65 20 73 74 61 74 65 .. (case state
3b00: 0a 09 20 20 20 20 20 28 27 6d 6f 64 75 6c 65 20 .. ('module
3b10: 20 3b 3b 20 74 68 69 73 20 6d 75 73 74 20 62 65 ;; this must be
3b20: 20 61 6e 20 69 6e 73 74 61 6e 63 65 2c 20 61 6e an instance, an
3b30: 20 69 64 65 6e 74 69 66 69 65 72 20 61 74 20 74 identifier at t
3b40: 68 65 20 74 6f 70 20 6c 65 76 65 6c 0a 09 20 20 he top level..
3b50: 20 20 20 20 28 6c 65 74 2a 20 28 28 69 6e 73 74 (let* ((inst
3b60: 2d 6d 6f 64 2d 69 64 20 28 6e 6c 64 62 3a 67 65 -mod-id (nldb:ge
3b70: 74 2d 6d 6f 64 75 6c 65 2d 62 79 2d 6e 61 6d 65 t-module-by-name
3b80: 20 74 6f 6b 65 6e 2d 76 61 6c 29 29 29 0a 09 09 token-val)))...
3b90: 28 73 65 74 2d 63 75 72 72 2d 69 6e 73 74 2d 6d (set-curr-inst-m
3ba0: 6f 64 75 6c 65 2d 69 64 21 20 69 6e 73 74 2d 6d odule-id! inst-m
3bb0: 6f 64 2d 69 64 29 0a 09 09 28 73 74 61 63 6b 2d od-id)...(stack-
3bc0: 70 75 73 68 21 20 6e 6c 64 62 3a 2a 73 74 61 63 push! nldb:*stac
3bd0: 6b 2a 20 27 69 6e 73 74 2d 64 65 66 29 29 0a 09 k* 'inst-def))..
3be0: 20 20 20 20 20 20 28 6c 6f 6f 70 20 28 6c 65 78 (loop (lex
3bf0: 65 72 29 29 29 0a 09 20 20 20 20 20 28 27 69 6e er))).. ('in
3c00: 73 74 2d 64 65 66 20 20 20 20 20 20 20 20 20 20 st-def
3c10: 20 20 20 20 20 20 20 20 3b 3b 20 20 20 20 20 69 ;; i
3c20: 6e 73 74 2d 6d 6f 64 75 6c 65 20 74 79 70 65 20 nst-module type
3c30: 20 70 61 72 65 6e 74 2d 69 64 20 20 20 20 69 6e parent-id in
3c40: 73 74 2d 6e 61 6d 65 2d 69 64 0a 09 20 20 20 20 st-name-id..
3c50: 20 20 28 6c 65 74 2a 20 28 28 69 6e 73 74 2d 69 (let* ((inst-i
3c60: 64 20 28 6e 6c 64 62 3a 61 64 64 2d 69 6e 73 74 d (nldb:add-inst
3c70: 20 28 63 75 72 72 2d 69 6e 73 74 2d 6d 6f 64 75 (curr-inst-modu
3c80: 6c 65 2d 69 64 29 28 63 75 72 72 2d 6d 6f 64 75 le-id)(curr-modu
3c90: 6c 65 2d 69 64 29 28 6e 6c 64 62 3a 67 65 74 2d le-id)(nldb:get-
3ca0: 6e 61 6d 65 2d 69 64 20 74 6f 6b 65 6e 2d 76 61 name-id token-va
3cb0: 6c 29 29 29 29 0a 09 09 28 73 65 74 2d 63 75 72 l))))...(set-cur
3cc0: 72 2d 69 6e 73 74 2d 69 64 21 20 69 6e 73 74 2d r-inst-id! inst-
3cd0: 69 64 29 29 0a 09 20 20 20 20 20 20 28 73 74 61 id)).. (sta
3ce0: 63 6b 2d 70 75 73 68 21 20 6e 6c 64 62 3a 2a 73 ck-push! nldb:*s
3cf0: 74 61 63 6b 2a 20 27 69 6e 73 74 2d 63 6f 6e 6e tack* 'inst-conn
3d00: 2d 64 65 66 29 0a 09 20 20 20 20 20 20 28 6c 6f -def).. (lo
3d10: 6f 70 20 28 6c 65 78 65 72 29 29 29 0a 09 20 20 op (lexer)))..
3d20: 20 20 20 28 27 6d 6f 64 75 6c 65 2d 64 65 66 0a ('module-def.
3d30: 09 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 6d . (let* ((m
3d40: 2d 69 64 20 28 6e 6c 64 62 3a 67 65 74 2d 6d 6f -id (nldb:get-mo
3d50: 64 75 6c 65 2d 62 79 2d 6e 61 6d 65 20 74 6f 6b dule-by-name tok
3d60: 65 6e 2d 76 61 6c 29 29 29 0a 09 09 28 73 65 74 en-val)))...(set
3d70: 2d 63 75 72 72 2d 6d 6f 64 75 6c 65 2d 69 64 21 -curr-module-id!
3d80: 20 6d 2d 69 64 29 29 0a 09 20 20 20 20 20 20 28 m-id)).. (
3d90: 73 74 61 63 6b 2d 70 75 73 68 21 20 6e 6c 64 62 stack-push! nldb
3da0: 3a 2a 73 74 61 63 6b 2a 20 27 6d 6f 64 75 6c 65 :*stack* 'module
3db0: 2d 70 69 6e 73 29 29 0a 09 20 20 20 20 20 28 27 -pins)).. ('
3dc0: 6d 6f 64 75 6c 65 2d 70 69 6e 73 0a 09 20 20 20 module-pins..
3dd0: 20 20 20 28 6e 6c 64 62 3a 61 64 64 2d 70 69 6e (nldb:add-pin
3de0: 20 28 63 75 72 72 2d 6d 6f 64 75 6c 65 2d 69 64 (curr-module-id
3df0: 29 20 28 6e 6c 64 62 3a 67 65 74 2d 6e 61 6d 65 ) (nldb:get-name
3e00: 2d 69 64 20 74 6f 6b 65 6e 2d 76 61 6c 29 20 23 -id token-val) #
3e10: 66 29 29 0a 09 20 20 20 20 20 28 27 69 6e 70 75 f)).. ('inpu
3e20: 74 2d 70 69 6e 0a 09 20 20 20 20 20 20 28 6c 65 t-pin.. (le
3e30: 74 20 28 28 70 69 6e 2d 69 64 20 28 6e 6c 64 62 t ((pin-id (nldb
3e40: 3a 67 65 74 2d 70 69 6e 2d 69 64 20 28 63 75 72 :get-pin-id (cur
3e50: 72 2d 6d 6f 64 75 6c 65 2d 69 64 29 20 28 6e 6c r-module-id) (nl
3e60: 64 62 3a 67 65 74 2d 6e 61 6d 65 2d 69 64 20 74 db:get-name-id t
3e70: 6f 6b 65 6e 2d 76 61 6c 29 29 29 29 0a 09 09 28 oken-val))))...(
3e80: 6e 6c 64 62 3a 73 65 74 2d 70 69 6e 2d 64 69 72 nldb:set-pin-dir
3e90: 65 63 74 69 6f 6e 20 70 69 6e 2d 69 64 20 22 69 ection pin-id "i
3ea0: 6e 70 75 74 22 29 29 29 0a 09 20 20 20 20 20 28 nput"))).. (
3eb0: 27 6f 75 74 70 75 74 2d 70 69 6e 0a 09 20 20 20 'output-pin..
3ec0: 20 20 20 28 6c 65 74 20 28 28 70 69 6e 2d 69 64 (let ((pin-id
3ed0: 20 28 6e 6c 64 62 3a 67 65 74 2d 70 69 6e 2d 69 (nldb:get-pin-i
3ee0: 64 20 28 63 75 72 72 2d 6d 6f 64 75 6c 65 2d 69 d (curr-module-i
3ef0: 64 29 20 28 6e 6c 64 62 3a 67 65 74 2d 6e 61 6d d) (nldb:get-nam
3f00: 65 2d 69 64 20 74 6f 6b 65 6e 2d 76 61 6c 29 29 e-id token-val))
3f10: 29 29 0a 09 09 28 6e 6c 64 62 3a 73 65 74 2d 70 ))...(nldb:set-p
3f20: 69 6e 2d 64 69 72 65 63 74 69 6f 6e 20 70 69 6e in-direction pin
3f30: 2d 69 64 20 22 6f 75 74 70 75 74 22 29 29 29 0a -id "output"))).
3f40: 09 20 20 20 20 20 28 27 69 6e 6f 75 74 2d 70 69 . ('inout-pi
3f50: 6e 0a 09 20 20 20 20 20 20 28 6c 65 74 20 28 28 n.. (let ((
3f60: 70 69 6e 2d 69 64 20 28 6e 6c 64 62 3a 67 65 74 pin-id (nldb:get
3f70: 2d 70 69 6e 2d 69 64 20 28 63 75 72 72 2d 6d 6f -pin-id (curr-mo
3f80: 64 75 6c 65 2d 69 64 29 20 28 6e 6c 64 62 3a 67 dule-id) (nldb:g
3f90: 65 74 2d 6e 61 6d 65 2d 69 64 20 74 6f 6b 65 6e et-name-id token
3fa0: 2d 76 61 6c 29 29 29 29 0a 09 09 28 6e 6c 64 62 -val))))...(nldb
3fb0: 3a 73 65 74 2d 70 69 6e 2d 64 69 72 65 63 74 69 :set-pin-directi
3fc0: 6f 6e 20 70 69 6e 2d 69 64 20 22 69 6e 6f 75 74 on pin-id "inout
3fd0: 22 29 29 29 0a 09 20 20 20 20 20 28 27 70 69 6e "))).. ('pin
3fe0: 2d 6e 65 74 0a 09 20 20 20 20 20 20 28 6c 65 74 -net.. (let
3ff0: 2a 20 28 28 6e 65 74 2d 6e 61 6d 65 2d 69 64 20 * ((net-name-id
4000: 28 6e 6c 64 62 3a 67 65 74 2d 6e 61 6d 65 2d 69 (nldb:get-name-i
4010: 64 20 74 6f 6b 65 6e 2d 76 61 6c 29 29 0a 09 09 d token-val))...
4020: 20 20 20 20 20 28 6e 65 74 2d 69 64 20 20 20 20 (net-id
4030: 20 20 28 6e 6c 64 62 3a 61 64 64 2d 6e 65 74 20 (nldb:add-net
4040: 28 63 75 72 72 2d 69 6e 73 74 2d 6d 6f 64 75 6c (curr-inst-modul
4050: 65 2d 69 64 29 20 6e 65 74 2d 6e 61 6d 65 2d 69 e-id) net-name-i
4060: 64 29 29 29 0a 09 09 28 6e 6c 64 62 3a 61 64 64 d)))...(nldb:add
4070: 2d 63 6f 6e 6e 20 28 63 75 72 72 2d 69 6e 73 74 -conn (curr-inst
4080: 2d 69 64 29 20 28 63 75 72 72 2d 70 69 6e 2d 69 -id) (curr-pin-i
4090: 64 29 20 6e 65 74 2d 69 64 29 29 29 0a 09 20 20 d) net-id)))..
40a0: 20 20 20 28 65 6c 73 65 0a 09 20 20 20 20 20 20 (else..
40b0: 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 44 (print "ERROR: D
40c0: 69 64 6e 27 74 20 65 78 70 65 63 74 20 61 6e 20 idn't expect an
40d0: 69 64 65 6e 74 69 66 69 65 72 20 68 65 72 65 21 identifier here!
40e0: 20 54 6f 6b 65 6e 20 22 20 74 6f 6b 65 6e 2d 76 Token " token-v
40f0: 61 6c 20 22 20 4c 69 6e 65 20 22 20 28 6c 65 78 al " Line " (lex
4100: 65 72 2d 67 65 74 2d 6c 69 6e 65 29 29 29 29 0a er-get-line)))).
4110: 09 20 20 20 28 6c 6f 6f 70 20 28 6c 65 78 65 72 . (loop (lexer
4120: 29 29 29 0a 0a 09 20 20 28 65 6c 73 65 0a 09 20 )))... (else..
4130: 20 20 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a (print "ERROR:
4140: 20 75 6e 6b 6e 6f 77 6e 20 74 6f 6b 65 6e 20 22 unknown token "
4150: 20 74 6f 6b 65 6e 20 22 20 6f 6e 20 6c 69 6e 65 token " on line
4160: 20 22 20 28 6c 65 78 65 72 2d 67 65 74 2d 6c 69 " (lexer-get-li
4170: 6e 65 29 29 0a 09 20 20 20 28 6c 6f 6f 70 20 28 ne)).. (loop (
4180: 6c 65 78 65 72 29 29 29 29 29 29 29 29 0a 20 20 lexer)))))))).
4190: 20 20 20 0a .