  100 PROGRAM "Numconv.bas"
  110 ! BIN-HEX-DEC converter by B'Ware
  120 SET KEYCLICKOFF
  130 DATA 98,121,32,32,66,39,87,65,82,69,32
  140 STRING A$*16,W$*1,H$*4
  150 NUMERIC W,DEC,B,H,I,Z,S
  160 TEXT 80
  170 SET VIDEOMODE1:SET VIDEOCOLOUR0:SET VIDEOX42:SET VIDEOY3
  180 OPEN #220:"video:"
  190 SET #220:PALETTE128,91:DISPLAY #220:AT2FROM1TO3
  200 PRINT #220,AT2,11:"16 BIT BINARY";TAB(42);"HEXA";TAB(68);"DEC"
  210 PRINT #220,AT3,14:"( H L )"
  220 SET VIDEOMODE1:SET VIDEOCOLOUR0:SET VIDEOX22:SET VIDEOY2
  230 OPEN #250:"video:"
  240 DISPLAY #250:AT26FROM1TO1
  250 SET #102:PALETTE98,0:SET CURSORCOLOR0
  260 LET S=6
  270 DO 
  280   PRINT AT6,7:"                   ";TAB(40);"       ";TAB(65);"    "
  290   LET S=S+1:CALL SP
  300   IF S>22THENCALL P
  310   CLEAR #250
  320   SET #250:PALETTE10,255
  330   PRINT #250,AT1,2:"B BIN      H HEXA       D DEC      C COPY"
  340   CALL KEY
  350   SELECT W
  360   CASE 66,98
  370     CALL BIN0
  380   CASE 72,104
  390     CALL HEX0
  400   CASE 68,100
  410     CALL DEC0
  420   CASE 67,99
  430     CALL C
  440   CASE 27
  450     CALL EXIT
  460   CASE ELSE
  470     LET S=S-1
  480   END SELECT 
  490 LOOP 
  500 DEF BINH
  510   LET B=DEC:LET Z=32768:LET A$=""
  520   IF B/Z>=1THENLET A$=A$&"1":LET B=B-Z:GOTO  540
  530   LET A$=A$&"0"
  540   LET Z=Z/2
  550   IF Z>=1THEN 520
  560   CALL PRB
  570 END DEF 
  580 DEF PRH
  590   PRINT ATS,40:H$
  600 END DEF 
  610 DEF PRD
  620   PRINT USING"%%%%£",ATS,65:DEC
  630 END DEF 
  640 DEF PRB
  650   PRINT ATS,7:A$(:8);
  660   IF LEN(A$)>8THENPRINT " ";A$(9:)
  670 END DEF 
  680 DEF HEXA
  690   LET B=DEC:LET H=4096:LET H$=""
  700   LET I=INT(B/H+48)
  710   IF I>57THENLET I=I+7
  720   LET H$=H$&CHR$(I)
  730   LET B=B-INT(B/H)*H:LET H=H/16
  740   IF H>=1THEN 700
  750   CALL PRH
  760 END DEF 
  770 DEF KEY
  780   LET W$=INKEY$
  790   IF W$=""THEN 780
  800   SOUND PITCH20,DURATION1
  810   LET W=ORD(W$)
  820 END DEF 
  830 DEF P
  840   CLEAR #250
  850   SET #250:PALETTE255,10
  860   PRINT #250,AT1,3:"ANY KEY => clear screen    C COPY"
  870   CALL KEY
  880   IF W=99ORW=67THENCALL C
  890   CLEAR #102
  900   LET S=7
  910 END DEF 
  920 DEF C
  930   CLEAR #250
  940   SET #250:PALETTE4,255:PRINT #250,AT1,20:"COPY"
  950   COPY 
  960   LET S=S-1
  970 END DEF 
  980 DEF BIN0
  990   CLEAR #250
 1000   SET #250:PALETTE1,255
 1010   PRINT #250,AT1,3:"16 BIT BINARY => HEXADECIMAL => DECIMAL"
 1020   LET A$="":PRINT ATS,7:"........ ........"
 1030   LET DEC=0:LET Z=32768
 1040   FOR X=1TO16
 1050     CALL KEY
 1060     IF W$<>"1"ANDW$<>"0"THEN 1050
 1070     LET DEC=DEC+(W-48)*Z:LET Z=Z/2:LET A$=A$&W$:CALL PRB
 1080   NEXT 
 1090   CALL HEXA:CALL PRD
 1100 END DEF 
 1110 DEF HEX0
 1120   CLEAR #250
 1130   SET #250:PALETTE5,255
 1140   PRINT #250,AT1,3:"HEXADECIMAL => DECIMAL => 16 BIT BINARY"
 1150   PRINT ATS,40:"....":LET H$="":LET DEC=0
 1160   FOR X=3TO0STEP-1
 1170     CALL KEY
 1180     IF W$<"0"ORW$>"f"OR(W$>"9"ANDW$<"a")THEN 1170
 1190     IF W$>="a"THENLET DEC=DEC+(W-87)*16^X:GOTO  1210
 1200     LET DEC=DEC+(W-48)*16^X
 1210     LET H$=H$&UCASE$(W$):CALL PRH
 1220   NEXT 
 1230   CALL BINH:CALL PRD
 1240 END DEF 
 1250 DEF DEC0
 1260   CLEAR #250
 1270   SET #250:PALETTE9,255
 1280   PRINT #250,AT1,3:"DECIMAL => HEXADECIMAL =>16 BIT BINARY"
 1290   PRINT ATS,65:".....":LET DEC=0
 1300   FOR X=4TO0STEP-1
 1310     CALL KEY
 1320     IF W=32THENLET W$="0"
 1330     IF W$<"0"ORW$>"9"THEN 1310
 1340     LET DEC=DEC+VAL(W$)*10^X:PRINT ATS,69-X:W$
 1350   NEXT 
 1360   IF DEC>65535THENPRINT ATS,65:"XXXXX":GOTO  1260
 1370   CALL BINH:CALL HEXA
 1380 END DEF 
 1390 DEF SP
 1400   RESTORE 
 1410   FOR X=0TO10
 1420     READ B
 1430     SPOKE 255,16075+X,B
 1440   NEXT 
 1450 END DEF 
 1460 DEF EXIT
 1470   CLEAR #250
 1480   SET #250:PALETTE1,255
 1490   PRINT #250,AT1,5:"END PROGRAM?            ESC => SURE"
 1500   CALL KEY
 1510   IF W$<>CHR$(27)THEN
 1520     LET S=S-1
 1530     EXIT DEF
 1540   END IF 
 1550   CLOSE #220
 1560   CLOSE #250
 1570   TEXT 40
 1580   SET KEYCLICKON
 1590   STOP 
 1600 END DEF 

