! 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 RUN SPCPRT DIR.LST DIRECTORY LISTING 2 Y Y