|
DataMuseum.dkPresents historical artifacts from the history of: RC3500 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC3500 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 23040 (0x5a00) Types: TextFileVerbose Names: »exttxtkom«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »exttxtkom«
; <*-------------------------komlib-------------------------- ; ; modulnavn (algol7 text) : exttxtkom ; _ (object code) : komlib ; k|rt f|rste gang d. : 24.08.78 ; form}l : externe procedurer til kommune-gruppen ; projekt : system ; _ ; programm|r : jkp + hjep + olej + niels jacobsen ; _ ; sidste rettelsesdag : 14/5-79 ; udf|rt af : Ole Jacobsen ; _ ; dokumentation : * ; _ ; moduler der benyttes : ingen ; _ ; bem{rkninger : ingen ;*> ;<*-------------------------hj{lp-----------------------------*> indl{stal = algol external long procedure indl{stal(udtext); string udtext; begin long indtal; write(out,<:<10>:>,udtext,<: ?= :>); setposition(out,0,0); read(in,indtal); indl{stal := indtal; end indl{stal; end; ask = algol external boolean procedure ask(asktext); string asktext; begin own boolean erkaldt, skinput; integer ch,dum; if -, erkaldt then begin integer array beskrivelse(1:20); erkaldt := true; getzone(in, beskrivelse); skinput := beskrivelse(1) = 8; end; write(out,<:<10>:>,asktext,<: ? :>); setposition(out,0,0); for dum := readchar(in,ch) while ch<> 106 and ch <> 110 do if ch<> 10 and ch <> 32 then begin write(out,<:svar j'a' eller n'ej':>); write(out,<:<10>:>,asktext, <: ? :>); if -, skinput then system(9, 0, <:fejl i svar:>); setposition(out,0,0); for dum := readchar(in, ch) while ch <> 10 do; end for; ask := ch = 106; if skinput then begin for dum := readchar(in, ch) while ch <> 10 do; end; end ask; end; checkddmm}} = algol external boolean procedure checkddmm}}(dato); value dato; integer dato; checkddmm}} := (dato // 10000 < 32) and (dato //100 mod 100 < 13); end; checkmod11 = algol external boolean procedure checkmod11(tal); value tal; long tal; begin long tal1; integer sum, v{gt; sum := 0; tal1 := tal; for v{gt := 1, (case v{gt of (2, 3, 4, 5, 6, 7, 2)) while tal1 > 0 do begin sum := sum + (tal1 mod 10) * v{gt; tal1 := tal1 // 10; end; checkmod11 := sum mod 11 = 0; end checkmod11; end; lavcheckcif = algol external long procedure lavcheckcif(tal); value tal; long tal; begin long tal1; integer sum, v{gt; tal1 := tal; sum := 0; for v{gt := 3, (case v{gt of (2, 3, 4, 5, 6, 7, 2)) while tal1 > 0 do begin sum := sum + (tal1 mod 10) * v{gt; tal1 := tal1 // 10; end; sum := (22 - sum mod 11) mod 11; if sum = 10 then sum := 50; lavcheckcif := tal * 100 + sum; end lavcheckcif; end; tiexp = algol external long procedure tiexp(eksponent); value eksponent; integer eksponent; begin tiexp := case eksponent + 1 of ( 1,10,100,1000,10000,100000,1000000,10000000,100000000, 1000000000,10000000000,100000000000,1000000000000,10000000000000, 100000000000000); end tiexp; end; getdeltal = algol external integer procedure get_del_tal(tal,pos1,pos2); <* proceduren henter tallet i positionerne pos1 til pos2 i tal fra h|jre mod venstre *> value tal,pos1,pos2; integer pos1,pos2; long tal; begin get_del_tal := tal//tiexp(pos1 -1) mod tiexp(pos2 - pos1 +1); end get_del_tal; end; lavkortstr = algol external long procedure lav_kort_streng(tal,antalpos); value tal, antalpos; integer tal,antalpos; <* resultatet er en long med tal pakket med iso v{rdier for cifrene i antalpos positioner fra venstre *> begin long fak , str; integer j; fak := tiexp(antalpos-1); str := 0; for j := 1 step 1 until antalpos do begin str := str shift 8 + (tal//fak) + 48; tal := tal mod fak; fak := fak // 10; end for; lav_kort_streng := str shift((6 - antalpos) * 8); end lav_kort_streng; end; nulstil = algol external procedure nulstil(rec,l{ngde); <* l{ngde er angivet i bytes*> value l{ngde; integer l{ngde; real array rec; begin real array field raf; raf := 4; rec(1) := real <::>; tofrom(rec.raf,rec,l{ngde-4); end nulstil; end; initrek = algol external procedure initrek(rek,l{ngdefelt,l{ngde); value l{ngde; integer l{ngde; integer field l{ngdefelt; array rek; begin nulstil(rek,l{ngde); rek.l{ngdefelt := l{ngde; end initrek; end; skrivdagsda = algol external procedure skrivdagsdato(z); zone z; begin own integer dag, m}ned, }r; if dag = 0 then begin integer dagsdato; real kl,kl1; systime(1,0,kl); dagsdato := entier(systime(2,kl,kl1)); dag := dagsdato // 10000; m}ned := dagsdato // 100 mod 100; if m}ned > 12 then m}ned := 0; }r := dagsdato mod 100 + 1900; end; write(z,<<dd>, dag,<:. :>); write(z, case m}ned + 1 of ( <:fejl :>, <:januar :>, <:februar :>, <:marts :>, <:april :>, <:maj :>, <:juni :>, <:juli :>, <:august :>, <:september:>, <:oktober :>, <:november :>, <:december :>)); write(z,<< dddd>,}r); end skrivdagsdato; end; skrivdato = algol external procedure skrivdato(z,dato); <* proceduren udskriver datoen p} formen: dd. <m}ned> }}}} det fylder 18 tegn. *> zone z; integer dato; begin integer dag, m}ned, }r; integer pos; dag := dato // 10000; m}ned := dato // 100 mod 100; if m}ned > 12 or m}ned < 0 then m}ned := 0; }r := dato mod 100 + 1900; pos := write(z,<<dd>, dag,<:. :>); pos := pos + write(z, case m}ned + 1 of ( <:fejl:>, <:januar:>, <:februar:>, <:marts:>, <:april:>, <:maj:>, <:juni:>, <:juli:>, <:august:>, <:september:>, <:oktober:>, <:november:>, <:december:>)); pos := pos + write(z,<< dddd>,}r); write(z, false add 32, 18 - pos); end skrivdato; end; skrivugedag = algol external \f procedure skrivugedag(z,dato); <* skriver <ugedag> den <dato> *> <* fylder 30 tegn *> value dato; integer dato; zone z; begin integer dag, m}ned, }r, n, u; dag := dato//10000; m}ned := dato//100 mod 100; }r := 1900 + dato mod 100; if m}ned<3 then begin m}ned := m}ned + 12; }r := }r - 1; end; n := 13*(m}ned+1)//5 + 5*}r//4 - }r//100 + }r//400 + dag - 1; u := n mod 7; write (z,case u+1 of(<:s|ndag :>,<:mandag :>,<:tirsdag:>,<:onsdag :>,<:torsdag:>,<:fredag :>,<:l|rdag :>)); write (z,<: den :>); skrivdato (z,dato); end skrivugedag; end; initalfabet = algol external procedure init_alfabet(alfabet); <* proceduren initialiserer parameteren, alfabet, med et standard-alfabet*> integer array alfabet; begin integer j; for j := 0 step 1 until 127 do alfabet(j) := (case j + 1 of ( 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 7, 7, 7, 3, 7, 3, 4, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0)) shift 12 + j; end initalfabet; end; skrivvt = algol external \f procedure skriv_vt(z, antal, spec_styrestrimmel); value antal, spec_styrestrimmel; zone z; integer antal; boolean spec_styrestrimmel; begin if spec_styrestrimmel then write(z, false add 11, 1) else write(z, false add 10, antal); end skriv_vt; end; plus1dato = algol external integer procedure plus1dato(dato); value dato; integer dato; <* procedure giver datoen for dagen efter den opgivne dato *> begin integer d, m, }; d := dato // 10000 + 1; m := dato // 100 mod 100; } := dato mod 100; if m < 0 or 12 < m then m := 0; if d > (case m+1 of (99, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)) then begin d := 1; m := m + 1; if m = 13 then begin m := 1; } := } + 1; end; end; plus1dato := d*10000 + m*100 + }; end plus1dato; end; skrivtidsfo = algol external procedure skrivtidsfo(z,txt); <* procedure til udskrift af tidsforbrug med henblik p} effektivitetsanalyse. formatet er: klokken tt mm ss txt ( som er parameter ) siden sidst i sek. siden start i tt mm ss cputid realtid cputid realtid *> zone z; string txt; begin own boolean erkaldt,sp; own real cputid,realtid,starttid; real cpuforb, realtidnu,klokke,cpuklok,realklok; if -, erkaldt then begin integer dagsdato; real kl; erkaldt := true; cputid := systime(1,0,starttid); realtid := starttid; write(z,<:<10>:>,<: f|rste tidsstatistik udskrift :>); dagsdato := entier(systime(2,starttid,kl)); sp := false add 32; skrivugedag(z,dagsdato); write(z,<:<10>:>); end; cpuforb := systime(1,0,realtidnu); systime(2,realtidnu,klokke); systime(2,cpuforb,cpuklok); systime(2,realtidnu - starttid,realklok); write(z,<:<10>:>,<:klokken :>,<<dd dd dd>,klokke,sp,5,txt,<:<10>:>, <: siden sidst i sek. siden start tt mm ss:>,<:<10>:>, <: cpu : :>,<<dddd.dd>,cpuforb - cputid, <: real : :>,realtidnu - realtid,sp,5, <: cpu : :>,<<dd dd dd>,cpuklok, <: real : :>,realklok,<:<10>:>); realtid := realtidnu; cputid := cpuforb; end skrivtidsfo; end; ;<* -------------------------filehj{lp-----------------------------*> connectdoc = algol external \f integer procedure connect_doc(z,name,segm); <*****************************************> value segm; integer segm; string name; zone z; begin comment proceduren }bner 'z' til 'name'. hvis katalogindgangen ikke findes og segm > 0, erkl{res der et bs-areal med navnet 'name' og en st|rrelse p} 'segm' segmenter. hvis segm < 0 s{ttes check_wanted bit'en i zonens free parameter. procedurens returv{rdi angiver dokumentets 'kind'; integer modekind,i,k; integer array tail(1:10),descr(1:20); real array field raf; real array doc(1:2); close(z,true); movestring(doc,1,name); k:=1; open(z,0,string doc(increase(k)),0); i:=monitor(42)lookup_entry:(z,0,tail); if i <> 0 then begin <* indgangen findes ikke *> if segm <= 0 then begin k:=1; write(out,<:<10>:>,<:bs-area :>,string doc(increase(k)),<:findes ikke:>); system(9,i,<:<10>*connect:>); end else begin comment der laves et bas-area; close(z,true); k:=1; open(z,4,string doc(increase(k)),0); for i:=1 step 1 until 10 do tail(i):=0; tail(1):=segm; tail(6) := systime(7, 0, 0.0); i:=monitor(40)create_entry:(z,0,tail); if i <> 0 then begin k:=1; write(out,<:<10>:>,<:bs-area :>,string doc(increase(k)),<: kan ikke oprettes:>); system(9,i,<:<10>*connect:>); end; end; end else if tail(1) > 0 then begin close(z,true); k:=1; open(z,4,string doc(increase(k)),0); connect_doc:=4; end else if tail(1) <= 0 then begin <* indgangen <> bs-area *> modekind:=tail(1) extract 23; close(z,true); k:=1; raf:=2; open(z,modekind,string tail.raf(increase(k)),0); if modekind extract 12 = 18 then setposition(z,tail(7),tail(8)); connect_doc:=modekind extract 12; end; if segm < 0 then begin comment der |nskes kontrol af checksum; getzone6(z,descr); descr(11):= 1 shift 23; setzone6(z,descr); end; end procedure connect_doc; end; fpfejl= algol external integer procedure fpfejl(type); <*****************************> value type; integer type; begin write(out,<:<10>:>,<:fejl i fil-parametre:>,<:<10>:>,case type of ( <:parameterfejl:>, <:ukendt parameter:>, <:parameter l{st tidligere:>, <:parameter ikke efterfulgt af punktum:>, <:ukendt testudskrift:>, <:ukendt sk{rmmode :>), <:<10>:>); system(9,type,<:<10>fp_kald:>); end procedure fpfejl; end; generatenam = algol external \f procedure generate_nam(name); <****************************> array name; comment proceduren generer et bs_area navn; begin zone _ z(128,1,stderror); integer array _ ia(1:20); integer array field _ iaf; integer _ i; iaf:=0; i:=monitor(68)generate_name:(z,0,ia); if i <> 0 then system(9,i,<:<10>*genname:>); getzone6(z,ia); for i:=2 step 1 until 5 do name.iaf(i-1):=ia(i); end procedure generate nam; end; removeentry = algol external \f procedure remove_entry(name); <***************************> array name; comment proceduren fjerner omr}det <name>; begin zone _ z(128,1,stderror); integer array _ ia(1:20); integer _ i; i:=1; connect_doc(z,string name(increase(i)),21); i:=monitor(48)remove_entry:(z,0,ia); close(z,true); end procedure remove_entry; end; getexactpos = algol external \f procedure getexactpos(z,block,rel,pwfree); <*********************************************> zone z; integer block,rel,pwfree; begin comment proceduren finder den n|jagtige position p} dokumentet tilknyttet z; integer array _ zdescr(1:20); getzone6(z,zdescr); block:=zdescr(9); rel:=zdescr(14)+zdescr(16)-zdescr(19)-4*zdescr(20)//zdescr(18)*(zdescr(17)-1); pwfree:=if zdescr(13) = 6 then zdescr(11) else zdescr(12); end procedure getexactpos; end; setexactpos = algol external procedure setexactpos(z,block,rel,pwfree); <*********************************************> zone z; integer block,rel,pwfree; begin integer array _ zdescr(1:20); integer _ actblock, _ zstate; getzone6(z,zdescr); actblock:=zdescr(9); zstate:=zdescr(13); if actblock = block and zstate <> 0 then zdescr(14):=rel+zdescr(19)+4*zdescr(20)//zdescr(18)*(zdescr(17)-1) else begin setposition(z,0,block); inrec6(z,0); zdescr(9):=block; zdescr(13):=zstate; zdescr(14):=rel+zdescr(19); zdescr(15):=zdescr(19)+4*zdescr(20)//zdescr(18); zdescr(17):=1; end; zdescr(11):=zdescr(12):=pwfree; zdescr(16):=0; setzone6(z,zdescr); end procedure setexactpos; end; getstdfp = algol external \f boolean procedure get_std_fp(outfiletxt,infiletxt,fejllistetxt,test); <*proceduren l{ser f|lgende standard-parametre: <outfiletxt> = programkald in.<infiletxt> fejl.<fejllistetxt> test.<et eller flere tal> det foruds{ttest, at test er erkl{ret som (1:20), og for alle tal, der forekommer med . imellem efter test vil test(tallet) blive sat til true *> array outfiletxt,infiletxt,fejllistetxt; boolean array test; begin real array ra(1:2); boolean array l{st(1:4); integer j,p,cas; integer testnedre, test|vre; testnedre := system(3, test|vre, test); for j := testnedre step 1 until test|vre do test(j) := false; for j := 1 step 1 until 4 do l{st(j) := false; p := 1; if system(4,1,ra) shift (-12) = 6 then begin <* outfile forekommer *> if system(4,0,ra) extract 12 <> 10 then fpfejl(1); tofrom(outfiletxt,ra,8); p:= 2; end; for j := system(4,p,ra) while j <> 0 do if j<> 4 shift 12 + 10 then fpfejl(1) else begin cas := if ra(1) = real<:in:> then 1 else if ra(1) = real <:fejl:> then 2 else if ra(1) = real <:test:> then 3 else 4; if cas = 4 then begin get_std_fp := false; goto exit; end; if l{st(cas) then fpfejl(3) else l{st(cas) := true; j := system(4,p+1,ra); if j shift (-12) <> 8 then fpfejl(4); case cas of begin tofrom(infiletxt,ra,8); tofrom(fejllistetxt,ra,8); for p:= p+1 while system(4,p,ra) = 8 shift 12 + 4 do if ra(1) >= testnedre and ra(1) <= test|vre then test(ra(1)) := true else fpfejl(5); end case; if cas <> 3 then p := p+ 2; end for; get_std_fp := true; exit:; end get_std_fp; end; l{sfptal = algol external \f long procedure l{sfptal(text); <* proceduren l{ser et tal i fp-kaldet. det skal st} p} formen <text>.<tal> *> string text; begin real array ra, textra (1:2); integer j, fpnr, lg; lg := movestring(textra, 1, text); fpnr := 1; l{sfptal := 0; for j := system(4, fpnr, ra) while j <> 0 do begin if j = 4 shift 12 add 10 <* det er et navn med space foran *> and ra(1) = textra(1) and (if lg = 2 then ra(2) = textra(2) else true) then begin fpnr := fpnr + 1; if system(4, fpnr, ra) = 8 shift 12 + 4 <* punktum med et tal efter *> then l{sfptal := ra(1) else fpfejl(4); end else fpnr := fpnr + 1; end; end l{sfptal; end; l{sfpboo = algol external \f boolean procedure l{sfpboo(text,boo); <* proceduren l{ser en boolean i fp-kaldet. det skal st} p} formen <text>.<svar> og resultatet leveres i boo , som true hvis <svar> er 'yes' eller 'ja' og false hvis <svar> er 'no' eller 'nej'. findes <text> ikke i fpkaldet, er boo u{ndret *> string text; boolean boo; begin real array ra, textra (1:2); integer j, fpnr, lg; l{sfpboo := false; lg := movestring(textra, 1, text); fpnr := 1; for j := system(4, fpnr, ra) while j <> 0 do begin if j = 4 shift 12 add 10 <* det er et navn med space foran *> and ra(1) = textra(1) and (if lg = 2 then ra(2) = textra(2) else true) then begin fpnr := fpnr + 1; if system(4, fpnr, ra) = 8 shift 12 + 10 <* punktum med en tekst efter *> then begin if ra(1) = real <:yes:> or ra(1) = real <:ja:> then boo := true else if ra(1) = real <:no:> or ra(1) = real <:nej:> then boo := false else fpfejl(1); l{sfpboo := true; end else fpfejl(4); end else fpnr := fpnr + 1; end; end l{sfpboo; end; l{sfpelsk = algol external \f long procedure l{s_fp_el_sk(fptxt,sk{rmtxt); string fptxt,sk{rmtxt; begin long tal; tal:=l{sfptal(fptxt); if tal=0 then begin tal:=indl{stal(sk{rmtxt); end; l{s_fp_el_sk:=tal; end; end; l{sfptalf|l = algol external boolean procedure l{s_fp_talf|lge(text,tab); string text; integer array tab <*(1:max)*>; begin real array ra, textra(1:2); integer i,j,fpnr,lg; boolean fundet; fundet := false; lg := movestring(textra,1,text); fpnr := 1; l{s_fp_talf|lge := false; for j:=system(4,fpnr,ra) while j<>0 and -, fundet do begin if j = 4 shift 12 add 10 and ra(1) = textra(1) and (if lg = 2 then ra(2) = textra(2) else true) then begin i:=1; l{s_fp_talf|lge := true; for fpnr := fpnr + 1 while system(4,fpnr,ra) = 8 shift 12 + 4 do tab(increase(i)) := ra(1); fundet := true; end else fpnr := fpnr + 1; end; end; end; l{sfptext = algol external \f boolean procedure l{s_fp_text(text,navn); string text; array navn <*(1:2)*>; begin real array ra, textra(1:2); integer j, fpnr, lg; boolean fundet; fundet := false; lg := movestring(textra,1,text); fpnr := 1; l{s_fp_text := false; for j:= system(4,fpnr,ra) while j<>0 and -, fundet do begin if j = 4 shift 12 add 10 and ra(1) = textra(1) and (if lg = 2 then ra(2) = textra(2) else true ) then begin fpnr := fpnr + 1; if system(4,fpnr,ra) = 8 shift 12 + 10 then tofrom(navn,ra,8) else fpfejl(1); l{s_fp_text := true; fundet := true; end else fpnr := fpnr + 1; end; end; end; renameentry = algol external boolean procedure rename_entry(oldname,newname); real array oldname,newname; begin <* proceduren omd|ber (renamer) disc-filen 'oldname' til 'newname' *> <* hvis 'oldname' ikke findes i forvejen oprettes en ny fil med navnet *> <* 'newname' . resultatet af proceduren er true hvis det er g}et godt *> <* ellers false *> integer array ia(1:4); zone z(128,1,stderror); integer i,j; ia(1) :=newname(1) shift(-24) extract(24); ia(2) :=newname(1) extract(24); ia(3) :=newname(2) shift(-24) extract(24); ia(4) :=newname(2) extract(24); i:=0;j:=1; connectdoc(z,string oldname(increase(j)),21); j := monitor(46)rename_entry:(z,i,ia); close(z,true); rename_entry := j=0; end rename_entry; end; getexactpos = algol external \f procedure getexactposition(z,block,rel,pwfree); <*********************************************> zone z; integer block,rel,pwfree; begin comment proceduren finder den n|jagtige position p} dokumentet tilknyttet z; integer array _ zdescr(1:20); getzone6(z,zdescr); block:=zdescr(9); rel:=zdescr(14)+zdescr(16)-zdescr(19)-4*zdescr(20)//zdescr(18)*(zdescr(17)-1); pwfree:=if zdescr(13) = 6 then zdescr(11) else zdescr(12); end procedure getexactposition; end; setexactpos = algol external procedure setexactposition(z,block,rel,pwfree); <*********************************************> zone z; integer block,rel,pwfree; begin integer array _ zdescr(1:20); integer _ actblock, _ zstate; boolean input; getzone6(z,zdescr); actblock:=zdescr(9); zstate:=zdescr(13); input := zstate = 1 or zstate = 5; if actblock = block and zstate <> 0 then zdescr(14):=rel+zdescr(19)+4*zdescr(20)//zdescr(18)*(zdescr(17)-1) else begin setposition(z,0,block - (if input then 1 else 0)); inrec6(z,0); zdescr(9):=block; zdescr(13):=zstate; zdescr(14):=rel+zdescr(19); zdescr(15):=zdescr(19)+4*zdescr(20)//zdescr(18); zdescr(17):=1; end; zdescr(11):=zdescr(12):=pwfree; zdescr(16):=0; setzone6(z,zdescr); end procedure setexactposition; end; copyproc = algol list.yes external integer procedure copyproc(zud, indnavn, slet_ind); value slet_ind; zone zud; real array indnavn; boolean slet_ind; begin long array buf(1:129); integer array kind(1:128), alfabet(0:127); integer j, segmnr; zone zind(2*128, 2, stderror); for j := 1 step 1 until 126 do alfabet(j) := 6 shift 12 add j; for j := 0, 127 do alfabet(j) := 0 shift 12 add j; alfabet(25) := 8 shift 12 add 25; intable(alfabet); j := 1; connect_doc(zind, string indnavn(increase(j)), 0); segmnr := 0; buf(129) := extend 0; for j := readall(zind, buf, kind, 1) while j <= 0 do begin repeatchar(zind); write(zud, buf); segmnr := segmnr + 1; end; copyproc := segmnr * 768 + write(zud, buf); close(zind, true); if slet_ind then remove_entry(indnavn); end; end «eof»