; NNTPSend - sends YAM-Messages to given newsserver
; 
; (c) 2000 Cyborg 

    {* Include sys:coder/preass/Options.p *}

    {* String: Version="$VER: NNTPSend 0.7b (C) CYBORG 2000"*}

    {* 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
             Loop=0
             Dont_Loop=1*}

    {* incVar: Addr,Zeiger,Var,SizeinBytes,Socket*}

    {* IncBlock: Zeile1,80*}
    {* IncBlock: Zeile2,80*}
    {* IncBlock: Zeile3,80*}
    {* IncBlock: Zeile4,80*}
    {* IncBlock: Zeile5,80*}
    {* IncBlock: Zeile6,80*}
    {* IncBlock: Zeile7,80*}
    {* IncBlock: Hostname1,50*}
    {* IncBlock: Renamebuffer,200*}

    {* IncBlock: Filename,256*}
    {* IncBlock: Filename_solo,250*}
    {* Incblock: From,100*}
    {* IncVar: NextArg,PostingLen*}

    {* NewProc=CountString[String][A0]*}
    {* NewProc=Fillbuffer[][A0,d0,d1]*}
    {* NewProc=MatchString[][A0,A1]*}
    {* NewProc=GleichString[][A0,A1,D2]*}
    {* NewProc=ConvertZahl[Zahl,Handle][D7,D6]*}

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
        suba.l a1,a2
        lea 2(a0),a0
        move.l A0,NextArg
        {* Flush *}
        Copymem(a1,a3,a2)
        Move.l a2,d0
        rts
.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

WriteOLF[d0,a0,d1]:
    {* IncBlock: Writelinebuffer,1026*}
    {* Stackframe fh=d0,msg=a0,MsgLen=d1*}
    Fillbuffer(&Writelinebuffer,0,1026)
    Copymem(msg,&Writelinebuffer,msglen)
    Lea Writelinebuffer,a0
.l1:cmpi.b #$00,(a0)
    beq .ende
    cmpi.b #$0d,(a0)
    bne .l2
.l3:move.b #$20,(a0)
.l2:lea 1(a0),a0
    bra .l1
.ende:
    Write(FH,&Writelinebuffer,msglen)
    {* UnFrameReturn *}


TCP_Write[d0,a0,d1,d2]:
    {* StackFrame wr,Socket=d0,msg=a0,MsgLen=d1,flags=d2*}
    WriteOLF(NSFH,msg,Msglen)
    While (Wr=TCP_Send(Socket,msg,msglen,flags))#msglen
      {
        Msg==Msg+Wr
        Msglen==MsgLen-Wr
      }
    {* UnFrameReturn *}

