10 REM 12/05/78
20 REM ** TRS-80 INVENTORY CONTROL SYSTEM **
25 IF PEEK(14312)>127 THEN PRINT "PRINTER NOT READY":GOTO 40
30 LPRINT CHR$(27);CHR$(20)
40 POKE 16425,1:CLEAR 500:W$="":ON ERROR  GOTO 90:OPEN "I",1,"TRANSFER"
50 LINE  INPUT   # 1,PI$:LINE  INPUT   # 1,PS$:LINE  INPUT   # 1,PD$
60 LINE  INPUT   # 1,PT$:LINE  INPUT   # 1,PR$
70 CLOSE 1:KILL "TRANSFER"
80 CLS:GOSUB 250:GOTO 200
90 IF ERR/2+1=54 THEN RESUME 110
100 ON ERROR  GOTO 0
110 IF LEFT$(TIMES,2)="00" OR MID$(TIMES,3,1)<>"/" OR MID$(TIMES,6,1)<>"/" THEN CLS:GOTO 190
120 CLS:PRINT @ 458,"DATE IS SET TO ";LEFT$(TIMES,8);" . IS THIS CORRECT ? ";
130 FL=1:GOSUB 370:Q$=IN$:IF Q$<>"Y" AND Q$<>"N" THEN PRINT CHR$(8);:GOTO 130: ELSE IF Q$="N" THEN 140: ELSE 190
140 PRINT @ 588,"ENTER CORRECT DATE (MM/DD/YY) : ";
150 FL=8:GOSUB 370:DT$=IN$
160 POKE 16454,VAL(LEFT$(DT$,2)):POKE 16452,VAL(RIGHT$(DT$,2))
170 POKE 16453,VAL(MID$(DT$,4,2))
180 GOTO 110
190 CLS:GOSUB 250:GOSUB 3180:IF P$="" THEN 190: ELSE GOSUB 3170:PRINT @ 472,"INITIALIZING";CHR$(30)
200 DEFINT A,C,H,J,K,F,L,M,N,P,T,V,W:DIM V(1000)
210 DEFFNGP(IC,IP)=(IP-IC)/IP*100
220 ON ERROR  GOTO 3550:POKE 16424,67:POKE 16425,1:XX=1:LF$=CHR$(32):LL$=STRING$(132,"-")
230 READ A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,L0$,L1$,L6$,L7$:RESTORE :GOTO 3010
240 GOSUB 250:GOTO 270
250 CLS:PRINT TAB(13)"TRS-80 INVENTORY CONTROL SYSTEM":PRINT @ 117,LEFT$(TIMES,8);:PRINT :RETURN 
260 GOSUB 250:PRINT TAB(20)"SYSTEM STATUS REPORT":PRINT :GOSUB 3070:PRINT :GOSUB 2480:RETURN 
270 PRINT "FUNCTIONS:
   :PRINT "
   :PRINT "1 - INPUT NEW ITEMS
   :PRINT "2 - ACCESS / UPDATE
   :PRINT "3 - OUTPUT REPORTS AND SUMMARIES
   :PRINT "4 - CREATE NEW INVENTORY
   :PRINT "5 - ENTER SALES TICKETS
   :PRINT "6 - END OF PERIOD PROCESSING"
280 PRINT "7 - ENTER RECEIPTS OF ON-ORDER ITEMS
   :PRINT "8 - ENTER ITEMS PLACED ON ORDER
   :PRINT "9 - DISPLAY SYSTEM STATUS
   :PRINT "@ - EXIT FROM PROGRAM"
