#    This file is part of SCIgen.
#
#    SCIgen is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    SCIgen is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with SCIgen; if not, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


GRAPHVIZ {

LAYOUT

size="3,3";

NODES
EDGES

END

}

LAYOUT {

GRAPH_DIR {

}

END }

NUM_NODES 2
NUM_NODES 3
NUM_NODES 4
NUM_NODES 5
NUM_NODES 6
NUM_NODES 7
NUM_NODES 8
NUM_NODES 9
NUM_NODES 10

NODES_1 NEW_NODE;
NODES_2 {

  NEW_NODE;
  NODES_1

}
NODES_3 {

  NEW_NODE;
  NODES_2

}
NODES_4 {

  NEW_NODE;
  NODES_3

}
NODES_5 {

  NEW_NODE;
  NODES_4

}
NODES_6 {

  NEW_NODE;
  NODES_5

}
NODES_7 {

  NEW_NODE;
  NODES_6

}
NODES_8 {

  NEW_NODE;
  NODES_7

}
NODES_9 {

  NEW_NODE;
  NODES_8

}
NODES_10 {

  NEW_NODE;
  NODES_9

}

EDGES_1 EDGE;
EDGES_2 {

  EDGE;
  EDGES_1

}
EDGES_3 {

  EDGE;
  EDGES_2

}
EDGES_4 {

  EDGE;
  EDGES_3

}
EDGES_5 {

  EDGE;
  EDGES_4

}
EDGES_6 {

  EDGE;
  EDGES_5

}
EDGES_7 {

  EDGE;
  EDGES_6

}
EDGES_8 {

  EDGE;
  EDGES_7

}
EDGES_9 {

  EDGE;
  EDGES_8

}
EDGES_10 {

  EDGE;
  EDGES_9

}
EDGES_11 {

  EDGE;
  EDGES_10

}
EDGES_12 {

  EDGE;
  EDGES_11

}
EDGES_13 {

  EDGE;
  EDGES_12

}
EDGES_14 {

  EDGE;
  EDGES_13

}
EDGES_15 {

  EDGE;
  EDGES_14

}
EDGES_16 {

  EDGE;
  EDGES_15

}

NEW_NODE nodeNODENUM+ [label=NODE_LABEL, shape=SHAPE_TYPE]
OLD_NODE nodeNODENUM#

NODENUM\+
NODENUM\#

EDGE OLD_NODE EDGEOP LABELED_EDGE
EDGE!

LABELED_EDGE!
LABELED_EDGE	OLD_NODE [label=EDGE_LABEL, dir="back"]

EDGE_LABEL_YESNO	yes
EDGE_LABEL_YESNO	no

NODE_LABEL_PROG		Web Browser
NODE_LABEL_PROG		Kernel
NODE_LABEL_PROG		Userspace
NODE_LABEL_PROG		JVM
NODE_LABEL_PROG+10	SYSNAME
NODE_LABEL_PROG		Editor
NODE_LABEL_PROG		Simulator
NODE_LABEL_PROG		Emulator
NODE_LABEL_PROG		File System
NODE_LABEL_PROG		Network
NODE_LABEL_PROG		Video Card
NODE_LABEL_PROG		X
NODE_LABEL_PROG		Trap handler
NODE_LABEL_PROG		Memory
NODE_LABEL_PROG		Shell
NODE_LABEL_PROG		Keyboard
NODE_LABEL_PROG		Display

NODE_LABEL_DEC	"NODE_LABEL_LET < NODE_LABEL_LET"
NODE_LABEL_DEC	"NODE_LABEL_LET == NODE_LABEL_LET"
NODE_LABEL_DEC	"NODE_LABEL_LET > NODE_LABEL_LET"
NODE_LABEL_DEC	"NODE_LABEL_LET != NODE_LABEL_LET"
NODE_LABEL_DEC	"NODE_LABEL_LET % 2\n== 0"
NODE_LABEL_DEC	"goto\nTWODIG"
NODE_LABEL_DEC	"goto\nSYSNAME"
NODE_LABEL_DEC	stop
NODE_LABEL_DEC	start

TWODIG	NONZ
TWODIG	NONZDIGIT

NODE_LABEL_LET A
NODE_LABEL_LET B
NODE_LABEL_LET C
NODE_LABEL_LET D
NODE_LABEL_LET E
NODE_LABEL_LET F
NODE_LABEL_LET G
NODE_LABEL_LET H
NODE_LABEL_LET I
NODE_LABEL_LET J
NODE_LABEL_LET K
NODE_LABEL_LET L
NODE_LABEL_LET M
NODE_LABEL_LET N
NODE_LABEL_LET O
NODE_LABEL_LET P
NODE_LABEL_LET Q
NODE_LABEL_LET R
NODE_LABEL_LET S
NODE_LABEL_LET T
NODE_LABEL_LET U
NODE_LABEL_LET V
NODE_LABEL_LET W
NODE_LABEL_LET X
NODE_LABEL_LET Y
NODE_LABEL_LET Z

