home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpmug
/
cpmug043.ark
/
A_P02A.BAS
< prev
next >
Wrap
BASIC Source File
|
1984-04-29
|
3KB
|
103 lines
REMARK *************************************************************
REMARK * ACCOUNTS PAYABLE TRANSACTION SORT (A/P02A) *
REMARK * VERS. OF 2.00 PM 6/12/79 *
REMARK * ======================================================= *
REMARK * THIS PROGRAM USES THE SHELL-METZNER SORTING ALGORITHM *
REMARK * TO SORT A TRANSACTION FILE IN DECREASING INCREMENTS AND *
REMARK * WRITE THE SORTED RECORDS OUT TO A WORKFILE. *
REMARK * ONCE THE WORKFILE IS COMPLETELY WRITTEN, IT REPLACES THE *
REMARK * FILE USED AS INPUT. *
REMARK *************************************************************
ZERO$="000000"
DIM DATA$(1000),C(27),D(27),P(5)
%INCLUDE CURSOR
GOTO 6000
%INCLUDE READINV
%INCLUDE WRITEINV
%INCLUDE A/P-INFO
6000 CONSOLE
PRINT CLEAR.SCREEN$;"A/P TRANSACTION SORT/PRINT"
PRINT "KEY RETURN TO BEGIN; ENTER 'END' TO EXIT"
INPUT LINE A$
IF A$="END" THEN \
PRINT CLEAR.SCREEN$;"A/P SORT/PRINT LOADING MENU":\
CHAIN "A/P000"
PRINT CLEAR.SCREEN$;"SORT PHASE"
PRINT "WORKING...DO NOT INTERRUPT"
PRINT
INPUT.FILE$="A/P0F020.DAT"
OUTPUT.FILE$="WORKFILE.DAT"
RECLENGTH=580
OPEN INPUT.FILE$ RECL RECLENGTH AS 1
OPEN "A/P0F130.DAT" AS 5
X0=5:GOSUB 3310
IF TRANSACTION.RCD.COUNT%=0 THEN 8000
IF END #1 THEN 7000 REMARK SET END-OF-FILE BRANCH
REMARK ********** READ DATA RECORDS AND STRIP OFF KEY ELEMENTS FOR USE IN THE SORT **********
6050 READ #1; VAR$,VAR1
RECORD.COUNT%=RECORD.COUNT% + 1
DATA$(RECORD.COUNT%)=VAR$
PRINT CURSOR.HOME$:PRINT:PRINT "RECORD #";RECORD.COUNT%
X0$=ZERO$+STR$(VAR1)
X0$=RIGHT$(X0$,6) REMARK CONVERT INVOICE # TO ALPHANUMERIC
FOR I%=1 TO 6 STEP 2
DATA$(RECORD.COUNT%)=DATA$(RECORD.COUNT%)+CHR$(VAL(MID$(X0$,I%,2)))
NEXT I% REMARK ROUTINE TO PACK INVOICE NUMBER
X0$=ZERO$+STR$(RECORD.COUNT%)
X0$=RIGHT$(X0$,4)
X0%=VAL(LEFT$(X0$,2))
X1%=VAL(RIGHT$(X0$,2))
DATA$(RECORD.COUNT%)=DATA$(RECORD.COUNT%)+CHR$(X0%)+CHR$(X1%)
GOTO 6050 REMARK GET THE NEXT RECORD
7000 CLOSE 1
OPEN INPUT.FILE$ RECL RECLENGTH AS 1
PRINT "NUMBER OF RECORDS IN FILE =";RECORD.COUNT%
M%=RECORD.COUNT%
7010 M%=M%/2 REMARK DIVIDE THE SORT INTERVAL IN HALF
IF M%=0 THEN GOTO 7150 REMARK IF SORT INTERVAL IS EXHAUSTED,\
RE-WRITE THE ORDERED FILE.
K%=RECORD.COUNT%-M%
J%=1
7040 I%=J%
7050 L%=I% + M%
IF DATA$(I%) <= DATA$(L%) THEN GOTO 7120
TEMP$=DATA$(I%)
DATA$(I%)=DATA$(L%)
DATA$(L%)=TEMP$
I%=I% - M%
IF I% > 0 THEN GOTO 7050
7120 J%=J%+1
IF J% > K% THEN GOTO 7010 ELSE GOTO 7040
7150 PRINT CLEAR.SCREEN$;
PRINT "SORT PHASE ENDED"
PRINT "WRITING SORTED RECORDS TO WORKFILE"
PRINT "WORKING... DO NOT INTERRUPT"
CREATE OUTPUT.FILE$ RECL RECLENGTH AS 2
FOR OUTPUT.COUNT%=1 TO RECORD.COUNT%
X0$=RIGHT$(DATA$(OUTPUT.COUNT%),2)
X0%=ASC(LEFT$(X0$,1))
POINTER%=X0% * 100
X0%=ASC(RIGHT$(X0$,1))
POINTER%=POINTER% + X0%
FILE.NO=1:X0%=POINTER%:GOSUB 3000
FILE.NO=2:X0%=OUTPUT.COUNT%:GOSUB 3050
NEXT OUTPUT.COUNT%
DELETE 1
CLOSE 2
A%=RENAME(INPUT.FILE$,OUTPUT.FILE$)
CLOSE 5
OPEN "A/P0F130.DAT" AS 5
SORT%=1
X0=5:GOSUB 3350
8000 CHAIN "A/P02B"