|   AMIGA-Bascoder ‑ es gibt ihn doch 
         
  
 
 Karsten Schenk stellte uns in K67.78 seine Aktualisierung des Bascoders für DOS-PC vor. Dort erwähnte
                         er auch. daß es auf dem AMIGA keine Version des Computer-Esperantos gibt. Das hat er nun selbst geändert: für das Basic, das auf der "Extras 1.3"-Diskette ausgeliefert wurde,
                         hat er einen Bascoder geschrieben, der die Festlegungen der Version 3C erfüllt, mit zwei Einschränkungen: Wie wir es auch vom JOYCE-Bascoder kennen, verzichtet er völlig auf die Kassettenarbeit, der AMIGA
                         hat von Haus aus kein Kassetteninterface und inzwischen stehen genügend andere Übertragungsmöglichkeiten
                         für die ASCII-Listings ab Zeile 1000 zur Verfügung.  Da der AMIGA fensterorientiert arbeitet, kann einem Buchstaben auf dem Bildschirm nicht so unmittelbar
                         wie auf vielen 8-bit-Heimcomputern eine (feste) Position im Speicher zugeordnet werden, daher ist es
                         (vorläufig?) nicht möglich, die Funktion zum Zurücklesen eines Zeichens aus dem Bildschirm (GOSUB 220) zu nutzen.  Außerdem bemerkt Karsten, daß das Basic (und mit ihm dann natürlich BasiCode) mit steigender
                         Betriebssystemnummer instabiler wird, auf meinem 500+ mit Umschaltmöglichkeit zwischen Kickstart
                         1.3 und 2.0, den ich vorigen Herbst auf dem Flohmarkt gekauft habe, liefen jedoch die getesteten
                         Programme ohne Probleme, sowohl hinsichtlich der Grafik und der Farben als auch des Sounds.   Thomas Rademacher  //  November 2007 
        
   
