home *** CD-ROM | disk | FTP | other *** search
- 10 ' PROGRAM TITLE "SORTGL"
- 230 INPUT "ENTER 'Y' TO MOUNT THE FILES";WY$
- 240 IF WY$<>"Y" THEN 270
- 250 UNLOAD 0,1
- 260 MOUNT 0,1
- 270 CLEAR 1000
- 280 Z=1
- 290 DIM DM$(3)
- 300 DIM R$(3)
- 310 DIM DV$(3)
- 320 DIM B#(1750)
- 330 DIM BB(1750)
- 340 DIM Q(16)
- 350 CNT=10000
- 360 PRINT "GENERAL LEDGER SORT"
- 370 OPEN "R",3,"LEDGER",1 ' OPEN ALL FILES
- 380 OPEN "R",1,"LEDGER",1
- 390 OPEN "R",2,"LEDGER",0
- 400 PRINT "ENTER -A- TO SORT ON ACCT#/CK#/VCH#" ' WHAT KIND OF SORT?
- 410 INPUT "ENTER -C- TO SORT ON CK/VCH #";CA$
- 420 IF CA$="A" THEN LPRINT "GEN LEDGER SORT ON ACT#/CK-VCH#":GOTO 440
- 430 LPRINT "GEN. LEDGER SORT ON CK/VCH #"
- 440 INPUT "ENTER DATE TO BE SORTED AS MOYR";A$ ' FILE MONTH AND YEAR
- 450 LPRINT "DATE ";A$
- 460 GET #3,2037
- 470 FOR Q=1 TO 16
- 480 FIELD #3, (Q-1)*8 AS DB$, 8 AS D1$(Q)
- 490 IF A$=MID$(D1$(Q),1,4) THEN 530
- 500 NEXT Q
- 510 PRINT "DATE NOT IN TABLE"
- 520 GOTO 520
- 530 REC$=MID$(D1$(Q),5,4)
- 540 REC=VAL(REC$)
- 550 K=1
- 560 SREC=REC ' SAVE THE STARTING ADDRESS
- 570 CLOSE 3 ' CLOSE THE TABLE FILE
- 580 GET #1,REC
- 590 FOR I=1 TO 3 ' LEDGER FILE BLOCKED 3 PER SECTOR
- 600 FIELD #1, (I-1)*42 AS D$,42 AS DREC$(I)
- 610 IF MID$(DREC$(I),1,3)="EOF" AND LSW=1 THEN 1060 ' IS IT END OF FILE
- 620 C$=MID$(DREC$(I),1,2)
- 630 C$=(C$)+(MID$(DREC$(I),5,2)) ' EXTRACT DATE FROM LEDGER FILE
- 640 IF A$=C$ THEN LSW=1:GOTO 690 ' IS IT THE BEGINNING OF THE FILE
- 650 NEXT I ' NEXT RECORD
- 660 REC=REC+1 ' INCREMENT THE RECORD COUNTER
- 670 IF REC=2037 THEN 1030 ' IS IT THE END OF THE FILE AREA
- 680 GOTO 580 ' GO GET ANOTHER RECORD
- 690 N=N+1
- 700 IF N>1750 THEN 1050
- 710 IF ISW=1 THEN 740
- 720 ISW=1
- 730 SI=I
- 740 IF CA$="C" THEN 910 ' CHECK NUMBER SORT
- 750 DAC$=MID$(DREC$(I),7,4)
- 760 IF MID$(DREC$(I),42,1)="1" THEN 990 ' IS IT A BAL FORWARD RECORD
- 770 PC$=MID$(DREC$(I),11,5) ' LOAD CK# VCH# WORK AREA
- 780 IF MID$(PC$,1,1)="C" THEN MID$(PC$,1,1)="2":GOTO 800 ' IS IT A CHECK
- 790 MID$(PC$,1,1)="3" ' THEN ITS A VOUCHER
- 800 DAC$=DAC$+PC$ ' ADD PC TO DAC
- 810 I$=STR$(I):RAC=REC
- 820 RAC=RAC+1000 ' ADD 1000 TO RECORD NUMBER
- 830 REC$=STR$(RAC)
- 840 TAG$=MID$(REC$,2,4)+MID$(I$,2,1) ' SAVE REC NUMBER IN TAG
- 850 DAC#=VAL(DAC$)
- 860 TAG=VAL(TAG$)
- 870 B#(K)=DAC# ' LOAD THE MATRIX FOR SORTING B# = CONTROL NUMBER
- 880 BB(K)=TAG ' BB = TAG OR RECORD NUMBER
- 890 K=K+1 ' INCRECMENT MATRIX SUBSCRIPT
- 900 GOTO 650
- 910 IF MID$(DREC$(I),42,1)="1" THEN 950 ' IS IT A BAL FWD RECORD
- 920 DAC$=MID$(DREC$(I),11,5) ' LOAD THE WORK AREA
- 930 IF MID$(DAC$,1,1)="C" THEN MID$(DAC$,1,1)="2":GOTO 810 ' IS IT A CHE
- 940 MID$(DAC$,1,1)="3":GOTO 810 ' THEN IT IS A VOUCHER
- 950 CNT=CNT+1 ' BLOCK LOCATION IN THE DISK RECORD
- 960 CNT$=STR$(CNT)
- 970 DAC$=MID$(CNT$,2,5)
- 980 GOTO 810
- 990 CNT=CNT+1 ' BLOCK LOCATION IN THE DISK RECORD
- 1000 CNT$=STR$(CNT)
- 1010 PC$=MID$(CNT$,2,5)
- 1020 GOTO 800
- 1030 PRINT "DATA OVERLAPS DISK-ILLEGAL"
- 1040 GOTO 1040
- 1050 PRINT "TOO MANY RECORDS TO SORT":STOP
- 1060 IF N>1750 THEN 1050
- 1070 LPRINT "TOTAL RECORDS ";N;" FREE MEMORY ";FRE(X)
- 1080 '
- 1090 M=N' START OF SORT ROUTINE
- 1100 M=INT(M/2)
- 1110 EXH=0
- 1120 IF M=0 THEN 1270' END OF SORT-GOTO OUTPUT ROUTINE
- 1130 K=N-M
- 1140 J=1
- 1150 I=J
- 1160 L=I+M
- 1170 IF B#(I)<=B#(L) THEN 1230
- 1180 SWAP B#(I),B#(L)
- 1190 SWAP BB(I),BB(L)
- 1200 EXH=EXH+1
- 1210 I=I-M
- 1220 IF I>=1 THEN 1160
- 1230 J=J+1
- 1240 IF J>K THEN PRINT "M = ";M;" SWAPS MADE = ";EXH:GOTO 1100
- 1250 GOTO 1150
- 1260 '
- 1270 LPRINT
- 1280 LPRINT "ENTERING OUTPUT ROUTINE TO DR O"
- 1290 K=1
- 1300 A=1
- 1310 J=0
- 1320 J=J+1
- 1330 ZAP=BB(K) ' THE ACTUAL DISK RECORD ADDRESS IN OLD FILE + 1000
- 1340 REC$=STR$(ZAP)
- 1350 I$=MID$(REC$,6,1)
- 1360 REC$=MID$(REC$,2,4)
- 1370 REC=VAL(REC$)
- 1380 REC=REC-1000
- 1390 XI=VAL(I$)
- 1400 I=XI:G=XI:Y=XI ' I = THE BLOCKING FACTOR
- 1410 GET #1,REC
- 1420 FOR I=G TO Y
- 1430 FIELD #1, (I-1)*42 AS VREC$,42 AS VA$(I)
- 1440 DV$(J)=VA$(I) ' BUILD THE OUTPUT RECORD FOR THE SORTED FILE
- 1450 NEXT I
- 1460 K=K+1
- 1470 IF K>N THEN 1580 ' N = THE NUMBER OF RECORDS IN THE MATRIX
- 1480 IF J=3 THEN 1490 ELSE 1320
- 1490 FOR L=1 TO 3
- 1500 FIELD #2, (L-1)*42 AS DF$,42 AS DP$(L)
- 1510 LSET DP$(L)=DV$(L) ' TRANSFER DATA TO NEW FILES BUFFER
- 1520 NEXT L
- 1530 PUT #2,A ' WRITE OUT THE NEW FILES RECORD
- 1540 A=A+1 ' INCREMENT THE RECORD COUNTER FOR NEW FILE
- 1550 IF EFSW=2 THEN 1710 ' END OF FILE SWITCH FOR DRIVE 1
- 1560 IF EFSW=1 THEN 1680 ' END OF FILE SWITCH FOR DRIVE 0
- 1570 GOTO 1310
- 1580 EFSW=1
- 1590 IF J=3 THEN 1490
- 1600 EFSW=2
- 1610 J=J+1
- 1620 DV$(J)="EOF" ' INSERT EOF FOR NEW FILE
- 1630 JS=J
- 1640 IF J=3 THEN 1490
- 1650 J=J+1
- 1660 DV$(J)=BLK$
- 1670 GOTO 1640
- 1680 J=1
- 1690 EFSW=2
- 1700 GOTO 1620
- 1710 A=A-1
- 1720 LPRINT "** EOF ** DR 0 IN OUTPUT SECTOR ";A;" RECORD # ";JS
- 1730 CLOSE 1,2
- 1740 '
- 1750 LPRINT
- 1760 LPRINT "ENTERING COPY-BACK ROUTINE" ' COPY SORTED FILE TO ORIGINAL
- 1770 OPEN "R",1,"LEDGER",0
- 1780 OPEN "R",2,"LEDGER",1
- 1790 REC=SREC
- 1800 EF$="EOF"
- 1810 J=SI
- 1820 A=1
- 1830 GET #1,A ' GET NEW FILE ON DR 0
- 1840 FOR I=1 TO 3
- 1850 FIELD #1, (I-1)*42 AS D$,42 AS DREC$(I)
- 1860 DM$(I)=DREC$(I)
- 1870 IF MID$(DREC$(I),1,3)="EOF" THEN 1990
- 1880 NEXT I
- 1890 A=A+1
- 1900 IF GSW=1 THEN 1990
- 1910 GET #2,REC ' GET OLD FILE ON DR 1 AND CHECK FOR FIRST BLOCK FOR ST
- 1920 FOR I=1 TO 3
- 1930 FIELD #2, (I-1)*42 AS O$,42 AS ODEC$(I)
- 1940 R$(I)=ODEC$(I)
- 1950 NEXT I
- 1960 IF GSW=1 AND K<4 THEN 2040
- 1970 IF GSW=1 AND K>3 THEN 1990
- 1980 GSW=1
- 1990 FOR K=1 TO 3
- 2000 R$(J)=DM$(K) ' TRANSFER FILE DRIVE 0 TO FILE DRIVE 1
- 2010 IF MID$(DM$(K),1,3)="EOF" THEN 2190 ' IS IT END OF FILE DR 0
- 2020 J=J+1
- 2030 IF J=4 THEN 2060
- 2040 NEXT K
- 2050 GOTO 1830
- 2060 J=1
- 2070 FOR I=1 TO 3
- 2080 LSET ODEC$(I)=R$(I) ' LOAD OUTPUT FILE DRIVE 1 BUFFER AREA
- 2090 NEXT I
- 2100 PUT #2,REC ' WRITE OUT FILE TO DRIVE 1
- 2110 IF EFSW=1 THEN 2140 ' HAS EOF BEEN SENSED
- 2120 REC=REC+1 ' INCREMENT DRIVE 1 RECORD CONTER
- 2130 GOTO 1910
- 2140 LPRINT "DR 1 FIRST OUTPUT SECTOR ";SREC;" RECORD # ";SI
- 2150 LPRINT "** EOF ** DR 1 IN OUTPUT SECTOR ";REC;" RECORD # ";J
- 2160 LPRINT "EOJ"
- 2170 PRINT "EOJ"
- 2180 STOP ' END OF JOB
- 2190 EFSW=1
- 2200 GOTO 2070
- 2210 END
-