! SPCPRT.BAS 2.1 - PRINT ANY LIST BY COLUMNS 03/84 ENO
!
! AM-1000
!
! Contributed to AMUS: 07/11/84
! Author: Evan N. Oulashin
! Portland Radio Supply
! 1234 SW Stark St.
! Portland, Or. 97205
! 503-225-0035 (private line, do not publish)
!
! Will take directory listings, name listings, what have you, and
! format for x columns depending on selected (or determined) input
! line length. Prints in columns across page (wide/narrow paper).
!
! As written, this program likes a lot of memory (100k or so) if
! printing short lines (which result in many entries per page).
!
! Original design was to print nice directory listings. At the
! end of this listing, there is a command file to create a
! directory of the system and sort it.
!
! Is now set for Toshiba 1351 printer.
! To adapt to other printers, edit lower area of program for
! proper print format codes (condensed, lines/chars per inch, etc.)
!
! SET OKI = 1 FOR OKIDATA PRINTERS
!
MAP1 FIL'DEFS
MAP2 INLINE(950) ,S,80 ! (le hogge' de memorie)
MAP2 TITLE ,S,80
MAP2 INFILE ,S,15
MAP2 OUTFILE ,S,15 ,"SPCPRT.OUT"
MAP2 PLINE ,S,224
MAP2 SPACES ,S,80
MAP2 CND ,B,1 ,0
MAP2 WIDE ,B,1 ,0
!
MAP2 OKI ,B,1 ,0
MAP2 TOSHI ,B,1 ,1
!
! Map in other printer names and flags for additional flexibility.
! To do so you will need to edit bottom of program.
! One could add a "select printer" to input prompting for flair.
!
XCALL NOECHO
PRINT TAB(-1,0)
LINECOUNT = 70
SPACES = SPACE(80)
INF:
INFILE = ""
INPUT "FILENAME TO PRINT ---> ";INFILE
IF INFILE = "" GOTO QUIT
INPUT "TITLE ---------------> ";TITLE
TITLE[70,73] = "PAGE"
SPINCR = 8
INPUT "SELECT TYPE STYLE (1=DP, 2=DP CONDENSED, 3=CORRESP.)";TYPE
IF TYPE = 0 TYPE = 2
IF TYPE = 2 CND = 1
INPUT "FORCE INPUT LENGTO TO> ";FLEN
INPUT "WIDE PAPER (Y/N) ----> ";A$: IF A$ = "Y" WIDE = 1
WIDTH = 80
IF CND XOR WIDE WIDTH = 136
IF CND AND WIDE WIDTH = 224
INPUT "SPOOL RESULT (Y/N)--> ";A$: IF A$ = "Y" THEN IMMED = 1
CALL GETLEN ! GET LINE LENGTH
COLCT = INT(WIDTH/(LINLEN+1))
ARRCT = LINECOUNT * COLCT
PRINT "USING ARRAY COUNT OF ";ARRCT
! LINLEN = INT(WIDTH/COLCT)
OPEN #14,OUTFILE,OUTPUT
CALL TITE ! MAX LINES PER PAGE
IF CND CALL CONDENSE
CALL OPEN'INFILE
CALL PAGIT
LOOP:
FOR L = 1 TO ARRCT
INLINE(L) = SPACE(LINLEN+5)
NEXT L
FOR L = 1 TO ARRCT
IXT2:
INPUT LINE #1,INLINE(L)
IF EOF(1) ENDFLAG = 1: GOTO OUTIT
IF INLINE(L) = SPACES GOTO IXT2 ! IGNORE BLANK LINES
TOTCNT = TOTCNT + 1
NEXT L
OUTIT:
FOR L = 1 TO LINECOUNT
PLINE = SPACE(WIDTH)
FOR COL = 0 TO COLCT - 1
OFFSET = (COL *(LINLEN+1))+1
PLINE[OFFSET,OFFSET+LINLEN]= INLINE(L+(COL*LINECOUNT))
NEXT COL
XCALL STRIP,PLINE
CALL PRINT
CALL CHKINCR
NEXT L
IF ENDFLAG = 0 CALL PAGIT: GOTO LOOP
CALL PRINT
PLINE = " Listed " + TOTCNT + "items." + CHR(12) ! FINISH WITH FORMFEED
CALL PRINT
CLOSE #14
IF IMMED XCALL SPOOL,OUTFILE
GOTO QUIT
CHKINCR:
INCR = INCR + 1
IF INCR/SPINCR = INT(INCR/SPINCR) CALL PRINT
RETURN
PAGIT:
PAGE = PAGE + 1
TITLE[77,79] = PAGE USING "#ZZ"
IF PAGE>1 PLINE = CHR(12): CALL PRINT
CALL PRINT
CALL NORMAL
PLINE = TITLE
CALL PRINT
CALL CONDENSE
CALL PRINT
INCR = 0
PRINT TITLE[70,79]
RETURN
PRINT:
PRINT #14,PLINE
PLINE = ""
RETURN
OPEN'INFILE:
OPEN #1,INFILE,INPUT
RETURN
GETLEN:
CALL OPEN'INFILE
IF FLEN LINLEN = FLEN: GOTO GOTLEN
CT = 50
FOR L=1 TO CT
NIXT:
INPUT LINE #1,INLINE(1)
IF INLINE(1)[1,3] = " " GOTO NIXT
A=A+LEN(INLINE(1))
NEXT L
LINLEN=INT(A/CT) + 2
GOTLEN:
PRINT "USING LINE LENGTH ";LINLEN
CLOSE #1
RETURN
CONDENSE:
IF OKI PLINE = CHR(29)
IF TOSHI PLINE = CHR(27) + CHR(91)
GOTO PRINT
TITE:
IF OKI PLINE = CHR(27) + CHR(56)
IF TOSHI PLINE = CHR(27) + "L06"
GOTO PRINT
NORMAL:
IF OKI PLINE = CHR(30)
IF TOSHI PLINE = CHR(27) + CHR(93)
GOTO PRINT
QUIT: END
; SYSDIR.CMD - COMMAND FILE TO CREATE SORTED DIRECTORY LISTING
; 03/84 ENO
:T
ERASE DIR.LST
DIR DIR=ALL:*.*[]
SORT DIR.LST
15
3
8
A
6
1
A