--- title: "Rip-Off" id: 57640 type: "computer_media" slug: "rip-off" url: "http://localhost/computer_media/rip-off/" markdown_url: "http://localhost/computer_media/rip-off.md" published_at: "2024-10-06T01:13:49+00:00" modified_at: "2026-03-30T21:16:41+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2024/10/rip-off.png" excerpt: "A two-part animated title screen scrolls \"SYNCHRO-SETTE PRESENTS\" onto the display using clever substring tricks, then delivers a cheeky punchline before looping forever." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 1000" slug: "ts1000" taxonomy: "post_tag" url: "http://localhost/tag/ts1000/" model: - name: "Timex/Sinclair 1000" slug: "ts-1000" taxonomy: "model" url: "http://localhost/model/ts-1000/" indiv: - name: "Gene G. Buza" slug: "gene-g-buza" taxonomy: "indiv" url: "http://localhost/indiv/gene-g-buza/" genre: - name: "Entertainment" slug: "entertainment" taxonomy: "genre" url: "http://localhost/type/entertainment/" media_contents: - id: 56727 title: "Synchro-Sette October 1982" type: "computer_media" url: "http://localhost/computer_media/synchro-sette-october-1982/" media_type: "Program" programmers: - name: "Gene G. Buza" slug: "gene-g-buza" taxonomy: "indiv" url: "http://localhost/indiv/gene-g-buza/" mediadate: "October 1982" images: - url: "http://localhost/wp-content/uploads/2024/10/rip-off.png" media_type_tags: "Entertainment, Software" --- # Rip-Off This program is an animated title-screen routine that displays the text “SYNCHRO-SETTE PRESENTS” using two distinct scroll effects before segueing into a short comedic “NOTHING AT ALL.” animation. The first animation scrolls the string “%S%Y%N%C%H%R%O%-%S%E%T%T%E” character by character from the right side of the screen toward the centre using a FOR/NEXT loop with a decreasing column index. The second animation slides ” PRESENTS” in from the right by progressively revealing more characters via a substring slice (B$(10-B TO 9)), creating a wipe-on effect. *** ## Program Analysis ### Program Structure The program is divided into five functional phases: 1. **Lines 5–70:** Animate the string `A$` (“SYNCHRO-SETTE “) scrolling in from the right at row 10. 2. **Lines 80–130:** Wipe ” PRESENTS” onto the screen at row 12 from the right. 3. **Lines 140–189:** Display the punchline — “NOTHING” slides down and “AT ALL.” slides up — separated by `CLS` calls. 4. **Line 190:**`PAUSE 100` holds the blank screen before the loop. 5. **Lines 200–220:**`RUN` restarts the whole sequence; lines 210–220 are dead code providing a `SAVE` statement that is never reached. ### First Animation — Character Reveal Scroll (Lines 5–70) The column counter `N` runs from 31 down to 8, moving the print position leftward each iteration. Simultaneously, `A` counts up so that `A$(1 TO A+1)` reveals one additional character per step. The guard at line 40 (`IF A>=LEN A$ THEN LET A=A-1`) clamps `A` so the substring expression never exceeds the string length, preventing a “Subscript out of range” error once the full string is exposed. A trailing space after the slice erases the previous rightmost character as the block moves left. ### Second Animation — Right-Wipe Reveal (Lines 80–130) This phase uses a different approach: the column offset `A` is incremented (line 100) only after `N` has passed `LEN B$`, nudging the print position one column right once the string is fully visible. The reveal itself is achieved by the slice `B$(10-B TO 9)`, where `B` starts at 1 and increases, so the printed portion grows from the right-hand end of the nine-character string. Line 95 clamps `B` at 9 to avoid an out-of-range subscript once the full string is showing. | N | B (clamped) | Slice printed | | --- | --- | --- | | 0 | 1 | B$(9 TO 9) → “S” | | 1 | 2 | B$(8 TO 9) → “TS” | | … | … | … | | 8 | 9 | B$(1 TO 9) → ” PRESENTS” | ### Punchline Animation (Lines 150–189) Two simple vertical scroll effects deliver the joke. “NOTHING” is printed at successively lower rows (line 160, `AT N,11`) while a blank overwrite one row above clears the trail (line 158). After a `CLS`, the process is reversed for “AT ALL.”: `N` counts down from 20 to 0 so the word appears to rise up the screen, again with a one-row-ahead blank. ### Notable Techniques - **Substring clamping:** Both animations use explicit guards to keep slice indices in range rather than relying on error handling, which was necessary given the lack of structured exception handling in standard BASIC. - **Single-space erasure:** Printing a literal `" "` immediately after each moving string clears the trailing edge without needing `CLS`, preserving the rest of the display. - **Dead-code SAVE:** Lines 210–220 are unreachable because `RUN` at line 200 resets execution to line 5. The `SAVE "RIP-OF%F"` filename is a self-referential joke about the cassette distribution medium (“Synchro-Sette”). ## Source Code ``` 5 LET A=0 10 LET A$="%S%Y%N%C%H%R%O%-%S%E%T%T%E " 20 LET B$=" PRESENTS" 30 FOR N=31 TO 8 STEP -1 40 IF A>=LEN A$ THEN LET A=A-1 50 PRINT AT 10,N;A$(1 TO A+1);" " 60 LET A=A+1 70 NEXT N 80 LET A=0 85 LET B=1 90 FOR N=0 TO 16 95 IF B>=9 THEN LET B=9 100 IF N>=LEN B$ THEN LET A=A+1 110 PRINT AT 12,A;" ";B$(10-B TO 9) 120 LET B=B+1 130 NEXT N 140 PAUSE 100 150 CLS 152 FOR N=1 TO 21 158 PRINT AT N-1,11;" " 160 PRINT AT N,11;"NOTHING" 167 NEXT N 180 CLS 182 FOR N=20 TO 0 STEP -1 183 PRINT AT N+1,12;" " 184 PRINT AT N,12;"AT ALL." 188 NEXT N 189 CLS 190 PAUSE 100 200 RUN 210 SAVE "RIP-OF%F" 220 RUN ```