john@beaudin.UUCP (John Beaudin) (12/09/90)
# I aplogize for not cross-posting this in alt.cobol (I foolishly posted # it directly to that newsgroup before I remembered comp.benchmarks). # It should compile most everywhere due to its simple nature. # My ACUCobol times on a SCO Unix SysV 3.2.2, multi-user mode, 1 # user logged in (the benchmark) were # Everex 386/33: ESDI drive, 71 secs # Compaq Systempro 486/33-840: IDA controller, data guarding, 44 secs # The benchmark could have coded in ansi free-style format, but would not # have been as portable. ACUCobol is an interpretive compiler with a # runtime. # John Beaudin #!/bin/sh # This is a shell archive (shar 3.47) # made 12/08/1990 17:19 UTC by root@beaudin # Source directory /u/acu/src # # existing files will NOT be overwritten unless -c is specified # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 29632 -rw-rw-rw- acubench.src # # ============= acubench.src ============== if test -f 'acubench.src' -a X"$1" != X"-c"; then echo 'x - skipping acubench.src (File already exists)' else echo 'x - extracting acubench.src (Text)' sed 's/^X//' << 'SHAR_EOF' > 'acubench.src' && X IDENTIFICATION DIVISION. X PROGRAM-ID. ACUBENCH. X X * This program performs various file I/O tests for benchmarking X * purposes. It should be compiled under ACUCOBOL with the X * following command: X * X * ccbl -Cr -Si ACU acubench.cbl X * X * Under RM/COBOL-85, it can be compiled by: X * X * rmcobol acubench X * X * This program is similar to the file benchmark in the REALIA X * comprehensive benchmark program. It provides a test of a X * fairly representative series of I/O operations that roughly X * simulate various "real world" scenarios. Both sequential and X * random access is tested. The two indexed files created are X * both fairly realistic. One contains one 10-byte key that is X * written in strictly increasing order (sequential access). The X * second contains a primary 10-byte key that is written in X * increasing order and one 40-byte alternate key that is written X * in random order (sequential and random access). The first X * file is similar to a historical file or a simple line transaction X * file. The second is similar to most master files and multi-key X * transaction files. X X * This program quotes times for ACUCOBOL-85 and RM/COBOL-85. X * These times were obtained on a Toshiba T-5100 computer. This X * is a 16-Mhz 80386 machine running MS-DOS. Each test was run X * twice for both compilers and the best time for each sub-test X * taken. The expanded memory in the Toshiba was turned off X * prior to running the test. With the expanded memory installed, X * the times for ACUCOBOL are more than twice as fast. X X * Date written: 2/16/89 - T. Drake Coker X * Copyright (c) 1989 by ACUCOBOL, Inc. X X * Modification history: X * X * 4/13/89 - Changed summary times to reflect version 1.3B ACUCOBOL. X X ENVIRONMENT DIVISION. X CONFIGURATION SECTION. X X * Note: if SWITCH-1 is set, then the test is not actually run X * This is useful when debugging the program or if you want to X * get to the summary screen without waiting for the tests to X * finish. X X SPECIAL-NAMES. X SWITCH-1, ON STATUS IS SKIP-TEST. X X INPUT-OUTPUT SECTION. X FILE-CONTROL. X SELECT SEQ-1-FILE X ASSIGN TO DISK "SEQ1.DAT" X BINARY SEQUENTIAL X STATUS IS SEQ-1-STATUS. X X SELECT SEQ-2-FILE X ASSIGN TO DISK "SEQ2.DAT" X BINARY SEQUENTIAL. X X SELECT IDX-1-FILE X ASSIGN TO DISK "IDX1.DAT" X ORGANIZATION IS INDEXED X ACCESS IS DYNAMIC X RECORD KEY IS IDX-1-KEY X STATUS IS IDX-1-STATUS. X X SELECT IDX-2-FILE X ASSIGN TO DISK "IDX2.DAT" X ORGANIZATION IS INDEXED X ACCESS IS DYNAMIC X RECORD KEY IS IDX-2-KEY X ALTERNATE RECORD KEY IS IDX-2-ALT-KEY X WITH DUPLICATES X STATUS IS IDX-2-STATUS. X X SELECT SORT-FILE X ASSIGN TO SORT. X X DATA DIVISION. X FILE SECTION. X FD SEQ-1-FILE. X 01 SEQ-1-RECORD. X 03 SEQ-1-KEY PIC 9(10). X 03 SEQ-1-ALT-KEY. X 05 SEQ-1-ALT-KEY-A PIC X(30). X 05 SEQ-1-ALT-KEY-B PIC 9(10). X 03 SEQ-1-BODY PIC X(50). X X FD SEQ-2-FILE. X 01 SEQ-2-RECORD PIC X(100). X X FD IDX-1-FILE. X 01 IDX-1-RECORD. X 03 IDX-1-KEY PIC X(10). X 03 IDX-1-ALT-KEY. X 05 IDX-1-ALT-KEY-A PIC X(30). X 05 IDX-1-ALT-KEY-B PIC X(10). X 03 IDX-1-BODY PIC X(50). X X FD IDX-2-FILE. X 01 IDX-2-RECORD. X 03 IDX-2-KEY PIC X(10). X 03 IDX-2-ALT-KEY. X 05 IDX-2-ALT-KEY-A PIC X(30). X 05 IDX-2-ALT-KEY-B PIC X(10). X 03 IDX-2-BODY PIC X(50). X X SD SORT-FILE. X 01 SORT-RECORD. X 03 SORT-KEY PIC X(10). X 03 SORT-ALT-KEY PIC X(40). X 03 FILLER PIC X(50). X X X WORKING-STORAGE SECTION. X X 77 SEQ-1-STATUS PIC X(2). X 77 IDX-1-STATUS PIC X(2). X 77 IDX-2-STATUS PIC X(2). X X 77 LINE-NO PIC 9(2). X X 77 SYNC-TIME-1 PIC 9(8). X 77 SYNC-TIME-2 PIC 9(8). X 77 ELAPSED-TIME PIC ZZZZZZ.9. X 77 TOTAL-TIME PIC 9(7)V9 VALUE ZERO. X 77 TIME-DIFF PIC 9(6)V9. X 77 BEGIN-TIME PIC 9(8). X 01 BEGIN-TIME-FIELDS REDEFINES BEGIN-TIME. X 03 BEGIN-HOURS PIC 9(2). X 03 BEGIN-MINUTES PIC 9(2). X 03 BEGIN-SECONDS PIC 9(2). X 03 BEGIN-HUNDRETHS PIC 9(2). X 77 END-TIME PIC 9(8). X 01 END-TIME-FIELDS REDEFINES END-TIME. X 03 END-HOURS PIC 9(2). X 03 END-MINUTES PIC 9(2). X 03 END-SECONDS PIC 9(2). X 03 END-HUNDRETHS PIC 9(2). X X 01 TIMING-TABLE. X 03 TEST-TIME OCCURS 10 TIMES PIC ZZZZZZ.9. X X 01 ACUCOBOL-TIMES. X 03 PIC X(8) VALUE " 12.5". X 03 PIC X(8) VALUE " 38.4". X 03 PIC X(8) VALUE " 42.0". X 03 PIC X(8) VALUE " 47.5". X 03 PIC X(8) VALUE " 9.1". X 03 PIC X(8) VALUE " 197.5". X 03 PIC X(8) VALUE " 65.0". X 03 PIC X(8) VALUE " 412.0". X X 01 ACUCOBOL-TIMES-TABLE X REDEFINES ACUCOBOL-TIMES. X 03 ACU-TIME X OCCURS 8 TIMES PIC X(8). X X 01 RMCOBOL-TIMES. X 03 PIC X(8) VALUE " 11.4". X 03 PIC X(8) VALUE " 131.0". X 03 PIC X(8) VALUE " 101.3". X 03 PIC X(8) VALUE " 45.5". X 03 PIC X(8) VALUE " 8.6". X 03 PIC X(8) VALUE " 414.2". X 03 PIC X(8) VALUE " 107.8". X 03 PIC X(8) VALUE " 819.8". X X 01 RMCOBOL-TIMES-TABLE X REDEFINES RMCOBOL-TIMES. X 03 RM-TIME X OCCURS 8 TIMES PIC X(8). X X 77 KEY-VALUE PIC 9(10). X 01 ALT-KEY-VALUE. X 03 ALT-KEY-VALUE-A PIC 9(15) VALUE X 842765989876543. X 03 ALT-KEY-VALUE-B PIC 9(8) VALUE X 62305671. X 03 ALT-KEY-VALUE-C PIC 9(7) VALUE X 2639004. X 01 ALT-KEY-VALUE-1 REDEFINES ALT-KEY-VALUE. X 03 ALT-CHAR OCCURS 30 TIMES PIC X. X X * This table comes from the REALIA benchmark. X * It contains a file action code and a key to operate on. X * The file action code is "I" for "insert", "U" for "update", X * and "D" for "delete". For inserts and updates, a X * random alternate key is generated. This table is used more X * than once by modifying the third character of the key on X * different passes through the table. X X 01 UPDATE-TABLE-VALUES. X 03 PIC X(7) VALUE 'I000001'. X 03 PIC X(7) VALUE 'I000002'. X 03 PIC X(7) VALUE 'I000003'. X 03 PIC X(7) VALUE 'I000004'. X 03 PIC X(7) VALUE 'U000010'. X 03 PIC X(7) VALUE 'I000011'. X 03 PIC X(7) VALUE 'I000012'. X 03 PIC X(7) VALUE 'I000013'. X 03 PIC X(7) VALUE 'I000014'. X 03 PIC X(7) VALUE 'I000015'. X 03 PIC X(7) VALUE 'I000016'. X 03 PIC X(7) VALUE 'I000017'. X 03 PIC X(7) VALUE 'I000018'. X 03 PIC X(7) VALUE 'I000019'. X 03 PIC X(7) VALUE 'U000020'. X 03 PIC X(7) VALUE 'D000030'. X 03 PIC X(7) VALUE 'I000035'. X 03 PIC X(7) VALUE 'U000040'. X 03 PIC X(7) VALUE 'D000050'. X 03 PIC X(7) VALUE 'I000055'. X 03 PIC X(7) VALUE 'I000061'. X 03 PIC X(7) VALUE 'I000062'. X 03 PIC X(7) VALUE 'I000063'. X 03 PIC X(7) VALUE 'I000064'. X 03 PIC X(7) VALUE 'U000070'. X 03 PIC X(7) VALUE 'I000071'. X 03 PIC X(7) VALUE 'I000072'. X 03 PIC X(7) VALUE 'I000073'. X 03 PIC X(7) VALUE 'I000074'. X 03 PIC X(7) VALUE 'I000075'. X 03 PIC X(7) VALUE 'I000076'. X 03 PIC X(7) VALUE 'I000077'. X 03 PIC X(7) VALUE 'I000078'. X 03 PIC X(7) VALUE 'I000079'. X 03 PIC X(7) VALUE 'U000080'. X 03 PIC X(7) VALUE 'D000090'. X 03 PIC X(7) VALUE 'I000091'. X 03 PIC X(7) VALUE 'I000092'. X 03 PIC X(7) VALUE 'I000093'. X 03 PIC X(7) VALUE 'I000094'. X * X 03 PIC X(7) VALUE 'I000301'. X 03 PIC X(7) VALUE 'I000302'. X 03 PIC X(7) VALUE 'I000303'. X 03 PIC X(7) VALUE 'I000304'. X 03 PIC X(7) VALUE 'U000310'. X 03 PIC X(7) VALUE 'I000311'. X 03 PIC X(7) VALUE 'I000312'. X 03 PIC X(7) VALUE 'I000313'. X 03 PIC X(7) VALUE 'U000320'. X 03 PIC X(7) VALUE 'I000324'. X 03 PIC X(7) VALUE 'I000325'. X 03 PIC X(7) VALUE 'I000326'. X 03 PIC X(7) VALUE 'I000327'. X 03 PIC X(7) VALUE 'I000328'. X 03 PIC X(7) VALUE 'I000329'. X 03 PIC X(7) VALUE 'D000330'. X 03 PIC X(7) VALUE 'D000340'. X 03 PIC X(7) VALUE 'U000350'. X 03 PIC X(7) VALUE 'I000351'. X 03 PIC X(7) VALUE 'I000352'. X 03 PIC X(7) VALUE 'I000361'. X 03 PIC X(7) VALUE 'I000362'. X 03 PIC X(7) VALUE 'I000363'. X 03 PIC X(7) VALUE 'I000364'. X 03 PIC X(7) VALUE 'U000370'. X 03 PIC X(7) VALUE 'I000371'. X 03 PIC X(7) VALUE 'I000372'. X 03 PIC X(7) VALUE 'I000373'. X 03 PIC X(7) VALUE 'U000380'. X 03 PIC X(7) VALUE 'I000384'. X 03 PIC X(7) VALUE 'I000385'. X 03 PIC X(7) VALUE 'I000386'. X 03 PIC X(7) VALUE 'I000387'. X 03 PIC X(7) VALUE 'I000388'. X 03 PIC X(7) VALUE 'I000389'. X 03 PIC X(7) VALUE 'D000390'. X 03 PIC X(7) VALUE 'I000391'. X 03 PIC X(7) VALUE 'I000392'. X 03 PIC X(7) VALUE 'I000393'. X 03 PIC X(7) VALUE 'I000394'. X * X 03 PIC X(7) VALUE 'I000501'. X 03 PIC X(7) VALUE 'I000502'. X 03 PIC X(7) VALUE 'I000503'. X 03 PIC X(7) VALUE 'I000504'. X 03 PIC X(7) VALUE 'U000510'. X 03 PIC X(7) VALUE 'I000517'. X 03 PIC X(7) VALUE 'I000518'. X 03 PIC X(7) VALUE 'I000519'. X 03 PIC X(7) VALUE 'U000520'. X 03 PIC X(7) VALUE 'D000530'. X 03 PIC X(7) VALUE 'D000540'. X 03 PIC X(7) VALUE 'I000551'. X 03 PIC X(7) VALUE 'I000552'. X 03 PIC X(7) VALUE 'I000553'. X 03 PIC X(7) VALUE 'I000561'. X 03 PIC X(7) VALUE 'I000565'. X 03 PIC X(7) VALUE 'I000568'. X 03 PIC X(7) VALUE 'U000580'. X 03 PIC X(7) VALUE 'D000590'. X 03 PIC X(7) VALUE 'I000595'. X 03 PIC X(7) VALUE 'I000601'. X 03 PIC X(7) VALUE 'I000602'. X 03 PIC X(7) VALUE 'I000603'. X 03 PIC X(7) VALUE 'I000604'. X 03 PIC X(7) VALUE 'U000610'. X 03 PIC X(7) VALUE 'I000617'. X 03 PIC X(7) VALUE 'I000618'. X 03 PIC X(7) VALUE 'I000619'. X 03 PIC X(7) VALUE 'U000620'. X 03 PIC X(7) VALUE 'D000630'. X 03 PIC X(7) VALUE 'D000640'. X 03 PIC X(7) VALUE 'I000651'. X 03 PIC X(7) VALUE 'I000652'. X 03 PIC X(7) VALUE 'I000653'. X 03 PIC X(7) VALUE 'I000661'. X 03 PIC X(7) VALUE 'I000665'. X 03 PIC X(7) VALUE 'I000668'. X 03 PIC X(7) VALUE 'U000680'. X 03 PIC X(7) VALUE 'D000690'. X 03 PIC X(7) VALUE 'I000695'. X * X 03 PIC X(7) VALUE 'I000701'. X 03 PIC X(7) VALUE 'I000702'. X 03 PIC X(7) VALUE 'I000703'. X 03 PIC X(7) VALUE 'I000704'. X 03 PIC X(7) VALUE 'U000720'. X 03 PIC X(7) VALUE 'U000730'. X 03 PIC X(7) VALUE 'I000731'. X 03 PIC X(7) VALUE 'I000732'. X 03 PIC X(7) VALUE 'I000733'. X 03 PIC X(7) VALUE 'D000740'. X 03 PIC X(7) VALUE 'I000742'. X 03 PIC X(7) VALUE 'I000744'. X 03 PIC X(7) VALUE 'I000745'. X 03 PIC X(7) VALUE 'I000746'. X 03 PIC X(7) VALUE 'I000748'. X 03 PIC X(7) VALUE 'I000751'. X 03 PIC X(7) VALUE 'D000760'. X 03 PIC X(7) VALUE 'U000780'. X 03 PIC X(7) VALUE 'D000790'. X 03 PIC X(7) VALUE 'I000795'. X 03 PIC X(7) VALUE 'I000801'. X 03 PIC X(7) VALUE 'I000802'. X 03 PIC X(7) VALUE 'I000803'. X 03 PIC X(7) VALUE 'I000804'. X 03 PIC X(7) VALUE 'U000820'. X 03 PIC X(7) VALUE 'U000830'. X 03 PIC X(7) VALUE 'I000831'. X 03 PIC X(7) VALUE 'I000832'. X 03 PIC X(7) VALUE 'I000833'. X 03 PIC X(7) VALUE 'D000840'. X 03 PIC X(7) VALUE 'I000842'. X 03 PIC X(7) VALUE 'I000844'. X 03 PIC X(7) VALUE 'I000845'. X 03 PIC X(7) VALUE 'I000846'. X 03 PIC X(7) VALUE 'I000848'. X 03 PIC X(7) VALUE 'I000851'. X 03 PIC X(7) VALUE 'D000860'. X 03 PIC X(7) VALUE 'U000880'. X 03 PIC X(7) VALUE 'D000890'. X 03 PIC X(7) VALUE 'I000895'. X * X 03 PIC X(7) VALUE 'I000901'. X 03 PIC X(7) VALUE 'I000902'. X 03 PIC X(7) VALUE 'I000903'. X 03 PIC X(7) VALUE 'I000904'. X 03 PIC X(7) VALUE 'U000910'. X 03 PIC X(7) VALUE 'I000911'. X 03 PIC X(7) VALUE 'I000912'. X 03 PIC X(7) VALUE 'I000913'. X 03 PIC X(7) VALUE 'I000914'. X 03 PIC X(7) VALUE 'I000915'. X 03 PIC X(7) VALUE 'I000916'. X 03 PIC X(7) VALUE 'I000917'. X 03 PIC X(7) VALUE 'I000918'. X 03 PIC X(7) VALUE 'I000919'. X 03 PIC X(7) VALUE 'U000920'. X 03 PIC X(7) VALUE 'I000921'. X 03 PIC X(7) VALUE 'D000930'. X 03 PIC X(7) VALUE 'D000940'. X 03 PIC X(7) VALUE 'D000950'. X 03 PIC X(7) VALUE 'I000951'. X 03 PIC X(7) VALUE 'I000952'. X 03 PIC X(7) VALUE 'I000953'. X 03 PIC X(7) VALUE 'I000954'. X 03 PIC X(7) VALUE 'I000955'. X 03 PIC X(7) VALUE 'U000960'. X 03 PIC X(7) VALUE 'I000961'. X 03 PIC X(7) VALUE 'I000962'. X 03 PIC X(7) VALUE 'I000963'. X 03 PIC X(7) VALUE 'I000964'. X 03 PIC X(7) VALUE 'I000965'. X 03 PIC X(7) VALUE 'I000966'. X 03 PIC X(7) VALUE 'I000967'. X 03 PIC X(7) VALUE 'I000968'. X 03 PIC X(7) VALUE 'I000969'. X 03 PIC X(7) VALUE 'U000970'. X 03 PIC X(7) VALUE 'D000980'. X 03 PIC X(7) VALUE 'D000990'. X 03 PIC X(7) VALUE 'I000991'. X 03 PIC X(7) VALUE 'I000992'. X 03 PIC X(7) VALUE 'I000993'. X X 01 UPDATE-TABLE REDEFINES UPDATE-TABLE-VALUES. X 03 UPDATE-ENTRY OCCURS 200 TIMES. X 05 UPDATE-CODE PIC X. X 88 UPDATE-WRITE VALUE "I". X 88 UPDATE-REWRITE VALUE "U". X 88 UPDATE-DELETE VALUE "D". X 05 UPDATE-KEY. X 07 FILLER PIC 9(2). X 07 UPDATE-CHANGE PIC 9. X 07 FILLER PIC 9(3). X X 77 INDX PIC 9(4) COMP-1. X 77 UPDATE-CHAR PIC 9. X 01 UPDATE-FULL-KEY. X 03 FILLER PIC X(4) VALUE ZEROS. X 03 UPDATE-SHORT-KEY PIC X(6). X X PROCEDURE DIVISION. X DECLARATIVES. X SEQ-1-ERR-HANDLING SECTION. X USE AFTER STANDARD ERROR PROCEDURE ON SEQ-1-FILE. X SEQ-1-ERR. X DISPLAY "*** FILE ERROR #", LINE 23, ERASE EOL, HIGH, X SEQ-1-STATUS, HIGH, " ON SEQ1.DAT ***", HIGH. X DISPLAY "*** TEST ABORTED ***", HIGH. X STOP RUN. X X IDX-1-ERR-HANDLING SECTION. X USE AFTER STANDARD ERROR PROCEDURE ON IDX-1-FILE. X IDX-1-ERR. X DISPLAY "*** FILE ERROR #", LINE 23, ERASE EOL, HIGH, X IDX-1-STATUS, HIGH, " ON IDX1.DAT ***", HIGH. X DISPLAY "*** TEST ABORTED ***", HIGH. X STOP RUN. X X IDX-2-ERR-HANDLING SECTION. X USE AFTER STANDARD ERROR PROCEDURE ON IDX-2-FILE. X IDX-2-ERR. X DISPLAY "*** FILE ERROR #", LINE 23, ERASE EOL, HIGH, X IDX-2-STATUS, HIGH, " ON IDX2.DAT ***", HIGH. X DISPLAY "*** TEST ABORTED ***", HIGH. X STOP RUN. X X END DECLARATIVES. X X X LEVEL-1 SECTION. X MAIN-LOGIC. X PERFORM INTRODUCTION. X PERFORM SEQ-WRITE-TEST. X PERFORM SORT-TEST. X PERFORM LOAD-IDX-1-TEST. X PERFORM READ-IDX-1-TEST. X PERFORM UPDATE-IDX-1-TEST. X PERFORM LOAD-IDX-2-TEST. X PERFORM UPDATE-IDX-2-TEST. X PERFORM END-TEST. X PERFORM SUMMARY. X X STOP RUN. X X LEVEL-2 SECTION. X SEQ-WRITE-TEST. X DISPLAY "Write Sequential File (3,000 100-byte records):", X LINE 3, POSITION 1. X OPEN OUTPUT SEQ-1-FILE WITH LOCK. X IF SKIP-TEST X MOVE 1 TO TIME-DIFF X ELSE X PERFORM START-TIMER X PERFORM VARYING KEY-VALUE FROM 10 BY 10 X UNTIL KEY-VALUE IS > 30000 X MOVE KEY-VALUE TO SEQ-1-KEY, SEQ-1-ALT-KEY-B X MOVE X "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw" X TO SEQ-1-BODY X PERFORM GENERATE-ALT-KEY X MOVE ALT-KEY-VALUE TO SEQ-1-ALT-KEY-A X WRITE SEQ-1-RECORD X END-PERFORM X PERFORM STOP-TIMER X END-IF. X CLOSE SEQ-1-FILE. X ADD TIME-DIFF TO TOTAL-TIME. X MOVE TIME-DIFF TO ELAPSED-TIME, TEST-TIME(1). X DISPLAY ELAPSED-TIME, LINE 3, POSITION 55, " seconds". X X SORT-TEST. X DISPLAY "Sort Sequential File (40-byte key):", X LINE 5, POSITION 1. X IF SKIP-TEST X MOVE 2 TO TIME-DIFF X ELSE X PERFORM START-TIMER X SORT SORT-FILE ON ASCENDING KEY SORT-ALT-KEY X USING SEQ-1-FILE GIVING SEQ-2-FILE X PERFORM STOP-TIMER X END-IF. X ADD TIME-DIFF TO TOTAL-TIME. X MOVE TIME-DIFF TO ELAPSED-TIME, TEST-TIME(2). X DISPLAY ELAPSED-TIME, LINE 5, POSITION 55, " seconds". X X LOAD-IDX-1-TEST. X DISPLAY "Load Indexed File 1 (10-byte key):", X LINE 7, POSITION 1. X OPEN INPUT SEQ-1-FILE WITH LOCK. X OPEN OUTPUT IDX-1-FILE WITH LOCK. !ACU X * OPEN OUTPUT IDX-1-FILE WITH MASS-UPDATE. ACU X IF SKIP-TEST X MOVE 3 TO TIME-DIFF X ELSE X PERFORM START-TIMER X READ SEQ-1-FILE RECORD X PERFORM UNTIL SEQ-1-STATUS IS NOT = "00" X WRITE IDX-1-RECORD FROM SEQ-1-RECORD X READ SEQ-1-FILE RECORD, AT END CONTINUE END-READ X END-PERFORM X PERFORM STOP-TIMER X END-IF. X CLOSE SEQ-1-FILE, IDX-1-FILE. X ADD TIME-DIFF TO TOTAL-TIME. X MOVE TIME-DIFF TO ELAPSED-TIME, TEST-TIME(3). X DISPLAY ELAPSED-TIME, LINE 7, POSITION 55, " seconds". X X READ-IDX-1-TEST. X DISPLAY "Read Indexed File 1 (read and skip 20 times):", X LINE 9, POSITION 1. X OPEN INPUT IDX-1-FILE WITH LOCK. X IF SKIP-TEST X MOVE 4 TO TIME-DIFF X ELSE X PERFORM START-TIMER X PERFORM READ-IDX-1-PASS 20 TIMES X PERFORM STOP-TIMER X END-IF. X CLOSE IDX-1-FILE. X ADD TIME-DIFF TO TOTAL-TIME. X MOVE TIME-DIFF TO ELAPSED-TIME, TEST-TIME(4). X DISPLAY ELAPSED-TIME, LINE 9, POSITION 55, " seconds". X X READ-IDX-1-PASS. X PERFORM VARYING KEY-VALUE FROM 900 BY 1000 X UNTIL KEY-VALUE IS > 30000 X MOVE KEY-VALUE TO IDX-1-KEY X START IDX-1-FILE KEY NOT LESS THAN IDX-1-KEY X PERFORM 10 TIMES X READ IDX-1-FILE NEXT RECORD X AT END CONTINUE END-READ X END-PERFORM X END-PERFORM. X X UPDATE-IDX-1-TEST. X DISPLAY "Update Indexed File 1 (600 updates):", X LINE 11, POSITION 1. X OPEN I-O IDX-1-FILE WITH LOCK. !ACU X * OPEN I-O IDX-1-FILE WITH MASS-UPDATE. ACU X IF SKIP-TEST X MOVE 5 TO TIME-DIFF X ELSE X PERFORM START-TIMER X PERFORM UPDATE-IDX-1-SET VARYING UPDATE-CHAR FROM ZERO X BY 1 UNTIL UPDATE-CHAR IS > 2 X PERFORM STOP-TIMER X END-IF. X CLOSE IDX-1-FILE. X ADD TIME-DIFF TO TOTAL-TIME. X MOVE TIME-DIFF TO ELAPSED-TIME, TEST-TIME(5). X DISPLAY ELAPSED-TIME, LINE 11, POSITION 55, " seconds". X X UPDATE-IDX-1-SET. X PERFORM VARYING INDX FROM 1 BY 1 UNTIL INDX IS > 200 X MOVE UPDATE-CHAR TO UPDATE-CHANGE( INDX ) X MOVE UPDATE-KEY( INDX ) TO UPDATE-SHORT-KEY X MOVE UPDATE-FULL-KEY TO IDX-1-KEY, X IDX-1-ALT-KEY-B X MOVE ZEROS TO IDX-1-BODY X PERFORM GENERATE-ALT-KEY X MOVE ALT-KEY-VALUE TO IDX-1-ALT-KEY-A X EVALUATE UPDATE-CODE( INDX ) X WHEN "I" WRITE IDX-1-RECORD X WHEN "U" REWRITE IDX-1-RECORD X WHEN "D" DELETE IDX-1-FILE RECORD X END-EVALUATE X END-PERFORM. X X LOAD-IDX-2-TEST. X DISPLAY "Load Indexed File 2 (10-byte key and 40-byte key):", X LINE 13, POSITION 1. X OPEN INPUT SEQ-1-FILE WITH LOCK. X OPEN OUTPUT IDX-2-FILE WITH LOCK. !ACU X * OPEN OUTPUT IDX-2-FILE WITH MASS-UPDATE. ACU X IF SKIP-TEST X MOVE 6 TO TIME-DIFF X ELSE X PERFORM START-TIMER X READ SEQ-1-FILE RECORD X PERFORM UNTIL SEQ-1-STATUS IS NOT = "00" X WRITE IDX-2-RECORD FROM SEQ-1-RECORD X READ SEQ-1-FILE RECORD, AT END CONTINUE END-READ X END-PERFORM X PERFORM STOP-TIMER X END-IF. X CLOSE SEQ-1-FILE, IDX-2-FILE. X ADD TIME-DIFF TO TOTAL-TIME. X MOVE TIME-DIFF TO ELAPSED-TIME, TEST-TIME(6). X DISPLAY ELAPSED-TIME, LINE 13, POSITION 55, " seconds". X X UPDATE-IDX-2-TEST. X DISPLAY "Update Indexed File 2 (600 updates):", X LINE 15, POSITION 1. X OPEN I-O IDX-2-FILE WITH LOCK. !ACU X * OPEN I-O IDX-2-FILE WITH MASS-UPDATE. ACU X IF SKIP-TEST X MOVE 7 TO TIME-DIFF X ELSE X PERFORM START-TIMER X PERFORM UPDATE-IDX-2-SET VARYING UPDATE-CHAR FROM ZERO X BY 1 UNTIL UPDATE-CHAR IS > 2 X PERFORM STOP-TIMER X END-IF. X CLOSE IDX-2-FILE. X ADD TIME-DIFF TO TOTAL-TIME. X MOVE TIME-DIFF TO ELAPSED-TIME, TEST-TIME(7). X DISPLAY ELAPSED-TIME, LINE 15, POSITION 55, " seconds". X X UPDATE-IDX-2-SET. X PERFORM VARYING INDX FROM 1 BY 1 UNTIL INDX IS > 200 X MOVE UPDATE-CHAR TO UPDATE-CHANGE( INDX ) X MOVE UPDATE-KEY( INDX ) TO UPDATE-SHORT-KEY X MOVE UPDATE-FULL-KEY TO IDX-2-KEY, X IDX-2-ALT-KEY-B X MOVE ZEROS TO IDX-2-BODY X PERFORM GENERATE-ALT-KEY X MOVE ALT-KEY-VALUE TO IDX-2-ALT-KEY-A X EVALUATE UPDATE-CODE( INDX ) X WHEN "I" WRITE IDX-2-RECORD X WHEN "U" REWRITE IDX-2-RECORD X WHEN "D" DELETE IDX-2-FILE RECORD X END-EVALUATE X END-PERFORM. X X END-TEST. X DISPLAY "--------" LINE 16, POSITION 55. X DISPLAY "Total Time:" LINE 17, POSITION 1. X MOVE TOTAL-TIME TO ELAPSED-TIME. X DISPLAY ELAPSED-TIME, LINE 17, POSITION 55. X DISPLAY "Test Complete, press <enter>: ", LINE 20. X ACCEPT SEQ-1-STATUS, POSITION 0, TAB. X X SUMMARY. X DISPLAY SPACE, LINE 2, ERASE EOS. X DISPLAY "--- 16-Mhz 80386 MS-DOS ---", LINE 3, POSITION 45. X DISPLAY "Your Times", LINE 5, POSITION 26. X DISPLAY "ACUCOBOL-85 v1.3B RM/COBOL-85 v2.01", LINE 5, X POSITION 41. X DISPLAY "Write Sequential:", LINE 7. X DISPLAY "Sort Sequential:", LINE 8. X DISPLAY "Load Index 1:", LINE 9. X DISPLAY "Read Index 1:", LINE 10. X DISPLAY "Update Index 1:", LINE 11. X DISPLAY "Load Index 2:", LINE 12. X DISPLAY "Update Index 2:", LINE 13. X DISPLAY "Total:", LINE 15. X X PERFORM VARYING INDX FROM 1 BY 1 UNTIL INDX IS > 7 X ADD INDX, 6 GIVING LINE-NO X DISPLAY TEST-TIME(INDX), LINE LINE-NO, POSITION 25 X DISPLAY ACU-TIME(INDX), LINE LINE-NO, POSITION 45 X DISPLAY RM-TIME(INDX), LINE LINE-NO, POSITION 65 X END-PERFORM. X X MOVE TOTAL-TIME TO ELAPSED-TIME. X DISPLAY ELAPSED-TIME, LINE 15, POSITION 25. X DISPLAY ACU-TIME(8), LINE 15, POSITION 45. X DISPLAY RM-TIME(8), LINE 15, POSITION 65. X X DISPLAY "Press <enter> to exit program: ", LINE 18. X ACCEPT SEQ-1-STATUS, POSITION 0, TAB, NO BEEP. X X LEVEL-99 SECTION. X INTRODUCTION. X DISPLAY " FILE I/O BENCHMARK ", ERASE, LINE 1, X POSITION 30, REVERSE. X DISPLAY "This program performs various file I/O", X LINE 5, POSITION 20. X DISPLAY "timing tests. It constructs a Sequential", X LINE 6, POSITION 20. X DISPLAY "file containing semi-random keys and", X LINE 7, POSITION 20. X DISPLAY "then sorts this file. It then uses it", X LINE 8, POSITION 20. X DISPLAY "to create two Indexed files, one with", X LINE 9, POSITION 20. X DISPLAY "one 10-byte key and a second with a", X LINE 10, POSITION 20. X DISPLAY "10-byte key and a 40-byte key. Finally", X LINE 11, POSITION 20. X DISPLAY "performs various updates on these files.", X LINE 12, POSITION 20. X DISPLAY "Times for each portion of the test are shown.", X LINE 13, POSITION 20. X X DISPLAY "Press <enter> to continue: ", LINE 15, POSITION 20. X ACCEPT SEQ-1-STATUS, POSITION 0, NO BEEP, TAB. X X DISPLAY SPACE, LINE 2, ERASE EOS. X X GENERATE-ALT-KEY. X MULTIPLY ALT-KEY-VALUE-B BY ALT-KEY-VALUE-C X GIVING ALT-KEY-VALUE-A. X MOVE ALT-CHAR(1) TO ALT-CHAR(29). X MOVE ALT-CHAR(2) TO ALT-CHAR(25). X MOVE ALT-CHAR(3) TO ALT-CHAR(20). X MOVE ALT-CHAR(4) TO ALT-CHAR(22). X MOVE ALT-CHAR(5) TO ALT-CHAR(17). X MOVE ALT-CHAR(6) TO ALT-CHAR(30). X MOVE ALT-CHAR(7) TO ALT-CHAR(23). X MOVE ALT-CHAR(8) TO ALT-CHAR(16). X X START-TIMER. X ACCEPT SYNC-TIME-1 FROM TIME. X PERFORM WITH TEST AFTER UNTIL SYNC-TIME-1 NOT = SYNC-TIME-2 X ACCEPT SYNC-TIME-2 FROM TIME X END-PERFORM. X ACCEPT BEGIN-TIME FROM TIME. X X STOP-TIMER. X ACCEPT END-TIME FROM TIME. X COMPUTE TIME-DIFF ROUNDED = X ( END-HOURS - BEGIN-HOURS ) * 3600 X + ( END-MINUTES - BEGIN-MINUTES ) * 60 X + ( END-SECONDS - BEGIN-SECONDS ) X + ( END-HUNDRETHS - BEGIN-HUNDRETHS ) / 100. X SHAR_EOF chmod 0666 acubench.src || echo 'restore of acubench.src failed' Wc_c="`wc -c < 'acubench.src'`" test 29632 -eq "$Wc_c" || echo 'acubench.src: original size 29632, current size' "$Wc_c" fi exit 0 -- My .signature is awaiting apropriate display technology