290 PRINT :PRINT "SELECT FUNCTION > ";
300 FL=-1:GOSUB 370:S$=IN$:IF CF=1 THEN 330: ELSE IF S$<"1" OR S$>"9" THEN PRINT CHR$(8);:GOTO 300
310 ON VAL(S$) GOSUB 560,800,1530,1800,1870,2000,1300,1310,260
320 IF FD=0 THEN 240: ELSE CLS:PRINT @ 464,"LOADING IN DATA FOR SORT":CLOSE :GOSUB 2750:GOSUB 2720:GOTO 3670
330 CLS
340 PRINT @ 472,"END OF PROGRAM":PRINT :PRINT :IF ER=1 THEN CLOSE :CLEAR 50:END: ELSE CLOSE :GOSUB 2750:GOSUB 2720:CLEAR 50:END
350 PRINT @ 128,CHR$(30);CHR$(29);"(TYPE @ TO EXIT TO MAIN MENU)";:RETURN 
360 PRINT @ 128,CHR$(30);CHR$(29);"(TYPE @ TO REDO ENTRY)";:RETURN 
370 IN$="":CF=0:W$=INKEY$:WD=0:WS=WD:WL=WD:IF FL=WD THEN FL=1
380 PRINT STRING$(ABS(FL),CHR$(136));STRING$(ABS(FL),CHR$(24));
390 PRINT CHR$(14);:FOR W=1 TO 25:W$=INKEY$:IF W$<>"" THEN 400: ELSE NEXT :PRINT CHR$(15);:FOR W=1 TO 25:W$=INKEY$:IF W$<>"" THEN 400: ELSE NEXT :GOTO 390
400 IF W$<>CHR$(13) THEN 420: ELSE PRINT STRING$(ABS(FL)-WL," ");
410 PRINT CHR$(15);:W=25:NEXT :RETURN 
420 IF W$<>"@" THEN 440
430 CF=1:PRINT CHR$(15);:RETURN 
440 PRINT CHR$(14);:IF W$=CHR$(24) THEN PRINT STRING$(WL,CHR$(24));:GOTO 370
450 IF W$<>CHR$(8) THEN 490: ELSE IF WL=0 THEN 390: ELSE PRINT CHR$(24);:IF FL>0 THEN 470: ELSE IF PEEK(16418)=44 THEN 480
460 IF PEEK(16418)=46 THEN WD=0:GOTO 470: ELSE IF PEEK(16418)=43 OR PEEK(16418)=45 THEN WS=0
470 IN$=LEFT$(IN$,LEN(IN$)-1)
480 WL=WL-1:POKE 16418,136:GOTO 390
490 IF ABS(FL)=WL THEN 390: ELSE IF FL>0 THEN IF W$>=" " AND W$<="z" THEN 540
500 IF W$="." AND WD=0 THEN WD=1:GOTO 540
510 IF W$="," THEN PRINT W$;:WL=WL+1:GOTO 550
520 IF (W$="-" OR W$="+") AND WS=0 AND WL=0 THEN WS=1:GOTO 540
530 IF W$<"0" OR W$>"9" THEN 390
540 PRINT W$;:IN$=IN$+W$:WL=WL+1
550 IF ABS(FL)=1 THEN 410: ELSE 390
560 CLS:PRINT TAB(20)"INPUT NEW ITEMS":PRINT 
570 IF ER=1 THEN GOSUB 3060:RETURN 
580 J=TN
590 IF TI=1000 THEN CLS:PRINT @ 468,"SYSTEM IS FULL (1000 ITEMS)":GOSUB 2480:RETURN : ELSE PRINT @ A0,CHR$(30);:GOSUB 2510:GOSUB 350
600 IF FD<>0 THEN PRINT @ 295,"(LAST ENTRY: ";IS$;")";
610 FL=10:PRINT @ A0,;:GOSUB 370:IF CF=0 THEN IS$=IN$: ELSE 630
620 IF IS$<>"" THEN 640: ELSE 610
630 RETURN 
640 GOSUB 360
650 FL=19:PRINT @ A1,;:GOSUB 370:IF CF=0 THEN ID$=IN$: ELSE 560
660 FL=-4:PRINT @ A2,;:GOSUB 370:IF CF=0 THEN IQ%=VAL(IN$): ELSE 560
670 FL=-7:PRINT @ A3,;:GOSUB 370:GOSUB 3750:IF CF=0 THEN IC=VAL(IN$):PRINT CHR$(30);: ELSE ON CF GOTO 560,670
680 FL=-7:PRINT @ A4,;:GOSUB 370:GOSUB 3750:IF CF=0 THEN IP=VAL(IN$):PRINT CHR$(30);: ELSE ON CF GOTO 560,680
690 GOSUB 2830
700 FL=10:PRINT @ A5,;:GOSUB 370:IF CF=0 THEN IL$=IN$: ELSE 560
710 FL=-4:PRINT @ A6,;:GOSUB 370:IF CF=0 THEN IR%=VAL(IN$): ELSE 560
720 PRINT " / ";:FL=-4:GOSUB 370:IF CF=0 THEN IN%=VAL(IN$): ELSE 560
730 FL=-4:PRINT @ A7,;:GOSUB 370:IF CF=0 THEN IO%=VAL(IN$): ELSE 560
740 FL=8:PRINT @ A8,;:GOSUB 370:IF CF=0 THEN IM$=IN$: ELSE 560
750 FL=6:PRINT @ A9,;:GOSUB 370:IF CF=0 THEN IV$=IN$: ELSE 560
760 P1=0:P2=0:GOSUB 3860
770 TC # =TC # +IC*IQ%:TP # =TP # +IP*IQ%:TR # =TR # +IO%*IC:TI=TI+1
780 FD=1:GOSUB 3130:GOSUB 2630:GOSUB 2660:GOSUB 2650:GOSUB 2540
790 GOSUB 2600:GOSUB 2560:TN=TN+1:J=TN:GOSUB 2510:GOTO 590
800 CLS:PRINT TAB(20)"ACCESS / UPDATE DATA":PRINT 
810 IF ER=1 THEN GOSUB 3060:RETURN 
820 PRINT @ A0,CHR$(31);:GOSUB 2510
830 GOSUB 2780:PRINT "ENTER STOCK # (TYPE @ TO EXIT) ----> ";
840 FL=10:GOSUB 370:IF CF=0 THEN IS$=IN$: ELSE 1270
850 GOSUB 2420
860 IF K=0 THEN PRINT @ AB,"ITEM NOT IN LISTING";:GOSUB 2500:GOSUB 2510:GOTO 830
870 GOSUB 2760
880 GOSUB 2780:PRINT "SELECT (U)PDATE, (S)EARCH, (N)EXT ITEM, (P)REVIOUS ITEM,
   :PRINT "(A)DJUST QTY, (D)ELETE, (@) TO EXIT TO MAIN MENU --> ";
