Care Care V1000

Developer(s): Gene Lover
Date: 1983
Type: Cassette
Platform(s): TS 1000
Tags: Home

Care Care V1000 is a car maintenance record-keeping system that stores, sorts, and analyzes vehicle service and fuel transactions. The program uses a compact data representation, packing multiple fields into fixed-width string slices within a transaction array T$, with fields for date, mileage, cost, and transaction type (fuel vs. service). A custom numeric formatter at line 368 handles right-aligned decimal output with configurable field width (L) and decimal places (M), returning “99999999” on overflow. The system supports multiple display modes controlled by variable SP, including per-unit cost calculations with conversion factors H3 and H4 to switch between measurement systems (e.g., miles/kilometers and gallons/liters). An insertion-sort routine at lines 297–314 maintains the transaction list in chronological order by date string.


Program Analysis

Program Structure

The program uses a dispatch table at lines 1–11, where each line contains a GOTO to a subroutine entry point. This allows the main menu loop (around line 45–52) to branch to a selected routine via GOTO VAL G$(VAL C$), treating G$ as a string-encoded jump table. Lines are organized into functional clusters:

  • Lines 1–11: Dispatch table
  • Lines 45–107: Menu handling and data entry for fuel/service records
  • Lines 120–133: Record deletion
  • Lines 150–190: Category/label editing
  • Lines 200–266: Utility subroutines (screen clear, initialization, filtering)
  • Lines 278–316: Mileage/date range computation and sorted insertion
  • Lines 330–351: Sub-category selection loop
  • Lines 368–385: Number formatting subroutine
  • Lines 400–480: Universal input handler with validation
  • Lines 500–650: Transaction listing and summary display
  • Lines 700–735: Save/load and screen scroll utilities
  • Lines 800–852: Report type selector
  • Lines 900–1000: Cost summary report
  • Lines 1008–1091: Per-transaction fuel economy analysis
  • Lines 1125–1141: Report initialization
  • Lines 5551–5565: Fuel consumption summary report
  • Lines 6000–6056: Unit conversion helpers

Data Storage Layout

All transaction records are stored in the string array T$, with each record being a fixed-width string. Fields are addressed by character position slices:

SliceContent
T$(J, TO N6)Date (6 chars)
T$(J, N7 TO N13)Odometer/mileage (7 chars)
T$(J, N14 TO N19)Cost or distance (6 chars)
T$(J, N20 TO N23)Volume/quantity (4 chars)
T$(J, N24)Category code (1 char)
T$(J, N25)Transaction type: A$=fuel, D$=service (1 char)

The constant-named numeric variables (N, N2, N3, etc.) serve as symbolic aliases for small integers, reducing token storage and improving maintainability. Similarly, Z represents zero and is used pervasively in comparisons and initializations.

Input Validation System

All user input passes through the subroutine at line 400, which acts as a universal validated input handler. The variable B is set to a validation mode code before calling this routine via GOSUB N9. The handler displays the current screen (lines 401–403), accepts INPUT R$, and then dispatches to one of several validation branches based on B and the content of R$. Extended input (starting with A$) is re-dispatched through a secondary jump table at line 462: GOTO VAL G$(B+N9), enabling mode-specific extended commands. The sentinel value M$ represents a “back/cancel” key that always causes a GOTO N (return to menu). Error feedback is shown by writing [E][R][R][O][R] into a display line field at line 417 before looping back.

Number Formatting Subroutine

The subroutine at lines 368–385 is a right-aligned decimal formatter. It uses two parameters: L (total field width) and M (decimal places). It builds an 8-character result in C$ initialized to spaces. The integer part is right-justified into positions up to L-M, and the fractional part fills positions L-M+1 to L. A small epsilon (0.0001, 0.005, or 0.05 depending on M) is added before truncation to avoid floating-point underflow artifacts. If the integer part is too wide for the field, the overflow result "99999999" is returned at line 384.

Sorted Insertion Routine

New records are inserted into T$ in sorted order by date string at lines 297–314. The routine walks forward through T$ until it finds the correct insertion point based on lexicographic comparison of the date and odometer fields (lines 299–301). If the new record’s date falls between two consecutive records’ odometer values, a duplicate-date conflict message is displayed using pre-built error strings in L$ (lines 302–308). Otherwise, a standard shift-up insertion sort is performed (lines 309–314), incrementing T (the record count) and shifting all subsequent records up by one position.

