/***************************************************************************************/ /* */ /* SCS editor Version 2 */ /* File : Siteinterface.pkg */ /* Version : 29 Mai 2000 */ /* Site interface functions */ /* */ /***************************************************************************************/ proto GUI_SaveSite = fun [Site I] I ;; proto GUI_SaveSiteIfNeededUponQuitting = fun [[Site r1]] I ;; fun SITE_GetModificationState (site) = site.SITEmodified ;; fun SITE_SetModified (site) = set site.SITEmodified = 1; REFLEX_SiteModified site REFLEX_STATUS ;; fun SITE_SetNotModified (site) = set site.SITEmodified = 0; REFLEX_SiteModified site REFLEX_STATUS ;; fun SITE_DirectChangeStatus (site) = if SITE_GetModificationState site then nil else SITE_SetModified site; 0 ;; fun SITE_ChangeStatus () = let SELECT_GetSite -> site in if site == nil then nil else SITE_DirectChangeStatus site ;; /**************************************************************************************** search function by site filename ****************************************************************************************/ fun SITE_SearchByFilename (filename) = search_in_list scs.SCSsites @SITE_CompareFilename filename ;; fun SITE_CloseDefaultSite (site) = REFLEX_SiteRemoved site nil; set scs.SCSsites = remove_from_list scs.SCSsites site ;; fun SITE_HaveToCloseSite () = if (sizelist scs.SCSsites) == 1 then let hd scs.SCSsites -> site in if (site.SITEfilename == nil) && !(site.SITEmodified) then site else nil else nil ;; /**************************************************************************************** add a new site to the list of site ****************************************************************************************/ fun SITE_AddSite (site) = let SITE_HaveToCloseSite -> siteToClose in ( set scs.SCSsites = listcat scs.SCSsites site::nil; if site.SITEfilename == nil then nil else SITE_AddToRecentFiles site.SITEfilename; REFLEX_SiteAdded site nil; SELECT_NewSite site; SITE_CloseDefaultSite siteToClose; site ) ;; /**************************************************************************************** return site filename ****************************************************************************************/ fun SITE_GetFileName (site) = site.SITEfilename ;; /**************************************************************************************** returns site password ****************************************************************************************/ fun SITE_GetPassword (site) = site.SITEoptions.SITEpassword ;; /**************************************************************************************** returns site port number ****************************************************************************************/ fun SITE_GetPort (site) = site.SITEoptions.SITEportNumber ;; /**************************************************************************************** returns site author name ****************************************************************************************/ fun SITE_GetAuthorName (site) = site.SITEoptions.SITEauthorName ;; /**************************************************************************************** returns site author email address ****************************************************************************************/ fun SITE_GetAuthorEmail (site) = site.SITEoptions.SITEauthorEmail ;; /**************************************************************************************** returns site description ****************************************************************************************/ fun SITE_GetSiteDescription (site) = site.SITEoptions.SITEdescription ;; /**************************************************************************************** returns site language ****************************************************************************************/ fun SITE_GetSiteLanguage (site) = site.SITEoptions.SITElang ;; /**************************************************************************************** returns site screenshot bitmap resource filename ****************************************************************************************/ fun SITE_GetScreenshotName (site) = site.SITEoptions.SITEscreenshotName ;; /**************************************************************************************** Sets site password ****************************************************************************************/ proto SITE_SetPassword = fun [Site S] I;; fun SITE_SetPassword (site, password) = HISTORY_AddCurrentSite _locSCS "site-PASSWORD" password::nil mkfun1 mkfun2 @SITE_SetPassword site.SITEoptions.SITEpassword site mkfun1 mkfun2 @SITE_SetPassword password site; set site.SITEoptions.SITEpassword = password ; REFLEX_SiteModified site REFLEX_OTHER ;; /**************************************************************************************** Sets site port number ****************************************************************************************/ proto SITE_SetPort = fun [Site I] I;; fun SITE_SetPort(site,nport) = HISTORY_AddCurrentSite _locSCS "site-PORTNUMBER" (itoa nport)::nil mkfun1 mkfun2 @SITE_SetPort site.SITEoptions.SITEportNumber site mkfun1 mkfun2 @SITE_SetPort nport site; set site.SITEoptions.SITEportNumber = nport ; REFLEX_SiteModified site REFLEX_OTHER ;; /**************************************************************************************** returns site load capacity ****************************************************************************************/ fun SITE_GetLoadCapacity (site) = site.SITEoptions.SITEloadCapacity ;; /**************************************************************************************** Sets site load capacity ****************************************************************************************/ proto SITE_SetLoadCapacity = fun [Site I] I;; fun SITE_SetLoadCapacity(site,nCapacity) = HISTORY_AddCurrentSite _locSCS "site-LOADCAPACITY" (itoa nCapacity)::nil mkfun1 mkfun2 @SITE_SetLoadCapacity site.SITEoptions.SITEloadCapacity site mkfun1 mkfun2 @SITE_SetLoadCapacity nCapacity site; set site.SITEoptions.SITEloadCapacity = nCapacity ; REFLEX_SiteModified site REFLEX_OTHER ;; /**************************************************************************************** returns site timeout ****************************************************************************************/ fun SITE_GetTimeout (site) = site.SITEoptions.SITEtimeout ;; /**************************************************************************************** Sets site timeout ****************************************************************************************/ proto SITE_SetTimeout = fun [Site I] I;; fun SITE_SetTimeout(site,ntimeout) = HISTORY_AddCurrentSite _locSCS "site-TIMEOUT" (itoa ntimeout)::nil mkfun1 mkfun2 @SITE_SetTimeout site.SITEoptions.SITEtimeout site mkfun1 mkfun2 @SITE_SetTimeout ntimeout site; set site.SITEoptions.SITEtimeout = ntimeout ; REFLEX_SiteModified site REFLEX_OTHER ;; /**************************************************************************************** returns site directory ****************************************************************************************/ fun SITE_GetDirectory (site) = site.SITEoptions.SITEdirectory ;; /**************************************************************************************** Sets site directory ****************************************************************************************/ proto SITE_SetDirectory = fun [Site S] I;; fun SITE_SetDirectory(site,sDirectory) = HISTORY_AddCurrentSite _locSCS "site-DIRECTORY" sDirectory::nil mkfun1 mkfun2 @SITE_SetDirectory site.SITEoptions.SITEdirectory site mkfun1 mkfun2 @SITE_SetDirectory sDirectory site; set site.SITEoptions.SITEdirectory = sDirectory ; REFLEX_SiteModified site REFLEX_OTHER ;; /**************************************************************************************** Sets site screenshot filename ****************************************************************************************/ proto SITE_SetScreenshotName = fun [Site S] I;; fun SITE_SetScreenshotName(site,sFilename) = HISTORY_AddCurrentSite _locSCS "site-SCREENSHOTFILENAME" sFilename::nil mkfun1 mkfun2 @SITE_SetScreenshotName site.SITEoptions.SITEscreenshotName site mkfun1 mkfun2 @SITE_SetScreenshotName sFilename site; set site.SITEoptions.SITEscreenshotName = sFilename ; REFLEX_SiteModified site REFLEX_OTHER ;; /**************************************************************************************** Return site roots ****************************************************************************************/ fun SITE_GetClientZoneRoot (site) = TREE_Val site.SITEclientZonesTreeRoot ;; fun SITE_GetServerZoneRoot (site) = TREE_Val site.SITEserverZonesTreeRoot ;; fun SITE_GetModuleRoot (site) = TREE_Val site.SITEmoduleTreeRoot ;; fun SITE_GetZoneRoot (site, side) = if side == SCS_SERVER then SITE_GetServerZoneRoot site else if side == SCS_CLIENT then SITE_GetClientZoneRoot site else nil ;; /**************************************************************************************** Create a new site Return value: Site (success) ****************************************************************************************/ fun SITE_Create (siteName, sitePort, siteTimeout, siteVisibility)= /* MAT ICI le module root prend pour nom celui du projet: a changer ??? */ let MODULE_CreateRoot -> rootModule in ( MODULE_AddDefLineList rootModule MOD_BLOCK_DMI ROOT_DMI; set rootModule.MODname = if MODULE_CheckNameValidity siteName 0 then siteName else PARAMS_GetS SCSparameters "SITE_NAME"; let mkSite [ nil 0 MODULE_MkNode rootModule TREE_MkNode ZONE_CreateRoot SCS_CLIENT TREE_MkNode ZONE_CreateRoot SCS_SERVER nil nil rootModule mkSiteOptions [ rootModule.MODname 0 nil nil PARAMS_GetI SCSparameters "SITE_DEFAULT_PORT" PARAMS_GetI SCSparameters "SITE_DEFAULT_TIMEOUT" nil PARAMS_GetS SCSparameters "SITE_DEFAULT_AUTHORNAME" PARAMS_GetS SCSparameters "SITE_DEFAULT_AUTHOREMAIL" PARAMS_GetS SCSparameters "SITE_DEFAULT_SITEDESC" PARAMS_GetS SCSparameters "SITE_DEFAULT_SITELANG" SITE_NewScolFileContent SITE_NewSatelliteScolFileContent PARAMS_GetS SCSparameters "SITE_DEFAULT_SCREENSHOTFILENAME" nil ] HISTORY_Create nil nil nil nil ] -> newSite in ( SITE_SetModuleCurrentBlackBox newSite rootModule; newSite ) ) ;; fun SITE_RetrieveScolFileContent (site) = let SITE_LoadScolFileContent site -> content in if content == nil then if site.SITEoptions.SITEscolFileContent == nil then set site.SITEoptions.SITEscolFileContent = SITE_NewScolFileContent else set site.SITEoptions.SITEscolFileContent = SITE_ContentFilenameToParam site site.SITEoptions.SITEscolFileContent else set site.SITEoptions.SITEscolFileContent = SITE_ContentFilenameToParam site content; if site.SITEoptions.SITEsatelliteScolFileContent == nil then set site.SITEoptions.SITEsatelliteScolFileContent = SITE_NewSatelliteScolFileContent else nil ;; /**************************************************************************************** Load a site from a file Return value: Site (success) or nil (failure) ****************************************************************************************/ fun SITE_Load (filename, Channel) = if filename == nil then ( ERRORS_AddError 2 26 (_locSCS "errorlabel-6" nil) ; logScsError "SITE_Load" nil "filename is nil" nil; nil ) else if (_checkpack filename) == nil then ( ERRORS_AddError 2 37 (_locSCS "errorlabel-6" nil) ; logScsError "SITE_Load" nil "recent file doesnt exist anymore" nil; nil ) else let mkSite [nil 0 nil nil nil nil nil nil mkSiteOptions [ nil nil nil nil PARAMS_GetI SCSparameters "SITE_DEFAULT_PORT" PARAMS_GetI SCSparameters "SITE_DEFAULT_TIMEOUT" nil PARAMS_GetS SCSparameters "SITE_DEFAULT_AUTHORNAME" PARAMS_GetS SCSparameters "SITE_DEFAULT_AUTHOREMAIL" PARAMS_GetS SCSparameters "SITE_DEFAULT_SITEDESC" PARAMS_GetS SCSparameters "SITE_DEFAULT_SITELANG" nil nil PARAMS_GetS SCSparameters "SITE_DEFAULT_SCREENSHOTFILENAME" nil ] HISTORY_Create nil nil nil nil ] -> site in ( /* parse dms file */ _DEFinit filename; set filename = _DEFget; _DOCparse; /* fill site's module tree */ set site.SITEmoduleTreeRoot = SITE_ParseModuleRoot site siteDef Channel; let SITE_GetModuleRoot site -> moduleRoot in ( SITE_SetModuleCurrentBlackBox site moduleRoot; SITE_ParseLink site moduleRoot (MODULE_GetDefBlock moduleRoot MOD_BLOCK_LINK); SITE_ParseOptions site (MODULE_GetDefBlock moduleRoot MOD_BLOCK_DEF); set site.SITEproperties = SITE_ParseProperties (MODULE_GetDefBlock moduleRoot MOD_BLOCK_PROPERTIES); SITE_ParseZoneRoot site (MODULE_GetDefBlock moduleRoot MOD_BLOCK_SERVER) SCS_SERVER; SITE_ParseZoneRoot site (MODULE_GetDefBlock moduleRoot MOD_BLOCK_CLIENT) SCS_CLIENT; SITE_ParseAssociation site moduleRoot (MODULE_GetDefBlock moduleRoot MOD_BLOCK_ZONE); ); /* return newly loaded site */ set site.SITEfilename = filename; SITE_RetrieveScolFileContent site; site ) ;; fun SITE_HasServer (site) = site.SITEservers != nil;; /**************************************************************************************** Save a site into a file Return value: Site (success) or nil (failure) The site filename become the new filename ****************************************************************************************/ fun SITE_Save (site, filename) = SCSGUI_OpenLoadingDialogBox (_locSCS "site-SAVING" nil); if filename == nil then { ERRORS_AddError 2 27 (_locSCS "errorlabel-27" nil) ; logScsError "SITE_Save" nil "filename is nil" nil } else if (_storepack "" filename) != 0 then ( ERRORS_AddError 2 44 (_locSCS "errorlabel-CANNOTSAVE" filename::nil); logScsError "SITE_Save" nil "file is read only" nil ) else let SITE_SearchByFilename filename -> oldsite in if oldsite == nil || site == oldsite then ( set site.SITEoptions.SITEversion = site.SITEoptions.SITEversion + 1; set site.SITEoptions.SITEdate = ctime time; let SITE_GetModuleRoot site -> module in ( MODULE_SetDefBlock module MOD_BLOCK_DEF SITE_GetOptionsDef site; MODULE_SetDefBlock module MOD_BLOCK_PROPERTIES SITE_GetPropertiesDef site.SITEproperties; /* update zone definitions */ MODULE_SetDefBlock module MOD_BLOCK_CLIENT SITE_GetZoneDef site.SITEclientZonesTreeRoot; MODULE_SetDefBlock module MOD_BLOCK_SERVER SITE_GetZoneDef site.SITEserverZonesTreeRoot; _DEFinit filename; set siteDef = SITE_ParseModuleDef site module; /* save dms file */ _DEFsave; if SITE_HasServer site then ( _DEFinit SITE_GetSingleName filename; SITE_ClearSatelliteServer siteDef; SITE_ForceAllServerNumber siteDef 0; _DEFsave; ) else nil ); if !strcmpi site.SITEfilename filename then nil else ( set site.SITEfilename = filename; REFLEX_SiteModified site REFLEX_NAME; SITE_AddToRecentFiles site.SITEfilename ); SITE_SaveScol site filename; if SITE_HasServer site then SITE_SaveScol site SITE_GetSingleName filename else nil; /* Clear site modification flag */ SITE_SetNotModified site; /* Report saving to history manager */ HISTORY_SetLastSaveCursor SITE_GetHistory site ; site ) else { ERRORS_AddError 2 28 (_locSCS "errorlabel-27" nil) ; logScsError "SITE_Save" nil "an opened site use the same filename ! Cannot save site !" nil }; SCSGUI_CloseLoadingDialogBox ;; /**************************************************************************************** Create a new empty site ****************************************************************************************/ fun SITE_New () = SITE_AddSite SITE_Create PARAMS_GetS SCSparameters "SITE_NAME" 4000 120 0; 0 ;; /**************************************************************************************** return site name ****************************************************************************************/ fun SITE_GetName (site) = site.SITEoptions.SITEname ;; /**************************************************************************************** Sets site name ****************************************************************************************/ proto SITE_SetName = fun [Site S I] I;; fun SITE_SetName(site, sName, addHistory) = if addHistory then HISTORY_AddCurrentSite _locSCS "site-NAME" sName::nil mkfun1 mkfun2 mkfun3 @SITE_SetName 1 site.SITEoptions.SITEname site mkfun1 mkfun2 mkfun3 @SITE_SetName 1 sName site else nil; set site.SITEoptions.SITEname = sName; MODULE_SetName site SITE_GetModuleRoot site sName 0; REFLEX_SiteModified site REFLEX_NAME ;; /**************************************************************************************** Sets site author name ****************************************************************************************/ proto SITE_SetAuthorName = fun [Site S] I;; fun SITE_SetAuthorName(site, sName) = { HISTORY_AddCurrentSite _locSCS "site-AUTHORNAME" sName::nil mkfun1 mkfun2 @SITE_SetAuthorName site.SITEoptions.SITEauthorName site mkfun1 mkfun2 @SITE_SetAuthorName sName site ; set site.SITEoptions.SITEauthorName = sName ; REFLEX_SiteModified site REFLEX_OTHER };; /**************************************************************************************** Sets site author email address ****************************************************************************************/ proto SITE_SetAuthorEmail = fun [Site S] I;; fun SITE_SetAuthorEmail(site, sEmail) = { HISTORY_AddCurrentSite _locSCS "site-AUTHOREMAIL" sEmail::nil mkfun1 mkfun2 @SITE_SetAuthorEmail site.SITEoptions.SITEauthorEmail site mkfun1 mkfun2 @SITE_SetAuthorEmail sEmail site ; set site.SITEoptions.SITEauthorEmail = sEmail ; REFLEX_SiteModified site REFLEX_OTHER };; /**************************************************************************************** Sets site description ****************************************************************************************/ proto SITE_SetSiteDescription = fun [Site S] I;; fun SITE_SetSiteDescription(site, svalue) = { HISTORY_AddCurrentSite _locSCS "site-SITEDESC" svalue::nil mkfun1 mkfun2 @SITE_SetSiteDescription site.SITEoptions.SITEdescription site mkfun1 mkfun2 @SITE_SetSiteDescription svalue site ; set site.SITEoptions.SITEdescription = svalue ; REFLEX_SiteModified site REFLEX_OTHER };; /**************************************************************************************** Sets site language ****************************************************************************************/ proto SITE_SetSiteLanguage = fun [Site S] I;; fun SITE_SetSiteLanguage(site, svalue) = { HISTORY_AddCurrentSite _locSCS "site-LANG" svalue::nil mkfun1 mkfun2 @SITE_SetSiteLanguage site.SITEoptions.SITElang site mkfun1 mkfun2 @SITE_SetSiteLanguage svalue site ; set site.SITEoptions.SITElang = svalue ; REFLEX_SiteModified site REFLEX_OTHER };; /**************************************************************************************** manage new site selection if there is no more site in list a new site is created ****************************************************************************************/ fun SITE_SelectSite () = if scs.SCSsites == nil then SITE_New else ( SELECT_NewSite hd scs.SCSsites; 0 ) ;; /**************************************************************************************** remove site from list ****************************************************************************************/ fun SITE_RemoveSite (site) = REFLEX_SiteRemoved site nil; /* MAC ICI : quel comportement de sélection ? */ set scs.SCSsites = remove_from_list scs.SCSsites site; /* MAT ICI : effectuer la destruction de tout le site */ SITE_SelectSite; 0 ;; /**************************************************************************************** Open a site using filename if site is already open then it is selected ****************************************************************************************/ fun SITE_Open (filename, Channel) = /* time consuming process */ SCSGUI_OpenLoadingDialogBox (_locSCS "menu-OPENING" filename::nil); let let SITE_SearchByFilename filename -> site in if site == nil then { let SITE_Load filename Channel -> site in if site == nil then 0 else ( SITE_AddSite site; 1 ) ; } else ( SELECT_NewSite site; 1 ) -> result in ( SCSGUI_CloseLoadingDialogBox; result ) ;; fun SITE_OnSaveUponQuittingDialogBoxClosed(comprollover, param, posx, posy, btn, mask) = { let param -> [ cont retval [site Lnext] ] in { _DScontainer cont ; _freememory; /* MAC ICI libération de ressources */ if retval == GDBOX_YES then { GUI_SaveSite site 0; 1 } else if retval == GDBOX_CANCEL then { SITE_SetQuitFlag(0) ; 0 ; } else { 0 } ; if (retval == GDBOX_CANCEL) then nil else GUI_SaveSiteIfNeededUponQuitting Lnext ; SITE_DialogBoxRefCountDec ; retval ; } ; } ;; fun SITE_OnSaveUponclosingDialogBoxClosed(comprollover, param, posx, posy, btn, mask) = { let param -> [ cont retval site ] in { _DScontainer cont ; _freememory; /* MAC ICI libération de ressources */ if retval == GDBOX_YES then { GUI_SaveSite site GUI_SAVEREMOVE; 1 } else if retval == GDBOX_NO then { SITE_RemoveSite site; 0; } else { 0; } ; SITE_DialogBoxRefCountDec ; retval ; } ; } ;; fun SITE_GetCompleteName (site) = let SITE_GetFileName site -> filename in let if filename == nil then "" else strcatn "-"::filename::"-"::nil -> filenamed in let if SITE_GetModificationState site then "(*)" else "" -> modified in strcatn "["::(SITE_GetName site)::"]"::filenamed::modified::nil ;; fun SITE_RemoveServerFromNum (site, num) = set site.SITEservers = removef_from_list site.SITEservers @SITE_SearchServerByNum num; REFLEX_SiteModified site REFLEX_SERVER ;; proto SITE_AddServer = fun [Site S S S] I;; fun SITE_AddServer (site, num, ip, port) = if (SITE_CheckServerValue num) && (SITE_CheckServerValue ip) && (SITE_CheckServerValue port) then if (search_in_list site.SITEservers @SITE_SearchServerByNum num) == nil then ( HISTORY_AddCurrentSite _locSCS "site-ADDSERVER" nil mkfun1 mkfun2 @SITE_RemoveServerFromNum num site mkfun1 mkfun2 mkfun3 mkfun4 @SITE_AddServer port ip num site; set site.SITEservers = insert_in_list site.SITEservers @SITE_CompareServers [num ip port]; REFLEX_SiteModified site REFLEX_SERVER; 1 ) else ( ERRORS_AddError 1 62 (_locSCS "errorlabel-ADDINGSERVER" nil); 0 ) else 0 ;; fun SITE_RemoveServerFromPos (site, pos) = let nth_list site.SITEservers pos -> [num ip port] in HISTORY_AddCurrentSite _locSCS "site-REMOVESERVER" nil mkfun1 mkfun2 mkfun3 mkfun4 @SITE_AddServer port ip num site mkfun1 mkfun2 @SITE_RemoveServerFromNum num site; set site.SITEservers = remove_nth_from_list site.SITEservers pos; REFLEX_SiteModified site REFLEX_SERVER; 1 ;; fun SITE_ServerPrint (server) = let server -> [num ip port] in strcatn num::" "::ip::":"::port::nil ;; fun SITE_RemovePropertieFromKey (site, key) = set site.SITEproperties = removef_from_list site.SITEproperties @SITE_SearchPropertieByKey key; REFLEX_SiteModified site REFLEX_PROPERTIE ;; proto SITE_AddPropertie = fun [Site S S] I;; fun SITE_AddPropertie (site, key, val) = if (IsEmptyString key) || (IsEmptyString val) then nil else if (search_in_list site.SITEproperties @SITE_SearchPropertieByKey key) == nil then ( HISTORY_AddCurrentSite _locSCS "site-ADDPROPERTIE" nil mkfun1 mkfun2 @SITE_RemovePropertieFromKey key site mkfun1 mkfun2 mkfun3 @SITE_AddPropertie val key site; set site.SITEproperties = insert_in_list site.SITEproperties @SITE_CompareProperties [key val]; REFLEX_SiteModified site REFLEX_PROPERTIE; 1 ) else ( ERRORS_AddError 1 64 (_locSCS "errorlabel-ADDINGPROPERTIE" nil); 0 ) ;; fun SITE_RemovePropertieFromPos (site, pos) = let nth_list site.SITEproperties pos -> [key val] in HISTORY_AddCurrentSite _locSCS "site-REMOVEPROPERTIE" nil mkfun1 mkfun2 mkfun3 @SITE_AddPropertie val key site mkfun1 mkfun2 @SITE_RemovePropertieFromKey key site; set site.SITEproperties = remove_nth_from_list site.SITEproperties pos; REFLEX_SiteModified site REFLEX_PROPERTIE; 1 ;; fun SITE_PropertiePrint (propertie) = let propertie -> [key val] in strcatn key::" : "::val::nil ;; fun SITE_GetSaveInfo (site) = [site.SITEoptions.SITEversion site.SITEoptions.SITEdate];; proto SITE_SetScolFileContent = fun [Site S] I;; fun SITE_SetScolFileContent (site, str) = HISTORY_AddCurrentSite _locSCS "site-SCOLFILECONTENT" nil mkfun1 mkfun2 @SITE_SetScolFileContent site.SITEoptions.SITEscolFileContent site mkfun1 mkfun2 @SITE_SetScolFileContent str site; set site.SITEoptions.SITEscolFileContent = str; REFLEX_SiteModified site REFLEX_OTHER; 0 ;; proto SITE_SetSatelliteScolFileContent = fun [Site S] I;; fun SITE_SetSatelliteScolFileContent (site, str) = HISTORY_AddCurrentSite _locSCS "site-SATSCOLFILECONTENT" nil mkfun1 mkfun2 @SITE_SetSatelliteScolFileContent site.SITEoptions.SITEscolFileContent site mkfun1 mkfun2 @SITE_SetSatelliteScolFileContent str site; set site.SITEoptions.SITEsatelliteScolFileContent = str; REFLEX_SiteModified site REFLEX_SATSCOLCONTENT; 0 ;; fun SITE_RunMulti (site) = apply_on_list (SITE_GetLocalSatellite site.SITEservers) @SITE_RunLocalSatellite site; let _checkpack SITE_GetScolName SITE_GetSingleName site.SITEfilename -> pack in if pack == nil then nil else _newmachineS pack (-1) 0 ;;