890 FL=1:GOSUB 370:IF CF=1 THEN 1270: ELSE O$=IN$:IF O$<>"U" AND O$<>"S" AND O$<>"N" AND O$<>"P" AND O$<>"D" AND O$<>"A" THEN PRINT CHR$(8);:GOTO 890
900 IF O$="D" THEN 1210
910 IF O$="S" THEN 820
920 IF O$="U" THEN 970
930 IF O$="A" THEN 1240
940 IF O$="P" AND N<>1 THEN N=N-1:J=V(N):IF SGN(J)=-1 THEN 940: ELSE GOSUB 2630:GOSUB 2660:GOSUB 2670:GOSUB 2760:GOTO 880
950 IF O$="N" AND N+1<>TN THEN N=N+1:J=V(N):GOTO 960: ELSE PRINT CHR$(8);:GOTO 890
960 IF SGN(J)=-1 THEN 950: ELSE GOSUB 2630:GOSUB 2660:GOSUB 2670:GOSUB 2760:GOTO 880
970 GOSUB 2780:PRINT "SELECT LINE TO BE UPDATED (TYPE @ TO RESTART)--> ";
980 FL=-1:GOSUB 370:IF CF=0 THEN U$=IN$:IF U$<"1" OR U$>"9" THEN PRINT CHR$(8);:GOTO 980
990 IF CF<>0 THEN 880
1000 GOSUB 2780:ON VAL(U$) GOTO 1010,1030,1050,1070,1090,1110,1140,1160,1180
1010 GOSUB 2780:PRINT "1 - DESCRIPTION : ";
1020 FL=19:GOSUB 370:IF CF=0 THEN ID$=IN$:GOTO 1200: ELSE 990
1030 GOSUB 2780
1040 PRINT "2 - QUANTITY : ";:FL=-4:GOSUB 370:IF CF=0 THEN GOSUB 1280:IQ%=VAL(IN$):GOSUB 1290:GOTO 1200: ELSE 990
1050 GOSUB 2780
1060 PRINT "3 - COST : ";:FL=-7:GOSUB 370:GOSUB 3750:IF CF=0 THEN GOSUB 1280:IC=VAL(IN$):GOSUB 1290:PRINT CHR$(30);:GOTO 1200: ELSE ON CF GOTO 990,1050
1070 GOSUB 2780
1080 PRINT "4 - RETAIL PRICE : ";:FL=-7:GOSUB 370:GOSUB 3750:IF CF=0 THEN GOSUB 1280:IP=VAL(IN$):GOSUB 1290:PRINT CHR$(30);:GOTO 1200: ELSE ON CF GOTO 990,1070
1090 GOSUB 2780:PRINT "5 - LOCATION : ";
1100 FL=10:GOSUB 370:IF CF=0 THEN IL$=IN$:GOTO 1200: ELSE 990
1110 GOSUB 2780:PRINT "6 - REORDER POINT/QTY : ";
1120 FL=-4:GOSUB 370:IF CF=0 THEN IR%=VAL(IN$): ELSE 990
1130 PRINT " / ";:FL=-4:GOSUB 370:IF CF=0 THEN IN%=VAL(IN$):GOTO 1200: ELSE 990
1140 GOSUB 2780:PRINT "7 - # ON ORDER : ";
1150 FL=-4:GOSUB 370:IF CF=0 THEN GOSUB 1280:IO%=VAL(IN$):GOSUB 1290:GOTO 1200: ELSE 990
1160 GOSUB 2780:PRINT "8 - DATE LAST ORDER : ";
1170 FL=8:GOSUB 370:IF CF=0 THEN IM$=IN$:GOTO 1200: ELSE 990
1180 GOSUB 2780:PRINT "9 - VENDOR : ";
1190 FL=6:GOSUB 370:IF CF=0 THEN IV$=IN$:GOTO 1200: ELSE 990
1200 GOSUB 2560:GOSUB 2510:GOSUB 2860:GOTO 880
1210 V(N)=-J
1220 TI=TI-1:GOSUB 1280:F=F+1
1230 IF N+1=TN THEN PRINT @ A0,CHR$(31);:GOSUB 2510:GOTO 830: ELSE N=N+1:J=V(N):IF SGN(J)=1 THEN GOSUB 2630:GOSUB 2660:GOSUB 2670:GOTO 870: ELSE 1230
1240 GOSUB 2780:PRINT "ENTER + OR - AND CHANGE IN QUANTITY ---> ";
1250 FL=-4:GOSUB 370:IF CF=0 THEN CH$=IN$: ELSE 990
1260 IQ%=IQ%+VAL(CH$):TC # =TC # +IC*VAL(CH$):TP # =TP # +IP*VAL(CH$):GOTO 1200
1270 RETURN 
1280 TC # =TC # -IQ%*IC:TP # =TP # -IQ%*IP:TR # =TR # -IO%*IC:RETURN 
1290 TC # =TC # +IQ%*IC:TP # =TP # +IQ%*IP:TR # =TR # +IO%*IC:RETURN 
1300 CLS:PRINT TAB(10)"ENTER RECEIPTS OF ON-ORDER ITEMS":PRINT :GOTO 1320
1310 CLS:PRINT TAB(15)"ENTER ITEMS PLACED ON ORDER":PRINT 
1320 IF ER=1 THEN GOSUB 3060:RETURN 
1330 PRINT @ A0,CHR$(31);:GOSUB 2510
1340 GOSUB 2780:PRINT "ENTER STOCK# (TYPE @ TO EXIT) ----> ";
1350 FL=10:GOSUB 370:IF CF=0 THEN IS$=IN$: ELSE 1270
1360 GOSUB 2420
1370 IF K=0 THEN PRINT @ AB,"ITEM NOT IN LISTING";:GOSUB 2500:GOSUB 2510:GOTO 1340
1380 GOSUB 2760
1390 IF S$="8" THEN 1490
1400 GOSUB 2780:PRINT "QUANTITY RECEIVED: ";
1410 FL=-4:GOSUB 370:IF CF=0 THEN GOSUB 1280:IQ%=IQ%+VAL(IN$):IO%=IO%-VAL(IN$): ELSE 1340
1420 GOSUB 2780:PRINT "CHANGE IN COST (HIT <ENTER> TO SKIP): ";
1430 FL=-7:GOSUB 370:IF CF<>0 THEN 1340: ELSE IF IN$="" THEN 1450: ELSE GOSUB 3750
1440 IF CF=0 THEN IC=VAL(IN$):PRINT CHR$(30);: ELSE 1420
1450 GOSUB 2780:PRINT "CHANGE IN SELL PRICE (HIT <ENTER> TO SKIP): ";
1460 FL=-7:GOSUB 370:IF CF<>0 THEN 1340: ELSE IF IN$="" THEN 1480: ELSE GOSUB 3750
1470 IF CF=0 THEN IP=VAL(IN$):PRINT CHR$(30);: ELSE 1450
1480 GOSUB 1290:GOSUB 2560:GOSUB 2510:GOSUB 2860:GOTO 1340
1490 GOSUB 2780:PRINT "QUANTITY ORDERED (HIT <ENTER> FOR DEFAULT QTY): ";
1500 FL=-4:GOSUB 370:IF CF<>0 THEN 1340: ELSE GOSUB 1280:IF IN$="" THEN IO%=IO%+IN%: ELSE IO%=IO%+VAL(IN$)
1510 GOSUB 2780:PRINT "DATE OF ORDER (HIT <eNTER> FOR LAST ENTERED DATE): ";
1520 FL=8:GOSUB 370:IF IN$<>"" THEN IP$=IN$:IM$=IN$:GOTO 1480: ELSE IM$=IP$:GOTO 1480
1530 CLS:PRINT TAB(15)"OUTPUT REPORTS AND SUMMARIES":PRINT 
1540 IF ER=1 THEN GOSUB 3060:RETURN 
1550 PRINT "OPTIONS:
    :PRINT "
    :PRINT "1 - PRINTOUT COMPLETE LISTING
    :PRINT "2 - PRINTOUT OF NOT-IN-STOCK ITEMS
    :PRINT "3 - PRINTOUT ALL ITEMS ON ORDER
    :PRINT "4 - PRINTOUT ALL ITEMS AT OR BELOW REORDER POINT
    :PRINT "5 - PRINTOUT BY VENDOR
    :PRINT "6 - PRINTOUT BY PREFIX / SUFFIX"