Out[a0]:
    {* StackFrame Bytes=#0,Zeiger=a0*}
    Bytes=Countstring(Zeiger)
    Write(oh,Zeiger,Bytes)
    {* UnFrameReturn *}

Ersetze[a0,d0,d1,d2]:
    cmpi.b (a0),d0
    beq.s .l1
    cmpi.b #$00,(a0)+
    bne.s Ersetze
    lea -1(a0),a0
.l2:move.l a0,d0
    RTS
.l1:move.b d1,(a0)
    tst.l d2
    bne.s .l2
    bra.s Ersetze
    

NSWrite[a0]:
    {* StackFrame Bytes=#0,Zeiger=a0*}
    Ersetze(Zeiger,13,32,Loop)
    Bytes=Countstring(Zeiger)
    Write(NSFH,Zeiger,Bytes)
    {* UnFrameReturn *}

ErsetzeMsgID[a0]:
    {* Stackframe Zeiger=a0,Byte=#0,len*}
    While Byte##`@` 
     {
       Byte=.b0(Zeiger)
       Zeiger==Zeiger+1
     }
    Len=countstring(&Hostname1)
    Copymem(&Hostname1,Zeiger,len)
    Copymem(">\$0a\$00",Zeiger+Len,?)
    {* UnFrameReturn *}

KillKlammerzu[a0]:
    cmpi.b #">",(a0)
    bne .l1
    move.b #$0,(a0)
    rts
.l1:cmpi.b #$0,(a0)+
    bne KillKlammerzu
    rts

Killcr[a0]:
    cmpi.b #$0d,(a0)
    bne .l1
    move.w #$0a00,(a0)
    move.l a0,d0
    rts
.l1:cmpi.b #$0,(a0)+
    bne Killcr
    lea -1(a0),a0
    move.l a0,d0
    rts
    
GetReference[a0,a1]:
    {* IncBlock: LetzteZeile,100*}
    {* IncBlock: YAMDirname,500*}
    {* IncBlock: Refline,200*}
    {* Incblock: ActualRef,200*}
    {* StackFrame Newsgroup=a0,Ref=a1,Zeiger=a1,FH=#0,Res,Mem,MemLen,Actualreflen*}
    If (FH=open("YAM:.folders",Mode_old))#0
     {
       While FGets(FH,&Puffer,200)#0
        {
          If (Res=Gleichstring("@FOLDER ",&Puffer,0))#0
           {
            Copymem(&Puffer+8,&LetzteZeile,100)
            Fgets(FH,&Puffer,200)
            If Gleichstring(Newsgroup,&Puffer,#`@`)#0
             {
               Copymem(&Refline,&ActualRef,200)
               ActualReflen=Countstring(&ActualRef)
               FillBuffer(&YAMDIRNAME,0,500)
               Copymem("YAM:NNTP-HEADERS/",&YAMDIRNAME,?)
               CopyNextString(&LetzteZeile,&YamDirname+17)
               res=.b0(#Refline)
               If Res=#"<"
                {
                  Copymem("p",#Refline,1)
                }
               KillKlammerzu(#Refline)
               AddPart(&YamDirname,#Refline,500)
               Close(FH)
               If (FH=Open(&YamDirname,mode_old))=0
                {
                 {* UnFrameReturn *}
                }
               While Fgets(FH,&Puffer,200)#0
                {
                 If (Res=Gleichstring("References:",&Puffer,0))#0
                  {
                    Copymem(&Puffer+12,zeiger,400)
                    Res=KillCR(Zeiger)
                    Copymem(" ",res,1)    
                    Copymem(&ActualRef,res+1,actualreflen)
                    Copymem("\$00",res+1+actualreflen,1)
                    Flush(FH)
                    Seek(FH,0,Offset_end)
                  }
                }
               Close(FH)
               {* UnFrameReturn *}
             }
           }
        }
       Close(FH)
      }
    {* UnFrameReturn *}


Klammerzu[a0]:
    cmpi.b #">",(a0)
    bne .l1
    move.w #$2000,1(a0)
    move.l a0,d0
    rts
.l1:cmpi.b #$0,(a0)+
    bne Klammerzu
    moveq.l #0,d0
    rts

Korrektline[a0]:
    cmpi.b #$00,(a0)+
    bne Korrektline
    cmpi.b #$0a,-2(a0)
    beq .ende
    move.w #$0a00,-1(a0)
.ende:
    rts

LastChar[a0]:
    cmpi.b #$00,(a0)+
    bne LastChar
    lea -3(a0),a0
    cmpi.b #",",(a0)
    bne .error
    lea 1(a0),a0
    move.l a0,d0
    rts
.error:
    moveq.l #0,d0
    rts

MultiCastNews[a0,d6]:
    move.l a0,a1
    moveq.l #0,d7
.l0:cmpi.b #"@",(a1)
    beq .l1
    cmpi.b #$00,(a1)+
    bne .l0
.l2:cmpi.l d6,d7
    beq .ende
    subq.l #1,d7
.l3:cmpi.b #$09,(a0)
    bne .l00

    lea 0(a0),a1
    lea 1(a1),a2
.l5:move.b (a2)+,d0
    move.b d0,(a1)+
    cmpi.b #0,d0
    bne .l5
.l00:
    cmpi.b #"@",(a0)+
    bne .l3
    lea -1(a0),a1
    lea 5(a1),a2
.l4:move.b (a2)+,d0
    move.b d0,(a1)+
    cmpi.b #0,d0
    bne .l4
    lea -5(a0),a0
    dbra d7,.l3
.ende:
    rts
.l1:addq.l #1,d7
    lea 1(a1),a1
    bra.w .l0

LineTest[a0,d0]:
    {* StackFrame Zeiger=a0,Type=#0,len,pos,Filehandle=d0*}
    Type=.l0(Zeiger)
    If Type=#$546f3a20
     {
      Fillbuffer(&Puffer,0,2048)
      Zeiger==Zeiger+4
      Copymem("Newsgroups: ",&puffer,?)
      Len=Countstring(Zeiger)
      Copymem(zeiger,&Puffer+12,len)
      Zeiger==#Puffer
      While (Zeiger=LastChar(Zeiger))#0
       {
        Fgets(Filehandle,Zeiger,512)
        Len=Countstring(Zeiger)       
        Postinglen==Postinglen-LEN
       }
      MultiCastnews(&Puffer,0)
      Len=Countstring(&Puffer)
      TCP_Write(Socket,&Puffer,Len,0)
      {* UnFrameReturn 0*}
     }
    If Type=#`From`
     {
      If FromOption=1
       {
        Len=Countstring(&From)
        Copymem(&From,Zeiger+6,Len)
        Copymem("\$0a\$00",Zeiger+6+len,2)
       }
     }
    If Type=#`In-R`
     {
      Copymem("References: ",Zeiger,?)
      If Reference=1 
       {
        Copymem(Zeiger+13,&Refline,200)
        Pos=Klammerzu(Zeiger+13)
        GetReference(&Zeile4,zeiger+13)
        KorrektLine(Zeiger)
       }
     }
    If Type=#`Repl`
     {
      len=countstring(Zeiger)
      Copymem("     ",Zeiger+Len-5,5)
     }
    If Type=#`Mess` 
     {
      If MessageID=0 
        {
          {* UnFrameReturn 0*}
        }
      ErsetzeMsgid(Zeiger)
     }
    {* UnFrameReturn -1*}    

TCP_Sendfile[a0]:
    {* StackFrame Filehandle=#0,Name=a0,Puffer1,Rl,Var,Res*}
    IF (Puffer1=Allocmem(512,#MEMF_Fast))=0
     {
      Out("NNTPSend hat keinen Speicher mehr.\n")
      {* UnframeReturn 0*}
     }
    If (Filehandle=Open(Name,Mode_old))=0
     {
      Freemem(Puffer1,512)
      Out("NNTPSend kann file nicht oeffnen.\n")
      {* UnframeReturn 0*}
     }
    Seek(Filehandle,0,offset_end)
    PostingLen=Seek(Filehandle,0,offset_begin)
    Res==0
    TCP_Write(Socket,"POST\$0D\$0A",?,0)
    Out("POST\n")
    Readlen=recv(Socket,Puffer1,500,500)
    Var=.l0(Puffer1)
    Out("Bytes to send: ")
    Convertzahl(PostingLen,OH)
    Out("\$9b8\$44")
    NSWrite("Bytes to send:")
    Convertzahl(PostingLen,NSFH)
    NSWrite("\n")
;    MulticastNews(&Zeile4,1)
    If var=#$33343020
     {
      Res==PostingLen
;      TCP_Write(Socket,"Newsgroups: ",?,0)
;      TCP_Write(Socket,&Zeile4,Zeiger-1-#Zeile4,0)
;      TCP_Write(Socket,"\$0a",1,0)
      TCP_Write(Socket,"X-NNTP-Mailer: NNTPSend 0.7b (Kapstadt)\$0a",?,0)
      While PostingLen>0
       {
         FillBuffer(Puffer1,0,512)
         Fgets(Filehandle,Puffer1,512)
         Rl=Countstring(Puffer1)
         PostingLen==PostingLen-RL
         If LineTest(Puffer1,Filehandle)#0
          {
           Rl=Countstring(Puffer1)
           TCP_Write(Socket,Puffer1,rl,0)
          }
         Convertzahl(PostingLen,OH)
         Out("\$9b8\$44")
       }
      TCP_Write(Socket,"\$0d\$0a.\$0d\$0a",5,0)
      Out("\n")
     }
    Fillbuffer(Puffer1,0,512)
    Readlen=recv(Socket,Puffer1,512,500)
    Out(Puffer1)
    NSWrite(Puffer1)
    Close(Filehandle)
    Option=.l0(Puffer1)
    If Option##$32343020 
     {
      Res==0
      NSWrite("Posting not delivered ! Check you posting and try again !\n")
     }
    Freemem(Puffer1,512)
    {* UnFrameReturn Res*}

GetSigs[]:
    Signals=SetSignal(0,0)
    Signals==Signals&#$F000
    {* Return Signals*}
    
 {* String: Options="-f <c0033020@tu-bs.de> -m -r news.tu-bs.de"*}

Start:
    OH=output()
;    Adresse==#Options
;    Laenge=Countstring(&Options)
    If (WH=Open("YAM:NNTPsend.count",Mode_old))=0
     {
      If (WH=Open("YAM:NNTPsend.count",Mode_New))=0
       {
        Out("NNTPSend konnte YAM:NNTPsend.count nicht öffnen.\n")
        {* Return 5*}
       }
      NNTPCount==1
     }  
    Read(WH,&NNTPCount,4)
    Close(WH)
    If (NSFH=Open("YAM:NNTPsend.sendmails",Mode_old))=0
     {
      If (NSFH=Open("YAM:NNTPsend.sendmails",Mode_New))=0
       {
        Out("NNTPSend konnte YAM:NNTPsend.sendmails nicht öffnen.\n")
        {* Return 5*}
       }
     }  
    Seek(NSFH,0,#offset_end)
    MessageID==1
    While MessageID=MessageID
     {
       Option=.w0(Adresse)
       If Option=#`-m`
        {
          MessageID==0
          Adresse==adresse+3
          {* unCase *}
        }
       If Option=#`-r`
        {
          Reference==1
          Adresse==adresse+3
          {* unCase *}
        }
       If Option=#`-f`
        {
          fromOption==1
          Adresse==Adresse+3
          CopyNextString(Adresse,&From)
          Adresse==NextArg
          {* unCase *}
        }
       If Option=#`-i`
        {
          FileOption==1
          Adresse==Adresse+3
          CopyNextString(Adresse,&Filename_solo)
          Adresse==NextArg
          {* unCase *}
        }
       If Option=#`-n`
        {
          Adresse==Adresse+3
          CopyNextString(Adresse,&Zeile4)
          Adresse==NextArg
          {* unCase *}
        }
       {* Break *}
     }
    If CopyNextString(Adresse,&Hostname1)=0 
     {
       Write(OH,"Kein Hostname angegeben\n",?)
       If NSFH#0
        {   
          Close(NSFH)
        }
       {* Return 5*}
     }
    If (Socket=TCP_Socket(AF_INET,SOCK_STREAM,0))=-1
     {
      TCP_Errno()
      TCP_vsyslog(7,"NNTPSend konnte Socket nicht öffnen :%m\n",0)
       If NSFH#0
        {   
          Close(NSFH)
        }
      {* Return 10*}
     }
    If (he=TCP_gethostbyname(&Hostname1))=0
     {
      TCP_Errno()
      TCP_vsyslog(7,"NNTPSend :%m\n",0)
      TCP_CloseSocket(Socket)
       If NSFH#0
        {   
          Close(NSFH)
        }
      {* Return 20*}
     }
    #AF_Inet=>sockaddr_in.sin_family
    Zeiger=.lhostent.H_addr_list(he)
    addr==(Zeiger)
    addr==(Addr)
    addr=>sockaddr_in.sin_addr
    #119=>sockaddr_in.sin_port
    ret=TCP_Connect(Socket,&Sockaddr_in,sizeof(sockaddr_in))
    If ret=-1
     {
      TCP_Errno()
      TCP_vsyslog(7,"NNTPSend kein Connect 1:%m\n",0)
      TCP_CloseSocket(Socket)
       If NSFH#0
        {   
          Close(NSFH)
        }
      {* Return 20*}
     }
    If TCP_IoCtlSocket(Socket,FIONBIO,1)=-1
     {
      TCP_Errno()
      TCP_vsyslog(5,"NNTPSend konnte nicht auf NON-BLOCKING schalten : %m\n",0)
      TCP_Closesocket(Socket)
       If NSFH#0
        {   
          Close(NSFH)
        }
      {* Return 30*}
     }
    Fillbuffer(&Puffer,0,500)
    Readlen=recv(Socket,&Puffer,500,500)
    If readlen=-1 
     {
      TCP_Errno()
      TCP_vsyslog(7,"NNTPSend - Server does not respond: %m\n",0)
      TCP_CloseSocket(Socket)
       If NSFH#0
        {   
          Close(NSFH)
        }
      {* Return 40*}
     }  
    Out(&Puffer)
    If Puffer##$32303020
     {
      TCP_Errno()
      TCP_CloseSocket(Socket)
       If NSFH#0
        {   
          Close(NSFH)
        }
     {* Return 40*}
     }      
    Fillbuffer(&Puffer,0,1024)
    If Fileoption=1
     {
      TCP_Sendfile(&Filename_solo)
      TCP_CloseSocket(Socket)
      If NSFH#0
       {   
         Close(NSFH)
       }
      Out("NNTPSend beendet sich.\n")
     {* Return *}
    }
    If (Filehandle=Open("YAM:Outgoing/.index",#Mode_old))#0
     {
       {* incVar: Kennung,Kennung1,Kennung2,Mails,Bytes*}
       If (WH=Open("YAM:Outgoing/.newindex",#Mode_new))#0
        {
          FRead(Filehandle,&Kennung,4,1)
          FWrite(WH,&Kennung,4,1)
          FRead(Filehandle,&Mails,4,1)
          FWrite(WH,&Mails,4,1)
          FRead(Filehandle,&Puffer,8,1)
          FWrite(WH,&Puffer,8,1)
          FRead(Filehandle,&SizeinBytes,4,1)
          FWrite(WH,&SizeinBytes,4,1)
          FRead(Filehandle,&Kennung1,4,1)
          FWrite(WH,&Kennung1,4,1)
          FRead(Filehandle,&Kennung2,4,1)
          FWrite(WH,&Kennung2,4,1)
          FRead(Filehandle,&Puffer,4,1)
          FWrite(WH,&Puffer,4,1)
          NewMails==Mails
          NewSizeinBytes==SizeInBytes
          If Mails#0 
           {
            For I=1 to Mails
   
              Copymem("YAM:Outgoing/",&Filename,13)
              FRead(Filehandle,&Filename+13,12)
              FRead(Filehandle,&Puffer,30)
              Fgets(Filehandle,&Zeile1,80)
              Fgets(Filehandle,&Zeile2,80)
              Fgets(Filehandle,&Zeile3,80)
              Fgets(Filehandle,&Zeile4,80)
              Fgets(Filehandle,&Zeile5,80)
              Fgets(Filehandle,&Zeile6,80)
              Fgets(Filehandle,&Zeile7,80)
              FRead(Filehandle,&Puffer,4)
              AAA=Countstring(&Zeile4)
              Write(Oh,&Zeile4,AAA-1)
              Out(":")
              Out(&Zeile1)
              If GetSigs()=0 
               {
                 Bytes=Countstring(&Zeile4)
                 Zeiger==Bytes+#Zeile4
                 Zeiger==zeiger-5
                 Var=.l0(Zeiger)
                 If Var=#"@news" 
                  {
                   NewMails==NewMails-1
                   RES=TCP_Sendfile(&Filename)
                   newSizeinBytes==NewSizeinBytes-Res
                   Copymem(&Filename+13,&Filename_solo,12)
                   Convertzahl(NNTPCount,0)
                   Ziffer=.b0(&zahl)
                   If Ziffer=#`0` 
                    {
                      Copymem(&Zahl+1,&Zahl,4)
                    }
                   If Res#0 
                    {
                      RenameBuffer=="rename "+Filename+" to \$22Yam:NewsArchive/08053."+zahl+"\$22"
                      Execute(&Renamebuffer,0,0)
                      DeleteFile("YAM:Newsarchive/.index")
                      NNTPCount==NNTPCount+1
                    }
                  }
                 If Var##"@news" 
                  {
                   FWrite(WH,&Filename+13,12)
                   FWrite(WH,&Puffer,30)
                   FPuts(WH,&Zeile1)
                   FPuts(WH,&Zeile2)
                   FPuts(WH,&Zeile3)
                   FPuts(WH,&Zeile4)
                   FPuts(WH,&Zeile5)
                   FPuts(WH,&Zeile6)
                   FPuts(WH,&Zeile7)
                   FWrite(WH,&Puffer,4)
                  }
               }
            Next I
          }
          {* Flush *}
          Close(WH)
          If (WH=Open("YAM:Outgoing/.newindex",#Mode_old))#0
           {
             Seek(WH,4,#Offset_Begin)
             Write(WH,&NewMails,4)
             Seek(WH,8,#Offset_Current)
             Write(WH,&NewSizeinBytes,4)
             Close(WH)
           }
          Close(Filehandle)
          DeleteFile("YAM:Outgoing/.index")
          Execute("Rename Yam:Outgoing/.newindex to YAM:Outgoing/.index",0,0)
          Filehandle==0
        }
       {* Flush *}
       If Filehandle#0 
        {
         Close(Filehandle)
        }
       TCP_Write(Socket,"QUIT\$0D\$0A",?,0)
     }
    TCP_CloseSocket(Socket)
    If (WH=Open("YAM:NNTPsend.count",Mode_NEW))#0
     {
      Write(WH,&NNTPCount,4)
      Close(WH)
     }
    If NSFH#0
     {   
       Close(NSFH)
     }
    Out("NNTPSend beendet sich.\n")
    {* 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

Gleichstring:
    cmp.b (a0),d2
    beq .ok
    move.b (a0)+,d0
    move.b (a1)+,d1
    bset #5,d0
    bset #5,d1
    cmp.b d0,d1
    beq GleichString
.ende1:
    moveq.l #0,d0
    RTS
.ok:move.l a1,d0
    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

ConvertZahl:
    {* IncVar: Zusatz,Zahl,Zahlyyy*}
    Move.l #"    ",Zusatz
    Move.l #"0000",Zahl
ConvertZahl1:
    Movem.l a0-a5,-(sp)
    Lea Zusatz,a0
    Cmpi.l #0,d7
    bpl .l0
    Neg.l d7
    move.b #"-",zahl
    Cmpi.l #9999,d7
    bgt .l0
    move.b #"-",zusatz
.l0:Move.l d7,d0
    MoveQ.l #-1,d1
.l1:AddQ.l #1,d1
    Subi.l #10000000,d0
    Bpl .l1
    Addi.l #10000000,d0
    addi.l #$30,d1
    cmpi.b #"0",d1
    Beq .l11
    move.b d1,0(a0)
.l11:MoveQ.l #-1,d1
.l2:AddQ.l #1,d1
    Subi.l #1000000,d0
    Bpl .l2
    Addi.l #1000000,d0
    addi.l #$30,d1
    cmpi.b #" ",0(a0)
    bne .l22
    cmpi.b #"0",d1
    Beq .l21
.l22:
    move.b d1,1(a0)
.l21:MoveQ.l #-1,d1
.l3:AddQ.l #1,d1
    Subi.l #100000,d0
    Bpl .l3
    Addi.l #100000,d0
    addi.l #$30,d1
    cmpi.b #" ",1(a0)
    bne .l32
    cmpi.b #"0",d1
    Beq .l31
.l32:
    move.b d1,2(a0)
.l31:MoveQ.l #-1,d1
.l4:AddQ.l #1,d1
    Subi.l #10000,d0
    Bpl .l4
    Addi.l #10000,d0
    addi.l #$30,d1
    cmpi.b #" ",2(a0)
    bne .l42
    cmpi.b #"0",d1
    Beq .l41
.l42:
    move.b d1,3(a0)
.l41:MoveQ.l #-1,d1
.l5:AddQ.l #1,d1
    Subi.l #1000,d0
    Bpl .l5
    Addi.l #1000,d0
    addi.l #$30,d1
    cmpi.b #" ",3(a0)
    bne .l52
    cmpi.b #"0",d1
    Beq .l51
.l52:
    move.b d1,4(a0)
.l51:MoveQ.l #-1,d1
.l6:AddQ.l #1,d1
    Subi.l #100,d0
    Bpl .l6
    Addi.l #100,d0
    addi.l #$30,d1
    cmpi.b #" ",4(a0)
    bne .l62
    cmpi.b #"0",d1
    Beq .l61
.l62:
    move.b d1,5(a0)
.l61:MoveQ.l #-1,d1
.l7:AddQ.l #1,d1
    Subi.l #10,d0
    Bpl .l7
    Addi.l #10,d0
    addi.l #$30,d1
    cmpi.b #" ",5(a0)
    bne .l72
    cmpi.b #"0",d1
    Beq .l71
.l72:
    move.b d1,6(a0)
.l71:
    addi.l #$30,d0
    move.b d0,7(a0)
    Movem.l (sp)+,a0-a5
    Checkf D6,.ende   
    Write(D6,#Zusatz,8)
.ende:RTS


