1 REM ===================================== 2 REM MONOCALC.BAS 3 REM 4 REM By Dan Shier 5 REM Commercial Rights Reserved 6 REM 7 REM Edited for COGS Disk by J Phillips 8 REM 17 March 1984 9 REM ===================================== 10 REM Last Modified: 8 JUNE 1984 15 DEFINT I-L 20 L$ = STRING$(79,"*") 30 DIM A1$(150), A2(150), TL$(10) 31 BKG=15: REM Inverse background color for IBM-PC 32 '****** MENU ************************************ 35 CLS: LOCATE 5,1 40 PRINT L$ 50 PRINT "THIS IS A PROGRAM TO ADD OR SORT A COLUMN OF ANNOTATED VALUES" 52 PRINT "IT IS YOUR BASIC ONE DIMENSIONAL SPREADSHEET": PRINT "" 54 PRINT "Programed by Daniel E. Shier--March 1984" 60 PRINT L$: PRINT "WHAT NOW?" TAB(15) "0 = Save the file" 62 PRINT TAB(15) "1 = Load old file": PRINT TAB(15) "2 = Enter new data": PRINT TAB(15) "3 = Sort entries by name": PRINT TAB(15) "4 = Video display of entries": PRINT TAB(15) "5 = Printer listing of all entries and total" 64 PRINT TAB(15) "6 = Enter a title of up to 10 lines": PRINT TAB(15) "7 = Delete an entry": PRINT TAB(15) "8 = Change an entry": PRINT TAB(15) "9 = Merge two files" 65 PRINT TAB(13) "ESC = Exit program 66 PRINT L$ 130 Q$=INKEY$: IF Q$="" THEN 130 131 IF Q$ = CHR$(27) THEN 20000 132 I1 = VAL(Q$) 135 IF I1=0 AND I1$ <> "0" THEN GOTO 130 140 IF I1 = 0 THEN GOSUB 180 160 ON I1 GOSUB 320,500,590,620,700,900,960,820,2000 170 GOTO 60 180 '****** TERMINATE AND SAVE FILE ********************* 190 CLS: LOCATE 12,1 195 PRINT "WHAT IS THE NAME OF THE FILE TO BE SAVED?" 200 INPUT FI$ 210 OPEN "O", 1, FI$ 220 PRINT#1,IT 230 IF IT = 0 THEN GOTO 250 240 FOR J = 1 TO IT: PRINT#1, TL$(J): NEXT J 250 FOR I = 1 TO IN 260 PRINT#1,A1$(I) 'NAME 270 PRINT#1,A2(I) 'AMOUNT OF MONEY 280 NEXT I 290 PRINT#1, "END" 300 CLOSE 1 305 CLS: LOCATE 5,1 310 RETURN 320 '**** LOAD OLD FILE ******************************** 330 CLS: LOCATE 12,1 335 PRINT "WHAT IS THE NAME OF THE FILE TO BE LOADED?" 340 INPUT FI$ 345 CLS 350 OPEN "I", 1, FI$ 360 INPUT#1,IT 370 IF IT = 0 THEN GOTO 390 375 PRINT "THE TITLE OF THIS FILE IS:" 380 FOR I = 1 TO IT: INPUT#1,TL$(I): PRINT TAB(10) TL$(I): NEXT I 390 I = 0 400 I = I + 1 410 INPUT#1, A1$(I) 420 IF A1$(I) = "END" THEN GOTO 450 430 INPUT#1, A2(I) 440 GOTO 400 450 A1$(I) = "" 460 CLOSE 1 470 IN = I - 1 480 PRINT "THE NUMBER OF ENTRIES IS "IN 490 RETURN 500 '**** ENTER DATA ******************************** 505 CLS 506 PRINT "USE DESCRIPTIONS OF 60 CHARACTERS OR LESS FOR BEST RESULTS" 507 PRINT "SEPARATE THE AMOUNT FROM THE DESCRIPTION BY A COMMA" 510 IX = IN + 1 520 PRINT "FOR ENTRY # "IX" ENTER AMOUNT AND DESCRIPTION, 0,0 = EXIT" 530 INPUT A2(IX),A1$(IX) 540 IF A2(IX) = 0 THEN IN = IX - 1: A1$(IX) = "": GOTO 580 560 IN = IX 570 GOTO 510 575 CLS: LOCATE 5,1 580 RETURN 590 '**** SORT BY NAME ******************************************** 591 JF = 0 592 FOR I = 1 TO IN-1 594 IF A1$(I) > A1$(I + 1) THEN A1$ = A1$(I): A2 = A2(I): A1$(I) = A1$(I+1): A2(I) = A2(I+1): A1$(I+1) = A1$: A2(I+1) = A2: JF = 1 596 NEXT I 599 IF JF = 1 THEN GOTO 591 610 RETURN 620 '**** DISPLAY ENTRY **************************** 630 CLS 635 PRINT "DISPLAY STARTING WITH WHAT ENTRY NUMBER?" 640 INPUT I3 650 J3 = I3 + 10 660 FOR I = I3 TO I3 + 20 670 PRINT I;: PRINT TAB(6) USING "######.##"; A2(I);: PRINT TAB(22) A1$(I) 680 NEXT I 685 PRINT "++++++++++++++++++ PRESS TO CONTINUE ++++++++++++++++++++++++++++++++++": INPUT X$ 687 CLS: LOCATE 5,1 690 RETURN 700 '**** PRINTER DISPLAY ******************** 710 SM = 0 720 FOR I = 1 TO IT: LPRINT TAB(10) TL$(I): NEXT I 730 LPRINT " ": LPRINT " " 740 FOR I = 1 TO IN 750 J1 = LEN(A1$(I)): J2 = 59 - J1: J3$ = A1$(I)+STRING$(J2,".") 760 LPRINT I TAB(5)J3$;USING"######.##";A2(I) 770 SM = SM + A2(I) 780 NEXT I 790 LPRINT TAB(65)"--------":LPRINT " TOTAL "USING"######.##";SM 800 LPRINT " ": LPRINT " " 810 RETURN 820 '**** EDIT ****************************************** 830 CLS 835 PRINT "EDIT WHAT ENTRY NUMBER?" 840 INPUT I3 850 PRINT I3; A2(I3); A1$(I3) 860 PRINT "INPUT AMOUNT AND DESCRIPTION" 870 INPUT A2(I3),A1$(I3) 880 PRINT I3; A2(I3); A1$(I3) 885 CLS: LOCATE 5,1 890 RETURN 900 '**** RECORD TITLE ********************************* 905 CLS 907 FOR I = 1 TO 10: TL$ = "": NEXT I 910 PRINT "HOW MANY LINES FOR THE TITLE?": PRINT "MAXIMUM OF 10 LINES, SOME CAN BE BLANK": INPUT IT 920 IF IT = 0 THEN GOTO 950 930 PRINT "LINE LENGTH MUST BE LESS THAN OR EQUAL TO 66 CHARACTERS": PRINT "DO NOT USE ANY COMMAS OR SEMICOLNS IN THE LINES" 940 FOR I = 1 TO IT: PRINT "INPUT TITLE LINE NUMBER "I: INPUT TL$(I): NEXT I 945 CLS: LOCATE 5,1 950 RETURN 955 '**** DELETE ENTRY ****************************** 960 CLS 965 PRINT "WHAT ENTRY NUMBER DO YOU WANT TO DELETE?": INPUT KD 970 FOR I = KD TO IN: A1$(I) = A1$(I+1): A2(I) = A2(I+1): NEXT I 972 IN = IN - 1 976 CLS: LOCATE 5,1 980 RETURN 2000 '**** MERGE FILES ********************************** 2010 CLS 2015 PRINT "WHAT IS THE NAME OF THE FILE YOU WISH TO ADD TO THE END": PRINT "OF THE FILE CURRENTLY IN THE PROGRAM?": INPUT FF$ 2350 OPEN "I", 1, FF$ 2360 INPUT#1,JT 2370 IF JT = 0 THEN GOTO 2390 2380 FOR I = 1 TO JT: INPUT#1,NL$(I): NEXT I 2390 I = IN 2400 I = I + 1 2410 INPUT#1, A1$(I) 2420 IF A1$(I) = "END" THEN GOTO 2450 2430 INPUT#1, A2(I) 2440 GOTO 2400 2450 A1$(I) = "" 2460 CLOSE 1 2470 IN = I - 1 2475 CLS 2480 PRINT "THE NUMBER OF ENTRIES IS "IN 2490 RETURN 19990 REM ********************** 19992 REM EXIT ROUTINE 19994 REM ********************** 20000 CLS: PRINT TAB(28) "E X I T P R O G R A M" 20005 LOCATE 8,20: PRINT "EXIT TO:" 20010 M$(1) = " 1. MENU, to run another program. " 20015 M$(2) = " 2. BASIC " 20020 M$(3) = " 3. MS-DOS System level " 20025 M$(4) = " 4. CANCEL Exit Command " 20030 FOR Y = 1 TO 4: LOCATE 2*Y + 8, 20: PRINT M$(Y): NEXT Y 20035 LOCATE 23,1: PRINT "Enter number or use arrows to make selection; then press " 20037 LOCATE ,,0: REM Cursor OFF 20040 Y=1: MVE=NO: X=1 20045 WHILE Q$ <> CHR$(13) 20050 LOCATE 2*Y + 8, 20: COLOR 0,BKG: PRINT M$(Y): COLOR 7,0 20055 Q$=INKEY$: IF Q$="" THEN 20055 20060 IF LEN(Q$) = 2 AND ASC(RIGHT$(Q$,1)) = 72 THEN MVE=YES: X=Y-1: IF X<1 THEN X=4 20065 IF LEN(Q$) = 2 AND ASC(RIGHT$(Q$,1)) = 80 THEN MVE=YES: X=Y+1: IF X>4 THEN X=1 20067 IF Q$ >="1" AND Q$ <= "4" THEN X=VAL(Q$): MVE=YES 20070 IF MVE=YES THEN LOCATE 2*Y + 8, 20: PRINT M$(Y): Y=X: MVE=NO 20075 WEND 20080 LOCATE ,,1: REM Cursor ON 20085 CLS 20100 IF Y = 1 THEN LOCATE 12,1: PRINT "Loading.....MENU": RUN "MENU" 20110 IF Y = 2 THEN END 20120 IF Y = 3 THEN SYSTEM 20130 IF Y = 4 THEN 35: REM Title Page 30000 CLS: END