Here we are going to discuss program SeqPar.B6, which SOL BBS uses in order to compose messages, to be uploaded to The Net or to other BBSs.
It is accessed, by a PRESS of “6” at the TeleCom Main Menu or by a press of “a” at the Word Processing Main Menu.
We refer to it as “messageWRITER” in the TeleCom menu. But, SeqPar is really the heart of Bill Jones’ BASIC CODE for implementing sequential paragraph files in Udbm.B6, his suite of all data base managers for the 2068.
We have so selected SeqPar.B6 for two reasons:
1. SPEED of textual entry
2. LACK of control codes
As can be seen from the enclosed listing, the 2068 does most of its work inside “cat.Cl”, machine code at 24355 or rapidly building a character string out of our keyboard entries. Please see line #150! That’s why SeqPar is so fast. The only control code, left in the resulting text file, is a CHR$ 13 (ENTER, according to the User Manual.) ENTER is used as a record separator, where the record is a paragraph, in this case, and the paragraph is of variable length and contains sentences.
So. what’s with sequential paragraph files and SOL BPS, anyway?
Well, the software we use is a glorification of Larry Kenny’s MaxCom, and it has difficulties, telecommunication with modern equipment and/or software, especially as control codes frequently cause MaxCom to leave its rapid MC for special servicing by slower BASIC code.
We have included a simple menu of SeqPar options, coded inline so as not to require a separate screen string of perhaps two disc blocks. You can see it as the second command of line 1094. Also, the machine code, cal.Cl, is already on RAMDISK for use with the Daisy routines. After all, RAMDISK allows 48 tracks/blocks, at most!
2457 ON ERR RESET : RANDOMIZE USR CODE "d": CLOSE #VAL "5": LET m$="": GO TO VAL "1093"
4000 CLS : GO SUB VAL "520": RANDOMIZE USR CODE "d": CAT "";: INPUT "Sqp File # to Read ? "; LINE z$: BEEP VAL "0.2",VAL "24": INPUT "The File will be read into Chr Files having a single [illegible].A$ [illegible] for SAVING ? "; LINE m$: LET y$=m$+".A$": CLS : LET z$="Sqp"+z$+".A$ IN ": RANDOMIZE USR CODE "d": OPEN #VAL "5",z$
4002 LET x=CODE "": ON ERR GO TO VAL "4006": FOR n=1 TO 40000: INPUT #5; LINE n$: IF x<LEN n$ THEN LET x=LEN n$
4004 NEXT n
4006 ON ERR RESET : DIM h$(VAL "7",x): RANDOMIZE USR CODE "d": CLOSE #VAL "5": LET last=CODE "": LET rn=CODE ""
4008 RANDOMIZE USR CODE "d": OPEN #VAL "5",z$
4010 ON ERR GO TO VAL "4020": FOR n=1 TO 7: INPUT #5; LINE h$(n): LET rn=rn+1: NEXT n: ON ERR RESET
4012 RANDOMIZE USR CODE "d": CLOSE #VAL "5": PRINT #RND;"SAVING ";[illegible]: RANDOMIZE USR CODE "d": SAVE y$ DATA h$(): IF NOT last THEN LET m$=STR$ (VAL m$+VAL "1"): LET y$=m$+".A$": RANDOMIZE USR CODE "d": OPEN #VAL "5",z$: FOR n=1 TO rn: INPUT #5; LINE n$: NEXT n: LET n$="": DIM h$(VAL "7",x): GO TO VAL "4010"
4016 RANDOMIZE USR CODE "d": CLOSE #VAL "5": GO TO VAL "1093"
4020 ON ERR RESET : LET last=NOT last: GO TO (h$(1)<>" ")*VAL "4012"+(h$(1)=" ")*VAL "4016"
9997 CLS : PRINT #RND;"NEW Program Disc, DD# ? ";: GO SUB 600: RETURN
9998 CLS : RANDOMIZE USR CODE "d": POKE VAL "8200",VAL "8195": LET z=USR CODE "n": LET z=INT (VAL "1"/VAL "2"+LN z/LN VAL "2")-VAL "1": LET pd=(z AND z<PI)+(VAL "4" AND PI<z): GO TO VAL "1092"
9999 CLEAR : GO SUB VAL "9997": RANDOMIZE USR CODE "d": SAVE "Se[illegible]
150 RANDOMIZE USR 24355
155 LET a=PEEK 24314: LET b=PEEK 24313: LET c=PEEK 23560: LET a1=PEEK 24311+256*PEEK 24312
160 ON ERR GO TO CODE " DRAW "
164 GO SUB 365
170 IF c=12 THEN GO TO 370
175 IF c=8 THEN GO TO 290
180 IF c=9 THEN GO TO 275
185 IF c=10 THEN GO TO 265
190 IF c=11 THEN GO TO 255
215 IF c=7 THEN GO TO 310
220 IF c=96 THEN GO TO 386
225 IF c=1[illegible] THEN GO TO 150
230 IF c<7 OR c=14 THEN GO TO 3[illegible]
235 POKE 23611,220
238 IF PEEK 23611<=220 THEN GO TO 238
240 LET c=PEEK 23560: POKE 23611,220: IF 32<=c AND c<>96 THEN GO TO 300
250 GO TO 1[illegible]
252 ON ERR RESET : GO TO 150
255 LET a=a-1: LET a1=a1-32: IF a<0 THEN LET a=0: IF a1<b THEN LET a1=b
256 GO TO 301
265 LET a=a+1: LET a1=a1+32: IF LEN u$<a1+64 THEN BEEP 0.2,14: RANDOMIZE USR 24355
266 IF 14<=a THEN LET a=14:
267 IF LEN u$<a1-b+1-a*32+481 THEN PRINT AT 0,0;u$(a1-b+1-a*32 TO );
268 IF a<14 AND a1-b+1-a*32+480<LEN u$ THEN PRINT AT 0,0;u$(a1+1-b-a*32 TO a1-b+1-a*32+480);
269 IF 14<=a AND a1-b+1-a*32+480+64<LEN u$ THEN PRINT AT 0,0;u$(a1+1-b-a*32 TO a1+1-b-a*32+480+64);
270 GO TO 305
275 LET a1=a1+1: LET b=b+1: IF b=32 THEN LET b=0: LET a=a+1: IF a>21 THEN LET a=a-1: LET b=31: LET a1=a1-1
280 IF LEN U$<A1 THEN LET A1=A1-1: LET B=B-1: IF B=-1 THEN LET B=31: LET A=A-1
285 GO TO 305
290 LET b=b-1: LET a1=a1-1: IF b=-1 THEN LET b=31: LET a=a-1: IF a=-1 THEN LET b=0: LET a=0: LET a1=a1+1
295 GO TO 305
300 PRINT AT a,b;CHR$ c;: LET u$=u$( TO a1)+CHR$ c+u$(a1+1 TO ): LET b=b+1: LET a1=a1+1: IF b=32 THEN LET b=0: LET a=a+1
301 IF LEN u$<a1-b+1-a*32+481 THEN PRINT AT 0,0;u$(a1-b+1-a*32 TO );
302 IF a1-b+1-a*32+480<LEN u$ THEN PRINT AT 0,0;u$(a1-b+1-a*32 TO a1-b+1-a*32+480);
305 PRINT AT a,b; OVER 1;"_";: GO TO CODE " FOR "
310 LET d1=(1 AND d1<=0)+(2 AND 0<d1): LET d2=(a1 AND d1<=1)+(d2 AND 1<d1): IF d1=2 AND d2<a1 THEN LET l$=u$(d2+1 TO a1+1): LET u$=u$( TO d2)+u$(a1+2 TO ): LET d2=0: LET d1=0: LET a4=1: GO TO 390
312 IF d1=2 AND d2<a1 THEN LET d1=0: LET a4=1: LET d2=0: GO TO 390
335 IF d1=1 THEN PRINT #RND;AT 0,0; INVERSE 1;"Position Cursor to BLOCK END, Then EDIT": PRINT AT a,b; OVER 1; FLASH 1;"_";: BEEP 0.2,15: GO TO CODE " FOR "
340 IF d1=2 THEN LET a4=1: GO TO 390
365 PRINT #RND;AT 0,0;"[illegible]";: RETURN
370 PRINT AT a,b-1;"_";
371 IF 0<a1 THEN LET u$=u$( TO a1-1)+u$(a1+1 TO ): IF LEN u$<a1 THEN GO TO 150
372 LET b=b-1: LET a1=a1-1: IF b<0 THEN LET a=a-1: LET b=31: IF a<0 THEN LET a=0
37[illegible] GO TO 301
386 PRINT INVERSE 1; OVER 1;AT a,b;"█"; OVER 0;#RND;AT 0,0;"BLOCK INSERT"; INVERSE 0;" <1> To Insert L$ <2> Insert Typing": PAUSE 0: LET z=CODE INKEY$-CODE "0": LET a3=z: LET a4=z: IF a4<1 OR 2<a4 THEN GO TO 386
389 IF a4=1 THEN LET u$=u$( TO a1)+l$+u$(a1+1 TO )
390 IF a4=1 THEN PRINT #RND;AT 0,0;" ": GO SUB 365: GO TO 301
391 PRINT AT 18,0;"Type the Insert, OR ERASE Quotesand enter String name to insert.": INPUT m$: LET u$=u$( TO a1)+m$+u$(a1+1 TO ): PRINT AT 18,0;" ": PRINT #RND;AT 0,0;" ": GO TO 301
392 GO TO 396
393 PRINT #5;u$: LET u$="": PRINT AT 20,0;"<1> More TEXT -or- <2> QUIT": PAUSE 0: LET qs=CODE INKEY$-CODE "0": IF qs<1 OR 2<qs THEN INPUT ;: GO TO 393
394 IF qs=1 THEN GO TO 150
395 RANDOMIZE USR CODE "d": CLOSE #5: CLS : GO TO 1092
396 GO TO 393
520 CLS : PRINT #RND;"Data Disc DD# ? ";: GO SUB 600: RETURN
530 RANDOMIZE USR CODE "d": GO TO pd: RETURN
600 PAUSE CODE "": LET d=CODE INKEY$-CODE "0": PRINT #RND;d: RANDOMIZE USR CODE "d": GO TO d: RETURN
610 PAUSE CODE "": LET z=CODE INKEY$-CODE "0": PRINT #RND;z: RETURN
1000 RANDOMIZE USR CODE "d": GO TO VAL "4": RANDOMIZE USR CODE "d": NEW
1092 INK VAL "0": BORDER VAL "1": PAPER VAL "7"
1093 ON ERR RESET : CLS : GO SUB VAL "530": LET qq=CODE "": LET xy=CODE "": LET ck=CODE "": LET cr=CODE ""
1094 CLS : PRINT '"ENTER SEQUENCIAL PARAGRAPH FILES""<0> input/edit "''"<1> view/NOEDIT "''"<2> QUIT": GO SUB VAL "610": GO TO (z<VAL "0" OR VAL "2"<z)*VAL "1094"+(z=VAL "0")*VAL "1096"+(z=VAL "1")*VAL "2464"+(z=VAL "2")*VAL "1000"
1096 LET d1=CODE "": LET d2=CODE "": LET xy=CODE "": RANDOMIZE USR CODE "d": LOAD "cat.C1"CODE : LET u$="": GO SUB VAL "520": RANDOMIZE USR CODE "d": CAT "Sqp[illegible]";: INPUT "[illegible]"; LINE s$: LET y$="Sqp"+s$+".A$ OUT ": RANDOMIZE USR CODE "d": OPEN #VAL "5",y$: GO TO VAL "150"
2464 GO SUB VAL "520": RANDOMIZE USR CODE "d": CAT "Sqp[illegible]";: INPUT "[illegible]"; LINE w$: CLS : LET w$="Sqp"+w$+".A$ IN ": RANDOMIZE USR CODE "d": OPEN #VAL "5",w$: POKE VAL "23692",CODE "": ON ERR GO TO VAL "2467": FOR n=1 TO 40000: LET u$="": INPUT #5; LINE u$: PRINT u$'#RND;"[illegible]q to QUIT !": PAUSE CODE "": LET y$=INKEY$: GO TO (y$=" COPY " OR y$="q")*VAL "2"+VAL "2465"
2465 PRINT "--------------------------------": NEXT n
2467 ON ERR RESET : RANDOMIZE USR CODE "d": CLOSE #VAL "5": LET m$="": GO TO VAL "1093"
9997 CLS : PRINT #RND;"NEW Program Disc, DD# ? ";: GO SUB 600: RETURN
9998 CLS : RANDOMIZE USR CODE "d": POKE VAL "8200",VAL "8195": LET z=USR CODE "n": LET z=INT (VAL "1"/VAL "2"+LN z/LN VAL "2")-VAL "1": LET pd=(z AND z<PI)+(VAL "4" AND PI<z): GO TO VAL "1092"
9999 CLEAR : GO SUB VAL "9997": RANDOMIZE USR CODE "d": SAVE "SeqPar.B6" LINE VAL "9998": GO TO VAL "9998"
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.