Hi
I wrote a program (befor there was alt.key...) to add external logical file to a file.
In this called progrm you have to add a call in the main program every new/mod/delete main key.
It no need to recompile other programes.
It is possible to select building recors (for exmp. null value, range vales etc.)
=======================================================
000001* U P D A T E / R E T R I E V A L L O G I C A L F I L E
000002* =======================================================
000003*
000004* SW-FUNCTION "U" <---UPDATE .1
000005*
000006* A. NEW_KEY: LINK-BEFOR=LOW-VALUES
000007* LINK-AFTER = NEW KEY
000008*
000009* B. CHANGE: LINK-BEFOR = OLD KEY
000010* LINK-AFTER = NEW KEY
000011*
000012* C. DELETE LINK-BEFOR = OLD KEY
000013* LINK-AFTER=LOW-VALUES
000014*
000015* SW-FUNCTION "R" OR SW-FUNCTION "S"(+ START) <---RETRIEVAL .2
000016* A. INPUT: RANGE OF RETRIEVAL: LINK-BEFOR THRU LINK-AFTER
000017* B. OUTPUT: LINK-BEFOR = THE READ RECORD
000018* C. AT END: LINK-BEFOR,LINK-AFTER = HIGH-VALUES
000019* IF RECORD LENGTH <> 8 YOU HAVE TO CHANGE LINES:33,36,44,59,60 RESPE.
000020* IF THERE IS MORE LOGICAL FILE WITH SAME LENG. CHANGE LINK/LINK1 ETC.
000021 IDENTIFICATION DIVISION.
000022 PROGRAM-ID. LINK.
000023 ENVIRONMENT DIVISION.
000024 INPUT-OUTPUT SECTION.
000025 FILE-CONTROL.
000026 SELECT LINKFL ASSIGN TO DISK "LINKFL"
000027 ORGANIZATION IS INDEXED
000028 RECORD KEY IS KEY-FILE-LINK
000029 ACCESS IS DYNAMIC.
000030 DATA DIVISION.
000031 FILE SECTION.
000032 FD LINKFL
000033 RECORD 8.
000034 01 LINKFL-REC.
000035 02 KEY-FILE-LINK.
000036 03 LINK-KEY PIC X(8).
000037***************************************************************
000038 WORKING-STORAGE SECTION.
000039 01 MONE-NIKTEVO PIC 9(6) VALUE 0.
000040 01 SW-LINKFL PIC 9.
000041 88 LINKFL-EOF VALUE 1.
000042 01 SW-BEGIN PIC 9 VALUE 0.
000043 01 SW-ERROR PIC X.
000044 01 LEN-KEY PIC 99 VALUE 8.
000045 01 I PIC 99 COMP-6 VALUE 0.
000046 01 J PIC 99 COMP-6 VALUE 0.
000047 01 X.
000048 02 X-1 PIC X VALUE LOW-VALUES.
000049 02 X-2 PIC X.
000050 01 X-9 REDEFINES X PIC 9999 COMP-4.
000051 01 MANA PIC 9999 COMP-4.
000052 01 SHARIT PIC 9999 COMP-4.
000053 01 VECTOR-SHG-IN.
000054 02 VEC-SHG-IN PIC X OCCURS 20.
000055 01 VECTOR-SHG-OUT.
000056 02 VEC-SHG-OUT PIC X OCCURS 40.
000057 LINKAGE SECTION.
000058 01 LINK-FUNCTION PIC X.
000059 01 LINK-BEFOR PIC X(8).
000060 01 LINK-AFTER PIC X(8).
000061***************************************************************
000062 PROCEDURE DIVISION
000063 USING LINK-FUNCTION LINK-BEFOR LINK-AFTER.
000064 MAIN SECTION.
000065 1. IF LINK-FUNCTION = "U" PERFORM IDKUN
000066 ELSE IF LINK-FUNCTION = "R" OR "S" PERFORM READ-SEQ.
000067 SOF-MAIN-SECTION.
000068 EXIT PROGRAM.
000069***************************************************************
000070 IDKUN SECTION.
000071 1. PERFORM START-PROC THRU EX-START-PROC.
000072 PERFORM MAIN-PROC THRU EX-MAIN-PROC.
000073 GO TO EX-IDKUN-SECTION.
000074 START-PROC.
000075 IF SW-BEGIN = 0 MOVE 1 TO SW-BEGIN
000076 OPEN I-O LINKFL.
000077 EX-START-PROC.
000078 MAIN-PROC.
000079 IF LINK-BEFOR NOT = LINK-AFTER
000080 AND LINK-BEFOR NOT = LOW-VALUES
000081 MOVE LINK-BEFOR TO LINK-KEY
000082 PERFORM READ-LINKFL THRU EX-READ-LINKFL
000083 IF SW-LINKFL = 0 PERFORM DELETE-LINKFL.
000084 IF LINK-AFTER NOT = LOW-VALUES
000085 MOVE LINK-AFTER TO LINK-KEY
000086 PERFORM READ-LINKFL THRU EX-READ-LINKFL
000087 IF SW-LINKFL = 1 PERFORM WRITE-LINKFL.
000088 PERFORM START-LINKFL THRU EX-START-LINKFL.
000089 EX-MAIN-PROC.
000090 READ-LINKFL.
000091 MOVE 0 TO SW-LINKFL.
000092 READ LINKFL INVALID KEY MOVE 1 TO SW-LINKFL.
000093 EX-READ-LINKFL.
000094 DELETE-LINKFL.
000095 DELETE LINKFL
000096 INVALID KEY DISPLAY "WRONG DELETE LINKFL"
000097 PERFORM DISPLAY-CANCEL.
000098 EX-DELETE-LINKFL.
000099 WRITE-LINKFL.
000100 WRITE LINKFL-REC
000101 INVALID KEY DISPLAY "WRONG WRITE LINKFL"
000102 PERFORM DISPLAY-CANCEL.
000103 EX-WRITE-LINKFL.
000104 REWRITE-LINKFL.
000105 REWRITE LINKFL-REC
000106 INVALID KEY DISPLAY "REWRONG REWRITE LINKFL"
000107 PERFORM DISPLAY-CANCEL.
000108 EX-REWRITE-LINKFL.
000109 START-LINKFL.
000110 MOVE HIGH-VALUES TO LINK-KEY.
000111 START LINKFL KEY IS NOT LESS KEY-FILE-LINK
000112 INVALID KEY CONTINUE.
000113 EX-START-LINKFL.
000114 EX-IDKUN-SECTION. EXIT.
000115***************************************************************
000116 READ-SEQ SECTION.
000117 1. PERFORM START-PROC THRU EX-START-PROC.
000118 IF NOT LINKFL-EOF
000119 PERFORM READ-LINKFL THRU EX-READ-LINKFL.
000120 PERFORM END-PROC THRU EX-END-PROC.
000121 GO TO EX-READ-SEQ-SECTION.
000122 START-PROC.
000123 IF SW-BEGIN = 0 MOVE 1 TO SW-BEGIN
000124 OPEN INPUT LINKFL
000125 PERFORM START-LINKFL THRU EX-START-LINKFL
000126 ELSE IF LINK-FUNCTION = "S"
000127 PERFORM START-LINKFL THRU EX-START-LINKFL.
000128 EX-START-PROC.
000129 START-LINKFL.
000130 MOVE LINK-BEFOR TO LINK-KEY.
000131 MOVE ZEROES TO SW-LINKFL.
000132 START LINKFL KEY IS NOT LESS KEY-FILE-LINK
000133 INVALID KEY MOVE 1 TO SW-LINKFL.
000134 EX-START-LINKFL.
000135 READ-LINKFL.
000136 READ LINKFL NEXT AT END MOVE 1 TO SW-LINKFL
000137 GO TO EX-READ-LINKFL.
000138 IF LINK-KEY > LINK-AFTER MOVE 1 TO SW-LINKFL
000139 GO TO EX-READ-LINKFL.
000140 MOVE LINKFL-REC TO LINK-BEFOR.
000141 EX-READ-LINKFL.
000142 END-PROC.
000143 IF LINKFL-EOF MOVE HIGH-VALUES TO LINK-BEFOR LINK-AFTER.
000144 MOVE 0 TO SW-LINKFL.
000145 EX-END-PROC.
000146 DISPLAY-CANCEL.
000147 MOVE LINK-KEY TO VECTOR-SHG-IN.
000148 PERFORM IF-EXA VARYING I FROM 1 BY 1 UNTIL I > LEN-KEY.
000149 IF I > 33
000150 PERFORM IN-EXA VARYING I FROM 1 BY 1 UNTIL I > LEN-KEY
000151 DISPLAY VECTOR-SHG-OUT
000152 ELSE DISPLAY LINK-KEY.
000153 CALL "cancel".
000154 EX-DISPLAY-CANCEL.
000155 IF-EXA.
000156 MOVE VEC-SHG-IN(I) TO X-2.
000157 IF X-9 < 32 MOVE 88 TO I.
000158 EX-IF-EXA.
000159 IN-EXA.
000160 MOVE VEC-SHG-IN(I) TO X-2.
000161 DIVIDE 16 INTO X-9 GIVING MANA REMAINDER SHARIT.
000162 IF MANA > 9 ADD 65 TO MANA
000163 ELSE ADD 48 TO MANA.
000164 ADD 1 TO J.
000165 MOVE MANA TO X-9
000166 MOVE X-2 TO VEC-SHG-OUT(J).
000167 IF SHARIT > 9 ADD 65 TO SHARIT
000168 ELSE ADD 48 TO SHARIT.
000169 ADD 1 TO J.
000170 MOVE SHARIT TO X-9.
000171 MOVE X-2 TO VEC-SHG-OUT(J).
000172 EX-IN-EXA.
000173 EX-READ-SEQ-SECTION. EXIT.
000174***************************************************************