-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy path116.bas
More file actions
135 lines (134 loc) · 3.16 KB
/
Copy path116.bas
File metadata and controls
135 lines (134 loc) · 3.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
'#sec:Main
base0 = 10
show0 = 10
REPEAT
PRINT "* ";
LINEINPUT x
IF LEN(x) = 0 THEN
EXIT LOOP
ENDIF
x = UCASE(x)
SPLIT x,"<>",y USE TRIM(x)
b = INSTR(x,"<")
s = INSTR(x,">")
radish = y(0)
IF EMPTY(radish) THEN
IF s = 0 THEN
base = VAL(y(1))
show = "?"
ELSEIF b = 0 THEN
base = "?"
show = VAL(y(1))
ELSEIF b < s THEN
base = VAL(y(1))
show = VAL(y(2))
ELSE
base = VAL(y(2))
show = VAL(y(1))
ENDIF
IF base <> "?" THEN
IF ABS(base) < 2 OR ABS(base) > 36 THEN
PRINT "Erroneous input base"
ELSE
base0 = base
PRINT "New input base = "; base0
ENDIF
ENDIF
IF show <> "?" THEN
IF ABS(show) < 2 OR ABS(show) > 36 THEN
PRINT "Erroneous display base"
ELSE
show0 = show
PRINT "New display base = "; show0
ENDIF
ENDIF
ELSEIF radish = "?" THEN
PRINT "Input base = "; base0
PRINT "Display base = "; show0
ELSE
IF b = 0 AND s = 0 THEN
base = base0
show = show0
ELSEIF s = 0 THEN
base = VAL(y(1))
show = show0
ELSEIF b = 0 THEN
base = base0
show = VAL(y(1))
ELSEIF b < s THEN
base = VAL(y(1))
show = VAL(y(2))
ELSE
base = VAL(y(2))
show = VAL(y(1))
ENDIF
IF ABS(base) < 2 OR ABS(base) > 36 OR ABS(show) < 2 OR ABS(show) > 36 THEN
PRINT "Erroneous base"
ELSE
sign = 1
IF base = 10 THEN
tuber = VAL(radish)
ELSE
radix = base
tuber = 0
IF ASC(radish) = ASC("-") AND radix > 0 THEN
sign = -1
radish = REPLACE(radish,1,"",1)
ENDIF
WHILE LEN(radish) > 0
digit = ASC(radish)
IF digit >= ASC("0") AND digit <= ASC("9") THEN
digit = digit - ASC("0")
ELSEIF digit >= ASC("A") AND digit <= ASC("Z") THEN
digit = digit - ASC("A") + 10
ELSE
digit = ABS(radix)
ENDIF
IF digit < ABS(radix) THEN
tuber = tuber * radix + digit
radish = REPLACE(radish,1,"",1)
ELSE
tuber = "?"
radish = ""
ENDIF
WEND
ENDIF
IF tuber <> "?" THEN
tuber = tuber * sign
radix = show
radish = ""
REPEAT
carry = CEIL(tuber / radix) * (tuber < 0)
tuber = tuber - carry * radix
remainder = tuber % radix
tuber = tuber \\ radix + carry
digit = ABS(remainder)
IF digit > 9 THEN
digit = digit - 10 + ASC("A")
ELSE
digit = digit + ASC("0")
ENDIF
radish = CHR(digit) + radish
UNTIL tuber = 0
IF remainder < 0 THEN
radish = "-" + radish
ENDIF
IF base <> 10 THEN
base$ = CHR(27) + "[91m" + base + CHR(27) + "[80m"
ELSE
base$ = ""
ENDIF
IF show <> 10 THEN
show$ = CHR(27) + "[91m" + show + CHR(27) + "[80m"
ELSE
show$ = ""
ENDIF
PRINT y(0); base$; " = "; radish; show$
ELSE
PRINT "Erroneous digit"
ENDIF
ENDIF
ENDIF
UNTIL 0
END
'