1560 PRINT "7 - PRINT SUGGESTED PURCHASE ORDER TO VENDOR
    :PRINT "8 - TEST PRINTER
    :PRINT "@ - EXIT TO MAIN MENU"
1570 PRINT :PRINT "SELECT OPTION --> ";
1580 FL=-1:GOSUB 370:IF CF=1 THEN RETURN : ELSE O$=IN$:IF O$<"1" OR O$>"8" THEN PRINT CHR$(8);:GOTO 1580
1590 GOSUB 3730:IF XX=1 THEN 1530
1600 GOSUB 3000
1610 O=VAL(O$):IF O=8 THEN FOR T=0 TO 131:LPRINT "*";:NEXT :CLS:GOTO 1530
1620 GOSUB 2960:IF O<>7 THEN GOSUB 2970:GOSUB 3000
1630 ON O GOSUB 3250,3270,3290,3310,3330,3360,3430
1640 IF O<>7 THEN GOSUB 2890:FOR N=1 TO TN-1: ELSE GOSUB 3780:FOR N=1 TO TN-1
1650 J=V(N):IF SGN(J)=-1 THEN 1680
1660 ON O GOSUB 3260,3280,3300,3320,3350,3400,3450
1670 EN$=INKEY$:IF EN$="@" THEN LPRINT " ":LPRINT "   * TERMINATED *":POKE 16425,1:GOTO 1530
1680 NEXT 
1690 IF O<>1 AND O<>3 AND O<>7 AND O<>5 AND O<>6 THEN 1770
1700 IF O=3 THEN 1760
1710 IF O=7 THEN 3830
1720 IF O=5 OR O=6 THEN 3480
1725 IF  GI<>TI  AND  GC # <>TC #   AND  GP # <>TP #   AND  GR # <>TR #   THEN GOSUB 4050
1730 GI=0:GC # =0:GP # =0:GR # =0:LPRINT " ":LPRINT "TOTAL ITEMS LISTED:";TAB(25)TI
1740 IF CC=0 THEN LPRINT "TOTAL COST VALUE:";TAB(25);:LPRINT  USING L6$;TC # 
1750 LPRINT "TOTAL RETAIL VALUE:";TAB(25);:LPRINT  USING L6$;TP # 
1760 IF CC=0 THEN LPRINT " ":LPRINT "TOTAL COST OF ORDERS:";TAB(25);:LPRINT  USING L6$;TR # 
1770 GOSUB 3240:CLS:GOTO 1530
1780 GOSUB 2630:GOSUB 2660:GOSUB 2670:RETURN 
1790 GOSUB 2540:GOSUB 2600:GOSUB 2610:GOSUB 4000:RETURN 
1800 CLS:PRINT TAB(20)"CREATE NEW INVENTORY"
1810 IF ER=0 THEN PRINT @ 448,"SYSTEM CONTAINS INVENTORY DATA. IF YOU WISH TO THEN ERASE ALL DATA,
    :PRINT "TYPE (SHIFT) K OR ELSE TYPE @ TO RETURN TO MAIN MENU --> ";: ELSE 1840
1820 FL=1:GOSUB 370:IF CF=1 THEN RETURN : ELSE T$=IN$:IF T$<>"k" THEN PRINT CHR$(8);:GOTO 1820
1830 CLOSE :KILL PI$:KILL PD$:KILL PT$:KILL PS$:KILL PR$:CLS:PRINT @ 468,"ALL DATA ERASED":ER=1:PRINT :PRINT :GOSUB 2480:RETURN 
1840 TC # =0:TP # =0:TR # =0:TI=0:TN=1:HI=0:HN=1:F=0:ER=0:GOSUB 2530
1850 PRINT @ 460,"SYSTEM READY FOR NEW INVENTORY"
1860 PRINT :PRINT :GOSUB 2480:RETURN 
1870 CLS:PRINT TAB(21)"ENTER SALES TICKETS":PRINT 
1880 IF ER=1 THEN GOSUB 3060:RETURN 
1890 GOSUB 2350:H=HN:HC=0
1900 IF HI=1000 THEN CLS:PRINT @ 448,"SALES FILE IS FULL (1000 ITEMS). USE FUNCTION 6 TO
    :PRINT "POST SALES AND CLEAR THE FILE.":CLOSE 1:GOSUB 2500:RETURN 
