home *** CD-ROM | disk | FTP | other *** search
- REMARK ******************************************\
- * A/R050.BAS CUSTOMER FILE MAINTENANCE *\
- * 6/19/79 3:15 PM *\
- ******************************************
-
-
- DIM M$(5),S$(2),Y(2),Z(2),G2$(5),G3(5)
- YES=1
- WRITTEN$=CHR$(255)
- %INCLUDE CURSOR
- S$(1)="CUSTOMER ACTIVITY REPORT":S$(2)="LIST OF CUSTOMERS"
- GOTO 6000
- %INCLUDE SUBS1
- %INCLUDE GENINFO
- %INCLUDE READCUST
- %INCLUDE WRITCUST
- %INCLUDE A/R-INFO
-
-
-
- 825 IF LINE.COUNT% < 55 AND PAGE.COUNT% > 0 THEN RETURN REMARK LINE PRINTER ROUTINE
- PAGE.COUNT%=PAGE.COUNT%+1
- PRINT CHR$(12);
- PRINT TAB((A1%-LEN(G2$(1)))/2);G2$(1);TAB(A1%);"DATE ";
- X0=G3(1):GOSUB 680.5
- PRINT
- PRINT TAB((A1%-LEN(X4$))/2);X4$;TAB(A1%);"PAGE";PAGE.COUNT%
- PRINT
- PRINT CHR$(10);" CODE";TAB(17);"NAME";
- IF F1=1 THEN \
- PRINT TAB(32);"LAST ACTIVITY CURRENT YEAR LAST YEAR"\
- ELSE\
- PRINT TAB(38);"ADDRESS";TAB(117);"PHONE NO."
- PRINT
- LINE.COUNT%=6
- RETURN
-
-
- 2000 REMARK ********************************************\
- * CUSTOMER FILE SEARCH ROUTINE 12/78 MAM *\
- * ======================================== *\
- * THIS SUBROUTINE USES THE 'B' ALGORITHM *\
- * FROM KNUTH'S SORTING AND SEARCHING BOOK. *\
- * THE ROUTINE FIRST SEARCHES A/R0F110.DAT*\
- * AND, IF NO MATCH IS FOUND FOR THE KEY IN *\
- * K$, THE ROUTINE THEN SEARCHES A/R0F111 IN*\
- * ORDER TO EITHER FIND A NEWLY ADDED RECORD*\
- * OR POSITION THE POINTER, L, TO THE LOCA- *\
- * TION OF THE RECORD TO INSERT. *\
- ********************************************
-
- Y2=1:RECORD.COUNT=AR.CUSTFILE.EXTENT
- 2005 IF LEN(K$)<6 THEN K$=K$+" ":GOTO 2005
- GOSUB 2060 REMARK PERFORM SEARCH ON A/R0F110.DAT
- IF H <> -1 THEN RETURN
- 2010 Y2=2:RECORD.COUNT=NEW.CUSTOMER.RECORDS%
- GOSUB 2060 REMARK IF A/R0F110 SEARCH FAILS, CHECK A/R0F111
- RETURN
- 2060 H=0
- IF RECORD.COUNT < 1 THEN H=-1:L=1:RETURN
- READ #Y2,1;VAR$,VAR1
- IF K$ < VAR$ THEN H=-1:L=1:RETURN
- IF K$ = VAR$ THEN L=1:RETURN
- READ #Y2,RECORD.COUNT;VAR$,VAR1
- IF K$ > VAR$ THEN H=-1:L=RECORD.COUNT+1:RETURN
- IF K$ = VAR$ THEN L=RECORD.COUNT:RETURN
- H=RECORD.COUNT
- L=0
- 2070 M=INT((L+H)/2)
- READ #Y2,M;VAR$,VAR1
- IF VAR$=K$ THEN L=M:RETURN
- IF VAR$ > K$ THEN H=M
- IF VAR$ < K$ THEN L=M
- IF H=M+1 THEN H=-1:L=M+1:RETURN
- GOTO 2070
- RETURN
-
-
- 5000 IF F=1 OR F=2 OR F=3 OR F=4 THEN\
- X1=331+64*F:X2=24:X3=0:X4=0:GOSUB 345:\ REMARK ENTER CUSTOMER NAME/ADDR
- M$(F+1)=X0$:RETURN
- 5020 IF F=5 THEN X1=658:GOSUB 673:D=X0:\ REMARK ENTER CUSTOMER'S LAST ACTIVITY DATE
- RETURN
- IF F=6 OR F=7 THEN\
- X1=664+(F-5)*64:X2=11:X3=-9999999.99:X4=9999999.99:GOSUB 345:\
- Y(F-5)=X0:\ REMARK ENTER CUSTOMER TOTAL FIELDS IN THIS ROUTINE
- RETURN
- X1=849:GOSUB 210
- PRINT " "
- IF F=8 THEN\
- X1=853:X2=10:X3=0:X4=9999999999:GOSUB 345:\ REMARK ENTER PHONE NUMBER
- P9=X0:\
- X0=P9:X1=850:GOSUB 760:PRINT REMARK DISPLAY PHONE NUMBER ON CRT
- RETURN
-
- 5100 FOR I%=2 TO 5
- X1=396+(I%-2)*64:GOSUB 210
- PRINT M$(I%)
- NEXT I%
- X1=658:GOSUB 210
- X0=D:GOSUB 680.5 REMARK DISPLAY ACTIVITY DATE
- PRINT
- X1=22:GOSUB 215
- PRINT USING MASKA$;Y(1)
- X1=22:GOSUB 215
- PRINT USING MASKA$;Y(2)
- X0=P9:X1=850:GOSUB 760
- RETURN
-
-
-
- 5200 REMARK ********** CUSTOMER FILE PRINT ROUTINE **********
-
- IF Y9=1 AND MSTR.RECORD$=WRITTEN$ THEN RETURN
- IF Y9=2 AND NEW.RECORD$=WRITTEN$ THEN RETURN
- GOSUB 3225 REMARK GET CUSTOMER RECORD
- X4$=S$(F1):A1%=76+31*SGN(F1-1) REMARK SET REPORT TITLE & COLUMN WIDTH
- GOSUB 825 REMARK CHECK FOR END OF FORM
- LINE.COUNT%=LINE.COUNT%+1 REMARK PRINT CUSTOMER NUMBER AND NAME
- PRINT W1$; TAB(9); M$(2);
- IF F1=2 THEN\ REMARK IF CUSTOMER LIST, PRINT ADDR & PHONE
- PRINT TAB(35); M$(3); TAB(61); M$(4); TAB(87); M$(5); TAB(113); :\
- X0=P9:GOSUB 760.5:PRINT
-
- IF F1=1 THEN\ REMARK IF ACTIVITY REPORT,
- PRINT TAB(34);:\ REMARK PRINT ACTIVITY DATE & SALES AMOUNTS
- X0=D:GOSUB 680.5:\
- PRINT TAB(48);: PRINT USING MASKA$; Y(2);: PRINT TAB(62);:\
- PRINT USING MASKA$; Y(1):\
- Z(2)=Z(2)+Y(2):\ REMARK ADD TO LAST-YEAR TOTALS
- Z(1)=Z(1)+Y(1) REMARK ADD TO THIS-YEAR TOTALS
- RETURN
-
-
- REMARK START OF MAIN PROGRAM
- 6000 MASKA$=" #######.##"
- MASKB$=" ##########.##"
- OPEN "A/R0F110.DAT" RECL 162 AS 1, "A/R0F130.DAT" AS 3,\
- "G/I0F010.DAT" AS 4, "CRT" RECL 1100 AS 19
- CREATE "A/R0F111.DAT" RECL 162 AS 2
- FILE.NO=3: GOSUB 3.14 REMARK RETRIEVE A/R FILE EXTENT INFORMATION
- CLOSE 3
- Y9=4:GOSUB 700 REMARK RETRIEVE G/I FILE DATA
- CLOSE 4
- CONSOLE
- X0=18:GOSUB 260
- 6020 X2=1:X3=0:X4=4 REMARK PROMPT FOR OPERATION CODE
- X2$="ENTER OPERATION CODE(0=EXIT;1=ADD;2=CHANGE;3=PRINT;4=YR END)"
- GOSUB 665
- C=X0+1
- IF C=1 THEN GOTO 6290 REMARK IF 'EXIT' WAS SELECTED,BRANCH
- IF C=3 THEN GOTO 6120 REMARK GO TO CHANGE RECORD ROUTINE
- IF C=4 THEN GOTO 6260 REMARK BRANCH TO THE FILE PRINT ROUTINE
- IF C=5 THEN GOTO 6280 REMARK GO TO YEAR-END ROUTINE
- 6040 GOSUB 265 REMARK REFRESH CRT MASK
- X1=30:GOSUB 210
- PRINT "ADD "
- X1=271:X2=6:X3=0:X4=0:GOSUB 345 REMARK ENTER CUSTOMER NO.
- IF X0$<=" " THEN GOSUB 265:GOTO 6020 REMARK RE-PROMPT OPERATION CODE IF BLANK ENTRY
- K$=X0$
- GOSUB 2000 REMARK SEARCH A/R0F110 FOR CUSTOMER, THEN SEARCH A/R0F111
- REMARK IN CASE IT ENTERED ON THE DATA INPUT FILE.
- IF H=-1 THEN GOTO 6100
- IF VAR1 > 0 THEN X2$="ALREADY ON FILE":GOSUB 615:GOTO 6040\
- ELSE\
- RE.USE.DELETED.RECORD=YES:FILE.ASSIGNMENT=Y2
- 6100 W1$=K$
- 6100.1 IF LEN(W1$)<6 THEN W1$=W1$+" ":GOTO 6100.1
- FOR I1%=1 TO 8
- F=I1%
- GOSUB 5000
- NEXT I1%
- GOTO 6160
-
- 6110 IF RE.USE.DELETED.RECORD=YES THEN Y9=FILE.ASSIGNMENT:\
- X0=L:GOSUB 3275:RE.USE.DELETED.RECORD=0:GOTO 6040
-
-
- IF L > NEW.CUSTOMER.RECORDS% THEN GOTO 6115
- FOR I=NEW.CUSTOMER.RECORDS% TO L STEP -1
- READ #2,I;LINE X0$
- PRINT USING "&";#2,I+1;X0$ REMARK WRITE CUSTFILE AT I+1
- NEXT I
- 6115 NEW.CUSTOMER.RECORDS%=NEW.CUSTOMER.RECORDS%+1
- Y9=2:X0=L:GOSUB 3275
- CLOSE 2
- OPEN "A/R0F111.DAT" RECL 162 AS 2
- REMARK THE FILE IS CLOSED & THEN RE-OPENED TO SAVE THE FCB IN \
- A FILE DISASTER SITUATION.
- GOTO 6040 REMARK START OVER FOR ANOTHER NEW CUSTOMER
- 6120 GOSUB 265 REMARK REFRESH CRT MASK
- X1=30:GOSUB 210
- PRINT "CHANGE "
- 6140 X1=271:X2=6:X3=0:X4=0:GOSUB 345 REMARK ENTER CUSTOMER #
- IF X0$ <= " " THEN GOTO 6020 REMARK PROMPT OPERATION CODE IF BLANK ENTRY
- K$=X0$
- GOSUB 2000
- IF H=-1 OR VAR1 = 0 THEN X2$="NOT ON FILE":GOSUB 615:GOTO 6120
- X0=L:Y9=Y2:GOSUB 3225 REMARK GET CUSTOMER RECORD FROM FILE
- GOSUB 5100
- 6160 X2=2:X3=0:X4=99
- X2$="ENTER FIELD TO CHANGE (0=NONE, 99=DELETE)"
- GOSUB 665
- F=X0
- IF F=0 AND C=2 THEN GOTO 6110
- IF F=0 THEN GOTO 6180
- IF F=99 THEN GOTO 6200
- GOSUB 5000
- GOTO 6160
- 6180 X0=L
- GOSUB 3275
- GOTO 6120
- 6200 X2=3:X3=0:X4=0:X2$="ENTER DELETE CODE":GOSUB 665
- IF X0$="DEL" THEN D=0:\
- X0=L:GOSUB 3275 REMARK RE-SAVE RECORD WITH A '0' LAST ACTIVITY DATE
- X2$="RECORD DELETED":GOSUB 615
- GOTO 6020
- 6220 X2$="NOT ON FILE":GOSUB 615
- GOTO 6140
- 6260 X1=30:GOSUB 210
- PRINT "PRINT "
- P=0
- X2=1:X3=0:X4=2:X2$="ENTER REPORT TYPE (0=NONE, 1=ACTIVITY, 2=LIST) "
- GOSUB 665
- F1=X0
- IF F1=0 THEN GOTO 6020
- Z(1)=0
- Z(2)=0
- CLOSE 1
- CLOSE 2
- OPEN "A/R0F110.DAT" RECL 162 AS 1, "A/R0F111.DAT" RECL 162 AS 2
- LPRINTER WIDTH 131
- GOSUB 6800
- GOSUB 6810
- LINE.COUNT%=66
- Y9=0
- X0=0
- 6265 IF MSTR.READ% > AR.CUSTFILE.EXTENT AND NEW.READ% > NEW.CUSTOMER.RECORDS%\
- THEN\
- GOTO 6270
-
- IF NEW.RECORD$ > MSTR.RECORD$\
- OR\
- NEW.READ% > NEW.CUSTOMER.RECORDS%\
- THEN\
- X0=MSTR.READ%:Y9=1:GOSUB 5200:\
- MSTR.RECORD$=WRITTEN$:\
- GOSUB 6800
-
- IF NEW.RECORD$=WRITTEN$ THEN GOTO 6265
-
- IF MSTR.RECORD$ > NEW.RECORD$\
- OR\
- MSTR.READ% > AR.CUSTFILE.EXTENT\
- THEN\
- X0=NEW.READ%:Y9=2:GOSUB 5200:\
- NEW.RECORD$=WRITTEN$:\
- GOSUB 6810
- GOTO 6265
- 6270 PRINT
- NEW.READ%=0
- MSTR.READ%=0
- IF F1=1 THEN PRINT "TOTALS";TAB(45);:PRINT USING MASKB$;Z(2);Z(1)
- PRINT
- CONSOLE
- GOTO 6260
- 6280 X1=30:GOSUB 210
- PRINT "YR. END"
- X2=1:X3=0:X4=1:X2$="DO YOU HAVE A RECENT ACTIVITY REPORT?"
- GOSUB 665
- IF X0=0 THEN 6260
- X2=1:X3=0:X4=1:X2$="O.K. TO DO YEAR END UPDATE?"
- GOSUB 665
- IF X0 <> 1 THEN GOTO 6020
- PRINT "WORKING - DO NOT INTERRUPT"
- Y9=1
- FOR I%=1 TO AR.CUSTFILE.EXTENT
- X0=I%
- GOSUB 3225
- 6281 Y(1)=Y(2):Y(2)=0 REMARK RESET TOTALS
- GOSUB 3275
- NEXT I%
- Y9=2
- IF NEW.CUSTOMER.RECORDS%=0 THEN 6285
- FOR I%=1 TO NEW.CUSTOMER.RECORDS%
- X0=I%
- Y(1)=Y(2):Y(2)=0
- GOSUB 3275
- NEXT I%
- 6285 GOSUB 265
- GOTO 6020
- 6290 REMARK END OF MAINLINE CODE, START OF MERGE ROUTINE...
- PRINT CURSOR.HOME$:PRINT:PRINT "WORKING... DO NOT INTERRUPT"
- IF AR.CUSTFILE.EXTENT=0 THEN DELETE 1:\
- CLOSE 2:A=RENAME("A/R0F110.DAT","A/R0F111.DAT"):\
- OUTPUT.COUNT%=NEW.CUSTOMER.RECORDS%:GOTO 9000
- CLOSE 1,2,19
- OPEN "A/R0F110.DAT" RECL 162 AS 1, "A/R0F111.DAT" RECL 162 AS 2
- CREATE "WORKFILE.DAT" RECL 162 AS 3
- IF NEW.CUSTOMER.RECORDS% >0 THEN GOTO 6299
- X2=1:X3=0:X4=0
- X2$="ENTER 'Y' TO REORGANIZE CUSTOMER FILE; ANY OTHER KEY TO EXIT PROGRAM"
- GOSUB 665
- IF X0$ <> "Y" THEN GOTO 9005
- 6299 GOSUB 6800 REMARK GET THE FIRST MASTER RECORD
- GOSUB 6810 REMARK GET THE FIRST "NEW" RECORD
- 6300 IF MSTR.READ% > AR.CUSTFILE.EXTENT \
- AND NEW.READ% > NEW.CUSTOMER.RECORDS% THEN GOTO 8999
- IF NEW.RECORD$ > MSTR.RECORD$\
- OR\
- NEW.READ% > NEW.CUSTOMER.RECORDS%\
- THEN \ REMARK IF MASTER RECORD IS LOWER, IT SATISFIES OUTPUT NEEDS
- Y9=1:X0=MSTR.READ%:GOSUB 3225:\ REMARK GET THE RECORD
- GOSUB 6900:\ REMARK WRITE THE MASTER CUSTOMER RECORD OUT TO WORKFILE.DAT
- MSTR.RECORD$=WRITTEN$:\
- GOSUB 6800 REMARK READ ANOTHER RECORD FROM A/R0F110.DAT
-
- IF NEW.RECORD$=WRITTEN$ THEN GOTO 6300
-
- IF MSTR.RECORD$ > NEW.RECORD$\
- OR\
- MSTR.READ% > AR.CUSTFILE.EXTENT\
- THEN\
- Y9=2:X0=NEW.READ%:GOSUB 3225:\ REMARK GET THE RECORD
- GOSUB 6900:\
- NEW.RECORD$=WRITTEN$:\
- GOSUB 6810
- GOTO 6300
-
-
- 6800 IF END #1 THEN 6801
- MSTR.READ%=MSTR.READ%+1
- READ #1, MSTR.READ%; MSTR.RECORD$, VAR1
- IF VAR1 = 0 THEN GOTO 6800 REMARK IF LAST ACTIVITY=0 THEN READ NEXT RCD
- RETURN
- 6801 MSTR.READ%=AR.CUSTFILE.EXTENT + 1
- MSTR.RECORD$=WRITTEN$
- RETURN
- 6810 REMARK READ RECORD FROM A/R0F111.DAT
- IF END #2 THEN 6811
- NEW.READ%=NEW.READ%+1
- READ #2, NEW.READ%; NEW.RECORD$, VAR1
- IF VAR1=0 THEN GOTO 6810 REMARK IF LAST ACTIVITY=0 THEN READ NEXT RCD
- RETURN
- 6811 NEW.READ%=NEW.CUSTOMER.RECORDS% + 1
- NEW.RECORD$=WRITTEN$
- RETURN
- 6900 REMARK WRITE CUSTOMER RECORD TO WORKFILE
- OUTPUT.COUNT%=OUTPUT.COUNT%+1
- Y9=3
- X0=OUTPUT.COUNT%
- GOSUB 3275 REMARK WRITE CUSTOMER RECORD TO WORKFILE
- RETURN
- 8999 DELETE 1 REMARK DELETE A/R0F110.DAT
- DELETE 2 REMARK DELETE A/R0F111.DAT
- CLOSE 3 REMARK CLOSE WORKFILE.DAT BEFORE RENAMING IT
- A=RENAME("A/R0F110.DAT","WORKFILE.DAT") REMARK WORKFILE BECOMES NEW CUSTOMER FILE
- 9000 AR.CUSTFILE.EXTENT=OUTPUT.COUNT%
- FILE.NO=5
- OPEN "A/R0F130.DAT" AS FILE.NO
- GOSUB 3.15 REMARK RE-WRITE NEW EXTENT INFO
- 9005 PRINT CLEAR.SCREEN$;"A/R CUSTOMER F/M LOADING MENU"
- CHAIN "A/P000" REMARK TERMINATE PROGRAM AND CHAIN TO MENU
-