Wirewrap program, part 01 of 02
sources-request at genrad.UUCP
sources-request at genrad.UUCP
Sun Aug 18 22:45:51 AEST 1985
Mod.sources: Volume 2, Issue 36
Submitted by: karsh at geowhiz.UUCP (Bruce Karsh) <uwvax!geowhiz!karsh>
#!/bin/sh
#
# This is a release of my wirewrap program. It has been used
# to make several boards here, and seems to be pretty reliable.
# It was written on a Masscomp MC500, but I don't think there
# are any serious machine dependencies in it. (But then again,
# I'm often suprised by how easy it is to inadvertantly write
# machine dependent code.)
#
# I'd like to hear some bug reports and success stories. I will
# try to send out bug fixes as quickly as I can.
#
# As usual, unpack all parts by running through sh, then run make.
#
# Unix Wirewrap Source Code:
# cnvtnum.c gettoken.c getwired.c getwirelen.c header1.c
# header2.c initialize.c insertname.c insertx.c main.c
# mywrite.c mywrite2.c namecmp.c namecmp2.c output1.c
# output2.c output3.c readin.c setptr.c setrowandcol.c
# sort1.c sort2.c test.c
#
# .h files:
# wirewrap.h
#
# Documentation:
# wirewrap.1 README PACKINGLIST
#
# Unix wirewrap makefile:
# Makefile
#
# Test Data:
# autocal
#
# Example listing:
# autocal.listing
#
# ----
# Bruce Karsh
# U. Wisc. Dept. Geology and Geophysics
# 1215 W Dayton, Madison, WI 53706
# (608) 262-1697
# {ihnp4,seismo}!uwvax!geowhiz!karsh
#
echo 'Start of wirewrap program, part 01 of 02:'
echo 'x - autocal.listing'
sed 's/^X//' > autocal.listing << '/'
X chip pin chip
X name num position row col
X+ Special
X and.4081 14 4g (17,20)
X runff.4013 14 3g (17,14)
X or.4071 14 3h (8,14)
X count.4020 16 2h (8,8)
X syncff.4013 14 6h (8,32)
X shift.4015 16 5h (8,26)
X xor.4030 14 4h (8,20)
X shift.4015 16 5g (17,26)
X- Special
X and.4081 7 4g (11,17)
X syncff.4013 7 6h (2,29)
X or.4071 7 3h (2,11)
X shift.4015 8 5g (10,23)
X runff.4013 7 3g (11,11)
X count.4020 8 2h (1,5)
X xor.4030 7 4h (2,17)
X shift.4015 8 5h (1,23)
X.
X I/O-edge 8 1a (49,1)
X I/O-edge 2 1a (55,1)
X I/O-edge 12 1a (45,1)
X I/O-edge 20 1a (37,1)
X I/O-edge 10 1a (47,1)
X I/O-edge 6 1a (51,1)
X I/O-edge 5 1a (52,1)
X I/O-edge 24 1a (33,1)
X I/O-edge 17 1a (40,1)
X I/O-edge 26 1a (31,1)
X I/O-edge 73 1a (49,3)
X RUN.FF1 11 8c (50,44)
X I/O-edge 1 1a (56,1)
X I/O-edge 30 1a (27,1)
X I/O-edge 13 1a (44,1)
X I/O-edge 80 1a (56,3)
X I/O-edge 33 1a (24,1)
X I/O-edge 34 1a (23,1)
X I/O-edge 27 1a (30,1)
X count.4020 5 2h (4,5)
X I/O-edge 37 1a (20,1)
X I/O-edge 38 1a (19,1)
X I/O-edge 35 1a (22,1)
X RUN.FF2 9 2e (28,8)
X I/O-edge 41 1a (17,3)
X I/O-edge 42 1a (18,3)
X I/O-edge 3 1a (54,1)
X I/O-edge 44 1a (20,3)
X I/O-edge 45 1a (21,3)
X I/O-edge 14 1a (43,1)
X I/O-edge 11 1a (46,1)
X I/O-edge 48 1a (24,3)
X Buffer.4050 2 2g (16,5)
X I/O-edge 18 1a (39,1)
X I/O-edge 19 1a (38,1)
X I/O-edge 52 1a (28,3)
X I/O-edge 21 1a (36,1)
X I/O-edge 54 1a (30,3)
X Buffer.4050 4 2g (14,5)
X chip pin chip
X name num position row col
X I/O-edge 56 1a (32,3)
X I/O-edge 25 1a (32,1)
X I/O-edge 58 1a (34,3)
X I/O-edge 59 1a (35,3)
X Buffer.4050 13 2g (14,8)
X I/O-edge 61 1a (37,3)
X I/O-edge 62 1a (38,3)
X I/O-edge 63 1a (39,3)
X I/O-edge 32 1a (25,1)
X I/O-edge 65 1a (41,3)
X I/O-edge 66 1a (42,3)
X I/O-edge 67 1a (43,3)
X I/O-edge 68 1a (44,3)
X I/O-edge 69 1a (45,3)
X I/O-edge 70 1a (46,3)
X I/O-edge 55 1a (31,3)
X I/O-edge 72 1a (48,3)
X RUN.FF2 10 2e (29,8)
X I/O-edge 74 1a (50,3)
X I/O-edge 75 1a (51,3)
X I/O-edge 76 1a (52,3)
X I/O-edge 77 1a (53,3)
X I/O-edge 78 1a (54,3)
X I/O-edge 47 1a (23,3)
X Buffer.4050 1 2g (17,5)
X runff.4013 2 3g (16,11)
X RUN.FF1 1 8c (53,41)
X RUN.FF1 2 8c (52,41)
X RUN.FF1 3 8c (51,41)
X RUN.FF1 4 8c (50,41)
X RUN.FF1 5 8c (49,41)
X I/O-edge 23 1a (34,1)
X RUN.FF1 7 8c (47,41)
X shift.4015 2 5h (7,23)
X RUN.FF1 9 8c (48,44)
X RUN.FF1 10 8c (49,44)
X shift.4015 5 5h (4,23)
X RUN.FF1 12 8c (51,44)
X RUN.FF1 13 8c (52,44)
X I/O-edge 31 1a (26,1)
X RUN.FF2 1 2e (35,5)
X RUN.FF2 2 2e (34,5)
X RUN.FF2 3 2e (33,5)
X RUN.FF2 4 2e (32,5)
X shift.4015 13 5h (5,26)
X RUN.FF2 6 2e (30,5)
X RUN.FF2 7 2e (29,5)
X I/O-edge 39 1a (18,1)
X count.4020 9 2h (1,8)
X Buffer.4050 10 2g (11,8)
X RUN.FF2 11 2e (30,8)
X RUN.FF2 12 2e (31,8)
X RUN.FF2 13 2e (32,8)
X RUN.FF2 14 2e (33,8)
X I/O-edge 46 1a (22,3)
X RUN.FF2 16 2e (35,8)
X count.4020 1 2h (8,5)
X I/O-edge 57 1a (33,3)
X chip pin chip
X name num position row col
X Buffer.4050 3 2g (15,5)
X syncff.4013 12 6h (6,32)
X Buffer.4050 5 2g (13,5)
X I/O-edge 53 1a (29,3)
X Buffer.4050 7 2g (11,5)
X Buffer.4050 8 2g (10,5)
X Buffer.4050 9 2g (10,8)
X I/O-edge 29 1a (28,1)
X shift.4015 3 5h (6,23)
X shift.4015 4 5h (5,23)
X count.4020 13 2h (5,8)
X Buffer.4050 6 2g (12,5)
X RUN.FF2 15 2e (34,8)
X Buffer.4050 16 2g (17,8)
X I/O-edge 64 1a (40,3)
X count.4020 6 2h (3,5)
X shift.4015 11 5h (3,26)
X count.4020 4 2h (5,5)
X I/O-edge 36 1a (21,1)
X I/O-edge 7 1a (50,1)
X count.4020 7 2h (2,5)
X RUN.FF2 8 2e (28,5)
X shift.4015 13 5g (14,26)
X count.4020 12 2h (4,8)
X shift.4015 3 5g (15,23)
X I/O-edge 79 1a (55,3)
X syncff.4013 13 6h (7,32)
X I/O-edge 15 1a (42,1)
X count.4020 15 2h (7,8)
X I/O-edge 71 1a (47,3)
X I/O-edge 22 1a (35,1)
X shift.4015 12 5h (4,26)
X shift.4015 11 5g (12,26)
X I/O-edge 43 1a (19,3)
X I/O-edge 50 1a (26,3)
X RUN.FF1 6 8c (48,41)
X shift.4015 4 5g (14,23)
X RUN.FF1 14 8c (53,44)
X10SEC
X I/O-edge 9 1a (48,1)
X runff.4013 3 3g (15,11)
XGAP4
X xor.4030 12 4h (6,20)
X I/O-edge 4 1a (53,1)
XPD3
X and.4081 6 4g (12,17)
X I/O-edge 60 1a (36,3)
XQ
X UPI/O 1 10a (37,54)
X runff.4013 11 3g (14,14)
XRON+
X or.4071 13 3h (7,14)
X RUN.FF2 5 2e (31,5)
XSKEY-
X and.4081 1 4g (17,17)
X I/O-edge 16 1a (41,1)
XTST+
X and.4081 2 4g (16,17)
X chip pin chip
X name num position row col
X or.4071 12 3h (6,14)
X I/O-edge 28 1a (29,1)
X and.4081 5 4g (13,17)
Xacal
X and.4081 10 4g (13,20)
X or.4071 2 3h (7,11)
Xap
X and.4081 11 4g (14,20)
X or.4071 9 3h (3,14)
Xapms
X or.4071 10 3h (4,14)
X and.4081 9 4g (12,20)
Xbcal+
X I/O-edge 51 1a (27,3)
X Buffer.4050 12 2g (13,8)
Xbgld-
X Buffer.4050 15 2g (16,8)
X I/O-edge 49 1a (25,3)
Xcal+
X or.4071 3 3h (6,11)
X Buffer.4050 11 2g (12,8)
Xcalena+
X or.4071 11 3h (5,14)
X runff.4013 9 3g (12,14)
Xcalrun-
X count.4020 11 2h (3,8)
X syncff.4013 4 6h (5,29)
X runff.4013 1 3g (17,11)
X or.4071 5 3h (4,11)
Xclk
X xor.4030 11 4h (5,20)
X shift.4015 9 5h (1,26)
X shift.4015 1 5g (17,23)
X shift.4015 9 5g (10,26)
X syncff.4013 3 6h (6,29)
X shift.4015 1 5h (8,23)
Xclk/2
X syncff.4013 1 6h (8,29)
X count.4020 10 2h (2,8)
Xclk/2-
X syncff.4013 5 6h (4,29)
X syncff.4013 2 6h (7,29)
Xg
X I/O-edge 40 1a (17,1)
X syncff.4013 10 6h (4,32)
X xor.4030 13 4h (7,20)
X runff.4013 4 3g (14,11)
X syncff.4013 9 6h (3,32)
X runff.4013 10 3g (13,14)
X syncff.4013 11 6h (5,32)
X syncff.4013 8 6h (2,32)
X syncff.4013 6 6h (3,29)
Xgld-
X Buffer.4050 14 2g (15,8)
X and.4081 3 4g (15,17)
Xjamrun+
X RUN.FF1 8 8c (47,44)
X and.4081 8 4g (11,20)
X chip pin chip
X name num position row col
X runff.4013 12 3g (15,14)
Xjamrun-
X runff.4013 5 3g (13,11)
X runff.4013 13 3g (16,14)
Xmp
X and.4081 4 4g (14,17)
X or.4071 1 3h (8,11)
Xq10
X and.4081 12 4g (15,20)
X count.4020 14 2h (6,8)
Xq13
X shift.4015 6 5g (12,23)
X shift.4015 6 5h (3,23)
X count.4020 2 2h (7,5)
X shift.4015 14 5g (15,26)
X and.4081 13 4g (16,20)
X shift.4015 14 5h (6,26)
Xseq1
X shift.4015 5 5g (13,23)
X xor.4030 8 4h (2,20)
Xseq12
X xor.4030 2 4h (7,17)
X shift.4015 10 5h (2,26)
X shift.4015 15 5h (7,26)
Xseq4
X shift.4015 10 5g (11,26)
X xor.4030 1 4h (8,17)
X shift.4015 15 5g (16,26)
Xseq6
X xor.4030 6 4h (3,17)
X shift.4015 12 5g (13,26)
Xseq8
X shift.4015 2 5g (16,23)
X shift.4015 7 5h (2,23)
Xseqi
X or.4071 4 3h (5,11)
X shift.4015 7 5g (11,23)
Xseql
X xor.4030 3 4h (6,17)
X xor.4030 5 4h (4,17)
Xseqm
X or.4071 8 3h (2,14)
X xor.4030 10 4h (4,20)
X or.4071 6 3h (3,11)
Xseqn
X xor.4030 4 4h (5,17)
X xor.4030 9 4h (3,20)
Xstop+
X runff.4013 8 3g (11,14)
X count.4020 3 2h (6,5)
X runff.4013 6 3g (12,11)
Xsignal pin inner wire outer wire
Xname num
X- 8 SPEC 1,5 SPEC 1,5
X. 9 1,8 1,8
X- 8 SPEC 1,23 SPEC 1,23
Xclk 9 1.5 1,26 5,20 2.5 1,26 17,23 F
X. 7 2,5 2,5
Xclk/2 10 3.0 2,8 8,29 2,8
X- 7 SPEC 2,11 SPEC 2,11
Xseqm 8 1.5 2,14 4,20 2,14
X- 7 SPEC 2,17 SPEC 2,17
Xseq1 8 2.0 2,20 13,23 2,20
Xseq8 7 2.5 2,23 16,23 2,23
Xseq12 10 2.0 2,26 7,17 1.5 2,26 7,26 E
X- 7 SPEC 2,29 SPEC 2,29
Xg 8 1.5 2,32 5,32 1.5 2,32 3,29 E
X. 6 3,5 3,5
Xcalrun- 11 3.0 3,8 5,29 3,8
Xseqm 6 3,11 2.0 3,11 4,20 F
Xap 9 2.0 3,14 14,20 3,14
Xseq6 6 2.0 3,17 13,26 3,17
Xseqn 9 1.5 3,20 5,17 3,20
Xq13 6 2.0 3,23 12,23 3.0 3,23 7,5 F
X. 11 3,26 3,26
Xg 6 3,29 TEST 3,29 2,32 F
Xg 9 3.0 3,32 13,14 3.5 3,32 14,11 F
X. 5 4,5 4,5
X. 12 4,8 4,8
Xcalrun- 5 2.0 4,11 17,11 4,11
Xapms 10 2.0 4,14 12,20 4,14
Xseql 5 1.5 4,17 6,17 4,17
Xseqm 10 TEST 4,20 2,14 TEST 4,20 3,11 E
X. 5 4,23 4,23
X. 12 4,26 4,26
Xclk/2- 5 1.5 4,29 7,29 4,29
Xg 10 4.5 4,32 17,1 2.0 4,32 7,20 F
X. 4 5,5 5,5
X. 13 5,8 5,8
Xseqi 4 2.0 5,11 11,23 5,11
Xcalena+ 11 1.5 5,14 12,14 5,14
Xseqn 4 TEST 5,17 3,20 5,17
Xclk 11 TEST 5,20 1,26 5,20
X. 4 5,23 5,23
X. 13 5,26 5,26
Xcalrun- 4 TEST 5,29 3,8 3.0 5,29 17,11 F
Xg 11 TEST 5,32 2,32 3.0 5,32 13,14 F
Xstop+ 3 2.0 6,5 11,14 1.5 6,5 12,11 E
Xq10 14 2.5 6,8 15,20 6,8
Xcal+ 3 1.5 6,11 12,8 6,11
XTST+ 12 2.0 6,14 16,17 3.5 6,14 29,1 F
Xseql 3 TEST 6,17 4,17 6,17
XGAP4 12 6.0 6,20 53,1 6,20
X. 3 6,23 6,23
Xq13 14 2.0 6,26 16,20 6,26
Xclk 3 1.5 6,29 8,23 1.5 6,29 10,26 F
X. 12 6,32 6,32
Xq13 2 3.0 7,5 15,26 TEST 7,5 3,23 F
X. 15 7,8 7,8
Xacal 2 2.0 7,11 13,20 7,11
XRON+ 13 3.5 7,14 31,5 7,14
Xsignal pin inner wire outer wire
Xname num
Xseq12 2 TEST 7,17 2,26 7,17
Xg 13 2.0 7,20 14,11 TEST 7,20 4,32 F
X. 2 7,23 7,23
Xseq12 15 7,26 TEST 7,26 2,26 F
Xclk/2- 2 TEST 7,29 4,29 7,29
X. 13 7,32 7,32
X. 1 8,5 8,5
X+ 16 SPEC 8,8 SPEC 8,8
Xmp 1 1.5 8,11 14,17 8,11
X+ 14 SPEC 8,14 SPEC 8,14
Xseq4 1 2.0 8,17 11,26 2.0 8,17 16,26 E
X+ 14 SPEC 8,20 SPEC 8,20
Xclk 1 TEST 8,23 6,29 8,23
X+ 16 SPEC 8,26 SPEC 8,26
Xclk/2 1 TEST 8,29 2,8 8,29
X+ 14 SPEC 8,32 SPEC 8,32
X. 8 10,5 10,5
X. 9 10,8 10,8
X- 8 SPEC 10,23 SPEC 10,23
Xclk 9 1.5 10,26 17,23 TEST 10,26 6,29 F
X. 7 11,5 11,5
X. 10 11,8 11,8
X- 7 SPEC 11,11 SPEC 11,11
Xstop+ 8 TEST 11,14 6,5 11,14
X- 7 SPEC 11,17 SPEC 11,17
Xjamrun+ 8 5.5 11,20 47,44 1.5 11,20 15,14 E
Xseqi 7 TEST 11,23 5,11 11,23
Xseq4 10 TEST 11,26 8,17 11,26
X. 6 12,5 12,5
Xcal+ 11 TEST 12,8 6,11 12,8
Xstop+ 6 12,11 TEST 12,11 6,5 F
Xcalena+ 9 TEST 12,14 5,14 12,14
XPD3 6 3.5 12,17 36,3 12,17
Xapms 9 TEST 12,20 4,14 12,20
Xq13 6 TEST 12,23 3,23 12,23
X. 11 12,26 12,26
X. 5 13,5 13,5
Xbcal+ 12 2.5 13,8 27,3 13,8
Xjamrun- 5 1.5 13,11 16,14 13,11
Xg 10 TEST 13,14 3,32 TEST 13,14 5,32 F
XTST+ 5 3.0 13,17 29,1 13,17
Xacal 10 TEST 13,20 7,11 13,20
Xseq1 5 TEST 13,23 2,20 13,23
Xseq6 12 TEST 13,26 3,17 13,26
X. 4 14,5 14,5
X. 13 14,8 14,8
Xg 4 TEST 14,11 7,20 TEST 14,11 3,32 F
XQ 11 5.5 14,14 37,54 14,14
Xmp 4 TEST 14,17 8,11 14,17
Xap 11 TEST 14,20 3,14 14,20
X. 4 14,23 14,23
X. 13 14,26 14,26
X. 3 15,5 15,5
Xgld- 14 2.0 15,8 15,17 15,8
X10SEC 3 4.5 15,11 48,1 15,11
Xjamrun+ 12 15,14 TEST 15,14 11,20 F
Xgld- 3 TEST 15,17 15,8 15,17
Xq10 12 TEST 15,20 6,8 15,20
Xsignal pin inner wire outer wire
Xname num
X. 3 15,23 15,23
Xq13 14 TEST 15,26 7,5 1.5 15,26 16,20 F
X. 2 16,5 16,5
Xbgld- 15 2.0 16,8 25,3 16,8
X. 2 16,11 16,11
Xjamrun- 13 TEST 16,14 13,11 16,14
XTST+ 2 TEST 16,17 6,14 16,17
Xq13 13 TEST 16,20 6,26 TEST 16,20 15,26 F
Xseq8 2 TEST 16,23 2,23 16,23
Xseq4 15 16,26 TEST 16,26 8,17 F
Xg 40 TEST 17,1 4,32 17,1
X. 41 17,3 17,3
X. 1 17,5 17,5
X. 16 17,8 17,8
Xcalrun- 1 TEST 17,11 4,11 TEST 17,11 5,29 F
X+ 14 SPEC 17,14 SPEC 17,14
XSKEY- 1 4.0 17,17 41,1 17,17
X+ 14 SPEC 17,20 SPEC 17,20
Xclk 1 TEST 17,23 10,26 TEST 17,23 1,26 F
X+ 16 SPEC 17,26 SPEC 17,26
X. 39 18,1 18,1
X. 42 18,3 18,3
X. 38 19,1 19,1
X. 43 19,3 19,3
X. 37 20,1 20,1
X. 44 20,3 20,3
X. 36 21,1 21,1
X. 45 21,3 21,3
X. 35 22,1 22,1
X. 46 22,3 22,3
X. 34 23,1 23,1
X. 47 23,3 23,3
X. 33 24,1 24,1
X. 48 24,3 24,3
X. 32 25,1 25,1
Xbgld- 49 TEST 25,3 16,8 25,3
X. 31 26,1 26,1
X. 50 26,3 26,3
X. 30 27,1 27,1
Xbcal+ 51 TEST 27,3 13,8 27,3
X. 29 28,1 28,1
X. 52 28,3 28,3
X. 8 28,5 28,5
X. 9 28,8 28,8
XTST+ 28 TEST 29,1 13,17 TEST 29,1 6,14 F
X. 53 29,3 29,3
X. 7 29,5 29,5
X. 10 29,8 29,8
X. 27 30,1 30,1
X. 54 30,3 30,3
X. 6 30,5 30,5
X. 11 30,8 30,8
X. 26 31,1 31,1
X. 55 31,3 31,3
XRON+ 5 TEST 31,5 7,14 31,5
X. 12 31,8 31,8
X. 25 32,1 32,1
X. 56 32,3 32,3
Xsignal pin inner wire outer wire
Xname num
X. 4 32,5 32,5
X. 13 32,8 32,8
X. 24 33,1 33,1
X. 57 33,3 33,3
X. 3 33,5 33,5
X. 14 33,8 33,8
X. 23 34,1 34,1
X. 58 34,3 34,3
X. 2 34,5 34,5
X. 15 34,8 34,8
X. 22 35,1 35,1
X. 59 35,3 35,3
X. 1 35,5 35,5
X. 16 35,8 35,8
X. 21 36,1 36,1
XPD3 60 TEST 36,3 12,17 36,3
X. 20 37,1 37,1
X. 61 37,3 37,3
XQ 1 TEST 37,54 14,14 37,54
X. 19 38,1 38,1
X. 62 38,3 38,3
X. 18 39,1 39,1
X. 63 39,3 39,3
X. 17 40,1 40,1
X. 64 40,3 40,3
XSKEY- 16 TEST 41,1 17,17 41,1
X. 65 41,3 41,3
X. 15 42,1 42,1
X. 66 42,3 42,3
X. 14 43,1 43,1
X. 67 43,3 43,3
X. 13 44,1 44,1
X. 68 44,3 44,3
X. 12 45,1 45,1
X. 69 45,3 45,3
X. 11 46,1 46,1
X. 70 46,3 46,3
X. 10 47,1 47,1
X. 71 47,3 47,3
X. 7 47,41 47,41
Xjamrun+ 8 TEST 47,44 11,20 47,44
X10SEC 9 TEST 48,1 15,11 48,1
X. 72 48,3 48,3
X. 6 48,41 48,41
X. 9 48,44 48,44
X. 8 49,1 49,1
X. 73 49,3 49,3
X. 5 49,41 49,41
X. 10 49,44 49,44
X. 7 50,1 50,1
X. 74 50,3 50,3
X. 4 50,41 50,41
X. 11 50,44 50,44
X. 6 51,1 51,1
X. 75 51,3 51,3
X. 3 51,41 51,41
X. 12 51,44 51,44
X. 5 52,1 52,1
Xsignal pin inner wire outer wire
Xname num
X. 76 52,3 52,3
X. 2 52,41 52,41
X. 13 52,44 52,44
XGAP4 4 TEST 53,1 6,20 53,1
X. 77 53,3 53,3
X. 1 53,41 53,41
X. 14 53,44 53,44
X. 3 54,1 54,1
X. 78 54,3 54,3
X. 2 55,1 55,1
X. 79 55,3 55,3
X. 1 56,1 56,1
X. 80 56,3 56,3
X WIRE LENGTH SUMMARY
X -------------------
X
X Wire Number
XLength Used
X1.5 18
X2.0 19
X2.5 4
X3.0 8
X3.5 4
X4.0 1
X4.5 2
X5.5 2
X6.0 1
XTotal number of wires used: 59
/
echo 'x - readin.c'
sed 's/^X//' > readin.c << '/'
X#include "wirewrap.h"
X#include <ctype.h>
X#define GETLINE(A) { scanf("%79[^\n]%*[^\n]%*c",A); inputline++;}
X#define PAD(A) {for(j=strlen(A);j<NAMELENGTH;j++)A[j]=' '; A[NAMELENGTH]=0; }
Xextern char *cnvtnump; /* Defined in cmvtnump.c */
Xextern int *cnvtnumv; /* Defined in cmvtnump.c */
Xint errorlevel=0;
X/*
X** readin - read in the chip description file.
X**
X** Sorry about all the gotos. This is a finite
X** state machine.
X*/
X
X/* getcmd - try to get a command from the input stream.
X** Branches to:
X** endinput if eof occurs.
X** dochip if a :chip command occurs.
X** dospecial if a :special command occurs.
X** getcmd if anything else occurs.
X*/
Xreadin()
X{
Xstruct chip *newchip;
Xstruct signallist *setptr(),*localptr;
Xchar token[80],errorline[132];
Xint count,i,j,stat,found;
X
Xgetcmd:
X stat=gettoken(token);
X if(stat == -1) goto endinput;
X if(token[0] == ':')
X {
X if(strlen(token) <= NAMELENGTH)
X {
X PAD(token);
X if(!namecmp2(token,CHIPTOKEN))
X goto dochip;
X if(!namecmp2(token,SPECIALTOKEN))
X goto dospecial;
X }
X sprintf(errorline,"Invalid command: %15.15s",token);
X error(errorline);
X goto getcmd;
X }
X sprintf(errorline,"Invalid item: %15.15s",token);
X error(errorline);
X goto getcmd;
X
X/* dochip - Processes a :chip command.
X** Branches to:
X** endinput if eof occurs.
X** dochip if a :chip command occurs.
X** dospecial if a :special command occurs.
X*/
Xdochip:
X stat=gettoken(token); /* Trying to get a chip name. */
X if(stat == -1)
X {
X error("End of file reached too soon.");
X goto endinput;
X }
X if(token[0] == ':')
X {
X if(strlen(token) <= NAMELENGTH)
X {
X PAD(token);
X if(!namecmp2(token,CHIPTOKEN))
X {
X sprintf(errorline,"Duplicate :chip command");
X error(errorline);
X goto dochip;
X }
X if(!namecmp2(token,SPECIALTOKEN))
X {
X sprintf(errorline,
X "The rest of the preceeding :chip command is missing:",
X token);
X error(errorline);
X goto dospecial;
X }
X }
X sprintf(errorline,"Invalid command: %15.15s",token);
X error(errorline);
X goto getcmd;
X }
X if(strlen(token) > NAMELENGTH)
X {
X sprintf(errorline,"Chip name is too long: %15.15s",token);
X error(errorline);
X }
X PAD(token);
X /* Allocate a new chip. */
X newchip = (struct chip *) malloc( sizeof(struct chip));
X if(!newchip)
X {
X sprintf(errorline,"No space for chip: %15.15s",token);
X fatal(errorline); /* No return */
X }
X /* Fill in the chipname field. */
X PAD(token);
X for(i=0;i<NAMELENGTH;i++)newchip->name[i]=token[i];
X
X stat=gettoken(token); /* Trying to get a chip position. */
X if(stat == -1)
X {
X error("End of file reached too soon.");
X goto endinput;
X }
X if(token[0] == ':')
X {
X if(strlen(token) <= NAMELENGTH)
X {
X PAD(token);
X if( !namecmp2(token,CHIPTOKEN) )
X {
X error("The rest of the preceeding :chip command is missing");
X goto dochip;
X }
X if( (!namecmp2(token,SPECIALTOKEN)) || (!namecmp2(token,CHIPTOKEN)) )
X {
X sprintf(errorline,
X "The rest of the preceeding :chip command is missing:",
X token);
X error(errorline);
X }
X }
X sprintf(errorline,"Invalid command: %15.15s",token);
X error(errorline);
X goto getcmd;
X }
X if(strlen(token) >= NAMELENGTH)
X {
X sprintf(errorline,"Chip position name is too long: %15.15s",token);
X error(errorline);
X }
X PAD(token);
X for(i=0;i<NAMELENGTH;i++)newchip->position[i]=token[i];
X
X stat=gettoken(token); /* Trying to get a pincount. */
X if(stat == -1)
X {
X error("End of file reached too soon.");
X goto endinput;
X }
X if(token[0] == ':')
X {
X if(strlen(token) <= NAMELENGTH)
X {
X if( !namecmp2(token,CHIPTOKEN) )
X {
X error("The rest of the preceeding :chip command is missing");
X goto dochip;
X }
X if( (!namecmp2(token,SPECIALTOKEN)) || (!namecmp2(token,CHIPTOKEN)) )
X {
X sprintf(errorline,
X "The rest of the preceeding :chip command is missing:",
X token);
X error(errorline);
X goto dospecial;
X }
X }
X sprintf(errorline,"Invalid command: %15.15s",token);
X error(errorline);
X goto getcmd;
X }
X i=cnvtnum(token);
X newchip->pincount=i;
X if(!cnvtnumv)
X {
X sprintf(errorline,"Invalid pin count specified: %15.15s",token);
X error(errorline);
X }
X else if(*cnvtnump != 0)
X {
X sprintf(errorline,"Pin count field is badly formatted: %15.15s",token);
X error(errorline);
X }
X else if(i < 0)
X {
X sprintf(errorline,"Pin count field is negative: %15.15s",token);
X error(errorline);
X }
X else if(i < 0)
X {
X sprintf(errorline,"Pin count field is zero.");
X error(errorline);
X }
X
X stat=gettoken(token); /* Trying to get a chip width. */
X if(stat == -1)
X {
X error("End of file reached too soon.");
X goto endinput;
X }
X if(token[0] == ':')
X {
X if(strlen(token) <= NAMELENGTH)
X {
X if( !namecmp2(token,CHIPTOKEN) )
X {
X error("The rest of the preceeding :chip command is missing");
X goto dochip;
X }
X if( (!namecmp2(token,SPECIALTOKEN)) || (!namecmp2(token,CHIPTOKEN)) )
X {
X sprintf(errorline,
X "The rest of the preceeding :chip command is missing:",
X token);
X error(errorline);
X goto dospecial;
X }
X }
X sprintf(errorline,"Invalid command: %15.15s",token);
X error(errorline);
X goto getcmd;
X }
X i=cnvtnum(token);
X newchip->width=i;
X if(!cnvtnumv)
X {
X sprintf(errorline,"Invalid width specified: %15.15s",token);
X error(errorline);
X }
X else if(*cnvtnump != 0)
X {
X sprintf(errorline,"Width field is badly formatted: %15.15s",token);
X error(errorline);
X }
X else if(i < 0)
X {
X sprintf(errorline,"Width field is negative: %15.15s",token);
X error(errorline);
X }
X
X stat=gettoken(token); /* Trying to get pin 1's row number. */
X if(stat == -1)
X {
X error("End of file reached too soon.");
X goto endinput;
X }
X if(token[0] == ':')
X {
X if(strlen(token) <= NAMELENGTH)
X {
X if( !namecmp2(token,CHIPTOKEN) )
X {
X error("The rest of the preceeding :chip command is missing");
X goto dochip;
X }
X if( (!namecmp2(token,SPECIALTOKEN)) || (!namecmp2(token,CHIPTOKEN)) )
X {
X sprintf(errorline,
X "The rest of the preceeding :chip command is missing:",
X token);
X error(errorline);
X goto dospecial;
X }
X }
X sprintf(errorline,"Invalid command: %15.15s",token);
X error(errorline);
X goto getcmd;
X }
X i=cnvtnum(token);
X newchip->row1=i;
X if(!cnvtnumv)
X {
X sprintf(errorline,"Invalid row specified: %15.15s",token);
X error(errorline);
X }
X else if(*cnvtnump != 0)
X {
X sprintf(errorline,"Row field is badly formatted: %15.15s",token);
X error(errorline);
X }
X
X stat=gettoken(token); /* Trying to get pin 1's column number. */
X if(stat == -1)
X {
X error("End of file reached too soon.");
X goto endinput;
X }
X if(token[0] == ':')
X {
X if(strlen(token) <= NAMELENGTH)
X {
X if( !namecmp2(token,CHIPTOKEN) )
X {
X error("The rest of the preceeding :chip command is missing");
X goto dochip;
X }
X if( (!namecmp2(token,SPECIALTOKEN)) || (!namecmp2(token,CHIPTOKEN)) )
X {
X sprintf(errorline,
X "The rest of the preceeding :chip command is missing:",
X token);
X error(errorline);
X goto dospecial;
X }
X }
X sprintf(errorline,"Invalid command: %15.15s",token);
X error(errorline);
X goto getcmd;
X }
X i=cnvtnum(token);
X newchip->col1=i;
X if(!cnvtnumv)
X {
X sprintf(errorline,"Invalid col specified: %15.15s",token);
X error(errorline);
X }
X else if(*cnvtnump != 0)
X {
X sprintf(errorline,"Col field is badly formatted: %15.15s",token);
X error(errorline);
X }
X
X stat=gettoken(token); /* Trying to get pin 1's orientation number. */
X if(stat == -1)
X {
X error("End of file reached too soon.");
X goto endinput;
X }
X if(token[0] == ':')
X {
X if(strlen(token) <= NAMELENGTH)
X {
X if( !namecmp2(token,CHIPTOKEN) )
X {
X error("The rest of the preceeding :chip command is missing");
X goto dochip;
X }
X if( (!namecmp2(token,SPECIALTOKEN)) || (!namecmp2(token,CHIPTOKEN)) )
X {
X sprintf(errorline,
X "The rest of the preceeding :chip command is missing:",
X token);
X error(errorline);
X goto dospecial;
X }
X }
X sprintf(errorline,"Invalid command: %15.15s",token);
X error(errorline);
X goto getcmd;
X }
X i=cnvtnum(token);
X newchip->orientation=i;
X if(!cnvtnumv)
X {
X sprintf(errorline,"Invalid orientation specified: %15.15s",token);
X error(errorline);
X }
X else if(*cnvtnump != 0)
X {
X sprintf(errorline,"Orientation field is badly formatted: %15.15s",token);
X error(errorline);
X }
X else if(i < 1 || i > 4)
X {
X sprintf(errorline,
X "Orientation must be either 1, 2, 3, or 4: %15.15s",token);
X error(errorline);
X }
X
X for(count=0; count < newchip->pincount; count++)
X {
X stat=gettoken(token); /* Trying to get a chip name. */
X if(stat == -1)
X {
X sprintf(errorline,"Not enough signal names read in for chip %12.12s.",
X newchip->name);
X goto endinput;
X }
X if(token[0] == ':')
X {
X if(strlen(token) <= NAMELENGTH)
X {
X if(!namecmp2(token,CHIPTOKEN))
X {
X sprintf(errorline,
X ":chip command occured before all signals were read in.");
X error(errorline);
X }
X if(!namecmp2(token,SPECIALTOKEN))
X {
X sprintf(errorline,":special command occured before all signals were read in.");
X goto dospecial;
X }
X }
X sprintf(errorline,"Invalid command: %15.15s",token);
X error(errorline);
X goto getcmd;
X }
X PAD(token);
X if(strlen(token) != NAMELENGTH)
X {
X sprintf(errorline,"Signal name is too long: %5.15s",token);
X error(errorline);
X }
X PAD(token);
X if(nextfree >= numpins)
X {
X sprintf(errorline,"Too many pins, maximum is %d : %15.15s",numpins,token);
X error(errorline);
X }
X pinarray[nextfree].signalname = setptr(token);
X pinarray[nextfree].mychip=newchip;
X pinarray[nextfree].pinnum=count+1;
X pinarray[nextfree].inner = -1;
X pinarray[nextfree].outer = -1;
X setrowandcol(&pinarray[nextfree]);
X nextfree = nextfree + 1;
X }
X
X for(;;)
X {
X stat=gettoken(token); /* Trying to get any excess signal names. */
X if(stat == -1) goto endinput;
X if(token[0] == ':')
X {
X if(strlen(token) <= NAMELENGTH)
X {
X PAD(token);
X if(!namecmp2(token,CHIPTOKEN))
X goto dochip;
X if(!namecmp2(token,SPECIALTOKEN))
X goto dospecial;
X }
X sprintf(errorline,"Invalid command: %15.15s",token);
X error(errorline);
X goto getcmd;
X }
X sprintf(errorline,"More signals than pins on chip %12.12s : %15.15s"
X ,newchip->name,token);
X error(errorline);
X }
X
Xdospecial:
X/*
X** dospecial - Processes a :special command.
X** Branches to:
X** getcmd
X** dospecial
X** endinput
X** dochip
X*/
Xstat=gettoken(token);
Xif(stat == -1) goto endinput;
Xif(token[0] == ':')
X {
X if(strlen(token) <= NAMELENGTH)
X {
X if(!namecmp2(token,CHIPTOKEN))
X {
X error(":CHIP statements must not follow :special statements");
X goto dochip;
X }
X if(!namecmp2(token,SPECIALTOKEN))
X {
X error("Duplicate :SPECIAL command.");
X goto dospecial;
X }
X }
X sprintf(errorline,"Invalid command: %15.15s",token);
X error(errorline);
X goto getcmd;
X }
Xif(strlen(token) > NAMELENGTH)
X {
X sprintf(errorline,"Special name is too long: %15.15s",token);
X error(errorline);
X goto dospecial;
X }
Xfound=0;
Xlocalptr=siglistleader;
XPAD(token);
Xwhile((localptr != 0) && (!found))
X {
X if(namecmp2(localptr->signalname,token))
X localptr = localptr->succ;
X else
X {
X localptr->special=1;
X found=1;
X }
X }
Xif(!found)
X {
X sprintf(errorline,"Special signal is never used: %12.12s",token);
X error(errorline);
X }
Xgoto dospecial;
X
X/*
X** endinput - end of input processor.
X*/
Xendinput: ;
X if(errorlevel != 0)
X {
X printf("Errors were detected. Program terminated.\n");
X exit(9);
X }
X return;
X}
Xerror(s)
Xchar *s;
X{
Xerrorlevel=1;
Xprintf("Error, Line %d, %s\n",inputline,s);
Xlinenum++;
X}
Xfatal(s)
Xchar *s;
X{
Xerrorlevel=1;
Xprintf("Fatal, Line %d, %s\n",inputline,s);
Xprintf("Error was fatal, Program terminated\n");
Xexit(10);
X}
/
echo 'x - setptr.c'
sed 's/^X//' > setptr.c << '/'
X/***********************************************************
X* setptr - Converts from a signal name to a pointer *
X* to an entry in the signallist. If the *
X* signal name isn't already in the signallist, *
X* then an entry for it is added. *
X***********************************************************/
X
X#include "wirewrap.h"
X
Xstruct signallist *setptr(signalname)
Xchar *signalname;
X{
Xint i;
Xstruct signallist *localptr;
X
Xlocalptr = siglistleader;
Xwhile (localptr != 0)
X {
X if(namecmp(localptr->signalname,signalname))
X localptr = localptr->succ;
X else
X break;
X }
Xif(localptr==0)
X {
X localptr=(struct signallist *)malloc(sizeof(struct signallist));
X for(i=0;i<12;i++)localptr->signalname[i]=signalname[i];
X localptr->succ = siglistleader;
X localptr->special = 0;
X siglistleader = localptr;
X }
X return(localptr);
X}
/
echo 'x - wirewrap.1'
sed 's/^X//' > wirewrap.1 << '/'
X.tr ~.
X.TH WIREWRAP 1 geowhiz
X.SH NAME
Xwirewrap - Wire Wrap List Generator
X.SH SYNOPSIS
X.I wirewrap
X> outputfile < inputfile
X.SH DESCRIPTION
X.I Wirewrap
Xinputs a file consisting of description of
Xa wirewrap board. It outputs three listings which
Xare intended to aid the wrapping, debugging, and maintanance of
Xthe board. The input data file is designed to be easy to prepare
Xfrom a schematic diagram of the board.
X.PP
XThe input consists of a list of descriptions of the placements and
Xsignals for each chip. Following this list is (optionally) a blank
Xline followed by a list of "special signal names" which will be
Xdescribed later.
X.SH INPUT FORMAT
XData is entered in free format. Comments are surrounded by /* ... */ as
Xin C source programs. The input consists of a sequence of :chip statements
Xoptionally followed by a sequence of :special statements.
X.PP
XThe :chip statement describes the
Xlocation of a component and the signals on its pins.
XThe :chip statement is made up of the word ``:chip'' followed by:
X.PP
X.TP 10
X.B Name
X( IC1, 74c123, Stuffer, FF3, etc )
X.RE
X.TP 10
X.B Grid
X( Position in the component matrix; A5, B2, etc )
X.RE
X.TP 10
X.B Npins
X( Number of pins for this component; 8, 14, 16, 20, etc )
X.RE
X.TP 10
X.B Width
X( Spacing between rows of pins on this component in 1/10'th inches.
X0=SIP, 3=normal dip)
X.RE
X.TP 10
X.B Row
X( Position of pin 1 in the pin matrix )
X.RE
X.TP 10
X.B Column
X( Position of pin 1 in the pin matrix )
X.RE
X.TP 10
X.B Orientation
X( Orientation (i.e. rotation) of component; 1-4. SEE BELOW )
X.RE
X.TP 10
X.B Sig_name_for_pin_1
X.RE
X.TP 10
X.B Sig_name_for_pin_2
X.RE
X.TP 10
X\(bu
X.RE
X.TP 10
X\(bu
X.RE
X.TP 10
X\(bu
X.RE
X.TP 10
X.B Sig_name_for_pin_Npin
X.RE
X.PP
XA pin without a signal on it must have a ``.'' entry to show that it's `unused'.
X.PP
X.ne 10
XThe orientation entrys are as follows (viewing component side):
X.PP
X.nf
X.cs 1 21
X +----+ 1 1/----+
X +--------+ | | +--------\\ | |
X | 1 | | 2 | | 3 | | 4 |
X \\--------+ | | +--------+ | |
X 1 +----/1 +----+
X.cs
X.fi
X.PP
X.ne 15
XThe Row,Col numbering system is as follows:
X.PP
X.nf
X.cs 1 21
X 0 C o l #
X ^ 0 +--------------->
X | |
X R | Component R | Wireing
X o | Side o | Side
X w | Viewing w | Viewing
X # | Chips # | Pins
X | |
X 0 +---------------> V
X 0 C o l #
X.cs
X.fi
X.PP
XThe Name and Grid fields are provided as a means of identifying
Xthe components. The wirewrap program does not use these fields
Xfor placement or routing. They are passed through to the output
Xlistings as a way to refer the listings back to the schematics.
X.PP
XThe :special statement can direct the wirewrap program to handle special
Xsignals like power and ground, or any signal requiring special attention
Xfor routing. These signal names are entered following the word ``:special''.
X.SH EXAMPLE
X.PP
X.nf
X.cs 1 21
X SIGA
X ______________________________________________________________
X | |
X | |---- \\ |---- \\ |---- \\ |
X ----|1 \\ SIGB ---|4 \\ SIGC ---|8 \\ |
X | | 3 |0-------| | 6 |0-------| | 10 |0----|
X ---|2 / ---|5 / ---|9 /
X |---- / |---- / |---- /
X.cs
X.fi
X.PP
X.PP
XIn this example, a 3 stage ring oscillator is made up of a single chip.
XThe chip is packaged as a standard 14 pin DIP.
XThe chip is placed in the lower left corner of the board, in orientation
X1.
X(Viewing from the wiring side, facing pins, as in the above diagram.)
XThis is postion A1 on the circuit board.
XThe power and ground for this circuit are on pins 14 and 7 respectively,
Xand are both special signals since, for example, they are implemented by
Xetched traces on the board.
X.PP
X:chip
X.br
XIC1-Osc /* Name */
X.br
XA1 /* Grid */
X.br
X14 /* Npins */
X.br
X3 /* Width */
X.br
X0 /* Row */
X.br
X0 /* Col */
X.br
X1 /* Orientation */
X.br
XSIGA /* Pin 1. */
X.br
XSIGA /* Pin 2. */
X.br
XSIGB /* Pin 3. */
X.br
XSIGB /* Pin 4. */
X.br
XSIGB /* Pin 5. */
X.br
XSIGC /* Pin 6. */
X.br
XGND /* Pin 7. */
X.br
XSIGC /* Pin 8. */
X.br
XSIGC /* Pin 9. */
X.br
XSIGA /* Pin 10. */
X.br
X~ /* Pin 11. */
X.br
X~ /* Pin 12. */
X.br
X~ /* Pin 13. */
X.br
X5V /* Pin 14. */
X.br
X:special /* Start of special signals */
X.br
X5V /* 5V is a special signal. */
X.br
XGND /* GND is also a special signal. */
X.PP
X.ne 10
XSince the input is free format, This could be written more succinctly as:
X.PP
X:chip
XIC1-Osc A1 14 3 0 0 1
X.br
XSIGA SIGA SIGB SIGB SIGB SIGC GND
X.br
XSIGC SIGC SIGA . . . 5V
X.br
X:special 5V GND
X.SH AUTHOR
XBruce Karsh, University of Wisconsin, Department of Geology & Geophysics
X.br
XAugust 16, 1985
/
echo 'Part 01 of wirewrap program complete.'
exit
More information about the Mod.sources
mailing list