--- title: "Cassette Label" id: 54566 type: "computer_media" slug: "cassette-label" url: "http://localhost/computer_media/cassette-label/" markdown_url: "http://localhost/computer_media/cassette-label.md" published_at: "2024-06-02T17:38:33+00:00" modified_at: "2026-03-30T21:29:23+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2024/06/SCR-20240714-erxl.png" excerpt: "Enter two tape titles and this program prints a ready-to-fold cassette case label complete with cut lines, fold guides, and fitting instructions." 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 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" genre: - name: "Tape Directory" slug: "tape-directory" taxonomy: "genre" url: "http://localhost/type/tape-directory/" media_contents: - id: 51214 title: "CATS Library Tape 8" type: "computer_media" url: "http://localhost/computer_media/cats-library-tape-8/" - id: 55923 title: "Timex Sinclair Public Domain Library Tape 2003" type: "computer_media" url: "http://localhost/computer_media/timex-sinclair-public-domain-library-tape-2003/" media_type: "Program" mediadate: "198x" images: - url: "http://localhost/wp-content/uploads/2024/06/SCR-20240714-erxl.png" media_type_tags: "Tape Directory" --- This program generates printed cassette tape case labels by outputting formatted text to both the screen and a printer via paired PRINT and LPRINT statements. It prompts the user for Side A and Side B titles, then lays out a label with dashed and solid dividing lines, spacing loops, and fold guides intended to fit inside a cassette case’s clear window. The instruction subroutine at line 1000 explains how to cut, trim, fold, and optionally cement the printed label to the cassette. String widths in the instruction text are manually wrapped to fit the printer’s line width by breaking words across lines within the string literals. *** ## Program Analysis ### Program Structure The program is divided into three logical sections: 1. **Title banner (lines 5–39):** Displays an on-screen title card, calls the instruction subroutine, and prints separator lines. 2. **Label body (lines 40–200):** Collects Side A and Side B titles via `INPUT`, then prints and LPRINTs the formatted cassette label with spacing, dividers, and fold markers. 3. **Instruction subroutine (lines 1000–1090):** Outputs usage instructions both to screen and printer, then returns. Line 1100 is a redundant `STOP` after the `RETURN`. ### Parallel PRINT / LPRINT Pattern Nearly every output statement appears in pairs: a `PRINT` to the screen immediately followed by an `LPRINT` to the printer. This keeps the screen display and the hard-copy output synchronized. The same pattern is applied inside the subroutine. A minor exception is line 1040, which sends two lines only to the printer (`LPRINT`), not to the screen — the “BETTER THAN TYPING…” message is printer-only. ### Spacing and Layout Vertical spacing is controlled by `FOR` loops that emit blank lines, e.g., `FOR I=1 TO 20: PRINT : LPRINT : NEXT I` at line 60 to advance paper before the label content begins. Horizontal alignment uses `TAB` at lines 165–166 to center “END OF PROGRAM” between border asterisks. Dividing lines alternate between dashes (`---…`) and asterisks (`***…`) to visually distinguish cut/fold boundaries. ### Manual Word Wrap in String Literals The instruction text in lines 1010–1031 is manually broken to fit the printer’s column width. Words are split across string boundaries mid-word (e.g., `"con-tents"`, `"perm- anently"`) rather than at natural word boundaries. This is a deliberate layout technique to keep each string segment exactly the right width for the output device, avoiding unwanted line wrapping on narrow printers. ### Subroutine and Flow Control The subroutine at line 1000 is called via `GO SUB 1000` at line 36 and terminates with `RETURN` at line 1090. Line 1100 contains a `STOP` that is unreachable — the `RETURN` at 1090 always transfers control back to the caller before 1100 is reached. The main program ends with `STOP` at line 200. Line 9999 contains a `SAVE` with `LINE 1` for auto-run on load. ### Variables | Variable | Purpose | | --- | --- | | `A$` | User-entered title for Side A | | `B$` | User-entered title for Side B | | `I` | Loop counter for blank-line spacing | ### Anomalies and Notes - Line 1100 (`STOP`) is dead code; it follows a `RETURN` and can never execute. - The `PAUSE 100: CLS` at line 39 gives the user a moment to read the on-screen banner before clearing, a common interactive UX idiom. - Line 60 advances 20 blank lines before the label — likely to skip over any printer header area and position the label correctly on the paper relative to the cassette case window. - The instruction text hyphenates words across string literals (`"con-tents"`, `"perm- anently"`) to hit exact column counts for the printer, which is a pragmatic but unusual formatting approach. ## Source Code ``` 5 REM ** Titles for top of cassette case. 10 PRINT "********************************" 15 PRINT "** **" 20 PRINT "** PROGRAM: CstteLabel **" 25 PRINT "** **" 30 PRINT "** by R Clough 8/18/85 **" 35 PRINT "********************************": PRINT : PRINT 36 GO SUB 1000 37 PRINT "--------------------------------" 38 LPRINT "--------------------------------" 39 PAUSE 100: CLS : PRINT "*": LPRINT "*" 40 REM * Titles for end window of cassette case. 41 PRINT "Title SIDE A" 45 INPUT A$ 50 PRINT "Title SIDE B" 55 INPUT B$ 60 CLS : FOR I=1 TO 20: PRINT : LPRINT : NEXT I 61 LPRINT "________________________________" 65 PRINT "SIDE A- ";A$: LPRINT "SIDE A- ";A$ 70 PRINT "SIDE B- ";B$: LPRINT "SIDE B- ";B$ 85 FOR I=1 TO 7: PRINT : LPRINT : NEXT I 110 PRINT "--------------------------------" 111 LPRINT "--------------------------------" 115 PRINT "SIDE A- ";A$: LPRINT "SIDE A- ";A$ 120 FOR I=1 TO 4: PRINT : LPRINT : NEXT I 125 PRINT "--------------------------------" 126 LPRINT "--------------------------------" 130 PRINT "SIDE B- ";B$: LPRINT "SIDE B- ";B$ 135 FOR I=1 TO 4: PRINT : LPRINT : NEXT I 140 PRINT "--------------------------------" 141 LPRINT "--------------------------------" 145 FOR I=1 TO 4: PRINT : LPRINT : NEXT I 160 PRINT "********************************" 161 LPRINT "********************************" 165 PRINT "*";TAB 9;"END OF PROGRAM";TAB 31;"*" 166 LPRINT "*";TAB 9;"END OF PROGRAM";TAB 31;"*" 170 PRINT "********************************" 171 LPRINT "********************************" 175 FOR I=1 TO 3: PRINT : LPRINT : NEXT I 200 STOP 1000 PRINT " Cassette Label Instructions": PRINT 1001 LPRINT : LPRINT : LPRINT " Cassette Label Instructions": LPRINT 1010 PRINT " Use this label for cassette case. It will indicate the con-tents through the plexiglass." 1011 LPRINT " Use this label for cassette case. It will indicate the con-tents through the plexiglass." 1020 PRINT "If you cut where the dotted lineindicates, and trim the left edge so it fits the case, then fold on the solid line, you should have a good fit!" 1021 LPRINT "If you cut where the dotted lineindicates, and trim the left edge so it fits the case, then fold on the solid line, you should have a good fit!" 1030 PRINT : PRINT " Another idea. You can paste the label to the cassette perm- anently with rubber cement at the same time you punch out the tabs." 1031 LPRINT : LPRINT " Another idea. You can paste the label to the cassette perm- anently with rubber cement at the same time you punch out the tabs." 1040 LPRINT : LPRINT "BETTER THAN TYPING OR WRITING IT BY HAND, EH?" 1045 FOR I=1 TO 5: PRINT : LPRINT : NEXT I 1090 RETURN 1100 STOP 9999 SAVE "cssetlabel" LINE 1 ```