Unit Conversion and Measurement Modes

The variable SP selects the display unit system. When SP=N (1), distance conversions use factor H3; when SP=N3 (3), factor H4 is used. These are applied in fuel economy calculations at lines 609–615, 641–650, 1008–1047, and the unit conversion subroutines at 6000–6056. The input handler at line 75 also calls subroutine 6000 when the user enters "G" or "I" to pre-convert a volume entry between gallons and liters.

Screen Management

The display uses a string array L$ as a virtual screen buffer. Line 200’s subroutine clears lines N1 to N20 by filling them with S$ (a blank string). The scroll subroutine at lines 730–735 shifts display line L$(N) rightward by 6 character positions (in a loop from position N32 down to N7), blanking the first 6 positions — used to make room for a page title prefix. The save routine at line 700 increments a version counter stored inside L$(N66) before executing SAVE Z$, auto-incrementing the save filename each time.

Notable Techniques

  • GOTO VAL G$(VAL C$) at line 52 implements a compact string-encoded menu dispatch table, avoiding a long chain of IF statements.
  • The use of named numeric constants (N=1, N2=2, etc.) throughout reduces token count and aids readability of slice indices.
  • The deletion routine at lines 120–133 shifts all records above the deleted index down by one and decrements T, avoiding array re-dimensioning.
  • The GOSUB N2, GOSUB N3, etc. idiom dispatches to the subroutines defined at lines 2, 3, etc. (the dispatch table entries), providing named subroutine-like calls.
  • Line 700 increments the version number embedded in a display string and uses it directly as the SAVE filename, creating a simple versioned backup scheme.

Potential Anomalies

  • Line 190 loops back unconditionally to line 180 with GOTO 180 — the speed-units setting routine has no exit path visible in this listing, suggesting the escape relies entirely on the IF C$=M$ THEN GOTO N at line 186.
  • Lines 420–450 contain several validation branches that are not directly reachable by fall-through from line 418 (GOTO 400 loops back to the top), implying they are entered only via the secondary dispatch at line 462. The branch labels (e.g., NE, NS, NF) are symbolic line references that must be defined elsewhere in the full program.
  • Line 1019 reads L$(N3,N4) to check if a character is "N", suggesting a flag stored directly in the screen buffer — an unconventional but space-efficient technique.

Content

Appears On

Related Products

Related Articles

Related Content

Image Gallery

