|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 13568 (0x3500)
Types: TextFile
Names: »OPG8PH.CBL«
└─⟦c154ac35e⟧ Bits:30002656 COBOL-programmer til undervisning
└─⟦this⟧ »OPG8PH.CBL«
IDENTIFICATION DIVISION.
PROGRAM-ID. OPG8.
AUTHOR. HOLD 4.
DATE-WRITTEN. 27/10/85.
DATE-COMPILED. 28/1O/85.
*
*
* PROGRAMMET LÆSER FILEN PERSON.TRA TIL EOF.
* FOR HVER POST DANNES EN TILSVARENDE PÅ DEN
* INDEX-SEKVENTIELLE FIL IXPERSON.REG.
*
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. PICCOLINE.
OBJECT-COMPUTER. PICCOLINE.
*
SPECIAL-NAMES. CONSOLE IS CRT
DECIMAL-POINT IS COMMA.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FIL ASSIGN TO "B:IXPERSON.REG"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS NOGLE
FILE STATUS IS SVAR-KEY.
*
*
DATA DIVISION.
FILE SECTION.
FD FIL
LABEL RECORD IS STANDARD.
01 FILDATA.
02 NOGLE PIC 9(10).
02 PERS-FNVN PIC X(15).
02 PERS-EFNVN PIC X(20).
02 PERS-GNVN PIC X(20).
02 PERS-POSTNR PIC 9999.
02 PERS-BYNAVN PIC X(20).
02 PERS-TLFNR PIC 9(8).
*
*
WORKING-STORAGE SECTION.
01 SVAR-KEY.
02 SVAR-1 PIC X.
02 SVAR-2 PIC X.
01 RESULT PIC 999.
01 ML-RES PIC 99.
01 CHECKSUM PIC 99V99.
01 FYLD REDEFINES CHECKSUM.
02 F1 PIC 99.
02 F2 PIC 99.
01 PERSONDATA.
02 PERSNR.
03 CIF PIC 9 OCCURS 10 TIMES.
02 F-NVN PIC X(15).
02 E-NVN PIC X(20).
02 ADR PIC X(20).
02 POSTNR PIC 9999.
02 BY-NVN PIC X(20).
02 TLF-NR PIC 9(8).
01 SKAERMSTYRINGSOMRAADE.
02 BINAER-TAL PIC 99 COMP.
02 STYR-TEGN PIC X REDEFINES BINAER-TAL.
01 FORKERT PIC 9 VALUE 0.
01 SVAR PIC 9.
01 V-TAB.
02 FILLER PIC X(10) VALUE "4327654321".
01 V-TAB-R REDEFINES V-TAB.
02 V-F PIC 9 OCCURS 10 TIMES.
01 S-FELT.
02 S-F1 PIC 99.
02 S-F2 PIC 99.
01 OK PIC X VALUE HIGH-VALUE.
01 SW PIC 9 VALUE 0.
01 TAL PIC 99 VALUE 0.
01 RETUR PIC X.
*
*
*
PROCEDURE DIVISION.
STYR SECTION.
STYR-IND.
PERFORM INIT.
PERFORM FUNKTION.
PERFORM BEHANDLE UNTIL SVAR = 5.
PERFORM AFSLUT.
STOP RUN.
STYR-UD.
EXIT.
*
*
INIT SECTION.
INIT-IND.
DISPLAY SPACES UPON CRT.
OPEN I-O FIL.
INIT-UD.
EXIT.
*
FUNKTION SECTION.
FUNK-IND.
DISPLAY "H O V E D M E N U" AT 0331.INDFIL.
DISPLAY "1 = OPRETTELSE:" AT 0603.
DISPLAY "2 = ÆNDRING:" AT 0803.
DISPLAY "3 = SLETNING:" AT 1003.
DISPLAY "4 = UDSKRIVNING:" AT 1203.
DISPLAY "5 = SLUT:" AT 1403.
ACCEPT SVAR AT 1721.
IF SVAR < 6 NEXT SENTENCE
ELSE PERFORM FEJLFUNK UNTIL SVAR < 6.
FUNK-UD.
EXIT.
*
*
FEJLFUNK SECTION.
FEFU-IND.
MOVE 30 TO BINAER-TAL.
DISPLAY STYR-TEGN AT 2401.
DISPLAY "GAL FUNKTIONSTYPE" AT 2403.
ACCEPT SVAR AT 2422.
FEFU-UD.
EXIT.
*
*
BEHANDLE SECTION.
BEHA-IND.
MOVE ZERO TO PERSONDATA.
MOVE 99 TO F2.
IF SVAR = 1 PERFORM OPRET.
IF SVAR = 2 PERFORM AENDRE.
IF SVAR = 3 PERFORM SLET.
IF SVAR = 4 PERFORM UDSKRIV.
DISPLAY SPACES UPON CRT.
PERFORM FUNKTION.
BEHA-UD.
EXIT.
*
OPRET SECTION.
OP-IND.
DISPLAY SPACES UPON CRT.
PERFORM DIALOG.
PERFORM NYDATA UNTIL PERSNR = SPACES.
OP-UD.
EXIT.
*
*
NYDATA SECTION.
NY-IND.
MOVE SPACES TO PERSONDATA.
MOVE 30 TO BINAER-TAL.
MOVE 0331 TO S-FELT.
PERFORM SLETFELT 7 TIMES.
DISPLAY "OPRETTELSE" AT 0110 UPON CRT-UNDER.
DISPLAY STYR-TEGN AT 2401.
DISPLAY STYR-TEGN AT 2501.
ACCEPT PERSNR AT 0331.
IF PERSNR = SPACES NEXT SENTENCE
ELSE PERFORM CHECKPERSNR UNTIL F2 = ZERO
DISPLAY STYR-TEGN AT 2401
MOVE 99 TO F2
PERFORM LAES
IF SVAR-1 = ZERO NEXT SENTENCE
ELSE ACCEPT F-NVN AT 0531
ACCEPT E-NVN AT 0731
ACCEPT ADR AT 0931
ACCEPT POSTNR AT 1131
IF POSTNR = SPACES NEXT SENTENCE
ELSE PERFORM CHECKPOSTNR
DISPLAY STYR-TEGN AT 2401
ACCEPT BY-NVN AT 1331
ACCEPT TLF-NR AT 1531
WRITE FILDATA FROM PERSONDATA
MOVE 30 TO BINAER-TAL
DISPLAY STYR-TEGN AT 2401
DISPLAY "OPRETTET" AT 2403
DISPLAY "TRYK (RETUR)" AT 2503
ACCEPT RETUR AT 2518.
NY-UD.
EXIT.
*
*
LAES SECTION.
LAES-IND.
MOVE PERSNR TO NOGLE.
READ FIL INTO PERSONDATA.
IF SVAR-1 NOT = ZERO NEXT SENTENCE
ELSE DISPLAY "PERSON FINDES" AT 2403 UPON CRT-UNDER
DISPLAY "TRYK (RETUR)" AT 2503
ACCEPT RETUR AT 2518.
MOVE SPACES TO PERSONDATA.
MOVE NOGLE TO PERSNR.
LAES-UD.
EXIT.
*
*
AENDRE SECTION.
AEND-IND.
DISPLAY SPACES UPON CRT.
PERFORM RETDATA UNTIL PERSNR = SPACES.
AEND-UD.
EXIT.
*
*
RETDATA SECTION.
RET-IND.
PERFORM FORNY.
IF SW = 0 PERFORM RESTDATA.
RET-UD.
EXIT.
*
*
FORNY SECTION.
FORN-IND.
MOVE SPACES TO PERSONDATA.
MOVE 30 TO BINAER-TAL.
MOVE 0331 TO S-FELT.
PERFORM SLETFELT 7 TIMES.
DISPLAY STYR-TEGN AT 2401.
DISPLAY STYR-TEGN AT 2501.
DISPLAY "ÆNDRING" AT 0110 UPON CRT-UNDER.
PERFORM SKRIVUD.
ACCEPT PERSNR AT 0331.
MOVE 99 TO SVAR-KEY.
MOVE 1 TO SW.
IF PERSNR = SPACES NEXT SENTENCE
ELSE PERFORM CHECKPERSNR UNTIL F2 = ZERO
DISPLAY STYR-TEGN AT 2401
MOVE PERSNR TO NOGLE
MOVE 99 TO F2
PERFORM INDLAES
IF SVAR-1 = ZERO MOVE ZERO TO SW.
FORN-UD.
EXIT.
*
*
RESTDATA SECTION.
REST-IND.
PERFORM REST-DIALOG.
DISPLAY F-NVN AT 0531.
DISPLAY E-NVN AT 0731.
DISPLAY ADR AT 0931.
DISPLAY POSTNR AT 1131.
DISPLAY BY-NVN AT 1331.
DISPLAY TLF-NR AT 1531.
ACCEPT F-NVN AT 0531.
ACCEPT E-NVN AT 0731.
ACCEPT ADR AT 0931.
ACCEPT POSTNR AT 1131.
IF POSTNR = SPACES NEXT SENTENCE
ELSE PERFORM CHECKPOSTNR.
DISPLAY STYR-TEGN AT 2401.
ACCEPT BY-NVN AT 1331.
ACCEPT TLF-NR AT 1531.
DISPLAY "OK AT ÆNDRE OPLYSNINGER J/N" AT 2403.
ACCEPT OK AT 2431.
IF OK = "J" REWRITE FILDATA FROM PERSONDATA.
MOVE HIGH-VALUE TO OK.
MOVE 1 TO SW.
REST-UD.
EXIT.
*
*
INDLAES SECTION.
INLA-IND.
READ FIL INTO PERSONDATA INVALID KEY
DISPLAY "PERSON FINDES IKKE" AT 2403
DISPLAY "TRYK (RETUR)" AT 2503
ACCEPT RETUR AT 2518.
INLA-UD.
EXIT.
*
*
SLET SECTION.
SLET-IND.
DISPLAY SPACES UPON CRT.
PERFORM SLETTES UNTIL PERSNR = SPACES.
SLET-UD.
EXIT.
*
SLETTES SECTION.
SLET-IND.
MOVE SPACES TO PERSONDATA.
MOVE 30 TO BINAER-TAL.
MOVE 0331 TO S-FELT.
PERFORM SLETFELT.
PERFORM SKRIVUD.
DISPLAY STYR-TEGN AT 2401.
DISPLAY STYR-TEGN AT 2501.
ACCEPT PERSNR AT 0331.
IF PERSNR = SPACES NEXT SENTENCE
ELSE PERFORM CHECKPERSNR UNTIL F2 = ZERO
DISPLAY STYR-TEGN AT 2401
MOVE 99 TO F2
DISPLAY "OK AT SLETTE PERSON (J/N)" AT 2403
ACCEPT OK AT 2431
MOVE PERSNR TO NOGLE
PERFORM LAESFILIND
MOVE HIGH-VALUE TO OK.
SLET-UD.
EXIT.
*
*
LAESFILIND SECTION.
LAFI-IND.
IF OK = "J" DELETE FIL INVALID KEY
DISPLAY STYR-TEGN AT 2401
DISPLAY "PERSON FINDES IKKE" AT 2403
DISPLAY "TRYK (RETUR)" AT 2503
ACCEPT RETUR AT 2518.
LAFI-UD.
EXIT.
*
*
UDSKRIV SECTION.
UDSK-IND.
DISPLAY SPACES UPON CRT.
PERFORM SKRIVER UNTIL PERSNR = SPACES.
UDSK-UD.
EXIT.
*
*
SKRIVER SECTION.
SKRI-IND.
MOVE SPACES TO PERSONDATA.
MOVE 30 TO BINAER-TAL.
MOVE 0331 TO S-FELT.
PERFORM SLETFELT 7 TIMES.
DISPLAY "PERSONNUMMER:" AT 0311.
DISPLAY STYR-TEGN AT 2401.
DISPLAY STYR-TEGN AT 2501.
ACCEPT PERSNR AT 0331.
IF PERSNR = SPACES NEXT SENTENCE
ELSE PERFORM CHECKPERSNR UNTIL F2 = ZERO
DISPLAY STYR-TEGN AT 2401
MOVE PERSNR TO NOGLE
MOVE 99 TO F2
PERFORM INDLEASE
IF SVAR-1 NOT = 0 NEXT SENTENCE
ELSE PERFORM DIALOGUD
DISPLAY "TRYK (RETUR)" AT 2503
ACCEPT RETUR AT 2518.
SKRI-UD.
EXIT.
*
*
INDLEASE SECTION.
INLA-IND.
READ FIL INTO PERSONDATA INVALID KEY
DISPLAY "PERSON FINDES IKKE" AT 2403
DISPLAY "TRYK (RETUR)" AT 2503
ACCEPT RETUR AT 2518.
INLA-UD.
EXIT.
*
*
DIALOGUD SECTION.
SKRIVUD.
DISPLAY "FORNAVN:" AT 0511.
DISPLAY "EFTERNAVN:" AT 0711.
DISPLAY "GADENAVN:" AT 0911.
DISPLAY "POSTNUMMER:" AT 1111.
DISPLAY "BYNAVN:" AT 1311.
DISPLAY "TELEFONNUMMER:" AT 1311.
DISPLAY F-NVN AT 0531.
DISPLAY E-NVN AT 0731.
DISPLAY ADR AT 0931.
DISPLAY POSTNR AT 1131.
DISPLAY BY-NVN AT 1331.
DISPLAY TLF-NR AT 1531.
EXIT.
*
*
CHECKPERSNR SECTION.
CHPE-IND.
MOVE ZERO TO TAL RESULT.
PERFORM REGN 10 TIMES.
DIVIDE RESULT BY 11 GIVING CHECKSUM.
IF F2 = ZERO NEXT SENTENCE
ELSE MOVE 30 TO BINAER-TAL
DISPLAY STYR-TEGN AT 2401
DISPLAY "GALT PERSONNUMMER, TAST NYT" AT 2403
ACCEPT PERSNR AT 2431.
CHPE-UD.
EXIT.
*
*
REGN SECTION.
REGN-IND.
ADD 1 TO TAL.
MULTIPLY CIF (TAL) BY V-F (TAL) GIVING ML-RES.
ADD ML-RES TO RESULT.
REGN-UD.
EXIT.
*
*
CHECKPOSTNR SECTION.
CHPO-IND.
IF POSTNR < 1000 MOVE 1 TO FORKERT.
IF POSTNR > 9998 MOVE 1 TO FORKERT.
PERFORM FEJLPOSTNR UNTIL FORKERT = 0.
CHPO-UD.
EXIT.
*
*
FEJLPOSTNR SECTION.
FEPO-IND.
DISPLAY STYR-TEGN AT 2401.
DISPLAY "GALT NUMMER TAST NYT:" AT 2403.
ACCEPT POSTNR AT 2431.
MOVE ZERO TO FORKERT.
IF POSTNR < 1000 MOVE 1 TO FORKERT.
IF POSTNR > 9998 MOVE 1 TO FORKERT.
FEPO-UD.
EXIT.
*
*
AFSLUT SECTION.
AFSL-IND.
CLOSE FIL.
DISPLAY SPACES UPON CRT.
DISPLAY "ISAM AJOUR AFSLUTTET" AT 0101.
AFSL-UD.
EXIT.
*
*
DIALOG SECTION.
DILO-IND.
DISPLAY "TAST PERSONNUMMER:" AT 0303.
REST-DIALOG.
DISPLAY "TAST FORNAVN:" AT 0503.
DISPLAY "TAST EFTERNAVN:" AT 0703.
DISPLAY "TAST GADENAVN:" AT 0903
DISPLAY "TAST POSTNUMMER:" AT 1103.
DISPLAY "TAST BYNAVN:" AT 1303.
DISPLAY "TAST TELEFONNUMMER:" AT 1503.
DILO-UD.
EXIT.
*
*
SLETFELT SECTION.
SLFE-IND.
DISPLAY STYR-TEGN AT S-FELT.
ADD 2 TO S-F1.
SLFE-UD.
EXIT.
*
*
«eof»