/***************************************************************************************/ /* */ /* SCS editor Version 2 */ /* File : ZoneInterface.pkg */ /* Version : 19 Mai 2000 */ /* Zone interface functions */ /* */ /***************************************************************************************/ /*************************************************************************************** Zone's contents handling functions ***************************************************************************************/ /****************************************************************************** return the list of all descendants of a zone *******************************************************************************/ fun ZONE_GetAllDescendantsList (site, zone) = /* search for the zone in site */ let SITE_SearchZoneNode site zone -> zoneNode in if zoneNode == nil then logScsError "ZONE_GetAllDescendantsList" nil "Zone node not found" nil else (TREE_TreeToList TREE_FirstChild zoneNode TREE_IN_ORDER) ;; /* returns every zones descendant of zones in zoneList */ fun ZONE_ListGetAllDescendantsList (site, zoneList) = if zoneList == nil then nil else listcat ((hd zoneList)::(ZONE_ListGetAllDescendantsList site ZONE_GetAllDescendantsList site hd zoneList)) (ZONE_ListGetAllDescendantsList site tl zoneList) ;; /* returns zones children of zones in zoneList */ fun ZONE_ListGetDescendantsList (site, zoneList) = if zoneList == nil then nil else listcat ((hd zoneList)::(ZONE_GetAllDescendantsList site hd zoneList)) (ZONE_ListGetDescendantsList site tl zoneList) ;; /*************************************************************************************** Return the zone's side code, client or server Return value: I (success) or nil (failure) ***************************************************************************************/ fun ZONE_GetSide (zone) = zone.ZONEsideFlag ;; /*************************************************************************************** Return the zone's name Return value: S (success) or nil (failure) ***************************************************************************************/ fun ZONE_GetName (zone) = zone.ZONEname ;; /*************************************************************************************** Set the zone's name Return value: 1 (success) or 0 (failure) ***************************************************************************************/ fun ZONE_SimpleSetName (site, zone, zoneName) = if (zoneName == nil) || (!strcmp zoneName "") then ( ERRORS_AddError 0 19 strcatn (_locSCS "errorlabel-11" nil)::": "::zoneName::nil; logScsError "ZONE_SetName" nil "name is nil or \"\"" 0 ) else /* performs name unicity test */ if !ZONE_CheckNameUnicity (ZONE_GetChildren site (ZONE_GetFather site zone)) zoneName zone then ( ERRORS_AddError 0 21 strcatn (_locSCS "errorlabel-11" nil)::": "::zoneName::nil; logScsError "ZONE_SetName" "zone new name="::zoneName::nil "name is already used" 0 ) else if ! (strcmp zone.ZONEname zoneName) then 0 else if (ZONE_GetFather site zone) == nil /* cannot change root zone name */ then ( ERRORS_AddError 0 40 strcatn (_locSCS "errorlabel-11" nil)::": "::zoneName::nil; 0 ) else ( set zone.ZONEname = zoneName; 1 ) ;; proto ZONE_SetName = fun [Site Zone S] I;; fun ZONE_SetName (site, zone, zoneName) = let zone.ZONEname -> oldName in if ZONE_SimpleSetName site zone zoneName then ( HISTORY_AddCurrentSite _locSCS "zone-NAME" oldName::zoneName::nil mkfun1 mkfun2 mkfun3 @ZONE_SetName oldName zone site mkfun1 mkfun2 mkfun3 @ZONE_SetName zoneName zone site; 1 ) else 0; REFLEX_ZoneModified zone::nil REFLEX_NAME ;; /*************************************************************************************** Return the zone's size Return value: [I I] (success) or nil (failure) ***************************************************************************************/ fun ZONE_GetSize (zone) = zone.ZONEsize ;; /*************************************************************************************** Return the zone's left border, right border, top border and bottom border offsets Return value: [I I I I] (success) or nil (failure) ***************************************************************************************/ fun ZONE_GetEdgePositions (zone) = zone.ZONEedgePositions ;; /*************************************************************************************** Set popup special x2 or y2 position Return value: 1 (success) or 0 (failure) ***************************************************************************************/ proto ZONE_SetSecondaryPositions = fun [Zone [I I]] I;; fun ZONE_SetSecondaryPositions (zone, edgePositions) = let zone.ZONEedgePositions -> [x1 oldX2 y1 oldY2] in let edgePositions -> [x2 y2] in ( HISTORY_AddCurrentSite _locSCS "zone-SIZE" (ZONE_GetName zone)::(strcatn " ("::(itoa x2-x1)::","::(itoa y2-y1)::")"::nil)::nil mkfun1 mkfun2 @ZONE_SetSecondaryPositions [oldX2 oldY2] zone mkfun1 mkfun2 @ZONE_SetSecondaryPositions edgePositions zone; if x2 < 0 then set x2 = nil else nil; if y2 < 0 then set y2 = nil else nil; set zone.ZONEorigEdgePositions = [x1 x2 y1 y2]; set zone.ZONEedgePositions = [x1 x2 y1 y2]; REFLEX_ZoneModified zone::nil REFLEX_POSITIONSTYLE; ); 1 ;; /*************************************************************************************** Set the zone's position in the mother window Return value: 1 (success) or 0 (failure) ***************************************************************************************/ proto ZONE_SetPositions = fun [Site Zone [I I] [I I] I] I;; fun ZONE_SetPositions (site, zone, edgePositions, size, addHistory) = let zone.ZONEedgePositions -> [oldX _ oldY _] in let zone.ZONEsize -> [oldW oldH] in let edgePositions -> [x y] in let size -> [w h] in ( ZONE_SetEdgeAndSize site zone x y w h; let zone.ZONEedgePositions -> [newX _ newY _] in let zone.ZONEsize -> [newW newH] in if (newW != oldW) || (newH != oldH) then ( if addHistory then HISTORY_AddCurrentSite _locSCS "zone-SIZE" (ZONE_GetName zone)::(strcatn " ("::(itoa newW)::","::(itoa newH)::")"::nil)::nil mkfun1 mkfun2 mkfun3 mkfun4 mkfun5 @ZONE_SetPositions 1 [oldW oldH] [oldX oldY] zone site mkfun1 mkfun2 mkfun3 mkfun4 mkfun5 @ZONE_SetPositions 1 size edgePositions zone site else nil; REFLEX_ZoneModified zone::nil REFLEX_SIZE ) else if (newX != oldX) || (newY != oldY) then ( if addHistory then HISTORY_AddCurrentSite _locSCS "zone-POSITION" (ZONE_GetName zone)::(strcatn " ("::(itoa newX)::","::(itoa newY)::")"::nil)::nil mkfun1 mkfun2 mkfun3 mkfun4 mkfun5 @ZONE_SetPositions 1 [oldW oldH] [oldX oldY] zone site mkfun1 mkfun2 mkfun3 mkfun4 mkfun5 @ZONE_SetPositions 1 size edgePositions zone site else nil; REFLEX_ZoneModified zone::nil REFLEX_POSITION ) else ( if (w != oldW) || (h != oldH) then REFLEX_ZoneModified zone::nil REFLEX_SIZE else if (x != oldX) || (y != oldY) then REFLEX_ZoneModified zone::nil REFLEX_POSITION else nil ) ); 1 ;; fun ZONE_ForceSetPosition (site, zone, oldEdgePositions ) = let zone.ZONEedgePositions -> [x _ y _] in let zone.ZONEsize -> size in let oldEdgePositions -> [oldX oldY] in HISTORY_AddCurrentSite _locSCS "zone-POSITION" (ZONE_GetName zone)::(strcatn " ("::(itoa x)::","::(itoa y)::")"::nil)::nil mkfun1 mkfun2 mkfun3 mkfun4 mkfun5 @ZONE_SetPositions 1 size oldEdgePositions zone site mkfun1 mkfun2 mkfun3 mkfun4 mkfun5 @ZONE_SetPositions 1 size [x y] zone site ;; fun ZONE_ForceSetSize (site, zone, oldEdgeSize ) = let zone.ZONEedgePositions -> [x _ y _] in let zone.ZONEsize -> [w h] in let oldEdgeSize -> [oldW oldH] in HISTORY_AddCurrentSite _locSCS "zone-SIZE" (ZONE_GetName zone)::(strcatn " ("::(itoa w)::","::(itoa h)::")"::nil)::nil mkfun1 mkfun2 mkfun3 mkfun4 mkfun5 @ZONE_SetPositions 1 [oldW oldH] [x y] zone site mkfun1 mkfun2 mkfun3 mkfun4 mkfun5 @ZONE_SetPositions 1 [w h] [x y] zone site ;; fun ZONE_ForceSetPositionAndSize (site, zone, param ) = let param -> [oldX oldY oldW oldH] in let zone.ZONEedgePositions -> [x _ y _] in let zone.ZONEsize -> [w h] in HISTORY_AddCurrentSite _locSCS "zone-POSITIONANDSIZE" (ZONE_GetName zone):: (strcatn " ("::(itoa x)::","::(itoa y)::")"::nil)::(strcatn " ("::(itoa w)::","::(itoa h)::")"::nil)::nil mkfun1 mkfun2 mkfun3 mkfun4 mkfun5 @ZONE_SetPositions 1 [oldW oldH] [oldX oldY] zone site mkfun1 mkfun2 mkfun3 mkfun4 mkfun5 @ZONE_SetPositions 1 [w h] [x y] zone site ;; /*************************************************************************************** Set the zone x1 position in the mother window Return value: 1 (success) or 0 (failure) ***************************************************************************************/ fun ZONE_SetX1Position (site, zone, x1) = let zone.ZONEedgePositions -> [_ _ y _] in let zone.ZONEsize -> [w h] in ZONE_SetPositions site zone [x1 y] [w h] 1 ;; /*************************************************************************************** Set the zone x2 position in the mother window Return value: 1 (success) or 0 (failure) ***************************************************************************************/ fun ZONE_SetX2Position (site, zone, x2) = let zone.ZONEedgePositions -> [x1 prevx2 y1 y2] in if zone.ZONEtypeFlag == ZONE_POPUP then ZONE_SetSecondaryPositions zone [x2 y2] else let zone.ZONEsize -> [w h] in ZONE_SetPositions site zone [x1+(prevx2-x2) y1] [w h] 1 ;; /*************************************************************************************** Set the zone y1 position in the mother window Return value: 1 (success) or 0 (failure) ***************************************************************************************/ fun ZONE_SetY1Position (site, zone, y1) = let zone.ZONEedgePositions -> [x _ _ _] in let zone.ZONEsize -> [w h] in ZONE_SetPositions site zone [x y1] [w h] 1 ;; /*************************************************************************************** Set the zone y2 position in the mother window Return value: 1 (success) or 0 (failure) ***************************************************************************************/ fun ZONE_SetY2Position (site, zone, y2) = let zone.ZONEedgePositions -> [x1 x2 y1 prevy2] in if zone.ZONEtypeFlag == ZONE_POPUP then ZONE_SetSecondaryPositions zone [x2 y2] else let zone.ZONEsize -> [w h] in ZONE_SetPositions site zone [x1 y1+(prevy2-y2)] [w h] 1 ;; /*************************************************************************************** Set the zone w size Return value: 1 (success) or 0 (failure) ***************************************************************************************/ fun ZONE_SetWSize (site, zone, w) = let zone.ZONEedgePositions -> [x _ y _] in let zone.ZONEsize -> [_ h] in ZONE_SetPositions site zone [x y] [w h] 1 ;; /*************************************************************************************** Set the zone h size Return value: 1 (success) or 0 (failure) ***************************************************************************************/ fun ZONE_SetHSize (site, zone, h) = let zone.ZONEedgePositions -> [x _ y _] in let zone.ZONEsize -> [w _] in ZONE_SetPositions site zone [x y] [w h] 1 ;; fun ZONE_SetSizeChange (site, zone, Wchange, Hchange) = if Wchange == 0 && Hchange == 0 then 0 else let zone.ZONEsize -> [w h] in let zone.ZONEedgePositions -> [x _ y _] in ZONE_SetPositions site zone [x y] [w+Wchange h+Hchange] 0 ;; fun ZONE_SetPositionChange (site, zone, Xchange, Ychange) = if Xchange == 0 && Ychange == 0 then 0 else let zone.ZONEsize -> [w h] in let zone.ZONEedgePositions -> [x _ y _] in ZONE_SetPositions site zone [x+Xchange y+Ychange] [w h] 0 ;; fun ZONE_SetPositionAndSizeChange (site, zone, Xchange, Ychange, Wchange, Hchange) = if Xchange == 0 && Ychange == 0 && Wchange == 0 && Hchange == 0 then 0 else let zone.ZONEsize -> [w h] in let zone.ZONEedgePositions -> [x _ y _] in ZONE_SetPositions site zone [x+Xchange y+Ychange] [w+Wchange h+Hchange] 0 ;; /*************************************************************************************** Return the zone's bitmap Return value: Objbitmap (success) or nil (failure) ***************************************************************************************/ fun ZONE_GetBitmapData (zone, chan) = if zone.ZONEbitmapFile == nil then nil else if (_checkpack zone.ZONEbitmapFile) == nil then nil else [ BITMAP_GetReal zone.ZONEbitmapFile chan zone.ZONEbitmapFlag ] ;; /*************************************************************************************** Return the zone's background bitmap file Return value: AlphaBitmap (success) or nil (failure) ***************************************************************************************/ fun ZONE_GetBitmapFile (zone) = zone.ZONEbitmapFile ;; /*************************************************************************************** Set the zone's bitmap file Return value: 1 (success) or 0 (failure) ***************************************************************************************/ proto ZONE_SetBitmapFile = fun [Site Zone S] I;; fun ZONE_SetBitmapFile (site, zone, bitmapFile) = if (ASSO_SearchZoneAssociation site zone) != nil then ( ERRORS_AddError 1 52 (_locSCS "errorlabel-NOTALLOWED" nil); nil ) else let zone.ZONEbitmapFile -> oldBitmap in ( ZONE_SetRealBitmapFile zone bitmapFile; HISTORY_AddCurrentSite _locSCS "zone-BITMAP" (ZONE_GetName zone)::bitmapFile::nil mkfun1 mkfun2 mkfun3 @ZONE_SetBitmapFile oldBitmap zone site mkfun1 mkfun2 mkfun3 @ZONE_SetBitmapFile bitmapFile zone site; REFLEX_ZoneModified zone::nil REFLEX_BITMAP; ZONE_ChangeType site zone; 1 ) ;; /*************************************************************************************** Return the zone's color Return value: I (success) or 0 (failure) ***************************************************************************************/ fun ZONE_GetColor (zone) = zone.ZONEcolor ;; fun ZONE_ChangeBitmapFlag (zone, type) = if (zone.ZONEbitmapFlag == type) || (zone.ZONEbitmapFile == nil) || ! (ZONE_CheckBitmapFlag type) then nil else ( set zone.ZONEbitmapFlag = type; REFLEX_ZoneModified zone::nil REFLEX_BITMAP ) ;; /*************************************************************************************** Set the zone's color Return value: 1 (success) or 0 (failure) ***************************************************************************************/ proto ZONE_SetColor = fun [Zone I] I;; fun ZONE_SetColor (zone, color) = HISTORY_AddCurrentSite _locSCS "zone-COLOR" (ZONE_GetName zone)::(colorSCOLtoHTML color)::nil mkfun1 mkfun2 @ZONE_SetColor zone.ZONEcolor zone mkfun1 mkfun2 @ZONE_SetColor color zone; set zone.ZONEcolor = color; REFLEX_ZoneModified zone::nil REFLEX_COLOR ;; /*************************************************************************************** Return the zone's position flag, bitmap flag and type flag Return value: [I I I] (success) or nil (failure) ***************************************************************************************/ fun ZONE_GetStyle (zone) = [zone.ZONEpositionFlag zone.ZONEbitmapFlag zone.ZONEtypeFlag] ;; /*************************************************************************************** Set the zone position flags ***************************************************************************************/ fun ZONE_RealSetPositionStyle( zone, positionFlag )= set zone.ZONEpositionFlag = positionFlag; REFLEX_ZoneModified zone::nil REFLEX_POSITIONSTYLE ;; fun ZONE_SetPositionStyle (zone, positionFlag) = if !ZONE_CheckPositionFlag (zone.ZONEpositionFlag)^positionFlag then ( ERRORS_AddError 0 32 (_locSCS "errorlabel-NOTALLOWED" nil); REFLEX_ZoneModified zone::nil REFLEX_POSITIONSTYLE; logScsError "ZONE_SetPositionStyle" nil "invalid position flag; cannot fix the three value for one axis" 0 ) else ( HISTORY_AddCurrentSite _locSCS "zone-RESIZE" (ZONE_GetName zone)::nil mkfun1 mkfun2 @ZONE_RealSetPositionStyle zone.ZONEpositionFlag zone mkfun1 mkfun2 @ZONE_RealSetPositionStyle (zone.ZONEpositionFlag)^positionFlag zone; ZONE_RealSetPositionStyle zone (zone.ZONEpositionFlag)^positionFlag ) ;; /*************************************************************************************** Return the zone's father zone Return value: Zone (success) or nil (failure) ***************************************************************************************/ fun ZONE_GetFather (site, zone) = let SITE_SearchZoneNode site zone -> zoneNode in if zoneNode == nil then /* ERROR NOT SENT TO END-USER */ logScsError "ZONE_GetFather" nil "can't find zone node" nil else TREE_Val (TREE_Father zoneNode) ;; /*************************************************************************************** Return the zone's children zones Return value: [Zone r1] (success) or nil (failure) ***************************************************************************************/ fun ZONE_GetChildren (site, zone) = let SITE_SearchZoneNode site zone -> zoneNode in if zoneNode == nil then logScsError "ZONE_GetChildren" nil "can't find zone node" nil else TREE_ListValOfAllChilds zoneNode ;; fun ZONES_GetChildrenNotPopup (site, zone) = removef_all_in_list ZONE_GetChildren site zone @ZONE_IsPopup nil ;; /**************************************************************************************** ****************************************************************************************/ fun ZONE_GetFirstSon( site, zone )= /* search for the zone in site */ let SITE_SearchZoneNode site zone -> zoneNode in if zoneNode == nil then logScsError "ZONE_GetFirstSon" nil "Zone node not found" nil else TREE_Val TREE_FirstChild zoneNode ;; /**************************************************************************************** ****************************************************************************************/ fun ZONE_GetNextBrother (site, zone) = /* search for the zone in site */ let SITE_SearchZoneNode site zone -> zoneNode in if zoneNode == nil then logScsError "ZONE_GetNextBrother" nil "Zone node not found" nil else TREE_Val TREE_NextBrother zoneNode ;; /*************************************************************************************** Zone handling functions ***************************************************************************************/ /*************************************************************************************** Add a new zone Return value: Zone (success) or nil (failure) ***************************************************************************************/ fun ZONE_Add (site, father, typeZone) = let SITE_SearchZoneNode site father -> fatherNode in if fatherNode == nil then logScsError "ZONE_Add" nil "can't find zone's father node" nil else let mkZone [ nil nil nil nil nil nil nil 0 0 typeZone father.ZONEsideFlag ] -> zone in ( /* add the zone node as last child of the father node */ TREE_AddNodeToChildTail fatherNode (TREE_MkNode zone); zone ) ;; fun ZONE_RealPaste (zoneNode, param) = let param -> [site fatherNode] in let TREE_Val zoneNode -> zone in if !ZONE_CheckNameUnicity (ZONE_GetChildren site TREE_Val fatherNode) zone.ZONEname nil then ( set zone.ZONEname = strcat zone.ZONEname " copy"; ZONE_RealPaste zoneNode [site fatherNode] ) else TREE_AddNodeToChildTail fatherNode zoneNode ;; /*************************************************************************************** destroy a zone ***************************************************************************************/ fun ZONE_SimpleDestroy (site, zoneNode) = TREE_RemoveNode zoneNode ;; fun ZONE_DestroyElt (zone, site) = let SITE_SearchZoneNode site zone -> zoneNode in ZONE_SimpleDestroy site zoneNode; 1 ;; fun ZONE_DestroySingleElt (zone, site) = let ZONE_GetFather site zone -> father in ( SELECT_RemoveZone zone::nil father REFLEX_PRIORITY_ONE; REFLEX_ZoneRemoved zone::nil nil; ); ZONE_DestroyElt zone site ;; fun ZONE_SetNewZoneName (site, zone, father, name) = if ZONE_CheckNameUnicity (ZONE_GetChildren site father) name nil then set zone.ZONEname = name else let splitString name " " -> listName in ZONE_SetNewZoneName site zone father strcatn (hd listName)::" "::(itoa ((atoi (hd tl listName) )+ 1))::nil ;; fun ZONE_GetFirstPopupParent (site, zone) = if zone == nil then logScsError "ZONE_GetFirstPopupParent" nil " Cannot found a popup parent for zone !" nil else if ZONE_IsPopup zone nil then zone else ZONE_GetFirstPopupParent site ZONE_GetFather site zone ;; /*************************************************************************************** Create a new zone Return value: Zone (success) or nil (failure) ***************************************************************************************/ proto ZONE_HandleCreate = fun [Site Zone Zone S] I;; fun ZONE_HandleCreate (site, father, zone, zonename)= ZONE_SetNewZoneName site zone father zonename; let SITE_SearchZoneNode site father -> fatherNode in if fatherNode == nil then logScsError "ZONE_Add" nil "can't find zone's father node" nil else let ZONE_GetFreePositions (ZONE_GetChildren site father) [0 0 0 0]::nil (ZONE_GetSize father) -> [x1 x2 y1 y2] in ( TREE_AddNodeToChildTail fatherNode (TREE_MkNode zone); HISTORY_AddCurrentSite _locSCS "zone-CREATE" zonename::nil mkfun1 mkfun2 @ZONE_DestroySingleElt site zone mkfun1 mkfun2 mkfun3 mkfun4 @ZONE_HandleCreate zonename zone father site; set zone.ZONEpositionFlag = ZONE_RW_FLEX|ZONE_RH_FLEX; ZONE_SetEdge site zone x1 x2 y1 y2; set zone.ZONEcolor = ZONE_GetRandomColor; ZONE_ChangeType site father; REFLEX_ZoneAdded zone::nil nil; SELECT_NewZone zone REFLEX_PRIORITY_ONE ); 1 ;; fun ZONE_Create (site, origZone, typeZone) = let if typeZone == ZONE_POPUP then ZONE_GetFirstPopupParent site origZone else origZone -> father in let SITE_SearchZoneNode site father -> fatherNode in if fatherNode == nil then logScsError "ZONE_Add" nil "can't find zone's father node" nil else if (ASSO_SearchZoneAssociation site father) != nil then ( ERRORS_AddError 1 51 (_locSCS "errorlabel-NOTALLOWED" nil); nil ) else let mkZone [ nil nil nil nil nil nil nil 0 0 typeZone father.ZONEsideFlag ] -> zone in if zone == nil then nil else ZONE_HandleCreate site father zone if typeZone == ZONE_ZONE then "zone 1" else "popup 1" ;; fun ZONE_DestroyAssociation (zone, site) = ASSO_RemoveAssociatedZone site zone ;; fun ZONE_DestroyList (site, zoneList) = apply_on_list (ZONE_ListGetDescendantsList site zoneList) @ZONE_DestroyAssociation site; let ZONE_GetFather site hd zoneList -> father in ( SELECT_RemoveZone zoneList father REFLEX_PRIORITY_ONE; REFLEX_ZoneRemoved (ZONE_ListGetDescendantsList site zoneList) nil; apply_on_list zoneList @ZONE_DestroyElt site; ZONE_ChangeType site father ); 1 ;; fun ZONE_PasteList (site, zoneNodeList, fatherNode, assoList) = apply_on_list zoneNodeList @ZONE_RealPaste [site fatherNode]; let TREE_ListValOfList zoneNodeList -> zoneList in ( REFLEX_ZoneAdded ZONE_ListGetAllDescendantsList site zoneList nil; SELECT_NewZone hd zoneList REFLEX_PRIORITY_ONE; MODULE_RecreateAssociations site assoList; ); 1 ;; /*************************************************************************************** Destroy zone list Return value: 1 (success) or 0 (failure) ***************************************************************************************/ fun ZONE_Destroy (site, zoneList) = SCSGUI_OpenLoadingDialogBox (_locSCS "zone-DESTROYING" nil); if is_in_list zoneList SITE_GetZoneRoot site ZONE_GetSide hd zoneList then ( ERRORS_AddError 0 50 (_locSCS "errorlabel-NOTALLOWED" nil) ; /* MAC ICI à changer ! */ logScsError "ZONE_Destroy" nil "Cannot remove site root zone !" 0 ) else ( HISTORY_AddCurrentSite _locSCS "zone-DESTROY" (ZONE_GetName hd zoneList)::nil mkfun1 mkfun2 mkfun3 mkfun4 @ZONE_PasteList (ASSO_GetAllZoneAssociation site (ZONE_ListGetDescendantsList site zoneList)) (SITE_SearchZoneNode site ZONE_GetFather site hd zoneList) (SITE_SearchZoneNodeList site zoneList) site mkfun1 mkfun2 @ZONE_DestroyList zoneList site; ZONE_DestroyList site zoneList ); SCSGUI_CloseLoadingDialogBox ;;