|
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: 9728 (0x2600) Types: TextFile Names: »SISABON.PAS«
└─⟦d814f614c⟧ Bits:30008872 EDB Trænings- og Erhvervs Center / Almen Nyttig Data Service └─⟦this⟧ »SISABON.PAS«
PROGRAM SISABON; (* DETTE PROGRAM VEDLIGEHOLDER DEN INTERNE OG DEN EXTERNE ABONNEMENTS- *) (* FIL TIL SIS-MANUALERNE. BRUGEREN VÆLGER VIA EN MENU DEN FIL DER *) (* SKAL BEARBEJDES. HEREFTER KAN DER BLADRES FREM I FILEN TIL DEN ØNS- *) (* KEDE POST, SOM HEREFTER ENTEN KAN SLETTES ELLER RETTES. *) (* NÅR PROGRAMMET NÅR BUNDEN AF FILEN, KAN MAN OPRETTE NYE POSTER. *) (* PROGRAMMET LÆSER DE GAMLE POSTER PÅ DE EKSISTERENDE FILER OG GENE- *) (* RERER NYE FILER UDFRA DE INDTASTEDE OPLYSNINGER. *) (* PROGRAMMET TERMINERER VED AT INDTASTE 0 I MENU. *) (* PROGRAMMØR : HELLE ALLESEN-VERNØ DATO : 1984.03.13 *) (****************** VARIABELDEKLARATION FOR HOVEDPROGRAM **************) VAR F, W : TEXT; S : STRINGÆ130Å; Q, K, N, P, BP, L, SP, ANTPOST, SZ : INTEGER; FIRSTLN, SECONDLN, ASTR : STRINGÆ70Å; BUF : ARRAYÆ1..7Å OF STRINGÆ130Å; DUMMY : INTEGER; SV, V, B : CHAR; TST : BOOLEAN; KEYBOARD, CRT : TEXT; CONST DELSCR = 12; DELREST = 31; DELLINE = 30; (****************** PROCEDURE TIL CURSORSTYRING ************************) PROCEDURE GOTOXY (X,Y : INTEGER); BEGIN WRITE (CHR(6),CHR(Y+32),CHR(X+32)); END; (*********************** STJERNEKANT PROCEDURE ****************************) PROCEDURE WRITEEDGE; VAR I : INTEGER; BEGIN FOR I :=0 TO 79 DO BEGIN GOTOXY(I,0); WRITE('*'); GOTOXY(I,23); WRITE('*'); END; FOR I :=1 TO 23 DO BEGIN GOTOXY(0,I); WRITE('*'); GOTOXY(79,I); WRITE('*'); END; END; (********************* PROCEDURE TIL HOVEDMENU ******************************) PROCEDURE MENU; BEGIN GOTOXY(0,0); WRITE(CHR(DELSCR)); WRITEEDGE; GOTOXY(13,4); WRITE('*** VEDLIGEHOLDELSE AF SIS-ABONNEMENTSFILER ***'); GOTOXY(29,7); WRITE('*** MENU ***'); GOTOXY(24,9); WRITE('1 : EXTERNE ABONNENTER'); GOTOXY(24,11); WRITE('2 : INTERNE ABONNENTER'); GOTOXY(24,13); WRITE('0 : STOP'); GOTOXY(24,16); WRITE('INDTAST VALG : '); REPEAT READ(KEYBOARD,V); UNTIL V IN Æ'0','1','2'Å; WRITE(V); END; (********************** PROCEDURE TIL UNDERMENU ****************************) PROCEDURE UNDERMENU; BEGIN GOTOXY(0,0); WRITE(CHR(DELSCR)); WRITEEDGE; GOTOXY(17,5); WRITE('DU ER NU VED STARTEN AF FILEN: ',ASTR); GOTOXY(17,6); WRITE('FILEN ER ',ANTPOST-1,' POSTER LANG '); GOTOXY(17,8); WRITE('DU KAN BLADRE FREM I FILEN VED AT INDTASTE'); GOTOXY(17,9); WRITE('DET ANTAL POSTER, DU ØNSKER AT SPRINGE OVER.'); GOTOXY(17,10); WRITE('HEREFTER BLIVER DEN NÆSTE POST I FILEN VIST PÅ SKÆRMEN.'); GOTOXY(17,11); WRITE('DU KAN SÅ VÆLGE AT RETTE ELLER SLETTE POSTEN.'); GOTOXY(17,13); WRITE('HVIS DU ER FÆRDIG - TAST ET TAL STØRRE END ANTAL POSTER'); GOTOXY(17,15); WRITE('NÅR HELE FILEN ER LÆST, ER DER MULIGHED FOR AT'); GOTOXY(17,16); WRITE('OPRETTE NYE ABONNENTER.'); GOTOXY(30,19); WRITE('TAST RETUR '); READ (SV); END; (********************** VENTEPROCEDURE ********************************) PROCEDURE WAIT; VAR I : INTEGER; BEGIN GOTOXY(0,0); FOR I :=1 TO 30000 DO I:=I; END; (********************* PROCEDURE TIL UDSKRIVNING PÅ SKÆRM *******************) PROCEDURE SKRIV; VAR SP, LGD, STARTPOS, POS : INTEGER; FOUND : BOOLEAN; BEGIN GOTOXY(0,0); WRITE(CHR(DELSCR)); LGD:=LENGTH(BUFÆ1Å); FOUND:=FALSE; STARTPOS:=LGD; IF STARTPOS > 75 THEN BEGIN STARTPOS :=75; POS:=STARTPOS; WHILE (POS > 0) AND (NOT FOUND) DO BEGIN IF BUFÆ1,POSÅ = ',' THEN FOUND :=TRUE ELSE POS:=POS-1; END; IF FOUND THEN BEGIN FIRSTLN:=COPY(BUFÆ1Å,1,POS); SECONDLN:=COPY(BUFÆ1Å,POS+1,LGD-POS); END ELSE BEGIN FIRSTLN:=COPY(BUFÆ1Å,1,75); SECONDLN:=COPY(BUFÆ1Å,76,LGD-75); END; END ELSE BEGIN FIRSTLN:=COPY(BUFÆ1Å,1,STARTPOS); SECONDLN:=''; END; GOTOXY(0,1); WRITE('1 ',FIRSTLN); GOTOXY(0,2); WRITE('2 ',SECONDLN); L:= 3; FOR SP:= BP DOWNTO 2 DO BEGIN GOTOXY(0,L); WRITE(L,' ',BUFÆL-1Å);(* buffer skrives ud på skærm *) L:=L+1; END; END; (**************** PROCEDURE TIL UDSKRIVNING PÅ SKÆRM OG SLET/RET *************) PROCEDURE SKAERMBUF; VAR Q, LNR, SP : INTEGER; NS : STRINGÆ130Å; SVAR : CHAR; BEGIN SKRIV; (* DEN LÆSTE POST UDSKRIVES PÅ SKÆRM *) GOTOXY(0,10); WRITE('INDTAST R(ET), S(LET) ELLER V(IDERE) '); READ (B); IF B IN Æ'R','r','S','s'Å THEN BEGIN IF B IN Æ'R','r'Å THEN BEGIN REPEAT GOTOXY(0,15); WRITE(CHR(DELLINE)); WRITE('INDTAST LINIENR/RETUR - 0 FOR STOP '); READ (LNR); GOTOXY(35,15); WRITE(LNR); UNTIL LNR IN Æ0,1,2,3,4,5,6,7,8Å; WHILE LNR <> 0 DO BEGIN GOTOXY(0,16); WRITE ('INDTAST NY LINIE '); READ(NS); IF (LNR < 9) AND (LNR <=(BP+2)) THEN BEGIN IF LNR=1 THEN FIRSTLN:=NS ELSE IF LNR=2 THEN SECONDLN:=NS ELSE BUFÆLNR-1Å:=NS; IF LNR = (BP+2) THEN BP:= BP+1; END ELSE BEGIN GOTOXY(0,20); WRITE('MAX 8 LINIER OG INGEN TOMME LINIER I POST'); WAIT; END; BUFÆ1Å:=CONCAT(FIRSTLN, SECONDLN); SKRIV; (* DEN RETTEDE POST UDSKRIVES PÅ SKÆRM *) REPEAT GOTOXY(0,15); WRITE(CHR(DELREST)); GOTOXY(0,15); WRITE ('INDTAST LINIENR/RETUR - 0 FOR STOP '); READ(LNR); GOTOXY(35,15); WRITE(LNR); UNTIL LNR IN Æ0,1,2,3,4,5,6,7,8Å; END; FOR SP:=1 TO BP DO WRITELN(W,BUFÆSPÅ); (* DEN KORRIGEREDE POST SKRIVES PÅ FIL *) WRITELN(W); (* TOM LINIE *) END ELSE BEGIN GOTOXY(0,15); WRITE('ØNSKER DU AT SLETTE DENNE POST ? J/N ! '); READ (SVAR); IF SVAR IN Æ'J','j'Å THEN BEGIN GOTOXY(0,17); WRITE ('POSTEN SLETTES! '); WAIT; END ELSE BEGIN GOTOXY(0,17); WRITE ('POSTEN GEMMES '); WAIT; FOR SP:=1 TO BP DO WRITELN(W,BUFÆSPÅ); WRITELN(W); (* TOM LINIE *) END; END; END; GOTOXY(0,0); WRITE(CHR(DELSCR)); END; (****************** OPRETTELSES PROCEDURE *************************) PROCEDURE OPRET; VAR SZ : INTEGER; BEGIN IF SV IN Æ'J','j'Å THEN BEGIN GOTOXY(0,0); WRITE(CHR(DELSCR)); GOTOXY(0,3); WRITE('INDTAST LINIER(MAX 2 NUMMERLINIER OG 6 ADRESSELINIER)'); GOTOXY(0,4); WRITE('LINIE 2 ER EN FORTSÆTTELSE AF LIN. 1 - KUN TIL NUMRE'); GOTOXY(0,5); WRITE('1 '); READ(FIRSTLN); GOTOXY(0,6); WRITE('2 '); READ(SECONDLN); L:=3; REPEAT GOTOXY(0,4+L); WRITE(L,' '); READ(S); BUFÆL-1Å:=S; BP:=L-1; L:=L+1; UNTIL (S = '') OR (L>8); BP:=BP-1; BUFÆ1Å:=CONCAT(FIRSTLN,SECONDLN); SKAERMBUF; (* DEN INDTASTEDE POST UDSKRIVES PÅ SKÆRM TIL RET *) IF B IN Æ'R','r','S','s'Å THEN ELSE BEGIN FOR SZ:=1 TO BP DO WRITELN(W,BUFÆSZÅ); WRITELN(W); (* TOM LINIE *) END; END; END; (******************* HER BEGYNDER HOVEDPROGRAMMET *******************) BEGIN ASSIGN(KEYBOARD,'KBD:'); ASSIGN(CRT,'TRM:'); RESET (KEYBOARD); IF IORESULT = 255 THEN WRITELN('FEJL VED ÅBNING AF TASTATUR') ELSE BEGIN REWRITE (CRT); IF IORESULT = 255 THEN WRITELN('FEJL VED ÅBNING AF SKÆRM') ELSE BEGIN MENU; (* PROCEDURE TIL VALG AF FIL *) WHILE V <> '0' DO BEGIN IF V = '1' THEN BEGIN ASSIGN(F,'EXTFIL.TST'); ASSIGN(W,'NYEXT.TST'); ASTR:='EXTERNE ABONNENTER'; END; IF V = '2' THEN BEGIN ASSIGN (F,'INTFIL.TST'); ASSIGN (W,'NYINT.TST'); ASTR:='INTERNE ABONNENTER'; END; RESET(F); REWRITE(W); IF IORESULT = 255 THEN WRITELN(' FEJL VED ÅBNING AF FILER ') ELSE BEGIN ANTPOST:=0; REPEAT READLN(F,S); IF S='' THEN ANTPOST:=ANTPOST+1; UNTIL S = 'finis'; RESET (F); K:=0; P:=0; UNDERMENU; GOTOXY(0,0); WRITE(CHR(DELSCR)); WRITELN('INDTAST ANTAL POSTER, DU ØNSKER AT SPRINGE OVER OG RETUR (200 for stop'); READ (P); P:=ABS(P); READLN (F,S); WHILE S <> 'finis' DO BEGIN BP:=0; WHILE S<> '' DO BEGIN BP:=BP+1; BUFÆBPÅ:=S; (* SKRIVNING I BUFFER *) READLN (F,S); END; (* WHILE NOT BLANK *) IF P=K THEN BEGIN SKAERMBUF; (* PROC. TIL DISPLAY AF BUFFER *) WRITELN ('INDTAST ANTAL POSTER, DU ØNSKER AT SPRINGE OVER OG RETUR'); READ (N); N:=ABS(N); P:=P+N; END ELSE BEGIN FOR Q := 1 TO BP DO WRITELN (W,BUFÆQÅ); WRITELN(W); K:=K+1; END; READLN(F,S); END; (* WHILE NOT FINIS *) REPEAT GOTOXY(0,0); WRITE(CHR(DELSCR)); GOTOXY(0,10); WRITE('ØNSKER DU AT OPRETTE NYE ABONNENTER? '); GOTOXY(0,11); WRITE('TAST J ELLER N : '); READ(SV); WRITELN; OPRET; (* PROC. TIL OPRETTELSER AF NYE POSTER *) UNTIL SV IN Æ'N','n'Å; WRITELN (W,'finis'); CLOSE (W,DUMMY); IF IORESULT = 255 THEN WRITELN ('ERROR CLOSING'); END; (* BEGIN EFTER IORESULTTEST *) MENU; END; (* WHILE NOT 0 IN MENU *) GOTOXY(0,0); WRITE(CHR(DELSCR)); END; END; END. «eof»