1910 GOSUB 350
1920 PRINT @ 256,CHR$(31);
1930 IF HC<>0 THEN PRINT @ 295,"(LAST ENTRY: ";HA$;")";
1940 PRINT @ 256,"STOCK NUMBER: ";
1950 FL=10:GOSUB 370:IF CF=0 THEN HA$=IN$: ELSE CLOSE 1:RETURN 
1960 GOSUB 360:PRINT @ 384,"QUANTITY SOLD: ";
1970 FL=-4:GOSUB 370:IF CF=0 THEN HB=VAL(IN$): ELSE 1910
1980 GOSUB 2360:GOSUB 2400:GOSUB 2380
1990 HI=HI+1:HN=HN+1:H=HN:HC=1:GOTO 1900
2000 CLS:PRINT TAB(20)"END OF PERIOD PROCESSING":PRINT 
2010 IF ER=1 THEN GOSUB 3060:RETURN 
2020 PRINT @ 128,"FUNCTIONS:
    :PRINT "
    :PRINT "1 - POST SALES TICKETS AND CLEAR TICKET FILE
    :PRINT "
    :PRINT "2 - CLEAR CURRENT SALES FIGURES FROM INVENTORY
    :PRINT "
    :PRINT "3 - CLEAR CURRENT AND CUMULATIVE SALES FIGURES FROM INVENTORY
    :PRINT "
    :PRINT "@ - EXIT TO MAIN MENU":PRINT 
2030 PRINT "SELECT FUNCTION > ";
2040 FL=-1:GOSUB 370:IF CF=1 THEN RETURN : ELSE HO$=IN$:IF HO$<"1" OR HO$>"3" THEN PRINT CHR$(8);:GOTO 2040
2045 IF VAL(HO$)>1 THEN PRINT "  ARE YOU SURE (Y/N)";:FL=1:GOSUB 370:IF IN$<>"Y" THEN 2000
2050 ON VAL(HO$) GOTO 2060,2260,2280
2060 GOSUB 3730:IF XX=1 THEN 2000
2070 IF HI=0 THEN CLS:PRINT @ 460,"NO UNPOSTED SALES TICKETS IN FILE":GOSUB 2500:GOTO 2000: ELSE GOSUB 2190
2080 CLS:PRINT @ 468,"pOSTING IN PROGRESS"
2090 GOSUB 2350:HT=HI:HC # =0
2100 FOR H=1 TO HI
2110 GOSUB 2360:GOSUB 2400:GOSUB 2410:IS$=HA$
2120 GOSUB 2420:IF K=0 THEN GOSUB 2200:GOTO 2170
2130 GOSUB 2540:GOSUB 2600:GOSUB 2610
2140 P1=P1+HB:P2=P2+HB:HC # =HC # +HB*IC
2150 IQ%=IQ%-HB:TC # =TC # -HB*IC:TP # =TP # -HB*IP:IF IQ%<0 THEN GOSUB 2220
2160 GOSUB 2560:HT=HT-1:PRINT @ 596,"TICKETS REMAINING: ";HT
2170 NEXT :GOSUB 2230
2180 HI=0:HN=1:CLOSE 1:KILL PR$:GOTO 2000
2190 GOSUB 2960:LPRINT TAB(30)"SALES TICKET POSTING REPORT":LPRINT LF$:RETURN 
2200 LPRINT "E R R O R : STOCK # ";HA$;" IS NOT IN INVENTORY LISTING AND WAS NOT POSTED":LPRINT LF$
2210 RETURN 
2220 LPRINT "N O T E : STOCK # ";HA$;" NOW HAS A QUANTITY OF ";IQ%:LPRINT LF$:RETURN 
2230 LPRINT "NUMBER OF ITEMS POSTED: ";HI-HT
2240 LPRINT "TOTAL COST OF GOODS SOLD: "; USING L6$;HC # 
2250 GOSUB 3240:RETURN 
2260 CLS:PRINT @ 463,"CLEARING CURRENT SALES FIGURES"
2270 GOSUB 2300:GOTO 2000
2280 CLS:PRINT @ 460,"CLEARING CURRENT AND CUMULATIVE SALES FIGURES"
2290 GOSUB 2300:GOTO 2000
2300 FOR J=1 TO TN-1
2310 GOSUB 2540:GOSUB 2600:GOSUB 2610
2320 IF HO$="3" THEN P2=0
2330 P1=0
2340 GOSUB 2560:NEXT :RETURN 
2350 OPEN "R",1,PR$:RETURN 
2360 HR=INT((H-1)/20)+1:HD=H-20*INT((H-1)/20)-1
2370 FIELD 1,HD*12ASD$,10ASH1$,2ASH2$:RETURN 
2380 LSET H1$=HA$:RSET H2$=MKI$(HB)
2390 PUT 1,HR:RETURN 
2400 GET 1,HR:RETURN 
2410 HA$=H1$:HB=CVI(H2$):RETURN 
2420 NL=0:NH=TN
2430 K=INT((NH-NL)/2):IF K=0 THEN RETURN : ELSE N=K+NL
2435 IF N=NH THEN NH=INT((NH-NL)/2)+NL:GOTO 2430: ELSE IF V(N)<0 THEN N=N+1:GOTO 2435
2440 J=ABS(V(N)):GOSUB 2630:GOSUB 2660:IF IS$+STRING$(10-LEN(IS$)," ")=N$ THEN IS$=N$:GOTO 2470
2450 IF IS$+STRING$(10-LEN(IS$)," ")<N$ THEN NH=N:GOTO 2430
2460 NL=N:GOTO 2430
2470 IF SGN(V(N))=-1 THEN K=0:RETURN : ELSE RETURN 
2480 PRINT TAB(10)"TYPE @ TO RETURN TO MAIN MENU --> ";
2490 FL=1:GOSUB 370:IF CF=1 THEN RETURN : ELSE PRINT CHR$(8);:GOTO 2490
2500 FOR T=1 TO 2500:NEXT :RETURN 
2510 PRINT @ 256,"0 - STOCK # -------->
    :PRINT "1 - DESCRIPTION ---->
    :PRINT "2 - QUANTITY ------->
    :PRINT "3 - COST ----------->
    :PRINT "4 - SELL ----------->
    :PRINT "5 - LOCATION ------->
    :PRINT "6 - REORDER PT/QTY-->
    :PRINT "7 - # ON ORDER ----->
    :PRINT "8 - DATE LAST ORDER->
    :PRINT "9 - VENDOR --------->";CHR$(31);
