|
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 - download
Length: 17408 (0x4400) Types: TextFile Names: »TELEFON.PAS«
└─⟦6032ef8bc⟧ Bits:30003298 Turbo Pascal 3.01A og diverse programmer til RC700 └─ ⟦this⟧ »TELEFON.PAS«
PROGRAM TELEFON; (*$A+,R-,C-*) (* Rc702,703 piccolo *) CONST version = 'Telefon-register,Main v.87.11.09 (C) JFP.'; max = 255; (* 255 Fil-poster, (252 DATA-Poster). *) px = 32; ypos = 11; (* Cur. XYpos, v.inddata, svar *) offset = 2; (* Fil-offset=2, post1 i UDSKRIFT= DataPost.3 *) level = 4; (* 1..9, Level= Max. File-No uden Password. *) maxpas = 4; (* Password-Lengde, max 12 tegn. (Fil-acces). *) maxpen = 3; (* Password-Lengde, max 12 tegn. (Skrivning). *) TYPE str3 = STRING Æ3Å; str12 = STRING Æ12Å; str16 = STRING Æ16Å; str21 = STRING Æ21Å; str24 = STRING Æ24Å; str26 = STRING Æ26Å; filpost = RECORD flag,frik: CHAR; grup: CHAR; (* Gruppe-Kode 0..9 *) telf,idnt: str12; byno: str21; navn,addr: str24; stil: str26; END; VAR prn: TEXT; modul,ch,svar,p_num,disp,UP,olpok: CHAR; nr: CHAR; (* Index-Nr ved udskrift *) pass,password: STRING ÆmaxpasÅ; penn,pennword: STRING ÆmaxpenÅ; listdev,udlist,filnavn,intxt,lede: str16; grup_kode: ARRAY Æ0..9Å OF str21; files: ARRAY Æ1..9Å OF str12; txt,sbuf,fyld,txtcopy,sp: str26; ok,indset,cont,clr,clear,fundet,dato_ok,nohead: BOOLEAN; olp,lp_on,started,modul2,modul3,pass_ok,oprette: BOOLEAN; term, dato,fil_dato: str12; no,post: INTEGER; (* Fil-pointere, nix pille! *) nul,startpost,nummer,line,tal,i,j,n: INTEGER; form,komp,norm,lintop,linfed: INTEGER; inryk,nlqon,nlqoff,labfed: INTEGER; (* label-setup *) sp1,sp2,sp3: INTEGER; (* Special Print-Comm. *) setolp,setlab: str21; py,gempy,plx,skrift,nyside,side,filnum: BYTE; cmd_str: str12 AT $0080; fv: FILE OF filpost; fpo: filpost; PROCEDURE write_olp_string; VAR k: CHAR; c1,c2,c3,c4,c5: str3; BEGIN STR(form,c1); STR(komp,c2); STR(norm,c3); k:=','; STR(lintop,c4); STR(linfed,c5); setolp:=c1+k+c2+k+c3+k+c4+k+c5+'.'; STR(inryk,c1); STR(nlqon,c2); STR(nlqoff,c3); STR(labfed,c4); setlab:=c1+k+c2+k+c3+k+c4+'.'; END; PROCEDURE opstart; BEGIN UP:=CHR(26); (* Rc700-Cursor UP *) form:=12; komp:=15; norm:=18; lintop:=60; linfed:=12; inryk:=3; nlqon:=69; nlqoff:=70; labfed:=2; (* LP-Setup *) FOR i:=0 TO 8 DO grup_kodeÆiÅ:='-ikke oprettet- '; grup_kodeÆ9Å:='Diverse.'; nul:=3158; ch:=' '; fpo.frik:='F'; (* Reserved Future use *) fyld:=' '; (* 26 spacer *) started:=FALSE; clr:=FALSE; clear:=FALSE; pass_ok:=FALSE; olp:=FALSE; cont:=FALSE; dato_ok:=TRUE; dato:='o'; fil_dato:='dato'; skrift:=1; nul:=5+nul+nul; nr:='#'; no:=0; listdev:=' '; lede:=' '; udlist:=' /1'; filnavn:=' *'; filnum:=0; modul:='5'; sp1:=0; sp2:=67; sp3:=36; (* Print-Comm.*) modul2:=FALSE; modul3:=FALSE; (* G-Koder *) ASSIGN(prn,'CON:'); REWRITE(prn); filesÆ1Å:='NAVNEREG'; filesÆ2Å:='FIRMAREG'; filesÆ3Å:='DATABASE'; filesÆ4Å:='FORENING'; filesÆ5Å:='ARKIVREG'; filesÆ6Å:='SKOLEREG'; filesÆ7Å:='KUNDEREG'; filesÆ8Å:='BUISNESS'; filesÆ9Å:='UDLANDET'; write_olp_string; END; PROCEDURE cleol; BEGIN CASE disp of '1': WRITE(CLREOL); (* Rc700 *) '2': BEGIN WRITE(CHR(27)); WRITE(CHR(84)); (* McTerm *) END; '3': WRITE(CHR(30)); (* Rc822 *) END; END; PROCEDURE cursor(dx,dy: INTEGER); VAR w,xof: INTEGER; BEGIN CASE disp OF '1': GOTOXY(dx,dy); (* Rc700 *) '2': BEGIN WRITE(CHR(27),CHR(61)); (* ESC=Y,X YX-Adr for *) WRITE(CHR(dy+32)); WRITE(CHR(dx+32)); (* McTerm *) END; '3': BEGIN xof:=32; (* for dx in 32..63 *) IF dx<32 THEN xof:=96; IF dx>63 THEN xof:=(-32); WRITE(@6); (* XY-Adr, Rc822 *) WRITE(CHR(dx+xof)); WRITE(CHR(dy+96)); FOR w:=1 TO 100 DO (* wait 3 msec *); END; END; END; PROCEDURE getcmd; BEGIN disp:='1'; (* Rc700 *) i:=1; term:=''; j:=LEN(cmd_str); IF j>1 THEN BEGIN WHILE cmd_strÆiÅ=' ' DO i:=i+1; term:=COPY(cmd_str,i,j+1-i); IF POS(term,'RC700')>0 THEN disp:='1'; IF POS(term,'MCTERM')>0 THEN disp:='2'; IF POS(term,'RC822')>0 THEN disp:='3'; CASE disp OF '1': term:='Rc700'; (* 'Home', 0,0: x,y= 0,0 *) '2': term:='McTerm'; (* 'Home', 0,0: y,x(!)= 32,32 *) '3': term:='Rc822'; (* 'Home', 0,0: x,y= 96,96 *) END; END; (* Rc822 x0=96 x31=127 x32=64 x63=94 x64=32 x79=47 y0=96 y23=119 *) END; PROCEDURE make_olp_setup; VAR k: CHAR; c1: str3; x,y: INTEGER; BEGIN x:=1; y:=1; WHILE setolpÆyÅ>='0' DO y:=y+1; c1:=COPY(setolp,x,y-x); VAL(c1,form,n); y:=y+1; x:=y; WHILE setolpÆyÅ>='0' DO y:=y+1; c1:=COPY(setolp,x,y-x); VAL(c1,komp,n); y:=y+1; x:=y; WHILE setolpÆyÅ>='0' DO y:=y+1; c1:=COPY(setolp,x,y-x); VAL(c1,norm,n); y:=y+1; x:=y; WHILE setolpÆyÅ>='0' DO y:=y+1; c1:=COPY(setolp,x,y-x); VAL(c1,lintop,n); y:=y+1; x:=y; WHILE setolpÆyÅ>='0' DO y:=y+1; c1:=COPY(setolp,x,y-x); VAL(c1,linfed,n); x:=1; y:=1; WHILE setlabÆyÅ>='0' DO y:=y+1; c1:=COPY(setlab,x,y-x); VAL(c1,inryk,n); y:=y+1; x:=y; WHILE setlabÆyÅ>='0' DO y:=y+1; c1:=COPY(setlab,x,y-x); VAL(c1,nlqon,n); y:=y+1; x:=y; WHILE setlabÆyÅ>='0' DO y:=y+1; c1:=COPY(setlab,x,y-x); VAL(c1,nlqoff,n); y:=y+1; x:=y; WHILE setlabÆyÅ>='0' DO y:=y+1; c1:=COPY(setlab,x,y-x); VAL(c1,labfed,n); END; PROCEDURE menu; BEGIN WRITE(CLRHOM,no-1); cursor(68,0); WRITELN(fil_dato); cursor(12,1); IF modul='5' THEN WRITELN(version,' <',term,'>'); cursor(25,3); WRITELN('Arkiv',filnum,' ',filnavn); WRITELN('===================':44); IF MODUL='0' THEN WRITELN('HOVED MENU (0)':41); IF MODUL='1' THEN WRITELN('NYOPRETTELSER':40); IF MODUL='2' THEN WRITELN('VEDLIGEHOLDELSE':41); IF MODUL='3' THEN WRITELN('SØGNINGER (3)':40); IF MODUL='5' THEN WRITELN('ARKIV-VALG (5)':41); IF MODUL='7' THEN WRITELN('GRUPPEKODER':39); WRITELN('-------------------':44); END; PROCEDURE get_write_acces; BEGIN menu; penn:=''; WRITELN(@10); WRITE('Password, tak. '); READ(KBD,penn); IF penn=pennword THEN BEGIN IF dato<>fil_dato THEN BEGIN WRITELN(@13,'Dato for indeværende Fil = ',fil_dato); WRITE(' >>>'); WRITE(@13,'Ny dato, (max.12 tegn): <<<'); READLN(intxt); IF LEN(intxt)>1 THEN BEGIN WHILE LEN(intxt)<12 DO intxt:=intxt+' '; fil_dato:=intxt; dato:=intxt; dato_ok:=FALSE; END ELSE dato:=fil_dato; END; END ELSE modul:='?'; END; PROCEDURE tilladelse; BEGIN pass:=''; WRITE('Password, tak. '); READ(KBD,pass); IF pass<>password THEN BEGIN pass_ok:=FALSE; filnum:=0; filnavn:='?!'; END; END; PROCEDURE test_svar; BEGIN IF svar='C' THEN BEGIN cont:=NOT cont; cursor(3,ypos+8); IF cont THEN WRITE('C-on ') ELSE WRITE('C-off'); cursor(px-2,ypos+9); END; IF clr AND (svar='S') THEN BEGIN clear:=TRUE; (* sletmerkning af post *) svar:='J'; END; END; PROCEDURE janej; BEGIN REPEAT READ(KBD,svar); IF svar>='a' THEN svar:=CHR(ORD(svar)-32); IF modul2 THEN test_svar; IF svar='R' THEN svar:='N'; UNTIL svar IN Æ'J','N'Å; WRITELN(svar); END; (* janej *) (*$I TELEPROC.PAS *) PROCEDURE set_gruppe; BEGIN (* Gruppekode-tekst-Nr. i fil-post 0..2 *) menu; viskode(7,0,18); IF olp THEN print_gruppekoder; WRITE('Opret nye Gruppe-koder, j/n ? '); janej; IF svar='J' THEN get_write_acces ELSE modul:='?'; IF modul='7' THEN BEGIN opret_gruppekoder; write_gruppekoder; IF txt>'' THEN BEGIN menu; WRITELN; WRITELN(' ':19,'Følgende Filnavne kan anvendes:',@10); FOR j:=1 TO 9 DO WRITELN(j:27,'.) ',filesÆjÅ,'.TLF'); WRITE(' ':35,'return'); READ(KBD,ch); END; END; END; PROCEDURE startadr; BEGIN REPEAT cursor(25,18); WRITE('Udlæsning fra post no: '); cleol; (*$I-*) READLN(startpost); (*$I+*) UNTIL (IORES=0) AND (startpost>0); IF (startpost=nul) AND (nul>$4AF) THEN startpost:=offset-(offset+offset); startpost:=startpost+offset; IF (startpost>=0) AND (startpost<no) THEN modul:='4' ELSE BEGIN startpost:=1+offset; WRITE(UP); cleol; cursor(48,17); END; END; PROCEDURE hent(VAR iotal: INTEGER; yy: INTEGER); BEGIN REPEAT tal:=-1; cursor(47,yy); WRITE(' '); cleol; (*$I-*) READLN(tal) (*$I+*); UNTIL (IORES=0) AND (tal<=255); if tal>=0 THEN iotal:=tal; END; PROCEDURE printer_setup; BEGIN WRITELN(CLRHOM); WRITELN(' ':9,'PRINTER SET-UP for ',filnavn,'.'); WRITELN(' ':8,'=================================',@10); WRITELN(' Form-/Line-Feed v.sideskift(12=FF,def= 12)',form:3); WRITELN(' Værdi for komprimeret udskrift, (def= 15)',komp:3); WRITELN(' Værdi for normal udskrift, (default= 18)',norm:3); WRITELN(' Antal linier pr. side i udskrift, (60)',lintop:3); WRITELN(' Antal line-feed, udskr.-slut, (12=FF),(12)',linfed:3); WRITELN(' Venstre margin ved print-Labels, (3)',inryk:3); WRITELN(' NLQ-skrift = ON, (default= ESC E E= 69)',nlqon:3); WRITELN(' NLQ-skrift = OFF, (default= ESC F F= 70)',nlqoff:3); WRITELN(' Antal line-feed mellem Labels (2)',labfed:3); hent(form,4); hent(komp,5); hent(norm,6); hent(lintop,7); hent(linfed,8); hent(inryk,9); hent(nlqon,10); hent(nlqoff,11); hent(labfed,12); WRITELN; WRITE(' ':14,'Gem ny printer-setup, j/n ? '); janej; if svar='J' THEN BEGIN write_olp_string; write_gruppekoder; END; END; PROCEDURE spec_print; BEGIN WRITELN(CLRHOM); WRITELN(' ':15,'Special Print.'); WRITELN(' ':14,'===============',@10); WRITELN(' Denne ordre (max 3 char lang) gemmes ikke, men'); WRITELN(' kan sendes direkte til printeren, hvis char1>0.',@10); WRITELN(' Bruges f.eks til Form-længde (ESC) Char1=',sp1:3); WRITELN(' Line-spacing-kommando, NLQ, etc. Char2=',sp2:3); WRITELN(' Eks. 27 67 72, 27 65 24 + 27 50 Char3=',sp3:3); svar:='*'; hent(sp1,7); hent(sp2,8); hent(sp3,9); WRITELN; IF sp1>0 THEN BEGIN WRITE(' ':14,'Kommando til printer, j/n ? '); janej; END; IF svar='J' THEN BEGIN WRITE(lst,CHR(sp1)); IF sp2>0 THEN WRITE(lst,CHR(sp2)); IF sp3>0 THEN WRITE(lst,CHR(sp3)); END; END; PROCEDURE printctrl; BEGIN olp:=NOT olp; ch:=' '; listdev:=''; modul:='?'; IF olp THEN BEGIN ch:='6'; listdev:='Printer ON.'; END; cursor(46,12); WRITE(listdev); cleol; cursor(48,17); WRITE(ch,@8); END; PROCEDURE listvalg; BEGIN WRITE(modul); READ(KBD,ch); WRITE(ch); IF ch='1' THEN udlist:='/1,Quick. '; IF ch='2' THEN udlist:='/2,Total-Liste'; IF ch='3' THEN udlist:='/3,Adr.Labels '; IF ch IN Æ'1'..'3'Å THEN skrift:=ORD(ch)-48; cursor(47,10); WRITE(udlist); cursor(48,17); cleol; END; PROCEDURE new_file; BEGIN WRITE(@7,' findes ikke.'); WRITE(' - NY-opret, j/n ? '); janej; IF svar='J' THEN BEGIN WRITELN(filnavn,' Oprettes'); password:='PASSWORD....'; pennword:='PASSWORD....'; fil_dato:='Dato.'; dato:='o'; REWRITE(fv); write_gruppekoder; WRITE(filnavn); END ELSE started:=FALSE; END; PROCEDURE filswap; VAR fv: FILE; BEGIN WRITELN('TELE.COM'); ASSIGN(fv,'TELE.COM'); WRITELN('hentes.'); (*$I-*) EXECUTE(fv); (*$I+*) IF IORES>0 THEN WRITELN(UP,'findes ikke'); END; PROCEDURE filename; BEGIN menu; FOR j:=1 TO level DO WRITELN(j:27,'.) ',filesÆjÅ,'.TLF'); WRITE(@10,'/ ':26,'Indtast Nummer: '); REPEAT READ(KBD,ch) UNTIL ch IN Æ'/','1'..'9'Å; WRITELN(ch,@10); IF ch>'/' THEN BEGIN filnum:=ORD(ch)-48; filnavn:=filesÆfilnumÅ+'.TLF'; IF started THEN CLOSE(fv); WRITE(filnavn); ASSIGN(fv,filnavn); started:=TRUE; no:=0; (*$I-*) RESET(fv) (*$I+*); IF IORES>0 THEN new_file; IF started THEN read_gruppekoder ELSE filnavn:=' ?'; END; END; PROCEDURE modultekst; BEGIN menu; WRITELN('1.) NYOPRETTELSER':42); WRITELN('2.) VEDLIGEHOLDELSE':44); WRITELN('3.) SØGNINGER':38); WRITELN('4.) UDSKRIVNING#/123':45,' ',udlist); WRITELN('5.) NYT ARKIV-NAVN':43); WRITE ('6.) PRINTER ON/OFF':43,' ',listdev); cleol; WRITELN; WRITELN('7.) GRUPPE-KODER':41); WRITELN('8;) PRINTER SET-UP':43); WRITELN('9:) SLUT.':34,@10); WRITE('HVILKET MODUL ØNSKES ? ':48); REPEAT READ(KBD,modul); IF modul='6' THEN printctrl; IF started AND (modul='#') THEN startadr; IF modul='/' THEN listvalg; UNTIL modul IN Æ'1'..';'Å; WRITELN(modul); END; BEGIN opstart; getcmd; filename; REPEAT modul:='0'; svar:='*'; gempy:=0; startpost:=1+offset; indset:=FALSE; modultekst; IF started AND pass_ok THEN BEGIN IF modul IN Æ'1','2'Å THEN get_write_acces; IF NOT dato_ok THEN write_gruppekoder; IF modul='1' THEN nyopret; IF modul='2' THEN rettelse; IF modul='4' THEN readout(startpost); IF modul='3' THEN kig_efter; IF modul='7' THEN set_gruppe; IF modul='8' THEN printer_setup; END ELSE IF modul IN Æ'1'..'4','7','8'Å THEN WRITE(@7); IF modul='5' THEN filename; IF modul=';' THEN spec_print; UNTIL modul IN Æ'9',':'Å; CLOSE(prn); IF started THEN CLOSE(fv); IF modul=':' THEN filswap; END. (* TELEFON.PAS, 851115. Rev.9/11-1987. (C) JFP *) «eof»