home *** CD-ROM | disk | FTP | other *** search
- ;
- ;
- ; (c) 1999 Cyborg
-
- {* Include sys:coder/preass/Options.p *}
-
- {* String: Version="$VER: ATalk Net Client (C) CYBORG 1999"*}
-
- {* Structure sockaddr_in(),sin_len(BYTE),sin_family(BYTE),sin_port(WORD)
- sin_addr(LONG),DUMMY1(LONG),DUMMY2(LONG)*}
-
- {* Structure Sockaddr(),SA_Len(BYTE),SA_Family(BYTE)
- SA_Data[14]*}
-
- {* Structure Hostent,H_name(CHAR),h_aliases(APTR),h_addrtype(LONG)
- h_length(LONG),H_addr_list(CHAR)*}
-
- {* IncBlock: Puffer,2048*}
-
- {* Const AF_INET=2
- Sock_STREAM=1
- FIONBIO=$8004667e*}
-
- {* incVar: Addr*}
-
- {* Structure Node,ln_Succ(LONG),ln_pred(LONG),ln_Type(BYTE),ln_Pri(BYTE)
- ln_Name(LONG)*}
-
- {* Structure MsgList,LH_Head(LONG),LH_Tail(LONG),LH_TailPred(LONG),LH_Type(BYTE)
- pad(BYTE)*}
-
- {* Structure MsgPort,Node(STRUCT Node),mp_Flags(BYTE),mp_sigbit(BYTE)
- mp_sigTask(LONG),List(STRUCT MsgList)*}
-
- {* Structure Message,Node(STRUCT Node),Replyport(APTR),Length(WORD)*}
-
- {* Structure Window,NextWindow(APTR),LeftEdge(WORD),TopEdge(WORD),Width(WORD)
- Height(WORD),MouseY(WORD),MouseX(WORD),MinWidth(WORD),MinHeight(WORD)
- MaxWidth(WORD),MaxHeight(WORD),Flags(LONG),MenuStrip(APTR),Title(APTR)
- FirstRequest(APTR),DMRequest(APTR),ReqCount(WORD),WScreen(APTR)
- RPort(APTR),BorderLeft(BYTE),BorderTop(BYTE),BorderRight(BYTE)
- BorderBottom(BYTE),BorderRPort(APTR),FirstGadget(APTR),Parent(APTR)
- Descendant(APTR),Pointer(APTR),PtrHeight(BYTE),PtrWidth(BYTE),XOffset(BYTE)
- YOffset(BYTE),IDCMPFlags(LONG),UserPort(APTR),WindowPort(APTR)
- MessageKey(APTR),DetailPen(BYTE),BlockPen(BYTE),CheckMark(APTR)
- ScreenTitle(APTR),GZZMouseX(WORD),GZZMouseY(WORD),GZZWidth(WORD)
- GZZHeight(WORD),ExtData(APTR),UserData(APTR),WLayer(APTR),IFont(APTR)
- MoreFlags(LONG)*}
-
- {* incSysBlock: Windowname,200*}
- {* incSysBlock: Eingabepuffer,500*}
- {* incSysBlock: namepuffer,20*}
-
- {* NewProc=CountString[String][A0]*}
- {* NewProc=Fillbuffer[][A0,d0,d1]*}
- {* NewProc=MatchString[][A0,A1]*}
- {* NewProc=getFilename[][]*}
- {* NewProc=ASC2Zahl[][a5]*}
-
-
- recv[d0,d1,d2,d3]:
- {* Stackframe Socket=d0,Zeiger=d1,Laenge=d2,time=d3,Readlen*}
- While Time>0
- {
- Readlen=TCP_recv(Socket,Zeiger,Laenge,0)
- If Readlen>0 breakwhile
- Time==Time-25
- Delay(25)
- }
- {* UnFrameReturn Readlen*}
-
- CopyNextString[a0,a3]:
- cmpi.l #0,laenge
- beq .l13
- cmpi.l #1,laenge
- beq .l13
- suba.l a2,a2
- suba.l a1,a1
- .l1: cmpi.b #`"`,(a0)
- beq .l10
- cmpi.b #` `,(a0)+
- beq .l1
- lea -1(a0),a1
- .l2: cmpi.b #`"`,(a0)
- beq .l11
- cmpi.b #$0a,(a0)
- beq .l12
- cmpi.b #$00,(a0)
- beq .l12
- cmpi.b #` `,(a0)+
- bne .l2
- Lea -1(a0),a2
- .l3: suba.l a1,a2
- move.l A0,NextArg
- Copymem(a1,a3,a2)
- Move.l a2,d0
- rts
- .l10: lea 1(a0),a1
- movea.l a1,a0
- bra .l22
- .l11: move.l a0,a2
- bra .l3
- .l12: move.l a0,a2
- bra .l3
- .l13: moveq.l #0,d0
- RTS
- .l22: cmpi.b #`"`,(a0)
- beq .l11
- cmpi.b #$0a,(a0)
- beq .l12
- cmpi.b #$00,(a0)
- beq .l12
- lea 1(a0),a0
- bne .l22
-
- {* IncBlock: Hostname1,50*}
- {* IncBlock: Hostname2,50*}
- {* IncBlock: Port1asc,10*}
- {* IncBlock: Port2asc,10*}
- {* IncBlock: Message,100*}
-
-
- TCP_Write[d0,a0,d1,d2]:
- {* StackFrame wr,Socket=d0,msg=a0,MsgLen=d1,flags=d2*}
- While (Wr=TCP_Send(Socket,msg,msglen,flags))#msglen
- {
- Msg==Msg+Wr
- Msglen==MsgLen-Wr
- }
- {* UnFrameReturn *}
-
-
- KPA[]:
- TCP_Write(Socket1,"KPA",3,0)
- TCP_Write(Socket2,"KPA",3,0)
- {* Return *}
-
- GetSigs[]:
- Signals=SetSignal(0,0)
- Signals==Signals$F000
- {* Return Signals*}
-
- {* String: Options="localhost localhost "*}
-
- Start:
- OH=output()
- MeineNummer1==#":"
- MeineNummer2==#":"
- ; Adresse==#Options
- ; Laenge=Countstring(&Options)
- If CopyNextString(Adresse,&Hostname1)=0
- {
- Write(OH,"Kein Hostname angegeben\n",?)
- {* Return 5*}
- }
- If CopyNextString(NextArg,&Hostname2)=0
- {
- Write(OH,"Keinen 2.Hostnamen angegeben\n",?)
- {* Return 5*}
- }
- ; If CopyNextString(NextArg,&Port1asc)#0
- ; {
- ; CopynextString(NextArg,&Port2asc)
- ; }
- If (socket1=TCP_Socket(AF_INET,SOCK_STREAM,0))=-1
- {
- TCP_Errno()
- TCP_vsyslog(7,"ATALK-Client V2 konnte Socket nicht öffnen :%m\n",0)
- {* Return 10*}
- }
- If (socket2=TCP_Socket(AF_INET,SOCK_STREAM,0))=-1
- {
- TCP_Errno()
- TCP_vsyslog(7,"ATALK-Client V2 konnte Socket nicht öffnen :%m\n",0)
- TCP_CloseSocket(Socket1)
- {* Return 10*}
- }
- If (he=TCP_gethostbyname(&Hostname1))=0
- {
- TCP_Errno()
- TCP_vsyslog(7,"ATALK-Client V2 :%m\n",0)
- TCP_CloseSocket(Socket1)
- TCP_CloseSocket(Socket2)
- {* Return 20*}
- }
- #AF_Inet=>sockaddr_in.sin_family
- Zeiger=.lhostent.H_addr_list(he)
- addr==(Zeiger)
- addr==(Addr)
- addr=>sockaddr_in.sin_addr
- #518=>sockaddr_in.sin_port
- If Port1asc#0
- {
- Port1=Asc2zahl(&Port1asc)
- Port1=>sockaddr_in.sin_port
- }
- ret=TCP_Connect(Socket1,&Sockaddr_in,sizeof(sockaddr_in))
- If ret=-1
- {
- TCP_Errno()
- TCP_vsyslog(7,"ATALK-Client V2 kein Connect 1:%m\n",0)
- TCP_CloseSocket(Socket1)
- TCP_CloseSocket(Socket2)
- {* Return 20*}
- }
- If (he=TCP_gethostbyname(&Hostname2))=0
- {
- TCP_Errno()
- TCP_vsyslog(7,"ATALK-Client V2 :%m\n",0)
- TCP_CloseSocket(Socket1)
- TCP_CloseSocket(Socket2)
- {* Return 20*}
- }
-
- #AF_Inet=>sockaddr_in.sin_family
- Zeiger=.lhostent.H_addr_list(he)
- addr==(Zeiger)
- addr==(Addr)
- addr=>sockaddr_in.sin_addr
- #518=>sockaddr_in.sin_port
- If Port2asc#0
- {
- Port2=Asc2zahl(&Port2asc)
- Port2=>sockaddr_in.sin_port
- }
- ret=TCP_Connect(Socket2,&Sockaddr_in,sizeof(sockaddr_in))
- If ret=-1
- {
- TCP_Errno()
- TCP_vsyslog(7,"ATALK-Client V2 kein Connect 2:%m\n",0)
- TCP_CloseSocket(Socket1)
- TCP_CloseSocket(Socket2)
- {* Return 20*}
- }
- If TCP_IoCtlSocket(Socket1,FIONBIO,1)=-1
- {
- TCP_Errno()
- TCP_vsyslog(5,"Atalk-Client V2 konnte nicht auf NON-BLOCKING schalten : %m\n",0)
- TCP_Closesocket(Socket1)
- TCP_Closesocket(Socket2)
- {* Return 30*}
- }
- If TCP_IoCtlSocket(Socket2,FIONBIO,1)=-1
- {
- TCP_Errno()
- TCP_vsyslog(5,"Atalk-Client V2 konnte nicht auf NON-BLOCKING schalten : %m\n",0)
- TCP_Closesocket(Socket1)
- TCP_Closesocket(Socket2)
- {* Return 30*}
- }
- Fillbuffer(&Puffer,0,10)
- ; KPA()
- Readlen=recv(Socket1,&Puffer,9,500)
- If readlen=-1
- {
- TCP_Errno()
- TCP_vsyslog(7,"ATALK-Client V2 - Server does not respond: %m\n",0)
- TCP_CloseSocket(Socket1)
- TCP_CloseSocket(Socket2)
- {* Return 40*}
- }
- If Matchstring(&Puffer,"AMIGATALK")#1
- {
- TCP_Errno()
- TCP_vsyslog(7,"ATALK-Client V2 - falscher Servertype: %m\n",0)
- TCP_CloseSocket(Socket1)
- TCP_CloseSocket(Socket2)
- {* Return 40*}
- }
- ; KPA()
- Readlen=recv(Socket2,&Puffer,9,500)
- If readlen=-1
- {
- TCP_Errno()
- TCP_vsyslog(7,"ATALK-Client V2 - Server does not respond: %m\n",0)
- TCP_CloseSocket(Socket1)
- TCP_CloseSocket(Socket2)
- {* Return 40*}
- }
- If Matchstring(&Puffer,"AMIGATALK")#1
- {
- TCP_Errno()
- TCP_vsyslog(7,"ATALK-Client V2 - falscher Servertype: %m\n",0)
- TCP_CloseSocket(Socket1)
- TCP_CloseSocket(Socket2)
- {* Return 40*}
- }
- ; KPA()
- recv(Socket1,&MeineNummer1,3,500)
- ; KPA()
- recv(Socket2,&MeineNummer2,3,500)
- TCP_Write(Socket1,"Netc",4,0)
- TCP_Write(Socket2,"Netc",4,0)
- Fillbuffer(&Puffer,0,1024)
- While GetSigs()=0
- {
- KPA()
- If (Rl=Recv(Socket1,&Puffer,1024,50))>0
- {
- If Puffer#MeineNummer1
- {
- Message=="von "+Hostname1+" kommt:\n"
- Bytes=Countstring(&Message)
- TCP_Write(Socket2,&MeineNummer2,4,0)
- TCP_Write(Socket2,&Message,Bytes,0)
- TCP_Write(Socket2,&Puffer,rl,0)
- Fillbuffer(&Puffer,0,1024)
- }
- }
- If (Rl=Recv(Socket2,&Puffer,1024,50))>0
- {
- If Puffer#MeineNummer2
- {
- Message=="von "+Hostname2+" kommt:\n"
- Bytes=Countstring(&Message)
- TCP_Write(Socket1,&MeineNummer1,4,0)
- TCP_Write(Socket1,&Message,Bytes,0)
- TCP_Write(Socket1,&Puffer,rl,0)
- Fillbuffer(&Puffer,0,1024)
- }
- }
- }
- TCP_CloseSocket(Socket1)
- TCP_CloseSocket(Socket2)
- TCP_vsyslog(7,"ATALK-Client V2 beendet sich.\n",0)
- {* Return *}
-
- CountString:
- move.l a1,-(Sp)
- move.l a0,a1
- .l1: cmpi.b #$00,(a1)+
- bne .l1
- lea -1(a1),a1
- sub.l a0,a1
- move.l a1,d0
- move.l (sp)+,a1
- RTS
-
-
- FillBuffer:
- subq.l #1,d1
- .l1:move.b d0,(a0)+
- dbra d1,.l1
- RTS
-
- Matchstring:
- cmpi.b #0,(a0)
- beq .error1
- cmpi.b #0,(a1)
- beq .error
- move.b (a0)+,d0
- move.b (a1)+,d1
- bset #5,d0
- bset #5,d1
- cmp.b d0,d1
- beq MatchString
- bra.s .ende1
- .ok:moveq.l #1,d0
- rts
- .error:
- cmpi.b #0,(a0)
- beq .ok
- cmpi.b #$a,(a0)
- beq .ok
- bra.s .ende1
- .error1:
- cmpi.b #0,(a1)
- beq .ok
- cmpi.b #$a,(a1)
- beq .ok
- .ende1:
- moveq.l #0,d0
- RTS
-
-
- GetFilename:
- {* IncBlock: Filename,256*}
- {* IncVar: NextArg*}
- cmpi.l #0,laenge
- beq .l13
- cmpi.l #1,laenge
- beq .l13
- suba.l a2,a2
- suba.l a1,a1
- Move.l Adresse,a0
- .l1: cmpi.b #`"`,(a0)
- beq .l10
- cmpi.b #` `,(a0)+
- beq .l1
- lea -1(a0),a1
- .l2: cmpi.b #`"`,(a0)
- beq .l11
- cmpi.b #$0a,(a0)
- beq .l12
- cmpi.b #$00,(a0)
- beq .l12
- cmpi.b #` `,(a0)+
- bne .l2
- Lea -1(a0),a2
- .l3: suba.l a1,a2
- move.l A0,NextArg
- Copymem(a1,#Filename,a2)
- Move.l a2,d0
- rts
- .l10: lea 1(a0),a1
- movea.l a1,a0
- bra .l22
- .l11: move.l a0,a2
- bra .l3
- .l12: move.l a0,a2
- bra .l3
- .l13: moveq.l #0,d0
- RTS
- .l22: cmpi.b #`"`,(a0)
- beq .l11
- cmpi.b #$0a,(a0)
- beq .l12
- cmpi.b #$00,(a0)
- beq .l12
- lea 1(a0),a0
- bne .l22
-
-
- CountString2[a0]:
- move.l a1,-(Sp)
- move.l a0,a1
- .l1: cmpi.b #$0a,(a1)
- beq .l2
- cmpi.b #",",(a1)
- beq .l2
- cmpi.b #" ",(a1)
- beq .l2
- cmpi.b #$00,(a1)+
- bne .l1
- lea -1(a1),a1
- .l2: sub.l a0,a1
- move.l a1,d0
- move.l (sp)+,a1
- RTS
-
- ASC2Zahl[a5]:
- {* IncVar: Potenz*}
- Countstring2(a5)
- move.l d0,d7
- subq.l #2,d7
- move.l #1,d0
- cmpi.w #$FFFF,d7
- beq .la
- .l0:mulu.l #10,d0
- dbra d7,.l0
- .la:move.l d0,d6
- moveq.l #0,d1
- move.l a5,a0
- move.b #"+",d5
- .l1:moveq.l #0,d0
- move.b (A0)+,d0
- cmpi.b #"-",d0
- bne .l2
- move.b d0,d5
- Divs.l #10,d6
- bra .l1
- .l2:subi.b #$30,d0
- andi.l #$FF,d0
- Muls.l d6,d0
- divs.l #10,d6
- add.l d0,d1
- cmpi.l #0,d6
- bne .l1
- lea 1(a0),a0
- ; move.l a0,NextArg
- move.l d1,d0
- cmpi.b #"+",d5
- beq .l3
- neg.l d0
- .l3:RTS
-