2 ' made by Svjatoslav Agejenko
\r
4 ' H-Page: svjatoslav.eu
\r
5 ' E-Mail: svjatoslavagejenko@gmail.com
\r
7 DECLARE SUB box (x1%, y1%, x2%, y2%)
\r
8 DECLARE SUB ssort (s%, m%)
\r
9 DECLARE SUB sort (s%, w%)
\r
11 DECLARE SUB cmp (a$, b$, r%)
\r
13 DECLARE SUB std (a$)
\r
14 DECLARE FUNCTION cnum$ (a%)
\r
15 DECLARE SUB fload (a$, b%, c%, d%)
\r
16 DECLARE SUB putfs (f%, l%, s%, c$)
\r
17 DECLARE SUB gets (l%, s%, a$)
\r
18 DECLARE SUB puts (l%, s%, a$)
\r
19 DECLARE SUB runf (a$)
\r
20 DECLARE SUB getfil (a%)
\r
22 DECLARE SUB mkson (a$)
\r
23 DECLARE SUB title (a$)
\r
24 DECLARE SUB strip (a$, b$)
\r
25 DECLARE SUB cmd (a$)
\r
26 DECLARE SUB conkey (a$)
\r
27 DECLARE SUB conn (a$)
\r
29 DECLARE SUB chkey (a$)
\r
30 DECLARE SUB getkey (a$)
\r
31 DECLARE SUB conm (a$, c)
\r
32 DECLARE SUB start ()
\r
34 DIM SHARED con$(1 TO 50)
\r
35 DIM SHARED conc(1 TO 50)
\r
38 DIM SHARED sona$(1 TO 20)
\r
41 DIM SHARED buf$(1 TO 5000)
\r
42 DIM SHARED bufu(1 TO 5000)
\r
43 DIM SHARED bufl(1 TO 1000, 1 TO 30)
\r
44 DIM SHARED buflu(1 TO 1000)
\r
46 DIM SHARED opf(1 TO 30)
\r
47 DIM SHARED hist$(1 TO 20)
\r
48 DIM SHARED histp, histk
\r
49 DIM SHARED buff(1 TO 30, 1 TO 1000)
\r
50 DIM SHARED stack(1 TO 2000, 1 TO 10)
\r
51 DIM SHARED stackl(1 TO 10)
\r
77 IF a$ = CHR$(0) + "H" THEN yp1 = yp1 - 25
\r
78 IF a$ = CHR$(0) + "P" THEN yp1 = yp1 + 25
\r
79 IF a$ = CHR$(27) THEN GOTO 17
\r
81 LINE (10, y1 - 35)-(20, y1 + 35), 0, B
\r
82 LINE (11, y1 - 34)-(19, y1 + 34), 15, B
\r
84 LINE (310, y2 - 35)-(300, y2 + 35), 0, B
\r
85 LINE (309, y2 - 34)-(301, y2 + 34), 15, B
\r
87 LINE (lx - 10, ly - 10)-(lx + 10, ly + 10), 0, B
\r
88 LINE (lx - 9, ly - 9)-(lx + 9, ly + 9), 15, B
\r
92 IF ly < 20 THEN lyp = 1
\r
93 IF ly > 180 THEN lyp = -1
\r
96 IF ly < y1 - 35 OR ly > y1 + 35 THEN SOUND 1000, 1
\r
98 IF lx > 290 THEN lxp = -1: GOSUB 18
\r
101 IF yp1 > 0 THEN y1 = y1 + 1: yp1 = yp1 - 1
\r
102 IF yp1 < 0 THEN y1 = y1 - 1: yp1 = yp1 + 1
\r
103 IF yp2 > 0 THEN y2 = y2 + 1: yp2 = yp2 - 1
\r
104 IF yp2 < 0 THEN y2 = y2 - 1: yp2 = yp2 + 1
\r
118 IF ly < 20 THEN lyp = 1
\r
119 IF ly > 180 THEN lyp = -1
\r
120 IF lx < 30 THEN lxp = 1
\r
139 SUB box (x1, y1, x2, y2)
\r
147 b$ = "|" + b$ + "|"
\r
148 c$ = "|" + c$ + "|"
\r
155 FOR a = y1 + 1 TO y2 - 1
\r
165 IF a$ <> "" THEN conkey a$
\r
172 IF a$ = CHR$(0) + "M" THEN a$ = "pa"
\r
173 IF a$ = CHR$(0) + "K" THEN a$ = "va"
\r
174 IF a$ = CHR$(0) + "H" THEN a$ = "ul"
\r
175 IF a$ = CHR$(0) + "P" THEN a$ = "al"
\r
182 IF a$ = SPACE$(LEN(a$)) THEN GOTO 5
\r
186 IF mitus = 0 THEN GOTO 5
\r
188 SELECT CASE sona$(1)
\r
191 conm "help - for help", 7
\r
192 conm "quit - quit program", 7
\r
193 conm "b - boss screen", 7
\r
194 conm "memstat- show info about memory blocks", 7
\r
195 conm "memput <addr> <data> - put data to specified memoy block", 7
\r
196 conm "memlist <addr> <amount> - show memory blocks, starting from <addr>", 7
\r
197 conm "runf <file.ext> - run script file", 7
\r
198 conm "lnstat - show info about memory lines", 7
\r
199 conm "lnput <line> <word> <data> <data> ... put data in <line> starting from <word>", 7
\r
200 conm "lnlist <addr> <amount> - show contenc of memory lines", 7
\r
201 conm "fstat - show info about memory files", 7
\r
202 conm "fput <file> <line> <word> <data> <data> ... put data in memory file", 7
\r
203 conm "fload <filename.ext> <file> <line> <word>- load data file into memory file", 7
\r
204 conm "cls - clear screen", 7
\r
205 conm "stclear <stack> - clear stack", 7
\r
206 conm "chklin <page> <from line> <to line> - determine used line numbers to STDOUT", 7
\r
207 conm "stacksize <stack> - determine stack size to STDOUT", 7
\r
208 conm "filtand <stack> <word> <mask> <word> <mask> ... filters out lines to STDOUT", 7
\r
209 conm "filtor <stack> <word> <mask> <word> <mask> ... filters out lines to STDOUT", 7
\r
210 conm "disp <stack> <word> <word> ... display formatted selected cells to STDOUT", 7
\r
211 conm "sort <stack> <word> - sort elements by <word> value, lower first", 7
\r
212 conm "swap <stack> - swap stack elements (backwards)", 7
\r
213 conm "ssort <stack> <word> - sort stack in alphabetical order", 7
\r
214 conm "memget <pointer> - allocates memory block, and puts there -", 7
\r
215 conm "liststack <stack> <from line> <to line> - show stack values to STDOUT", 7
\r
216 conm "ask <question> <file> <line> <word> - asks question, and stores result", 7
\r
217 conm "flnget <file> <pointer> - get unused line in file", 7
\r
224 title "memory blocks summary"
\r
228 IF bufu(b) > 0 THEN c = c + 1
\r
229 lng = lng + LEN(buf$(b))
\r
231 d$ = "memory blocks used:" + STR$(c) + " total 5000"
\r
233 d$ = "data size:" + STR$(lng)
\r
252 IF b = 0 THEN b = 1
\r
253 IF c = 0 THEN c = 1
\r
256 IF c = 0 THEN GOTO 5
\r
257 IF bufu(d) > 0 THEN
\r
258 e$ = cnum(d) + ":" + SPACE$(5 - LEN(cnum(d)))
\r
271 title "memory lines summary"
\r
275 IF buflu(b) > 0 THEN c = c + 1: d = d + buflu(b)
\r
277 d$ = "memory lines used:" + STR$(c) + " total 1000"
\r
279 d$ = "total number of words in lines:" + STR$(d)
\r
287 IF e < 4 THEN e = 4
\r
289 puts b, c + d - 4, sona$(d)
\r
298 IF c = 0 THEN GOTO 5
\r
299 IF buflu(d) > 0 THEN
\r
301 e$ = e$ + SPACE$(5 - LEN(e$))
\r
302 e$ = e$ + cnum(buflu(d))
\r
303 e$ = e$ + SPACE$(8 - LEN(e$))
\r
307 e$ = e$ + " >" + f$
\r
316 title "Memory files summary"
\r
320 IF buff(b, c) > -1 THEN
\r
322 d$ = "File number:" + STR$(b)
\r
326 d$ = "on line:" + STR$(c) + " allocated memory line: " + STR$(buff(b, c))
\r
338 IF f < 5 THEN f = 5
\r
340 putfs b, c, d + e - 5, sona$(e)
\r
354 IF b = 0 THEN b = 1
\r
355 IF c = 0 THEN c = 1
\r
356 IF d = 0 THEN d = 1
\r
357 fload sona$(2), b, c, d
\r
362 IF b = 0 THEN b = 1
\r
370 IF b = 0 THEN b = 1
\r
371 IF c = 0 THEN c = 1
\r
372 IF d = 0 THEN d = 1000
\r
375 IF buff(b, e) > 0 THEN std cnum(buff(b, e))
\r
381 IF b = 0 THEN b = 1
\r
382 std cnum(stackl(b))
\r
387 conm "returning", 7
\r
392 FOR e = 1 TO stackl(b)
\r
393 FOR c = 3 TO mitus STEP 2
\r
394 gets stack(e, b), VAL(sona$(c)), f$
\r
395 cmp f$, sona$(c + 1), d
\r
397 std cnum(stack(e, b))
\r
417 tmp1(d) = VAL(sona$(e))
\r
420 FOR c = 1 TO stackl(b)
\r
422 gets stack(c, b), tmp1(e), f$
\r
423 IF tmp2(e) < LEN(f$) THEN tmp2(e) = LEN(f$)
\r
427 FOR c = 1 TO stackl(b)
\r
430 gets stack(c, b), tmp1(e), f$
\r
431 f$ = f$ + SPACE$(tmp2(e) - LEN(f$))
\r
432 g$ = g$ + f$ + " # "
\r
443 FOR e = 1 TO stackl(b)
\r
444 FOR c = 3 TO mitus STEP 2
\r
445 gets stack(e, b), VAL(sona$(c)), f$
\r
446 cmp f$, sona$(c + 1), d
\r
447 IF d = 0 THEN GOTO 21
\r
449 std cnum(stack(e, b))
\r
464 SWAP stack(d, b), stack(c - d + 1, b)
\r
471 IF b = 0 THEN b = 1
\r
472 IF c = 0 THEN c = 1
\r
478 IF b = 0 THEN b = 1
\r
480 IF bufu(c) = 0 THEN bufu(c) = 1: buf$(c) = "-": stack(b, 10) = c: GOTO 23
\r
483 IF stackl(10) < b THEN stackl(10) = b
\r
490 IF b = 0 THEN b = 1
\r
491 IF c = 0 THEN c = 1
\r
492 IF d = 0 THEN d = stackl(b)
\r
494 std cnum(stack(e, b))
\r
500 IF b$ = "" THEN b$ = "input"
\r
510 conm "'" + f$ + "' accepted", 7
\r
517 IF buff(b, d) = -1 THEN
\r
519 IF stackl(10) < c THEN stackl(10) = c
\r
530 conm "Invalid command", 12
\r
534 SUB cmp (a$, b$, r)
\r
535 IF a$ = b$ THEN r = 1 ELSE r = 0
\r
540 cnum$ = RIGHT$(b$, LEN(b$) - 1)
\r
544 b$ = concmd$ + SPACE$(85)
\r
547 IF a$ = "va" THEN conx = conx - 1
\r
548 IF a$ = "pa" THEN conx = conx + 1
\r
552 IF histk < 1 THEN histk = 20
\r
557 IF histk > 20 THEN histk = 1
\r
562 IF LEN(a$) = 1 THEN
\r
563 IF a$ = CHR$(13) THEN
\r
566 IF histp > 20 THEN histp = 1
\r
575 IF a$ = CHR$(8) THEN
\r
577 b$ = LEFT$(b$, conx - 2) + RIGHT$(b$, 81 - conx)
\r
583 b$ = LEFT$(b$, conx - 1) + a$ + RIGHT$(b$, 81 - conx)
\r
589 IF conx < 1 THEN conx = 1
\r
590 IF conx > 80 THEN conx = 80
\r
592 b$ = b$ + SPACE$(85)
\r
593 concmd$ = LEFT$(b$, 80)
\r
599 PRINT RIGHT$(LEFT$(concmd$, conx), 1);
\r
608 IF LEN(a$) > 78 THEN
\r
611 a$ = " >> " + RIGHT$(a$, LEN(a$) - 78)
\r
616 b$ = a$ + SPACE$(80 - LEN(a$))
\r
621 con$(a) = con$(a + 1)
\r
622 conc(a) = conc(a + 1)
\r
633 SUB fload (a$, b, c, d)
\r
639 OPEN a$ FOR INPUT AS #h
\r
641 IF EOF(h) <> 0 THEN GOTO 13
\r
644 IF LEFT$(e$, 3) = "// " THEN
\r
648 IF e$ = SPACE$(LEN(e$)) THEN GOTO 12
\r
654 FOR f = 1 TO LEN(e$)
\r
655 g$ = RIGHT$(LEFT$(e$, f), 1)
\r
662 IF g$ = CHR$(9) THEN g$ = ""
\r
674 k$ = "file: " + a$ + " loaded." + STR$(l) + " lines in file"
\r
680 IF opf(b) = 0 THEN opf(b) = 1: a = b: GOTO 7
\r
685 SUB gets (l, s, a$)
\r
701 FOR b = 1 TO LEN(a$)
\r
702 c$ = RIGHT$(LEFT$(a$, b), 1)
\r
711 sona$(mitus) = sona$(mitus) + c$
\r
715 'conm "sonad_______", 10
\r
716 'FOR b = 1 TO mitus
\r
721 IF LEFT$(sona$(a), 2) = "|>" THEN
\r
722 IF sona$(a + 1) = "c" THEN stdl = 1
\r
723 IF sona$(a + 1) = "s" THEN stdl = 10 + VAL(sona$(a + 2))
\r
727 IF LEFT$(sona$(a), 2) = "|@" THEN
\r
728 sona$(a) = cnum(stack(VAL(RIGHT$(sona$(a), LEN(sona$(a)) - 2)), 10))
\r
733 FOR a = mitus + 1 TO 20
\r
738 SUB putfs (f, l, s, c$)
\r
740 'DIM SHARED buff(1 TO 30, 1 TO 1000)
\r
746 IF buflu(a) = 0 THEN la = a: GOTO 10
\r
752 IF buflu(la) = 0 THEN buff(f, l) = -1 ELSE buff(f, l) = la
\r
755 SUB puts (l, s, a$)
\r
757 IF a$ = "|" THEN a$ = ""
\r
758 IF a$ = "||" THEN GOTO 11
\r
763 'DIM SHARED buf$(1 TO 10000)
\r
764 'DIM SHARED bufu(1 TO 10000)
\r
766 IF bufu(c) = 0 THEN GOTO 6
\r
771 buflu(l) = buflu(l) + 1
\r
780 buflu(l) = buflu(l) - 1
\r
791 OPEN a$ FOR INPUT AS #h
\r
793 IF EOF(h) <> 0 THEN GOTO 8
\r
804 DIM tmp1(1 TO 10000)
\r
805 DIM tmp2(1 TO 10000)
\r
810 gets stack(a, s), w, c$
\r
820 IF tmp1(c) < e THEN e = tmp1(c): f = c
\r
823 SWAP tmp1(a), tmp1(f)
\r
824 SWAP tmp2(a), tmp2(f)
\r
829 stack(a, s) = tmp2(a)
\r
835 DIM tbti(1 TO 2000)
\r
836 DIM tbtp(1 TO 2000)
\r
837 DIM tbt$(1 TO 2000)
\r
839 FOR a = 1 TO stackl(s)
\r
840 gets stack(a, s), m, b$
\r
846 FOR a = 1 TO stackl(s)
\r
849 f = ASC(LEFT$(d$, 1))
\r
851 IF ASC(LEFT$(tbt$(c), 1)) = f THEN
\r
852 IF d$ <> tbt$(c) THEN
\r
854 h$ = tbt$(c) + CHR$(0)
\r
856 IF LEN(h$) > i THEN i = LEN(h$)
\r
858 k = ASC(RIGHT$(LEFT$(g$, j), 1))
\r
859 l = ASC(RIGHT$(LEFT$(h$, j), 1))
\r
860 IF k < l THEN GOTO 22
\r
861 IF l < k THEN e = c: d$ = tbt$(c): f = ASC(LEFT$(d$, 1)): GOTO 22
\r
865 IF ASC(LEFT$(tbt$(c), 1)) < f THEN f = ASC(LEFT$(tbt$(c), 1)): e = c: d$ = tbt$(c)
\r
875 FOR a = 1 TO stackl(s)
\r
876 stack(a, s) = tbti(a)
\r
891 conm "DDBASE, (Dos Data BASE) 0.0", 7
\r
892 conm "Copyright Svjatoslav Agejenko. All Rights Reserved.", 7
\r
893 conm "starting...", 7
\r
916 a$ = "runf auto.scr"
\r
917 FOR b = 1 TO LEN(a$)
\r
918 c$ = RIGHT$(LEFT$(a$, b), 1)
\r
933 stackl(b) = stackl(b) + 1
\r
934 stack(stackl(b), b) = VAL(a$)
\r
936 c$ = a$ + " > " + cnum(stackl(b)) + " ! " + cnum(b)
\r
947 IF LEFT$(b$, 1) = " " THEN b$ = RIGHT$(b$, LEN(b$) - 1): GOTO 2
\r
949 IF RIGHT$(b$, 1) = " " THEN b$ = LEFT$(b$, LEN(b$) - 1): GOTO 3
\r
954 conm "================> " + a$ + " <===============", 7
\r