1000 ! MNUPRT - Menu print program
1010 !
1020 ! Program to print formatted screen output of SHELL menu.
1030 !
1040 ! 5/12/86 JS 5/22/86 MM
1050 !
1060 ! The following subroutines are needed by this program:
1070 ! NOECHO.SBR
1080 ! DAYTIM.SBR
1090 ! CMDLIN.SBR
1100 ! SPOOL.SBR
1110 !
1120 ! Use the following command to start this program:
1130 ! RUN MNUPRT filename (filename = menu name without .MNU extension).
1140 !
1150 MAP1 WORK
1160 MAP2 STRDTE,S,8
1170 MAP2 STRTIM,S,8
1180 MAP2 INLINE,S,70
1190 MAP2 PLINE,S,78
1200 MAP2 FILNAM,S,10
1210 MAP2 PRTNAM,S,10
1220 MAP2 DASH,S,77
1230 MAP2 SPACES,S,78,SPACE(78)
1240 MAP2 TITLE,S,70
1250 MAP2 HEADER(6),S,25
1260 MAP2 ITEM(6,6),S,22
1270 START:
1280 XCALL NOECHO
1290 XCALL DAYTIM,STRDTE,STRTIM
1300 XCALL CMDLIN,INLINE
1310 FOR NUM=1 TO 10 : DASH = DASH+"--------" : NEXT
1320 !
1330 PRTNAM = INLINE[12,-1]+".PRT"
1340 OPEN #14,PRTNAM,OUTPUT
1350 !
1360 FILNAM = INLINE[12,-1]+".MNU"
1370 OPEN #911,FILNAM,INPUT
1380 LEV=1 : CNT=1
1390 !
1400 GET'LINE:
1410 INPUT LINE #911,INLINE
1420 IF EOF(911)<>0 THEN GOTO ANOTHER
1430 STRIP:
1440 CHAR = ASC(INLINE[1,1])
1450 IF CHAR=9 OR CHAR=32 THEN INLINE = INLINE[2,-1] : GOTO STRIP
1460 IF CHAR=LEV+47 THEN GOTO PRINT'IT
1470 IF CNT>6 THEN GOTO EXTRA'1
1480 IF CHAR<>LEV+48 THEN GOTO ITEM
1490 PRINT INLINE
1500 HEADER(CNT) = INLINE[3,-1] : CNT = CNT+1 : ITM=1
1510 ITEM:
1520 IF ITM>6 OR CNT<2 THEN GOTO EXTRA'2
1530 IF CHAR<>LEV+49 THEN GOTO GET'LINE
1540 PRINT INLINE
1550 ITEM(ITM,CNT-1) = INLINE[3,-1] : ITM = ITM+1
1560 GOTO GET'LINE
1570 EXTRA'1:
1580 IF CHAR<>LEV+48 THEN GOTO ITEM
1590 PRINT #14,"EXTRA LEVEL ";STR(LEV);": ";INLINE
1600 GOTO GET'LINE
1610 EXTRA'2:
1620 IF CHAR<>LEV+49 THEN GOTO GET'LINE
1630 PRINT #14,"EXTRA LEVEL ";STR(LEV+1);": ";INLINE
1640 GOTO GET'LINE
1650 !
1660 PRINT'IT:
1670 PRINT INLINE
1680 IF CNT=1 THEN GOTO ADVANCE
1690 PAGE = PAGE+1
1700 PRINT #14,CHR(12);
1710 PLINE[1,5] = "Date:"
1720 PLINE[7,14] = STRDTE
1730 PLINE[24,56] = "TekTone Sound & Signal Mfg.,Inc."
1740 PLINE[70,74] = "Page:"
1750 PLINE[76,78] = PAGE USING "##"
1760 CALL PRINT : PRINT #14
1770 PLINE[15,37] = "MENU PRINTOUT OF FILE:"
1780 PLINE[39,48] = FILNAM
1790 PLINE[55,60] = "LEVEL:"
1800 PLINE[62,63] = LEVEL USING "##"
1810 CALL PRINT : PRINT #14
1820 PRINT #14,DASH
1830 NUM=LEN(TITLE) : POS=40-(NUM/2)
1840 PLINE[POS,POS+NUM] = TITLE
1850 CALL PRINT
1860 !
1870 PLINE[1,9] = STRDTE
1880 PLINE[70,77] = STRTIM
1890 CALL PRINT
1900 PRINT #14,DASH
1910 !
1920 FOR CNT=1 TO 2
1930 FOR POS=1 TO 3
1940 PLINE[COL,COL] = "|"
1950 COL = (POS-1)*26
1960 ITM = POS+((CNT-1)*3)
1970 XCALL STRIP,HEADER(POS)
1980 NUM = (25-LEN(HEADER(POS)))/2 USING "##"
1990 HEADER(ITM) = SPACE(NUM)+HEADER(ITM)
2000 PLINE[COL+1,COL+24] = HEADER(ITM)
2010 NEXT : CALL PRINT
2020 PRINT #14,DASH
2030 FOR NUM=1 TO 6
2040 FOR POS=1 TO 3
2050 COL = (POS-1)*26
2060 ITM = POS+((CNT-1)*3)
2070 PLINE[COL,COL] = "|"
2080 SEL = NUM+ITM*10
2090 PLINE[COL+1,COL+2] = SEL USING "##"
2100 PLINE[COL+4,COL+25] = ITEM(NUM,ITM)
2110 NEXT POS
2120 CALL PRINT
2130 NEXT NUM
2140 PRINT #14,DASH
2150 NEXT CNT
2160 PRINT #14
2170 PRINT #14,"Enter menu selection (type ? for help) 10"
2180 PRINT #14,DASH
2190 PRINT #14
2200 !
2210 ADVANCE:
2220 TITLE = INLINE[3,-1]
2230 LEVEL=LEV
2240 FOR NUM=1 TO 6 : HEADER(NUM) = SPACES
2250 FOR POS=1 TO 6 : ITEM(NUM,POS) = SPACES
2260 NEXT POS
2270 NEXT NUM
2280 CNT=1 : ITM=1
2290 GOTO GET'LINE
2300 !
2310 ANOTHER:
2320 CLOSE #911
2330 OPEN #911,FILNAM,INPUT
2340 LEV = LEV+2
2350 IF LEV<8 THEN GOTO STRIP
2360 !
2370 FINISH:
2380 PRINT #14,CHR(12);
2390 CLOSE #14
2400 CLOSE #911
2410 ! XCALL SPOOL,PRTNAM,"PRINT5"
2420 ! XCALL SPOOL,PRTNAM,"PRNT2"
2430 END
2440 !
2450 PRINT:
2460 PRINT #14,PLINE
2470 PLINE = SPACES
2480 RETURN
2490