|
|
DataMuseum.dkPresents historical artifacts from the history of: MIKADOS |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about MIKADOS Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 10112 (0x2780)
Notes: Mikados TextFile, Mikados_K
Names: »FILETEST«
└─⟦ec8c1e0b0⟧ Bits:30007442 8" floppy ( MIKPROG vol. 1-3, MIKREL vol. 1-3, PCSE 4.7.80 vol 1-3, GL.SYS )
└─⟦this⟧ »FILETEST«
PROGRAM FILETEST;
(***************************************************)
(* *)
(* OPRETTELSE OG AJOURFØRING AF PERSONKARTOTEK *)
(* *)
(* DEMONSTRATION AF DIREKTE FILER OG ANVENDELSE AF *)
(* EDIT PROCEDUREN I MIKADOS PASCAL *)
(***************************************************)
TYPE STATUS = ( GIFT, ENKE, FRASKILT, UNGKARL );
ALFA = STRING(30);
TEKST = STRING(18);
DATO = RECORD DAG: 1..31;
MÅNED: 1..12;
ÅR: INTEGER
END;
PERSON = RECORD
NAVN: RECORD
FORNAVN, EFTERNAVN: ALFA
END;
KØN: (MAND, KVINDE, UKENDT);
FØDSELSDATO: DATO;
CASE ÆGTESKABELIGSTATUS: STATUS OF
GIFT, ENKE: (GIFTEDATO: DATO);
FRASKILT: (SKILSMISSEDATO: DATO;
ANTALSKILSMISSER: INTEGER);
UNGKARL: (UAFHÆNGIG: BOOLEAN)
END (*PERSON*);
VAR REGISTER: FILE OF PERSON;
ÆSTATUS, KODE: ALFA;
FINISHED, OK: BOOLEAN;
OPKODE, SVAR : CHAR;
POSTNUMMER: INTEGER;
IOVAL: INTEGER;
(***************************************************)
(* GENERELT ANVENDELIG PROCEDURE SOM ILLUSTRERER *)
(* HVORLEDES EDIT PROCEDUREN KAN ANVENDES TIL *)
(* REDIGERING AF HELTAL. *)
(* HVIS OPKODE<>'R' INDTASTES NYT HELTAL *)
(* HVIS OPKODE ='R' PRÆSENTERES DET NUVÆRENDE *)
(* INDHOLD AF HELTAL PÅ SKÆRMEN MED HENBLIK *)
(* PÅ REDIGERING *)
(***************************************************)
PROCEDURE ENTERINTEGER( LEDETEKST: TEKST;
VAR HELTAL: INTEGER );
VAR STØRRELSESORDEN,INDEX: INTEGER;
INTSTRING: STRING(6);
SIGN, CH: CHAR;
DIGITS, FINISHED: BOOLEAN;
BEGIN
INDEX := 18;
WHILE LEDETEKST(INDEX)=' ' DO INDEX:=INDEX-1;
WRITE( LEDETEKST:INDEX, ' ' );
INTSTRING := ' ';
IF OPKODE='R' THEN
BEGIN
INDEX:=0;
IF HELTAL<0 THEN
BEGIN
HELTAL:=-HELTAL;
INDEX:=1;
INTSTRING(1):='-'
END;
STØRRELSESORDEN:=10000;
WHILE HELTAL<STØRRELSESORDEN DO
STØRRELSESORDEN := STØRRELSESORDEN DIV 10;
REPEAT
BEGIN
INDEX:=INDEX+1;
INTSTRING(INDEX):= CHR( HELTAL DIV STØRRELSESORDEN + ORD('0'));
HELTAL := HELTAL MOD STØRRELSESORDEN;
STØRRELSESORDEN := STØRRELSESORDEN DIV 10;
END;
UNTIL STØRRELSESORDEN=0;
END;
EDIT( INTSTRING:6 );
INDEX := 1;
FINISHED := FALSE;
DIGITS := FALSE;
SIGN := ' ';
HELTAL := 0;
REPEAT
BEGIN
CH := INTSTRING(INDEX);
IF CH IN (.'+','-'.) THEN
IF DIGITS OR (SIGN<>' ') THEN FINISHED:=TRUE
ELSE SIGN:= CH
ELSE
IF CH IN (.'0'..'9'.) THEN
BEGIN
HELTAL := HELTAL*10 + ORD(CH) - ORD('0');
DIGITS := TRUE
END
ELSE FINISHED:=TRUE;
INDEX := INDEX + 1;
END;
UNTIL FINISHED OR (INDEX>6);
IF SIGN='-' THEN HELTAL:=-HELTAL;
END (*ENTERINTEGER*);
PROCEDURE ENTERSTRING( LEDETEKST: TEKST;
VAR EDITSTRING: ALFA;
LÆNGDE: INTEGER );
VAR INDEX: INTEGER;
BEGIN
INDEX:=18;
WHILE LEDETEKST(INDEX)=' ' DO INDEX:=INDEX-1;
WRITE( LEDETEKST:INDEX, ' ' );
IF OPKODE='O' THEN
BEGIN
FILLCHAR( EDITSTRING(1), LÆNGDE, ' ' );
(*$R-*) EDITSTRING(0) := CHR(LÆNGDE); (*$R+*)
END;
EDIT( EDITSTRING:LÆNGDE )
END (*ENTERSTRING*);
PROCEDURE ENTERDATO( LEDETEKST: TEKST;
VAR EDITDATO: DATO );
VAR INDEX: INTEGER;
BEGIN
INDEX:= 18;
WHILE LEDETEKST(INDEX)=' ' DO INDEX:=INDEX-1;
WRITE( LEDETEKST:INDEX, ' ' );
WITH EDITDATO DO
BEGIN
ENTERINTEGER( 'DAG ', DAG );
ENTERINTEGER( 'MÅNED ', MÅNED );
ENTERINTEGER( 'ÅR ', ÅR );
END;
END (*ENTERDATO*);
PROCEDURE ENTERCOMMAND;
BEGIN
REPEAT
BEGIN
WRITE( 'OPERATIONSKODE (O-OPRET, R-RET, A-AFSLUT) ' );
WHILE EOLN DO READLN;
READ( OPKODE );
END;
UNTIL OPKODE IN (.'O','R','A'.);
END;
PROCEDURE ENTERSTATUS;
BEGIN
IF OPKODE='R' THEN
CASE REGISTER^.ÆGTESKABELIGSTATUS OF
GIFT: ÆSTATUS := 'GIFT ';
ENKE: ÆSTATUS := 'ENKE ';
FRASKILT: ÆSTATUS := 'FRASKILT';
UNGKARL: ÆSTATUS := 'UNGKARL';
END
ELSE ÆSTATUS := ' ';
REPEAT
BEGIN
WRITE( 'INDTAST ÆGTESKABELIG STATUS (G/F/E/U) ' );
EDIT( ÆSTATUS );
END;
UNTIL ÆSTATUS(1) IN (.'G','F','E','U'.);
END;
BEGIN
REWRITE( REGISTER, 'PERSDATA:P2:10' );
FINISHED := FALSE;
REPEAT
BEGIN
CLEARSCREEN;
OK := TRUE;
ENTERCOMMAND;
IF OPKODE<>'A' THEN
BEGIN
WRITELN;
WRITE( 'INDTAST POSTNUMMER ' );
READ( POSTNUMMER );
SEEK( REGISTER, POSTNUMMER );
IF IORESULT<>0 THEN
BEGIN
IOVAL:=IORESULT;
WRITE( 'FEJL ', IOVAL, ' VED OPSLAG I FIL' );
WRITE(' - TAST RETURN:');
READLN;
OK := FALSE
END;
IF OK AND (OPKODE='R') THEN
BEGIN
GET( REGISTER );
IF IORESULT<>0 THEN
BEGIN
WRITELN( 'FEJL ', IORESULT, ' VED INDLÆSNING AF POST');
OK := FALSE
END
ELSE SEEK( REGISTER, POSTNUMMER );
END;
IF OK THEN
BEGIN
WITH REGISTER^,NAVN DO
BEGIN
ENTERSTRING('FORNAVN ', FORNAVN, 30 );
ENTERSTRING('EFTERNAVN ', EFTERNAVN, 30 );
KODE := ' ';
REPEAT
BEGIN
IF OPKODE='R' THEN
CASE KØN OF
MAND: KODE := 'M';
KVINDE: KODE := 'K';
UKENDT: KODE := 'U';
END;
ENTERSTRING('KØN (M/K/U) ', KODE, 1 );
END;
UNTIL KODE(1) IN (.'M','K','U'.);
CASE KODE(1) OF
'M': KØN := MAND;
'K': KØN := KVINDE;
'U': KØN := UKENDT;
END;
ENTERDATO( 'FØDSELSDATO ', FØDSELSDATO );
ENTERSTATUS;
CASE ÆSTATUS(1) OF
'G','E': BEGIN
IF ÆSTATUS(1)='G' THEN ÆGTESKABELIGSTATUS:=GIFT
ELSE ÆGTESKABELIGSTATUS:=ENKE;
WRITE( 'DATO FOR ÆGTESKABETS ');
ENTERDATO('INDGÅELSE ',GIFTEDATO);
END;
'F': BEGIN
ÆGTESKABELIGSTATUS:=FRASKILT;
ENTERDATO('SKILSMISSEDATO ', SKILSMISSEDATO );
ENTERINTEGER('ANTAL SKILSMISSER ',ANTALSKILSMISSER);
END;
'U': BEGIN
ÆGTESKABELIGSTATUS:=UNGKARL;
REPEAT
BEGIN
WRITE('UAFHÆNGIG (J/N) ');
WHILE EOLN DO READLN;
READ( SVAR )
END;
UNTIL SVAR IN (.'J','N'.);
UAFHÆNGIG := SVAR = 'J';
END;
END (*CASE ÆGTESKABELIGSTATUS*);
END (*WITH REGISTER^*);
PUT( REGISTER );
END (*IF OK*);
END (*OPKODE<>'A'*);
END (*REPEATSÆTNING*);
UNTIL OPKODE='A';
WRITELN('FILETEST SLUT')
END (*FILETEST*).