{------------------------------------------------------------------------------ { { D D D 0 0 { D D 0 { D 0 D 0 { D 0 D 0 { D 0 D 0 { D 0 0 { D D D 0 0 ------- D0 Online Software { { { ITC Target Declaration -- TARGET.EPAS { { Purpose and Methods : Routines used to declare and undeclare an ITC { target. { { Arguments : None { Exports : ITC_Target_On { ITC_Target_Off { { Created on October 16, 1989 by John Featherly { {------------------------------------------------------------------------------ } Module Target; Include $KERNELMSG, GLOBAL, SETUP_INIT, CONNECT; Export ITC_Target_On, ITC_Target_Off; Var Target_Name : NAME; Target_Process : PROCESS; {------------------------------------------------------------------------------ { ITC_Target_On { { This routine creates the target port and name. The name is either { universal or local depending on the optional [remote] argument. The { connect server process is also created that will handle asynch connect { requests. { { Inputs: { Name - Fixed length char string by descriptor { The declared name for the target process { [Remote]- Boolean { Optional true=accept remote connects { { Output: none { {------------------------------------------------------------------------------ } Function ITC_Target_On ( Name : STRING(); Universal : [LIST] BOOLEAN ) : INTEGER; Function Clean_Target_Name : BOOLEAN; Const Up_Alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; Low_Alpha = 'abcdefghijklmnopqrstuvwxyz'; Var Mark : INTEGER; Begin Clean_Target_Name := True; { Assume success } Mark := Find_NonMember(Name,[' ',''(9)]); If Mark<>0 Then Begin Target_Name_String := Substr(Name,Mark); Mark := Find_Member(Target_Name_String,[' ',''(9)]); If Mark<>0 Then Target_Name_String := Substr(Target_Name_String,1,Mark-1); Target_Name_String := Translate_String( Target_Name_String, Up_Alpha, oldchars := Low_Alpha) End Else Clean_Target_Name := False End { Procedure Clean Target Name }; Var Status : INTEGER; {-------------------------------- { ITC_Target_On -- Main Section {-------------------------------- } Begin ITC_Target_On := ITC__Success; { Assume success } If not Init Then ITC_Init; If not Port_Listner_Started Then ITC_Start_Port_Listner; If n>MaxLen_TargNam Then ITC_Target_On := ITC__TarNamTrunc; If not Clean_Target_Name Then ITC_Target_On := ITC__Bad_Arg Else Begin Create_Port(Target_Port); If ARGUMENT_LIST_LENGTH(Universal) > 0 Then Create_Name ( Target_Name, Target_Name_String, Target_Port, TABLE := NAME$UNIVERSAL, STATUS := Status) Else Create_Name ( Target_Name, Target_Name_String, Target_Port, TABLE := NAME$LOCAL, STATUS := Status); { If Status=KER$_Success Then ITC_Target_On := ITC__Success } { replace above with complete check of status returned } Create_Process ( Target_Process, ITC_Connect_Server, STATUS := Status ); Set_Process_Priority ( Target_Process, 7, STATUS := Status ) { If we are priority 8, then 7 is one higher (priority)} End { Else clause } End { ITC Target On }; {------------------------------------------------------------------------------ { ITC_Target_Off { { Turns of availability of the process to accept connect requests. { No existing connections are broken, they must be canceled with a call { to ITC_DISCONNECT. { { Inputs: none { { Output: none { {------------------------------------------------------------------------------ } Function ITC_Target_Off : INTEGER; Var Status : INTEGER; Begin Delete ( Target_Process, STATUS := Status ); Delete ( Target_Name, STATUS := Status ); Delete ( Target_Port, STATUS := Status ); ITC_Target_Off := ITC__Success End { ITC Target Off }; End { Module Target }.