A scrolling news display for the January 1984 issue. A framed title panel sits between two one-line windows, and each window scrolls its own message across the screen in turn. Pressing P pauses the scroll, B runs it backward and F forward again.
The messages are stored in string variables saved with the program. The first reports that Timex is building the TS-2068 in small numbers to keep its price up, that another TS-1500 production run is planned for early 1984, and that TS-1000s with a 16K RAM pack are being cleared through a national distributor for about $30. It also mentions printers, microdrives and modems that Timex had announced but not yet shipped. The second advertises Pixie, a hi-res graphics product for the 2068, offers back issues of Synchro-Sette from 10/82 at $8.00 for two issues with cassette, and ends with a short joke news item.
Program Analysis
Program Structure
Lines 100–140 print three stored block-graphic strings down the screen, then lines 150–260 draw the outer frame, the title panel and the two message boxes. Two scrolling loops alternate between the windows: 3000–3090 show the top message A$ on row 3 and 3100–3190 show the bottom message B$ on row 18. Each loop prints a 28-character slice A$(N TO N+27) and moves N on by one each pass. The reverse routines at 3200 and 3300 step N back toward 1.
Notable Techniques
- The program is started with
GOTO 100(line 9999) instead ofRUN, so the message strings in the saved variables are not cleared. - Each message starts and ends with a long run of spaces, so the text scrolls in from the right edge of the window and off the left.
Potential Issues
- The loops stop at
LEN A$-32while each slice is only 28 characters wide, so the last four characters are never shown. Because the messages end in spaces, nothing is lost.
Source Code
100 FOR N=0 TO 17
110 PRINT AT N,2;S$;AT N,0;U$
120 PRINT AT N,6;T$;AT N,0;U$
130 PRINT AT N,5;V$;AT N,0;U$
140 NEXT N
150 FOR N=1 TO 30
160 PRINT AT 0,N;"▀";AT 21,N;"▄"
170 NEXT N
180 FOR N=1 TO 20
190 PRINT AT N,0;"▌";AT N,31;"▐"
200 NEXT N
210 PRINT AT 0,0;"▛";AT 0,31;"▜";AT 21,0;"▙";AT 21,31;"▟"
220 PRINT AT 9,6;"▌[T][H][E]█[S][Y][N][C][H][R][O][-][S][E][T][T][E]▐";AT 10,6;"▌█[B][U][L][L][E][T][I][N]██[B][O][A][R][D]█▐"
230 PRINT AT 11,6;"▌ FOR ▐";AT 12,6;"▌ [J][A][N][U][A][R][Y][,]█[1][9][8][4] ▐"
240 PRINT AT 8,6;"▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜";AT 13,6;"▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟"
250 PRINT AT 2,1;"▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜";AT 3,1;"▌";AT 3,30;"▐";AT 4,1;"▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟"
260 PRINT AT 17,1;"▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜";AT 18,1;"▌";AT 18,30;"▐";AT 19,1;"▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟"
270 GOTO 3100
3000 LET A=1
3005 FOR N=A TO LEN A$-32
3010 PRINT AT 3,2;A$(N TO N+27)
3020 IF INKEY$ ="P" THEN PAUSE 40000
3030 IF INKEY$ ="B" THEN GOTO 3200
3090 NEXT N
3100 LET A=1
3105 FOR N=A TO LEN B$-32
3110 PRINT AT 18,2;B$(N TO N+27)
3120 IF INKEY$ ="P" THEN PAUSE 40000
3130 IF INKEY$ ="B" THEN GOTO 3300
3190 NEXT N
3199 GOTO 3000
3200 LET A=N
3210 FOR N=A TO 1 STEP -1
3220 PRINT AT 3,2;A$(N TO N+27)
3230 IF INKEY$ ="P" THEN PAUSE 40000
3240 IF INKEY$ ="F" THEN GOTO 3270
3250 NEXT N
3260 GOTO 3000
3270 LET A=N
3299 GOTO 3005
3300 LET A=N
3310 FOR N=A TO 1 STEP -1
3320 PRINT AT 18,2;B$(N TO N+27)
3330 IF INKEY$ ="P" THEN PAUSE 40000
3340 IF INKEY$ ="F" THEN GOTO 3370
3350 NEXT N
3360 GOTO 3100
3370 LET A=N
3399 GOTO 3105
9997 STOP
9998 SAVE "BULLETI[N]"
9999 GOTO 100Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