2520 RETURN 
2530 OPEN "R",2,PD$:OPEN "R",3,PS$:RETURN 
2540 JR=INT((J-1)/4)+1:JD=J-4*INT((J-1)/4)-1
2550 FIELD 2,JD*63ASD$,19ASFD$,2ASFQ$,4ASFC$,4ASFP$,10ASFL$,2ASFR$,2ASFA$,2ASFO$,8ASFM$,6ASFV$,2ASP1$,2ASP2$:RETURN 
2560 LSET FD$=ID$:RSET FQ$=MKI$(IQ%):RSET FC$=MKS$(IC)
2570 RSET FP$=MKS$(IP):LSET FL$=IL$:RSET FR$=MKI$(IR%):RSET FA$=MKI$(IN%)
2580 RSET FO$=MKI$(IO%):LSET FM$=IM$:LSET FV$=IV$:RSET P1$=MKI$(P1):RSET P2$=MKI$(P2)
2590 PUT 2,JR:RETURN 
2600 GET 2,JR:RETURN 
2610 ID$=FD$:IQ%=CVI(FQ$):IC=CVS(FC$):IP=CVS(FP$):IL$=FL$
2620 IR%=CVI(FR$):IN%=CVI(FA$):IO%=CVI(FO$):IM$=FM$:IV$=FV$:P1=CVI(P1$):P2=CVI(P2$):RETURN 
2630 JR=INT((J-1)/25)+1:JD=J-25*INT((J-1)/25)-1
2640 FIELD 3,JD*10ASD$,10ASN$:RETURN 
2650 LSET N$=IS$:PUT 3,JR:RETURN 
2660 GET 3,JR:RETURN 
2670 IS$=N$:RETURN 
2680 OPEN "I",1,PI$:OPEN "I",3,PT$
2690 INPUT   # 3,TC # ,TP # ,TR # ,TI,HI:CLOSE 3
2700 INPUT   # 1,TN,HN,F
2710 FOR N=1 TO TN-1:INPUT   # 1,V(N):NEXT :CLOSE 1:RETURN 
2720 OPEN "O",1,PI$
2730 PRINT # 1,TN;HN;F
2740 FOR N=1 TO TN-1:PRINT # 1,V(N):NEXT :CLOSE 1:RETURN 
2750 OPEN "O",3,PT$:PRINT # 3,TC # ;TP # ;TR # ;TI;HI:CLOSE 3:RETURN 
2760 PRINT @ A0,CHR$(30);:GOSUB 2510:GOSUB 2540:GOSUB 2600:GOSUB 2610:PRINT @ A0,IS$;:GOSUB 2860:RETURN 
2770 DATA 281,345,409,473,537,601,665,729,793,857,128,490,960
2780 PRINT @ AA,CHR$(30):PRINT CHR$(30);:PRINT @ AA,;:RETURN 
2790 DATA "####"
2800 DATA "####.##"
2810 DATA "$$###,####.##"
2820 DATA "###.#"
2830 IF IP<>0 THEN PRINT @ 552,"GROSS PROFIT= "; USING L7$;FNGP(IC,IP);:PRINT " %";:RETURN : ELSE RETURN 
2840 IF CC=1 THEN LPRINT "  ****";:RETURN 
2850 IF IP<>0 THEN LPRINT " "; USING L7$;FNGP(IC,IP);:RETURN : ELSE RETURN 
2860 PRINT @ A1,ID$;:PRINT @ A2,IQ%;:PRINT @ A3, USING L1$;IC;:PRINT @ A4, USING L1$;IP;:GOSUB 2830
2870 PRINT @ A5,IL$;:PRINT @ A6,IR%;"/";IN%;:PRINT @ A7,IO%;:PRINT @ A8,IM$;:PRINT @ A9,IV$;:GOSUB 3860
2880 RETURN 
2890 LPRINT "STOCK #     DESCRIPTION           QTY     COST     SELL  GP %  LOCATION    R/O PT / QTY   ON ORDER  DATE      VENDOR   CURR / CUML"
2900 LPRINT "=======     ===========           ===     ====     ====  ====  ========    =====   ====   ========  ====      ======   ====   ===="
2910 LPRINT " ":RETURN 
2920 GOSUB 3720:LPRINT IS$;TAB(12)ID$;TAB(33);:LPRINT  USING L0$;IQ%;:LPRINT TAB(39);:IF CC=0 THEN LPRINT  USING L1$;IC;: ELSE LPRINT "   ****";
2930 LPRINT TAB(48) USING L1$;IP;:GOSUB 2840
2940 LPRINT TAB(63)IL$;"  ";:LPRINT  USING L0$;IR%;:LPRINT " / ";:LPRINT  USING L0$;IN%;:LPRINT "      ";:LPRINT  USING L0$;IO%;:LPRINT "    ";IM$;"  ";IV$;"   "; USING L0$;P1;:LPRINT " / "; USING L0$;P2
2950 RETURN 
2960 LPRINT LL$:LPRINT LF$:LPRINT LF$:LPRINT LEFT$(TIMES,8):LPRINT LF$:RETURN 
2970 CLS:PRINT @ 456,"DO YOU WANT TO SUPPRESS COST AND PROFIT FIGURES ? ";
2980 FL=1:GOSUB 370:IF IN$<>"Y" AND IN$<>"N" THEN PRINT CHR$(8);:GOTO 2980
2990 IF IN$="N" THEN CC=0:RETURN : ELSE CC=1:RETURN 
3000 PRINT @ 128,CHR$(31):PRINT @ 470,"** PRINTING **":RETURN 
3010 GOSUB 2680:IF ER=1 THEN RESUME 3050
3020 PRINT @ 128,CHR$(31);
3030 GOSUB 2530
3040 GOTO 240
3050 PRINT @ 448,CHR$(30);CHR$(29);"NO DATA IN SYSTEM. USE FUNCTION 4 OF MENU TO CREATE INVENTORY.":PRINT :GOSUB 2480:GOTO 240
3060 PRINT @ 458,"NO DATA IN SYSTEM! USE FUNCTION 4 FIRST!":GOSUB 2500:RETURN 
3070 PRINT :PRINT "NUMBER OF ITEMS CURRENTLY IN LISTING: ";TI
3080 PRINT "NUMBER OF UNPOSTED SALES TICKETS: ";HI
3090 PRINT "TOTAL COST (WHOLESALE) VALUE: ";:PRINT USING L6$;TC # 
3100 PRINT "TOTAL RETAIL SALE VALUE ----: ";:PRINT USING L6$;TP # 
3110 PRINT "TOTAL VALUE OF ITEMS ORDERED: ";:PRINT USING L6$;TR # 
3120 RETURN 
3130 IF F=0 THEN V(J)=J:RETURN 
3140 FOR N=1 TO TN-1
3150 IF SGN(V(N))=-1 THEN V(N)=ABS(V(N)):J=V(N):TN=TN-1:F=F-1:RETURN 
3160 NEXT :F=0:V(J)=J:RETURN 
3170 PI$="INDEXFIL"+"."+P$+":0":PD$="DATAFILE"+"."+P$+":0":PT$="INFOFILE"+"."+P$+":0":PS$="STOCKNUM"+"."+P$+":0":PR$="SALEDATA"+"."+P$+":0":RETURN 
3180 PRINT @ 472,"ENTER PASSWORD ---> ";
3190 P$="":FOR X=1 TO 8
3200 PE$=INKEY$:IF PE$="" THEN 3200: ELSE IF PE$<" " OR PE$>"Z" THEN 3220
3210 P$=P$+PE$:PRINT "#";:GOTO 3230
3220 IF ASC(PE$)=13 THEN RETURN : ELSE 3200
3230 NEXT :RETURN 
3240 LPRINT " ":LPRINT "END OF LISTING":LPRINT LL$:LPRINT CHR$(12):RETURN 
3250 LPRINT TAB(30)"COMPLETE INVENTORY LISTING":LPRINT " ":RETURN 
3260 GOSUB 1780:GOSUB 1790:GOSUB 2920:RETURN 
3270 LPRINT TAB(30)"LISTING OF NOT-IN-STOCK ITEMS":LPRINT " ":RETURN 
3280 GOSUB 1790:IF IQ%>0 THEN RETURN : ELSE GOSUB 1780:GOSUB 2920:RETURN 
3290 LPRINT TAB(30)"LISTING OF ALL ITEMS ON ORDER":LPRINT " ":RETURN 
3300 GOSUB 1790:IF IO%=0 THEN RETURN : ELSE GOSUB 1780:GOSUB 2920:RETURN 
3310 LPRINT TAB(30)"LISTING OF ALL ITEMS AT OR BELOW REORDER POINT":LPRINT " ":RETURN 
3320 GOSUB 1790:IF IQ%>IR% THEN RETURN : ELSE GOSUB 1780:GOSUB 2920:RETURN 
3330 GOSUB 3530:GOSUB 3000
3340 LPRINT TAB(30)"LISTING BY VENDOR: ";IX$:LPRINT " ":GOSUB 3460:RETURN 
3350 GOSUB 1790:IF LEFT$(IV$,LEN(IX$))<>IX$ THEN RETURN : ELSE GOSUB 1780:GOSUB 3470:GOSUB 2920:RETURN 
3360 CLS:GOSUB 3460:PRINT @ 468,"(P)REFIX OR (S)UFFIX ? "
3370 S$=INKEY$:IF S$<>"P" AND S$<>"S" THEN 3370
3380 IF S$="P" THEN PRINT @ 532,"ENTER PREFIX --> ";:FL=10:GOSUB 370:K$=IN$:GOSUB 3000:LPRINT TAB(30)"LISTING BY PREFIX: ";K$:LPRINT " ":RETURN 
3390 PRINT @ 532,"ENTER SUFFIX --> ";:FL=10:GOSUB 370:K$=IN$:GOSUB 3000:LPRINT TAB(30)"LISTING BY SUFFIX: ";K$:LPRINT " ":RETURN 
3400 GOSUB 1780:IF S$="S" THEN 3420
3410 IF LEFT$(IS$,LEN(K$))<>K$ THEN RETURN : ELSE GOSUB 1790:GOSUB 3470:GOSUB 2920:RETURN 
3420 IF RIGHT$(IS$,LEN(K$))<>K$ THEN RETURN : ELSE GOSUB 1790:GOSUB 3470:GOSUB 2920:RETURN 
3430 GOSUB 3530:GOSUB 3000
3440 LPRINT TAB(20)"SUGGESTED PURCHASE ORDER TO VENDOR: ";IX$:LPRINT " ":TT=0:T1 # =0:RETURN 
3450 GOSUB 1790:IF LEFT$(IV$,LEN(IX$))<>IX$ OR IQ%>IR% OR IR%<(IO%+IQ%) THEN RETURN : ELSE GOSUB 1780:GOSUB 3800:RETURN 
3460 TT=0:T1 # =0:T2 # =0:T3 # =0:RETURN 
3470 TT=TT+1:T1 # =T1 # +IQ%*IC:T2 # =T2 # +IQ%*IP:T3 # =T3 # +IO%*IC:RETURN 
3480 LPRINT " ":LPRINT "NUMBER OF ITEMS:";TAB(25)TT
3490 IF CC=0 THEN LPRINT "TOTAL COST VALUE:";TAB(25) USING L6$;T1 # 
3500 LPRINT "TOTAL RETAIL VALUE:";TAB(25) USING L6$;T2 # 
3510 IF CC=0 THEN LPRINT "TOTAL COST OF ORDERS:";TAB(25) USING L6$;T3 # 
3520 GOSUB 3240:CLS:GOTO 1540
3530 CLS:PRINT @ 450,"ENTER ENOUGH LETTERS TO IDENTIFY VENDOR --> ";
3540 FL=6:GOSUB 370:IX$=IN$:RETURN 
3550 IF ERR/2+1=54 THEN ER=1:RETURN 
3560 IF ERR/2+1=57 THEN 3610
3570 IF ERR/2+1=68 THEN CLS:CLOSE :PRINT @ 458,"NO DISK IN DRIVE #1 - RUN TERMINATED":CLEAR 50:PRINT :PRINT :END
3580 IF ERR/2+1=70 THEN CLS:PRINT @ 465,"UNAUTHORIZED ACCESS TO INVENTORY SYSTEM
    :PRINT ""TAB(28)"RUN TERMINATED":PRINT :CLEAR 50:END