REM Basicode fuer Amiga®, 30457, Karsten SchenkREM graphics.bmap wird benötigt
 REM Benutzung auf eigene Verantwortung.
 LIBRARY "graphics.library"
 RANDOMIZE TIMER
 CLEAR ,&O70000
 SCREEN 1,328,220,4,1
 WINDOW 2,"            BasiCode-3C auf AMIGA®",,0,1
 PALETTE 0,0,0,0
 PALETTE 2,0/15,0/15,0/15
 PALETTE 3,0/15,0/15,11/15     : REM blau
 PALETTE 4,11/15,0/15,0/15     : REM rot
 PALETTE 5,.3,0,.4             : REM violett
 PALETTE 6,0/15,6/15,0/15      : REM gruen
 PALETTE 7,5/15,9/15,12/15     : REM hellblau
 PALETTE 8,14/15,11/15,0/15    : REM gelb
 PALETTE 9,15/15,15/15,15/15   : REM weiß
 GOTO 1000
 20 CLEAR
 ON ERROR GOTO fehler
 CC(0)=7:CC(1)=0
 HG=264 :VG=198
 HO=41-1:VE=25-1
 GOSUB 100
 GOTO 1010
 100 COLOR CC(0)+2,CC(1)+2
 CLS
 RETURN
 110 COLOR CC(0)+2, CC(1)+2
 LOCATE VE+1, HO+1
 RETURN
 120 HO=POS(0)-1
 VE=CSRLIN-1
 RETURN
 150 COLOR CC(1)+2,CC(0)+2
 PRINT "     "+SR$+"     ";
 COLOR CC(0)+2,CC(1)+2
 RETURN
 200 IN$=""
 IN$=INKEY$
 201 IN=0
 IF IN$<>"" THEN
 IN=ASC(UCASE$(IN$))
 IF IN<28 THEN
 IN=IN*(-1)
 IF IN=-9 OR IN=-13 THEN
 IN=ABS(IN)
 END IF
 END IF
 IF IN>=129 AND IN<=138 THEN
 IN=(IN-128)*(-1)
 END IF
 WHILE INKEY$<>"":WEND
 IF IN=28 THEN
 IN=31
 ELSEIF IN=29 THEN
 IN=30
 ELSEIF IN=30 THEN
 IN=29
 ELSEIF IN=31 THEN
 IN=28
 END IF
 END IF
 RETURN
 210 IN$=INPUT$(1)
 GOSUB 201
 RETURN
 220 REM Weil der Amiga® keinen Textmodus hat, ist die folgende
 REM Routine nur eine Attrappe
 IN=ASC("A")
 IN$="a"
 CN=ASC("a")-ASC("A")
 RETURN
 250 BEEP
 RETURN
 260 RV=RND
 RETURN
 270 FR=FRE(0)
 RETURN
 280 IF FR=0 THEN BREAK ON
 IF FR=1 THEN BREAK OFF
 RETURN
 300 IF SR<0 THEN
 SR$=STR$(SR)
 ELSE
 SR$=MID$(STR$(SR),2)
 END IF
 RETURN
 310 OSR=CDBL(SR)
 OP=FIX(OSR)
 OB=ABS(OSR)-ABS(FIX(OSR))
 OB=CLNG(OB*10^CN)
 IF OP<0 THEN
 SR$=STR$(OP)
 ELSE
 SR$=MID$(STR$(OP),2)
 END IF
 IF CN>CT-2 THEN
 SR$=STRING$(CT,"*")
 ELSE
 IF CN<>0 THEN
 IF OB=0 THEN
 SR$=SR$+"."+STRING$(CN,"0")
 ELSE
 SR$=SR$+"."+MID$(STR$(OB),2)
 END IF
 END IF
 END IF
 RETURN
 330 SR$=UCASE$(SR$)
 RETURN
 350 LPRINT SR$;
 RETURN
 360 LPRINT
 RETURN
 400 OSD=1.82*SD:
 IF OSD<.023 THEN OSD=.023
 IF SP<26 THEN
 OSP=26
 ELSEIF SP>127 THEN
 OSP=127
 ELSE
 OSP=SP
 END IF
 IF SV<>0 THEN
 SOUND EXP(OSP*.057762+2.10125), OSD,SV*15.9375
 END IF
 OTIME = TIMER
 OMO =.1*SD
 WHILE TIMER<OMO+OTIME
 WEND
 RETURN
 450 OTIME=TIMER
 OMO=.1*SD
 SD=0:IN=0
 452 IN$=INKEY$
 IF TIMER>OMO+OTIME THEN GOTO 456
 IF IN$<>"" THEN SD=(OTIME+OMO)-TIMER: GOTO 456
 GOTO 452
 456 IF SD<>0 THEN GOTO 201
 IF SD=0 THEN IN$=""
 RETURN
 500 LET IN=0
 IF NF/2=INT(NF/2) THEN OPEN NF$ FOR INPUT AS NF+1
 IF NF/2<>INT(NF/2) THEN OPEN NF$ FOR OUTPUT AS NF+1
 IF IN <>-1 THEN LET IN=0
 RETURN
 540 LET IN=0
 LINE INPUT #NF+1,IN$
 IF IN <>-1 THEN LET IN=ABS(EOF(NF+1))
 RETURN
 560 LET IN=0
 PRINT #NF+1,SR$
 IF IN <>-1 THEN IN=0
 RETURN
 580 LET IN=0
 CLOSE NF+1
 IF IN <>-1 THEN IN=0
 RETURN
 600 GOSUB 100
 RETURN
 620 OX=INT(HO*HG): OY=INT(VE*VG)+6
 PSET (OX,OY),CC(CN)+2
 RETURN
 630 OX=INT(HO*HG): OY=INT(VE*VG)+6
 LINE -(OX,OY),CC(CN)+2
 RETURN
 650 COLOR CC(0)+2,CC(1)+2
 OX%=INT(HO*HG): OY%=INT(VE*VG)+12
 CALL Move&(WINDOW(8),OX%,OY%)
 IF CN=0 THEN
 PRINT SR$;
 ELSE
 PRINT STRING$(LEN(SR$),32);
 END IF
 RETURN
 950 WINDOW CLOSE 2
 SCREEN CLOSE 1
 LIBRARY CLOSE
 END
 fehler:
 IF ERR=52 THEN
 OMSG$="Datei nicht gefunden!"
 ELSEIF ERR=53 OR ERR=64 THEN
 OMSG$="Falscher Dateiname!"
 ELSEIF ERR=61 THEN
 OMSG$="Datenträger voll!"
 ELSEIF ERR=68 OR ERR=49 THEN
 OMSG$="Laufwerk nicht bereit!"
 ELSEIF ERR=52 OR ERR=53 THEN
 OMSG$="Unzulässiger Dateiname!"
 ELSEIF ERR=70 THEN
 OMSG$="Datenträger ist schreibgeschützt!"
 ELSE
 PRINT "Fehler: ";ERR
 ERROR ERR
 STOP
 END IF
 WINDOW 3,"Fehler",,0,1
 PRINT "Fehler: "; ERR
 PRINT OMSG$
 PRINT
 PRINT "Bitte eine Taste drücken"
 WHILE INKEY$<>""
 WEND
 WHILE INKEY$=""
 WEND
 WINDOW 2
 LET IN=-1
 RESUME NEXT
 
         
    
   
     |