Compucolor.org – Virtual Media

Listing of file='BSPNTR.BAS;01' on disk='vmedia/chip_22-sector.ccvf'

64000 REM  *** COPYRIGHT (C) 1980 BY COLORSOFT ***
64010 REM    WRITTEN BY DENNIS L. MARTIN
64020 REM               8470 OHERN STREET
64030 REM               OMAHA, NE  68127
64040 REM               402-331-7099
64050 REM  THIS PROGRAM IS DESIGNED TO TRANSMIT CLEAR ASCII TEXT
64060 REM  FROM THE COMPUCOLOR II TO A PRINTER.
64070 REM  IT ASSUMES THAT THE PRINTER DOES ALL PAGING AND PERFORATION
64080 REM  SKIPS.  IF YOUR PRINTER DOES NOT HAVE THESE FUNCTIONS THEN
64090 REM  THEN FOLLOWING MODS WILL HAVE TO BE MADE:
64100 REM  1. FOR EVERY OUT 6,13 INCREMENT A COUNTER
64110 REM  2. WHEN THE COUNTER REACHES THE DESIRED LIMIT, SEND
64120 REM     OUT ENOUGH LINEFEEDS TO TAKE YOU TO THE TOP OF THE
64130 REM     NEXT PAGE. (YOU CAN ALSO PUT PAGE #'S ON THEM)
64140 REM  3. RESET YOUR COUNTER AND YOU'RE READY TO CONTINUE.
64145 REM
64150 REM  THIS PATCH SHOULD BE ADDED TO THE BASIC PROGRAM
64160 REM  YOU WISH TO LIST. THEN 'RUN 65000' WILL PRINT THE
64170 REM  LISTING UNTIL THE FIRST 'END' IS FOUND.
64180 REM
64190 LIST :END
64195 REM
64999 REM  **THIS VERSION IS SET TO GO TO A PRINTER @ 1200 BAUD**
65000 DIM T$(200):REM  SET UP DIM FOR TOKEN VALUES
65005 RESTORE 65190
65010 FOR Y= 1TO 127:T$(Y)= "":NEXT :FOR Y= 128TO 197:READ T$(Y):NEXT :REM  FILL T$ WITH TOKENS
65020 AD(1)= 256* PEEK (32983)+ PEEK (32982):REM  FIND END OF BASIC PROGRAM
65030 AD(2)= 33434
65040 FOR X= AD(2)TO AD(1)
65045 Z= 0
65050 X= X+ 2:LN= 256* PEEK (X+ 1)+ PEEK (X):REM  SKIP STARTING ADDR FOR NEXT INSTRUCTION AND DETERMINE LINE NUMBER
65060 LN$= STR$ (LN):LN$= RIGHT$ (LN$,LEN (LN$)- 1):REM  CONVERT LINE # TO STRING AND SUBTRACT IMPLIED SPACE
65065 IF LEN (LN$)< 5THEN LN$= " "+ LN$:GOTO 65065
65070 OUT 6,13:OUT 6,10:FOR D= 1TO 35:NEXT :FOR O= 1TO LEN (LN$):OUT 6,ASC (MID$ (LN$,O,1)):REM  OUTPUT CR & LF - GIVE CARRIAGE TIME TO RETURN
65080 FOR D= 1TO 5:NEXT :Z= Z+ 1
65090 NEXT :OUT 6,32:Z= Z+ 1
65100 X= X+ 2:REM  BUMP MEMORY PAST LINE NUMBER
65110 IF Z> = 75THEN GOSUB 65232:REM  Z CONTROLS LINE LENGTH
65115 IF PEEK (X)= 0THEN NEXT :REM  END OF LINE ?
65120 IF PEEK (X)< 32THEN X= X+ 1:GOTO 65110:REM  CONTROL CHAR ? IF SO SKIP IT
65130 IF PEEK (X)= > 128AND PEEK (X)< = 197THEN 65150:REM  IS IT A TOKEN ?
65131 REM  NOW CHECK TO SEE IF IT'S A COLON AND WHETHER IT IS AT END OF LINE OR IN TEXT. IF SEPERATOR DO A CR & LF AND TAB IN TO CONT.
65132 IF PEEK (X)= 58AND PEEK (X+ 1)< > 32AND PEEK (X- 1)< > 32THEN OUT 6,13:OUT 6,10:FOR D= 1TO 6:OUT 6,32:NEXT :Z= 10
65140 OUT 6,PEEK (X):Z= Z+ 1:FOR D= 1TO 5:NEXT :X= X+ 1:GOTO 65110:REM  NONE OF THE ABOVE -- SEND IT.
65150 FOR O= 1TO LEN (T$(PEEK (X))):OUT 6,ASC (MID$ (T$(PEEK (X)),O,1)):REM  SEND A TOKEN
65160 FOR D= 1TO 5:NEXT :Z= Z+ 1
65170 NEXT :IF PEEK (X)= 128THEN OUT 6,13:OUT 6,10:OUT 6,10:GOTO 65240:REM  BAILOUT FOR THIS PROGRAM IS AN 'END' STATEMENT
65180 X= X+ 1:GOTO 65110:REM  GO GET NEXT BYTE
65185 REM  ******* TOKEN TABLE *******
65190 DATA "END ","FOR ","NEXT ","DATA ","INPUT ","DIM ","READ ","FILE ","GOTO ","RUN ","IF ","RESTORE ","GOSUB "
65200 DATA "RETURN ","REM ","GET ","OUT ","PUT ","PLOT ","SAVE ","LOAD ","POKE ","PRINT ","LIST ","CONT "
65210 DATA "CLEAR ","DEF ","WAIT ","ON ","TAB( ","TO ","FN ","SPC( ","THEN ","NOT ","STEP ","+ ","- ","* ","/ ","^ "
65220 DATA "AND ","OR ","> ","= ","< ","SGN ","INT ","ABS ","CALL ","FRE ","INP ","POS ","SQR ","RND ","LOG "
65230 DATA "EXP ","COS ","SIN ","TAN ","ATN ","PEEK ","LEN ","STR$ ","VAL ","ASC ","CHR$ ","LEFT$ ","RIGHT$ ","MID$ "
65232 OUT 6,13:OUT 6,10:FOR D= 1TO 6:OUT 6,32:Z= 10:NEXT :RETURN :REM  CONTROLS CR & LF WITH TAB FOR MULTIPLE STATEMENT LINES
65240 END