NODE_LABEL_NET	Gateway
NODE_LABEL_NET	"SYSNAME\nnode"
NODE_LABEL_NET	"SYSNAME\nserver"
NODE_LABEL_NET	"SYSNAME\nclient"
NODE_LABEL_NET	Web proxy
NODE_LABEL_NET	Firewall
NODE_LABEL_NET	"Remote\nfirewall"
NODE_LABEL_NET	"Remote\nserver"
NODE_LABEL_NET	"DNS\nserver"
NODE_LABEL_NET	"CDN\ncache"
NODE_LABEL_NET	"Home\nuser"
NODE_LABEL_NET	VPN
NODE_LABEL_NET	"Bad\nnode"
NODE_LABEL_NET	"Failed!"
NODE_LABEL_NET	"Client\nA"
NODE_LABEL_NET	"Client\nB"
NODE_LABEL_NET	"Server\nA"
NODE_LABEL_NET	"Server\nB"
NODE_LABEL_NET	"NAT"

NODE_LABEL_HW	"L1\ncache"
NODE_LABEL_HW	"L2\ncache"
NODE_LABEL_HW	"L3\ncache"
NODE_LABEL_HW	"Memory\nbus"
NODE_LABEL_HW	"CPU"
NODE_LABEL_HW	"GPU"
NODE_LABEL_HW	"Page\ntable"
NODE_LABEL_HW	"Register\nfile"
NODE_LABEL_HW	"SYSNAME\ncore"
NODE_LABEL_HW	"Trap\nhandler"
NODE_LABEL_HW	"DMA"
NODE_LABEL_HW	"Disk"
NODE_LABEL_HW	"ALU"
NODE_LABEL_HW	"PC"
NODE_LABEL_HW	"Stack"
NODE_LABEL_HW	"Heap"

NONZ 1
NONZ 2
NONZ 3
NONZ 4
NONZ 5
NONZ 6
NONZ 7
NONZ 8
NONZ 9
DIGIT+9	NONZ
DIGIT 	0

IP_PORT	NONZDIGIT

IP_PART DIGIT
IP_PART+4	NONZDIGIT
IP_PART+4	1DIGITDIGIT
IP_PART	20DIGIT
IP_PART	21DIGIT
IP_PART	22DIGIT
IP_PART	23DIGIT
IP_PART	23DIGIT
IP_PART	24DIGIT
IP_PART	250
IP_PART	251
IP_PART	252
IP_PART	253
IP_PART	254
IP_PART	255

NODE_LABEL_IP+5	"IP_PART.IP_PART.IP_PART.IP_PART", IP_FONT_SIZE
NODE_LABEL_IP	"IP_PART.IP_PART.IP_PART.0/24", IP_FONT_SIZE
NODE_LABEL_IP	"IP_PART.IP_PART.0.0/16", IP_FONT_SIZE
NODE_LABEL_IP	"IP_PART.0.0.0/8", IP_FONT_SIZE
NODE_LABEL_IP	"IP_PART.IP_PART.IP_PART.IP_PART:IP_PORT", IP_FONT_SIZE
IP_FONT_SIZE	fontsize=9

NODE_LABEL!


# letter
PICK_LABEL_TYPE+2	0
#programs
PICK_LABEL_TYPE+2	1
#network elements
PICK_LABEL_TYPE+2	2
# ip addresses
PICK_LABEL_TYPE	3
# hardware
PICK_LABEL_TYPE+2	4
# decisions
PICK_LABEL_TYPE+2	5

PICK_GRAPH_TYPE graph
PICK_GRAPH_TYPE digraph

PICK_SHAPE_TYPE+3 SHAPE_TYPE
PICK_SHAPE_TYPE+2 SHAPE_TYPE SHAPE_TYPE
PICK_SHAPE_TYPE   SHAPE_TYPE SHAPE_TYPE SHAPE_TYPE
PICK_SHAPE_TYPE   SHAPE_TYPE SHAPE_TYPE SHAPE_TYPE SHAPE_TYPE SHAPE_TYPE

SHAPE_TYPE+7	ellipse
SHAPE_TYPE	circle
SHAPE_TYPE	egg
SHAPE_TYPE+5	triangle
SHAPE_TYPE+5	diamond
SHAPE_TYPE+10	box
SHAPE_TYPE	trapezium
SHAPE_TYPE	parallelogram
SHAPE_TYPE	house
SHAPE_TYPE	hexagon
SHAPE_TYPE	octagon
SHAPE_TYPE	record
SHAPE_TYPE	polygon
SHAPE_TYPE!

UNDIR_LAYOUT neato
UNDIR_LAYOUT twopi
UNDIR_LAYOUT circo
UNDIR_LAYOUT fdp

DIR_LAYOUT dot