char *InitSys( void ) { SetupTimerData(); CScheduleInterruptTimeCallBack( &TimerData ); CurrentBaud = -1; return( NULL ); }
char *InitSys( void ) { NumTicks = 0; InitPorts(); SetupTimerData(); CScheduleInterruptTimeCallBack( &TimerData ); return( 0 ); }
const char *RemoteLink( const char *parms, bool server ) { unsigned i; _DBG_IPX(("RemoteLink\r\n")); server = server; if( *parms == '\0' ) parms = "NovLink"; for( i = 0; i < 48 && *parms != '\0'; ++parms ) { if( strchr( "/\\:;,*?+-", *parms ) == NULL ) { SAPStruct.ASServerIDpacket.serverName[ i++ ] = toupper( *parms ); } } SAPStruct.ASServerIDpacket.serverName[ i ] = '\0'; if( CIPXOpenSocketRTag( &SPXSocket, SocketTag ) != 0 || CIPXOpenSocketRTag( &IPXSocket, SocketTag ) != 0 ) { return( TRP_ERR_can_not_obtain_socket ); } _INITIPXECB( Serv ); _INITIPXECB( Resp ); RespECB.fragmentCount = 2; /* for SPXSocket - yes, SPXSocket is a long, but it always goes out on the wire as a 16-bit quantity */ RespECB.fragmentDescriptor[1].size = sizeof( WORD ); Timer.TCallBackProcedure = (void (*)(LONG))Ticker; Timer.TCallBackEBXParameter = (LONG)&Timer; Timer.TCallBackWaitTime = 0; Timer.TResourceTag = TimerTag; CScheduleInterruptTimeCallBack( &Timer ); if( FindPartner() ) { RemoteUnLink(); return( TRP_ERR_server_name_already_in_use ); } if( !InitServer() ) { RemoteUnLink(); return( TRP_ERR_can_not_initialize_server ); } return( NULL ); }
static char InitServer( void ) { ServECB.fragmentCount = 2; ServECB.fragmentDescriptor[1].address = &ServDummy; ServECB.fragmentDescriptor[1].size = sizeof( ServDummy ); ServECB.ESRAddress = &ServRespESR; CIPXListen( &ServECB ); SAPStruct.ASServerIDpacket.serverType = DBG_SERVER_TYPE; CIPXGetInternetworkAddress((BYTE*)&SAPStruct.ASServerIDpacket.serverAddress); AssignArray( SAPStruct.ASServerIDpacket.serverAddress.socket, ServECB.socketNumber ); SAPStruct.AS_ECB.ESRAddress = NULL; SAPStruct.AS_ECB.socketNumber = SAP_SOCKET_VALUE; FillArray( SAPStruct.AS_ECB.immediateAddress, '\xFF' ); SAPStruct.AS_ECB.fragmentCount = 1; SAPStruct.AS_ECB.fragmentDescriptor[0].size = sizeof( IPXHeader ) + sizeof( SAPIdPacket ); SAPStruct.AS_ECB.fragmentDescriptor[0].address = &SAPStruct.ASPacket; SAPStruct.ASPacket.packetType = 4; FillArray( SAPStruct.ASPacket.destination.network, 0 ); FillArray( SAPStruct.ASPacket.destination.node, '\xFF' ); { LONG socket; socket = SAP_SOCKET; AssignArray( SAPStruct.ASPacket.destination.socket, socket ); } SAPStruct.ASServerIDpacket.SAPPacketType = _SWAPINT( 2 ); SAPStruct.ASServerIDpacket.interveningNetworks = _SWAPINT( 1 ); CIPXSendPacket( &SAPStruct.AS_ECB ); SAPTimer.TCallBackProcedure = (void (*)(LONG))Advertiser; SAPTimer.TCallBackEBXParameter = (LONG)&SAPTimer; SAPTimer.TCallBackWaitTime = 0; SAPTimer.TResourceTag = TimerTag; CScheduleInterruptTimeCallBack( &SAPTimer ); return( 1 ); }
static void Tick( LONG dummy ) { dummy = dummy; Ticks++; CScheduleInterruptTimeCallBack( &TimerData ); }
static void __cdecl Advertiser( struct TimerDataStructure *time ) { CIPXSendPacket( &SAPStruct.AS_ECB ); time->TCallBackWaitTime = 60 * TICKS_PER_SEC; CScheduleInterruptTimeCallBack( time ); }
static void __cdecl Ticker( struct TimerDataStructure *time ) { ++Tick; time->TCallBackWaitTime = 1; CScheduleInterruptTimeCallBack( time ); }