Using AI to improve code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sat, 7 Sep 2024 20:01:42 +0000 (23:01 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sat, 7 Sep 2024 20:01:42 +0000 (23:01 +0300)
Networking/Digital data over analog audio channel/msg2xi.bas
Networking/Digital data over analog audio channel/xi2msg.bas
Networking/Morse/morse.bas

index 12b06e1..70361a8 100644 (file)
-' Svjatoslav Agejenko year:2001\r
-' converts binary file into 8 bit wave sound file without header.\r
-\r
-DECLARE SUB start ()\r
-DECLARE SUB iadd ()\r
-DECLARE SUB oadd ()\r
-DECLARE SUB byt (a!)\r
-\r
-DIM SHARED iwa(1 TO 20)\r
-DIM SHARED owa(1 TO 41)\r
-DIM SHARED iwad$\r
-DIM SHARED owad$\r
-DIM SHARED file1$\r
-DIM SHARED file2$\r
-DIM SHARED bytee AS STRING * 1\r
-\r
-\r
-start\r
-\r
-file1$ = "input.txt"\r
-file2$ = "sound.xi"\r
-\r
-OPEN file1$ FOR BINARY AS #2\r
-OPEN file2$ FOR BINARY AS #1\r
-\r
-FOR a = 1 TO 50\r
-iadd\r
-NEXT a\r
-oadd\r
-\r
-2\r
-GET #2, , bytee\r
-byt ASC(bytee)\r
-IF EOF(2) = 0 THEN GOTO 2\r
-\r
-CLOSE #2\r
-CLOSE #1\r
-\r
-PRINT "Encoding of message into sound completed"\r
-\r
-SYSTEM\r
-\r
-SUB byt (a)\r
-'PRINT "===="\r
-a = a + 1\r
-IF a > 128 THEN a = a - 128: iadd ELSE oadd\r
-IF a > 64 THEN a = a - 64: iadd ELSE oadd\r
-IF a > 32 THEN a = a - 32: iadd ELSE oadd\r
-IF a > 16 THEN a = a - 16: iadd ELSE oadd\r
-IF a > 8 THEN a = a - 8: iadd ELSE oadd\r
-IF a > 4 THEN a = a - 4: iadd ELSE oadd\r
-IF a > 2 THEN a = a - 2: iadd ELSE oadd\r
-IF a > 1 THEN iadd ELSE oadd\r
-'b$ = INPUT$(1)\r
-END SUB\r
-\r
-SUB iadd\r
-PUT #1, , iwad$\r
-END SUB\r
-\r
-SUB oadd\r
-PUT #1, , owad$\r
-END SUB\r
-\r
-SUB start\r
-\r
-pi = 3.141592653999996#\r
\r
-b = 0\r
-FOR a = pi / 2 TO 2.5 * pi STEP (2 * pi / 20)\r
-b = b + 1\r
-iwa(b) = SIN(a) * 100\r
-IF iwa(b) < 0 THEN iwa(b) = iwa(b) + 255\r
-NEXT a\r
-\r
-b = 0\r
-FOR a = pi / 2 TO 2.5 * pi STEP (2 * pi / 40)\r
-b = b + 1\r
-owa(b) = SIN(a) * 100\r
-IF owa(b) < 0 THEN owa(b) = owa(b) + 255\r
-NEXT a\r
-\r
-FOR a = 1 TO 20\r
-iwad$ = iwad$ + CHR$(iwa(a))\r
-NEXT a\r
-\r
-FOR a = 1 TO 40\r
-owad$ = owad$ + CHR$(owa(a))\r
-NEXT a\r
-\r
-END SUB\r
-\r
+' Utility that encodes arbitrary text message into 8 bit sound file.
+' This audio can be now transferred over telephone line or recorded to magnetic tape.
+' By Svjatoslav Agejenko.
+' Email: svjatoslav@svjatoslav.eu
+' Homepage: http://www.svjatoslav.eu
+'
+' Changelog:
+' 2001, Initial version
+' 2024.09, Improved program readability using AI
+
+DECLARE SUB StartProgram ()
+DECLARE SUB AddIWave ()
+DECLARE SUB AddOWave ()
+DECLARE SUB ByteToSound (soundByte AS SINGLE)
+
+DIM SHARED iwaveArray(1 TO 20)
+DIM SHARED owaveArray(1 TO 41)
+DIM SHARED iwaveData$
+DIM SHARED owaveData$
+DIM SHARED inputFile$
+DIM SHARED outputFile$
+DIM SHARED byte AS STRING * 1
+
+StartProgram
+
+inputFile$ = "input.txt"
+outputFile$ = "sound.xi"
+
+OPEN inputFile$ FOR BINARY AS #2
+OPEN outputFile$ FOR BINARY AS #1
+
+FOR a = 1 TO 50
+    AddIWave
+NEXT a
+AddOWave
+
+2
+GET #2, , byte
+ByteToSound ASC(byte)
+IF EOF(2) = 0 THEN GOTO 2
+
+CLOSE #2
+CLOSE #1
+
+PRINT "Encoding of message into sound completed"
+
+SYSTEM
+
+SUB ByteToSound (soundByte AS SINGLE)
+' Convert a byte to 8-bit wave sound data
+    soundByte = soundByte + 1
+    IF soundByte > 128 THEN
+        soundByte = soundByte - 128
+        AddIWave
+    ELSE
+        AddOWave
+    END IF
+
+    IF soundByte > 64 THEN
+        soundByte = soundByte - 64
+        AddIWave
+    ELSE
+        AddOWave
+    END IF
+
+    IF soundByte > 32 THEN
+        soundByte = soundByte - 32
+        AddIWave
+    ELSE
+        AddOWave
+    END IF
+
+    IF soundByte > 16 THEN
+        soundByte = soundByte - 16
+        AddIWave
+    ELSE
+        AddOWave
+    END IF
+
+    IF soundByte > 8 THEN
+        soundByte = soundByte - 8
+        AddIWave
+    ELSE
+        AddOWave
+    END IF
+
+    IF soundByte > 4 THEN
+        soundByte = soundByte - 4
+        AddIWave
+    ELSE
+        AddOWave
+    END IF
+
+    IF soundByte > 2 THEN
+        soundByte = soundByte - 2
+        AddIWave
+    ELSE
+        AddOWave
+    END IF
+
+    IF soundByte > 1 THEN
+        AddIWave
+    ELSE
+        AddOWave
+    END IF
+END SUB
+
+SUB AddIWave
+' Write iwaveData to the output file
+    PUT #1, , iwaveData$
+END SUB
+
+SUB AddOWave
+' Write owaveData to the output file
+    PUT #1, , owaveData$
+END SUB
+
+SUB StartProgram
+' Initialize wave data arrays
+
+    pi = 3.141592653999996#
+
+    b = 0
+    FOR a = pi / 2 TO 2.5 * pi STEP (2 * pi / 20)
+        b = b + 1
+        iwaveArray(b) = SIN(a) * 100
+        IF iwaveArray(b) < 0 THEN
+            iwaveArray(b) = iwaveArray(b) + 255
+        END IF
+    NEXT a
+
+    b = 0
+    FOR a = pi / 2 TO 2.5 * pi STEP (2 * pi / 40)
+        b = b + 1
+        owaveArray(b) = SIN(a) * 100
+        IF owaveArray(b) < 0 THEN
+            owaveArray(b) = owaveArray(b) + 255
+        END IF
+    NEXT a
+
+' Convert wave arrays to string data
+
+    FOR a = 1 TO 20
+        iwaveData$ = iwaveData$ + CHR$(iwaveArray(a))
+    NEXT a
+
+    FOR a = 1 TO 40
+        owaveData$ = owaveData$ + CHR$(owaveArray(a))
+    NEXT a
+
+END SUB
index 881ac25..a6bc393 100644 (file)
-' Svjatoslav Agejenko year: 2001\r
-' decades binary data from 8 bit wave sound file.\r
-\r
-DEFINT A-Y\r
-DECLARE SUB bysf (a$, d)\r
-DECLARE SUB messa (a$)\r
-DECLARE SUB pfo (f, t, it)\r
-DECLARE SUB anal ()\r
-DECLARE SUB start ()\r
-DECLARE SUB iadd ()\r
-DECLARE SUB oadd ()\r
-DECLARE SUB byt (a)\r
-\r
-DIM SHARED file1$\r
-DIM SHARED file2$\r
-DIM SHARED buf(-100 TO 10000)\r
-DIM SHARED bus AS STRING * 1000\r
-DIM SHARED bufi\r
-DIM SHARED bg\r
-DIM SHARED sm\r
-DIM SHARED beg\r
-DIM SHARED wai\r
-DIM SHARED old2\r
-DIM SHARED stat(1 TO 10)\r
-DIM SHARED statl\r
-DIM SHARED aver\r
-DIM SHARED byte AS STRING * 1\r
-DIM SHARED avv\r
-\r
-DIM SHARED li\r
-DIM SHARED oc\r
-DIM SHARED px\r
-\r
-start\r
-messa "searching for beginning..."\r
-\r
-OPEN "output.txt" FOR BINARY AS #1\r
-OPEN "sound.xi" FOR BINARY AS #2\r
-SEEK #2, 360\r
-\r
-2\r
-GET #2, , bus\r
-FOR a = 1 TO 1000\r
-b$ = RIGHT$(LEFT$(bus, a), 1)\r
-bufi = bufi + 1\r
-c = ASC(b$)\r
-IF c > 127 THEN c = c - 255\r
-buf(bufi) = c\r
-NEXT a\r
-IF (EOF(2) = 0) AND (bufi < 8000) THEN GOTO 2\r
-anal\r
-IF EOF(2) = 0 THEN GOTO 2\r
-\r
-CLOSE #2\r
-CLOSE #1\r
-\r
-SYSTEM\r
-\r
-SUB anal\r
-LINE (1, 170)-(200, 430), 0, BF\r
-FOR a = 1 TO bufi - (avv - 1)\r
-\r
-LINE (100, 170)-(100, 430), 13\r
-LINE (old2 - a + 100, 170)-(old2 - a + 100, 430), 11\r
-LINE (0, 300)-(200, 300), 13\r
-FOR b = 0 TO 200\r
-PSET (b, buf(b + a - 101) + 300), 0\r
-PSET (b, buf(b + a - 100) + 300), 14\r
-NEXT b\r
-LINE (old2 - a + 100, 170)-(old2 - a + 100, 430), 0\r
-\r
-c = 0\r
-FOR b = a TO a + (avv - 1)\r
-c = c + buf(b)\r
-NEXT b\r
-c = c / (avv / 2)\r
-IF c > oc THEN\r
-IF li = -1 THEN\r
-li = 1\r
-pfo a + ((avv - 1) / 2 - 1), 1, oc\r
-GOTO 3\r
-END IF\r
-END IF\r
-IF c < oc THEN\r
-IF li = 1 THEN\r
-li = -1\r
-pfo a + ((avv - 1) / 2 - 1), 2, oc\r
-GOTO 3\r
-END IF\r
-END IF\r
-3\r
-oc = c\r
-NEXT a\r
-\r
-FOR a = bufi - (avv - 2) TO bufi\r
-buf(a - (bufi - (avv - 2)) + 1) = buf(a)\r
-NEXT a\r
-old2 = old2 - (bufi - (avv - 2)) + 1\r
-bufi = avv - 1\r
-\r
-END SUB\r
-\r
-SUB bysf (a$, d)\r
-'LINE (201, 170)-(639, 430), 1, B\r
-IF d = 10 THEN px = 0: a$ = "": GOTO 5\r
\r
-px = px + 1\r
-IF px > 53 THEN\r
-px = 1\r
-5\r
-DIM tempr(1 TO 32000)\r
-GET (201, 186)-(639, 430), tempr(1)\r
-PUT (201, 170), tempr(1), PSET\r
-LINE (201, 414)-(639, 430), 0, BF\r
-END IF\r
-\r
-LOCATE 26, 26 + px\r
-PRINT a$\r
-byte = CHR$(d)\r
-PUT #1, , byte\r
-\r
-END SUB\r
-\r
-SUB byt (a)\r
\r
-'LINE (410, 0)-(639, 169), 1, B\r
-\r
-statl = statl + 1\r
-IF statl > 8 THEN\r
-statl = 1\r
-b = 0\r
-IF stat(1) = 1 THEN b = b + 128\r
-IF stat(2) = 1 THEN b = b + 64\r
-IF stat(3) = 1 THEN b = b + 32\r
-IF stat(4) = 1 THEN b = b + 16\r
-IF stat(5) = 1 THEN b = b + 8\r
-IF stat(6) = 1 THEN b = b + 4\r
-IF stat(7) = 1 THEN b = b + 2\r
-IF stat(8) = 1 THEN b = b + 1\r
-LOCATE 10, 69\r
-PRINT b\r
-LOCATE 10, 75\r
-PRINT HEX$(b)\r
-LOCATE 10, 79\r
-c$ = CHR$(b)\r
-IF b = 7 OR b = 8 OR b = 10 OR b = 12 OR b = 13 THEN c$ = " "\r
-PRINT c$\r
-bysf c$, b\r
-\r
-DIM tempr(1 TO 10000)\r
-GET (410, 16)-(639, 169), tempr(1)\r
-PUT (410, 0), tempr(1), PSET\r
-LINE (410, 153)-(639, 169), 0, BF\r
-END IF\r
-LOCATE 10, 50 + (statl * 2)\r
-stat(statl) = a\r
-PRINT a\r
-\r
-\r
-'IF a > 128 THEN a = a - 128: iadd ELSE oadd\r
-'IF a > 64 THEN a = a - 64: iadd ELSE oadd\r
-'IF a > 32 THEN a = a - 32: iadd ELSE oadd\r
-'IF a > 16 THEN a = a - 16: iadd ELSE oadd\r
-'IF a > 8 THEN a = a - 8: iadd ELSE oadd\r
-'IF a > 4 THEN a = a - 4: iadd ELSE oadd\r
-'IF a > 2 THEN a = a - 2: iadd ELSE oadd\r
-'IF a > 1 THEN iadd ELSE oadd\r
-END SUB\r
-\r
-SUB messa (a$)\r
-'LINE (0, 0)-(409, 169), 1, B\r
-DIM tempr(1 TO 20000)\r
-GET (0, 16)-(409, 169), tempr(1)\r
-PUT (0, 0), tempr(1), PSET\r
-LINE (0, 153)-(409, 169), 0, BF\r
-LOCATE 10, 1\r
-PRINT a$\r
-END SUB\r
-\r
-SUB pfo (f, t, it)\r
-IF t = 2 THEN\r
-bg = it\r
-IF wai > 0 THEN wai = wai - 1\r
-\r
-IF (bg - sm > 6) AND (beg = 0) THEN beg = 1: wai = 10: messa "Beginning point found!"\r
-\r
-IF (wai = 0) AND (beg = 1) THEN\r
-IF statl = 0 THEN messa "Beginning statistical analyze"\r
-statl = statl + 1\r
-IF statl > 10 THEN\r
-FOR a = 1 TO 10\r
-aver = aver + stat(a)\r
-NEXT a\r
-aver = aver * 1.5 / 10\r
-beg = 2\r
-statl = 1\r
-messa "Statistical analyze completed!"\r
-END IF\r
-stat(statl) = f - old2\r
-END IF\r
-\r
-IF beg = 2 THEN\r
-IF f - old2 >= aver THEN\r
-beg = 3\r
-statl = 0\r
-FOR a = 1 TO 8\r
-stat(a) = 0\r
-NEXT a\r
-GOTO 4\r
-END IF\r
-END IF\r
-\r
-IF beg = 3 THEN\r
-IF f - old2 >= aver THEN\r
-byt 0\r
-ELSE\r
-byt 1\r
-END IF\r
-END IF\r
-4\r
-\r
-old2 = f\r
-ELSE\r
-sm = it\r
-END IF\r
-END SUB\r
-\r
-SUB start\r
-\r
-SCREEN 12\r
-\r
-bufi = 0\r
-beg = 0\r
-statl = 0\r
-aver = 0\r
-px = 0\r
-avv = 7\r
-\r
-li = 1\r
-oc = -9999\r
-END SUB\r
-\r
+' Utility that decodes text message from 8 bit audio recording.
+' By Svjatoslav Agejenko.
+' Email: svjatoslav@svjatoslav.eu
+' Homepage: http://www.svjatoslav.eu
+'
+' Changelog:
+' 2001, Initial version
+' 2024.09, Improved program readability using AI
+
+DEFINT A-Y
+DECLARE SUB bysf (a$, d)
+DECLARE SUB messa (a$)
+DECLARE SUB pfo (f, t, it)
+DECLARE SUB anal ()
+DECLARE SUB start ()
+DECLARE SUB iadd ()
+DECLARE SUB oadd ()
+DECLARE SUB byt (a)
+
+DIM SHARED file1$
+DIM SHARED file2$
+DIM SHARED buf(-100 TO 10000)
+DIM SHARED bus AS STRING * 1000
+DIM SHARED bufi
+DIM SHARED bg
+DIM SHARED sm
+DIM SHARED beg
+DIM SHARED wai
+DIM SHARED old2
+DIM SHARED stat(1 TO 10)
+DIM SHARED statl
+DIM SHARED aver
+DIM SHARED byte AS STRING * 1
+DIM SHARED avv
+
+DIM SHARED li
+DIM SHARED oc
+DIM SHARED px
+
+start
+messa "searching for beginning..."
+
+OPEN "output.txt" FOR BINARY AS #1
+OPEN "sound.xi" FOR BINARY AS #2
+SEEK #2, 360
+
+2
+GET #2, , bus
+FOR a = 1 TO 1000
+    b$ = RIGHT$(LEFT$(bus, a), 1)
+    bufi = bufi + 1
+    c = ASC(b$)
+    IF c > 127 THEN c = c - 255
+    buf(bufi) = c
+NEXT a
+IF (EOF(2) = 0) AND (bufi < 8000) THEN GOTO 2
+anal
+IF EOF(2) = 0 THEN GOTO 2
+
+CLOSE #2
+CLOSE #1
+
+SYSTEM
+
+SUB anal
+    LINE (1, 170)-(200, 430), 0, BF
+    FOR a = 1 TO bufi - (avv - 1)
+
+        LINE (100, 170)-(100, 430), 13
+        LINE (old2 - a + 100, 170)-(old2 - a + 100, 430), 11
+        LINE (0, 300)-(200, 300), 13
+        FOR b = 0 TO 200
+            PSET (b, buf(b + a - 101) + 300), 0
+            PSET (b, buf(b + a - 100) + 300), 14
+        NEXT b
+        LINE (old2 - a + 100, 170)-(old2 - a + 100, 430), 0
+
+        c = 0
+        FOR b = a TO a + (avv - 1)
+            c = c + buf(b)
+        NEXT b
+        c = c / (avv / 2)
+
+        IF c > oc THEN
+            IF li = -1 THEN
+                li = 1
+                pfo a + ((avv - 1) / 2 - 1), 1, oc
+                GOTO 3
+            END IF
+        END IF
+
+        IF c < oc THEN
+            IF li = 1 THEN
+                li = -1
+                pfo a + ((avv - 1) / 2 - 1), 2, oc
+                GOTO 3
+            END IF
+        END IF
+
+    3
+        oc = c
+    NEXT a
+
+    FOR a = bufi - (avv - 2) TO bufi
+        buf(a - (bufi - (avv - 2)) + 1) = buf(a)
+    NEXT a
+
+    old2 = old2 - (bufi - (avv - 2)) + 1
+    bufi = avv - 1
+
+END SUB
+
+SUB bysf (a$, d)
+    'LINE (201, 170)-(639, 430), 1, B
+    IF d = 10 THEN px = 0: a$ = "": GOTO 5
+
+    px = px + 1
+    IF px > 53 THEN
+        px = 1
+    5
+    DIM tempr(1 TO 32000)
+    GET (201, 186)-(639, 430), tempr(1)
+    PUT (201, 170), tempr(1), PSET
+    LINE (201, 414)-(639, 430), 0, BF
+    END IF
+
+    LOCATE 26, 26 + px
+    PRINT a$
+    byte = CHR$(d)
+    PUT #1, , byte
+
+END SUB
+
+SUB byt (a)
+
+    'LINE (410, 0)-(639, 169), 1, B
+
+    statl = statl + 1
+    IF statl > 8 THEN
+        statl = 1
+        b = 0
+        IF stat(1) = 1 THEN b = b + 128
+        IF stat(2) = 1 THEN b = b + 64
+        IF stat(3) = 1 THEN b = b + 32
+        IF stat(4) = 1 THEN b = b + 16
+        IF stat(5) = 1 THEN b = b + 8
+        IF stat(6) = 1 THEN b = b + 4
+        IF stat(7) = 1 THEN b = b + 2
+        IF stat(8) = 1 THEN b = b + 1
+
+        LOCATE 10, 69
+        PRINT b
+
+        LOCATE 10, 75
+        PRINT HEX$(b)
+
+        LOCATE 10, 79
+        c$ = CHR$(b)
+
+        IF b = 7 OR b = 8 OR b = 10 OR b = 12 OR b = 13 THEN c$ = " "
+
+        PRINT c$
+
+        bysf c$, b
+
+    DIM tempr(1 TO 10000)
+    GET (410, 16)-(639, 169), tempr(1)
+    PUT (410, 0), tempr(1), PSET
+    LINE (410, 153)-(639, 169), 0, BF
+    END IF
+
+    LOCATE 10, 50 + (statl * 2)
+
+    stat(statl) = a
+
+    PRINT a
+
+    'IF a > 128 THEN a = a - 128: iadd ELSE oadd
+    'IF a > 64 THEN a = a - 64: iadd ELSE oadd
+    'IF a > 32 THEN a = a - 32: iadd ELSE oadd
+    'IF a > 16 THEN a = a - 16: iadd ELSE oadd
+    'IF a > 8 THEN a = a - 8: iadd ELSE oadd
+    'IF a > 4 THEN a = a - 4: iadd ELSE oadd
+    'IF a > 2 THEN a = a - 2: iadd ELSE oadd
+    'IF a > 1 THEN iadd ELSE oadd
+END SUB
+
+SUB messa (a$)
+    'LINE (0, 0)-(409, 169), 1, B
+
+    DIM tempr(1 TO 20000)
+
+    GET (0, 16)-(409, 169), tempr(1)
+
+    PUT (0, 0), tempr(1), PSET
+
+    LINE (0, 153)-(409, 169), 0, BF
+
+    LOCATE 10, 1
+
+    PRINT a$
+
+END SUB
+
+SUB pfo (f, t, it)
+    IF t = 2 THEN
+        bg = it
+
+        IF wai > 0 THEN wai = wai - 1
+
+        IF (bg - sm > 6) AND (beg = 0) THEN beg = 1: wai = 10: messa "Beginning point found!"
+
+        IF (wai = 0) AND (beg = 1) THEN
+            IF statl = 0 THEN messa "Beginning statistical analyze"
+
+            statl = statl + 1
+
+            IF statl > 10 THEN
+                FOR a = 1 TO 10
+                    aver = aver + stat(a)
+                NEXT a
+
+                aver = aver * 1.5 / 10
+
+                beg = 2
+
+                statl = 1
+
+                messa "Statistical analyze completed!"
+            END IF
+
+            stat(statl) = f - old2
+        END IF
+
+        IF beg = 2 THEN
+            IF f - old2 >= aver THEN
+                beg = 3
+
+                statl = 0
+
+                FOR a = 1 TO 8
+                    stat(a) = 0
+                NEXT a
+
+                GOTO 4
+            END IF
+        END IF
+
+        IF beg = 3 THEN
+            IF f - old2 >= aver THEN
+                byt 0
+            ELSE
+                byt 1
+            END IF
+        END IF
+
+    4
+
+        old2 = f
+    ELSE
+        sm = it
+    END IF
+END SUB
+
+SUB start
+
+    SCREEN 12
+
+    bufi = 0
+
+    beg = 0
+
+    statl = 0
+
+    aver = 0
+
+    px = 0
+
+    avv = 7
+
+    li = 1
+
+    oc = -9999
+
+END SUB
index 54895ba..5909734 100755 (executable)
@@ -7,9 +7,6 @@
 ' 2003, Initial version\r
 ' 2024.08, Improved program readability using AI\r
 \r
-\r
-' Svjatoslav Agejenko 2003\r
-\r
 DECLARE SUB say()\r
 DECLARE SUB laus(a$)\r
 DECLARE SUB char(a!)\r