Source Code

   1 GOTO 45
   2 GOTO 211
   3 GOTO 200
   4 GOTO 220
   5 GOTO 231
   6 GOTO 241
   7 GOTO 278
   8 GOTO 368
   9 GOTO 400
  10 GOTO 291
  11 GOTO 330
  45 GOSUB N3
  46 FOR I=N TO N10
  47 LET L$(I)=L$(N20+I)
  48 NEXT I
  49 LET B=N17
  50 GOSUB N9
  51 IF C$=M$ THEN GOTO N
  52 GOTO VAL G$(VAL C$)
  60 LET K=Z
  61 GOSUB BS
  64 FOR I=N TO N5
  65 LET B=VAL E$(I)
  66 LET L$(N4,N6*I)=K$
  67 GOSUB N9
  68 IF C$=M$ THEN GOTO N
  69 LET I$(I)=C$
  70 NEXT I
  71 LET B=N13
  72 LET L$(N4,N32)=K$
  73 GOSUB N9
  74 IF C$=M$ THEN GOTO N
  75 IF C$="G" OR C$="I" THEN GOSUB 6000
  78 LET H$( TO N6)=I$(N)
  79 LET H$(N7 TO N13)=I$(N2)
  80 LET H$(N14 TO N19)=I$(N3)
  81 LET H$(N20 TO N23)=I$(N4)
  82 LET H$(N24)=I$(N5)
  83 LET H$(N25)=A$
  84 GOSUB N10
  85 GOTO N
  90 LET K=N4
  91 GOSUB BS
  94 FOR I=N1 TO N4
  95 LET B=VAL E$(I+N5)
  96 LET L$(N4,N6*I)=K$
  97 GOSUB N9
  98 IF C$=M$ THEN GOTO N
  99 LET I$(I)=C$
 100 NEXT I
 101 LET H$( TO N6)=I$(N)
 102 LET H$(N7 TO N13)=I$(N2)
 103 LET H$(N14 TO N19)=I$(N3)
 104 LET H$(N24)=I$(N4)
 105 LET H$(N25)=D$
 106 GOSUB N10
 107 GOTO N
 120 LET K=N8
 121 GOSUB BS
 123 LET B=N3
 124 GOSUB N9
 125 IF C$=M$ THEN GOTO N
 126 LET J=VAL C$
 127 LET T$(J)=T$(J+N)
 128 LET J=J+N
 129 IF J<T THEN GOTO 127
 130 LET T=T-N
 132 GOSUB N2
 133 GOTO N
 150 GOSUB N3
 151 LET L$(N)=L$(26)
 152 GOSUB 730
 153 LET J$=A$
 154 GOTO 330
 170 GOSUB N3
 171 LET L$(N)=L$(N27)
 172 GOSUB 730
 173 LET J$=D$
 174 GOTO 330
 180 LET K=N11
 181 GOSUB BS
 184 LET B=N8
 185 GOSUB N9
 186 IF C$=M$ THEN GOTO N
 187 LET L$(64,N30)=C$
 188 LET SP=VAL C$
 190 GOTO 180
 200 FOR I=N1 TO N20
 201 LET L$(I)=S$
 202 NEXT I
 203 RETURN
 211 LET L$(N20)=L$(33)
 212 LET B=N12
 213 GOSUB N9
 214 RETURN
 220 LET FT=Z
 221 LET Y$="0000000"
 222 LET Z$=Y$
 223 LET B=Z
 224 LET C=B
 225 LET D=B
 226 LET J=Z
 227 LET TP=Z
 228 LET Q=Z
 229 LET CP=Z
 230 RETURN
 231 LET L$(K,I)=CHR$ (CODE (L$(K,I))+128)
 232 RETURN
 241 LET J=J+N
 242 IF J>T THEN GOTO 266
 243 IF T$(J, TO N6)<U$ THEN GOTO EX
 244 IF T$(J, TO N6)>V$ THEN GOTO EX
 245 IF W=N OR W=N3 THEN IF T$(J,N25)=D$ THEN GOTO EX
 246 IF W=N2 OR W=N4 THEN IF T$(J,N25)=A$ THEN GOTO EX
 247 IF T$(J,N25)=A$ THEN IF W=N6 THEN GOTO 253
 248 LET O$=A$
 249 FOR I=N TO N9
 250 IF T$(J,N24)=X$(I) THEN LET O$=X$(I)
 251 NEXT I
 252 IF O$=A$ THEN GOTO EX
 254 LET Z$=T$(J,N7 TO N13)
 255 IF VAL Y$=Z THEN LET Y$=Z$
 256 IF T$(J,N25)=D$ THEN GOTO 263
 258 LET G=VAL T$(J,N14 TO N19)
 259 LET C=C+VAL T$(J,N20 TO N23)
 260 LET O(N)=O(N)+N
 261 LET TP=TP+G
 262 GOTO 266
 263 LET D=D+VAL T$(J,N14 TO N19)
 264 LET O(N2)=O(N2)+N
 266 RETURN
 278 LET TP=Z
 279 LET J=Z
 280 GOSUB N6
 282 IF J<=T THEN GOTO 280
 283 LET MD=VAL Z$-VAL Y$
 284 RETURN
 291 LET B=N12
 292 IF T<95 THEN GOTO 297
 293 GOSUB N3
 294 LET L$(N2)=L$(36)
 295 GOSUB N9
 296 GOTO 316
 297 LET K=Z
 298 LET K=K+N
 299 IF T$(K, TO N13)<H$( TO N13) THEN GOTO 298
 300 IF H$(N7 TO N13)<T$(K-N,N7 TO N13) THEN GOTO 302
 301 IF H$(N7 TO N13)<=T$(K,N7 TO N13) THEN GOTO 309
 302 LET L$(37,N20 TO )=H$( TO N13)
 303 LET L$(N6)=L$(37)
 304 LET L$(38, TO N13)=T$(K, TO N13)
 305 LET L$(38,15 TO )=T$(K-N, TO N13)
 306 LET L$(N7)=L$(38)
 308 GOTO 315
 309 LET T=T+N
 310 LET J=T
 311 LET T$(J)=T$(J-N)
 312 LET J=J-N
 313 IF J<>K THEN GOTO 311
 314 LET T$(K)=H$
 315 GOSUB N2
 316 RETURN
 330 LET L$(N2)=L$(62)
 331 FOR I=N TO N9
 332 LET L$(I+N2,N11)=STR$ I
 333 LET L$(I+N2,N17 TO N22)=P$(I, TO N5)
 334 IF J$=D$ THEN LET L$(I+N2,N17 TO N29)=Q$(I, TO N12)
 335 NEXT I
 336 LET L$(N13)=L$(63)
 337 LET L$(N13,N11)=K$
 338 LET B=N10
 339 GOSUB N9
 340 IF C$=M$ THEN GOTO N
 341 LET K=VAL C$
 342 LET L$(N13,N18)=K$
 343 LET B=15
 345 GOSUB N9
 346 IF C$=M$ THEN GOTO N
 347 IF J$=A$ THEN LET P$(K)=C$
 348 IF J$=D$ THEN LET Q$(K)=C$
 349 IF L$(N,N7)="5" THEN GOTO 150
 351 GOTO 170
 368 LET C$="        "
 369 IF B<Z THEN LET B=B*-N
 370 IF M=Z THEN LET B=B+.5
 371 IF M=N THEN LET B=B+.05
 372 IF M=N2 THEN LET B=B+.005
 373 LET B$=STR$ INT B
 374 IF LEN B$>L-M THEN GOTO 384
 375 LET O$=STR$ (B-INT B+.0001)
 376 IF O$(N)="." THEN LET O$=STR$ Z+O$
 377 LET C$(L-M+N TO L)=O$(N3 TO )
 378 LET E=Z
 379 FOR F=N TO LEN B$
 380 LET C$(L-M-F+N)=B$(LEN B$-E)
 381 LET E=E+N
 382 NEXT F
 383 RETURN
 384 LET C$="99999999"
 385 RETURN
 400 CLS
 401 FOR Y=N TO N20
 402 PRINT L$(Y)
 403 NEXT Y
 404 INPUT R$
 407 LET L$(N,N28 TO N32)=S$
 408 IF B=N12 THEN GOTO NE
 409 IF LEN R$<N THEN GOTO NS
 410 LET C$=R$
 411 IF LEN R$>N THEN GOTO 460
 412 IF C$=M$ THEN GOTO NE
 413 IF C$="N" THEN IF B=N16 THEN GOTO NE
 414 IF C$=A$ THEN IF B=N9 OR B=N13 OR B=N14 THEN GOTO NE
 417 LET L$(N,N28 TO )="[E][R][R][O][R]"
 418 GOTO 400
 420 IF LEN C$=N THEN IF CODE C$>=N29 THEN IF CODE C$<=36 THEN GOTO NE
 421 GOTO NS
 423 IF LEN C$<>B THEN GOTO NS
 426 GOTO NF
 430 IF C$="G" OR C$="I" THEN GOTO NE
 431 GOTO NS
 433 IF LEN C$<>N THEN GOTO NS
 434 IF CODE C$>=N29 THEN IF CODE C$<=34 THEN GOTO NE
 435 GOTO NS
 436 IF LEN C$<>N THEN GOTO NS
 437 IF CODE C$>=N29 THEN IF CODE C$<=37 THEN GOTO NE
 438 GOTO NS
 440 FOR E=N TO LEN C$
 441 IF CODE C$(E)=Z THEN GOTO 443
 442 IF CODE C$(E)<N28 OR C$(E)>"Z" THEN GOTO NS
 443 NEXT E
 444 GOTO NE 
 445 FOR E=N TO LEN C$
 447 IF CODE C$(E)<N28 OR CODE C$(E)>37 THEN GOTO NS
 448 NEXT E
 449 IF B=N3 THEN IF (VAL C$>=T) OR (VAL C$<=N) THEN GOTO NS
 450 GOTO NE
 452 IF C$="1" OR C$="2" OR C$="3" THEN GOTO NE
 453 GOTO NS
 460 LET C$=R$(N2 TO )
 461 IF R$(N)<>A$ THEN GOTO NS
 462 GOTO VAL G$(B+N9)
 470 IF LEN C$<>N4 THEN GOTO NS
 471 GOTO NF
 480 RETURN
 500 LET K=15
 501 GOSUB BM
 504 GOTO 512
 505 LET K=N20
 506 GOSUB BM
 509 GOTO 512
 512 GOSUB N4
 513 FOR K=N5 TO N19
 514 GOSUB N6
 515 IF J>T THEN GOTO CF
 516 LET L$(K,N TO N3)=STR$ J
 517 LET L$(K,N5 TO N10)=T$(J, TO N6)
 518 LET L$(K,N12 TO N18)=T$(J,N7 TO N13)
 519 LET L$(K,N20 TO N25)=T$(J,N14 TO N19)
 520 IF T$(J,N25)=D$ THEN GOTO 527
 521 LET L$(K,N29 TO N32)=T$(J,N20 TO N23)
 522 IF SP=N1 OR SP=N3 THEN GOSUB 6050
 524 LET I=N32
 526 GOSUB N5
 527 LET L$(K,N27)=T$(J,N24)
 528 LET I=N18
 529 GOSUB N5
 530 LET I=N24
 531 GOSUB N5
 532 LET I=N25
 533 GOSUB N5
 534 NEXT K
 537 LET L$(N20)=L$(51)
 538 LET B=N16
 539 GOSUB N9
 540 IF C$=M$ THEN GOTO N
 541 FOR I=N5 TO N20
 542 LET L$(I)=S$
 543 NEXT I
 544 GOTO 513
 570 LET K=N30
 571 GOSUB 651
 573 GOSUB N6
 575 GOSUB 621
 576 LET L$(K, TO N3)=STR$ O(N2)
 577 LET L=N7
 578 LET M=N2
 579 LET B=Z
 580 IF Z$=Y$ THEN GOTO 582
 581 LET B=(D/(VAL Z$-VAL Y$))*N100
 582 GOSUB N8
 583 LET L$(K,N24 TO N30)=C$( TO N7)
 584 LET B=D/N100
 585 GOSUB N8
 586 LET L$(K,N14 TO N20)=C$( TO N7)
 587 LET I=N29
 588 GOSUB N5
 589 LET I=N30
 590 GOSUB N5
 591 GOSUB 595
 594 GOTO CF
 595 LET I=N12
 596 GOSUB N5
 597 LET I=N19
 598 GOSUB N5
 599 LET I=N20
 600 GOSUB N5
 601 LET B=N12
 602 RETURN
 603 GOSUB N2
 604 GOTO N
 609 LET B=C/N10
 610 IF SP=N THEN LET B=B/H3
 611 IF SP=N3 THEN LET B=B/H4
 612 LET L=N6
 613 LET M=N
 614 GOSUB N8
 615 LET L$(K,N22 TO N27)=C$( TO N6)
 616 RETURN
 621 LET B=MD/N10
 622 LET L=N7
 623 LET M=N
 624 GOSUB N8
 625 LET L$(K,N6 TO N12)=C$( TO N7)
 626 RETURN
 631 LET L=N7
 632 LET M=N2
 633 LET B=TP/N100
 634 GOSUB N8
 635 LET L$(K,N14 TO N20)=C$( TO N7)
 636 RETURN
 641 LET B=Z
 642 IF C=Z THEN GOTO 646
 643 LET B=MD/C
 644 IF SP=N THEN LET B=B*H3
 645 IF SP=N3 THEN LET B=B*H4
 646 LET L=N4
 647 LET M=N
 648 GOSUB N8
 649 LET L$(K,N29 TO N32)=C$( TO N4)
 650 RETURN
 651 GOSUB BM
 652 GOSUB N4
 653 GOSUB N7
 657 LET K=N5
 658 RETURN
 700 LET L$(N66,N10 TO N13)=STR$ (VAL L$(N66,N10 TO N13)+N)
 701 LET Z$=L$(N66,N TO N13)
 703 SAVE Z$
 704 CLS
 705 PRINT L$(N66);S$;S$;L$(N67);S$;S$;L$(N30)
 706 STOP
 707 GOTO N
 710 GOSUB BM
 711 GOSUB 730
 712 RETURN
 719 GOSUB N3
 720 FOR J=N TO N9
 721 LET I=VAL N$((K+J)*N2-N TO (K+J)*N2)
 722 IF I=99 THEN GOTO 725
 723 LET L$(J)=L$(I)
 724 NEXT J
 725 LET J=Z
 726 RETURN
 730 FOR J=N32 TO N7 STEP -N
 731 LET L$(N,J)=L$(N,J-N6)
 732 NEXT J
 733 LET L$(N, TO N6)=S$
 735 RETURN
 800 GOSUB 1125
 801 LET B=N11
 802 GOSUB N9
 803 IF C$=M$ THEN GOTO N
 804 LET W=VAL C$
 805 IF W<>N6 THEN GOTO 823
 806 LET L$(N9,N)=K$
 807 LET B=N14
 808 GOSUB N9
 809 IF C$=M$ THEN GOTO N
 810 LET B=N14
 811 IF C$<>A$ THEN LET U=VAL C$/N100
 812 LET L$(N10,N)=K$
 813 IF C$<>A$ THEN LET L$(N9,N4 TO N7)=C$
 814 GOSUB N9
 815 IF C$=M$ THEN GOTO N
 816 IF C$<>A$ THEN LET V=VAL C$/N10
 817 IF C$<>A$ THEN LET L$(N10,N4 TO N7)=C$
 818 LET L$(N68)=L$(N9)
 819 LET L$(N69)=L$(N10)
 823 LET L$(N11,N)=K$
 824 LET B=N6
 825 GOSUB N9
 826 IF C$=M$ THEN GOTO N
 827 LET U$=C$
 828 LET L$(N11,15 TO N20)=U$
 829 GOSUB N9
 830 IF C$=M$ THEN GOTO N
 831 LET L$(N11,N25 TO N30)=C$
 832 LET V$=C$
 833 LET L$(N12,N)=K$
 834 FOR I=N TO N9
 835 LET B=N9
 836 GOSUB N9
 837 IF C$=M$ THEN GOTO N
 838 IF C$=A$ THEN GOTO 842
 839 LET X$(I)=C$
 840 LET L$(N12,N2*I+N13)=C$
 841 NEXT I
 842 LET I=N67
 843 IF W=N6 THEN LET I=I+N2
 844 LET L$(I+N)=L$(N11)
 845 LET L$(I+N2)=L$(N12)
 846 GOTO W+846
 847 GOTO 500
 848 GOTO 505
 849 GOTO 5551
 850 GOTO 570
 851 GOTO 900
 852 GOTO 974
 900 LET K=35
 901 GOSUB BM
 905 GOSUB N4
 906 GOSUB N7
 910 LET B=D/N100
 911 LET L=N7
 912 LET M=N2
 913 GOSUB N8
 914 LET L$(N5,N13 TO N19)=C$( TO N7)
 915 LET B=TP/N100
 916 GOSUB N8
 917 LET L$(N6,N13 TO N19)=C$( TO N7)
 918 LET B=(TP+D)/N100
 919 GOSUB N8
 920 LET L$(N7,N13 TO N19)=C$( TO N7)
 921 IF MD=Z THEN GOTO 933
 922 LET B=D/(MD/N100)
 923 GOSUB N8
 924 LET L$(N5,N23 TO N29)=C$( TO N7)
 926 LET B=TP/(MD/N100)
 927 GOSUB N8
 928 LET L$(N6,N23 TO N29)=C$
 930 LET B=(TP+D)/(MD/N100)
 931 GOSUB N8
 932 LET L$(N7,N23 TO N29)=C$( TO N7)
 933 FOR K=N5 TO N7
 934 FOR J=N TO N2
 935 LET I=J+N17
 936 GOSUB N5
 937 LET I=J+N27
 938 GOSUB N5
 939 NEXT J
 940 NEXT K
 941 GOTO CF
 974 GOSUB N4
 975 LET K=43
 981 GOSUB BM
 982 FOR X=N7 TO N19
 983 GOSUB N6
 984 IF J>=T THEN GOTO 998
 985 IF T$(J,N25)=A$ THEN GOSUB 1008
 986 IF T$(J,N25)=D$ THEN GOSUB 1050
 988 NEXT X
 989 LET L$(X)=L$(51)
 990 LET B=N16
 991 GOSUB N9
 992 IF C$=M$ THEN GOTO N
 994 FOR X=N7 TO N20
 995 LET L$(X)=S$
 996 NEXT X
 997 GOTO 982
 998 LET L$(X+N)="TOTAL COST=$"+STR$ CP
 1000 GOTO CF
 1008 LET L$(X, TO N6)=T$(J, TO N6)
 1009 LET B=VAL T$(J,N20 TO N23)
 1010 IF B=Z THEN GOTO 1014
 1011 LET B=((VAL Z$-P)/B)
 1012 IF SP=N THEN LET B=B/H3
 1013 IF SP=N3 THEN LET B=B/H4
 1014 LET R=B
 1015 LET L=N4
 1016 LET M=N
 1017 GOSUB N8
 1018 LET L$(X,N8 TO N12)=C$( TO N4)
 1019 IF L$(N3,N4)<>"N" THEN LET Q=V
 1020 LET B=Z
 1021 IF Q<>Z THEN LET B=((R-Q)/Q)*N100
 1022 LET L=N3
 1023 LET M=N
 1024 GOSUB N8
 1025 LET L$(X,N14 TO N16)=C$( TO N3)
 1026 LET L$(X,N13)="+"
 1027 IF Q>R THEN LET L$(X,N13)="-"
 1028 LET B=(VAL Z$-P)/N10
 1029 LET L=N6
 1030 LET M=N
 1031 GOSUB N8
 1032 LET L$(X,N18 TO N23)=C$( TO N6)
 1033 LET B=G/N100
 1034 IF L$(N2,N4)<>"N" THEN IF L$(N3,N4)="N" THEN GOSUB 1061
 1035 IF L$(N2,N4)<>"N" THEN IF L$(N3,N4)<>"N" THEN GOSUB 1070
 1036 IF L$(N2,N4)<>"N" THEN LET CP=CP+B
 1037 IF L$(N2,N4)="N" THEN LET CP=TP/N100
 1038 LET L=N5
 1039 LET M=N2
 1040 GOSUB N8
 1041 LET L$(X,N25 TO N29)=C$( TO N5)
 1042 LET P=VAL Z$
 1043 LET Q=R
 1047 LET FT=N
 1048 GOTO 1080
 1050 LET L$(N60, TO N6)=T$(J, TO N6)
 1051 LET L$(N60,N17)=T$(J,N24)
 1052 LET L$(N60,N19 TO )=Q$(VAL T$(J,N24))
 1053 LET L$(X)=L$(N60)
 1054 RETURN
 1061 LET B=VAL T$(J,N20 TO N23)/N10
 1062 IF SP=N THEN LET B=B/H3
 1063 IF SP=N3 THEN LET B=B/H4
 1064 LET B=B*U
 1065 RETURN
 1070 LET B=U/V
 1071 IF FT=Z THEN LET B=Z
 1072 IF FT<>Z THEN LET B=B*VAL L$(X,N18 TO N23)/N10
 1073 IF SP=N THEN LET B=B/H3
 1074 IF SP=N3 THEN LET B=B/H4
 1075 RETURN
 1080 LET K=X
 1081 LET I=N11
 1082 GOSUB N5
 1083 LET I=N16
 1084 GOSUB N5
 1085 LET I=N23
 1086 GOSUB N5
 1087 LET I=28
 1088 GOSUB N5
 1089 LET I=N29
 1090 GOSUB N5
 1091 RETURN
 1125 GOSUB N3
 1126 LET L$(N)=L$(N24)
 1127 GOSUB 730
 1128 FOR K=N TO N11
 1129 LET L$(K+N)=L$(38+K)
 1130 NEXT K
 1131 DIM X$(N9)
 1132 DIM O(N2)
 1133 LET C=Z
 1134 LET D=Z
 1135 LET G=Z
 1136 LET P=Z
 1137 LET Q=Z
 1138 LET R=Z
 1139 LET U=Z
 1140 LET V=Z
 1141 RETURN
 5551 LET K=N25
 5552 GOSUB 651
 5553 GOSUB 609
 5554 GOSUB 621
 5555 GOSUB 631
 5556 GOSUB 641
 5557 LET L$(K, TO N3)=STR$ O(N)
 5558 LET I=N32
 5559 GOSUB N5
 5560 LET I=N27
 5561 GOSUB N5
 5562 GOSUB 595
 5565 GOTO CF
 6000 LET M=H3/N10
 6001 IF C$="I" THEN LET M=H4/N10
 6005 LET B=VAL I$(N4)*M
 6006 LET M=N
 6007 LET L=N4
 6008 LET C$="0000"
 6009 GOSUB 370
 6010 LET I$(N4)=C$( TO N4)
 6011 RETURN
 6050 LET B=VAL T$(J,N20 TO N23)/(H3*N10)
 6051 IF SP=N3 THEN LET B=VAL T$(J,N20 TO N23)/(H4*N10)
 6052 LET L=N4
 6053 LET M=N
 6054 GOSUB N8
 6055 LET L$(K,N29 TO N32)=C$
 6056 RETURN

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top