3590 PRINT :PRINT CHR$(30);"UNEXPECTED ERROR CODE ";ERR/2+1;"IN LINE";ERL:GOSUB 2500:GOTO 330
3600 ON ERROR  GOTO 0
3610 CLS:PRINT @ 404,"** DISK I/O ERROR **":TE=TE+1
3620 PRINT @ 586,"TOTAL I/O ERRORS THIS RUN: ";TE
3630 PRINT @ 650,"THIS ERROR OCCURRED IN LINE";ERL
3640 PRINT @ 778,"(T)RY AGAIN OR (E)XIT FROM PROGRAM ? ";
3650 FL=1:GOSUB 370:IF IN$<>"T" AND IN$<>"E" THEN PRINT CHR$(8);:GOTO 3650
3660 IF IN$="T" THEN RESUME : ELSE 330
3670 OPEN "O",1,"TRANSFER:0"
3680 PRINT # 1,PI$:PRINT # 1,PS$:PRINT # 1,PD$:PRINT # 1,PT$:PRINT # 1,PR$
3690 CLOSE 1:CLEAR 50
3700 RUN "DATASORT"
3710 END
3720 IF PEEK(&H4029)<58 THEN RETURN : ELSE LPRINT CHR$(12):GOSUB 2960:GOSUB 2890:RETURN 
3730 IF PEEK(14312)<=127 THEN XX=0:RETURN 
3740 CLS:PRINT @ 468,"PRINTER NOT READY !!":XX=1:GOSUB 2500:CLS:RETURN 
3750 IF CF<>0 THEN RETURN 
3760 IF LEN(IN$)>=3 THEN IF MID$(IN$,LEN(IN$)-2,1)="." THEN RETURN 
3770 PRINT " INVALID FORMAT !";:FOR T=1 TO 1000:NEXT :CF=2:RETURN 
3780 LPRINT " QTY       STOCK #         DESCRIPTION             COST         EXTENSION"
3790 LPRINT " ===        ========       ===========             ====         =========":LPRINT " ":RETURN 
3800 TT=TT+1:T1 # =T1 # +IN%*IC
3810 LPRINT  USING L0$;IN%;:LPRINT TAB(12)IS$;TAB(27)ID$;:LPRINT TAB(48) USING L1$;IC;:LPRINT TAB(60) USING L6$;IN%*IC
3820 RETURN 
3830 LPRINT " ":LPRINT "TOTAL ITEMS:";TT
3840 LPRINT "TOTAL COST OF ORDER:";TAB(20) USING L6$;T1 # 
3850 GOSUB 3240:CLS:GOTO 1540
3860 PRINT @ 616,"CURRENT SALES   : ";P1;
3870 PRINT @ 680,"CUMULATIVE SALES: ";P2;
3880 RETURN 
4000 GC # =GC # +IQ%*IC:GP # =GP # +IQ%*IP:GR # =GR # +IO%*IC:GI=GI+1:RETURN 
4050 TI=GI:TC # =GC # :TP # =GP # :TR # =GR # :RETURN 

