# Critical Path Analysis demo, by Ian Harrison #ASSOCIATION crp,Critical Path Analysis,-dir {HARDYDIR}\critpath -clips loader.clp #FILE USER CRITPATH\ANALYSIS.CLP ;;; Function getChildren ;;; Argument: card id and image id of a node in the graph ;;; Description: Returns a multifield variable of image id's of those ;;; children nodes connected to the node. (deffunction getChildren (?card ?node-image) (bind ?node-object (diagram-image-get-object ?card ?node-image)) (bind ?arc-object (node-object-get-first-arc-object ?card ?node-object)) (bind ?arc-image (diagram-object-get-first-image ?card ?arc-object)) ; (printout t "arc image = " ?arc-image crlf) (bind $?children (create$)) (while (<> ?arc-image -1) do (bind ?connected-image (arc-image-get-image-to ?card ?arc-image)) (bind ?connected-object (diagram-image-get-object ?card ?connected-image)) (if (neq ?connected-object ?node-object) then (bind $?children (create$ $?children ?connected-image))) (bind ?next-arc-object (node-object-get-next-arc-object)) ; (printout t "while loop next arc object = " ?next-arc-object crlf) (if (= ?next-arc-object -1) then (bind ?arc-image -1) else (bind ?arc-image (diagram-object-get-first-image ?card ?next-arc-object)) ) ; (printout t "while loop next arc image = " ?arc-image crlf) ) (return $?children) ) ;;; Function initialiseNodeList ;;; Argument: card id and image id of the root node of a graph ;;; Description: Returns a multifield variable of image id's of those ;;; nodes connected to the root node. (deffunction initialiseNodeList (?card ?root-node-image) (bind $?children (getChildren ?card ?root-node-image)) (return (create$ ?root-node-image $?children)) ) ;;; Function: getParents ;;; Argument: card id and image id of a node in the graph ;;; Description: Returns a multifield variable of image id's of those ;;; parent nodes connected to the node. (deffunction getParents (?card ?node-image) (bind ?node-object (diagram-image-get-object ?card ?node-image)) (bind ?arc-object (node-object-get-first-arc-object ?card ?node-object)) (bind ?arc-image (diagram-object-get-first-image ?card ?arc-object)) ; (printout t "arc image = " ?arc-image crlf) (bind $?parents (create$)) (while (<> ?arc-image -1) do (bind ?connected-image (arc-image-get-image-from ?card ?arc-image)) (bind ?connected-object (diagram-image-get-object ?card ?connected-image)) (if (neq ?connected-object ?node-object) then (bind $?parents (create$ $?parents ?connected-image))) (bind ?next-arc-object (node-object-get-next-arc-object)) ; (printout t "while loop next arc object = " ?next-arc-object crlf) (if (= ?next-arc-object -1) then (bind ?arc-image -1) else (bind ?arc-image (diagram-object-get-first-image ?card ?next-arc-object)) ) ; (printout t "while loop next arc image = " ?arc-image crlf) ) (return $?parents) ) ;;; Function validStartNode ;;; Argument: card id and image id of a node in the graph ;;; Description: If node is a valid start node for analysis return 1 ;;; otherwise return 0. A valid start node is one with ;;; no parents, but does have children (deffunction validStartNode (?card ?selected-image-id) (bind $?parents (getParents ?card ?selected-image-id)) (bind $?children (getChildren ?card ?selected-image-id)) (if (and (= (length $?parents) 0) (> (length $?children) 0)) then (return 1) else (return 0))) ;;; Function processedNode ;;; Argument: card id and image id of a node in the graph ;;; Description: If node has been processed in a forward direction ;;; return 1, if it has been processed in both forward ;;; and backward direction return 2, else return 0. (deffunction processedNode (?card ?node-image) (bind ?node-object (diagram-image-get-object ?card ?node-image)) (bind ?earliest-finish (diagram-object-get-string-attribute ?card ?node-object "earliest finish")) (bind ?latest-start (diagram-object-get-string-attribute ?card ?node-object "latest start")) (if (and (= 0 (str-compare ?latest-start "")) (= 0 (str-compare ?earliest-finish ""))) then (return 0)) (if (<> 0 (str-compare ?latest-start "")) then (return 2)) (if (<> 0 (str-compare ?earliest-finish "")) then (return 1)) ) ;;; Function unprocessedParents ;;; Argument: card id and image id of a node in the graph ;;; Description: Returns 1 if any of the parent nodes are unprocessed ;;; in a forward direction and returns 0 if all parents ;;; are processed. (deffunction unprocessedParents (?card ?node-image) (bind $?parents (getParents ?card ?node-image)) (while (> (length $?parents) 0) do (bind ?parent-image (nth$ 1 $?parents)) (bind ?processed-state (processedNode ?card ?parent-image)) (if (= 0 ?processed-state) then (return 1) else (bind $?parents (delete$ $?parents 1 1)) ) ) (return 0)) ;;; Function highestConnectedEF ;;; Argument: card id and image id of a node in the graph ;;; Description: Returns the attribute string that is the highest number ;;; of all the node's earliest finish. (deffunction highestConnectedEF (?card ?node-image) (bind $?parents (getParents ?card ?node-image)) (bind ?maximum 0) (while (> (length $?parents) 0) do (bind ?parent-image (nth$ 1 $?parents)) (bind ?parent-object (diagram-image-get-object ?card ?parent-image)) (bind ?earliest-finish (diagram-object-get-string-attribute ?card ?parent-object "earliest finish")) (if (> (string-to-float ?earliest-finish) ?maximum) then (bind ?maximum (string-to-float ?earliest-finish))) (bind $?parents (delete$ $?parents 1 1)) ) (return (str-cat "" ?maximum)) ) ;;; Function processNode ;;; Argument: card id and image id of a node in the graph ;;; Description: If node has been processed jump out of processing. ;;; If node has any unprocessed parents add these to ;;; end of process list and jump out of processing. ;;; Otherwise process the node and then append children ;;; of node to the process-list (deffunction processNode (?card ?node-image) (if (> 0 (processedNode ?card ?node-image)) then (return 1)) (if (= 1 (unprocessedParents ?card ?node-image)) then (bind ?*process-list* (create$ ?*process-list* (getParents ?card ?node-image))) (return 1)) (if (and (= 0 (unprocessedParents ?card ?node-image)) (= 0 (processedNode ?card ?node-image))) then (bind ?earliest-start (highestConnectedEF ?card ?node-image)) ; (printout t "Highest earliest start = " ; ?earliest-start crlf) (bind ?node-object (diagram-image-get-object ?card ?node-image)) (bind ?duration (string-to-float (diagram-object-get-string-attribute ?card ?node-object "duration"))) ; (printout t "Duration = " ?duration crlf) (diagram-object-set-string-attribute ?card ?node-object "earliest start" ?earliest-start) (bind ?earliest-finish (+ ?duration (string-to-float ?earliest-start))) ; (printout t "Earliest finish = " ?earliest-finish crlf) (diagram-object-set-string-attribute ?card ?node-object "earliest finish" (str-cat "" ?earliest-finish)) ; (printout t "Stored EF = " ; (diagram-object-get-string-attribute ; ?card ?node-object "earliest finish" ) crlf) (diagram-object-format-text ?card ?node-object) (bind ?*process-list* (create$ ?*process-list* (getChildren ?card ?node-image))) (return 1) ) ) ;;; Function unprocessedChildren ;;; Argument: card id and image id of a node in the graph ;;; Description: Returns 1 if any of the children nodes are unprocessed ;;; in a reverse direction and returns 0 if all children ;;; are processed. (deffunction unprocessedChildren (?card ?node-image) (bind $?children (getChildren ?card ?node-image)) (while (> (length $?children) 0) do (bind ?child-image (nth$ 1 $?children)) (bind ?processed-state (processedNode ?card ?child-image)) (if (or (= 0 ?processed-state) (= 1 ?processed-state)) then (return 1) else (bind $?children (delete$ $?children 1 1)) ) ) (return 0)) ;;; Function lowestConnectedLS ;;; Argument: card id and image id of a node in the graph ;;; Description: Returns the attribute string that is the lowest number ;;; of all the node's latest start. (deffunction lowestConnectedLS (?card ?node-image) (bind $?children (getChildren ?card ?node-image)) (if (= 0 (length $?children)) then ;; first node take ;; earliest finish as minimum (bind ?node-object (diagram-image-get-object ?card ?node-image)) (bind ?minimum (string-to-float (diagram-object-get-string-attribute ?card ?node-object "earliest finish"))) ; (printout t "Root node minumum = " ?minimum crlf) else (bind ?first-child (diagram-image-get-object ?card (nth$ 1 $?children))) (bind ?minimum (string-to-float (diagram-object-get-string-attribute ?card ?first-child "latest start"))) (while (> (length $?children) 0) do (bind ?child-image (nth$ 1 $?children)) (bind ?child-object (diagram-image-get-object ?card ?child-image)) (bind ?latest-start (diagram-object-get-string-attribute ?card ?child-object "latest start")) (if (< (string-to-float ?latest-start) ?minimum) then (bind ?minimum (string-to-float ?latest-start))) (bind $?children (delete$ $?children 1 1)) ) ) ; (printout t "Minumum = " ?minimum crlf) (return (str-cat "" ?minimum)) ) ;;; Function: reverseProcessNode ;;; Argument: card id and image id of a node in the graph ;;; Description: If node has been processed jump out of processing. ;;; If node has any unprocessed children add these to ;;; end of process list and jump out of processing. ;;; Otherwise process the node and then append parents ;;; of node to the process-list (deffunction reverseProcessNode (?card ?node-image) (if (> 0 (processedNode ?card ?node-image)) then (return 1)) (if (= 1 (unprocessedChildren ?card ?node-image)) then (bind ?*process-list* (create$ ?*process-list* (getChildren ?card ?node-image))) (return 1)) (if (and (= 0 (unprocessedChildren ?card ?node-image)) (< (processedNode ?card ?node-image) 2)) then (bind ?latest-finish (lowestConnectedLS ?card ?node-image)) ; (printout t "Highest earliest start = " ; ?earliest-start crlf) (bind ?node-object (diagram-image-get-object ?card ?node-image)) (bind ?duration (string-to-float (diagram-object-get-string-attribute ?card ?node-object "duration"))) ; (printout t "Duration = " ?duration crlf) (diagram-object-set-string-attribute ?card ?node-object "latest finish" ?latest-finish) (bind ?latest-start (- (string-to-float ?latest-finish) ?duration)) ; (printout t "Earliest finish = " ?earliest-finish crlf) (diagram-object-set-string-attribute ?card ?node-object "latest start" (str-cat "" ?latest-start)) ; (printout t "Stored EF = " ; (diagram-object-get-string-attribute ; ?card ?node-object "earliest finish" ) crlf) (diagram-object-format-text ?card ?node-object) (bind ?*process-list* (create$ ?*process-list* (getParents ?card ?node-image))) (return 1) ) ) ;;; Function: reverseProcess ;;; Argument: card id and image id of the last node of a graph ;;; Description: Calculates the latest start and latest finish ;;; for the nodes in the graph (deffunction reverseProcess (?card ?root-node-image) (bind ?*process-list* (create$ ?root-node-image (getParents ?card ?root-node-image))) (while (> (length ?*process-list*) 0) do (bind ?node-image (nth$ 1 ?*process-list*)) (reverseProcessNode ?card ?node-image) (bind ?*process-list* (delete$ ?*process-list* 1 1)) ) ) ;;; Function: resetAttributes ;;; Argument: card id and node object id ;;; Description: Resets the earliest start, earliest finish, latest ;;; start and latest finish attributes of all nodes. (deffunction resetAttributes (?card ?node-object) (diagram-object-set-string-attribute ?card ?node-object "earliest start" "") (diagram-object-set-string-attribute ?card ?node-object "earliest finish" "") (diagram-object-set-string-attribute ?card ?node-object "latest start" "") (diagram-object-set-string-attribute ?card ?node-object "latest finish" "") ) ;;; Function: initialiseDiagram ;;; Argument: card id ;;; Description: Resets the earliest start, earliest finish, latest ;;; start and latest finish attributes of all nodes. (deffunction initialiseDiagram (?card) (bind ?node-object (get-first-card-node ?card)) (while (> ?node-object 0) do (resetAttributes ?card ?node-object) (bind ?node-object (get-next-card-node)) ) (return 1)) ;;; Function: arcToCriticalNode ;;; Argument: card id, image id of a node in the graph on critical path, ;;; earliest finish and latest finish ;;; Description: Returns image id of arc to next node on critical path (deffunction arcToCriticalNode (?card ?node-image ?earliest-finish ?latest-finish) (bind ?node-object (diagram-image-get-object ?card ?node-image)) (bind ?arc-object (node-object-get-first-arc-object ?card ?node-object)) (bind ?arc-image (diagram-object-get-first-image ?card ?arc-object)) (bind ?cp-arc-image -1) (while (<> ?arc-image -1) do (bind ?connected-image (arc-image-get-image-to ?card ?arc-image)) (bind ?connected-object (diagram-image-get-object ?card ?connected-image)) (bind ?connected-earliest-start (string-to-float (diagram-object-get-string-attribute ?card ?connected-object "earliest start"))) (bind ?connected-latest-start (string-to-float (diagram-object-get-string-attribute ?card ?connected-object "latest start"))) (if (and (= ?earliest-finish ?connected-earliest-start) (= ?latest-finish ?connected-latest-start)) then (bind ?cp-arc-image ?arc-image)) (bind ?next-arc-object (node-object-get-next-arc-object)) (if (= ?next-arc-object -1) then (bind ?arc-image -1) else (bind ?arc-image (diagram-object-get-first-image ?card ?next-arc-object)) ) ) (return ?cp-arc-image) ) (deffunction markAll (?card ?node-image ?earliest-finish ?latest-finish) (bind ?cp-arc-image (arcToCriticalNode ?card ?node-image ?earliest-finish ?latest-finish)) (if (> ?cp-arc-image 0) then (diagram-image-add-annotation ?card ?cp-arc-image "Hollow circle arrowhead" "Middle") (diagram-image-set-pen-colour ?card ?cp-arc-image "RED") (bind ?connected-image (arc-image-get-image-to ?card ?cp-arc-image)) (bind ?connected-object (diagram-image-get-object ?card ?connected-image)) (bind ?connected-earliest-finish (string-to-float (diagram-object-get-string-attribute ?card ?connected-object "earliest finish"))) (bind ?connected-latest-finish (string-to-float (diagram-object-get-string-attribute ?card ?connected-object "latest finish"))) (markAll ?card ?connected-image ?connected-earliest-finish ?connected-latest-finish) else (return 1)) ) ;;; Function: markCriticalPath ;;; Argument: card id and image id of the root node of the graph ;;; Description: Marks the critical path on graph (deffunction markCriticalPath (?card ?node-image) (bind ?node-object (diagram-image-get-object ?card ?node-image)) (bind ?earliest-finish (string-to-float (diagram-object-get-string-attribute ?card ?node-object "earliest finish"))) (bind ?latest-finish (string-to-float (diagram-object-get-string-attribute ?card ?node-object "latest finish"))) (markAll ?card ?node-image ?earliest-finish ?latest-finish) ) ;;; Function: removeOldCriticalPath ;;; Argument: card id ;;; Description: Loops through all arcs in the card and removes the ;;; "Hollow circle arrowhead" annotation. (deffunction removeOldCriticalPath (?card) (bind ?arc-image (diagram-card-get-first-arc-image ?card)) (while (<> ?arc-image -1) do (diagram-image-set-pen-colour ?card ?arc-image "BLACK") (bind ?annotation (diagram-image-get-first-annotation ?card ?arc-image)) (bind ?annotation-name (diagram-image-annotation-get-name ?card ?arc-image ?annotation)) (while (<> ?annotation -1) do (if (eq ?annotation-name "Hollow circle arrowhead") then (diagram-image-delete-annotation ?card ?arc-image ?annotation)) (bind ?annotation (diagram-image-get-next-annotation)) (bind ?annotation-name (diagram-image-annotation-get-name ?card ?arc-image ?annotation)) ) (bind ?arc-image (diagram-card-get-next-arc-image)) ) ) ;;; Function: criticalPath ;;; Argument: card id and image id of the root node of a graph ;;; Description: Calculates the critical path for the graph and ;;; as a side effect, puts all the time values into the ;;; appropriate attributes of all the node. Returns 1. (deffunction criticalPath (?card ?root-node-image) ; (printout t "got into function criticalPath" crlf) (initialiseDiagram ?card) (bind ?*process-list* (initialiseNodeList ?card ?root-node-image)) ; (printout t "got back from initialiseNodeList" crlf) ; (printout t "Initial list of node image id's = " ?*process-list* crlf) (while (> (length ?*process-list*) 1) do (bind ?node-image (nth$ 1 ?*process-list*)) (processNode ?card ?node-image) (bind ?*process-list* (delete$ ?*process-list* 1 1)) ) (bind ?node-image (nth$ 1 ?*process-list*)) (processNode ?card ?node-image) (reverseProcess ?card ?node-image) (removeOldCriticalPath ?card) (diagram-card-clear-canvas ?card) (diagram-card-redraw ?card) (markCriticalPath ?card ?root-node-image) ; (printout t "processed list of node image id's = " ?*process-list* crlf) (return 1)) #FILE USER CRITPATH\ATTRIBUT.CLP (defglobal ?*attribute-frame* = 0) (defglobal ?*attribute-panel* = 0) (defglobal ?*node-name-item* = 0) (defglobal ?*node-duration-item* = 0) (defglobal ?*ok-button* = 0) (defglobal ?*cancel-button* = 0) (defglobal ?*nodeA* = -1) (defglobal ?*cardA* = -1) ;;; Function: onCloseAttributes ;;; Arguments: the attribute frame ;;; Description: This is the callback function that is called when the ;;; attribute frame is closed (deffunction onCloseAttributes (?frame) (window-delete ?frame) (bind ?*attribute-frame* 0) (return 1)) ;;; Function: editName ;;; Arguments: The interface item that displays the name of the node ;;; Description: This is the callback function of the interface item ;;; ?*node-name-item* of the attribute frame. It sets the ;;; text item value to what the nodes current name is. (deffunction editName (?item) (bind ?name (diagram-object-get-string-attribute ?*cardA* ?*nodeA* "name"))) ;;; Function: editDuration ;;; Arguments: The interface item that displays the duration of the node ;;; Description: This is the callback function of the interface item ;;; ?*node-duration-item* of the attribute frame. It sets the ;;; text item value to what the nodes current duration is. (deffunction editDuration (?item) (bind ?duration (diagram-object-get-string-attribute ?*cardA* ?*nodeA* "duration"))) ;;; Function: okAttributes ;;; Arguments: The Ok button in the attribute frame ;;; Description: This is the callback function of the interface item ;;; ?*ok-button* of the attribute frame. It sets the ;;; new attribute values in HARDY, and recalculates ;;; critical path (deffunction okAttributes (?item) (bind ?name (text-get-value ?*node-name-item*)) (bind ?duration (text-get-value ?*node-duration-item*)) (if (and (= 1 (diagram-image-selected ?*cardA* ?*selected-image-id*)) (= 1 (validStartNode ?*cardA* ?*selected-image-id*))) then (diagram-object-set-string-attribute ?*cardA* ?*nodeA* "name" ?name) (diagram-object-set-string-attribute ?*cardA* ?*nodeA* "duration" ?duration) (diagram-object-format-text ?*cardA* ?*nodeA*) (doAnalysis ?*cardA*) else (if (or (= 0 (diagram-image-selected ?*cardA* ?*selected-image-id*)) (= 0 (validStartNode ?*cardA* ?*selected-image-id*))) then (diagram-object-set-string-attribute ?*cardA* ?*nodeA* "name" ?name) (diagram-object-set-string-attribute ?*cardA* ?*nodeA* "duration" ?duration) (diagram-object-format-text ?*cardA* ?*nodeA*) (message-box "Diagram not updated. Please select a root node and then choose menu item Evaluate: Critical Path to update diagram" OK 1 (card-get-frame ?*cardA*))) ) (onCloseAttributes ?*attribute-frame*) ) ;;; Function: cancelAttributes ;;; Arguments: The Cancel button in the attribute frame ;;; Description: This is the callback function of the interface item ;;; ?*cancel-button* of the attribute frame. (deffunction cancelAttributes (?item) (onCloseAttributes ?*attribute-frame*)) ;;; Function: createAttributeFrame ;;; Arguments: ;;; Description: The attribute editing window is created (deffunction createAttributeFrame () (bind ?*attribute-frame* (frame-create (card-get-frame ?*cardA*) "Attributes" -1 -1 300 250)) (window-add-callback ?*attribute-frame* OnClose onCloseAttributes) (bind ?*attribute-panel* (panel-create ?*attribute-frame* 0 0 300 250)) (panel-set-label-position ?*attribute-panel* wxVERTICAL) (bind ?*node-name-item* (text-create ?*attribute-panel* editName "Name:" "" -1 -1 200 80)) (panel-new-line ?*attribute-panel*) (bind ?*node-duration-item* (text-create ?*attribute-panel* editDuration "Duration:" "" -1 -1 200 80)) (panel-new-line ?*attribute-panel*) (bind ?*ok-button* (button-create ?*attribute-panel* okAttributes "Ok")) (bind ?*cancel-button* (button-create ?*attribute-panel* cancelAttributes "Cancel")) (panel-new-line ?*attribute-panel*) (panel-item-set-default ?*ok-button*) (window-fit ?*attribute-panel*) (window-fit ?*attribute-frame*) (window-centre ?*attribute-frame*) ) ;;; Function: initAttributeFrame ;;; Arguments: a diagram card id, a node object id ;;; Description: When node is control clicked on the Attribute editing ;;; window appears (deffunction initAttributeFrame (?card ?node-object) (bind ?*cardA* ?card) (bind ?*nodeA* ?node-object) (if (= 0 ?*attribute-frame*) then (createAttributeFrame)) (bind ?node-name (diagram-object-get-string-attribute ?*cardA* ?*nodeA* "name")) (text-set-value ?*node-name-item* ?node-name) (bind ?node-duration (diagram-object-get-string-attribute ?*cardA* ?*nodeA* "duration")) (text-set-value ?*node-duration-item* ?node-duration) (window-show ?*attribute-frame* 1) ) #FILE USER CRITPATH\DIAGRAMS.DEF definitions(hardy_version = 1.24). custom(custom_menu_strings = []). symbol_library(file = "projman.slb"). diagram_definition(file = "projman.def"). #FILE USER CRITPATH\EVENTHND.CLP ;;;;;;;;;;;;;;;;;;;;;;; EVENT HANDLER FUNCTIONS ;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; File: event_handlers.clp ;;; Author: Ian Harrison ;;; Date: 7/794 ;;; ;;; Description: This file contains the event handler functions that ;;; have been declared in the batch file loader.clp, together ;;; with some auxiliary functions. ;;; ;;; Functions: newNode (event: CreateNodeImage) ;;; exitHardy (event: Exit) ;;; saveNetwork ;;; doAnalysis ;;; customMenu (event: CustomMenu) ;;; setTitle (event: CreateCard) ;;; nodeLeftClick (event: NodeLeftClick) ;;; nodeRightClick (event: NodeRightClick) ;;; Function: newNode ;;; Arguments: a diagram card id, an image id and a node-type ;;; Description: It is the callback function of the event ;;; "CreateNodeImage". (deffunction newNode (?card ?image ?type) (bind ?object (diagram-image-get-object ?card ?image)) (bind ?name (get-text-from-user "Enter name of activity." "" 1 (card-get-frame ?card))) (if (= 0 (str-compare ?name "")) then (message-box "You must enter a name for the activity" OK 1 (card-get-frame ?card)) (return 0) else (bind ?duration (get-text-from-user "Enter duration of activity." "" 1 (card-get-frame ?card))) (if (not (numberp (string-to-float ?duration))) then (message-box "You must enter a number for the duration" OK 1 (card-get-frame ?card)) (return 0) else (diagram-object-set-string-attribute ?card ?object "name" ?name) (diagram-object-set-string-attribute ?card ?object "duration" ?duration) (diagram-object-format-text ?card ?object) ) ) ) ;;; Function saveNetwork ;;; Argument: a diagram card id ;;; Description: First the diagram is saved. In case that the user has ;;; not given a diagram file name yet the title of the ;;; root card is chosen as the file name. (deffunction saveNetwork (?card) (bind ?root (diagram-card-find-root ?card)) (bind ?filename (card-get-string-attribute ?root "filename")) (if (= 0 (str-compare ?filename "")) then (bind ?filename (get-text-from-user "Enter name of file for diagram." "" 1 (card-get-frame ?card))) (if (not (= 0 (str-compare ?filename ""))) then (bind ?indexname (str-cat ?filename ".ind")) (bind ?filename (str-cat ?filename ".dia")) (card-set-string-attribute ?root "filename" ?filename) (diagram-card-save-file ?root ?filename) (save-index ?indexname) else (message-box "You must enter a file name" OK 1 (card-get-frame ?card)) (return 0))) ) ;;; Function doAnalysis ;;; Argument: a diagram card id ;;; Description: The critical path analysis for diagram, starting at ;;; the selected node is done. (deffunction doAnalysis (?card) (if (and (= 1 (diagram-image-selected ?card ?*selected-image-id*)) (= 1 (validStartNode ?card ?*selected-image-id*))) then (criticalPath ?card ?*selected-image-id*) ; (diagram-image-select ?card ?*selected-image-id* 0) ; deselect it ; (bind ?*selected-image-id* 0) (redraw-diagram ?card) else (message-box "You must select a valid start node for the analysis" OK 1 (card-get-frame ?card)) (return 1) ) ) ;;; Function: customMenu ;;; Argument: a diagram card id and a menu option of the custom menu ;;; Description: Callback function of the custom menu. (deffunction customMenu (?card ?string) (if (= 0 (str-compare ?string "Save network")) then (saveNetwork ?card)) (if (= 0 (str-compare ?string "Critical path")) then (doAnalysis ?card) ) ) ;;; Function: setTitle ;;; Argument: a diagram card id ;;; Description: This is the callback function of "CreateCard". If ;;; the user creates a new diagram card then he is asked ;;; to give a unique title to it. (deffunction setTitle (?card) (bind ?title (card-get-string-attribute ?card "title")) (bind ?title (get-text-from-user "Please enter a title for the new card." ?title 1 (card-get-frame ?card))) (if (= 0 (str-compare ?title "")) then (bind ?title "No title") (card-set-string-attribute ?card "title" ?title) else (card-set-string-attribute ?card "title" ?title)) ) (deffunction initAttributeFrame (?card ?node-object)) ;;; Function: nodeLeftClick ;;; Arguments: a diagram card id, a node image id, x and y position, ;;; shift pressed and control pressed ;;; Description: When node image is clicked on to select it, the ;;; global ?*selected-image-id* gets the id of the ;;; selected image. (deffunction nodeLeftClick (?card ?node-image ?x ?y ?shift ?control) (if (and (= ?shift 0) (= ?control 0)) then (if (= 1 (diagram-image-selected ?card ?*selected-image-id*)) then (diagram-image-select ?card ?*selected-image-id* 0) ; deselect selection (bind ?*selected-image-id* ?node-image) ; set selection to node (diagram-image-select ?card ?node-image 1) ; select node (diagram-card-redraw ?card) else (bind ?*selected-image-id* ?node-image) (diagram-image-select ?card ?node-image 1) ; select node (diagram-card-redraw ?card) ) ) (if (and (= ?shift 0) (= ?control 1)) then (bind ?node-object (diagram-image-get-object ?card ?node-image)) (initAttributeFrame ?card ?node-object) (return 0) else (return 0)) ) ;;; Function: nodeRightClick ;;; Arguments: a card id, a node image id, x and y position, shift ;;; pressed and control pressed ;;; Description: Overides the default behaviour of right-clicking ;;; on a node --- i.e. the user cannot edit the attributes ;;; for a node. (deffunction nodeRightClick (?card ?image ?x ?y ?shift ?control) (return 0) ) #FILE USER CRITPATH\INSTALLN.DIA diagram(type = "Task management", hardy_version = 1.24). card(id = 1240, parent = 1240, title = "Installation of a computer - Precedence diagram", scale = 0.8, label_arcs_with_abbreviation = false, print_file = "", snap_to_grid = "true", print_width = 0, print_height = 0, grid_spacing = 5, layout_spacing_x = 70, layout_spacing_y = 30, layout_margin_left = 20, layout_margin_top = 20, layout_width = 600, layout_height = 600, show_palette = 1). node(name = "feasibility study", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "5", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1251, card = 1240, images = [1260], arcs = [1527, 1531, 1535, 1539, 1603]). node(name = "recruit data prep staff", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "4", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1261, card = 1240, images = [1270], arcs = [1527, 1591]). node(name = "recruit operators", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "6", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1271, card = 1240, images = [1280], arcs = [1531, 1555]). node(name = "place order", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "1", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1281, card = 1240, images = [1290], arcs = [1535, 1551, 1583]). node(name = "recruit programmers", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "8", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1291, card = 1240, images = [1300], arcs = [1539, 1567]). node(name = "recruit systems analysts", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "8", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1301, card = 1240, images = [1310], arcs = [1575, 1603]). node(name = "train data prep staff", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "3", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1311, card = 1240, images = [1320], arcs = [1591, 1599]). node(name = "train operators", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "3", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1321, card = 1240, images = [1330], arcs = [1555, 1607]). node(name = "computer delivery", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "10", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1421, card = 1240, images = [1430], arcs = [1551, 1559]). node(name = "prepare site", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "4", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1431, card = 1240, images = [1440], arcs = [1583, 1587]). node(name = "train programmers", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "4", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1441, card = 1240, images = [1450], arcs = [1567, 1571]). node(name = "do analysis & design", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "7", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1451, card = 1240, images = [1460], arcs = [1575, 1579]). node(name = "install computer", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "1", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1483, card = 1240, images = [1492], arcs = [1559, 1563, 1587]). node(name = "write programs", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "4", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1493, card = 1240, images = [1502], arcs = [1571, 1579, 1611]). node(name = "test programs", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "2", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1503, card = 1240, images = [1512], arcs = [1563, 1595, 1607, 1611]). node(name = "change over", 'earliest start' = "", 'earliest finish' = "", 'latest start' = "", 'latest finish' = "", duration = "2", 'activity id' = "", 'clips-object' = "", type = "Activity", id = 1513, card = 1240, images = [1522], arcs = [1595, 1599]). arc(type = "connection", id = 1527, card = 1240, images = [1530], connections = [[1251, 1261]], arc_image_type = "Default"). arc(type = "connection", id = 1531, card = 1240, images = [1534], connections = [[1251, 1271]], arc_image_type = "Default"). arc(type = "connection", id = 1535, card = 1240, images = [1538], connections = [[1251, 1281]], arc_image_type = "Default"). arc(type = "connection", id = 1539, card = 1240, images = [1542], connections = [[1251, 1291]], arc_image_type = "Default"). arc(type = "connection", id = 1551, card = 1240, images = [1554], connections = [[1281, 1421]], arc_image_type = "Default"). arc(type = "connection", id = 1555, card = 1240, images = [1558], connections = [[1271, 1321]], arc_image_type = "Default"). arc(type = "connection", id = 1559, card = 1240, images = [1562], connections = [[1421, 1483]], arc_image_type = "Default"). arc(type = "connection", id = 1563, card = 1240, images = [1566], connections = [[1483, 1503]], arc_image_type = "Default"). arc(type = "connection", id = 1567, card = 1240, images = [1570], connections = [[1291, 1441]], arc_image_type = "Default"). arc(type = "connection", id = 1571, card = 1240, images = [1574], connections = [[1441, 1493]], arc_image_type = "Default"). arc(type = "connection", id = 1575, card = 1240, images = [1578], connections = [[1301, 1451]], arc_image_type = "Default"). arc(type = "connection", id = 1579, card = 1240, images = [1582], connections = [[1451, 1493]], arc_image_type = "Default"). arc(type = "connection", id = 1583, card = 1240, images = [1586], connections = [[1281, 1431]], arc_image_type = "Default"). arc(type = "connection", id = 1587, card = 1240, images = [1590], connections = [[1431, 1483]], arc_image_type = "Default"). arc(type = "connection", id = 1591, card = 1240, images = [1594], connections = [[1261, 1311]], arc_image_type = "Default"). arc(type = "connection", id = 1595, card = 1240, images = [1598], connections = [[1503, 1513]], arc_image_type = "Default"). arc(type = "connection", id = 1599, card = 1240, images = [1602], connections = [[1311, 1513]], arc_image_type = "Default"). arc(type = "connection", id = 1603, card = 1240, images = [1606], connections = [[1251, 1301]], arc_image_type = "Default"). arc(type = "connection", id = 1607, card = 1240, images = [1610], connections = [[1321, 1503]], arc_image_type = "Default"). arc(type = "connection", id = 1611, card = 1240, images = [1614], connections = [[1493, 1503]], arc_image_type = "Default"). node_image(type = "composite", item_id = 1259, image_name = "Activity", id = 1260, arcs = [1530, 1534, 1538, 1542, 1606], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 76, y = 340, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1253, [1254]], constraint2 = [5, "noname", 256, 0, 0, 1254, [1255]], constraint3 = [8, "noname", 261, 0, 0, 1253, [1254, 1255]], constraint4 = [7, "noname", 271, 0, 0, 1252, [1253, 1254, 1255]], constraint5 = [10, "noname", 276, 0, 0, 1252, [1253]], constraint6 = [5, "noname", 294, 0, 0, 1256, [1257]], constraint7 = [5, "noname", 299, 0, 0, 1257, [1258]], constraint8 = [9, "noname", 304, 0, 0, 1256, [1257, 1258]], constraint9 = [10, "noname", 309, 0, 0, 1256, [1252]], constraint10 = [6, "noname", 314, 0, 0, 1252, [1256, 1257, 1258]], children = [1252, 1253, 1254, 1255, 1256, 1257, 1258], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1252, sensitivity = 8, space_attachments = 0, parent = 1260, region1 = ["0.0", "feasibility study", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-60, -5.5, "feasibility study"]], x = 76, y = 339.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1253, sensitivity = 8, space_attachments = 0, parent = 1260, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 31.708, y = 368, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1254, sensitivity = 8, space_attachments = 0, parent = 1260, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 74.8496, y = 368, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1255, sensitivity = 8, space_attachments = 0, parent = 1260, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 119.142, y = 367.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1256, sensitivity = 8, space_attachments = 0, parent = 1260, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 31.708, y = 311.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1257, sensitivity = 8, space_attachments = 0, parent = 1260, region1 = ["5.0", "5", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "5"]], x = 75.4248, y = 311.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1258, sensitivity = 8, space_attachments = 0, parent = 1260, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 119.717, y = 311.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1269, image_name = "Activity", id = 1270, arcs = [1530, 1594], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 297, y = 46, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1263, [1264]], constraint2 = [5, "noname", 256, 0, 0, 1264, [1265]], constraint3 = [8, "noname", 261, 0, 0, 1263, [1264, 1265]], constraint4 = [7, "noname", 271, 0, 0, 1262, [1263, 1264, 1265]], constraint5 = [10, "noname", 276, 0, 0, 1262, [1263]], constraint6 = [5, "noname", 294, 0, 0, 1266, [1267]], constraint7 = [5, "noname", 299, 0, 0, 1267, [1268]], constraint8 = [9, "noname", 304, 0, 0, 1266, [1267, 1268]], constraint9 = [10, "noname", 309, 0, 0, 1266, [1262]], constraint10 = [6, "noname", 314, 0, 0, 1262, [1266, 1267, 1268]], children = [1262, 1263, 1264, 1265, 1266, 1267, 1268], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1262, sensitivity = 8, space_attachments = 0, parent = 1270, region1 = ["0.0", "recruit data prep staff", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-60, -11, "recruit data prep"], [-17.5, 0, "staff"]], x = 297, y = 45.1111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1263, sensitivity = 8, space_attachments = 0, parent = 1270, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 252.708, y = 74, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1264, sensitivity = 8, space_attachments = 0, parent = 1270, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 295.85, y = 74, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1265, sensitivity = 8, space_attachments = 0, parent = 1270, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 340.142, y = 73.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1266, sensitivity = 8, space_attachments = 0, parent = 1270, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 252.708, y = 17.1111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1267, sensitivity = 8, space_attachments = 0, parent = 1270, region1 = ["5.0", "4", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "4"]], x = 296.425, y = 17.1111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1268, sensitivity = 8, space_attachments = 0, parent = 1270, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 340.717, y = 17.1111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1279, image_name = "Activity", id = 1280, arcs = [1534, 1558], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 297, y = 193, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1273, [1274]], constraint2 = [5, "noname", 256, 0, 0, 1274, [1275]], constraint3 = [8, "noname", 261, 0, 0, 1273, [1274, 1275]], constraint4 = [7, "noname", 271, 0, 0, 1272, [1273, 1274, 1275]], constraint5 = [10, "noname", 276, 0, 0, 1272, [1273]], constraint6 = [5, "noname", 294, 0, 0, 1276, [1277]], constraint7 = [5, "noname", 299, 0, 0, 1277, [1278]], constraint8 = [9, "noname", 304, 0, 0, 1276, [1277, 1278]], constraint9 = [10, "noname", 309, 0, 0, 1276, [1272]], constraint10 = [6, "noname", 314, 0, 0, 1272, [1276, 1277, 1278]], children = [1272, 1273, 1274, 1275, 1276, 1277, 1278], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1272, sensitivity = 8, space_attachments = 0, parent = 1280, region1 = ["0.0", "recruit operators", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-60, -5.5, "recruit operators"]], x = 297, y = 192.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1273, sensitivity = 8, space_attachments = 0, parent = 1280, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 252.708, y = 221, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1274, sensitivity = 8, space_attachments = 0, parent = 1280, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 295.85, y = 221, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1275, sensitivity = 8, space_attachments = 0, parent = 1280, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 340.142, y = 220.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1276, sensitivity = 8, space_attachments = 0, parent = 1280, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 252.708, y = 164.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1277, sensitivity = 8, space_attachments = 0, parent = 1280, region1 = ["5.0", "6", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "6"]], x = 296.425, y = 164.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1278, sensitivity = 8, space_attachments = 0, parent = 1280, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 340.717, y = 164.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1289, image_name = "Activity", id = 1290, arcs = [1538, 1554, 1586], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 292, y = 340, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1283, [1284]], constraint2 = [5, "noname", 256, 0, 0, 1284, [1285]], constraint3 = [8, "noname", 261, 0, 0, 1283, [1284, 1285]], constraint4 = [7, "noname", 271, 0, 0, 1282, [1283, 1284, 1285]], constraint5 = [10, "noname", 276, 0, 0, 1282, [1283]], constraint6 = [5, "noname", 294, 0, 0, 1286, [1287]], constraint7 = [5, "noname", 299, 0, 0, 1287, [1288]], constraint8 = [9, "noname", 304, 0, 0, 1286, [1287, 1288]], constraint9 = [10, "noname", 309, 0, 0, 1286, [1282]], constraint10 = [6, "noname", 314, 0, 0, 1282, [1286, 1287, 1288]], children = [1282, 1283, 1284, 1285, 1286, 1287, 1288], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1282, sensitivity = 8, space_attachments = 0, parent = 1290, region1 = ["0.0", "place order", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-38.5, -5.5, "place order"]], x = 292, y = 339.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1283, sensitivity = 8, space_attachments = 0, parent = 1290, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 247.708, y = 368, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1284, sensitivity = 8, space_attachments = 0, parent = 1290, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 290.85, y = 368, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1285, sensitivity = 8, space_attachments = 0, parent = 1290, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 335.142, y = 367.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1286, sensitivity = 8, space_attachments = 0, parent = 1290, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 247.708, y = 311.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1287, sensitivity = 8, space_attachments = 0, parent = 1290, region1 = ["5.0", "1", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "1"]], x = 291.425, y = 311.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1288, sensitivity = 8, space_attachments = 0, parent = 1290, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 335.717, y = 311.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1299, image_name = "Activity", id = 1300, arcs = [1542, 1570], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 297, y = 535, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1293, [1294]], constraint2 = [5, "noname", 256, 0, 0, 1294, [1295]], constraint3 = [8, "noname", 261, 0, 0, 1293, [1294, 1295]], constraint4 = [7, "noname", 271, 0, 0, 1292, [1293, 1294, 1295]], constraint5 = [10, "noname", 276, 0, 0, 1292, [1293]], constraint6 = [5, "noname", 294, 0, 0, 1296, [1297]], constraint7 = [5, "noname", 299, 0, 0, 1297, [1298]], constraint8 = [9, "noname", 304, 0, 0, 1296, [1297, 1298]], constraint9 = [10, "noname", 309, 0, 0, 1296, [1292]], constraint10 = [6, "noname", 314, 0, 0, 1292, [1296, 1297, 1298]], children = [1292, 1293, 1294, 1295, 1296, 1297, 1298], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1292, sensitivity = 8, space_attachments = 0, parent = 1300, region1 = ["0.0", "recruit programmers", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-24.5, -11, "recruit"], [-38.5, 0, "programmers"]], x = 297, y = 534.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1293, sensitivity = 8, space_attachments = 0, parent = 1300, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 252.708, y = 563, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1294, sensitivity = 8, space_attachments = 0, parent = 1300, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 295.85, y = 563, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1295, sensitivity = 8, space_attachments = 0, parent = 1300, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 340.142, y = 562.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1296, sensitivity = 8, space_attachments = 0, parent = 1300, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 252.708, y = 506.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1297, sensitivity = 8, space_attachments = 0, parent = 1300, region1 = ["5.0", "8", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "8"]], x = 296.425, y = 506.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1298, sensitivity = 8, space_attachments = 0, parent = 1300, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 340.717, y = 506.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1309, image_name = "Activity", id = 1310, arcs = [1578, 1606], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 297, y = 693, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1303, [1304]], constraint2 = [5, "noname", 256, 0, 0, 1304, [1305]], constraint3 = [8, "noname", 261, 0, 0, 1303, [1304, 1305]], constraint4 = [7, "noname", 271, 0, 0, 1302, [1303, 1304, 1305]], constraint5 = [10, "noname", 276, 0, 0, 1302, [1303]], constraint6 = [5, "noname", 294, 0, 0, 1306, [1307]], constraint7 = [5, "noname", 299, 0, 0, 1307, [1308]], constraint8 = [9, "noname", 304, 0, 0, 1306, [1307, 1308]], constraint9 = [10, "noname", 309, 0, 0, 1306, [1302]], constraint10 = [6, "noname", 314, 0, 0, 1302, [1306, 1307, 1308]], children = [1302, 1303, 1304, 1305, 1306, 1307, 1308], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1302, sensitivity = 8, space_attachments = 0, parent = 1310, region1 = ["0.0", "recruit systems analysts", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-52.5, -11, "recruit systems"], [-28, 0, "analysts"]], x = 297, y = 692.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1303, sensitivity = 8, space_attachments = 0, parent = 1310, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 252.708, y = 721, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1304, sensitivity = 8, space_attachments = 0, parent = 1310, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 295.85, y = 721, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1305, sensitivity = 8, space_attachments = 0, parent = 1310, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 340.142, y = 720.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1306, sensitivity = 8, space_attachments = 0, parent = 1310, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 252.708, y = 664.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1307, sensitivity = 8, space_attachments = 0, parent = 1310, region1 = ["5.0", "8", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "8"]], x = 296.425, y = 664.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1308, sensitivity = 8, space_attachments = 0, parent = 1310, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 340.717, y = 664.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1319, image_name = "Activity", id = 1320, arcs = [1594, 1602], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 714, y = 46, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1313, [1314]], constraint2 = [5, "noname", 256, 0, 0, 1314, [1315]], constraint3 = [8, "noname", 261, 0, 0, 1313, [1314, 1315]], constraint4 = [7, "noname", 271, 0, 0, 1312, [1313, 1314, 1315]], constraint5 = [10, "noname", 276, 0, 0, 1312, [1313]], constraint6 = [5, "noname", 294, 0, 0, 1316, [1317]], constraint7 = [5, "noname", 299, 0, 0, 1317, [1318]], constraint8 = [9, "noname", 304, 0, 0, 1316, [1317, 1318]], constraint9 = [10, "noname", 309, 0, 0, 1316, [1312]], constraint10 = [6, "noname", 314, 0, 0, 1312, [1316, 1317, 1318]], children = [1312, 1313, 1314, 1315, 1316, 1317, 1318], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1312, sensitivity = 8, space_attachments = 0, parent = 1320, region1 = ["0.0", "train data prep staff", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-52.5, -11, "train data prep"], [-17.5, 0, "staff"]], x = 714, y = 45.1111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1313, sensitivity = 8, space_attachments = 0, parent = 1320, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 669.708, y = 74, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1314, sensitivity = 8, space_attachments = 0, parent = 1320, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 712.85, y = 74, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1315, sensitivity = 8, space_attachments = 0, parent = 1320, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 757.142, y = 73.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1316, sensitivity = 8, space_attachments = 0, parent = 1320, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 669.708, y = 17.1111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1317, sensitivity = 8, space_attachments = 0, parent = 1320, region1 = ["5.0", "3", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "3"]], x = 713.425, y = 17.1111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1318, sensitivity = 8, space_attachments = 0, parent = 1320, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 757.717, y = 17.1111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1331, image_name = "Activity", id = 1330, arcs = [1558, 1610], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 574, y = 193, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1323, [1324]], constraint2 = [5, "noname", 256, 0, 0, 1324, [1325]], constraint3 = [8, "noname", 261, 0, 0, 1323, [1324, 1325]], constraint4 = [7, "noname", 271, 0, 0, 1322, [1323, 1324, 1325]], constraint5 = [10, "noname", 276, 0, 0, 1322, [1323]], constraint6 = [5, "noname", 294, 0, 0, 1326, [1327]], constraint7 = [5, "noname", 299, 0, 0, 1327, [1328]], constraint8 = [9, "noname", 304, 0, 0, 1326, [1327, 1328]], constraint9 = [10, "noname", 309, 0, 0, 1326, [1322]], constraint10 = [6, "noname", 314, 0, 0, 1322, [1326, 1327, 1328]], children = [1322, 1323, 1324, 1325, 1326, 1327, 1328], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1322, sensitivity = 8, space_attachments = 0, parent = 1330, region1 = ["0.0", "train operators", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-52.5, -5.5, "train operators"]], x = 574, y = 192.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1323, sensitivity = 8, space_attachments = 0, parent = 1330, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 529.708, y = 221, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1324, sensitivity = 8, space_attachments = 0, parent = 1330, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 572.85, y = 221, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1325, sensitivity = 8, space_attachments = 0, parent = 1330, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 617.142, y = 220.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1326, sensitivity = 8, space_attachments = 0, parent = 1330, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 529.708, y = 164.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1327, sensitivity = 8, space_attachments = 0, parent = 1330, region1 = ["5.0", "3", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "3"]], x = 573.425, y = 164.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1328, sensitivity = 8, space_attachments = 0, parent = 1330, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 617.717, y = 164.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1429, image_name = "Activity", id = 1430, arcs = [1554, 1562], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 511, y = 340, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1423, [1424]], constraint2 = [5, "noname", 256, 0, 0, 1424, [1425]], constraint3 = [8, "noname", 261, 0, 0, 1423, [1424, 1425]], constraint4 = [7, "noname", 271, 0, 0, 1422, [1423, 1424, 1425]], constraint5 = [10, "noname", 276, 0, 0, 1422, [1423]], constraint6 = [5, "noname", 294, 0, 0, 1426, [1427]], constraint7 = [5, "noname", 299, 0, 0, 1427, [1428]], constraint8 = [9, "noname", 304, 0, 0, 1426, [1427, 1428]], constraint9 = [10, "noname", 309, 0, 0, 1426, [1422]], constraint10 = [6, "noname", 314, 0, 0, 1422, [1426, 1427, 1428]], children = [1422, 1423, 1424, 1425, 1426, 1427, 1428], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1422, sensitivity = 8, space_attachments = 0, parent = 1430, region1 = ["0.0", "computer delivery", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-60, -5.5, "computer delivery"]], x = 511, y = 339.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1423, sensitivity = 8, space_attachments = 0, parent = 1430, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 466.708, y = 368, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1424, sensitivity = 8, space_attachments = 0, parent = 1430, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 509.85, y = 368, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1425, sensitivity = 8, space_attachments = 0, parent = 1430, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 554.142, y = 367.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1426, sensitivity = 8, space_attachments = 0, parent = 1430, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 466.708, y = 311.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1427, sensitivity = 8, space_attachments = 0, parent = 1430, region1 = ["5.0", "10", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-7, -5.5, "10"]], x = 510.425, y = 311.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1428, sensitivity = 8, space_attachments = 0, parent = 1430, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 554.717, y = 311.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1439, image_name = "Activity", id = 1440, arcs = [1586, 1590], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 511, y = 437, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1433, [1434]], constraint2 = [5, "noname", 256, 0, 0, 1434, [1435]], constraint3 = [8, "noname", 261, 0, 0, 1433, [1434, 1435]], constraint4 = [7, "noname", 271, 0, 0, 1432, [1433, 1434, 1435]], constraint5 = [10, "noname", 276, 0, 0, 1432, [1433]], constraint6 = [5, "noname", 294, 0, 0, 1436, [1437]], constraint7 = [5, "noname", 299, 0, 0, 1437, [1438]], constraint8 = [9, "noname", 304, 0, 0, 1436, [1437, 1438]], constraint9 = [10, "noname", 309, 0, 0, 1436, [1432]], constraint10 = [6, "noname", 314, 0, 0, 1432, [1436, 1437, 1438]], children = [1432, 1433, 1434, 1435, 1436, 1437, 1438], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1432, sensitivity = 8, space_attachments = 0, parent = 1440, region1 = ["0.0", "prepare site", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-42, -5.5, "prepare site"]], x = 511, y = 436.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1433, sensitivity = 8, space_attachments = 0, parent = 1440, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 466.708, y = 465, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1434, sensitivity = 8, space_attachments = 0, parent = 1440, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 509.85, y = 465, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1435, sensitivity = 8, space_attachments = 0, parent = 1440, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 554.142, y = 464.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1436, sensitivity = 8, space_attachments = 0, parent = 1440, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 466.708, y = 408.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1437, sensitivity = 8, space_attachments = 0, parent = 1440, region1 = ["5.0", "4", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "4"]], x = 510.425, y = 408.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1438, sensitivity = 8, space_attachments = 0, parent = 1440, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 554.717, y = 408.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1449, image_name = "Activity", id = 1450, arcs = [1570, 1574], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 511, y = 535, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1443, [1444]], constraint2 = [5, "noname", 256, 0, 0, 1444, [1445]], constraint3 = [8, "noname", 261, 0, 0, 1443, [1444, 1445]], constraint4 = [7, "noname", 271, 0, 0, 1442, [1443, 1444, 1445]], constraint5 = [10, "noname", 276, 0, 0, 1442, [1443]], constraint6 = [5, "noname", 294, 0, 0, 1446, [1447]], constraint7 = [5, "noname", 299, 0, 0, 1447, [1448]], constraint8 = [9, "noname", 304, 0, 0, 1446, [1447, 1448]], constraint9 = [10, "noname", 309, 0, 0, 1446, [1442]], constraint10 = [6, "noname", 314, 0, 0, 1442, [1446, 1447, 1448]], children = [1442, 1443, 1444, 1445, 1446, 1447, 1448], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1442, sensitivity = 8, space_attachments = 0, parent = 1450, region1 = ["0.0", "train programmers", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-60, -5.5, "train programmers"]], x = 511, y = 534.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1443, sensitivity = 8, space_attachments = 0, parent = 1450, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 466.708, y = 563, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1444, sensitivity = 8, space_attachments = 0, parent = 1450, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 509.85, y = 563, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1445, sensitivity = 8, space_attachments = 0, parent = 1450, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 554.142, y = 562.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1446, sensitivity = 8, space_attachments = 0, parent = 1450, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 466.708, y = 506.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1447, sensitivity = 8, space_attachments = 0, parent = 1450, region1 = ["5.0", "4", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "4"]], x = 510.425, y = 506.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1448, sensitivity = 8, space_attachments = 0, parent = 1450, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 554.717, y = 506.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1459, image_name = "Activity", id = 1460, arcs = [1578, 1582], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 511, y = 693, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1453, [1454]], constraint2 = [5, "noname", 256, 0, 0, 1454, [1455]], constraint3 = [8, "noname", 261, 0, 0, 1453, [1454, 1455]], constraint4 = [7, "noname", 271, 0, 0, 1452, [1453, 1454, 1455]], constraint5 = [10, "noname", 276, 0, 0, 1452, [1453]], constraint6 = [5, "noname", 294, 0, 0, 1456, [1457]], constraint7 = [5, "noname", 299, 0, 0, 1457, [1458]], constraint8 = [9, "noname", 304, 0, 0, 1456, [1457, 1458]], constraint9 = [10, "noname", 309, 0, 0, 1456, [1452]], constraint10 = [6, "noname", 314, 0, 0, 1452, [1456, 1457, 1458]], children = [1452, 1453, 1454, 1455, 1456, 1457, 1458], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1452, sensitivity = 8, space_attachments = 0, parent = 1460, region1 = ["0.0", "do analysis & design", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-45.5, -11, "do analysis &"], [-21, 0, "design"]], x = 511, y = 692.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1453, sensitivity = 8, space_attachments = 0, parent = 1460, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 466.708, y = 721, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1454, sensitivity = 8, space_attachments = 0, parent = 1460, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 509.85, y = 721, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1455, sensitivity = 8, space_attachments = 0, parent = 1460, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 554.142, y = 720.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1456, sensitivity = 8, space_attachments = 0, parent = 1460, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 466.708, y = 664.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1457, sensitivity = 8, space_attachments = 0, parent = 1460, region1 = ["5.0", "7", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "7"]], x = 510.425, y = 664.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1458, sensitivity = 8, space_attachments = 0, parent = 1460, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 554.717, y = 664.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1491, image_name = "Activity", id = 1492, arcs = [1562, 1566, 1590], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 714, y = 340, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1485, [1486]], constraint2 = [5, "noname", 256, 0, 0, 1486, [1487]], constraint3 = [8, "noname", 261, 0, 0, 1485, [1486, 1487]], constraint4 = [7, "noname", 271, 0, 0, 1484, [1485, 1486, 1487]], constraint5 = [10, "noname", 276, 0, 0, 1484, [1485]], constraint6 = [5, "noname", 294, 0, 0, 1488, [1489]], constraint7 = [5, "noname", 299, 0, 0, 1489, [1490]], constraint8 = [9, "noname", 304, 0, 0, 1488, [1489, 1490]], constraint9 = [10, "noname", 309, 0, 0, 1488, [1484]], constraint10 = [6, "noname", 314, 0, 0, 1484, [1488, 1489, 1490]], children = [1484, 1485, 1486, 1487, 1488, 1489, 1490], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1484, sensitivity = 8, space_attachments = 0, parent = 1492, region1 = ["0.0", "install computer", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-56, -5.5, "install computer"]], x = 714, y = 339.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1485, sensitivity = 8, space_attachments = 0, parent = 1492, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 669.708, y = 368, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1486, sensitivity = 8, space_attachments = 0, parent = 1492, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 712.85, y = 368, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1487, sensitivity = 8, space_attachments = 0, parent = 1492, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 757.142, y = 367.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1488, sensitivity = 8, space_attachments = 0, parent = 1492, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 669.708, y = 311.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1489, sensitivity = 8, space_attachments = 0, parent = 1492, region1 = ["5.0", "1", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "1"]], x = 713.425, y = 311.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1490, sensitivity = 8, space_attachments = 0, parent = 1492, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 757.717, y = 311.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1501, image_name = "Activity", id = 1502, arcs = [1574, 1582, 1614], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 714, y = 535, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1495, [1496]], constraint2 = [5, "noname", 256, 0, 0, 1496, [1497]], constraint3 = [8, "noname", 261, 0, 0, 1495, [1496, 1497]], constraint4 = [7, "noname", 271, 0, 0, 1494, [1495, 1496, 1497]], constraint5 = [10, "noname", 276, 0, 0, 1494, [1495]], constraint6 = [5, "noname", 294, 0, 0, 1498, [1499]], constraint7 = [5, "noname", 299, 0, 0, 1499, [1500]], constraint8 = [9, "noname", 304, 0, 0, 1498, [1499, 1500]], constraint9 = [10, "noname", 309, 0, 0, 1498, [1494]], constraint10 = [6, "noname", 314, 0, 0, 1494, [1498, 1499, 1500]], children = [1494, 1495, 1496, 1497, 1498, 1499, 1500], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1494, sensitivity = 8, space_attachments = 0, parent = 1502, region1 = ["0.0", "write programs", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-49, -5.5, "write programs"]], x = 714, y = 534.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1495, sensitivity = 8, space_attachments = 0, parent = 1502, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 669.708, y = 563, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1496, sensitivity = 8, space_attachments = 0, parent = 1502, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 712.85, y = 563, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1497, sensitivity = 8, space_attachments = 0, parent = 1502, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 757.142, y = 562.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1498, sensitivity = 8, space_attachments = 0, parent = 1502, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 669.708, y = 506.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1499, sensitivity = 8, space_attachments = 0, parent = 1502, region1 = ["5.0", "4", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "4"]], x = 713.425, y = 506.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1500, sensitivity = 8, space_attachments = 0, parent = 1502, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 757.717, y = 506.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1511, image_name = "Activity", id = 1512, arcs = [1566, 1598, 1610, 1614], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 913, y = 340, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1505, [1506]], constraint2 = [5, "noname", 256, 0, 0, 1506, [1507]], constraint3 = [8, "noname", 261, 0, 0, 1505, [1506, 1507]], constraint4 = [7, "noname", 271, 0, 0, 1504, [1505, 1506, 1507]], constraint5 = [10, "noname", 276, 0, 0, 1504, [1505]], constraint6 = [5, "noname", 294, 0, 0, 1508, [1509]], constraint7 = [5, "noname", 299, 0, 0, 1509, [1510]], constraint8 = [9, "noname", 304, 0, 0, 1508, [1509, 1510]], constraint9 = [10, "noname", 309, 0, 0, 1508, [1504]], constraint10 = [6, "noname", 314, 0, 0, 1504, [1508, 1509, 1510]], children = [1504, 1505, 1506, 1507, 1508, 1509, 1510], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1504, sensitivity = 8, space_attachments = 0, parent = 1512, region1 = ["0.0", "test programs", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-45.5, -5.5, "test programs"]], x = 913, y = 339.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1505, sensitivity = 8, space_attachments = 0, parent = 1512, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 868.708, y = 368, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1506, sensitivity = 8, space_attachments = 0, parent = 1512, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 911.85, y = 368, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1507, sensitivity = 8, space_attachments = 0, parent = 1512, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 956.142, y = 367.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1508, sensitivity = 8, space_attachments = 0, parent = 1512, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 868.708, y = 311.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1509, sensitivity = 8, space_attachments = 0, parent = 1512, region1 = ["5.0", "2", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.5, -5.5, "2"]], x = 912.425, y = 311.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1510, sensitivity = 8, space_attachments = 0, parent = 1512, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 956.717, y = 311.111, width = 42.5664, height = 22.2222, card = 1240). node_image(type = "composite", item_id = 1521, image_name = "Activity", id = 1522, arcs = [1598, 1602], space_attachments = 0, region1 = ["0", "", 0, 0, 130, 80, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 1113, y = 340, width = 130, height = 80, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1515, [1516]], constraint2 = [5, "noname", 256, 0, 0, 1516, [1517]], constraint3 = [8, "noname", 261, 0, 0, 1515, [1516, 1517]], constraint4 = [7, "noname", 271, 0, 0, 1514, [1515, 1516, 1517]], constraint5 = [10, "noname", 276, 0, 0, 1514, [1515]], constraint6 = [5, "noname", 294, 0, 0, 1518, [1519]], constraint7 = [5, "noname", 299, 0, 0, 1519, [1520]], constraint8 = [9, "noname", 304, 0, 0, 1518, [1519, 1520]], constraint9 = [10, "noname", 309, 0, 0, 1518, [1514]], constraint10 = [6, "noname", 314, 0, 0, 1514, [1518, 1519, 1520]], children = [1514, 1515, 1516, 1517, 1518, 1519, 1520], card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1514, sensitivity = 8, space_attachments = 0, parent = 1522, region1 = ["0.0", "change over", 0, 0, 130, 33.7778, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-38.5, -5.5, "change over"]], x = 1113, y = 339.111, width = 130, height = 33.7778, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1515, sensitivity = 8, space_attachments = 0, parent = 1522, region1 = ["1.0", "", 0, 0, 41.4159, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 1068.71, y = 368, width = 41.4159, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1516, sensitivity = 8, space_attachments = 0, parent = 1522, region1 = ["2.0", "", 0, 0, 44.8673, 24, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 1111.85, y = 368, width = 44.8673, height = 24, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1517, sensitivity = 8, space_attachments = 0, parent = 1522, region1 = ["3.0", "", 0, 0, 43.7168, 23.6314, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 1156.14, y = 367.816, width = 43.7168, height = 23.6314, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1518, sensitivity = 8, space_attachments = 0, parent = 1522, region1 = ["4.0", "", 0, 0, 41.4159, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 1068.71, y = 311.111, width = 41.4159, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1519, sensitivity = 8, space_attachments = 0, parent = 1522, region1 = ["5.0", "2", 0, 0, 46.0177, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [[-3.50012, -5.5, "2"]], x = 1112.42, y = 311.111, width = 46.0177, height = 22.2222, card = 1240). node_image(type = "rectangle", image_name = "Rectangle", id = 1520, sensitivity = 8, space_attachments = 0, parent = 1522, region1 = ["6.0", "", 0, 0, 42.5664, 22.2222, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 1156.72, y = 311.111, width = 42.5664, height = 22.2222, card = 1240). arc_image(type = "line", item_id = 1529, id = 1530, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1260, to = 1270, is_spline = 0, controls = [[106.068, 300], [266.932, 86]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1528, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1533, id = 1534, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1260, to = 1280, is_spline = 0, controls = [[136.136, 300], [236.864, 233]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1532, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1537, id = 1538, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1260, to = 1290, is_spline = 0, controls = [[141, 340], [227, 340]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1536, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1541, id = 1542, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1260, to = 1300, is_spline = 0, controls = [[121.333, 380], [251.667, 495]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1540, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1553, id = 1554, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1290, to = 1430, is_spline = 0, controls = [[357, 340], [446, 340]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1552, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1557, id = 1558, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1280, to = 1330, is_spline = 0, controls = [[362, 193], [509, 193]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1556, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1561, id = 1562, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1430, to = 1492, is_spline = 0, controls = [[576, 340], [649, 340]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1560, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1565, id = 1566, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1492, to = 1512, is_spline = 0, controls = [[779, 340], [848, 340]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1564, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1569, id = 1570, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1300, to = 1450, is_spline = 0, controls = [[362, 535], [446, 535]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1568, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1573, id = 1574, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1450, to = 1502, is_spline = 0, controls = [[576, 535], [649, 535]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1572, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1577, id = 1578, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1310, to = 1460, is_spline = 0, controls = [[362, 693], [446, 693]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1576, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1581, id = 1582, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1460, to = 1502, is_spline = 0, controls = [[562.392, 653], [662.608, 575]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1580, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1585, id = 1586, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1290, to = 1440, is_spline = 0, controls = [[357, 368.79], [446, 408.21]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1584, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1589, id = 1590, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1440, to = 1492, is_spline = 0, controls = [[576, 405.941], [649, 371.059]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1588, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1593, id = 1594, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1270, to = 1320, is_spline = 0, controls = [[362, 46], [649, 46]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1592, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1597, id = 1598, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1512, to = 1522, is_spline = 0, controls = [[978, 340], [1048, 340]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1596, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1601, id = 1602, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1320, to = 1522, is_spline = 0, controls = [[768.286, 86], [1058.71, 300]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1600, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1605, id = 1606, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1260, to = 1310, is_spline = 0, controls = [[101.042, 380], [271.958, 653]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1604, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1609, id = 1610, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1330, to = 1512, is_spline = 0, controls = [[639, 221.186], [848, 311.814]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1608, 0, 5]], card = 1240). arc_image(type = "line", item_id = 1613, id = 1614, brush_colour = "BLACK", sensitivity = 3, region1 = ["Middle", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], region2 = ["Start", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text2 = [], region3 = ["End", "", 0, 0, 0, 0, 5, 5, -1, -1, 7, 12, 75, 90, 90, "BLACK", "BLACK", 100], text3 = [], from = 1502, to = 1512, is_spline = 0, controls = [[754.82, 495], [872.18, 380]], arrows = [[3, 1, 0, 10, "Normal arrowhead", 1612, 0, 5]], card = 1240). #LOADFILE USER CRITPATH\INSTALLN.CRP header(hardy_version = 1.24, top_card = 1240, no_cards = 1, no_links = 0). card(id = 1240, type = "Diagram card", filename = "installn.dia", title = "Installation of a computer - Precedence diagram", special_item = 1241, display_link_panel = 0, show_toolbar = 1, diagram_type = "Task management"). item(id = 1241, type = "Default item", card = 1240). item(id = 1259, type = "Diagram item"). item(id = 1269). item(id = 1279). item(id = 1289). item(id = 1299). item(id = 1309). item(id = 1319). item(id = 1331). item(id = 1429). item(id = 1439). item(id = 1449). item(id = 1459). item(id = 1491). item(id = 1501). item(id = 1511). item(id = 1521). item(id = 1529). item(id = 1533). item(id = 1537). item(id = 1541). item(id = 1553). item(id = 1557). item(id = 1561). item(id = 1565). item(id = 1569). item(id = 1573). item(id = 1577). item(id = 1581). item(id = 1585). item(id = 1589). item(id = 1593). item(id = 1597). item(id = 1601). item(id = 1605). item(id = 1609). item(id = 1613). #FILE USER CRITPATH\LOADER.CLP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BATCH FILE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; File: loader.clp ;;; Author: Ian Harrison ;;; Date: 7/11/94 ;;; ;;; Description: This file is the batch file for the program. ;;; It can be loaded either with the command line ;;; option "-clips" of HARDY or with the menu option ;;; "File:Batch" of the HARDY Developer window. When executed it ;;; loads the other source files and declares event handlers ;;; for the "Project Management" diagram type. ;;; ;;; load the CLIPS source files: (defglobal ?*selected-image-id* = 0) (defglobal ?*process-list* = (create$)) (load "analysis.clp") (load "eventhnd.clp") (load "attribut.clp") (register-event-handler CreateNodeImage "Task management" newNode) (register-event-handler CustomMenu "Task management" customMenu) (register-event-handler CreateCard "Task management" setTitle) (register-event-handler NodeLeftClick "Task management" nodeLeftClick) (register-event-handler NodeRightClick "Task management" nodeRightClick) (unwatch all) #FILE USER CRITPATH\PROJMAN.DEF diagram_definition(type = "Task management", category = "Project management", hardy_version = 1.24, custom_menu_name = "&Evaluate", custom_menu_strings = ["&Critical path", "&Save network"]). node_definition(type = "Activity", format_string = "%1", abbreviation_format_string = "%1", colour = "WHITE", text_size = 10, highlight_if_linked = 1, attributes = ["name", "earliest start", "earliest finish", "latest start", "latest finish", "duration", "activity id", "clips-object"], region1 = ["0", "", 3, 12, 75, 90, 90, "BLACK"], region2 = ["0.0", "%1", 3, 12, 75, 90, 90, "BLACK"], region3 = ["1.0", "%4", 3, 12, 75, 90, 90, "BLACK"], region4 = ["2.0", "%7", 3, 12, 75, 90, 90, "BLACK"], region5 = ["3.0", "%5", 3, 12, 75, 90, 90, "BLACK"], region6 = ["4.0", "%2", 3, 12, 75, 90, 90, "BLACK"], region7 = ["5.0", "%6", 3, 12, 75, 90, 90, "BLACK"], region8 = ["6.0", "%3", 3, 12, 75, 90, 90, "BLACK"], default_width = 130, default_height = 80, outline_width = 1, can_resize = 1, centre_text = 1, use_attachments = 0, outline_colour = "BLACK", outline_style = 100, library_name = "Project Management", symbol_name = "Activity", shadow = 0, space_attachments = 0, display_on_palette = 1). arc_definition(type = "connection", format_string = "%1", abbreviation_format_string = "%1", colour = "BLACK", text_size = 10, highlight_if_linked = 1, region1 = ["Start", "", 7, 12, 75, 90, 90, "BLACK"], region2 = ["Middle", "%1", 7, 12, 75, 90, 90, "BLACK"], region3 = ["End", "", 7, 12, 75, 90, 90, "BLACK"], segmentable = 1, can_connect_to = ["Activity"], can_connect_from = ["Activity"], junction_use_two_way = 0, junction_attachment_input = 0, junction_attachment_one = 0, junction_attachment_two1 = 0, junction_attachment_two2 = 0, junction_attachment_three = 0, junction_auto_dogleg = 1, arc_image1 = ["Default", "Standard", "No arrowhead", "BLACK", "Standard", "Normal arrowhead", "BLACK", "Standard", "Hollow circle arrowhead", "BLACK", "BLACK", "Solid", 1, 0, 1, 0, 1], annotation_properties1 = [["Normal arrowhead", "Normal arrowhead", 1, 1], ["Hollow circle arrowhead", "Hollow circle arrowhead", 2, 0]]). #FILE USER CRITPATH\PROJMAN.SLB symbol_library(program_version = 1.24, name = "Project Management"). node_image(type = "composite", image_name = "Activity", id = 1229, space_attachments = 0, region1 = ["0", "", 0, 0, 226, 180, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 115, y = 115, width = 226, height = 180, selectable = 0, constraint1 = [5, "noname", 246, 0, 0, 1163, [1164]], constraint2 = [5, "noname", 256, 0, 0, 1164, [1165]], constraint3 = [8, "noname", 261, 0, 0, 1163, [1164, 1165]], constraint4 = [7, "noname", 271, 0, 0, 1162, [1163, 1164, 1165]], constraint5 = [10, "noname", 276, 0, 0, 1162, [1163]], constraint6 = [5, "noname", 294, 0, 0, 1166, [1167]], constraint7 = [5, "noname", 299, 0, 0, 1167, [1168]], constraint8 = [9, "noname", 304, 0, 0, 1166, [1167, 1168]], constraint9 = [10, "noname", 309, 0, 0, 1166, [1162]], constraint10 = [6, "noname", 314, 0, 0, 1162, [1166, 1167, 1168]], children = [1162, 1163, 1164, 1165, 1166, 1167, 1168], symbol_name = "Activity"). node_image(type = "rectangle", image_name = "Rectangle", id = 1162, sensitivity = 10, space_attachments = 0, parent = 1229, region1 = ["0.0", "", 0, 0, 226, 76, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 115, y = 113, width = 226, height = 76). node_image(type = "rectangle", image_name = "Rectangle", id = 1163, sensitivity = 10, space_attachments = 0, parent = 1229, region1 = ["1.0", "", 0, 0, 72, 54, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 38, y = 178, width = 72, height = 54). node_image(type = "rectangle", image_name = "Rectangle", id = 1164, sensitivity = 10, space_attachments = 0, parent = 1229, region1 = ["2.0", "", 0, 0, 78, 54, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 113, y = 178, width = 78, height = 54). node_image(type = "rectangle", image_name = "Rectangle", id = 1165, sensitivity = 10, space_attachments = 0, parent = 1229, region1 = ["3.0", "", 0, 0, 76, 53.1707, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 190, y = 177.585, width = 76, height = 53.1707). node_image(type = "rectangle", image_name = "Rectangle", id = 1166, sensitivity = 10, space_attachments = 0, parent = 1229, region1 = ["4.0", "", 0, 0, 72, 50, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 38, y = 50, width = 72, height = 50). node_image(type = "rectangle", image_name = "Rectangle", id = 1167, sensitivity = 10, space_attachments = 0, parent = 1229, region1 = ["5.0", "", 0, 0, 80, 50, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 114, y = 50, width = 80, height = 50). node_image(type = "rectangle", image_name = "Rectangle", id = 1168, sensitivity = 10, space_attachments = 0, parent = 1229, region1 = ["6.0", "", 0, 0, 74, 50, 5, 5, -1, -1, 3, 12, 75, 90, 90, "BLACK", "BLACK", 100], text1 = [], x = 191, y = 50, width = 74, height = 50). #FILE USER CRITPATH\README.TXT ======================================================================= This file contains a guided tour through an example of conducting critical path analysis on a task precedence diagram. ======================================================================= Critical Path Analysis ---------------------- Imagine you are trying to carry out a project. In order to complete the project various tasks will have to be completed. In project management the first task to to identify all the tasks and subtasks to produce a work breakdown structure. The next thing to do is to identify the time ordering of tasks relative to one another, i.e. which tasks rely on others, which tasks must be performed before others can start. Finally, the duration for each task needs to assigned. Using this information it is possible to draw a task precedence diagram, which is exactly what the demonstration system allows you to do. With is diagram it is then possible to calculate the Critical Path. The Critical Path is defined as that path on the diagram which has an overriding effect on the total length of time the project will take. If the duration of tasks on the critical path are increased or decreased then the overall time taken for the tasks will be increased or decreased. The numbers in the boxes representing a task are as follows: Top left: Earliest start for task Top middle: Duration of task Top right: Earliest finish for task Bottom left: Latest start for task Bottom right: Latest finish for task What the demonstration allows you to do is to draw a task precedence diagram and then calculate the critical path for all the tasks. ======================================================================= Demonstration Guide ------------------- Starting Demonstration: Execute the batch file "run". The demonstration index, called "installation.ind" consists of one diagram card which shows an example precedence diagram, for the task of installing a new computer. Each task has a name and a duration. The duration is shown in the upper middle box of each task node. The four boxes at the corners of the task node are: Top left: Earliest start Top right: Earliest finish Bottom left: Latest start Bottom right: Latest finish The arcs between nodes indicate that a task must be completed before the next task begin. Evaluating critical path. Select a node in the diagram by left clicking on it. Left clicking on another node will deselect the originally selected node and select the new one. With a node selected choose menu item "Evaluate: Critical path". If the node selected is a valid root node then the critical path will be evaluated. This involves calculating the critical path and displaying this on the diagram by changing the colour of the arcs linking nodes on the critical to red, as well as adding a hollow circle annotation to the middle of these arcs. At the same time the earliest start, earliest finish, latest start and latest finish for all nodes are also calculated. A valid root node for critical path analysis is one which has no parents but has children. If the user selects a node that is not valid and chooses menu item "Evaluate: Critical path" then a warning message appears telling the user that is not a valid node and no analysis is done. Example ------- With the installation of a computer precedence diagram showing, select the node "Feasibility study" and choose menu item "Evaluate: Critical path". The critical path is shown -- it is along the bottom path of the diagram. Changing node attributes: The user can change the name and duration of a node. Control click on a node and a window appears allowing the user to make changes to the node's name and duration. When the user clicks on the Ok button, then if there is a valid root node selected, the critical path is recalculated to take into account the new value for a node (e.g. the new duration). Example ------- With the critical path calculated for the original diagram, change the duration of the node "Train programmers" to 14, and click on the Ok button. The critical path is recalculated and can be seen to have changed to the next to bottom path. Adding nodes to diagram: The user can select the node type on the diagram. With the mouse over the diagram card, the cursor icon should appear as a set of crosshairs. When the user left clicks on the diagram the node is placed and two dialog boxes appear asking the user to enter the name and duration for the task. Linking nodes in diagram: If the user Control right drags from one node to another an arc appears between the two nodes. The resulting arc from Control right dragging looks better than simple right dragging, but it is effectively the same -- an arc is drawn from one node to another node. Example ------- Select anode on the palette and drop it on the diagram card to the right of the node "Train data prep staff" at the top of the diagram. Give the node any name and give it a duration of 20. Then Control right drag from "Train data prep staff" to this new node, and also Control right drag from the new node to the end node "Change over". Then select the root node and choose menu item "Evaluate: Critical path". The critical path will be recalculated and it will now be along this upper path. Saving your network: Not sure whether this works. Try choosing menu item "Evaluate: Save network". Exit from HARDY: If you want to finish your work go to the control window of HARDY and choose menu item "File: Exit HARDY".If you haven't saved your work HARDY will ask you if you want to do it now. Please do not save changes to the demonstration network "installation.ind". Caveats: 1) Not very robustly tested 2) Not designed for diagrams linked via expansion cards, but there is probably no reason why code could not be changed to take account of expansion cards. #FILE USER CRITPATH\RUN hardy -clips loader.clp -def diagrams.def -f installn.ind &