From: Rafał Długołęcki Date: Sun, 4 Aug 2013 19:35:46 +0000 (+0200) Subject: Added upstream from http://ftp.icm.edu.pl/pub/loglan/ X-Git-Url: https://git.dlugolecki.net.pl/?a=commitdiff_plain;p=loglan.git Added upstream from ftp.icm.edu.pl/pub/loglan/ --- 0cc30a0ae27d4cd9bd3e3cef40dd92a4d967f71b diff --git a/.mirror b/.mirror new file mode 100644 index 0000000..a0d4b99 --- /dev/null +++ b/.mirror @@ -0,0 +1,403 @@ +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Mon Nov 25 01:14:37 MET 1996 +Failed to get HTML/index.html: 150 Opening BINARY mode data connection for HTML/index.html (2715 bytes). +Failed to get HTML/index.html.bak: 227 Entering Passive Mode (193,59,9,226,4,165) +Failed to get HTML/quickref.ps.Z: timed out +Failed to get HTML/comptble.ps.Z: timed out +Failed to get sources/pass1/unix.lnk: timed out +Failed to get sources/pass1/stdio.c: timed out +Failed to get sources/pass1/memfil.c: timed out +Failed to get sources/pass1/ml3.c: timed out +Failed to get sources/pass1/main.c: timed out +Failed to get sources/pass1/wan1.ff: timed out +Failed to get sources/pass1/scan.ff: timed out +Failed to get sources/pass1/it1.ff: timed out +Failed to get sources/pass1/al13.ff: timed out +Failed to get sources/pass1/al12.ff: timed out +Failed to get sources/pass1/al11.ff: timed out +Failed to get sources/pass1/it0.ff: timed out +Failed to get sources/pass1/debug.f: timed out +Failed to get sources/pass1/hash.f: timed out +Failed to get sources/pass1/wan2.f: timed out +Failed to get sources/pass1/wan3.f: timed out +Failed to get sources/pass1/dsw.f: timed out +Failed to get sources/pass1/statist.f: timed out +Failed to get sources/pass1/spgrec.f: timed out +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Tue Nov 26 00:20:42 MET 1996 +Failed to get HTML/index.html: 150 Opening BINARY mode data connection for HTML/index.html (2715 bytes). +Failed to get HTML/index.html.bak: 227 Entering Passive Mode (193,59,9,226,6,122) +Failed to get HTML/quickref.ps.Z: timed out +Failed to get HTML/comptble.ps.Z: timed out +Failed to get sources/pass1/unix.lnk: timed out +Failed to get sources/pass1/stdio.c: timed out +Failed to get sources/pass1/memfil.c: timed out +Failed to get sources/pass1/ml3.c: timed out +Failed to get sources/pass1/main.c: timed out +Failed to get sources/pass1/wan1.ff: timed out +Failed to get sources/pass1/scan.ff: timed out +Failed to get sources/pass1/it1.ff: timed out +Failed to get sources/pass1/al13.ff: timed out +Failed to get sources/pass1/al12.ff: timed out +Failed to get sources/pass1/al11.ff: timed out +Failed to get sources/pass1/it0.ff: timed out +Failed to get sources/pass1/debug.f: timed out +Failed to get sources/pass1/hash.f: timed out +Failed to get sources/pass1/wan2.f: timed out +Failed to get sources/pass1/wan3.f: timed out +Failed to get sources/pass1/dsw.f: timed out +Failed to get sources/pass1/statist.f: timed out +Failed to get sources/pass1/spgrec.f: timed out +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Thu Nov 28 08:34:34 MET 1996 +Failed to get HTML/index.html: 150 Opening BINARY mode data connection for HTML/index.html (2715 bytes). +Failed to get HTML/index.html.bak: 227 Entering Passive Mode (193,59,9,226,4,244) +Failed to get HTML/quickref.ps.Z: timed out +Failed to get HTML/comptble.ps.Z: timed out +Failed to get sources/pass1/unix.lnk: timed out +Failed to get sources/pass1/stdio.c: timed out +Failed to get sources/pass1/memfil.c: timed out +Failed to get sources/pass1/ml3.c: timed out +Failed to get sources/pass1/main.c: timed out +Failed to get sources/pass1/wan1.ff: timed out +Failed to get sources/pass1/scan.ff: timed out +Failed to get sources/pass1/it1.ff: timed out +Failed to get sources/pass1/al13.ff: timed out +Failed to get sources/pass1/al12.ff: timed out +Failed to get sources/pass1/al11.ff: timed out +Failed to get sources/pass1/it0.ff: timed out +Failed to get sources/pass1/debug.f: timed out +Failed to get sources/pass1/hash.f: timed out +Failed to get sources/pass1/wan2.f: timed out +Failed to get sources/pass1/wan3.f: timed out +Failed to get sources/pass1/dsw.f: timed out +Failed to get sources/pass1/statist.f: timed out +Failed to get sources/pass1/spgrec.f: timed out +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Mon Dec 2 14:49:10 MET 1996 +Failed to get HTML/index.html: 150 Opening BINARY mode data connection for HTML/index.html (2715 bytes). +Failed to get HTML/quickref.ps.Z: 227 Entering Passive Mode (193,59,9,226,5,158) +Failed to get HTML/comptble.ps.Z: timed out +Failed to get sources/pass1/unix.lnk: timed out +Failed to get sources/pass1/stdio.c: timed out +Failed to get sources/pass1/memfil.c: timed out +Failed to get sources/pass1/ml3.c: timed out +Failed to get sources/pass1/main.c: timed out +Failed to get sources/pass1/wan1.ff: timed out +Failed to get sources/pass1/scan.ff: timed out +Failed to get sources/pass1/it1.ff: timed out +Failed to get sources/pass1/al13.ff: timed out +Failed to get sources/pass1/al12.ff: timed out +Failed to get sources/pass1/al11.ff: timed out +Failed to get sources/pass1/it0.ff: timed out +Failed to get sources/pass1/debug.f: timed out +Failed to get sources/pass1/hash.f: timed out +Failed to get sources/pass1/wan2.f: timed out +Failed to get sources/pass1/wan3.f: timed out +Failed to get sources/pass1/dsw.f: timed out +Failed to get sources/pass1/statist.f: timed out +Failed to get sources/pass1/spgrec.f: timed out +Failed to get sources/pass1/resume.f: timed out +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Tue Dec 3 00:21:09 MET 1996 +Got HTML/index.html 2715 +Got HTML/quickref.ps.Z 51935 +Got HTML/comptble.ps.Z 23003 +Got sources/pass1/unix.lnk 144 +Got sources/pass1/stdio.c 1770 +Got sources/pass1/memfil.c 5868 +Got sources/pass1/ml3.c 10756 +Got sources/pass1/main.c 2319 +Got sources/pass1/wan1.ff 29014 +Got sources/pass1/scan.ff 24601 +Got sources/pass1/it1.ff 60577 +Got sources/pass1/al13.ff 98702 +Got sources/pass1/al12.ff 67222 +Got sources/pass1/al11.ff 113254 +Got sources/pass1/it0.ff 28091 +Got sources/pass1/debug.f 12469 +Got sources/pass1/hash.f 48676 +Got sources/pass1/wan2.f 55883 +Got sources/pass1/wan3.f 49687 +Got sources/pass1/dsw.f 141801 +Got sources/pass1/statist.f 3009 +Got sources/pass1/spgrec.f 3456 +Got sources/pass1/resume.f 4405 +Got sources/pass1/ml2.f 25660 +Got sources/pass1/ifun.f 1618 +Got sources/pass1/stos.h 1179 +Got sources/pass1/option.h 106 +Got sources/pass1/f2c.h 4093 +Got sources/pass1/blank3.h 910 +Got sources/pass1/blank2.h 1108 +Got sources/pass1/blank.h 1418 +Got sources/pass1/makefile 2254 +Got sources/pass1/logdeb.log 60113 +Got sources/pass1/makefil 2043 +Got sources/pass1/msdos.lnk 131 +Got sources/pass1/loglan 200098 +Got sources/pass1/blank.doc 2683 +Got sources/gen/genint.h 6370 +Got sources/gen/glodefs.h 10497 +Got sources/gen/mainvar.h 4811 +Got sources/gen/oxen.h 3564 +Got sources/gen/oxen.c 20711 +Got sources/gen/gen.c 19658 +Got sources/gen/lists.c 17680 +Got sources/gen/genprot.c 13547 +Got sources/gen/logen.c 10076 +Got sources/gen/mainvar.c 8154 +Got sources/gen/lcode.c 6858 +Got sources/gen/genio.c 6306 +Got sources/gen/deb.c 5358 +Got sources/gen/back.c 4306 +Got sources/f2c/putpcc.c 36792 +Got sources/f2c/put.c 9081 +Got sources/f2c/vax.c 7649 +Got sources/f2c/sysdep.c 6792 +Got sources/f2c/safstrcp.c 2884 +Got sources/f2c/readme 1831 +Got sources/f2c/tokdefs.h 1807 +Got sources/f2c/tokens 727 +Got sources/f2c/version.c 143 +Got sources/f2c/usignal.h 124 +Got sources/f2c/rm.bat 80 +Got sources/f2c/gram.c 79753 +Got sources/f2c/expr.c 55807 +Got sources/f2c/format.c 49696 +Got sources/f2c/output.c 38940 +Got sources/f2c/proc.c 33028 +Got sources/f2c/lex.c 29242 +Got sources/f2c/io.c 27451 +Got sources/f2c/defs.h 23461 +Got sources/f2c/formatd.c 23180 +Got sources/f2c/intr.c 19638 +Got sources/f2c/names.c 18381 +Got sources/f2c/misc.c 17876 +Got sources/f2c/exec.c 17697 +Got sources/f2c/pread.c 15807 +Got sources/f2c/main.c 15305 +Got sources/f2c/parsearg.c 13258 +Got sources/f2c/p1output.c 12088 +Got sources/f2c/init.c 10018 +Got sources/f2c/equiv.c 8503 +Got sources/f2c/nicepr.c 8497 +Got sources/f2c/data.c 8255 +Got sources/f2c/defines.h 8162 +Got sources/f2c/gram.dcl 8031 +Got sources/f2c/gram.hd 7531 +Got sources/f2c/f2c.1 5964 +Got sources/f2c/p1defs.h 5688 +Got sources/f2c/mem.c 4672 +Got sources/f2c/f2c.h 4093 +Got sources/f2c/cds.c 3919 +Got sources/f2c/error.c 3484 +Got sources/f2c/malloc.c 3370 +Got sources/f2c/gram.io 3274 +Got sources/f2c/gram.exp 3072 +Got sources/f2c/gram.exe 3067 +Got sources/f2c/output.h 2109 +Got sources/f2c/memset.c 1964 +Got sources/f2c/makefile 1870 +Got sources/f2c/makefile.txt 1870 +Got sources/f2c/makefile.bak 1870 +Got sources/f2c/pccdefs.h 1195 +Got sources/f2c/notice 1177 +Got sources/f2c/ftypes.h 941 +Got sources/f2c/parse.h 862 +Got sources/f2c/names.h 727 +Got sources/f2c/machdefs.h 659 +Got sources/f2c/iob.h 459 +Got sources/f2c/nicepr.h 412 +Got sources/f2c/format.h 300 +Got sources/f2c/link.lnk 229 +Got loglan96/loglan93/loglan.tar 163840 +Got loglan96/loglan93/instr.cc 11894 +Got loglan96/loglan93/instr.h 5504 +Got loglan96/loglan93/expr.cc 20426 +Got loglan96/loglan93/objects.h 4646 +Got loglan96/loglan93/objects.cc 5845 +Got loglan96/loglan93/syntax.y 40972 +Got loglan96/loglan93/expr.h 9372 +Got loglan96/loglan93/lex.l 24428 +Got loglan96/loglan93/makefile 1840 +Got loglan96/loglan93/symtable.h 3508 +Got loglan96/loglan93/tstsymbt.cc 1959 +Got loglan96/loglan93/test3.log 50 +Got loglan96/loglan93/tstobj.cc 862 +Got loglan96/loglan93/test.log 837 +Got loglan96/loglan93/tstexpr.cc 677 +Got loglan96/loglan93/symtable.cc 7209 +Got loglan96/loglan93/test4.log 38 +Got loglan96/loglan93/test2.log 59 +Got loglan96/loglan93/test1.log 71 +Got loglan96/loglan94/newgramr.doc 39647 +Got loglan96/loglan94/neweditr.log 4318 +Got loglan96/loglan95/planwork.doc 28417 +Got loglan96/loglan95/liste.doc 1848 +Got loglan96/loglan95/pv3.doc 2349 +Got loglan96/loglan95/library.doc 4027 +Got loglan96/loglan95/libmangr.doc 4083 +Got loglan96/loglan95/filesys.doc 2428 +Got loglan96/loglan95/grammar0.doc 32166 +Got loglan96/loglan95/newgram3.doc 47488 +Got loglan96/loglan95/propo1.doc 4419 +Got loglan96/loglan95/pv2.doc 10011 +Got loglan96/loglan95/pv1.doc 3372 +Got loglan96/loglan95/newgram2.doc 44002 +Got loglan96/loglan84.rs/readme 566 +Got loglan96/loglan84.rs/rsloglan.doc 146021 +Got loglan96/loglan84.rs/antek6.txt 111361 +Got loglan96/loglan84.rs/loginlog.txt 126932 +Got loglan96/loglan84.rs/antek4.txt 49087 +Got loglan96/loglan84.rs/antek3.txt 27563 +Got loglan96/loglan84.rs/antek2.txt 24156 +Got loglan96/lcode/readme 281 +Got loglan96/lcode/lcode 10354 +Got at_work/loglan96/index.html 790 +Got at_work/loglan96/index.html.bak 790 +Got at_work/loglan96/index.map 23 +Got at_work/loglan96/intro.gif 117569 +Got examples/examples/strassen.log 46434 +Got examples/examples/helpcor.log 62131 +Got examples/examples/p.log 32491 +Got examples/grazyna.xmp/belote.log 86360 +Got examples/grazyna.xmp/morp3d.log 87908 +Got examples/grazyna.xmp/morps.log 170790 +Got examples/grazyna.xmp/dominate.log 37905 +Got examples/grazyna.xmp/bus13.log 29550 +Got examples/grazyna.xmp/sort.log 12098 +Got examples/grazyna.xmp/convexh1.log 10218 +Got examples/grazyna.xmp/station.log 41691 +Got examples/grazyna.xmp/binda3.log 13827 +Got examples/grazyna.xmp/part.log 5367 +Got examples/grazyna.xmp/cub.log 19147 +Got examples/grazyna.xmp/pina.log 51927 +Got examples/grazyna.xmp/new.log 37043 +Got examples/pataud/new5.log 20732 +Got examples/pataud/new3.log 22058 +Got examples/pataud/new2.log 14921 +Got examples/pataud/new1.log 5881 +Got examples/pataud/multilvl.log 622 +Got examples/pataud/simula2.log 116904 +Got examples/pataud/mon.log 4045 +Got examples/pataud/test.dat 16 +Got examples/pataud/simula.log 78001 +Got examples/pataud/windows.log 27546 +Got examples/pataud/ville.dat 973 +Got examples/pataud/ville.log 9137 +Got examples/pataud/verspec.log 7583 +Got examples/pataud/verspecf.doc 10707 +Got examples/pataud/proc2.log 11727 +Got examples/test19/bibliog.bas 0 +Got examples/test19/bibliog.dta 0 +Got examples/test19/autor.idx 0 +Got examples/test19/nrpzycji.idx 0 +Got examples/test19/data.bas 2512 +Got examples/test19/test19.log 83228 +Got bin/readme 546 +Got bin/atari/loglan.ttp 237302 +Got bin/atari/intgem.prg 79502 +Got bin/atari/gen.ttp 39297 +Got bin/atari/atari.ps 112696 +Got bin/atari/atari.doc 11257 +Got bin/atari/atari.use 987 +Got bin/atari/atari.usr 11161 +Got bin/atari/atariusr.txt 8307 +Got bin/atari/ms.tos 9104 +Got bin/atari/desktop.inf 481 +Got bin/atari/me.ttp 76692 +Got bin/atari/emacs.rc 6796 +Got bin/l2c/readme 498 +Got bin/l2c/l2c1.exe 104360 +Got bin/l2c/l2c2.exe 114748 +Got bin/dos/drivers.grp/s3864_2m.grn 904 +Got bin/dos/drivers.grp/s3805_1m.grn 832 +Got bin/dos/drivers.grp/ati_16md.grn 979 +Got bin/dos/drivers.grp/vesa111.vdr 3046 +Got bin/dos/drivers.grp/oak.grn 499 +Got bin/dos/drivers.grp/atiultra.grn 1208 +Got bin/dos/drivers.grp/ati.grd 375 +Got bin/dos/drivers.grp/video7.grd 331 +Got bin/dos/drivers.grp/aheadb.grd 267 +Got bin/dos/drivers.grp/chips.grd 282 +Got bin/dos/drivers.grp/everex.grd 311 +Got bin/dos/drivers.grp/genoa.grd 285 +Got bin/dos/drivers.grp/paradise.grd 263 +Got bin/dos/drivers.grp/aheada.grd 287 +Got bin/dos/drivers.grp/cl5426.grn 549 +Got bin/dos/drivers.grp/wd90c3x.grn 624 +Got bin/dos/drivers.grp/wdvanila.grn 609 +Got bin/dos/drivers.grp/newss24x.grn 668 +Got bin/dos/drivers.grp/stealth.grn 617 +Got bin/dos/drivers.grp/tr8900.grn 578 +Got bin/dos/drivers.grp/vesa_s3.grn 735 +Got bin/dos/drivers.grp/viper.grn 749 +Got bin/dos/drivers.grp/realtek.grn 577 +Got bin/dos/drivers.grp/stdvga.grn 502 +Got bin/dos/drivers.grp/ativga.grn 565 +Got bin/dos/drivers.grp/cirrus54.grn 700 +Got bin/dos/drivers.grp/et3000.grn 530 +Got bin/dos/drivers.grp/acumos.grn 547 +Got bin/dos/drivers.grp/atigupro.grn 513 +Got bin/dos/drivers.grp/et4000.grn 884 +Got bin/dos/drivers.grp/ss24x.grn 1041 +Got bin/dos/drivers.grp/sparadis.grn 549 +Got bin/dos/286/dirinfo 279 +Got bin/dos/286/readme 619 +Got bin/dos/286/hgchint.exe 133290 +Got bin/dos/286/egahint.exe 134410 +Got bin/dos/286/egaint.exe 93444 +Got bin/dos/286/hgcint.exe 92340 +Got bin/dos/286/hgen.exe 51404 +Got bin/dos/286/gen.exe 48840 +Got bin/dos/286/loglan.exe 248828 +Got bin/dos/286/egahint.old 152057 +Got bin/dos/286/egaint.old 83883 +Got bin/dos/286/old/ne2lotek.exe 10064 +Got bin/dos/286/old/pkzip.exe 32880 +Got bin/dos/286/old/l2c1.exe 104360 +Got bin/dos/286/old/l2c2.exe 114748 +Got bin/dos/286/old/gen.exe 31402 +Got bin/dos/286/old/prep.exe 18644 +Got bin/dos/286/old/loglan.exe 248828 +Got bin/dos/286/old/hint.exe 150689 +Got bin/dos/286/old/int.exe 82779 +Got bin/dos/286/old/hgen.exe 32672 +Got bin/dos/286/cga/cg64int.exe 82587 +Got bin/dos/286/cga/cg32int.exe 82955 +Got bin/dos/286/cga/cg64hint.exe 150497 +Got bin/dos/286/cga/cgaint1.exe 101203 +Got bin/dos/386/readme 787 +Got bin/dos/386/cc.bat 266 +Got bin/dos/386/int.exe 149912 +Got bin/dos/386/gen.exe 69598 +Got bin/dos/386/loglan.exe 219928 +Got bin/dos/386/old1.log 2301 +Got bin/dos/386/dirinfo 71 +Got bin/dos/486/loglan.exe 225368 +Got bin/dos/486/readme 158 +Got bin/dos/486/logpp.exe 72704 +Got bin/dos/486/int.exe 150360 +Got bin/dos/486/cc.bat 308 +Got bin/dos/486/gen.exe 70174 +Got bin/dos/486/go32.exe 78666 +unlink /ftp/mirrors/aragorn.pb.bialystok.pl/pub/loglan/HTML/.in.index.html. +unlink /ftp/mirrors/aragorn.pb.bialystok.pl/pub/loglan/HTML/.in.index.html. failed: No such file or directory +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Thu Dec 5 02:39:15 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Fri Dec 6 02:57:32 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Sat Dec 7 01:58:35 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Sun Dec 8 02:22:37 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Mon Dec 9 02:06:24 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Mon Dec 9 23:11:39 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Thu Dec 12 02:37:46 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Sat Dec 14 11:14:35 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Sun Dec 15 00:35:25 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Sun Dec 15 23:57:12 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Mon Dec 16 23:32:41 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Wed Dec 18 01:03:48 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Wed Dec 18 23:37:27 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Fri Dec 20 02:23:16 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Sun Dec 22 02:44:08 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Mon Dec 23 00:01:53 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Tue Dec 24 00:56:29 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Wed Dec 25 00:05:35 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Thu Dec 26 01:26:19 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Fri Dec 27 01:56:13 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Sat Dec 28 00:26:15 MET 1996 +mirroring loglan (aragorn.pb.bialystok.pl:/pub/loglan) completed successfully @ Sat Dec 28 23:17:43 MET 1996 diff --git a/HTML/HomePage.gif b/HTML/HomePage.gif new file mode 100644 index 0000000..da78704 Binary files /dev/null and b/HTML/HomePage.gif differ diff --git a/HTML/MicroMan/Classes.htm b/HTML/MicroMan/Classes.htm new file mode 100644 index 0000000..099c7de --- /dev/null +++ b/HTML/MicroMan/Classes.htm @@ -0,0 +1,154 @@ + + + + + +Classes + + + + + + + +

+Loglan 82, A micro-manual of the programming language - +Basic constructs and facilities +

5) Classes

+
+ +

+Class is a facility which covers such programming constructs as +structured type, package, access type, data structure etc. To +begin with the presentation of this construct, let us consider +a structured type assembled from primitive ones: +

+ +

+The above class declaration has the attributes : dollars (real), +not_paid (boolean), and year,month,day (integer). Wherever class +bill is visibile one can declare variables of type bill: +

+var x,y,z: bill
+
+ +

+The values of variables x, y, z can be the addresses of objects +of class bill. These variables are called reference variables. +With reference variable one can create and operate the objects +of reference variable type. +

+An object of a class is created by the class generation statement +(new), and thereafter, its attributes are accessed through dot +notation. +

+ +

+If an object of class bill has been created (new bill) and its +address has been assigned to variable x (x:=new bill), then the +attributes of that object are accessible through dot notation +(remote access). The expression x.dollars gives , for instance, +the remote access to attribute dollars of the object referenced +by x. All attributes of class objects are initialized as usual. +For the above example the object referenced by x, after the execution +of the specified sequence of statements, has the following structure: +

+ +

+The object referenced by y and z has the following structure: +

+ +

+The value none is the default initial value of any reference variable +and denotes no object. A remote access to an attribute of none +raises a run time error. +

+Class may have also formal parameters (as procedures and functions). +Kinds and transmission modes of formal parameters are the same +as in the case of procedures. +

+Example: +

+ +

+Let, for instance, variables z1, z2, z3 be of type node. Then +the sequence of statements: +

+ +

+creates the structure: +

+ +

+where arrows denote the values of the reference variables. +

+Class may also have a sequence of statements (as any other unit). +That sequence can initialize the attributes of the class objects. +

+Example: +

+ +

+Attribute module is evaluated for any object generation of class +complex: +

+ +

+For the execution of a class generator, first a class object is +created, then the input parameters are transmitted , and finally, +the sequence of statements (if any) is performed. Return is made +with the execution of return statement or the final end of a unit. +Upon return the output parameters are transmitted. +

+Procedure object is automatically deallocated when return is made +to the caller. Class object is not deallocated , its address can +be assigned to a reference variable, and its attributes can be +thereafter accessed via this variable. +

+The classes presented so far had only variable attributes. In +general, class attributes may be also other syntactic entities, +such as constants, procedures, functions, classes etc. Classes +with procedure and function attributes provide a good facility +to define data structures. +

+Example: +

+A push_down memory of integers may be implemented in the following +way: +

+ +

+Assume that somewhere in a program reference variables of type +push_down are declared (of course, in place where push_down is +visibile): +

+ +

+Three different push_down memories may be now generated: +

+ +

+One can use these push_down memories as follows: +

+ +

+etc.


+ +

+ + + +


+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/Concurre.htm b/HTML/MicroMan/Concurre.htm new file mode 100644 index 0000000..0af7252 --- /dev/null +++ b/HTML/MicroMan/Concurre.htm @@ -0,0 +1,177 @@ + + + + + +Concurrent processes + + + + + + + +

+Loglan 82, A micro-manual of the programming language - +Basic constructs and facilities +

13) Concurrent processes +

+
+ +

+Loglan allows to create and execute objects-processes. They can +operate simultaneously on different computers linked into a LAN +network or a few processes can share one processor (its time-slices). +

+Process modules are different from the classes and coroutines +for, they use the keyword process. The syntax of process modules +is otherwise the same. In a process one can use a few more instructions: +resume (resume a process which is passive), stop - make the current +process passive, etc. +

+All processes (even those executed on the same computer) are implemented +as distributed, i.e. without any shared memory. This fact implies +some restrictions on how processes may be used. Not all restrictions +are enforced by the present compiler, so it is the programmer's +responsibility to respect them. For the details see the User's +Manual. +

+Semantics of the generator new is slightly modified when +applied to the processes. The first parameter of the first process +unit in the prefix sequence must be of type INTEGER. This parameter +denotes the node number of the computer on which this process +will be created. For a single computer operation this parameter +must be equal to 0. +

+Example: +

+ +

+COMMUNICATION MECHANISM +

+Processes may communicate and synchronize by a mechanism based +on rendez-vous. It will be referred to as "alien call" +in the following description. +

+An alien call is either: +

+ +

+Every process object has an enable mask. It is defined as a subset +of all procedures declared directly inside a process unit or any +unit from its prefix sequence (i.e. subset of all procedures that +may be alien-called). +

+A procedure is enabled in a process if it belongs to that process' +enable mask. A procedure is disabled if it does not belong to +the enable mask. +

+Immediately after generation of a process object its enable mask +is empty (all procedures are disabled). +

+Semantics of the alien call is different from the remote call +described in the report. Both the calling process and the process +in which the procedure is declared (i.e. the called process) are +involved in the alien call. This way the alien call may be used +as a synchronization mechanism. +

+The calling process passes the input parameters and waits for +the call to be completed. +

+The alien-called procedure is executed by the called process. +Execution of the procedure will not begin before certain conditions +are satisfied. First, the called process must not be suspended +in any way. The only exception is that it may be waiting during +the ACCEPT statement (see below). Second, the procedure must be +enabled in the called process. +

+When the above two conditions are met the called process is interrupted +and forced to execute the alien-called procedure (with parameters +passed by the calling process). +

+Upon entry to the alien-called procedure all procedures become +disabled in the called process. +

+Upon exit the enable mask of the called process is restored to +that from before the call (regardless of how it has been changed +during the execution of the procedure). The called process is +resumed at the point of the interruption. The execution of the +ACCEPT statement is ended if the called process was waiting during +the ACCEPT (see below). At last the calling process reads back +the output parameters and resumes its execution after the call +statement. +

+The process executing an alien-called procedure can easily be +interrupted by another alien call if the enable mask is changed. +

+There are some new language constructs associated with the alien +call mechanism. The following statements change the enable mask +of a process: +

+ +

+enables the procedures with identifiers p1, ..., pn. If there +are any processes waiting for an alien call of one of these procedures, +one of them is chosen and its request is processed. The scheduling +is done on a FIFO basis, so it is strongly fair. The statement: +

+ +

+disables the procedures with identifiers p1, ..., pn. +

+In addition a special form of the RETURN statement: +

+ +

+allows to enable the procedures p1, ..., pn and disable the procedures +q1,...,qn after the enable mask is restored on exit from the alien-called +procedure. It is legal only in the alien-called procedures (the +legality is not enforced by the compiler). +

+A called process may avoid busy waiting for an alien call by means +of the ACCEPT statement: +

+ +

+adds the procedures p1, ..., pn to the current mask, and waits +for an alien call of one of the currently enabled procedures. +After the procedure return the enable mask is restored to that +from before the ACCEPT statement. +

+Note that the ACCEPT statement alone (i.e. without any ENABLE/DISABLE +statements or options) provides a sufficient communication mechanism. +In this case the called process may execute the alien-called procedure +only during the ACCEPT statement (because otherwise all procedures +are disabled). It means that the enable mask may be forgotten +altogether and the alien call may be used as a pure totally synchronous +rendez-vous. Other constructs are introduced to make partially +asynchronous communication patterns possible. +

+Below find a complete listing of a simple example - monitors. +

+


+
+

+ + +


+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/Exceptio.htm b/HTML/MicroMan/Exceptio.htm new file mode 100644 index 0000000..f7686d1 --- /dev/null +++ b/HTML/MicroMan/Exceptio.htm @@ -0,0 +1,104 @@ + + + + + +Exception handling + + + + + + + +

+Loglan 82, A micro-manual of the programming language - +Basic constructs and facilities +

12) Exception handling +

+
+ +

+Exceptions are events that cause interruption of normal program +execution. One kind of exceptions are those which are raised as +a result of some run time errors. For instance, when an attempt +is made to access a killed object, when the result of numeric +operation does not lie within the range, when the dynamic storage +allocated to a program is exceeded etc. +

+Another kind of exceptions are those which are raised explicitly +by a user (with the execution of the raise statement). +

+The response to exceptions (one or more) is defined by an exception +handler. A handler may appear at the end of declarations of any +unit. The corresponding actions are defined as sequences of statements +preceded by keyword when and an exception identifier. +

+Example: +

+In procedure squareeq (p.3) we wish to include the case when a=0. +It may be treated as an exception (division by zero). +

+ +

+The handler declared in that procedure handles the only one exception +(division_by_zero). +

+When an exception is raised, the corresponding handler is searched +for, starting from the active object and going through return +traces. If there is no object containing the declaration of the +handler, then the program (or the corresponding process) is terminated. +Otherwise the control is transferred to the first found handler. +

+In our example the handler is declared within the unit itself, +so control is passed to a sequence: +

+ +

+Therefore, when b=/=0, the unique root of square equation will +be determined and the procedure will be normally terminated (terminate). +In general, terminate causes that all the objects are terminated, +starting from that one where the exception was raised and ending +on that one where the handler was found. Then the computation +is continued in a normal way. +

+In our example, when b=0, a new exception is raised by the user. +For this kind of exceptions , the exception itself should be declared +(because it is not predefined as a run time error). Its declaration +may have parameters which are transmitted to a handler. The exception +declaration need not be visible by the exception handler. However +the way the handler is searched for does not differ from the standard +one. Consider an example: +

+ +

+Exception Wrong_data may be raised wherever its declaration (signal +Wrong_data) is visible. When its handler is found the specified +sequence of actions is performed. In the example above different +handlers may be 0efined in inner units to the main block where +squereeq is called. +

+The case a=0 could be included, of course, in a normal way, i.e. +by a corresponding conditional statement occurring in the procedure +body. But the case a=0 was assumed to be exceptional (happens +scarcely). Thus the evaluation of condition a=0 would be mostly +unnecessary. As can be noticed thanks to exceptions the above +problem can be solved with the minimal waste of run time.


+ +

+ + +


+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/FormalTy.htm b/HTML/MicroMan/FormalTy.htm new file mode 100644 index 0000000..5406e63 --- /dev/null +++ b/HTML/MicroMan/FormalTy.htm @@ -0,0 +1,66 @@ + + + + + +Formal types + + + + + + + +

+Loglan 82, A micro-manual of the programming language - +Basic constructs and facilities +

9) Formal types

+
+ +

+Formal types serve for unit parametrization with respect to any +non-primitive type. +

+Example: +

+ +

+Procedure Gsort (the generalization of procedure sort from p.4) +has type parameter T. A corresponding actual parameter may be +an arbitrary non-primitive type. An actual parameter corresponding +to A should be an array of elements of the actual type T. Function +less should define the linear ordering on the domain T. +

+For instance, the array A of type bill (cf p.7) may be sorted +with respect to attribute dollars , if the function: +

+ +

+is used as an actual parameter: +

+ +

+If the user desires to sort A with respect to date, it is sufficient +to declare : +

+ +

+and to call: call Gsort(bill,A,earlier);


+ +


+ + +
+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/HomePage.htm b/HTML/MicroMan/HomePage.htm new file mode 100644 index 0000000..e77b9d7 --- /dev/null +++ b/HTML/MicroMan/HomePage.htm @@ -0,0 +1,25 @@ + + +Loglan Home Page + + + +

Welcome to the Loglan 82 Micro Manual.

+ +
+

Author : Antoni Kreczmar Institute of Informatics, Warsaw University - March 1990 +

Edited by : Andrzej Salwicki LITA, Pau - November 1990 +

HTML version : Karl-Stefan Lapère +


+ + + +
+ +
Last update 02/07/95 +

Comments, suggestions and critiques are welcome to : Andrzej.Salwicki@univ-pau.fr +

+

+ + + diff --git a/HTML/MicroMan/Introduc.htm b/HTML/MicroMan/Introduc.htm new file mode 100644 index 0000000..3744de2 --- /dev/null +++ b/HTML/MicroMan/Introduc.htm @@ -0,0 +1,98 @@ + + + + + +Introduction + + + + + + + +

+Loglan 82, A micro-manual of the programming language - +Basic constructs and facilities +

1) Introduction

+
+ +

+LOGLAN-82 is a universal programming language designed at the +Institute of Informatics, University of Warsaw. Its syntax is +patterned upon Pascal's. Its rich semantics includes the classical +constructs and facilities offered by the Algol-family programming +languages as well as more modern facilities, such as concurrency +and exception handling. +

+The basic constructs and facilities of the LOGLAN-82 programming +language include: +

+ +

+The language covers system programming, data processing, and numerical +computations. Its constructs represent the state-of-art and are +efficiently implementable. Large systems consisting of many cooperating +modules are easily decomposed and assembled, due to the class +concept and prefixing. +

+LOGLAN-82 constructs and facilities have appeared and evolved +simultaneously with the experiments on the first pilot compiler +(implemented on Mera-400 Polish minicomputer). The research on +LOGLAN-82 implementation engendered with new algorithms for static +semantics, context analysis, code generation, data structures +for storage management etc. +

+The LOGLAN-82 compiler provides a keen analysis of syntactic and +semantic errors at compilation as well as at run time. The object +code is very efficient with respect to time and space. The completeness +of error checking guarantees full security and ease of program +debugging.


+ +


+ + + +
+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/Prefixin.htm b/HTML/MicroMan/Prefixin.htm new file mode 100644 index 0000000..0c140af --- /dev/null +++ b/HTML/MicroMan/Prefixin.htm @@ -0,0 +1,237 @@ + + + + + +Prefixing + + + + + + + +

+Loglan 82, A micro-manual of the programming language - +Basic constructs and facilities +

8) Prefixing

+
+ +

+Classes and prefixing are ingenius inventions of Simula-67(cf +[1]). Unfortunately they were hardly ever known and, perhaps, +by this have not been introduced into many programming language +that gained certain popularity. Moreover, implementation constraints +of Simula-67 bind prefixing and classes workableness to such a +degree that both facilities cannot be used in all respects. We +hope that LOGLAN-82, adopting merits and rooting up deficiencies +of these constructs, will smooth their variations and vivify theirs +usefulness. +

+What is prefixing ? First of all it is a method for unit extending. +Consider the simplest example: +

+ +

+Assume the user desires to extend this class with new attributes. +Instead of writing a completely new class, he may enlarge the +existing one: +

+ +

+Class gas_bill is prefixed by class bill. This new declaration +may appear anywhere within the scope of declaration of class bill. +(In Simula-67 such a prefixing is forbidden in nested units.) +Class gas_bill has all the attributes of class bill and additionally +its own attributes (in this case the only one: cube_meters). The +generation statement of this class has the form: +

+ +

+where z is a reference variable of type gas_bill. Remote access +to the attributes of prefixed class is standard: +

+ +

+Consider now the example of a class with parameters. +

+Assume that in a program a class: +

+ +

+and its extension: +

+ +

+are declared. +

+Then for variable z of type id_card and variable t of type idf_card +the corresponding generation statement may be the following: +

+ +

+Thus the formal parameters of a class are concatenated with the +formal parameters of its prefix. +

+One can still extend class idf_card. For instance: +

+ +

+Prefixing allows to build up hierarchies of classes. Each one +hierarchy has a tree structure. A root of such a tree is a class +without prefix. One class is a successor of another class iff +the first is prefixed by the latter one. +

+Consider the prefix structure: +

+ +

+Class H has a prefix sequence A, B, E, F, H. Let a, b, ... , h +denote the corresponding unique attributes of classes A, B, ... +, H, respectively. The objects of these classes have the following +forms: +

+ +

+Let Ra, Rb,..., Rh denote reference variables of types A, B,..., +H, respectively. Then the following expressions are correct: +

+ +

+Variable Ra may designate the object of class B (or C,..., H), +i.e. the statement: +

+ +

+is legal. But then attribute b is not accessible through dot via +Ra, i.e. Ra.b is incorrect. This follows from insecurity of such +a remote access. In fact, variable Ra may point any object of +a class prefixed by A, in particular, Ra may point the object +of A itself, which has no attribute b. If Ra.b had been correct, +a compiler should have distiguish the cases Ra points to the object +of A or not. But this, of course, is undistinguishable at compilation +time. +

+To allow, however, the user's access to attribute b (after instruction +Ra:=new B), the instantaneous type modification is provided +within the language: +

+ +

+The correctness of this expression is checked at run time. If +Ra designates an object of B or prefixed ba B, the type of the +expression is B. Otherwise the expression is erroneous. Thus, +for instance, the expressions: +

+ +

+enable remote access to the attributes b, c, ... via Ra. +

+So far the question of attribute concatenation was merely discussed. +However the sequences of statements can be also concatenated. +

+Consider class B prefixed with class A. In the sequence of statements +of class A the keyword inner may occur anywhere, but only once. +The sequence of statements of class B consists of the sequence +of statements of class A with inner replaced by the sequence of +statements of class B. +

+ +

+In this case inner in class B is equivalent to the empty statement. +If class B prefixes another class, say C, then inner in B is replaced +by the sequence of statements of class C, and so on. If inner +does not occur explicitly, an implicit occurrence of inner before +the final end of a class is assumed. +

+Example +

+Let class complex be declared as usual: +

+ +

+and assume one desires to declare a class mcomplex with the additional +attribute module. In order the generation of class mcomplex define +the value of attribute module, one can declare a class: +

+ +

+Class mcomplex may be still extended: +

+ +

+For these declarations each generation of class mcomplex defines +the value of attribute module, each generation of class pcomplex +defines the values of attributes module and alfa. +

+For reference variables z1, z2 z3 of type complex, the following +sequence of statements illustrates the presented constructs: +

+ +

+Example: +

+Binary search tree (Bst) is a binary tree where for each node +x the nodes in the left subtree are less than x, the nodes in +the right subtree are greater than x. It is the well-known exercise +to program the algorithms for the following operations on Bst: +

+member(x) = true iff x belongs to Bst +

+insert(x), enlarge Bst with x, if x does not yet belong to Bst +

+We define both these operations in a class: +

+ +

+In the example the common actions of member and insert are programmed +in class help. Then it suffices to use class help as a prefix +of function member and procedure insert, instead of redundant +occurrences of the corresponding sequence of statements in both +units. +

+Class Bst may be applied as follows: +

+ +

+As shown in the declaration of Bst, class may prefix not only +other classes but also procedures and functions. Class may prefix +blocks as well. +

+Example: +

+Let class push_down (p. 5) prefix a block: +

+ +

+In the above block prefixed with class push_down one can use pop +and push as local attributes. (They are local since the block +is embedded in the prefix push down.) +

+Example: +

+ +

+In place where classes push_down and Bst are visible together +a block prefixed with Bst may be nested in a block prefixed with +push_down (or vice versa). In the inner block both data structures +are directly accessible. Note that this construct is illegal in +Simula 67.


+ +


+ + +
+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/Procedur.htm b/HTML/MicroMan/Procedur.htm new file mode 100644 index 0000000..b03aef6 --- /dev/null +++ b/HTML/MicroMan/Procedur.htm @@ -0,0 +1,170 @@ + + + + + +Procedures and functions + + + + + + + +

+Loglan 82, A micro-manual of the programming language - +Basic constructs and facilities +

4) Procedures and +functions

+
+ +

+Procedures and functions are well-known kinds of units. Their +syntax is modelled on Pascal's, though with some slight modifications. +Procedure (function) declaration consists of a specification part +and a body. +

+Example: +

+ +

+Procedure or function specification begins with its identifier +preceded by the keyword unit. (The same syntax concerns any other +module named unit.) Then follows its kind declaration, its formal +parameters (if any), and the type of the returned value (only +for functions). A body consists of declaration lists for local +entities and a sequence of statements. The keyword begin +commences the sequence of statements, and is omitted, if this +sequence is empty. The value returned by a function equals to +the most recent value of the standard variable "result", +implicitly declared in any function. This variable can be used +as a local auxiliary variable as well. +

+Example: +

+ +

+The optional identifier at the end of a unit must repeat the identifier +of a unit. It is suggested that the compilers check the order +of unit nesting, so these optional occurrences of identifiers +would facilitate program debugging. +

+All the local variables of a unit are initialized (real with 0.0, +integer with 0, boolean with false etc.). Thus , for instance, +the value of function Newton is 0 for m&gtn, since "result" +is also initialized, as any other local variable. +

+The return statement (return) completes the execution of a procedure +(function) body,i.e. return is made to the caller. If return does +not appear explicitly, return is made with the execution of the +final end of a unit. Upon return to the caller the procedure (function) +object is deallocated. +

+Functions are invoked in expressions with the corresponding list +of actual parameters. Procedures are invoked by call statement +(also with the corresponding list of actual parameters). +

+Example: +

+ +

+Formal parameters are of four categories: variable parameters, +procedure parameters, function parameters and type parameters +(cf p.8). Variable parameters are considered local variables to +the unit. A variable parameter has one of three transmission modes: +input, output or inout. If no mode is explicitly given the input +mode is assumed. For instance in the unit declaration: +

+ +

+x,y,b are input parameters , c,i are output parameters , and j +is inout parameter. +

+Input parameter acts as a local variable whose value is initialized +by the value of the corresponding actual parameter. Output parameter +acts as a local variable initialized in the standard manner (real +with 0.0, integer with 0, boolean with false etc.). Upon return +its value is assigned to the corresponding actual parameter, in +which case it must be a variable. However the address of such +an actual parameter is determined upon entry to the body. Inout +parameter acts as an input parameter and output parameter together. +

+Example: +

+ +

+A procedure call to the above unit may be the following: +

+ +

+where g,h,gi,hi are real variables. +

+No restriction is imposed on the order of declarations. In particular, +recursive procedures and functions can be declared without additional +announcements (in contrast to Pascal). +

+Example: +

+For two recursive sequences defined as: +

+a(n)=b(n-1)+n+2 n>0 +

+b(n)=a(n-1)+(n-1)*n n>0 +

+a(0)=b(0)=0 +

+one can declare two functions: +

+ +

+and invoke them: +

+k:=a(100)*b(50)+a(15); +

+Functions and procedures can be formal parameters as well. +

+Example: +

+ +

+In the above declaration, after the input variable parameters +a,b,eps and the output variable parameter x, a function parameter +f appears. Note that its specification part is complete. Thus +the check of actual-formal parameter compatibility is possible +at compilation time. Making use of this syntactic facility is +not possible in general, if a formal procedure (function) is again +a formal parameter of a formal procedure (function). The second +degree of formal procedures (functions) nesting is rather scarce, +but LOGLAN-82 admits such a construct. Then formal procedure (function) +has no specification part and the full check of actual-formal +parameter compatibility is left to be done at run time. +

+Example: +

+ +

+Procedure G is a first degree parameter, therefore it occurs with +complete specification part. Procedure H is a second degree parameter +and has no specification part. In this case a procedure call can +be strongly recursive: +

+


+ +

+ + + +


+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/Programm.htm b/HTML/MicroMan/Programm.htm new file mode 100644 index 0000000..ea2b042 --- /dev/null +++ b/HTML/MicroMan/Programm.htm @@ -0,0 +1,111 @@ + + + + + +Programmed deallocation + + + + + + + +

Loglan 82, A micro-manual of the programming language +- Basic constructs and facilities

+ +

11) Programmed deallocation +

+
+ +

+The classical methods implemented to deallocate class objects +are based on reference counters or garbage collection. Sometimes +the both methods may be combined. A reference counter is a system +attribute holding the number of references pointing to the given +object. Hence any change of the value of a reference variable +X is followed by a corresponding increase or decrease of the value +of its reference counter. When the reference counter becomes equal +0, the object can be deallocated. +

+The deallocation of class objects may also occur during the process +of garbage collection. During this process all unreferenced objects +are found and removed (while memory may be compactified). In order +to keep the garbage collector able to collect all the garbage, +the user should clear all reference variables , i.e. set to None, +whenever possible. This system has many disadvantages. First of +all, the programmer is forced to clear all reference variables, +even those which are of auxiliary character. Moreover, garbage +collector is a very expensive mechanism and thus it can be used +only in emergency cases. +

+In LOGLAN a dual operation to the object generator, the so-called +object deallocator is provided. Its syntactic form is as follows: +

+ +

+where X is a reference expression. If the value of X points to +no object (none) then kill(X) is equivalent to an empty statement. +If the value of X points to an object O, then after the execution +of kill(X), the object O is deallocated. Moreover all reference +variables which pointed to O are set to none. This deallocator +provides full security, i.e. the attempt to access the +deallocated object O is checked and results in a run-time error. +

+For example: +

+ +

+causes the same run-time error as: +

+ +

+The system of storage management is arranged in such a way that +the frames of killed objects may be immediately reused without +the necessity of calling the garbage collector, i.e. the relocation +is performed automatically. There is nothing for it but to remember +not to use remote access to a killed object. (Note that the same +problem appears when remote access X.W is used and X=none). +

+Example: +

+Below a practical example of the programmed deallocation is presented. +Consider class Bst (p.7). Let us define a procedure that deallocates +the whole tree and is called with the termination of the class +Bst. +

+ +

+Bst may be applied as a prefix: +

+ +

+and automatically will cause the deallocation of the whole tree +after return to call kill_all(root) from the prefixed block. +

+To use properly this structure by remote accessing one must call +kill_all by himself: +

+ +

+Finally note that deallocator kill enables deallocation of array +objects, and suspended coroutines and processes as well (cf p.13). +


+ +


+ + +
+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/Protecti.htm b/HTML/MicroMan/Protecti.htm new file mode 100644 index 0000000..a8a993e --- /dev/null +++ b/HTML/MicroMan/Protecti.htm @@ -0,0 +1,75 @@ + + + + + +Protection techniques + + + + + + + +

Loglan 82, A micro-manual of the programming language +- Basic constructs and facilities

+ +

10) Protection techniques +

+
+ +

+Protection techniques ease secure programming. If a program is +large, uses some system classes, is designed by a team etc., this +is important (and non-trivial) to impose some restrictions on +access to non-local attributes. +

+Let us consider a data structure declared as a class. Some of +its attributes should be accessible for the class users, the others +should not. For instance, in class Bst (p.7) the attributes member +and insert are to be accessible. On the other hand the attributes +root, node and help should not be accessible, even for a meddlesome +user. An improper use of them may jeopardize the data structure +invariants. +

+To forbid the access to some class attributes the three following +protection mechanisms are provided: close, hidden +and taken. +

+The protection close defined in a class forbids remote access +to the specified attributes. For example, consider the class declaration: +

+ +

+Remote access to the attributes x,y,z from outside of A is forbidden. +

+The protection hidden (with akin syntax) does not allow to use +the specified attributes form outside of A neither by the remote +access nor in the units prefixed by A. The only way to use a hidden +attribute is to use it within the body of class A. +

+Protection taken defines these attributes derived from prefix, +which the user wishes to use in the prefixed unit. Consider a +unit B prefixed by a class A. In unit B one may specify the attributes +of A which are used in B. This protects the user against an unconscious +use of an attribute of class A in unit B (because of identifier +conflict). When taken list does not occur, then by default, all +non-hidden attributes of class A are accessible in unit B.


+ +


+ + +
+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/Referenc.htm b/HTML/MicroMan/Referenc.htm new file mode 100644 index 0000000..1ea44ba --- /dev/null +++ b/HTML/MicroMan/Referenc.htm @@ -0,0 +1,60 @@ + + + + + +References + + + + + + + +

Loglan 82, A micro-manual of the programming language +- Basic constructs and facilities

+ +

14) References

+
+ +

+Report on the Loglan 82 programming Language Bartol, Warszawa-Lodz, +PWN, 1984 +

+Simula 67 Common Base Language O.-J. Dahl, B. Myhrhaug, +K. Nygaard, Norwegian Computing Center, Oslo, 1970 +

+Monitors, an operating system structuring concept Hoare +C.A.R., CACM, vol.17,N.10, October 1974, pp.549-57 +

+Loglan'82 User's guide, Institute of Informatics, University +of Warsaw 1983-1988, LITA, Université de Pau et +des pays de l'Adour, 1993 +

+Loglan'88 - Report on the Programming Language A.Kreczmar, +A.Salwicki, M. Warpechowski, , +

+Lecture Notes on Computer Science vol. 414, Springer +Vlg, 1990, ISBN 3-540-52325-1 +

+LOGLAN, Wydawnictwa Naukowo-Techniczne, A.Szalas, J.Warpechowska, +Warszawa, 1991 ISBN 82-204-1295-1 (if you can read polish) +


+ +

+ + +


+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/TableOfC.htm b/HTML/MicroMan/TableOfC.htm new file mode 100644 index 0000000..77a40fb --- /dev/null +++ b/HTML/MicroMan/TableOfC.htm @@ -0,0 +1,55 @@ + + + + + +Table of contents + + + + + + + +

+Loglan 82, A micro-manual of the programming language - +Basic constructs and facilities +

Table of contents +

+
+ +
    +
  1. Introduction +
  2. Compound statements +
  3. Modularity +
  4. Procedures and functions +
  5. Classes +
  6. Adjustable arrays +
  7. Coroutines and semicoroutines +
  8. Prefixing +
  9. Formal types +
  10. Protection techniques +
  11. Programmed deallocation +
  12. Exception handling +
  13. Concurrent processes +
  14. References +
+
+
+

+ + +


+
+
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/adjustab.htm b/HTML/MicroMan/adjustab.htm new file mode 100644 index 0000000..f1a8c92 --- /dev/null +++ b/HTML/MicroMan/adjustab.htm @@ -0,0 +1,110 @@ + + + + + +Adjustable arrays + + + + + + + +

Loglan 82, A micro-manual of the programming language +- Basic constructs and facilities

+ +

6) Adjustable arrays +

+
+ +

+In LOGLAN-82 arrays are adjustable at run time. They may be treated +as objects of specified standard type with index instead of identifier +selecting an attribute. An adjustable array should be declare +somewhere among the lists of declarations and then may be generated +in the sequence of statements. +

+Example: +

+ +

+A variable A is an array variable. Its value should be the reference +to an integer array, i.e. a composite object consisting of integer +components each one defined by an integer index. +

+Array generation statement: +

+ +

+allocates a one-dimensional integer array with the index bounds +1,n , and assigns its address to variable A. +

+The figure below illustrates this situation: +

+ +

+A general case of array generation statement has the form: +

+ +

+where lower and upper are arithmetic expressions which define +the range of the array index. +

+Example: +

+Two-dimensional array declaration : +

+ +

+and generation: +

+ +

+create the structure: +

+ +

+ +

+Array A is the square array n by n. Each element A(i) , 1<=i<=n +contains the address of row A(i,j), 1<=j<=n. Array B is +the lower-triangular array. Each element B(i), 1<=i<=n, +contains the address of row B(i,j), 1<=j<=i. Thus an assignment +statement A(n,n):=B(n,n) transmits real value B(n,n) to real variable +A(n,n). Assignment B(1):=A(1) transmits the address of the first +row of A to variable B(1). Finally assignment B(1):=copy (A(1)) +creates a copy of the first row of A and assigns its address to +B(1). +

+Upper and lower bounds of an adjustable array A are determined +by standard operators lower(A) and upper(A). +

+Example: +

+ +

+If an array variable A refers to no array its value is equal none +(the standard default value of any array variable). An attempt +to access an array element (e.g. A(i)) or a bound (e.g. lower(A)), +where A is none, raises a run time error.


+ +

+


+ + + +
+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/compound.htm b/HTML/MicroMan/compound.htm new file mode 100644 index 0000000..cb9ee77 --- /dev/null +++ b/HTML/MicroMan/compound.htm @@ -0,0 +1,217 @@ + + + + + +Compound Statements + + + + + + + +

Loglan 82, A micro-manual of the programming language +- Basic constructs and facilities

+ +

2) Compound Statements +

+
+ +

+Compound statements in LOGLAN-82 are built up from simple statements +(like assignment statement e.g. x:=y+0.5, call statement e.g. +call P(7,x+5) etc.) by means of conditional, iteration and case +statements. +

+The syntax of conditional statement is as follows: +

+ +

+where "else part" may be omitted: +

+ +

+The semantics of conditional statement is standard. The keyword +fi allows to nest conditional statements without appearence +of "dangling else" ambiguity. +

+Example: +

+ +

+The statements in a sequence of statements are separated with +semicolons (semicolon may end a sequence , and then, the last +statement in the sequence is the empty statement). +

+The short circuit control forms are realized in LOGLAN-82 by the +conditional statements with orif (or andif) list. +A conditional statement with orif list has the form: +

+ +

+and corresponds somehow to a conditional statement: +

+ +

+The above conditional statement (without orif list) selects for +execution one of two sequences of statements, depending on the +truth value of the boolean expression: +

+ +

+which is always evaluated till the end. For the execution of the +conditional statement with orif list the specified conditons +wb1,...,wbk are evaluated in succession, until the first one evaluates +to true. Then the rest of the sequence wb1,...,wbk is abandoned +and "then part" is executed. If none of the conditions +wb1,...,wbk evaluates to true "else part" is +executed (if any). +

+Conditional statements with orif list facilitate to program +those conditions, which evaluation to the end may raise a run-time +error. +

+Example: +

+The execution of the statement: +

+ +

+where the value of i is greater than n, and A is an array with +upper bound n, will raise the run-time error. Then the user can +write: +

+ +

+what allows to avoid this run-time error and probably agrees with +his intension. +

+Conditional statement with andif list has the form: +

+ +

+For the execution of this kind of statements, the conditions wb1,...,wbk +are evaluated in succession, until the first one evaluates to +false; then "else part" (if any) is executed. +Otherwise "then part" is executed. +

+Iteration statement in LOGLAN-82 has the form: +

+ +

+An iteration statement specifies repeated execution of the sequence +of statements and terminates with the execution of the simple +statement exit +

+Example: +

+ +

+If two iteration statements are nested, then double exit +in the inner one terminates both of them. +

+Example: +

+ +

+In the example above simultaneous assignment statements are illustrated +(e.g. r,x:=0) and comments, which begin with a left parenthesis +immediately followed by an asterisk and end with an asterisk immediately +followed by a right parenthesis. +

+Triple exit terminates three nested iteration statements, +four exit terminates four nested iteration statements etc. +

+The iteration statement with while condition: +

+ +

+is equivalent to: +

+ +

+The iteration statements with controlled variables (for statements) +have the forms: +

+ +

+or +

+ +

+The type of the controlled variable j must be discrete. The value +of this variable in the case of the for statement with to is increased, +and in the case of the for statement with downto +is decreased. The discrete range begins with the value of wa1 +and changes with the step equal to the value of wa2. The execution +of the for statement with to terminates when the value +of j for the first time becomes greater than the value of wa3 +(with downto when the value of j for the first time becomes less +than the value of wa3). After the for statement termination the +value of its controlled variable is determined and equal to the +first value exceeding the specified discrete range. +

+The values of expressions wa1, wa2 and wa3 are evaluated once, +upon entry to the iteration statement. Default value of wa2 is +equal 1 (when the keyword step and expression wa2 are omitted). +

+For or while statements may be combined with exit +statement. +

+Example: +

+ +

+The above iteration statement terminates either for the least +j, 1<=j<=n, such that x=A(j) or for j=n+1 when x=/=A(j), +j=1,...,n. +

+To enhance the user's comfort, the simple statement repeat +is provided. It may appear in an iteration statement and causes +the current iteration to be finished and the next one to be continued +(something like jump to CONTINUE in Fortran's DO statements). +

+Example: +

+ +

+Just as exit, repeat may appear in for statement +or while statement. Then the next iteration begins with +either the evaluation of a new value of the controlled variable +(for statement) or with the evaluation of the condition +(while statement). +

+Case statement in LOGLAN-82 has the form: +

+ +

+where WA is an expression , L1,...,Lk are constants and I1,..., +Ik,I are sequences of statements. +

+A case statement selects for execution a sequence of statements +Ij, 1<=j<=k, where the value of WA equals Lj. The choice +otherwise covers all values (possibly none) not given in +the previous choices. The execution of a case statement +chooses one and only one alternative (since the choices are to +be exhaustive and mutually exclusive).


+ +

+


+ + + +
+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/coroutin.htm b/HTML/MicroMan/coroutin.htm new file mode 100644 index 0000000..34e023e --- /dev/null +++ b/HTML/MicroMan/coroutin.htm @@ -0,0 +1,92 @@ + + + + + +Coroutines and semicoroutines + + + + + + + +

Loglan 82, A micro-manual of the programming language +- Basic constructs and facilities

+ +

7) Coroutines and +semicoroutines

+
+ +

+Coroutine is a generalization of class. A coroutine object is +an object such that the execution of its sequence of statements +can be suspended and reactivated in a programmed manner. Consider +first a simple class with a sequence of statements such that after +return some non-executed statements remain. The generation of +its object terminates with the execution of return statement, +although the object can be later reactivated. If such a class +is declared as a coroutine, then its objects may be reactivated. +This can be realized by an attach statement: +

+attach(X)
+
+ +

+where X is a reference variable designating the activating coroutine +object. +

+In general, since the moment of generation a coroutine object +is either active or suspended. Any reactivation of a suspended +coroutine object X (by attach(X)) causes the active coroutine +object to be suspended and continues the execution of X from the +statement following the last executed one. +

+Main program is also a coroutine. It is accessed through the standard +variable main and may be reactivated (if suspended) by the statement +attach(main). +

+Example: +

+In the example below the cooperation of two coroutines is presented. +One reads the real values from an input device, another prints +these values in columns on a line-printer, n numbers in a line. +The input stream ends with 0. +

+ +

+Then +

+ +

+In the example below the application of detach statement is illustrated. +

+Example: +

+ +

+Coroutines play the substantial role in process simulation. Class +Simulation provided in Simula-67 makes use of coroutines at most +degree. LOGLAN-82 provides for easy simulation as well. The LOGLAN-82 +class Simulation is implemented on a heap what gives lg(n) time +cost (in contrast with O(n) cost of the original implementation). +It covers also various simulation problems of large size and degree +of complexity.


+
+

+ + +


+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/gifs/HomePage.gif b/HTML/MicroMan/gifs/HomePage.gif new file mode 100644 index 0000000..da78704 Binary files /dev/null and b/HTML/MicroMan/gifs/HomePage.gif differ diff --git a/HTML/MicroMan/gifs/NextPage.gif b/HTML/MicroMan/gifs/NextPage.gif new file mode 100644 index 0000000..4f510e0 Binary files /dev/null and b/HTML/MicroMan/gifs/NextPage.gif differ diff --git a/HTML/MicroMan/gifs/PrevPage.gif b/HTML/MicroMan/gifs/PrevPage.gif new file mode 100644 index 0000000..5296801 Binary files /dev/null and b/HTML/MicroMan/gifs/PrevPage.gif differ diff --git a/HTML/MicroMan/gifs/aa01.gif b/HTML/MicroMan/gifs/aa01.gif new file mode 100644 index 0000000..e734c93 Binary files /dev/null and b/HTML/MicroMan/gifs/aa01.gif differ diff --git a/HTML/MicroMan/gifs/aa02.gif b/HTML/MicroMan/gifs/aa02.gif new file mode 100644 index 0000000..988a7f8 Binary files /dev/null and b/HTML/MicroMan/gifs/aa02.gif differ diff --git a/HTML/MicroMan/gifs/aa03.gif b/HTML/MicroMan/gifs/aa03.gif new file mode 100644 index 0000000..7014e29 Binary files /dev/null and b/HTML/MicroMan/gifs/aa03.gif differ diff --git a/HTML/MicroMan/gifs/aa04.gif b/HTML/MicroMan/gifs/aa04.gif new file mode 100644 index 0000000..0129f21 Binary files /dev/null and b/HTML/MicroMan/gifs/aa04.gif differ diff --git a/HTML/MicroMan/gifs/aa05.gif b/HTML/MicroMan/gifs/aa05.gif new file mode 100644 index 0000000..72c515d Binary files /dev/null and b/HTML/MicroMan/gifs/aa05.gif differ diff --git a/HTML/MicroMan/gifs/aa06.gif b/HTML/MicroMan/gifs/aa06.gif new file mode 100644 index 0000000..bc6c4de Binary files /dev/null and b/HTML/MicroMan/gifs/aa06.gif differ diff --git a/HTML/MicroMan/gifs/aa07.gif b/HTML/MicroMan/gifs/aa07.gif new file mode 100644 index 0000000..2826214 Binary files /dev/null and b/HTML/MicroMan/gifs/aa07.gif differ diff --git a/HTML/MicroMan/gifs/cl01.gif b/HTML/MicroMan/gifs/cl01.gif new file mode 100644 index 0000000..443b798 Binary files /dev/null and b/HTML/MicroMan/gifs/cl01.gif differ diff --git a/HTML/MicroMan/gifs/cl02.gif b/HTML/MicroMan/gifs/cl02.gif new file mode 100644 index 0000000..45fa3ca Binary files /dev/null and b/HTML/MicroMan/gifs/cl02.gif differ diff --git a/HTML/MicroMan/gifs/cl03.gif b/HTML/MicroMan/gifs/cl03.gif new file mode 100644 index 0000000..9be00ce Binary files /dev/null and b/HTML/MicroMan/gifs/cl03.gif differ diff --git a/HTML/MicroMan/gifs/cl04.gif b/HTML/MicroMan/gifs/cl04.gif new file mode 100644 index 0000000..0794c54 Binary files /dev/null and b/HTML/MicroMan/gifs/cl04.gif differ diff --git a/HTML/MicroMan/gifs/cl05.gif b/HTML/MicroMan/gifs/cl05.gif new file mode 100644 index 0000000..4b3ae5c Binary files /dev/null and b/HTML/MicroMan/gifs/cl05.gif differ diff --git a/HTML/MicroMan/gifs/cl06.gif b/HTML/MicroMan/gifs/cl06.gif new file mode 100644 index 0000000..7475f8e Binary files /dev/null and b/HTML/MicroMan/gifs/cl06.gif differ diff --git a/HTML/MicroMan/gifs/cl07.gif b/HTML/MicroMan/gifs/cl07.gif new file mode 100644 index 0000000..92048c1 Binary files /dev/null and b/HTML/MicroMan/gifs/cl07.gif differ diff --git a/HTML/MicroMan/gifs/cl08.gif b/HTML/MicroMan/gifs/cl08.gif new file mode 100644 index 0000000..58884a0 Binary files /dev/null and b/HTML/MicroMan/gifs/cl08.gif differ diff --git a/HTML/MicroMan/gifs/cl09.gif b/HTML/MicroMan/gifs/cl09.gif new file mode 100644 index 0000000..356945c Binary files /dev/null and b/HTML/MicroMan/gifs/cl09.gif differ diff --git a/HTML/MicroMan/gifs/cl10.gif b/HTML/MicroMan/gifs/cl10.gif new file mode 100644 index 0000000..476c1c1 Binary files /dev/null and b/HTML/MicroMan/gifs/cl10.gif differ diff --git a/HTML/MicroMan/gifs/cl11.gif b/HTML/MicroMan/gifs/cl11.gif new file mode 100644 index 0000000..1930c53 Binary files /dev/null and b/HTML/MicroMan/gifs/cl11.gif differ diff --git a/HTML/MicroMan/gifs/co01.gif b/HTML/MicroMan/gifs/co01.gif new file mode 100644 index 0000000..f257a29 Binary files /dev/null and b/HTML/MicroMan/gifs/co01.gif differ diff --git a/HTML/MicroMan/gifs/co02.gif b/HTML/MicroMan/gifs/co02.gif new file mode 100644 index 0000000..b2fb3b7 Binary files /dev/null and b/HTML/MicroMan/gifs/co02.gif differ diff --git a/HTML/MicroMan/gifs/co03.gif b/HTML/MicroMan/gifs/co03.gif new file mode 100644 index 0000000..e543bc1 Binary files /dev/null and b/HTML/MicroMan/gifs/co03.gif differ diff --git a/HTML/MicroMan/gifs/co04.gif b/HTML/MicroMan/gifs/co04.gif new file mode 100644 index 0000000..0eb16dc Binary files /dev/null and b/HTML/MicroMan/gifs/co04.gif differ diff --git a/HTML/MicroMan/gifs/cp01.gif b/HTML/MicroMan/gifs/cp01.gif new file mode 100644 index 0000000..0da6b34 Binary files /dev/null and b/HTML/MicroMan/gifs/cp01.gif differ diff --git a/HTML/MicroMan/gifs/cp02.gif b/HTML/MicroMan/gifs/cp02.gif new file mode 100644 index 0000000..d1fd5d6 Binary files /dev/null and b/HTML/MicroMan/gifs/cp02.gif differ diff --git a/HTML/MicroMan/gifs/cp03.gif b/HTML/MicroMan/gifs/cp03.gif new file mode 100644 index 0000000..38f88c1 Binary files /dev/null and b/HTML/MicroMan/gifs/cp03.gif differ diff --git a/HTML/MicroMan/gifs/cp04.gif b/HTML/MicroMan/gifs/cp04.gif new file mode 100644 index 0000000..e54fc59 Binary files /dev/null and b/HTML/MicroMan/gifs/cp04.gif differ diff --git a/HTML/MicroMan/gifs/cp05.gif b/HTML/MicroMan/gifs/cp05.gif new file mode 100644 index 0000000..6899c50 Binary files /dev/null and b/HTML/MicroMan/gifs/cp05.gif differ diff --git a/HTML/MicroMan/gifs/cp06.gif b/HTML/MicroMan/gifs/cp06.gif new file mode 100644 index 0000000..f66c03c Binary files /dev/null and b/HTML/MicroMan/gifs/cp06.gif differ diff --git a/HTML/MicroMan/gifs/cs01.gif b/HTML/MicroMan/gifs/cs01.gif new file mode 100644 index 0000000..40a8b2b Binary files /dev/null and b/HTML/MicroMan/gifs/cs01.gif differ diff --git a/HTML/MicroMan/gifs/cs02.gif b/HTML/MicroMan/gifs/cs02.gif new file mode 100644 index 0000000..c15648b Binary files /dev/null and b/HTML/MicroMan/gifs/cs02.gif differ diff --git a/HTML/MicroMan/gifs/cs03.gif b/HTML/MicroMan/gifs/cs03.gif new file mode 100644 index 0000000..fcf5cb8 Binary files /dev/null and b/HTML/MicroMan/gifs/cs03.gif differ diff --git a/HTML/MicroMan/gifs/cs04.gif b/HTML/MicroMan/gifs/cs04.gif new file mode 100644 index 0000000..1564678 Binary files /dev/null and b/HTML/MicroMan/gifs/cs04.gif differ diff --git a/HTML/MicroMan/gifs/cs05.gif b/HTML/MicroMan/gifs/cs05.gif new file mode 100644 index 0000000..59dac9d Binary files /dev/null and b/HTML/MicroMan/gifs/cs05.gif differ diff --git a/HTML/MicroMan/gifs/cs06.gif b/HTML/MicroMan/gifs/cs06.gif new file mode 100644 index 0000000..e9772cf Binary files /dev/null and b/HTML/MicroMan/gifs/cs06.gif differ diff --git a/HTML/MicroMan/gifs/cs07.gif b/HTML/MicroMan/gifs/cs07.gif new file mode 100644 index 0000000..26f4105 Binary files /dev/null and b/HTML/MicroMan/gifs/cs07.gif differ diff --git a/HTML/MicroMan/gifs/cs08.gif b/HTML/MicroMan/gifs/cs08.gif new file mode 100644 index 0000000..6a5a02e Binary files /dev/null and b/HTML/MicroMan/gifs/cs08.gif differ diff --git a/HTML/MicroMan/gifs/cs09.gif b/HTML/MicroMan/gifs/cs09.gif new file mode 100644 index 0000000..0efc5e4 Binary files /dev/null and b/HTML/MicroMan/gifs/cs09.gif differ diff --git a/HTML/MicroMan/gifs/cs10.gif b/HTML/MicroMan/gifs/cs10.gif new file mode 100644 index 0000000..504a6c1 Binary files /dev/null and b/HTML/MicroMan/gifs/cs10.gif differ diff --git a/HTML/MicroMan/gifs/cs11.gif b/HTML/MicroMan/gifs/cs11.gif new file mode 100644 index 0000000..8c1ee16 Binary files /dev/null and b/HTML/MicroMan/gifs/cs11.gif differ diff --git a/HTML/MicroMan/gifs/cs12.gif b/HTML/MicroMan/gifs/cs12.gif new file mode 100644 index 0000000..acf7e32 Binary files /dev/null and b/HTML/MicroMan/gifs/cs12.gif differ diff --git a/HTML/MicroMan/gifs/cs13.gif b/HTML/MicroMan/gifs/cs13.gif new file mode 100644 index 0000000..46b7b28 Binary files /dev/null and b/HTML/MicroMan/gifs/cs13.gif differ diff --git a/HTML/MicroMan/gifs/cs14.gif b/HTML/MicroMan/gifs/cs14.gif new file mode 100644 index 0000000..1111bbe Binary files /dev/null and b/HTML/MicroMan/gifs/cs14.gif differ diff --git a/HTML/MicroMan/gifs/cs15.gif b/HTML/MicroMan/gifs/cs15.gif new file mode 100644 index 0000000..c213e32 Binary files /dev/null and b/HTML/MicroMan/gifs/cs15.gif differ diff --git a/HTML/MicroMan/gifs/cs16.gif b/HTML/MicroMan/gifs/cs16.gif new file mode 100644 index 0000000..35c0fa4 Binary files /dev/null and b/HTML/MicroMan/gifs/cs16.gif differ diff --git a/HTML/MicroMan/gifs/cs17.gif b/HTML/MicroMan/gifs/cs17.gif new file mode 100644 index 0000000..feea604 Binary files /dev/null and b/HTML/MicroMan/gifs/cs17.gif differ diff --git a/HTML/MicroMan/gifs/cs18.gif b/HTML/MicroMan/gifs/cs18.gif new file mode 100644 index 0000000..10f415c Binary files /dev/null and b/HTML/MicroMan/gifs/cs18.gif differ diff --git a/HTML/MicroMan/gifs/cs19.gif b/HTML/MicroMan/gifs/cs19.gif new file mode 100644 index 0000000..71bf995 Binary files /dev/null and b/HTML/MicroMan/gifs/cs19.gif differ diff --git a/HTML/MicroMan/gifs/eh01.gif b/HTML/MicroMan/gifs/eh01.gif new file mode 100644 index 0000000..fa74491 Binary files /dev/null and b/HTML/MicroMan/gifs/eh01.gif differ diff --git a/HTML/MicroMan/gifs/eh02.gif b/HTML/MicroMan/gifs/eh02.gif new file mode 100644 index 0000000..f127214 Binary files /dev/null and b/HTML/MicroMan/gifs/eh02.gif differ diff --git a/HTML/MicroMan/gifs/eh03.gif b/HTML/MicroMan/gifs/eh03.gif new file mode 100644 index 0000000..42784b1 Binary files /dev/null and b/HTML/MicroMan/gifs/eh03.gif differ diff --git a/HTML/MicroMan/gifs/fig0401.gif b/HTML/MicroMan/gifs/fig0401.gif new file mode 100644 index 0000000..c183e50 Binary files /dev/null and b/HTML/MicroMan/gifs/fig0401.gif differ diff --git a/HTML/MicroMan/gifs/fig0402.gif b/HTML/MicroMan/gifs/fig0402.gif new file mode 100644 index 0000000..d5734d3 Binary files /dev/null and b/HTML/MicroMan/gifs/fig0402.gif differ diff --git a/HTML/MicroMan/gifs/fig0403.gif b/HTML/MicroMan/gifs/fig0403.gif new file mode 100644 index 0000000..603faf2 Binary files /dev/null and b/HTML/MicroMan/gifs/fig0403.gif differ diff --git a/HTML/MicroMan/gifs/fig0501.gif b/HTML/MicroMan/gifs/fig0501.gif new file mode 100644 index 0000000..b27d0ba Binary files /dev/null and b/HTML/MicroMan/gifs/fig0501.gif differ diff --git a/HTML/MicroMan/gifs/fig0502.gif b/HTML/MicroMan/gifs/fig0502.gif new file mode 100644 index 0000000..432f976 Binary files /dev/null and b/HTML/MicroMan/gifs/fig0502.gif differ diff --git a/HTML/MicroMan/gifs/fig0701.gif b/HTML/MicroMan/gifs/fig0701.gif new file mode 100644 index 0000000..f59fe0d Binary files /dev/null and b/HTML/MicroMan/gifs/fig0701.gif differ diff --git a/HTML/MicroMan/gifs/fig0702.gif b/HTML/MicroMan/gifs/fig0702.gif new file mode 100644 index 0000000..e2a4079 Binary files /dev/null and b/HTML/MicroMan/gifs/fig0702.gif differ diff --git a/HTML/MicroMan/gifs/fig0703.gif b/HTML/MicroMan/gifs/fig0703.gif new file mode 100644 index 0000000..c498b47 Binary files /dev/null and b/HTML/MicroMan/gifs/fig0703.gif differ diff --git a/HTML/MicroMan/gifs/ft01.gif b/HTML/MicroMan/gifs/ft01.gif new file mode 100644 index 0000000..eff9cc0 Binary files /dev/null and b/HTML/MicroMan/gifs/ft01.gif differ diff --git a/HTML/MicroMan/gifs/ft02.gif b/HTML/MicroMan/gifs/ft02.gif new file mode 100644 index 0000000..304f1fb Binary files /dev/null and b/HTML/MicroMan/gifs/ft02.gif differ diff --git a/HTML/MicroMan/gifs/ft03.gif b/HTML/MicroMan/gifs/ft03.gif new file mode 100644 index 0000000..1cb4989 Binary files /dev/null and b/HTML/MicroMan/gifs/ft03.gif differ diff --git a/HTML/MicroMan/gifs/ft04.gif b/HTML/MicroMan/gifs/ft04.gif new file mode 100644 index 0000000..2320c5b Binary files /dev/null and b/HTML/MicroMan/gifs/ft04.gif differ diff --git a/HTML/MicroMan/gifs/logo.gif b/HTML/MicroMan/gifs/logo.gif new file mode 100644 index 0000000..feed42a Binary files /dev/null and b/HTML/MicroMan/gifs/logo.gif differ diff --git a/HTML/MicroMan/gifs/logo2.gif b/HTML/MicroMan/gifs/logo2.gif new file mode 100644 index 0000000..8cf0382 Binary files /dev/null and b/HTML/MicroMan/gifs/logo2.gif differ diff --git a/HTML/MicroMan/gifs/mo01.gif b/HTML/MicroMan/gifs/mo01.gif new file mode 100644 index 0000000..22f3369 Binary files /dev/null and b/HTML/MicroMan/gifs/mo01.gif differ diff --git a/HTML/MicroMan/gifs/mo02.gif b/HTML/MicroMan/gifs/mo02.gif new file mode 100644 index 0000000..fbc9229 Binary files /dev/null and b/HTML/MicroMan/gifs/mo02.gif differ diff --git a/HTML/MicroMan/gifs/mo03.gif b/HTML/MicroMan/gifs/mo03.gif new file mode 100644 index 0000000..80eb1d5 Binary files /dev/null and b/HTML/MicroMan/gifs/mo03.gif differ diff --git a/HTML/MicroMan/gifs/mo04.gif b/HTML/MicroMan/gifs/mo04.gif new file mode 100644 index 0000000..8ba0587 Binary files /dev/null and b/HTML/MicroMan/gifs/mo04.gif differ diff --git a/HTML/MicroMan/gifs/pd01.gif b/HTML/MicroMan/gifs/pd01.gif new file mode 100644 index 0000000..0aa9821 Binary files /dev/null and b/HTML/MicroMan/gifs/pd01.gif differ diff --git a/HTML/MicroMan/gifs/pd02.gif b/HTML/MicroMan/gifs/pd02.gif new file mode 100644 index 0000000..edfb71c Binary files /dev/null and b/HTML/MicroMan/gifs/pd02.gif differ diff --git a/HTML/MicroMan/gifs/pd03.gif b/HTML/MicroMan/gifs/pd03.gif new file mode 100644 index 0000000..0abb914 Binary files /dev/null and b/HTML/MicroMan/gifs/pd03.gif differ diff --git a/HTML/MicroMan/gifs/pd04.gif b/HTML/MicroMan/gifs/pd04.gif new file mode 100644 index 0000000..d6e3e1b Binary files /dev/null and b/HTML/MicroMan/gifs/pd04.gif differ diff --git a/HTML/MicroMan/gifs/pd05.gif b/HTML/MicroMan/gifs/pd05.gif new file mode 100644 index 0000000..a7fc708 Binary files /dev/null and b/HTML/MicroMan/gifs/pd05.gif differ diff --git a/HTML/MicroMan/gifs/pd06.gif b/HTML/MicroMan/gifs/pd06.gif new file mode 100644 index 0000000..578fcc9 Binary files /dev/null and b/HTML/MicroMan/gifs/pd06.gif differ diff --git a/HTML/MicroMan/gifs/pf01.gif b/HTML/MicroMan/gifs/pf01.gif new file mode 100644 index 0000000..16e8d82 Binary files /dev/null and b/HTML/MicroMan/gifs/pf01.gif differ diff --git a/HTML/MicroMan/gifs/pf02.gif b/HTML/MicroMan/gifs/pf02.gif new file mode 100644 index 0000000..c717392 Binary files /dev/null and b/HTML/MicroMan/gifs/pf02.gif differ diff --git a/HTML/MicroMan/gifs/pf03.gif b/HTML/MicroMan/gifs/pf03.gif new file mode 100644 index 0000000..89e404c Binary files /dev/null and b/HTML/MicroMan/gifs/pf03.gif differ diff --git a/HTML/MicroMan/gifs/pf04.gif b/HTML/MicroMan/gifs/pf04.gif new file mode 100644 index 0000000..432ee1c Binary files /dev/null and b/HTML/MicroMan/gifs/pf04.gif differ diff --git a/HTML/MicroMan/gifs/pf05.gif b/HTML/MicroMan/gifs/pf05.gif new file mode 100644 index 0000000..4d7d296 Binary files /dev/null and b/HTML/MicroMan/gifs/pf05.gif differ diff --git a/HTML/MicroMan/gifs/pf06.gif b/HTML/MicroMan/gifs/pf06.gif new file mode 100644 index 0000000..2660f63 Binary files /dev/null and b/HTML/MicroMan/gifs/pf06.gif differ diff --git a/HTML/MicroMan/gifs/pf07.gif b/HTML/MicroMan/gifs/pf07.gif new file mode 100644 index 0000000..5251466 Binary files /dev/null and b/HTML/MicroMan/gifs/pf07.gif differ diff --git a/HTML/MicroMan/gifs/pf08.gif b/HTML/MicroMan/gifs/pf08.gif new file mode 100644 index 0000000..57319bb Binary files /dev/null and b/HTML/MicroMan/gifs/pf08.gif differ diff --git a/HTML/MicroMan/gifs/pf09.gif b/HTML/MicroMan/gifs/pf09.gif new file mode 100644 index 0000000..86031b8 Binary files /dev/null and b/HTML/MicroMan/gifs/pf09.gif differ diff --git a/HTML/MicroMan/gifs/pf10.gif b/HTML/MicroMan/gifs/pf10.gif new file mode 100644 index 0000000..122e605 Binary files /dev/null and b/HTML/MicroMan/gifs/pf10.gif differ diff --git a/HTML/MicroMan/gifs/pr01.gif b/HTML/MicroMan/gifs/pr01.gif new file mode 100644 index 0000000..4bceb15 Binary files /dev/null and b/HTML/MicroMan/gifs/pr01.gif differ diff --git a/HTML/MicroMan/gifs/pr02.gif b/HTML/MicroMan/gifs/pr02.gif new file mode 100644 index 0000000..1dcbe54 Binary files /dev/null and b/HTML/MicroMan/gifs/pr02.gif differ diff --git a/HTML/MicroMan/gifs/pr03.gif b/HTML/MicroMan/gifs/pr03.gif new file mode 100644 index 0000000..cccf6ed Binary files /dev/null and b/HTML/MicroMan/gifs/pr03.gif differ diff --git a/HTML/MicroMan/gifs/pr04.gif b/HTML/MicroMan/gifs/pr04.gif new file mode 100644 index 0000000..a577e47 Binary files /dev/null and b/HTML/MicroMan/gifs/pr04.gif differ diff --git a/HTML/MicroMan/gifs/pr05.gif b/HTML/MicroMan/gifs/pr05.gif new file mode 100644 index 0000000..4b18972 Binary files /dev/null and b/HTML/MicroMan/gifs/pr05.gif differ diff --git a/HTML/MicroMan/gifs/pr06.gif b/HTML/MicroMan/gifs/pr06.gif new file mode 100644 index 0000000..6ce3d98 Binary files /dev/null and b/HTML/MicroMan/gifs/pr06.gif differ diff --git a/HTML/MicroMan/gifs/pr07.gif b/HTML/MicroMan/gifs/pr07.gif new file mode 100644 index 0000000..db9254f Binary files /dev/null and b/HTML/MicroMan/gifs/pr07.gif differ diff --git a/HTML/MicroMan/gifs/pr08.gif b/HTML/MicroMan/gifs/pr08.gif new file mode 100644 index 0000000..0fda2b4 Binary files /dev/null and b/HTML/MicroMan/gifs/pr08.gif differ diff --git a/HTML/MicroMan/gifs/pr09.gif b/HTML/MicroMan/gifs/pr09.gif new file mode 100644 index 0000000..55357c8 Binary files /dev/null and b/HTML/MicroMan/gifs/pr09.gif differ diff --git a/HTML/MicroMan/gifs/pr10.gif b/HTML/MicroMan/gifs/pr10.gif new file mode 100644 index 0000000..c5f4784 Binary files /dev/null and b/HTML/MicroMan/gifs/pr10.gif differ diff --git a/HTML/MicroMan/gifs/pr11.gif b/HTML/MicroMan/gifs/pr11.gif new file mode 100644 index 0000000..767a570 Binary files /dev/null and b/HTML/MicroMan/gifs/pr11.gif differ diff --git a/HTML/MicroMan/gifs/pr12.gif b/HTML/MicroMan/gifs/pr12.gif new file mode 100644 index 0000000..3e49708 Binary files /dev/null and b/HTML/MicroMan/gifs/pr12.gif differ diff --git a/HTML/MicroMan/gifs/pr13.gif b/HTML/MicroMan/gifs/pr13.gif new file mode 100644 index 0000000..31cbcd9 Binary files /dev/null and b/HTML/MicroMan/gifs/pr13.gif differ diff --git a/HTML/MicroMan/gifs/pr14.gif b/HTML/MicroMan/gifs/pr14.gif new file mode 100644 index 0000000..a348654 Binary files /dev/null and b/HTML/MicroMan/gifs/pr14.gif differ diff --git a/HTML/MicroMan/gifs/pr15.gif b/HTML/MicroMan/gifs/pr15.gif new file mode 100644 index 0000000..49a003d Binary files /dev/null and b/HTML/MicroMan/gifs/pr15.gif differ diff --git a/HTML/MicroMan/gifs/pr16.gif b/HTML/MicroMan/gifs/pr16.gif new file mode 100644 index 0000000..8a1e50c Binary files /dev/null and b/HTML/MicroMan/gifs/pr16.gif differ diff --git a/HTML/MicroMan/gifs/pr17.gif b/HTML/MicroMan/gifs/pr17.gif new file mode 100644 index 0000000..0b21d45 Binary files /dev/null and b/HTML/MicroMan/gifs/pr17.gif differ diff --git a/HTML/MicroMan/gifs/pr18.gif b/HTML/MicroMan/gifs/pr18.gif new file mode 100644 index 0000000..eb1d96d Binary files /dev/null and b/HTML/MicroMan/gifs/pr18.gif differ diff --git a/HTML/MicroMan/gifs/pr19.gif b/HTML/MicroMan/gifs/pr19.gif new file mode 100644 index 0000000..35b3f92 Binary files /dev/null and b/HTML/MicroMan/gifs/pr19.gif differ diff --git a/HTML/MicroMan/gifs/pr20.gif b/HTML/MicroMan/gifs/pr20.gif new file mode 100644 index 0000000..9c2adf7 Binary files /dev/null and b/HTML/MicroMan/gifs/pr20.gif differ diff --git a/HTML/MicroMan/gifs/pt01.gif b/HTML/MicroMan/gifs/pt01.gif new file mode 100644 index 0000000..b9835b9 Binary files /dev/null and b/HTML/MicroMan/gifs/pt01.gif differ diff --git a/HTML/MicroMan/modulari.htm b/HTML/MicroMan/modulari.htm new file mode 100644 index 0000000..9f85409 --- /dev/null +++ b/HTML/MicroMan/modulari.htm @@ -0,0 +1,103 @@ + + + + + +Modularity + + + + + + + +

+Loglan 82, A micro-manual of the programming language - +Basic constructs and facilities +

3) Modularity

+
+ +

+Modular structure of the language is gained due to the large set +of means for module nesting and extending. Program modules (units) +are blocks, procedures, functions, +classes, coroutines +and processes. Block is the +simplest kind of unit. Its syntax is the following: +

+ +

+The sequence of statements commences with the keyword begin +(it may be omitted when this sequence is empty). The lists of +declarations define the syntactic entities (variables, constants, +other units), whose scope is that block. The syntactic +entities are identified in the sequence of statements by means +of names (identifiers). +

+Example: +

+ +

+In the lists of declarations semicolons terminate the whole lists, +not the lists elements. Any declaration list must begin with the +pertinent keyword (var for variables, const for +constants etc.). The value of an expression defining a constant +must be determinable statically (at compilation time). +

+Program in LOGLAN-82 may be a block or alternatively may be of +the following form: +

+ +

+Then the whole program can be identified by that name (the source +as well as the object code). +

+A block can appear in the sequence of statements (of any unit), +thus it is a statement. (Main block is assumed to appear as a +statement of the given job control language.) +

+For the execution of a block statement the object of block is +created in a computer memory, and then, the sequence of statements +is performed. The syntactic entities declared in the block are +allocated in its object. After a block's termination its object +is automatically deallocated (and the corresponding space may +be immediately reused). +

+The modular structure of the language works "in full steam" +when not only blocks, but the other kinds of units are +also used. They will be described closer in the following points. +

+Unit nesting allows to build up hierarchies of units and +supports security of programming. It follows from the general +visibility rules; namely, a syntactic entity declared in an outer +unit is visible in an inner one (unless hidden by an inner +declaration). On the other hand, a syntactic entity declared in +an inner unit is not visible from an outer one. +

+Example: +

+ +

+In this program, first the main block statement is executed (with +variables a,b,c,i,j,k). Next, after the read statement, the inner +block statement is executed (with variables j,k). In the inner +block the global variables j,k are hidden by the local ones. +


+ +

+ + +


+ +
+Last update 02/07/95 +
+ +
+Comments, suggestions and critiques are welcome to : linfo062@crisv2.univ-pau.fr + +
+ + + + diff --git a/HTML/MicroMan/monitors.htm b/HTML/MicroMan/monitors.htm new file mode 100644 index 0000000..aa7ada2 --- /dev/null +++ b/HTML/MicroMan/monitors.htm @@ -0,0 +1,204 @@ +
+program monitors;
+ 
+(* this an example showing 5 processes: two of them are in fact monitors, one controls the screen=ekran *)
+
+  unit ANSI: class;  
+  (* CHECK whether config.sys contains a line device=ansi.sy the class ANSI enables operations on cursor, and bold, blink, underscore etc. *) 
+                               
+  unit Bold : procedure;
+  begin
+    write( chr(27), "[1m")
+  end Bold;
+    
+  unit Blink : procedure;
+  begin
+    write( chr(27), "[5m")
+  end Blink;
+  
+  unit Reverse : procedure;
+  begin
+    write( chr(27), "[7m")
+  end Reverse;
+
+  unit Normal : procedure;
+  begin
+    write( chr(27), "[0m")
+  end Normal;
+  
+  unit Underscore : procedure;
+  begin
+    write( chr(27), "[4m")
+  end Underscore;
+
+  unit inchar : IIUWgraph function : integer;
+    (*podaj nr znaku przeslanego z klawiatury *)
+    var i : integer;
+  begin
+    do
+      i := inkey;
+      if i <> 0 then exit fi;
+    od;
+    result := i;
+  end inchar;
+  
+  unit NewPage : procedure;
+  begin
+    write( chr(27), "[2J")
+  end NewPage;
+  
+  unit  SetCursor : procedure(row, column : integer);
+    var c,d,e,f  : char,
+        i,j : integer;
+  begin
+    i := row div 10;
+    j := row mod 10;
+    c := chr(48+i);
+    d := chr(48+j);
+    i := column div 10;
+    j := column mod 10;
+    e := chr(48+i);
+    f := chr(48+j);
+    write( chr(27), "[", c, d, ";", e, f, "H")
+  end SetCursor;        
+end ANSI;
+
+  
+    unit monitor:  process(node:integer, size:integer,e: ekran);
+
+       var buf: arrayof integer,
+           nr,i,j,k1,k2,n1,n2: integer;
+
+	
+    unit lire: procedure(output k: integer);
+    begin
+      call e.druk(13,2+nr*30+k1,0,k2);
+      call e.druk(13,2+nr*30+(i-1)*6,1,buf(i));
+      k1:=(i-1)*6;
+      k:=buf(i);
+      k2:=k;
+      i:= (i mod size)+1;
+      if i=j
+      then
+        call e.printtext("i equal j")
+      fi; 
+    end lire;
+    
+    unit ecrire: procedure(n:integer);
+    begin
+      call e.druk(13,2+nr*30+n1,0,n2);
+      call e.druk(13,2+nr*30+(j-1)*6,2,n);
+      n1:=(j-1)*6;
+      buf(j) := n;
+      n2:=buf(j);
+      j := (j mod size)+1;
+      if i=j
+      then
+        call e.printtext("j equal i")
+      fi; 
+    end ecrire;
+  begin
+    array buf dim(1:size);
+    nr := size - 4;
+    for i := 1 to size
+    do
+      buf(i) :=  i+nr*4;
+      call e.druk(13,2+nr*30+(i-1)*6,0,buf(i));
+    od;
+    i:=1;  
+    j := size;
+    k1:=0;
+    k2:=buf(1);
+    n1:=(size-1)*6;
+    n2:=buf(size);
+    (* end initialize buffer *)
+    return;
+    
+    do
+      accept lire, ecrire
+    od
+  end monitor;
+  
+  unit prcs:  process(node,nr:integer, mleft,mright:
+							 monitor, e: ekran);
+    var l,o: integer;
+
+  begin
+    call e.SetCursor(8+(nr-1)*10,29);
+    if nr = 1
+    then
+      call e.printtext("<-- p1 <--");
+    else
+      call e.printtext("--> p2 -->");
+    fi;    
+    return;
+    do
+      call mleft.lire(l) ;
+      call e.druk(11+(nr-1)*4,31-(nr-1)*8,1,l);
+      l:= l+1;
+      call mright.ecrire(l) ; 
+      call e.druk(10+(nr-1)*6,23+(nr-1)*8,2,l);
+      if l mod 15 = 0 
+      then
+        o:= e.inchar;
+	      if o = -79 then call endrun fi;
+      fi;	
+    od;
+  end prcs;
+  
+unit ekran : ANSI process(nrprocesora: integer);
+    unit printtext: procedure(s:string);
+    begin
+      write(s);
+      call Normal;
+    end printtext;
+
+    unit  druk: procedure(gdzieW,gdzieK,jak,co:integer);
+    begin
+      call SetCursor(gdzieW,gdzieK);
+      write("   ");
+      if jak=0 then call Normal else
+        if jak=1 then call Reverse else
+          if jak=2 then call Bold 
+          fi
+        fi
+      fi;
+      write(co:3);
+      call Normal;
+    end druk;
+
+    unit print: procedure (i:integer);
+    begin
+      write(i:4)
+    end print;
+  begin
+    return;
+    
+    do accept inchar, 
+              Normal,NewPage, SetCursor, Bold, Underscore,
+	      Reverse, Blink, print, printtext, druk
+    od
+  end ekran;
+  
+var m1,m2:monitor,
+    e:ekran,
+    p1,p2:prcs;
+     
+begin     (* ----- HERE IS THE MAIN PROGRAM ----- *)
+  (* create a  configuration *)
+  e:= new ekran(0);
+  resume(e);
+  call e.Normal;
+  call e.NewPage;
+  m1 := new monitor(0,4,e);
+  m2 := new monitor(0,5,e);
+  
+  p1 := new prcs(0,1,m2,m1,e);
+  p2 := new prcs(0,2,m1,m2,e);
+    
+  resume(m1);
+  resume(m2);
+  resume(p1);
+  resume(p2);
+end monitors;
+
\ No newline at end of file diff --git a/HTML/NextPage.gif b/HTML/NextPage.gif new file mode 100644 index 0000000..4f510e0 Binary files /dev/null and b/HTML/NextPage.gif differ diff --git a/HTML/PrevPage.gif b/HTML/PrevPage.gif new file mode 100644 index 0000000..5296801 Binary files /dev/null and b/HTML/PrevPage.gif differ diff --git a/HTML/alglogc2.htm b/HTML/alglogc2.htm new file mode 100644 index 0000000..5d5196a --- /dev/null +++ b/HTML/alglogc2.htm @@ -0,0 +1,209 @@ + + + + Algorithmic Logic: its home page + + + +

Algorithmic Logic

+
its home page
+ +

Table of contents

+
    +
  1. Definition per genus proximus et differentia specifica +
  2. Goals of AL +
  3. Structure of AL +
  4. Applications + +
  5. specifications of algorithms, data structures and programming languages + + + +
  6. analysis of properties of programs (verification) + +
  7. axiomatic definition of programming languages + +
  8. +
  9. Copyrights +
  10. Readings + +
  11. What's new in AL? +
  12. Invitation to projects + +
  13. the assistant in proving, more precisely ... +
  14. an axiomatic specification of the Loglan'95 programming language... +
  15. + +
+



+
    +

  1. Definitions
    +
    +
    algorithmic logics
    +
    are a kind of logics of programs, their components are: + a formalized algorithmic language and + a consequence operation defined by means of logical axioms and inference rules. +
    +

    +

    logics of programs
    +
    is a family of logics, the language of a logic of programs admits + programs as modalities.
    + Examples:
      +
    • calculus of Floyd (descriptions of flowdiagrams)[1967],
    • calculus (Hoare) of partial correctness formulas [1969], +
    • algorithmic logic [1969-1994],
    • calculus of weakest preconditions (Dijkstra)[1974],
    • dynamic logic [1976], etc. +
    +
    +

    +

    an algorithmic language
    +
    + is the smallest language which contains both the set of programs and the set of first order formulas and which is closed under the formation rule:
    +if P is a program and f is a formula then the expression Pf is an algorithmic formula. The set of algorithmic formulas admits the usual formation rules: disjunction, conjunction, negation, implication, quantification. +
    + +
    + +
  2. +

    Goals of AL
    +- the study of semantic properties of computer programs. The role of AL +in computer science is similar to that of mathematical logic in mathematics. +AL studies those properties of programs whih are valid by virtue of their +syntactical structure, independently of any interpretation of functional and +relational symbols in programs. This leads to the discovery of algorithmic +tautologies and inference rules, thus enabling algorithmic reasoning. +Various programming constructs, one may say, various programming languages +lead to various logics. In one logic you can discuss the properties of +deterministic iterative programs, in another one may analyse the properties +of concurrent(hence non-deterministic) programs, in yet another ... +The theories based on AL are of interest for the study of abstract data types. +For example, an algorithmic theory of stacks is the theory determined by its +algorithmic language and the set specific axioms,
    + +

    +

  3. Structure of AL
    + A recipe: +Take one programming language Lp and its semantics. Consider the +semantical phenomena of the executions of programs (like termination, +correctness, partial correctness, equivalence etc.). Add a first-order +language L1. Mix well, you will obtain an algorithmic language La. +Remark its capability to express the semantical properties of programs +(mentioned earlier). +What you need now is a handful of axioms and inference rules. Be careful. +Avoid inconsistency. Search for the completeness of your logic. +Now, you are ready to serve formal proofs +of semantical properties of programs and other theorems. + +
  4. +
    Applications
    +
      +
    • specification of algorithms, data structures and programming languages +A program K is specified by a pair of formulae alpha and beta. The formula + of the form
      +alpha => K beta
      +is satisfied by a state of memory s iff either s does not satifies the +precondition alpha, or if program K transforms the initial state s into a +resulting state s' (i.e. no infinite loops, no fails either) and the state +s' satisfies the post-condition beta. +A set Z of formulae specifies a (family of) data structure(s) iff all formulas +are valid in the data structure belonging to the family and no data structure +outide the family satisfies all the formulae of the given set Z + + +
    • verification and more precisely analysis of properties of programs +One does it by proving the formulas that express the properties f programs + +
    • axiomatic definition of programming languages +In a paper we we proved that the meanings of programming operators such as +assignment operator, composition of programs operator begin... end, +condititional instruction operator if ... then ... else ... fi operator, +iteration instruction operator while... do ... od are uniquely determined +by he fact that they satisfy the tautologies of algorithmic logic and that +they are conformant to the inference rules of AL. +In other papers we show that the primitive data types of programming languages +are axiomatizable and we study their algorihmic theories. +
    +
    + +
  5. Copyrights
    + +
  6. +
    What to read?
    +
    + +
  7. What's new in AL?
    +We would like to announce two results of 1994.
    +In spite of the Tennenbaum's theorem + it is possible to +to construct a programmable and non-standard model for + the elementary theory of stacks. +The same remark applies as well to other specifications.
    + +Theorem 1
    +Let S be the algebraic specification of stacks. There exists a programmed +module Stacks which correctly implements all the axioms mentioned in the specification S, +the module Stacks admits infinite popping of certain stacks. +
    WARNING. Be careful, it may be the case that a software module satisfies +all axioms of a given first-order specification, yet it may be pathological +one. The facts: a module fulfills the axioms and the module is programmable +do not necessarily means that the module has any value.
    + +
    Theorem 2
    +Algorithmic theory of stacks of bounded capacity is the +complement of a recursively enumerable set. +
    Intuitively speaking this result gives an assuring answer to the question + 'Can one do the research of properties of programs +using the calculus of AL? The nature of AL seem so complicated. Perhaps it would be better +to use another logic of programs.'
    +Quite unexpectedly the oponents of AL are confronted with +two facts:
    +- the dynamic logic has finitistic inference rules and + the highly undecidable set of axioms,
    +- the algorithmic logic has a number of omega-rules, + but the set of theorems of algorithmic theories of + practical interest is relatively low in the hierarchy of Kleene-Mostowski. + + + + + + + + + + + +
  8. +
    Two projects
    +
      +
    • the assistant in proving, more precisely ... +
    • an axiomatic specification of the Loglan'95 programming language... +
    + +
+
+

Explanations of notions used


+
+ +Algebraic specification of stacks:
+The universe is a union of two sets S- for stacks and E- for elements.
+Operations and predicates:
+push: E x S -> S
+pop: S -> S
+top: S -> E
+empty: S -> {true, false}
+Axioms:
+not empty(push(e,s))
+s = pop(push(e, s))
+e = top(push(e, s))
+not empty(s) => s = push(top(s), pop(s)) +
Back


+ +
+Tennenbaum's theorem
+If M is a recursive(i.e. programmable) model of Peano's +axioms of arithmetic of natural numbers then it is isomorphic to the +standard model of natural numbers.
Back + +
+
GM y AS 10:07 01/01/1995
+ + diff --git a/HTML/availlty.htm b/HTML/availlty.htm new file mode 100644 index 0000000..4e91a22 --- /dev/null +++ b/HTML/availlty.htm @@ -0,0 +1,56 @@ + + + +Loglan'82 - Availability + + + +

How to get a copy of Loglan'82

+ +Institute of Informatics, University of Warsaw and
+LITA Universite de Pau
+have the privilege and the pleasure to inform you that since August 1993 +the programming language LOGLAN'82, its compilers and its environments are + accessible for the usage from
+ + the server: aragorn.pb.bialystok.pl = 193.59.9.226
+ user: anonymous = ftp
+ Password:{your internet mail address}
+ directory: pub/loglan
+ + + FTP with WWW directly . + +Or use the following link to the + Loglan82 archive on +the aragorn.pb.bialystok.pl
+Our apologies for the eventual inconveniences, at present we do not dispose a better link/server. +

However you can try a mirror located at + sunsite.icm.edu.pl +We acknowledge the help of ICM.
There is also a French site at + LITA Universite de Pau + +

+
+

     These programs are free software; you can redistribute it 
+     and/or modify it under the terms of the GNU General Public License
+     as published by the Free Software Foundation; either version 2 of 
+     the License, or (at your option) any later version.
+     
+     These programs are distributed in the hope that it will be useful,
+     but WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+     See the GNU General Public License for more details.
+
+ + + + +
+
+AS 11:12 01/12/1994 +
+ + + +ppp \ No newline at end of file diff --git a/HTML/availlty.htm~ b/HTML/availlty.htm~ new file mode 100644 index 0000000..25b44bd --- /dev/null +++ b/HTML/availlty.htm~ @@ -0,0 +1,56 @@ + + + +Loglan'82 - Availability + + + +

How to get a copy of Loglan'82

+ +Institute of Informatics, University of Warsaw and
+LITA Universite de Pau
+have the privilege and the pleasure to inform you that since August 1993 +the programming language LOGLAN'82, its compilers and its environments are + accessible for the usage from
+ + the server: aragorn.pb.bialystok.pl = 193.59.9.226
+ user: anonymous = ftp
+ Password:{your internet mail address}
+ directory: pub/loglan
+ + + FTP with WWW directly . + +Or use the following link to the + Loglan82 archive on +the aragorn.pb.bialystok.pl
+Our apologies for the eventual inconveniences, at present we do not dispose a better link/server. +

However you can try a mirror located at + sunsite.icm.edu.pl +We acknowledge the help of ICM.
There is also a French site at + LITA Universite de Pau + +

+
+

     These programs are free software; you can redistribute it 
+     and/or modify it under the terms of the GNU General Public License
+     as published by the Free Software Foundation; either version 2 of 
+     the License, or (at your option) any later version.
+     
+     These programs are distributed in the hope that it will be useful,
+     but WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+     See the GNU General Public License for more details.
+
+ + + + +
+
+AS 11:12 01/12/1994 +
+ + + +ppp \ No newline at end of file diff --git a/HTML/biblio.htm b/HTML/biblio.htm new file mode 100644 index 0000000..140bd8c --- /dev/null +++ b/HTML/biblio.htm @@ -0,0 +1,224 @@ + +Bibliography on Loglan'82 + +

BIBLIOGRAPHY

+
Last update: November 24, 1994
+

+ +Should you like to read on Loglan and its companion Algorithmic Logic, here it is, a short list of more important +papers.

+

LOGLAN'82

+ +

Algorithmic Logic

+ + + +

Related literature

+ +
+up +
+
GMyAS +Last update Wed 10 May 1995
+ + + + + + diff --git a/HTML/biul2.html b/HTML/biul2.html new file mode 100644 index 0000000..a029127 --- /dev/null +++ b/HTML/biul2.html @@ -0,0 +1,182 @@ + + +Loglan'82 Biuletyn nr 2 + + + + +

Instytut Informatyki Politechniki Bia³ostockiej z +przyjemnoœci¹ zawiadamia, ¿e od +pewnego czasu dzia³a w sieci Internetu

+ + + + + + + +
repozytorium jêzyka pogramowania obiektowego
Loglan'82
+ + + + + + + + + + + + + + + + +
+

Co?

+

Loglan'82 jest jêzykiem programowania obiektowego, +wspó³bie¿nego, rozproszonego o niepowtarzalnych walorach.

+ +

+Udostêpniamy: +

    +
  • kompilatory+interpretatory Loglanu na rózne platformy, w tym sieciowe, +
  • dokumentacjê, +
  • zbiór przyk³adów, +
  • edytory: +LOTEK i edytor strukturalny (tylko dla œrodowiska DOS), +
  • ZRÓD£A! +
+

Gdzie?

+ +

+http://aragorn.pb.bialystok.pl +

+lub +

+ftp://aragorn.pb.bialystok.pl/pub/loglan +

+i jego lustrzane odbicia (znacznie szybciej osi¹galne w sieci) +

+ http://sunsite.icm.edu.pl/loglan/ +

+ ftp://sunsite/icm.edu.pl/pub/loglan/ + +

+ http://infpc1.univ-pau.fr/ +

+ftp://infpc1.univ-pau.fr/pub/loglan82 +

+

Jak?

+ +

+dla WWW: Mosaic, Netscape, Lynx, ... +

+dla anonymous FTP +

+

+ Dziekujemy prof. Markowi Niezgodce +

+i p. Wojtkowi Sylwestrzakowi z ICM +

ten server dziala od 1993 + +

+

Zachecamy do (bezplatnego!) korzystania z naszej bazy wiedzy.

+ +
+

Dlaczego?

+ + +

Uczelnie, jednostki badawcze, pracownicy uczelni i studenci, firmy softwareowe, etc. mog¹ wykorzystywaæ Loglan jako jêzyk programowania obiektowego: + +
    +
  • W dydaktyce programowania pocz¹tkowego, algorytmów i struktur danych, programowania obiektowego, programowania wspó³bie¿nego i rozproszonego, itd. +
  • W szybkim tworzeniu prototypów du¿ych, skomplikowanych aplikacji. +
  • W badaniach: jako narzêdzie badawcze, a tak¿e jako bogate Ÿród³o ciekawych i wa¿nych problemów badawczych (http://aragorn.pb.bialystok.pl/loglan/openpbms.html). +
+ + +

+Loglan nie jest gorszy od innych jêzyków programowania obiektowego (por. http://aragorn.pb.bialystok.pl/loglan/tablica3.html ) +Stosowanie Loglanu pozwola wyposa¿yæ uczelnie, pracowników, studentów itd. w licencjonowane oprogramowanie, bez ¿adnych kosztów! Co wiêcej, stwarza doœæ rzadk¹ okazjê rozdawania studentom legalnie i za darmo oprogramowania wspieraj¹cego proces dydaktyczny. Nauczyciele i s³uchacze bêd¹ mogli wymieniaæ siê Ÿród³ami programów loglanowskich i uzyskaj¹ te same wyniki bowiem Loglan jest niezale¿ny od platformy i dzia³a tak samo w DOSie, Unixie, Atari ST (myœlimy te¿ o platformach MacIntosh i Amiga), w sieciach rozleg³ych Internet i lokalnych Novell. + + +

+Jezyk oferuje niezwykle bogaty zestaw narzêdzi programowania obiektowego, ³¹cznie z obiektami-procesami rozproszonymi w sieci komputerowej. . Procesy komunikuj¹ siê w sposób ca³kowicie obiektowy: dwa procesy wspólnie realizuj¹ jak¹œ metodê jednego z dwu procesów wg pewnego protoko³u, jest to obce wywo³anie inaczej alien call zaproponowany i zrealizowany przez B. Ciesielskiego w r.1988. Wszystkie znane mechanizmy synchronizacji i komunikacji procesów sprowadzaj¹ siê do mechanizmu alien call w prosty i tani sposób. +

UWAGA

+. +Ostatnio reklamuja siê jêzyki przyblizaj¹ce siê do wysokiego standardu rozwi¹zañ opracowanych dla Loglanu. Mo¿emy jednak przewidywac, ¿e w bie¿¹cym stuleciu nie pojawi siê nowy istotnie lepszy od Loglanu jêzyk programowania obiektowego. Zalety naszych rozwiazañ zostan¹ nale¿ycie docenione w odleg³ej jeszcze przysz³oœci, gdy jakaœ bogata firma zechce promowaæ "swoje" odkrycie. Rozwi¹zania Loglanu wspieraj¹ siê wynikami badañ przeprowadzonych przez zespó³ profesorów A. Kreczmara, A. Salwickiego. (por. credits.html) Czy mo¿na oczekiwaæ ¿e jakaœ, nawet bogata, firma zainwestuje w potrzebne badania? +

KONIEC UWAGI.

+ + +

+Programowanie w Loglanie jest znacznie ³atwiejsze ni¿ w innych jêzykach programowania obiektowego (por http://aragorn.pb.bialystok.pl/loglan/quick.htm). + + +

+Programowanie w Loglanie jest o wiele bezpieczniejsze ni¿ w innych jêzykach programowania: +kompilator wykrywa wiele b³êdów (tak¿e tych nie dostrzeganych przez inne kompilatory), i opisuje nature i miejsce b³êdów, +wiele b³êdów jest wykrywanych i sygnalizowanych w trakcie wykonywania programu (b³êdy takie s¹ lokalizowane w tekscie programu Ÿród³owego i czytelnie opisane), +zarz¹dzanie zasobami pamiêciowymi jest bezpieczne i mocne, +np. programista nie musi siê obawiaæ groŸby trudnego do wykrycia b³êdu "wisz¹cych referencji": + +


+ +

+

PRZYKLAD (w Pascalu lub C++)

+ +
Niech x, y, z bêd¹ zmiennymi wskazuj¹cymi na rekord lub obiekt typu T. +
Po wykonaniu instrukcji dispose(y) lub odp. free(y) wartoœci¹ zmiennej y jest wskaŸnik nil do pustego obiektu. WskaŸniki x i z nadal pokazuj¹ na pole pamiêci zajmowane przez nieistniej¹cy ju¿ obiekt. Po wykonaniu instukcji new lub malloc to samo pole mo¿e byæ wskazywane przez zmienn¹ u jako obiekt typu T'. +
Porównaj to z aksjomatem Loglanu + {(x<>none&y=x&z=x) ( [kill(y)](x=y=z=none)} +
Jego sens jest oczywisty. Warto nadmieniæ, ¿e 1° koszt tej dealokacji obiektu x nie zale¿y od liczby wskaŸników do obiektu, nie musisz o tym mysleæ 2° system sygnalizuje wszelkie próby dostêpu do informacji w obiekcie, który (ju¿/jeszcze) nie istnieje. +ponadto programista mo¿e sam zaprojektowaæ reakcjê na b³êdy i na sygna³y podnoszone przez program w trakcie jego realizacji. + +
+ + + + + +
+ +

NIE PRZEGAP!

+ +
    +
  1. Porównaj sam, Loglan i inne jêzyki programowania i wyrób sobie swój w³asny pogl¹d w tej sprawie, +
  2. Policz: jedna licencja na kompilator jêzyka pretenduj¹cego do miana obiektowoœci to XXX z³ razy iloœæ stanowisk pracy w twej uczelni i u studentów. Ile to by kosztowa³o? +
  3. Zauwa¿! w jednym jêzyku programowania oferujemy Ci komplet narzêdzi: +klasy i obiekty, wspó³programy, procesy, dziedziczenie i zagnie¿dzanie modu³ów, ochronê atrybutów prywatnych obiektów wg ¿yczenia twórcy klasy, deklaracje sygna³ów i obs³ugê przerwañ i sygna³ów, wiele sposobów na tworzenie modu³ów generycznych - sparametryzowanych typem danych, dziedziczenie ne tylko w klasach ale w ka¿dym rodzaju modu³u: funkcji, procedurze, bloku, zspó³programie, procesie . +
  4. Uwierz nam! jêzyki o podobnych w³asnoœciach zostan¹ odkryte w Ameryce dopiero za parê lat. Chcesz czekaæ? +
  5. Zrób sobie wieloprocesorow¹, sieciow¹, virtualn¹ maszynê Loglanowsk¹! (Tanio! oto jedna z recept: weŸ tyle PC ile zdo³asz, po³¹cz je w sieæ lokaln¹, zainstaluj Loglan. ) +
  6. Zarób na Loglanie! Mo¿esz go sprzedawaæ, nie mamy nic przeciw temu i nie ¿¹damy niczego od Ciebie. Musisz tylko zachowaæ informacjê o prawach autorskich w sprzedawanych przez Ciebie kopiach. Tak jak to siê dzieje (lub jak powinno siê dziaæ) w przypadku TEXa, Linuxa, produktów GNU, etc. +
+ +
+ + +

+Przekonaj siê lub znajdŸ s³aby punkt w naszej argumentacji. +Napisz nam o Twoich zastrze¿eniach mailto:salwicki@aragorn.pb.bialystok.pl + +

+Nie przejdŸ obojêtnie wobec naszej oferty bo byæ mo¿e przegapisz coœ co ma dla Ciebie znaczenie. Jeœli masz j¹ odrzuciæ to zrób to œwiadomie, na podstawie rzeczowych przes³anek. (Napisz nam o Twych zastrze¿eniach.) + + +

+Czy argument "to siê nie przyjmie" ma tu istotne znaczenie? +a) jeœli prowadzisz zajêcia dydaktyczne lub jestes ich s³uchaczem: to zauwa¿, ¿e ¿aden inny +jêzyk programowania nie dostarczy Ci tak w³aœciwej podstawy do studiowania zjawisk zwi¹zanych z obiektami. Np. temat "modu³y generyczne" w jêzyku C++ sprowadza siê do szablonów (ang. template). W Loglanie znamy kilkanaœcie ró¿nych rowi¹zañ tego problemu. A same szablony maj¹ wiêcej wad ni¿ tego mo¿na by oczekiwaæ. +Po Loglanie mo¿na nauczaæ jakiegokolwiek jêzyka programowania znacznie szybciej i wydajniej. Wystarcz¹ 2 popo³udnia by nauczyæ C++, Smalltalka lub innego jêzyka z obiektami. (A w³aœciwie dlaczego naucza siê Pascala a nie Loglanu?) +b) jeœli tworzysz swoje w³asne oprogramowanie i ma ono byæ w³¹czone w wiêkszy system ju¿ istniej¹cych modu³ów to pozostañ przy wybranym jêzyku progamowania. Rozwa¿ jednak mo¿liwoœæ napisania najpierw prototypu Twego oprogramowania w Loglanie i sprawdzenia jego zgodnoœci ze specyfikacj¹ (poprzez walidacjê lub weryfikacjê) a potem przekodowania do C czy C++1. Prototyp powinien powstaæ trzy razy szybciej. Wspomnieæ o nowoœci: sieæ maszyn DOSowych mo¿e realizowaæ maszynê wieloprocesorow¹ + +


+Notatki
+Wspomnieæ o tym, ¿e chocia¿ Loglan jest "samoróbk¹" uczelnian¹ to i tak mo¿e byæ u¿ywany przez wielu, w odró¿nieniu od samochodu. + + +
+1 Wspomnijmy tu o eksperymentalnym programie L2C t³umacz¹cym z Loglanu na C jaki powsta³ parê lat temu na Uniwersytecie Œl¹skim. + + + diff --git a/HTML/biul2.html.bak b/HTML/biul2.html.bak new file mode 100644 index 0000000..a029127 --- /dev/null +++ b/HTML/biul2.html.bak @@ -0,0 +1,182 @@ + + +Loglan'82 Biuletyn nr 2 + + + + +

Instytut Informatyki Politechniki Bia³ostockiej z +przyjemnoœci¹ zawiadamia, ¿e od +pewnego czasu dzia³a w sieci Internetu

+ + + + + + + +
repozytorium jêzyka pogramowania obiektowego
Loglan'82
+ + + + + + + + + + + + + + + + +
+

Co?

+

Loglan'82 jest jêzykiem programowania obiektowego, +wspó³bie¿nego, rozproszonego o niepowtarzalnych walorach.

+ +

+Udostêpniamy: +

    +
  • kompilatory+interpretatory Loglanu na rózne platformy, w tym sieciowe, +
  • dokumentacjê, +
  • zbiór przyk³adów, +
  • edytory: +LOTEK i edytor strukturalny (tylko dla œrodowiska DOS), +
  • ZRÓD£A! +
+

Gdzie?

+ +

+http://aragorn.pb.bialystok.pl +

+lub +

+ftp://aragorn.pb.bialystok.pl/pub/loglan +

+i jego lustrzane odbicia (znacznie szybciej osi¹galne w sieci) +

+ http://sunsite.icm.edu.pl/loglan/ +

+ ftp://sunsite/icm.edu.pl/pub/loglan/ + +

+ http://infpc1.univ-pau.fr/ +

+ftp://infpc1.univ-pau.fr/pub/loglan82 +

+

Jak?

+ +

+dla WWW: Mosaic, Netscape, Lynx, ... +

+dla anonymous FTP +

+

+ Dziekujemy prof. Markowi Niezgodce +

+i p. Wojtkowi Sylwestrzakowi z ICM +

ten server dziala od 1993 + +

+

Zachecamy do (bezplatnego!) korzystania z naszej bazy wiedzy.

+ +
+

Dlaczego?

+ + +

Uczelnie, jednostki badawcze, pracownicy uczelni i studenci, firmy softwareowe, etc. mog¹ wykorzystywaæ Loglan jako jêzyk programowania obiektowego: + +
    +
  • W dydaktyce programowania pocz¹tkowego, algorytmów i struktur danych, programowania obiektowego, programowania wspó³bie¿nego i rozproszonego, itd. +
  • W szybkim tworzeniu prototypów du¿ych, skomplikowanych aplikacji. +
  • W badaniach: jako narzêdzie badawcze, a tak¿e jako bogate Ÿród³o ciekawych i wa¿nych problemów badawczych (http://aragorn.pb.bialystok.pl/loglan/openpbms.html). +
+ + +

+Loglan nie jest gorszy od innych jêzyków programowania obiektowego (por. http://aragorn.pb.bialystok.pl/loglan/tablica3.html ) +Stosowanie Loglanu pozwola wyposa¿yæ uczelnie, pracowników, studentów itd. w licencjonowane oprogramowanie, bez ¿adnych kosztów! Co wiêcej, stwarza doœæ rzadk¹ okazjê rozdawania studentom legalnie i za darmo oprogramowania wspieraj¹cego proces dydaktyczny. Nauczyciele i s³uchacze bêd¹ mogli wymieniaæ siê Ÿród³ami programów loglanowskich i uzyskaj¹ te same wyniki bowiem Loglan jest niezale¿ny od platformy i dzia³a tak samo w DOSie, Unixie, Atari ST (myœlimy te¿ o platformach MacIntosh i Amiga), w sieciach rozleg³ych Internet i lokalnych Novell. + + +

+Jezyk oferuje niezwykle bogaty zestaw narzêdzi programowania obiektowego, ³¹cznie z obiektami-procesami rozproszonymi w sieci komputerowej. . Procesy komunikuj¹ siê w sposób ca³kowicie obiektowy: dwa procesy wspólnie realizuj¹ jak¹œ metodê jednego z dwu procesów wg pewnego protoko³u, jest to obce wywo³anie inaczej alien call zaproponowany i zrealizowany przez B. Ciesielskiego w r.1988. Wszystkie znane mechanizmy synchronizacji i komunikacji procesów sprowadzaj¹ siê do mechanizmu alien call w prosty i tani sposób. +

UWAGA

+. +Ostatnio reklamuja siê jêzyki przyblizaj¹ce siê do wysokiego standardu rozwi¹zañ opracowanych dla Loglanu. Mo¿emy jednak przewidywac, ¿e w bie¿¹cym stuleciu nie pojawi siê nowy istotnie lepszy od Loglanu jêzyk programowania obiektowego. Zalety naszych rozwiazañ zostan¹ nale¿ycie docenione w odleg³ej jeszcze przysz³oœci, gdy jakaœ bogata firma zechce promowaæ "swoje" odkrycie. Rozwi¹zania Loglanu wspieraj¹ siê wynikami badañ przeprowadzonych przez zespó³ profesorów A. Kreczmara, A. Salwickiego. (por. credits.html) Czy mo¿na oczekiwaæ ¿e jakaœ, nawet bogata, firma zainwestuje w potrzebne badania? +

KONIEC UWAGI.

+ + +

+Programowanie w Loglanie jest znacznie ³atwiejsze ni¿ w innych jêzykach programowania obiektowego (por http://aragorn.pb.bialystok.pl/loglan/quick.htm). + + +

+Programowanie w Loglanie jest o wiele bezpieczniejsze ni¿ w innych jêzykach programowania: +kompilator wykrywa wiele b³êdów (tak¿e tych nie dostrzeganych przez inne kompilatory), i opisuje nature i miejsce b³êdów, +wiele b³êdów jest wykrywanych i sygnalizowanych w trakcie wykonywania programu (b³êdy takie s¹ lokalizowane w tekscie programu Ÿród³owego i czytelnie opisane), +zarz¹dzanie zasobami pamiêciowymi jest bezpieczne i mocne, +np. programista nie musi siê obawiaæ groŸby trudnego do wykrycia b³êdu "wisz¹cych referencji": + +


+ +

+

PRZYKLAD (w Pascalu lub C++)

+ +
Niech x, y, z bêd¹ zmiennymi wskazuj¹cymi na rekord lub obiekt typu T. +
Po wykonaniu instrukcji dispose(y) lub odp. free(y) wartoœci¹ zmiennej y jest wskaŸnik nil do pustego obiektu. WskaŸniki x i z nadal pokazuj¹ na pole pamiêci zajmowane przez nieistniej¹cy ju¿ obiekt. Po wykonaniu instukcji new lub malloc to samo pole mo¿e byæ wskazywane przez zmienn¹ u jako obiekt typu T'. +
Porównaj to z aksjomatem Loglanu + {(x<>none&y=x&z=x) ( [kill(y)](x=y=z=none)} +
Jego sens jest oczywisty. Warto nadmieniæ, ¿e 1° koszt tej dealokacji obiektu x nie zale¿y od liczby wskaŸników do obiektu, nie musisz o tym mysleæ 2° system sygnalizuje wszelkie próby dostêpu do informacji w obiekcie, który (ju¿/jeszcze) nie istnieje. +ponadto programista mo¿e sam zaprojektowaæ reakcjê na b³êdy i na sygna³y podnoszone przez program w trakcie jego realizacji. + +
+ + + + + +
+ +

NIE PRZEGAP!

+ +
    +
  1. Porównaj sam, Loglan i inne jêzyki programowania i wyrób sobie swój w³asny pogl¹d w tej sprawie, +
  2. Policz: jedna licencja na kompilator jêzyka pretenduj¹cego do miana obiektowoœci to XXX z³ razy iloœæ stanowisk pracy w twej uczelni i u studentów. Ile to by kosztowa³o? +
  3. Zauwa¿! w jednym jêzyku programowania oferujemy Ci komplet narzêdzi: +klasy i obiekty, wspó³programy, procesy, dziedziczenie i zagnie¿dzanie modu³ów, ochronê atrybutów prywatnych obiektów wg ¿yczenia twórcy klasy, deklaracje sygna³ów i obs³ugê przerwañ i sygna³ów, wiele sposobów na tworzenie modu³ów generycznych - sparametryzowanych typem danych, dziedziczenie ne tylko w klasach ale w ka¿dym rodzaju modu³u: funkcji, procedurze, bloku, zspó³programie, procesie . +
  4. Uwierz nam! jêzyki o podobnych w³asnoœciach zostan¹ odkryte w Ameryce dopiero za parê lat. Chcesz czekaæ? +
  5. Zrób sobie wieloprocesorow¹, sieciow¹, virtualn¹ maszynê Loglanowsk¹! (Tanio! oto jedna z recept: weŸ tyle PC ile zdo³asz, po³¹cz je w sieæ lokaln¹, zainstaluj Loglan. ) +
  6. Zarób na Loglanie! Mo¿esz go sprzedawaæ, nie mamy nic przeciw temu i nie ¿¹damy niczego od Ciebie. Musisz tylko zachowaæ informacjê o prawach autorskich w sprzedawanych przez Ciebie kopiach. Tak jak to siê dzieje (lub jak powinno siê dziaæ) w przypadku TEXa, Linuxa, produktów GNU, etc. +
+ +
+ + +

+Przekonaj siê lub znajdŸ s³aby punkt w naszej argumentacji. +Napisz nam o Twoich zastrze¿eniach mailto:salwicki@aragorn.pb.bialystok.pl + +

+Nie przejdŸ obojêtnie wobec naszej oferty bo byæ mo¿e przegapisz coœ co ma dla Ciebie znaczenie. Jeœli masz j¹ odrzuciæ to zrób to œwiadomie, na podstawie rzeczowych przes³anek. (Napisz nam o Twych zastrze¿eniach.) + + +

+Czy argument "to siê nie przyjmie" ma tu istotne znaczenie? +a) jeœli prowadzisz zajêcia dydaktyczne lub jestes ich s³uchaczem: to zauwa¿, ¿e ¿aden inny +jêzyk programowania nie dostarczy Ci tak w³aœciwej podstawy do studiowania zjawisk zwi¹zanych z obiektami. Np. temat "modu³y generyczne" w jêzyku C++ sprowadza siê do szablonów (ang. template). W Loglanie znamy kilkanaœcie ró¿nych rowi¹zañ tego problemu. A same szablony maj¹ wiêcej wad ni¿ tego mo¿na by oczekiwaæ. +Po Loglanie mo¿na nauczaæ jakiegokolwiek jêzyka programowania znacznie szybciej i wydajniej. Wystarcz¹ 2 popo³udnia by nauczyæ C++, Smalltalka lub innego jêzyka z obiektami. (A w³aœciwie dlaczego naucza siê Pascala a nie Loglanu?) +b) jeœli tworzysz swoje w³asne oprogramowanie i ma ono byæ w³¹czone w wiêkszy system ju¿ istniej¹cych modu³ów to pozostañ przy wybranym jêzyku progamowania. Rozwa¿ jednak mo¿liwoœæ napisania najpierw prototypu Twego oprogramowania w Loglanie i sprawdzenia jego zgodnoœci ze specyfikacj¹ (poprzez walidacjê lub weryfikacjê) a potem przekodowania do C czy C++1. Prototyp powinien powstaæ trzy razy szybciej. Wspomnieæ o nowoœci: sieæ maszyn DOSowych mo¿e realizowaæ maszynê wieloprocesorow¹ + +


+Notatki
+Wspomnieæ o tym, ¿e chocia¿ Loglan jest "samoróbk¹" uczelnian¹ to i tak mo¿e byæ u¿ywany przez wielu, w odró¿nieniu od samochodu. + + +
+1 Wspomnijmy tu o eksperymentalnym programie L2C t³umacz¹cym z Loglanu na C jaki powsta³ parê lat temu na Uniwersytecie Œl¹skim. + + + diff --git a/HTML/biul2.html~ b/HTML/biul2.html~ new file mode 100644 index 0000000..ffb4aab --- /dev/null +++ b/HTML/biul2.html~ @@ -0,0 +1,145 @@ + + +Loglan'82 Biuletyn nr 2 + + + + +

Instytut Informatyki Politechniki Bia³ostockiej z +przyjemnoœci¹ zawiadamia, ¿e od +pewnego czasu dzia³a w sieci Internetu

+ + + repozytorium jêzyka pogramowania obiektowego +

+ + Loglan'82

+ + + + + + + + + + + + + + + +
+

Co?

+

Loglan'82 jest jêzykiem programowania obiektowego, +wspó³bie¿nego, rozproszonego o niepowtarzalnych walorach.

+ +

+Udostêpniamy: +

    +
  • kompilatory+interpretatory Loglanu na rózne platformy, w tym sieciowe, +
  • dokumentacjê, +
  • zbiór przyk³adów, +
  • edytory: +LOTEK i edytor strukturalny (tylko dla œrodowiska DOS), +
  • RZRÓD£A! +
+

Gdzie?

+ +

+http://aragorn.pb.bialystok.pl +

+lub +

+ftp://aragorn.pb.bialystok.pl/pub/loglan +

+i jego lustrzane odbicia (znacznie szybciej osi¹galne w sieci) +

+ http://sunsite.icm.edu.pl/loglan/ +

+ ftp://sunsite/icm.edu.pl/pub/loglan/ + +

+ http://infpc1.univ-pau.fr/ +

+ftp://infpc1.univ-pau.fr/pub/loglan82 +

+

Jak?

+ +

+dla WWW: Mosaic, Netscape, Lynx, ... +

+dla anonymous FTP +

+

+ Dziekujemy prof. Markowi Niezgodce +

+i p. Wojtkowi Sylwestrzakowi z ICM +

ten server dziala od 1993 + +

+

Zachecamy do (bezplatnego!) korzystania z naszej bazy wiedzy.

+ +
+

Dlaczego?

+ + +

+ + + + +Uczelnie, jednostki badawcze, pracownicy uczelni i studenci, firmy softwareowe, etc. mog¹ wykorzystywaæ Loglan jako jêzyk programowania obiektowego: + +W dydaktyce programowania pocz¹tkowego, algorytmów i struktur danych, programowania obiektowego, programowania wspó³bie¿nego i rozproszonego, itd. +W szybkim tworzeniu prototypów du¿ych, skomplikowanych aplikacji. +W badaniach: jako narzêdzie badawcze, a tak¿e jako bogate Ÿród³o ciekawych i wa¿nych problemów badawczych (http://aragorn.pb.bialystok.pl/loglan/openpbms.html). + +Loglan nie jest gorszy od innych jêzyków programowania obiektowego (por. http://aragorn.pb.bialystok.pl/loglan/tablica3.html ) +Stosowanie Loglanu pozwola wyposa¿yæ uczelnie, pracowników, studentów itd. w licencjonowane oprogramowanie, bez ¿adnych kosztów! Co wiêcej, stwarza doœæ rzadk¹ okazjê rozdawania studentom legalnie i za darmo oprogramowania wspieraj¹cego proces dydaktyczny. Nauczyciele i s³uchacze bêd¹ mogli wymieniaæ siê Ÿród³ami programów loglanowskich i uzyskaj¹ te same wyniki bowiem Loglan jest niezale¿ny od platformy i dzia³a tak samo w DOSie, Unixie, Atari ST (myœlimy te¿ o platformach MacIntosh i Amiga), w sieciach rozleg³ych Internet i lokalnych Novell. + +Jezyk oferuje niezwykle bogaty zestaw narzêdzi programowania obiektowego, ³¹cznie z obiektami-procesami rozproszonymi w sieci komputerowej. . Procesy komunikuj¹ siê w sposób ca³kowicie obiektowy: dwa procesy wspólnie realizuj¹ jak¹œ metodê jednego z dwu procesów wg pewnego protoko³u, jest to obce wywo³anie inaczej alien call zaproponowany i zrealizowany przez B. Ciesielskiego w r.1988. Wszystkie znane mechanizmy synchronizacji i komunikacji procesów sprowadzaj¹ siê do mechanizmu alien call w prosty i tani sposób. +UWAGA. +Ostatnio reklamuja siê jêzyki przyblizaj¹ce siê do wysokiego standardu rozwi¹zañ opracowanych dla Loglanu. Mo¿emy jednak przewidywac, ¿e w bie¿¹cym stuleciu nie pojawi siê nowy istotnie lepszy od Loglanu jêzyk programowania obiektowego. Zalety naszych rozwiazañ zostan¹ nale¿ycie docenione w odleg³ej jeszcze przysz³oœci, gdy jakaœ bogata firma zechce promowaæ "swoje" odkrycie. Rozwi¹zania Loglanu wspieraj¹ siê wynikami badañ przeprowadzonych przez zespó³ profesorów A. Kreczmara, A. Salwickiego. (por. credits.html) Czy mo¿na oczekiwaæ ¿e jakaœ, nawet bogata, firma zainwestuje w potrzebne badania? +KONIEC UWAGI. +Programowanie w Loglanie jest znacznie ³atwiejsze ni¿ w innych jêzykach programowania obiektowego (por http://aragorn.pb.bialystok.pl/loglan/quick.htm). + +Programowanie w Loglanie jest o wiele bezpieczniejsze ni¿ w innych jêzykach programowania: +kompilator wykrywa wiele b³êdów (tak¿e tych nie dostrzeganych przez inne kompilatory), i opisuje nature i miejsce b³êdów, +wiele b³êdów jest wykrywanych i sygnalizowanych w trakcie wykonywania programu (b³êdy takie s¹ lokalizowane w tekscie programu Ÿród³owego i czytelnie opisane), +zarz¹dzanie zasobami pamiêciowymi jest bezpieczne i mocne, +np. programista nie musi siê obawiaæ groŸby trudnego do wykrycia b³êdu "wisz¹cych referencji": +PRZYKLAD (w Pascalu lub C++) +Niech x, y, z bêd¹ zmiennymi wskazuj¹cymi na rekord lub obiekt typu T. +Po wykonaniu instrukcji dispose(y) lub odp. free(y) wartoœci¹ zmiennej y jest wskaŸnik nil do pustego obiektu. WskaŸniki x i z nadal pokazuj¹ na pole pamiêci zajmowane przez nieistniej¹cy ju¿ obiekt. Po wykonaniu instukcji new lub malloc to samo pole mo¿e byæ wskazywane przez zmienn¹ u jako obiekt typu T'. +Porównaj to z aksjomatem Loglanu + {(x<>none&y=x&z=x) ( [kill(y)](x=y=z=none)} +Jego sens jest oczywisty. Warto nadmieniæ, ¿e 1° koszt tej dealokacji obiektu x nie zale¿y od liczby wskaŸników do obiektu, nie musisz o tym mysleæ 2° system sygnalizuje wszelkie próby dostêpu do informacji w obiekcie, który (ju¿/jeszcze) nie istnieje. +ponadto programista mo¿e sam zaprojektowaæ reakcjê na b³êdy i na sygna³y podnoszone przez program w trakcie jego realizacji. + +NIE PRZEGAP! +Porównaj sam, Loglan i inne jêzyki programowania i wyrób sobie swój w³asny pogl¹d w tej sprawie, +Policz: jedna licencja na kompilator jêzyka pretenduj¹cego do miana obiektowoœci to XXX z³ razy iloœæ stanowisk pracy w twej uczelni i u studentów. Ile to by kosztowa³o? +Zauwa¿! w jednym jêzyku programowania oferujemy Ci komplet narzêdzi: +klasy i obiekty, wspó³programy, procesy, dziedziczenie i zagnie¿dzanie modu³ów, ochronê atrybutów prywatnych obiektów wg ¿yczenia twórcy klasy, deklaracje sygna³ów i obs³ugê przerwañ i sygna³ów, wiele sposobów na tworzenie modu³ów generycznych - sparametryzowanych typem danych, dziedziczenie ne tylko w klasach ale w ka¿dym rodzaju modu³u: funkcji, procedurze, bloku, zspó³programie, procesie . +Uwierz nam! jêzyki o podobnych w³asnoœciach zostan¹ odkryte w Ameryce dopiero za parê lat. Chcesz czekaæ? +Zrób sobie wieloprocesorow¹, sieciow¹, virtualn¹ maszynê Loglanowsk¹! (Tanio! oto jedna z recept: weŸ tyle PC ile zdo³asz, po³¹cz je w sieæ lokaln¹, zainstaluj Loglan. ) +Zarób na Loglanie! Mo¿esz go sprzedawaæ, nie mamy nic przeciw temu i nie ¿¹damy niczego od Ciebie. Musisz tylko zachowaæ informacjê o prawach autorskich w sprzedawanych przez Ciebie kopiach. Tak jak to siê dzieje (lub jak powinno siê dziaæ) w przypadku TEXa, Linuxa, produktów GNU, etc. + +Przekonaj siê lub znajdŸ s³aby punkt w naszej argumentacji. Napisz nam o Twoich zastrze¿eniach mailto:salwicki@aragorn.pb.bialystok.pl +Nie przejdŸ obojêtnie wobec naszej oferty bo byæ mo¿e przegapisz coœ co ma dla Ciebie znaczenie. Jeœli masz j¹ odrzuciæ to zrób to œwiadomie, na podstawie rzeczowych przes³anek. (Napisz nam o Twych zastrze¿eniach.) + +Czy argument "to siê nie przyjmie" ma tu istotne znaczenie? +a) jeœli prowadzisz zajêcia dydaktyczne lub jestes ich s³uchaczem: to zauwa¿, ¿e ¿aden inny +jêzyk programowania nie dostarczy Ci tak w³aœciwej podstawy do studiowania zjawisk zwi¹zanych z obiektami. Np. temat "modu³y generyczne" w jêzyku C++ sprowadza siê do szablonów (ang. template). W Loglanie znamy kilkanaœcie ró¿nych rowi¹zañ tego problemu. A same szablony maj¹ wiêcej wad ni¿ tego mo¿na by oczekiwaæ. +Po Loglanie mo¿na nauczaæ jakiegokolwiek jêzyka programowania znacznie szybciej i wydajniej. Wystarcz¹ 2 popo³udnia by nauczyæ C++, Smalltalka lub innego jêzyka z obiektami. (A w³aœciwie dlaczego naucza siê Pascala a nie Loglanu?) +b) jeœli tworzysz swoje w³asne oprogramowanie i ma ono byæ w³¹czone w wiêkszy system ju¿ istniej¹cych modu³ów to pozostañ przy wybranym jêzyku progamowania. Rozwa¿ jednak mo¿liwoœæ napisania najpierw prototypu Twego oprogramowania w Loglanie i sprawdzenia jego zgodnoœci ze specyfikacj¹ (poprzez walidacjê lub weryfikacjê) a potem przekodowania do C czy C++1. Prototyp powinien powstaæ trzy razy szybciej. Wspomnieæ o nowoœci: sieæ maszyn DOSowych mo¿e realizowaæ maszynê wieloprocesorow¹ + +Wspomnieæ o tym, ¿e chocia¿ Loglan jest "samoróbk¹" uczelnian¹ to i tak mo¿e byæ u¿ywany przez wielu, w odró¿nieniu od samochodu. + + + +1 Wspomnijmy tu o eksperymentalnym programie L2C t³umacz¹cym z Loglanu na C jaki powsta³ parê lat temu na Uniwersytecie Œl¹skim. + + +p \ No newline at end of file diff --git a/HTML/biul2.txt b/HTML/biul2.txt new file mode 100644 index 0000000..f0303e9 --- /dev/null +++ b/HTML/biul2.txt @@ -0,0 +1,98 @@ + + +Loglan'82 Biuletyn nr 2 + + + + +

Instytut Informatyki Politechniki Bia³ostockiej z +przyjemnoœsci¹ zawiadamia, ¿e od p +pewnego czasu dzia³a w sieci Internetu + +repozytorium jêzyka pogramowania obiektowego Loglan'82

+ + +

Co?

+

Loglan'82 jest jêzykiem programowania obiektowego, +wspó³bie¿nego, rozproszonego o niepowtarzalnych walorach.

+ +

+Udostêpniamy: + +

+Gdzie? Jak? + http://aragorn.pb.bialystok.pl dla WWW: Mosaic, Netscape, Lynx, ... +lub + ftp://aragorn.pb.bialystok.pl/pub/loglan dla anonymous FTP +i jego lustrzane odbicia (znacznie szybciej osi¹galne w sieci) + http://sunsite.icm.edu.pl/loglan/ DZIEKUJEMY prof. Markowi Niezgódce + ftp://sunsite/icm.edu.pl/pub/loglan/ i Wojtkowi Sylwestrzakowi z ICM + + http://infpc1.univ-pau.fr/ ten server dzia³a od 1993 + ftp://infpc1.univ-pau.fr/pub/loglan82 +Zachêcamy do (bezp³atnego!) korzystania z naszej bazy wiedzy. + +Dlaczego? + +Uczelnie, jednostki badawcze, pracownicy uczelni i studenci, firmy softwareowe, etc. mog¹ wykorzystywaæ Loglan jako jêzyk programowania obiektowego: + +W dydaktyce programowania pocz¹tkowego, algorytmów i struktur danych, programowania obiektowego, programowania wspó³bie¿nego i rozproszonego, itd. +W szybkim tworzeniu prototypów du¿ych, skomplikowanych aplikacji. +W badaniach: jako narzêdzie badawcze, a tak¿e jako bogate Ÿród³o ciekawych i wa¿nych problemów badawczych (http://aragorn.pb.bialystok.pl/loglan/openpbms.html). + +Loglan nie jest gorszy od innych jêzyków programowania obiektowego (por. http://aragorn.pb.bialystok.pl/loglan/tablica3.html ) +Stosowanie Loglanu pozwola wyposa¿yæ uczelnie, pracowników, studentów itd. w licencjonowane oprogramowanie, bez ¿adnych kosztów! Co wiêcej, stwarza doœæ rzadk¹ okazjê rozdawania studentom legalnie i za darmo oprogramowania wspieraj¹cego proces dydaktyczny. Nauczyciele i s³uchacze bêd¹ mogli wymieniaæ siê Ÿród³ami programów loglanowskich i uzyskaj¹ te same wyniki bowiem Loglan jest niezale¿ny od platformy i dzia³a tak samo w DOSie, Unixie, Atari ST (myœlimy te¿ o platformach MacIntosh i Amiga), w sieciach rozleg³ych Internet i lokalnych Novell. + +Jezyk oferuje niezwykle bogaty zestaw narzêdzi programowania obiektowego, ³¹cznie z obiektami-procesami rozproszonymi w sieci komputerowej. . Procesy komunikuj¹ siê w sposób ca³kowicie obiektowy: dwa procesy wspólnie realizuj¹ jak¹œ metodê jednego z dwu procesów wg pewnego protoko³u, jest to obce wywo³anie inaczej alien call zaproponowany i zrealizowany przez B. Ciesielskiego w r.1988. Wszystkie znane mechanizmy synchronizacji i komunikacji procesów sprowadzaj¹ siê do mechanizmu alien call w prosty i tani sposób. +UWAGA. +Ostatnio reklamuja siê jêzyki przyblizaj¹ce siê do wysokiego standardu rozwi¹zañ opracowanych dla Loglanu. Mo¿emy jednak przewidywac, ¿e w bie¿¹cym stuleciu nie pojawi siê nowy istotnie lepszy od Loglanu jêzyk programowania obiektowego. Zalety naszych rozwiazañ zostan¹ nale¿ycie docenione w odleg³ej jeszcze przysz³oœci, gdy jakaœ bogata firma zechce promowaæ "swoje" odkrycie. Rozwi¹zania Loglanu wspieraj¹ siê wynikami badañ przeprowadzonych przez zespó³ profesorów A. Kreczmara, A. Salwickiego. (por. credits.html) Czy mo¿na oczekiwaæ ¿e jakaœ, nawet bogata, firma zainwestuje w potrzebne badania? +KONIEC UWAGI. +Programowanie w Loglanie jest znacznie ³atwiejsze ni¿ w innych jêzykach programowania obiektowego (por http://aragorn.pb.bialystok.pl/loglan/quick.htm). + +Programowanie w Loglanie jest o wiele bezpieczniejsze ni¿ w innych jêzykach programowania: +kompilator wykrywa wiele b³êdów (tak¿e tych nie dostrzeganych przez inne kompilatory), i opisuje nature i miejsce b³êdów, +wiele b³êdów jest wykrywanych i sygnalizowanych w trakcie wykonywania programu (b³êdy takie s¹ lokalizowane w tekscie programu Ÿród³owego i czytelnie opisane), +zarz¹dzanie zasobami pamiêciowymi jest bezpieczne i mocne, +np. programista nie musi siê obawiaæ groŸby trudnego do wykrycia b³êdu "wisz¹cych referencji": +PRZYKLAD (w Pascalu lub C++) +Niech x, y, z bêd¹ zmiennymi wskazuj¹cymi na rekord lub obiekt typu T. +Po wykonaniu instrukcji dispose(y) lub odp. free(y) wartoœci¹ zmiennej y jest wskaŸnik nil do pustego obiektu. WskaŸniki x i z nadal pokazuj¹ na pole pamiêci zajmowane przez nieistniej¹cy ju¿ obiekt. Po wykonaniu instukcji new lub malloc to samo pole mo¿e byæ wskazywane przez zmienn¹ u jako obiekt typu T'. +Porównaj to z aksjomatem Loglanu + {(x<>none&y=x&z=x) ( [kill(y)](x=y=z=none)} +Jego sens jest oczywisty. Warto nadmieniæ, ¿e 1° koszt tej dealokacji obiektu x nie zale¿y od liczby wskaŸników do obiektu, nie musisz o tym mysleæ 2° system sygnalizuje wszelkie próby dostêpu do informacji w obiekcie, który (ju¿/jeszcze) nie istnieje. +ponadto programista mo¿e sam zaprojektowaæ reakcjê na b³êdy i na sygna³y podnoszone przez program w trakcie jego realizacji. + +NIE PRZEGAP! +Porównaj sam, Loglan i inne jêzyki programowania i wyrób sobie swój w³asny pogl¹d w tej sprawie, +Policz: jedna licencja na kompilator jêzyka pretenduj¹cego do miana obiektowoœci to XXX z³ razy iloœæ stanowisk pracy w twej uczelni i u studentów. Ile to by kosztowa³o? +Zauwa¿! w jednym jêzyku programowania oferujemy Ci komplet narzêdzi: +klasy i obiekty, wspó³programy, procesy, dziedziczenie i zagnie¿dzanie modu³ów, ochronê atrybutów prywatnych obiektów wg ¿yczenia twórcy klasy, deklaracje sygna³ów i obs³ugê przerwañ i sygna³ów, wiele sposobów na tworzenie modu³ów generycznych - sparametryzowanych typem danych, dziedziczenie ne tylko w klasach ale w ka¿dym rodzaju modu³u: funkcji, procedurze, bloku, zspó³programie, procesie . +Uwierz nam! jêzyki o podobnych w³asnoœciach zostan¹ odkryte w Ameryce dopiero za parê lat. Chcesz czekaæ? +Zrób sobie wieloprocesorow¹, sieciow¹, virtualn¹ maszynê Loglanowsk¹! (Tanio! oto jedna z recept: weŸ tyle PC ile zdo³asz, po³¹cz je w sieæ lokaln¹, zainstaluj Loglan. ) +Zarób na Loglanie! Mo¿esz go sprzedawaæ, nie mamy nic przeciw temu i nie ¿¹damy niczego od Ciebie. Musisz tylko zachowaæ informacjê o prawach autorskich w sprzedawanych przez Ciebie kopiach. Tak jak to siê dzieje (lub jak powinno siê dziaæ) w przypadku TEXa, Linuxa, produktów GNU, etc. + +Przekonaj siê lub znajdŸ s³aby punkt w naszej argumentacji. Napisz nam o Twoich zastrze¿eniach mailto:salwicki@aragorn.pb.bialystok.pl +Nie przejdŸ obojêtnie wobec naszej oferty bo byæ mo¿e przegapisz coœ co ma dla Ciebie znaczenie. Jeœli masz j¹ odrzuciæ to zrób to œwiadomie, na podstawie rzeczowych przes³anek. (Napisz nam o Twych zastrze¿eniach.) + +Czy argument "to siê nie przyjmie" ma tu istotne znaczenie? +a) jeœli prowadzisz zajêcia dydaktyczne lub jestes ich s³uchaczem: to zauwa¿, ¿e ¿aden inny +jêzyk programowania nie dostarczy Ci tak w³aœciwej podstawy do studiowania zjawisk zwi¹zanych z obiektami. Np. temat "modu³y generyczne" w jêzyku C++ sprowadza siê do szablonów (ang. template). W Loglanie znamy kilkanaœcie ró¿nych rowi¹zañ tego problemu. A same szablony maj¹ wiêcej wad ni¿ tego mo¿na by oczekiwaæ. +Po Loglanie mo¿na nauczaæ jakiegokolwiek jêzyka programowania znacznie szybciej i wydajniej. Wystarcz¹ 2 popo³udnia by nauczyæ C++, Smalltalka lub innego jêzyka z obiektami. (A w³aœciwie dlaczego naucza siê Pascala a nie Loglanu?) +b) jeœli tworzysz swoje w³asne oprogramowanie i ma ono byæ w³¹czone w wiêkszy system ju¿ istniej¹cych modu³ów to pozostañ przy wybranym jêzyku progamowania. Rozwa¿ jednak mo¿liwoœæ napisania najpierw prototypu Twego oprogramowania w Loglanie i sprawdzenia jego zgodnoœci ze specyfikacj¹ (poprzez walidacjê lub weryfikacjê) a potem przekodowania do C czy C++1. Prototyp powinien powstaæ trzy razy szybciej. Wspomnieæ o nowoœci: sieæ maszyn DOSowych mo¿e realizowaæ maszynê wieloprocesorow¹ + +Wspomnieæ o tym, ¿e chocia¿ Loglan jest "samoróbk¹" uczelnian¹ to i tak mo¿e byæ u¿ywany przez wielu, w odró¿nieniu od samochodu. + + + +1 Wspomnijmy tu o eksperymentalnym programie L2C t³umacz¹cym z Loglanu na C jaki powsta³ parê lat temu na Uniwersytecie Œl¹skim. + + +p \ No newline at end of file diff --git a/HTML/biul2.txt~ b/HTML/biul2.txt~ new file mode 100644 index 0000000..b59df33 --- /dev/null +++ b/HTML/biul2.txt~ @@ -0,0 +1,88 @@ + + +Loglan'82 Biuletyn nr 2 + + + + +

Instytut Informatyki Politechniki Bia³ostockiej z przyjemnoœsci¹ zawiadamia, ¿e od pewnego czasu dzia³a w sieci Internetu + +repozytorium jêzyka pogramowania obiektowego Loglan'82

+ + +Co? Loglan'82 jest jêzykiem programowania obiektowego, wspó³bie¿nego, rozproszonego o niepowtarzalnych walorach. +Udostêpniamy: +kompilatory+interpretatory Loglanu na róne platformy, w tym sieciowe, +dokumentacjê, +zbiór przyk³adów, +edytory: LOTEK i edytor strukturalny (tylko dla œrodowiska DOS), +RÓD£A! + +Gdzie? Jak? + http://aragorn.pb.bialystok.pl dla WWW: Mosaic, Netscape, Lynx, ... +lub + ftp://aragorn.pb.bialystok.pl/pub/loglan dla anonymous FTP +i jego lustrzane odbicia (znacznie szybciej osi¹galne w sieci) + http://sunsite.icm.edu.pl/loglan/ DZIEKUJEMY prof. Markowi Niezgódce + ftp://sunsite/icm.edu.pl/pub/loglan/ i Wojtkowi Sylwestrzakowi z ICM + + http://infpc1.univ-pau.fr/ ten server dzia³a od 1993 + ftp://infpc1.univ-pau.fr/pub/loglan82 +Zachêcamy do (bezp³atnego!) korzystania z naszej bazy wiedzy. + +Dlaczego? + +Uczelnie, jednostki badawcze, pracownicy uczelni i studenci, firmy softwareowe, etc. mog¹ wykorzystywaæ Loglan jako jêzyk programowania obiektowego: + +W dydaktyce programowania pocz¹tkowego, algorytmów i struktur danych, programowania obiektowego, programowania wspó³bie¿nego i rozproszonego, itd. +W szybkim tworzeniu prototypów du¿ych, skomplikowanych aplikacji. +W badaniach: jako narzêdzie badawcze, a tak¿e jako bogate Ÿród³o ciekawych i wa¿nych problemów badawczych (http://aragorn.pb.bialystok.pl/loglan/openpbms.html). + +Loglan nie jest gorszy od innych jêzyków programowania obiektowego (por. http://aragorn.pb.bialystok.pl/loglan/tablica3.html ) +Stosowanie Loglanu pozwola wyposa¿yæ uczelnie, pracowników, studentów itd. w licencjonowane oprogramowanie, bez ¿adnych kosztów! Co wiêcej, stwarza doœæ rzadk¹ okazjê rozdawania studentom legalnie i za darmo oprogramowania wspieraj¹cego proces dydaktyczny. Nauczyciele i s³uchacze bêd¹ mogli wymieniaæ siê Ÿród³ami programów loglanowskich i uzyskaj¹ te same wyniki bowiem Loglan jest niezale¿ny od platformy i dzia³a tak samo w DOSie, Unixie, Atari ST (myœlimy te¿ o platformach MacIntosh i Amiga), w sieciach rozleg³ych Internet i lokalnych Novell. + +Jezyk oferuje niezwykle bogaty zestaw narzêdzi programowania obiektowego, ³¹cznie z obiektami-procesami rozproszonymi w sieci komputerowej. . Procesy komunikuj¹ siê w sposób ca³kowicie obiektowy: dwa procesy wspólnie realizuj¹ jak¹œ metodê jednego z dwu procesów wg pewnego protoko³u, jest to obce wywo³anie inaczej alien call zaproponowany i zrealizowany przez B. Ciesielskiego w r.1988. Wszystkie znane mechanizmy synchronizacji i komunikacji procesów sprowadzaj¹ siê do mechanizmu alien call w prosty i tani sposób. +UWAGA. +Ostatnio reklamuja siê jêzyki przyblizaj¹ce siê do wysokiego standardu rozwi¹zañ opracowanych dla Loglanu. Mo¿emy jednak przewidywac, ¿e w bie¿¹cym stuleciu nie pojawi siê nowy istotnie lepszy od Loglanu jêzyk programowania obiektowego. Zalety naszych rozwiazañ zostan¹ nale¿ycie docenione w odleg³ej jeszcze przysz³oœci, gdy jakaœ bogata firma zechce promowaæ "swoje" odkrycie. Rozwi¹zania Loglanu wspieraj¹ siê wynikami badañ przeprowadzonych przez zespó³ profesorów A. Kreczmara, A. Salwickiego. (por. credits.html) Czy mo¿na oczekiwaæ ¿e jakaœ, nawet bogata, firma zainwestuje w potrzebne badania? +KONIEC UWAGI. +Programowanie w Loglanie jest znacznie ³atwiejsze ni¿ w innych jêzykach programowania obiektowego (por http://aragorn.pb.bialystok.pl/loglan/quick.htm). + +Programowanie w Loglanie jest o wiele bezpieczniejsze ni¿ w innych jêzykach programowania: +kompilator wykrywa wiele b³êdów (tak¿e tych nie dostrzeganych przez inne kompilatory), i opisuje nature i miejsce b³êdów, +wiele b³êdów jest wykrywanych i sygnalizowanych w trakcie wykonywania programu (b³êdy takie s¹ lokalizowane w tekscie programu Ÿród³owego i czytelnie opisane), +zarz¹dzanie zasobami pamiêciowymi jest bezpieczne i mocne, +np. programista nie musi siê obawiaæ groŸby trudnego do wykrycia b³êdu "wisz¹cych referencji": +PRZYKLAD (w Pascalu lub C++) +Niech x, y, z bêd¹ zmiennymi wskazuj¹cymi na rekord lub obiekt typu T. +Po wykonaniu instrukcji dispose(y) lub odp. free(y) wartoœci¹ zmiennej y jest wskaŸnik nil do pustego obiektu. WskaŸniki x i z nadal pokazuj¹ na pole pamiêci zajmowane przez nieistniej¹cy ju¿ obiekt. Po wykonaniu instukcji new lub malloc to samo pole mo¿e byæ wskazywane przez zmienn¹ u jako obiekt typu T'. +Porównaj to z aksjomatem Loglanu + {(x<>none&y=x&z=x) ( [kill(y)](x=y=z=none)} +Jego sens jest oczywisty. Warto nadmieniæ, ¿e 1° koszt tej dealokacji obiektu x nie zale¿y od liczby wskaŸników do obiektu, nie musisz o tym mysleæ 2° system sygnalizuje wszelkie próby dostêpu do informacji w obiekcie, który (ju¿/jeszcze) nie istnieje. +ponadto programista mo¿e sam zaprojektowaæ reakcjê na b³êdy i na sygna³y podnoszone przez program w trakcie jego realizacji. + +NIE PRZEGAP! +Porównaj sam, Loglan i inne jêzyki programowania i wyrób sobie swój w³asny pogl¹d w tej sprawie, +Policz: jedna licencja na kompilator jêzyka pretenduj¹cego do miana obiektowoœci to XXX z³ razy iloœæ stanowisk pracy w twej uczelni i u studentów. Ile to by kosztowa³o? +Zauwa¿! w jednym jêzyku programowania oferujemy Ci komplet narzêdzi: +klasy i obiekty, wspó³programy, procesy, dziedziczenie i zagnie¿dzanie modu³ów, ochronê atrybutów prywatnych obiektów wg ¿yczenia twórcy klasy, deklaracje sygna³ów i obs³ugê przerwañ i sygna³ów, wiele sposobów na tworzenie modu³ów generycznych - sparametryzowanych typem danych, dziedziczenie ne tylko w klasach ale w ka¿dym rodzaju modu³u: funkcji, procedurze, bloku, zspó³programie, procesie . +Uwierz nam! jêzyki o podobnych w³asnoœciach zostan¹ odkryte w Ameryce dopiero za parê lat. Chcesz czekaæ? +Zrób sobie wieloprocesorow¹, sieciow¹, virtualn¹ maszynê Loglanowsk¹! (Tanio! oto jedna z recept: weŸ tyle PC ile zdo³asz, po³¹cz je w sieæ lokaln¹, zainstaluj Loglan. ) +Zarób na Loglanie! Mo¿esz go sprzedawaæ, nie mamy nic przeciw temu i nie ¿¹damy niczego od Ciebie. Musisz tylko zachowaæ informacjê o prawach autorskich w sprzedawanych przez Ciebie kopiach. Tak jak to siê dzieje (lub jak powinno siê dziaæ) w przypadku TEXa, Linuxa, produktów GNU, etc. + +Przekonaj siê lub znajdŸ s³aby punkt w naszej argumentacji. Napisz nam o Twoich zastrze¿eniach mailto:salwicki@aragorn.pb.bialystok.pl +Nie przejdŸ obojêtnie wobec naszej oferty bo byæ mo¿e przegapisz coœ co ma dla Ciebie znaczenie. Jeœli masz j¹ odrzuciæ to zrób to œwiadomie, na podstawie rzeczowych przes³anek. (Napisz nam o Twych zastrze¿eniach.) + +Czy argument "to siê nie przyjmie" ma tu istotne znaczenie? +a) jeœli prowadzisz zajêcia dydaktyczne lub jestes ich s³uchaczem: to zauwa¿, ¿e ¿aden inny +jêzyk programowania nie dostarczy Ci tak w³aœciwej podstawy do studiowania zjawisk zwi¹zanych z obiektami. Np. temat "modu³y generyczne" w jêzyku C++ sprowadza siê do szablonów (ang. template). W Loglanie znamy kilkanaœcie ró¿nych rowi¹zañ tego problemu. A same szablony maj¹ wiêcej wad ni¿ tego mo¿na by oczekiwaæ. +Po Loglanie mo¿na nauczaæ jakiegokolwiek jêzyka programowania znacznie szybciej i wydajniej. Wystarcz¹ 2 popo³udnia by nauczyæ C++, Smalltalka lub innego jêzyka z obiektami. (A w³aœciwie dlaczego naucza siê Pascala a nie Loglanu?) +b) jeœli tworzysz swoje w³asne oprogramowanie i ma ono byæ w³¹czone w wiêkszy system ju¿ istniej¹cych modu³ów to pozostañ przy wybranym jêzyku progamowania. Rozwa¿ jednak mo¿liwoœæ napisania najpierw prototypu Twego oprogramowania w Loglanie i sprawdzenia jego zgodnoœci ze specyfikacj¹ (poprzez walidacjê lub weryfikacjê) a potem przekodowania do C czy C++1. Prototyp powinien powstaæ trzy razy szybciej. Wspomnieæ o nowoœci: sieæ maszyn DOSowych mo¿e realizowaæ maszynê wieloprocesorow¹ + +Wspomnieæ o tym, ¿e chocia¿ Loglan jest "samoróbk¹" uczelnian¹ to i tak mo¿e byæ u¿ywany przez wielu, w odró¿nieniu od samochodu. + + + +1 Wspomnijmy tu o eksperymentalnym programie L2C t³umacz¹cym z Loglanu na C jaki powsta³ parê lat temu na Uniwersytecie Œl¹skim. + + +p \ No newline at end of file diff --git a/HTML/comptble.ps.Z b/HTML/comptble.ps.Z new file mode 100644 index 0000000..359ed99 Binary files /dev/null and b/HTML/comptble.ps.Z differ diff --git a/HTML/credits.htm b/HTML/credits.htm new file mode 100644 index 0000000..f01d9bd --- /dev/null +++ b/HTML/credits.htm @@ -0,0 +1,165 @@ + + + +credits & acknowledgements + + + +

Credits & Acknowledgments

+ +

this is a preliminary version

+ +
+ + +

1st step: Loglan'77

+In 1977 A. Salwicki aided by Tomasz Müldner, Hanna Oktaba, Wieslawa +Ratajczak initiated a research on the feasability of a universal programming +language which was to go beyond the Simula'67 and to enable new features: +processes, inheritance from unequal levels, inheritance in procedures, +fuctions etc..
The report on the language was ready in 1978. It helped us to +sign a contract with polish computer industry (We thank A. Janicki once the +deputy director of the Mera trust for his enthousiastic support.)
Our next +success was the arrival of prof. Antoni Kreczmar as the leader of the compiler +group. + +

Loglan'82

+In October 1978 the Loglan group started its work. The compiler group +headed by A. Kreczmar included also: W. Nykowski, Marek Lao, Andrzej I. +Litwiniuk, Danuta Szczepanska-Wasersztrum, Pawel Gburzynski.
+We had to install, repair* (* means iterations) the Mera 400 computers, +develop its poor software environment. This task was accomplished by Pawel +Gburzynski and Piotr Findeisen) . They did a lot of things:the file system and +other extensions of the operating system of Mera 400, the assembler Gass, the editor +EDM, ...
+The only programming language installed then on Mera was Fortran; we had no +choice, our compiler group had to write the compiler of Loglan in Fortran.
+And it works efficiently till today!
+The compiler group was encouraged by the analysis and application group +including Lech Banachowski, Hanna Oktaba, Tomasz Müldner, Wieslawa +Ratajczak-Bartol, Andrzej Salwicki, Lucjan Stapp and others.
+Our main question was the following: is it possible at all? does it exist a way to execute in a +consistent way programs that accept inheritance and nesting, inheritance +which permits to inherit from a different level ?
+Other important problems were: is it possible to maintain the Dijkstra's +mechanism of update of the Display Vector? is it posible to do deallocation of +an object in a safe way, without dangling references? Is it possible to give a +simpler but equally powerful mechanism of coroutines to that of Simula'67? +And many other questions.
+It was Antoni Kreczmar who found the answers to the basic questions [ ].
+Moreover, he wrote the kernel of the executing system for Loglan - the +Running System (1979).
+W.Nykowski wrote the scanner and the parser.
+Andrzej I. Litwiniuk wrote the code generator using many novel ideas.
+Danuta Szczepanska did static semantic module.
+The late Marek Lao did the module that checks the compatibility of types, using his own results.
+After different adventures the first version of the Loglan compiler became +operational in December 1981.
+Everybody worked with the enthousiasm testing, debugging, extending our +child.
+In June 1982 Danuta Szczepanska in cooperation with A. Kreczmar added +the mechanism of exception handling.
+The Loglan system was ready. In comparison with the report of the language +it lacked of separate compilation (and it still lacks of this mechanism) and +processes. +A. Salwicki did a prothese implementing processes as coroutines. But it never +became popular. Happily in 1988 Bolek Ciesielski did a superb contribution: +his concept of procedure calls as the synchronisation mechanism deserves +attention.[ ]
+The industrial partner accepted our work in June 1982. There was no +continuation however. + +

1982-1990

+1983 Loglan's summer school in Zaborow and Hans Langmaack's contribution
+1984 P. Gburzynski and A. I. Litwiniuk port the Loglan to Siemens komputer +(a clone of IBM mainframe - have you ever heard of these jurassic +mainframes my dear?)
+A. Szalas presented his Ph.D. thesis ..
+1984 an interactive debugger was added to the Loglan system by Teresa +Przytycka.
+1984 Radziejowice french-polish meeting on formal methods of programs +theory and object tools of programming
+1985 a longlife and successful cooperation with CNR IASI Rome begins. In +cooperation with, Gianna Cioni, Alfonso Miola and others (Giorgio Ausiello)<
+The results of the cooperation are numerous: here we shall quote only the the +installation of Loglan on VAX/VMS, debugger, report
+U. Petermann
+1986 the members of Loglan team were distinguished by the first price
+1986-90. A multi-goal and multi-university project was launched. Among 27 +teams there were 4 using or developping Loglan.
The results: +M. Warpechowski
+Loglan book by A. Szalas and J.Warpechowska appeared in
+A proposal for the new standard of Loglan in LNCS + +

porting to Unix environment

+A step toward it was made by Marcin Benke and Grzegorz who translated +GEN part of Loglan's system.
+It was Pawel Susicki who ported Loglan to Xenix using the hints of A. +Salwicki. It turned out that using f2c crosscompiler we are able to create +Loglan compiler in the Unix environment without using a Fortran compiler.
+In the summer 1991 Pawel Susicki installed Loglan on several Unix +computers accesible to LITA: PC486/SCO Unix, HP900, Sun4 with SunOS +(thanks to O. Rafiq for leasing us the Sun during August 1991).
+In 1992 Pawel Susicki wrote a support for processes distributed in network of +(hetergeneous) Unix machines. He had no chance to debug it however.
+Sebastien Bernard ported Loglan to the Atari.
+1993. Eric Becourt and Jerome Larrieu did a new version of predefined class +Xiiuwgraf for the users of Unix.
+ A. Salwicki prepared a distribution packet of +Loglan and put it in the server infpc1 of anonymous FTP users.
+1994. Frederic Pataud made a new better version of predefined class +IIuwgraph for users of Dos 386/486 machines.
+Eric Becourt did Logpp - now you can #include +

+November 1995

+Oskar Swida made a network version of Loglan.

+For a moment it was a network of SUNs equipped with Solaris. +

April 1996 (Oskar Swida) +A network of DOS machines equipped with LANWORKPLACE aor NETWARE +constitutes a virtual, multiprocessor, network Loglan machine. + +


+see also: + +
+
+ + + +
+
+AS 12:12 02/02/1995 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +p \ No newline at end of file diff --git a/HTML/credits.htm~ b/HTML/credits.htm~ new file mode 100644 index 0000000..99610be --- /dev/null +++ b/HTML/credits.htm~ @@ -0,0 +1,158 @@ + + + +credits & acknowledgements + + + +

Credits & Acknowledgments

+ +

this is a preliminary version

+ +
+ + +

1st step: Loglan'77

+In 1977 A. Salwicki aided by Tomasz Müldner, Hanna Oktaba, Wieslawa +Ratajczak initiated a research on the feasability of a universal programming +language which was to go beyond the Simula'67 and to enable new features: +processes, inheritance from unequal levels, inheritance in procedures, +fuctions etc..
The report on the language was ready in 1978. It helped us to +sign a contract with polish computer industry (We thank A. Janicki once the +deputy director of the Mera trust for his enthousiastic support.)
Our next +success was the arrival of prof. Antoni Kreczmar as the leader of the compiler +group. + +

Loglan'82

+In October 1978 the Loglan group started its work. The compiler group +headed by A. Kreczmar included also: W. Nykowski, Marek Lao, Andrzej I. +Litwiniuk, Danuta Szczepanska-Wasersztrum, Pawel Gburzynski.
+We had to install, repair* (* means iterations) the Mera 400 computers, +develop its poor software environment. This task was accomplished by Pawel +Gburzynski and Piotr Findeisen) . They did a lot of things:the file system and +other extensions of the operating system of Mera 400, the assembler Gass, the editor +EDM, ...
+The only programming language installed then on Mera was Fortran; we had no +choice, our compiler group had to write the compiler of Loglan in Fortran.
+And it works efficiently till today!
+The compiler group was encouraged by the analysis and application group +including Lech Banachowski, Hanna Oktaba, Tomasz Müldner, Wieslawa +Ratajczak-Bartol, Andrzej Salwicki, Lucjan Stapp and others.
+Our main question was the following: is it possible at all? does it exist a way to execute in a +consistent way programs that accept inheritance and nesting, inheritance +which permits to inherit from a different level ?
+Other important problems were: is it possible to maintain the Dijkstra's +mechanism of update of the Display Vector? is it posible to do deallocation of +an object in a safe way, without dangling references? Is it possible to give a +simpler but equally powerful mechanism of coroutines to that of Simula'67? +And many other questions.
+It was Antoni Kreczmar who found the answers to the basic questions [ ].
+Moreover, he wrote the kernel of the executing system for Loglan - the +Running System (1979).
+W.Nykowski wrote the scanner and the parser.
+Andrzej I. Litwiniuk wrote the code generator using many novel ideas.
+Danuta Szczepanska did static semantic module.
+The late Marek Lao did the module that checks the compatibility of types, using his own results.
+After different adventures the first version of the Loglan compiler became +operational in December 1981.
+Everybody worked with the enthousiasm testing, debugging, extending our +child.
+In June 1982 Danuta Szczepanska in cooperation with A. Kreczmar added +the mechanism of exception handling.
+The Loglan system was ready. In comparison with the report of the language +it lacked of separate compilation (and it still lacks of this mechanism) and +processes. +A. Salwicki did a prothese implementing processes as coroutines. But it never +became popular. Happily in 1988 Bolek Ciesielski did a superb contribution: +his concept of procedure calls as the synchronisation mechanism deserves +attention.[ ]
+The industrial partner accepted our work in June 1982. There was no +continuation however. + +

1982-1990

+1983 Loglan's summer school in Zaborow and Hans Langmaack's contribution
+1984 P. Gburzynski and A. I. Litwiniuk port the Loglan to Siemens komputer +(a clone of IBM mainframe - have you ever heard of these jurassic +mainframes my dear?)
+A. Szalas presented his Ph.D. thesis ..
+1984 an interactive debugger was added to the Loglan system by Teresa +Przytycka.
+1984 Radziejowice french-polish meeting on formal methods of programs +theory and object tools of programming
+1985 a longlife and successful cooperation with CNR IASI Rome begins. In +cooperation with, Gianna Cioni, Alfonso Miola and others (Giorgio Ausiello)<
+The results of the cooperation are numerous: here we shall quote only the the +installation of Loglan on VAX/VMS, debugger, report
+U. Petermann
+1986 the members of Loglan team were distinguished by the first price
+1986-90. A multi-goal and multi-university project was launched. Among 27 +teams there were 4 using or developping Loglan.
The results: +M. Warpechowski
+Loglan book by A. Szalas and J.Warpechowska appeared in
+A proposal for the new standard of Loglan in LNCS + +

porting to Unix environment

+A step toward it was made by Marcin Benke and Grzegorz who translated +GEN part of Loglan's system.
+It was Pawel Susicki who ported Loglan to Xenix using the hints of A. +Salwicki. It turned out that using f2c crosscompiler we are able to create +Loglan compiler in the Unix environment without using a Fortran compiler.
+In the summer 1991 Pawel Susicki installed Loglan on several Unix +computers accesible to LITA: PC486/SCO Unix, HP900, Sun4 with SunOS +(thanks to O. Rafiq for leasing us the Sun during August 1991).
+In 1992 Pawel Susicki wrote a support for processes distributed in network of +(hetergeneous) Unix machines. He had no chance to debug it however.
+Sebastien Bernard ported Loglan to the Atari.
+1993. Eric Becourt and Jerome Larrieu did a new version of predefined class +Xiiuwgraf for the users of Unix.
+ A. Salwicki prepared a distribution packet of +Loglan and put it in the server infpc1 of anonymous FTP users.
+1994. Frederic Pataud made a new better version of predefined class +IIuwgraph for users of Dos 386/486 machines.
+Eric Becourt did Logpp - now you can #include + +
+see also: + +
+
+ + + +
+
+AS 12:12 02/02/1995 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +p \ No newline at end of file diff --git a/HTML/crowd2.jpg b/HTML/crowd2.jpg new file mode 100644 index 0000000..8337fab Binary files /dev/null and b/HTML/crowd2.jpg differ diff --git a/HTML/default1.hot b/HTML/default1.hot new file mode 100644 index 0000000..0410c7f --- /dev/null +++ b/HTML/default1.hot @@ -0,0 +1,79 @@ +[User Menu0] +Menu_Name=Starting Points +Menu_Type=TOPLEVEL +Item0=Starting Points Document,http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/StartingPoints/NetworkStartingPoints.html +Item1=NCSA Mosaic Demo Document,http://www.ncsa.uiuc.edu/demoweb/demo.html +Item2=NCSA Mosaic's 'What's New' Page,http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/whats-new.html +Item3=NCSA Mosaic Home Page,http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/NCSAMosaicHome.html +Item4=Windows Mosaic home page,http://www.ncsa.uiuc.edu/SDG/Software/WinMosaic/HomePage.html +Item5=MENU,UserMenu1 +Item6=MENU,UserMenu2 +Item7=MENU,UserMenu3 +Item8=Finger Gateway,http://cs.indiana.edu/finger/gateway +Item9=Whois Gateway,gopher://sipb.mit.edu:70/1B%3aInternet%20whois%20servers +Item10=MENU,UserMenu4 +Item11=Archie Request Form,http://hoohoo.ncsa.uiuc.edu/archie.html + +[User Menu1] +Menu_Name=World Wide Web Info +Item0=Web Overview,http://www.w3.org/hypertext/WWW/LineMode/Defaults/default.html +Item1=Web Project,http://www.w3.org/hypertext/WWW/TheProject.html +Item2=Data Sources By Service,http://www.w3.org/hypertext/DataSources/ByAccess.html +Item3=Information By Subject,http://www.w3.org/hypertext/DataSources/bySubject/Overview.html +Item4=Web Servers Directory,http://www.w3.org/hypertext/DataSources/WWW/Servers.html +Item5=HTML Quick Reference,http://www.ncsa.uiuc.edu/General/Internet/WWW/HTMLQuickRef.html +Item6=Internet RFCs,http://www.cis.ohio-state.edu:80/hypertext/information/rfc.html + +[User Menu2] +Menu_Name=Home Pages +Item0=The University of Illinois at Urbana-Champaign,http://www.uiuc.edu +Item1=NCSA Home Page,http://www.ncsa.uiuc.edu/General/NCSAHome.html +Item2=CERN Home Page,http://info.cern.ch/ +Item3=UNC-Chapel Hill home page,http://sunsite.unc.edu +Item4=ANU Bioinformatics,http://life.anu.edu.au:80/ +Item5=Data Research Home Page,http://dranet.dra.com/ +Item6=British Columbia,http://www.cs.ubc.ca/ +Item7=BSDI Home Page,http://www.bsdi.com/ +Item8=Carnegie Mellon,http://www.cs.cmu.edu:8001/Web/FrontDoor.html +Item9=Cornell Law School,http://www.law.cornell.edu/lii.table.html +Item10=Cornell Theory Center,http://www.tc.cornell.edu:80/ctc.html +Item11=DESY Home Page,http://info.desy.de:80/ +Item12=ECE WWW Page,http://www.ece.uiuc.edu +Item13=Honolulu Home Page,http://www.hcc.hawaii.edu/ +Item14=Indiana Home Page,http://cs.indiana.edu/home-page.html +Item15=Lysator ACS Sweden,http://www.lysator.liu.se:80/ +Item16=National Center for Atmospheric Research,http://http.ucar.edu/metapage.html +Item17=Northwestern Home Page,http://www.acns.nwu.edu/ +Item18=CICA's WWW Server ,http://www.cica.indiana.edu +Item19=Ohio State Home Page,http://www.cis.ohio-state.edu:80/hypertext/information/information.html +Item20=SSC Home Page,http://www.ssc.gov/SSC.html + +[User Menu3] +Menu_Name=Gopher Servers +Item0=Gopherspace Overview,gopher://gopher.micro.umn.edu:70/11/Other%20Gopher%20and%20Information%20Servers +Item1=Veronica Search,gopher://veronica.scs.unr.edu:70/11/veronica +Item2=NCSA Gopher,gopher://gopher.ncsa.uiuc.edu:70/1 +Item3=PSC Gopher,gopher://gopher.psc.edu:70/1 +Item4=SDSC Gopher,gopher://gopher.sdsc.edu:70/1 +Item5=Original (UMN) Gopher,gopher://gopher.micro.umn.edu:70/1 +Item6=UIUC Gopher,gopher://gopher.uiuc.edu:70/1 +Item7=UIUC Weather Machine,gopher://wx.atmos.uiuc.edu:70/1 +Item8=SDSU Sounds,gopher://athena.sdsu.edu:71/11/sounds + +[User Menu4] +Menu_Name=Other Documents +Item0=Beginner's Guide to HTML,http://www.ncsa.uiuc.edu/demoweb/html-primer.html +Item1=InterNIC Info Source,gopher://is.internic.net:70/11/infosource +Item2=Internet Services List,http://slacvx.slac.stanford.edu:80/misc/internet-services.html +Item3=Internet Talk Radio,http://www.ncsa.uiuc.edu/radio/radio.html +Item4=Library of Congress Vatican Exhibit,http://www.ncsa.uiuc.edu/SDG/Experimental/vatican.exhibit/Vatican.exhibit.html +Item5=NCSA Access Magazine,http://www.ncsa.uiuc.edu/Pubs/access/accessDir.html +Item6=Doctor Fun,http://sunsite.unc.edu/Dave/drfun.html +Item7=Postmodern Culture,http://jefferson.village.virginia.edu/pmc/contents.all.html +Item8=Zippy The Pinhead,http://www.cis.ohio-state.edu:84/ +Item9=Britannica Online,http://www.eb.com/ +Item10=ANU Art History Exhibit,http://www.ncsa.uiuc.edu/SDG/Experimental/anu-art-history/home.html +Item11=Web/Net T-Shirts,http://sashimi.wwa.com/~notime/mdd/www_shirt.html +Item12=Census Information,gopher://bigcat.missouri.edu/11/reference/census/us/basictables/ +Item13=FTP Sites,http://hoohoo.ncsa.uiuc.edu:80/ftp-interface.html + diff --git a/HTML/doc3.htm b/HTML/doc3.htm new file mode 100644 index 0000000..6e49d98 --- /dev/null +++ b/HTML/doc3.htm @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/HTML/errorcd.htm b/HTML/errorcd.htm new file mode 100644 index 0000000..58bedc5 --- /dev/null +++ b/HTML/errorcd.htm @@ -0,0 +1,415 @@ + + Error Codes + +

APPENDIX D : ERROR CODES

+ 0 - ***declaration part overloaded

+Overflow of compiler data structure of declaration part. Possible reasons: too complicated program structure +(too many classes, protection lists, parameter lists,...), too complicated function expressions e.g. f(g(h(...))). +It is possible that removing some errors e.g. "unvisible identifier" causes shortening of the program.

+ 10 - ***too many errors

+Overflow of error diagnostic table. 1024 first detected errors are printed, but global number of error is equal +to number of all detected errors.

+ 41 - ***declaration part overloaded

+Comments as for 0.

+ 101 - ':=' expected

+ 102 - ';' expected

+ 103 - 'then' expected

+ 104 - 'fi'/'else' expected

+ 105 - 'od' expected

+ 106 - '(' expected

+ 107 - ')' expected

+ 108 - 'do' expected

+ 109 - identifier expected

+ 110 - too many exits found

+ Length of sequence exit exit ...exit exceeds level of loop nesting +1.

+ 111 - illegal character

+ 112 - wrong structure of 'if'-statement

+ 113 - 'end' missing

+ 114 - '.' expected

+ 115 - illegal constant in expression

+ Character constant or text appears in logical or arithmetical expression.

+ 116 - '=' expected

+ 117 - constant expected

+ 118 - ':' expected

+ 119 - unit kind specification expected

+Keywords: class, procedure, function, coroutine or process missing in module headline.

+ 120 - 'hidden' or 'close' occurred twice

+ 121 - 'hidden' or 'close' out of a class

+ 122 - 'block' expected

+ 123 - object expression is not a generator

+Object expression appearing as instruction is not a generator e.g. new (a).b

+ 124 - 'dim' expected

+ 125 - 'to'/'downto' expected

+ 126 - illegal arithmetic operator

+ 127 - declaration part expected

+ 128 - incorrect identifier at 'end'

+Module name after end does not correspond to name in module headline.

+ 129 - wrong structure of 'case'-statement

+ 130 - wrong structure of 'do'-statement

+ 131 - illegal use of 'main'

+ Name main may be used only as an argument of attach operator; in other cases it is illegal.

+ 132 - 'when' expected

+ 133 - too many branches in 'case'-statement

+Number of branches in case instruction is greater than 160.

+ 134 - 'begin' missed

+ 135 - bad option

+ 136 - is it really a loglan program???

+There is no Loglan keyword found in source program like: begin, block, unit, class,...

+ 137 - 'block' missed - parsing began

+There is no keyword block or program at the beginning of the Loglan program. This message indicates +the source line, that is the first compiled line.

+ 138 - 'repeat' out of a loop

+ The length of sequence: (exit)*repeat exceeds nested depth of the loop.

+ 139 - there is no path to this statement

+ 140 - 'andif'/'orif' mixed

+ 141 - array of 'semaphore' is illegal

+ 142 - wrong handler end

+Handler declaration is not ended by instruction end or end handlers.

+ 143 - lastwill inside a structured statement

+ 144 - repeated lastwill

+Label LASTWILL appears more than once in the same module.

+ 145 - no parameter specification

+ 146 - wrong register specification

+ 147 - "," expected

+ 191 - ***null program

+There is no source program on the input file or there is no module declaration. Causes termination of +program compilation.

+ 196 - ***too many identifiers

+Entire length of all identifiers and keywords is greater than 3000 characters. This overflow terminates program +compilation.

+ 197 - ***too many formal parameters

+The length of formal parameter list and declared local variables (in actual module) is greater than 130. This +error terminates program compilation.

+ 198 - ***parsing stack overloaded

+Too complicated (nested) program structure. This error terminates program compilation.

+ 199 - ***too many prototypes

+Too many declarations in program caused overflow of the compiler data structure. This error terminates +program compilation.

+ 201 - wrong real constant

+ 202 - wrong comment

+ 203 - wrong character constant

+ 204 - wrong integer constant

+ 205 - integer overflow

+Integer constant out of range.

+ 206 - real overflow

+Real constant out of range.

+ 211 - identifier too long

+Length of identifier is greater than 20 characters.

+ 212 - string too long

+Length of string constant is greater than 260 characters.

+ 301 - prefix is not a class id

+Prefix name ID is not a class name. It may appear when identifier ID is used earlier (declared more than +once).

+ 303 - coroutine/process illegal here as prefix id

+Procedure, function or block can't be prefixed by coroutine or process.

+ 304 - hidden identifier cannot be taken id

+Identifier ID placed on taken list is on hidden list in the prefixing module.

+ 305 - undeclared identifier id

+ 306 - undeclared type identifier id

+ 307 - type identifier expected id

+Identifier ID used in variable or function declaration as a type name, is not declared earlier as a type (but +name has been used earlier).

+ 308 - undeclared prefix identifier id

+ 309 - declared more than once id

+ 310 - taken list in unprefixed unit

+ 316 - formal type specification after use id

+Formal type ID appears in the parameter list after using this identifier as parameter type e.g. (... x: ID; type +ID, ...).

+ 317 - hidden type identifier id

+Type name ID is on hidden list in a prefix of one of the modules from SL chain of actual module and it is a +nearest declaration of this identifier.

+ 318 - type identifier not taken id

+Type name ID is not on taken list in a prefix of one of the modules from SL chain of actual module.

+ 319 - hidden identifier in the list id

+Identifier ID from hidden or close list is on hidden list in one of the prefixing modules.

+ 320 - identifier in the list not taken id

+Identifer ID from hidden or close list is not placed on taken list in none of the prefixing modules.

+ 321 - identifier cannot be taken id

+Identifer ID from taken list is placed on taken list in none of the prefixes.

+ 322 - hidden prefix identifier id

+Analogical to 317 error.

+ 323 - prefix identifier not taken id

+Analogical to 318 error.

+ 329 - only procedure and function may be virtual

+ virtual specification appears with class specification.

+ 330 - virtual in unprefixed block/procedure/function

+ 331 - incompatible kinds of virtuals id

+Kind of virtual module ID is different from kind of replaced module (e.g. one of them is a function, the other +one is a procedure).

+ 332 - incompatible types of virtuals id

+ Type of virtual function ID is different from type of replaced function.

+ 333 - different lengths of form.param.lists in virtuals id

+Virtual module ID and replaced module have different number of formal parameters.

+ 334 - conflict kinds of the 1st level parameters id

+In the headline of virtual module ID kind of formal parameter differs from corresponding formal parameter in +the headline of replaced module (e.g. type and variable, input and output parameters,.).

+ 335 - incompatible types of the 1st level parameters id

+There are formal parameters of different types (function, procedure) in the headline of virtual module ID +and in the headline of replaced module on the same position.

+ 336 - different lengths of the 2nd level params lists id

+There are formal procedures/functions with different numbers of parameters in the headline of virtual +module ID and in the headline of replaced module on the same position.

+ 337 - incompatible kinds of the 2nd level parameters id

+There are parameters of different kinds on the same position in the corresponding procedure or function +parameters in the headline of virtual module ID and in the headline of replaced module.

+ 338 - incompatible types of the 2nd level parameters id

+There are parameters of different types on the same position in the corresponding procedure or function in the +headline of virtual module ID and in the headline of replaced module.

+ 341 - ***declaration part overloaded

+Analogical to error 0.

+ 342 - ***too many classes declared

+ 343 - ***too many prototypes

+Too many modules declared on the same level.

+ 350 - undeclared signal identifier id

+ 351 - hidden signal identifier id

+Analogical to error 317.

+ 352 - signal identifier not taken id

+Analogical to error 318.

+ 353 - signal identifier expected id

+Identifier ID placed in handler declaration as a signal name has not been declared as a signal.

+ 354 - different types of parameters id

+In the headlines of signals, that have common handler, parameters of the different types appear on the same +position. ID is one of these parameters.

+ 355 - incompatible kinds of parameters id

+In the headlines of signals that have common handler, parameters of different kinds appear on the same +position. ID is one of these parameters.

+ 356 - different identifiers of parameters id

+In the headlines of signals that have common handler parameters of different names appear on the same +position. ID is one of these parameters.

+ 357 - incompatible kinds of the 2nd level parameters id

+Analogous to error 355 for 2-nd level paramKters.

+ 358 - different types of the 2nd level parameters id

+Analogous to error 354 for the 2-nd level parameters.

+ 359 - different lengths of the 2nd level params lists id

+There are formal procedures or formal functions with different number of parameters on the same position in +the headlines of signals this have common handler. ID is one of these formal parameters/functions.

+ 360 - different lengths of form. param. lists in signals id

+There are different number of formal parameters in the signals that have common handler. ID is one of these +signals.

+ 361 - non-local formal type cannot be used id

+Formal parameter ID of signal is of non local formal type.

+ 362 - repeated handler for signal id

+There are more than one handler for signal ID in the same module.

+ 370 - only 'input' is legal here

+Formal parameter output or inout is illegal in process.

+ 398 - class prefixed by itself id

+Construction unit ID: ID class is not allowed.

+ 399 - cycle in prefix sequence id

+ID is a class identifier used in cyclic prefixing i.e. ID prefixes a, a prefixes b, ... , z prefixes ID. This +construction is not allowed.

+ 401 - wrong label in 'case' id

+Label in case instruction is not a constant.

+ 402 - 'case' statement nested too deeply

+Nesting level in case instruction is greater than 6.

+ 403 - too long span of 'case' labels

+Range of branches in case instruction is greater than 160.

+ 404 - repeated label in 'case'-statement id

+Label ID appears more than once in case instruction.

+ 405 - illegal type of 'case' expression id

+Control expression in case statement is not of

+ integer or char type.

+ 406 - different types of labels and 'case' expression

+ 407 - non-logical expression after 'if'/'while' id

+ 408 - real constant out of integer range

+Error during conversion of real constant to integer constant.

+ 410 - simple variable expected id

+Control variable in for loop is not a simple variable.

+ 411 - non-integer control variable id

+Control variable ID in for loop is not of integer type.

+ 412 - non-integer expression id

+Expression placed as array index or bound limit in array generation or as step in for loop or as format in +write statement should be reducable to integer type.

+ 413 - file expression expected id

+ 414 - string expression expected id

+ 415 - reference expression expected id

+Expression placed before dot (remote access), before qua or as a argument of kill or copy statement is +not of class type.

+ 416 - array expression expected id

+ 417 - boolean expression expected id

+ 418 - semaphore variable expected

+ 419 - illegal type in 'open'

+The type name placed in open is different than TEXT, REAL, INTEGER, CHAR and DIRECT.

+ 420 - variable expected id

+Expression placed on the left side of assignment statement or as an argument of read instruction or in array +instruction is not a variable.

+ 421 - class identifier after 'new' expected id

+Identifier ID placed after new is not a class identifier.

+ 422 - procedure identifier after 'call' expected id

+ 423 - 'new' missing id

+Keyword new doesn't appear before class identifier for object generation.

+ 424 - 'call' missing id

+Keyword call doesn't appear before procedure identifier for procedure call.

+ 425 - 'inner' out of a class

+ 426 - 'inner' occurred more than once

+ 427 - 'wind'/'terminate' out of a handler

+ 428 - 'inner' inside lastwill

+ 429 - definition cannot be reduced to constant id

+Identifier ID placed in constant definition is not a constant.

+ 430 - undefined constant in the definition id

+ 431 - wrong number of indices id

+Number of indices in referencing to array element is different from declared number of indices.

+ 432 - index out of range id

+ 433 - upper bound less than lower bound id

+ 434 - too many subscripts id

+Dimension of static array ID is greater than 7.

+ 435 - variable is not array id

+ 440 - type identifier expected after 'arrayof' id

+Identifier ID placed after arrayof in actual parameter list, corresponding to type parameter is not a type name. +

+ 441 - incorrect format in 'write'

+There is format for expression of char type or there is double format for expression of type integer or +string.

+ 442 - illegal expression in 'write'

+Argument of write statement is not of type char, string, integer or real.

+ 443 - illegal type of variable in 'read' id

+Argument of read statement is not of type char, integer or real.

+ 444 - no data for i/o transfer

+There is only file identifier in I/O instruction.

+ 445 - illegal expression in 'put'

+ 446 - illegal expression in 'get'

+ 448 - 'raise' missing id

+There is signal identifier without keyword raise in the context of signal raising.

+ 449 - signal identifier expected id

+Identifer ID after keyword raise is not a signal identifier.

+ 450 - illegal procedure occurrence id

+Procedure name ID appears in illegal context.

+ 451 - illegal class occurrence id

+Class name ID appears in illegal context.

+ 452 - illegal type occurrence id

+Type name ID appears in illegal context.

+ 453 - illegal signal occurrence id

+Signal name ID appears in illegal context.

+ 454 - illegal operator occurence

+ 455 - wrong number of operands

+ 460 - divided by zero

+ 470 - illegal input parameter id

+Actual parameter associated with input parameter is not expression that may have any value: it is e.g. +procedure name

+ 471 - illegal output parameter id

+Actual parameter corredponded to output parameter is not a variable.

+ 472 - illegal type parameter id

+Actual parameter ID associated with type parameter is not a type name.

+ 473 - illegal procedure parameter id

+Actual parameter ID associated with procedure parameter is not a procedure name.

+ 474 - illegal function parameter id

+Actual parameter ID associated with function parameter is not a function name.

+ 475 - illegal left side of 'is'/'in' id

+Left side argument ID of is/in is not a reference expression.

+ 476 - illegal right side od 'is'/'in' id

+Right side argument ID of is / in is not a class name.

+ 477 - illegal parameter of 'attach' id

+Parameter ID of attach statement is not a reference variable of class object.

+ 478 - illegal type of expression

+ 479 - negative step value

+ 550 - ***stack overloaded

+This error may be removed by dividing expressions into subexpressions, making simpler nested callings of +arrays, functions, classes and for loops. This error terminates compilation of current module, but other modules +will be compiled.

+ 551 - ***too many auxiliary variables needed

+Too complicated expressions. This error may be removed by declaration of additional variables and using +them as auxiliary variables in expressions.

+ 552 - ***too many auxiliary reference variable needed

+Analogical to error 551.

+ 553 - ***statement sequence too long or too complicated

+This error may be removed by adding 'goto' statement into sequence of instructions e.g. if false then exit fi, +inner, ... or by dividing complicated expression into subexpressions.

+ 554 - ***real constants dictionary overflow

+Too many real constant, maybe because of evaluation of expressions built from real constants.

+ 600 - undeclared identifier id

+ 601 - illegal type before '.' id

+Expression placed before dot (remote access) is not of class type.

+ 602 - close identifier after '.' id

+Identifier ID placed after dot is on close list in the class or its prefix that construct expression before dot.

+ 603 - undeclared identifier after '.' id

+Identifier ID placed after dot is not attribute of expression placed before dot. It may be caused by missing +declaration or using bad prefix for class constructing expression before dot.

+ 604 - illegal operand type id

+One of the arguments in arithmetical expression or in relation is not of arithmetical type.

+ 605 - illegal type in 'div/'mod' term id

+Expression identified by ID used as argument of div or mode operation is not of integer type.

+ 606 - incompatible types in comparison id

+ID is an identifier of left argument of relation.

+ 607 - unrelated class types in comparison id

+ID is an identifier of left argument of relation. Both arguments are of class type and none of these classes +prefixes the other one.

+ 608 - string cannot be compared id

+ID identifies a string.

+ 609 - incompatible types in assignment/transmission id

+ID is an identifier of left side of assignment statement or an identifier of actual parameter in object generation. +Types of both sides of instruction or type of formal parameter and type of actual parameter are incompatible. +

+ 610 - unrelated class types in assignment/transmission id

+Analogical to errors 609 and 607.

+ 611 - constant after '.' id

+An attempt to remote access to constant.

+ 612 - this class does not occur in sl-chain id

+ Class ID appeared in expression this ID, but ID dosn't prefix any module in SL chain of actual module. It +may be a cycle.

+ 613,614 - class identifier expected id

+For error 613: identifier ID used in expression this ID is not of class type. For error 614: identifier ID used in +expression this ID is not name of any type.

+ 615 - illegal type before 'qua' id

+ Object expression before qua should be of one of the types: class, coroutine, process or simple (not array) +formal type.

+ 616,617 - illegal type after 'qua' id

+For error 616: identifier ID used after qua is not of any type.
+For error 617: identifier ID used after qua is not of class type.

+ 618 - unrelated types in 'qua'-expression id

+Identifier ID is a name of class type used after qua. This class type and class type used before qua doesn't +prefix each other.

+ 619 - hidden identifier id

+Identifier ID used in construction qua ID or this ID is on hidden list in the prefix of one of the module from +SL chain of actual module.

+ 620 - not taken identifier id

+Identifier ID used in construction qua ID or this ID is not on taken list in any prefix of any module of +actual module.

+ 621 - invisible identifier after '.' id

+Identifier ID placed after dot is on hidden list or is not on taken list in prefix.

+ 622 - formal parameter list is shorter id

+Identifier ID identifies generated object: class, procedure or function. Formal parameters list of this object is +shorter than actual parameters list.

+ 623 - formal parameter list is longer id

+Analogical to error 622.

+ 624 - actual parameter is not a reference type id

+Actual parameter identified by ID in generated object can't be of primitive type: integer, real, boolean or +string.

+ 625 - actual parameter is not a type id

+Actual parameter identified by ID is not a type, so it can't replace formal type parameter.

+ 626 - procedure-function conflict between parameters id

+Actual parameter, identified by ID, that replaced formal parameter in generated object is function whereas +formal parameter is a procedure or vice versa.

+ 627 - unmatched heads-wrong kinds of parameters id

+ID identifies actual module that replaced formal module. There are parameters of different kinds on the same +position in the headlines of these modules. For input - output conflict the agreement of parameter types is +checked also.

+ 628 - unmatched heads-incompatible types in lists id

+ID identifies actual module that replaced formal module. There are input /output parameters of different +types on the same position in the headlines of actual and formal module.

+ 629 - unmatched heads-unrelated class types in lists id

+ID identifies actual module that replaced formal module. There are input/output parameters specifying +classes of disjointed prefix sequences

+in the headlines of actual and formal module.

+ 630 - unmatched heads-different numbers of parameters id

+There are different lengths of headlines in actual module identified by ID and formal module.

+ 631 - incompatible types of function parameters id

+There are different types of actual function specified by identifier ID and formal function in generated +object.

+ 632 - function/procedure expected id

+Actual parameter identified by identifier ID is not function/procedure, whereas corresponding formal +parameter is function/procedure.

+ 633 - actual function type defined weaker than formal id

+Type of actual function identified by ID is weaker defined than formal function type e.g. formal function +type is statically defined, whereas actual function type is formal (external) or formal +function is class, whereas actual function type is coroutine or process.

+ 634 - unmatched heads-too weak type in actual list id

+There are input/output parameters on the same position in the headlines of actual module identified by +identifier ID and formal module, but ID is weaker defined than corresponding formal module parameter (see +error 633).

+ 635 - standard function/procedure cannot be actual par. id

+ID identifies standard procedure/function used as actual parameter.

+ 636 - illegal use of semaphore id

+ 637 - 'semaphore' cannot be used id

+


+
BACK
+ + diff --git a/HTML/homepage.gif b/HTML/homepage.gif new file mode 100644 index 0000000..da78704 Binary files /dev/null and b/HTML/homepage.gif differ diff --git a/HTML/icons/HomePage.gif b/HTML/icons/HomePage.gif new file mode 100644 index 0000000..da78704 Binary files /dev/null and b/HTML/icons/HomePage.gif differ diff --git a/HTML/icons/NextPage.gif b/HTML/icons/NextPage.gif new file mode 100644 index 0000000..4f510e0 Binary files /dev/null and b/HTML/icons/NextPage.gif differ diff --git a/HTML/icons/PrevPage.gif b/HTML/icons/PrevPage.gif new file mode 100644 index 0000000..5296801 Binary files /dev/null and b/HTML/icons/PrevPage.gif differ diff --git a/HTML/icons/loglanmm.gif b/HTML/icons/loglanmm.gif new file mode 100644 index 0000000..8cf0382 Binary files /dev/null and b/HTML/icons/loglanmm.gif differ diff --git a/HTML/icons/logo.gif b/HTML/icons/logo.gif new file mode 100644 index 0000000..feed42a Binary files /dev/null and b/HTML/icons/logo.gif differ diff --git a/HTML/index.html b/HTML/index.html new file mode 100644 index 0000000..2e0ab5f --- /dev/null +++ b/HTML/index.html @@ -0,0 +1,113 @@ + + + + + +Loglan'82 home page + + + + + + + +

+Loglan'82 - programming with objects

+
+ +

Loglan's home page

+
+Your ticket No.: +
+
+ +

+Loglan'82 is an object-oriented, universal, imperative programming +language.
+It comes with Doc, Compilers (DOS, Unix, Atari,.), Examples etc. +
+Four features of Loglan'82 make it original and interesting for +everybody: +

+ +

+


+ +

INDEX

+ +

+ A SUGGESTION: Use recent versions of Mosaic or Netscape viewers +in order to read the tables we prepared for you.
+For those who can not see the tables there are ASCII versions +of tables as well as postscript files
+ +

+ +

+ +
+ +
+AS last +update Sun 21 May 1995 +
+ + + + diff --git a/HTML/index.html.bak b/HTML/index.html.bak new file mode 100644 index 0000000..f9bebc8 --- /dev/null +++ b/HTML/index.html.bak @@ -0,0 +1,110 @@ + + + + + +Loglan'82 home page + + + + + + + +

+Loglan'82 - programming with objects

+
+ +

Loglan's home page

+
+ +

+Loglan'82 is an object-oriented, universal, imperative programming +language.
+It comes with Doc, Compilers (DOS, Unix, Atari,.), Examples etc. +
+Four features of Loglan'82 make it original and interesting for +everybody: +

+ +

+


+ +

INDEX

+ +

+ A SUGGESTION: Use recent versions of Mosaic or Netscape viewers +in order to read the tables we prepared for you.
+For those who can not see the tables there are ASCII versions +of tables as well as postscript files
+ +

+ +

+ +
+ +
+AS last +update Sun 21 May 1995 +
+ + + + diff --git a/HTML/index.html~ b/HTML/index.html~ new file mode 100644 index 0000000..1f88a00 --- /dev/null +++ b/HTML/index.html~ @@ -0,0 +1,95 @@ + + + + + +Loglan'82 home page + + + + + + + +

+Loglan'82 - programming with objects

+
+ +

Loglan's home page

+
+ +

+Loglan'82 is an object-oriented, universal, imperative programming +language.
+It comes with Doc, Compilers (DOS, Unix, Atari,.), Examples etc. +
+Four features of Loglan'82 make it original and interesting for +everybody: +

+ +

+


+ +

INDEX

+ + +
  • Why Loglan'82? Should I be acquainted with it? + + +
    A SUGGESTION: Use recent versions of Mosaic or Netscape viewers +in order to read the tables we prepared for you.
    +For those who can not see the tables there are ASCII versions +of tables as well as postscript files
    + + +
  • a Quick Reference Card of Loglan'82 + + +
  • a short comparison with other OO languages + + +
  • A micro-manual of Loglan'82 + +
  • How to get a copy of Loglan'82 system? +
  • existing platforms + + +
  • research problems related to Loglan'82 +
      +
    • solved ones +
    • open ones +
    + +
  • Dr Fun or the mysteries of "scientific" bureaucracy +
  • a short history of Loglan'82 project +
  • why I learn so late on Loglan'82? + +
  • +
    + +
    +AS last +update Sun 21 May 1995 +
    + + + + +p \ No newline at end of file diff --git a/HTML/iuwgraf3.htm b/HTML/iuwgraf3.htm new file mode 100644 index 0000000..5721007 --- /dev/null +++ b/HTML/iuwgraf3.htm @@ -0,0 +1,774 @@ + +iiuwgraph +

    unit IIUWGRAPH: class;

    +

    a predefined Loglan'82 LOGLAN class

    + +{ this predefined class enables basic graphic operations + for DOS machines based on 486 or 386 processors +}

    + +{this document gives the specification of new version of IIUWGRAPH + class
    + made in October 1994 by Frederic Pataud à Pau}

    +


    +Table of Contents.
    + + + + +
    + + + +{ the early versions of library IIUWGRAPH have been elaborated by + Piotr Carlsson, Miroslawa Milkowska, Janina Jankowska, + Michal Jankowski at Institute of Informatics, + University of Warsaw 1987,

    + and added to Loglan system by Danuta Szczepanska 1987,

    + + the recent versions were done at LITA, Pau,

    + by

    + Pawel Susicki (1991) for Unix,

    + Sebastien Bernard (1992) for ATARI, see a separate document,
    + Eric Becourt et Jerôme Larrieu (1993) for Unix and Xwindows, see a + separate document on Xiiuwgraf , +

    + +

    +fait à Pau, le 15 Novembre 1994, par Andrzej Salwicki, LITA}

    + +{ the predefined class IIUWGRAPH is included in all versions of interpreter of +Loglan, with the exception of the present version of interpreter for +VAX/VMS.}

    +


    +

    +

    +hidden   MaxX, MaxY,  current_X, current_Y, is_graphic_On,       
    +              current_Colour, current_Background_Colour,  current_Style, 
    +              current_Palette,  current_Pattern ; 
    +
    +
    +                
    +const  MaxX =            
    +          MaxY =            
    +
    +{    the screen's coordinates are 
    +        
    +       (0,0)   ---------------------->   (MaxX,0) 
    +           ¦ 
    +           ¦ 
    +           ¦ 
    +          V 
    +       (0, MaxY)                            (MaxX,MaxY) 
    +
    +}
    + 
    +
    +var  currentDriver : integer,                     { see NOCARD below }  
    +       current_X, current_Y:  integer         { it is the current position } 
    +       is_graphic_On:  Boolean,	   { evidently tells whether we are in 			
    +			graphics mode } 
    +       current_Colour : integer,		{ } 
    +       current_Background_Colour : integer, 
    +       current_Style : integer,		{ } 
    +       current_Palette : integer, 
    +       current_Pattern  
    +
    +

    +

    unit GRON procedure +(i: integer);

    + { procedure sets the monitor in graphic mode and clears the buffer + of screen. The parameter determines the resolution and the number of + colours.
    +The user should assure that the resolution chosen should correspond to that +which is set by means of command
    +SET go32 drivers {path}< driver.file> < width> < height> < +noColours> +eg.
    +set go32 drivers c:\loglan\svga\drivers\vesa.grn gw 1024 gh 480 nc 256
    +

    An execution of instruction call gron(i) must precede + any of the graphic commands described below.

    +

    +case (i)
    +  {
    +  0 : 640x480x16
    +  1 : 640x480x256
    +  2 : 800x600x16
    +  3 : 800x600x256
    +  4 : 1024x768x16
    +  5 : 1024x768x256
    +  6 : 1280x1024x16
    +  7 : 1280x1024x256
    +  8 : 1600x1280x16
    +  9 : 1600x1280x256
    + }
    +
    +

    to ToC + +

    unit GROFF procedure ;

    + { the procedure sets the monitor in the text mode filling it with + spaces.

    + DO NOT FORGET to set the monitor in the text mode before +you terminate your program

    + }

    +

    to ToC + + +

    unit CLS . +: procedure;

    + { the screen will be cleared and filled with colour 0 }

    +

    to ToC

    + + + +

    { PROCEDURES CONTROLLING THE COLOURS }

    +

    + +

    unit COLOR : + procedure(co : integer);

    +{ sets current color to co
    + for monochrome displays, 0 means black, non-0 - white
    + for color displays, 0 means background
    + see PALLET

    +}

    +

    to ToC + +

    unit STYLE : + procedure(styl : integer);

    +{ sets style of lines and fill shades to a combination

    + of current color and background color (for mono -

    + white and black, respectively) according to 5 predefined

    + patterns:

    +

    +		0	....
    +		1	****
    +		2	***.
    +		3	**..
    +		4	*.*.
    +		5	*...
    +
    + where '*' means current color, '.' background colour

    +When drawing the segments the subsequent pixels will have colour determined +by cyclic application of style pattern. The first and the last pixels of a segment +will have always current colour.

    +When filling contours the given style will be applied to horizontal lines with even +coordinate. The style for odd lines is determined automatically.

    +The same applies for perpendicular lines.

    +} +

    +

    to ToC + +

    unit BORDER . : +procedure (background_Colour: +integer);

    + +

    { sets actual background color to i ( i = 0,1,...,15 ) }

    + +

    to ToC + +

    unit PALLET : +procedure (nr : integer);

    + {the following line makes an example, it is not valid for, say, +256 colours +

    +the codes of colors are usually i.e. when you have 16 colours, as follows

    +

    +		0	black
    +		1	blue dark
    +		2	green dark
    +		3	turquoise dark
    +		4	red dark
    +		5	violet
    +		6	brown
    +		7	grey light
    +		8	grey dark	 
    +		9	blue
    +		10	green
    +		11	turquoise
    +		12	red light
    +		13	rose
    +		14	yellow
    +		15	white
    +
    } +

    +

    to ToC + + + +

    { PROCEDURES CONTROLLING POSITION }

    + +

    unit MOVE : +procedure (x,y :integer);

    + { procedure MOVE sets the current position on the screen on the pixel + with coordinates

    + x - column,

    + y - line }

    + { precondition of MOVE: + 0<x<MaxX & 0<y<MaxY + }

    +

    to ToC + +

    unit INXPOS : +function: integer;

    + { function INXPOS returns the x coordinate of the current position }

    +

    to ToC + + +

    unit INYPOS : +function : integer;

    + { function INYPOS returns the y coordinate of the current position }

    +

    to ToC + + +

    unit PUSHXY : +procedure;

    +{ pushes current position, color & style onto the stack.

    + The stack is kept internally, max depth is 16

    +} +

    +

    to ToC + +

    unit POPXY : +procedure;

    + +{ restores position, color & style from internal stack }

    + +{ Example

    +

    unit  DIAGONAL : procedure;
    +    var ix, iy : integer;
    +begin
    +	call PUSHXY;
    +	ix := INXPOS;
    +	iy := INYPOS;
    +	call DRAW(ix+10, iy+10);
    +	call POPXY
    +end DIAGONAL;
    +
    } +

    +

    to ToC + + +

    { PROCEDURES SERVING POINTS & +LINES}

    + +

    unit POINT : +procedure(x,y: integer);

    +{ moves current position to pixel (x,y) and sets it to the current color +

    + }

    to ToC + +

    +

    unit INPIX : function +(x,y : integer) : integer;

    + {

    + moves to pixel (x,y) and returns its color setting;

    + } +

    to ToC +

    + +

    unit DRAW : +procedure( x,y : integer);

    + {

    + draws a line from current screen position to (x,y);

    + sets current position to (x,y);

    + line is drawn in current color, with both terminal pixels

    + always turned white ( non-background) for non-black

    + ( non-background ) line color.

    + } +

    to ToC +

    +

    unit intens : +procedure(Size :integer; +xCoord,yCoord:arrayof integer, Colour,Filled +:integer);

    + +/* draw a polygon*/ +{ draw a simple, closed polygon of Size points, the edges of the polygon go from +(xCoord[i], yCoord[i]) to (xCoord[i+1], yCoord[i+1]) for i = 1, ..., Size-1 +The colour used will be Colour. The polygon will be filled iff Filled< +> 0. +}

    +

    to ToC +

    +

    unit CIRB : procedure (xi, yi, rx,ry : integer, alfa, beta : real, +cbord, fill : integer);

    + + + { +

    draws a circle (or ellipse, depending on aspect value, see below),

    + optionally filling its interior;

    + does not preserve position;

    + (xi,yi) - are center coordinates,

    + rx - radius in pixels (horizontally),
    + ry - radius in pixels (perpendicularly),

    + alfa, beta - starting & ending angles; if alfa=beta a full

    + circle is drawn; values should be given in radians;

    + cbord - border color,

    + fill - if fill < > 0, interior is filled in current style& color

    + } +

    to ToC +

    +

    unit hfill : +procedure( x : integer);

    + { draw an horizontal line between the current position and

    + (x,currentY) with the current color, after it change the current

    + position to (x, currentY)

    + }

    +

    to ToC + +

    unit vfill : +procedure( y : integer);

    + { draw a vertical line between the current position and

    + (currentX,y) with the current color, after it change the current

    + position to (currentX,y)

    + }

    +

    to ToC + +

    unit patern : +procedure( x1,y1,x2,y2,c,b : +integer);

    + { draw a rectangle between the points (x1,y1) and +(x2,y2) with the

    + color c (the current color is not change). if b=0 then the box +is

    + empty else it is filled.

    + }

    +

    to ToC + +

    { Procedures operating on bitmaps }

    + +

    unit GETMAP : +function (x,y : integer) : arrayof +integer;

    + {saves rectangular area between current position as

    + top left corner and (ix,iy) as bottom right corner,

    + including border lines;

    + position remains unchanged.

    + array of integer should have

    + 4+(rows**columns/8* *coeff)

    + bytes. The coefficient coeff is 1 for Hercules, 2 for CGA, 4 for EGA

    + card.

    + ATTENTION: in DOS 286 environment a bigger size of the array may + necessitate the use of loglan with the option H+, see also +memavail

    + }

    +

    to ToC + +

    unit PUTMAP : +procedure ( a: arrayof +integer);

    + {sets rectangular area of screen pixels to that saved

    + by "getmap" in "iarray";

    + same size is restored, with top left corner in current

    + position;

    + position remains unchanged.

    + } +

    to ToC +

    +

    unit ORMAP : +procedure ( a : arrayof +integer);

    + {same as putmap, but saved bitmap is or'ed into screen

    + rather than just set.

    + } +

    to ToC +

    +

    unit XORMAP : procedure ( a: +arrayof integer);

    + {same as putmap, but saved bitmap is xor'ed into screen

    + rather than just set.

    + } +

    to ToC +

    + +

    {Procedures operating on characters and strings}

    + +

    unit outstring : +procedure(x,y: integer, s: string, back_col, +front_col: integer);

    + { x, y are the coordinates where to put the string,

    + s is the string to be shown, in front_col colour letters on the +back_col colour background

    + }

    +

    to ToC + +

    unit track +: procedure( x,y,c,valeur : integer); +

    + { write an integer value valeur at the position (x,y) with the +color c. + It does not change the current position nor the current color

    + }

    +

    to ToC + +

    unit inkey + : function : integer;

    + + { returns next character from keyboard buffer;

    + 0 is returned if buffer is empty;

    + special keys are returned as negative numbers;

    + ALT-NUM method may be used for entering character codes

    + above 127 (this makes entering special keys 128-132

    + impossible);

    + if a character is returned, it is also removed

    + from the buffer, so MS-DOS will not see it (CTRL-C!);

    + typeahead is allowed, echo is suppressed.

    + }

    +

    to ToC + +

    unit HASCII : procedure(c: +integer);

    + {'xor's the character = chr(c) in a 8*8 box with top left corner

    + in the current position;

    + moves current position by (8,0);

    + call hascii(0)- sets complete box to black ( =background ),

    + with no change in position.

    +} +

    to ToC +

    + + +

    unit hfont +: function( +x,y,lg,min,max,default,col_f,col_e,col_c : integer): + integer;

    + + { arrange a small 1 line window for reading an integer value +from this window, +the position of the window corner is (x, y), +the length of the window is lg characters, +the value v should be greater than min and smaller than max, +the default value read is default,

    +the colour of the window is col_f,
    +the colour of the digits is col_e,
    +the colour of cursor is col_c

    + + reads in graphic mode an integer in the window which begins at the (x,y) + position, window is lg caracteres long. the maximum length of the

    + integer that is read is 10. there is a default value, a minimum value + and a maximum value. the window is drawn with the col_f color, the + cursor is in the col_c color and the integer is writing in the col_e

    + color. you can use 0..9,+,-,backspace,escape and return keys. }

    +

    to ToC + +

    unit hfont8 +: function( +x,y,lg,maxlg: integer,default: arrayof char, +col_f,col_e,col_c : integer): arrayof char;

    + + { arrange a small 1 line window for reading an array of characters (text) +from this window, +the position of the window corner is (x, y), +the length of the window is lg characters, +the text should not be longer than maxlg characters, +the default text shown is default,

    +the colour of the window is col_f,
    +the colour of the digits is col_e,
    +the colour of cursor is col_c

    + + reads in graphic mode a text (i.e. an array of characters) + in the window which begins at the (x,y) + position, window is lg caracteres long. the maximum length of the + text that is read is maxlg. there is a default text shown, + the window is drawn with the col_f color, the + cursor is in the col_c color and the integer is writing in the col_e

    + color.

    You can use 0..9,+,-,backspace,escape and return keys. }

    +

    to ToC + + +

    unit HPAGE : procedure(x,y,long: +integer, A: arrayof char, back, front: integer);

    + { this procedure arranges a 1-line high window in position x,y of +length long in which a portion of text A is shown in colour +front on the background colour back.

    + Making use of keys controlling the cursor {left, right, PgUp, PgDn}

    + the user can scroll the text (horizontally) in the window. Pressing the + Enter key terminates the procedure}

    +

    to ToC + +

    end IIUWGRAPH;

    + + + +


    +

    unit MOUSE : +class;

    +

    +You can safely skip the following french text if you can not read french.
    +It is put here for the convenience of my french students.
    +
    + +


    +
    { init -lors de l'initialisation de la souris, on peut définir les événements qui vont faire réagir la +fonction getpress; le premier et le deuxième paramètre représentent respectivement la souris et le clavier, si une +valeur non nulle est donnée comme paramètre alors getpress réagira à l'événement.

    + + Une paire (1,1) va permettre de prendre en compte à la fois les événements de la souris et ceux du clavier; +une paire (1,0) quand à elle ne prendra en compte que la souris. Pour une plus grande souplesse d'utilisation, il est +possible lors du programme, après l'initalisation, de changer cette prise en compte, cela se fera par l'appel de la +procedure getmovement, procédure ayant les mêmes paramètres (avec le même ordre) que la fonction +init.

    + + Pour detecter les événements, on utilisa la fonction getpress, qui retourne un booléen indiquant la +présence ou l'absence d'événement (respectivement les valeurs true et false). Il est bon de noter qu'ainsi définie la +fonction getpress n'est pas bloquante. Les paramètres en retour sont soit nuls (pas d'événement) soit +correspondent:

    + + bool:=getpress(v,p,h,l,r,c : integer);

    + v = position en y de la souris

    + p = keyboard status (Touche control_left,control_right, alt, alt_gr, shift_left, shift_right)

    + h = position en x de la souris

    + l = touche clavier

    + r = flags

    + c = boutons de la souris (0=aucun, 1=gauche, 2=droite, 3=gauche et droite)

    + Nb: le bouton central n'est pas géré.

    + +NOTEZ BIEN! Lorsque les événements du clavier sont pris en compte dans +le gestionnaire, il ne faut +pas utiliser les fonctions d'entrées clavier readl, readln, hfont, hfont8, hpage, inkey,...) sous peine de +plantage de l'ordinateur.

    +}

    +
    +

    +

    unit init +: procedure(checkMouse, +checkKeyboard: integer);

    + { initializes the Mouse driver.

    + tells which events will be checked:

    + if checkMouse < > 0 then the events of Mouse will be +reported to getpress, otherwise +ignored;

    + if checkKeyboard < > 0 then the events of Keyboard will be +reported to getpress, otherwise ignored

    + Attention please! While the events of +the keyboard are taken under control by +init or getmovement

    + do not use the functions or procedures: read, + readln, hfont, hfont8, hpage, inkey +that read keys

    + YOU RISK TO HANG YOUR SYSTEM!

    + }

    + end init

    +

    to ToC + +

    unit getmovement : +procedure(checkMouse, checkKeyboard: +integer);

    + tells which events will be checked:

    + if checkMouse < > 0 then the events of Mouse will be +reported to getpress, otherwise +ignored;

    + if checkKeyboard < > 0 then the events of Keyboard will be +reported to getpress, otherwise ignored

    + Attention please! While the events of the +keyboard are taken under control by +init or getmovement

    + do not use the functions or procedures: read, + readln, hfont, hfont8, hpage, inkey +that read keys

    + YOU RISK TO HANG YOUR SYSTEM!

    + end getmovement;

    +

    to ToC + +

    unit getpress : +function(v,p,h,l,r,c : integer): +Boolean;

    + { v = y coordinate of the cursor,

    + h = x coordinate of the cursor,

    + p = keybord status control_left,control_right, alt, alt_gr, shift_left, shift_right

    + l = code of key pressed

    + r = flags

    + c = buttons pressed (0=none, 1=left, 2=right, 3=both)

    + Nb: the middle button is not taken into account.

    + end getpress

    +

    to ToC + + +

    unit showcursor : +procedure;

    + {the cursor becomes visible and follows the movements of the mouse}

    + end showcursor;

    +

    to ToC + +

    unit hidecursor : +procedure;

    + {the cursor becomes invisible}

    + end hidecursor;

    +

    to ToC
    + +

    end MOUSE;

    + +


    + +

    Enclosed you find a sample program .

    +
    +Program SystemeGraph; 
    +       (* by Frederic Pataud, October 1994 *) 
    +Begin 
    +Pref iiuwgraph block     (* inherit the graphic functions *) 
    + Begin 
    + Pref mouse block	(* inherit the mouse functions *) 
    +
    +
    +(*********************************************************************) 
    +(*                   P r o g r a m  m e   P r i n c i p a l                  *) 
    +(*********************************************************************) 
    +     var v,p,h,i : integer, 
    +       l,r,c : integer, 
    +       rep : arrayof char, 
    +       d : boolean, 
    +       xx,yy : arrayof integer, 
    +       status,code,x,y,flags,button : integer; 
    +    
    +   Begin 
    +      
    +     call gron(0);            (* enter the graphic mode *) 
    +     call init(1,0);            (* initialize the mouse, disregard the keyboard events, check for mouse events *) 
    +      
    +     call showcursor;		(* show cursor *) 
    +     call patern(5,5,635,475,2,0);         (* make a frame around the screen *) 
    +     call outstring(10,10,"x=",2,0); 
    +     call outstring(100,10,"y=",2,0); 
    +     call outstring(10,30,"status = ",2,0); 
    +     call outstring(10,50,"code   = ",2,0); 
    +     call outstring(10,70,"flags  = ",2,0); 
    +     call outstring(10,90,"button = ",2,0); 
    +     call patern(100,210,300,320,3,1);         (* make a rectangle filled in colour 3 *) 
    +
    +     array xx dim (1:6); 
    +     array yy dim (1:6); 
    +     xx(1):=410; yy(1):=10; 
    +     xx(2):=450; yy(2):=30; 
    +     xx(3):=460; yy(3):=50; 
    +     xx(4):=430; yy(4):=80; 
    +     xx(5):=420; yy(5):=40; 
    +     xx(6):=480; yy(6):=30; 
    +     call intens(6,xx,yy,8,1); 		(* show a polygon filled*) 
    +     for i:=1 to 6 
    +      do 
    +       yy(i):=yy(i)+100; 
    +      od; 
    +     call intens(6,xx,yy,15,0);		(* show another polygon empty *) 
    +      
    +     call cirb(500,300,50,40,100,3500,10,0);	(* draw an empty pie or camembert *) 
    +     call cirb(400,400,40,40,600,4000,11,1);     (* draw a filled pie *) 
    +
    +
    +     i:=hfont(100,350,6,-9999999,9999999,500,9,0,15);      (* read integer from a window *) 
    +     call hpage(100,400,10,unpack("Il fait beau dans ma verte campagne"),9,0);   (* show text *) 
    +     rep:=hfont8(100,430,10,80,unpack("tototutu"),9,0,15);		(* read text *) 
    +      
    +     call getmovement(1,1);           (* take into consideration both key events and mouse events *) 
    +      
    +     do 
    +      d:=getpress(v,p,h,l,r,c);		(* ask about an event *) 
    +      if (d) 
    +      then call outstring(10,400,"Event",2,0); 
    +           call patern(80,25,130,100,0,1); 
    +           call track(40,10,v,0,4);		(* print integer *) 
    +           call track(140,10,p,0,4); 
    +           call track(80,30,h,0,4); 
    +           call track(80,50,l,0,4); 
    +           call track(80,70,r,0,4); 
    +           call track(80,90,c,0,4); 
    +           if((h=164 and l=27) or (c=3))                 (* exit if either two buttons were pressed c=3 or Ctrl+Esc key *) 
    +           then exit; 
    +           fi; 
    +      fi; 
    +     od; 
    +     call groff;				(* leave the graphic mode and return to the text mode *) 
    +     writeln("i=",i); 
    +     for i:=lower(rep) to upper(rep) 
    +     do 
    +       write(rep(i)); 
    +     od; 
    +     writeln; 
    +   End 
    + End 
    +End. 
    +
    +

    to ToC +

    +


    +
    GMyAS Last update Sun 7 May +1995
    + + + diff --git a/HTML/iuwgraf4.htm b/HTML/iuwgraf4.htm new file mode 100644 index 0000000..5c332d7 --- /dev/null +++ b/HTML/iuwgraf4.htm @@ -0,0 +1,750 @@ + +iiuwgraph + + +

    unit IIUWGRAPH: class;

    +

    LOGLAN's LOGOa predefined Loglan'82 class

    + +{ this predefined class enables basic graphic operations + for DOS machines based on 486 or 386 processors +}

    + +{this document gives the specification of new version of IIUWGRAPH + class
    + made in October 1994 by Frederic Pataud à Pau}

    +


    +Table of Contents.
    + + +
  • {IIUWGRAPH class} +
      +
    • {PROCEDURES of OVERALL CONTROL} +
        +
      • unit GRON : procedure (i: integer); +
      • unit GROFF : procedure; +
      • unit CLS : procedure; +
      • unit COLOR : procedure(co : integer); +
      • unit STYLE : procedure(styl : integer); +
      • unit BORDER : procedure (background_Colour: integer); +
      • unit PALLET : procedure (nr : integer); +
      +
    • { PROCEDURES CONTROLLING POSITION } +
        +
      • unit MOVE : procedure (x,y :integer); +
      • unit INXPOS : function: integer; +
      • unit INYPOS : function : integer; +
      • unit PUSHXY : procedure; +
      • unit POPXY: procedure; +
      +
    • { PROCEDURES SERVING POINTS and LINES} +
        +
      • unit POINT : procedure(x,y: integer); +
      • unit INPIX : function (x,y : integer) : integer; +
      • unit DRAW : procedure( x,y : integer); +
      • unit intens: procedure(Size :integer; xCoord,yCoord:arrayof integer, +Colour,Filled :integer); +
      • unit cirb {draw a circle} procedure; +
      • unit hfill: procedure( x : integer); +
      • unit vfill: procedure( y : integer); +
      • unit patern: procedure( x1,y1,x2,y2,c,b : integer); +
      +
    • { Procedures operating on bitmaps } +
        +
      • unit GETMAP : function (x,y : integer) : arrayof integer; +
      • unit PUTMAP : procedure ( a: arrayof integer); +
      • unit ORMAP : procedure ( a : arrayof integer); +
      • unit XORMAP : procedure ( a: arrayof integer); +
      +
    • {Procedures operating on characters and strings} +
        +
      • unit outstring: procedure(x,y: integer, s: string, back_col, front_col: + integer); +
      • unit track: procedure( x,y,c,valeur : integer); +
      • unit inkey : function : integer; +
      • unit HASCII : procedure(c: integer); +
      • unit hfont: function( x,y,lg,min,max,default,col_f,col_e,col_c : integer): + integer; +
      • unit HPAGE : procedure(x,y,long: integer, A: arrayof char, back, front: + integer); +
      +
    + +
  • unit MOUSE: class; +
      +
    • unit init: procedure(checkMouse, checkKeyboard: integer); +
    • unit getmovement: procedure(checkMouse, checkKeyboard: + integer); +
    • unit getpress: function(v,p,h,l,r,c : integer): Boolean; +
    • unit showcursor: procedure; +
    • unit hidecursor: procedure; +
    +
  • a sample program +
  • + +
    + + + +{ the early versions of library IIUWGRAPH have been elaborated by + Piotr Carlsson, Miroslawa Milkowska, Janina Jankowska, + Michal Jankowski at Institute of Informatics, + University of Warsaw 1987,

    + and added to Loglan system by Danuta Szczepanska 1987,

    + + the recent versions were done at LITA, Pau,

    + by

    + Pawel Susicki (1991) for Unix,

    + Sebastien Bernard (1992) for ATARI, see a separate document,
    + Eric Becourt et Jerôme Larrieu (1993) for Unix and Xwindows, see a + separate document on Xiiuwgraf , +

    + +

    +fait à Pau, le 15 Novembre 1994, par Andrzej Salwicki, LITA}

    + +{ the predefined class IIUWGRAPH is included in all versions of interpreter of +Loglan, with the exception of the present version of interpreter for +VAX/VMS.}

    +


    +

    +

    +unit IIUWGRAPH: class;
    +   hidden   MaxX, MaxY,  current_X, current_Y, is_graphic_On,       
    +              current_Colour, current_Background_Colour,  current_Style, 
    +              current_Palette,  current_Pattern ; 
    +
    +
    +                
    +   const  MaxX =            
    +          MaxY =            
    +
    +{    the screen's coordinates are 
    +        
    +       (0,0)   ---------------------->   (MaxX,0) 
    +           ¦ 
    +           ¦ 
    +           ¦ 
    +          V 
    +       (0, MaxY)                            (MaxX,MaxY) 
    +
    +}
    + 
    +
    +   var  currentDriver : integer,                     { see NOCARD below }  
    +          current_X, current_Y:  integer         { it is the current position } 
    +          is_graphic_On:  Boolean,	   { evidently tells whether we are in 			
    +	   		graphics mode } 
    +          current_Colour : integer,		{ } 
    +          current_Background_Colour : integer, 
    +          current_Style : integer,		{ } 
    +          current_Palette : integer, 
    +          current_Pattern  
    +
    + +

    unit GRON procedure +(i: integer);

    + { procedure sets the monitor in graphic mode and clears the buffer + of screen. The parameter determines the resolution and the number of + colours.
    +The user should assure that the resolution chosen should correspond to that +which is set by means of command
    +SET go32 drivers {path}< driver.file> < width> < height> < +noColours> +eg.
    +set go32 drivers c:\loglan\svga\drivers\vesa.grn gw 1024 gh 480 nc 256
    +

    An execution of instruction call gron(i) must precede + any of the graphic commands described below.

    +

    +case (i)
    +  {
    +  0 : 640x480x16
    +  1 : 640x480x256
    +  2 : 800x600x16
    +  3 : 800x600x256
    +  4 : 1024x768x16
    +  5 : 1024x768x256
    +  6 : 1280x1024x16
    +  7 : 1280x1024x256
    +  8 : 1600x1280x16
    +  9 : 1600x1280x256
    + }
    +
    } +

    to ToC + +

    unit GROFF procedure;

    + { the procedure sets the monitor in the text mode filling it with + spaces.

    + DO NOT FORGET to set the monitor in the text mode before +you terminate your program

    + }

    +

    to ToC + + +

    unit CLS . +: procedure;

    + { the screen will be cleared and filled with colour 0 }

    +

    to ToC + + + +{ PROCEDURES CONTROLLING THE COLOURS }

    + +

    unit COLOR . : + procedure(co : integer);

    +{ sets current color to co
    + for monochrome displays, 0 means black, non-0 - white
    + for color displays, 0 means background
    + see PALLET

    +}

    +

    to ToC + +

    unit STYLE : + procedure(styl : integer);

    +{ sets style of lines and fill shades to a combination

    + of current color and background color (for mono -

    + white and black, respectively) according to 5 predefined

    + patterns:

    +

    +		0	....
    +		1	****
    +		2	***.
    +		3	**..
    +		4	*.*.
    +		5	*...
    +
    + where '*' means current color, '.' background colour

    +When drawing the segments the subsequent pixels will have colour determined +by cyclic application of style pattern. The first and the last pixels of a segment +will have always current colour.

    +When filling contours the given style will be applied to horizontal lines with even +coordinate. The style for odd lines is determined automatically.

    +The same applies for perpendicular lines.

    +} +

    +

    to ToC + +

    unit BORDER . : +procedure (background_Colour: +integer);

    + +

    { sets actual background color to i ( i = 0,1,...,15 ) }

    + +

    to ToC + +

    unit PALLET : +procedure (nr : integer);

    + {the following line makes an example, it is not valid for, say, +256 colours +

    +the codes of colors are usually i.e. when you have 16 colours, as follows

    + 0 black

    + 1 blue dark

    + 2 green dark

    + 3 turquoise dark

    + 4 red dark

    + 5 violet

    + 6 brown

    + 7 grey light

    + 8 grey dark

    + 9 blue

    + 10 green

    + 11 turquoise

    + 12 red light

    + 13 rose

    + 14 yellow

    + 15 white

    + +

    }

    +

    to ToC + + + +

    { PROCEDURES CONTROLLING POSITION }

    + +

    unit MOVE : +procedure (x,y :integer);

    + { procedure MOVE sets the current position on the screen on the pixel + with coordinates

    + x - column,

    + y - line }

    + { precondition of MOVE:

    + 0*x*MaxX & 0*y*MaxY

    + }

    +

    to ToC + +

    unit INXPOS : +function: integer;

    + { function INXPOS returns the x coordinate of the current position }

    +

    to ToC + + +

    unit INYPOS : +function : integer;

    + { function INYPOS returns the y coordinate of the current position }

    +

    to ToC + + +

    unit PUSHXY : +procedure;

    +{ pushes current position, color & style onto the stack.

    + The stack is kept internally, max depth is 16

    +} +

    +

    to ToC + +

    unit POPXY : +procedure;

    + +{ restores position, color & style from internal stack }

    + +{ Example

    +

    unit  DIAGONAL : procedure;

    + var ix, iy : integer;

    +begin

    + call PUSHXY;

    + ix := INXPOS;

    + iy := INYPOS;

    + call DRAW(ix+10, iy+10);

    + call POPXY

    +end DIAGONAL;

    +

    } +

    +

    to ToC + + +

    { PROCEDURES SERVING POINTS & +LINES}

    + +

    unit POINT : +procedure(x,y: integer);

    +{ moves current position to pixel (x,y) and sets it to the current color +

    + }

    to ToC + +

    +

    unit INPIX : function +(x,y : integer) : integer;

    + {

    + moves to pixel (x,y) and returns its color setting;

    + } +

    to ToC +

    + +

    unit DRAW : +procedure( x,y : integer);

    + {

    + draws a line from current screen position to (x,y);

    + sets current position to (x,y);

    + line is drawn in current color, with both terminal pixels

    + always turned white ( non-background) for non-black

    + ( non-background ) line color.

    + } +

    to ToC +

    +

    unit intens : +procedure(Size :integer; +xCoord,yCoord:arrayof integer, Colour,Filled +:integer);

    + +/* draw a polygon*/ +{ draw a simple, closed polygon of Size points, the edges of the polygon go from +(xCoord[i], yCoord[i]) to (xCoord[i+1], yCoord[i+1]) for i = 1, ..., Size-1 +The colour used will be Colour. The polygon will be filled iff Filled< +> 0. +}

    +

    to ToC +

    +

    unit CIRB : procedure (xi, yi, rx,ry : integer, alfa, beta : real, +cbord, fill : integer);

    + + + { +

    draws a circle (or ellipse, depending on aspect value, see below),

    + optionally filling its interior;

    + does not preserve position;

    + (xi,yi) - are center coordinates,

    + rx - radius in pixels (horizontally),
    + ry - radius in pixels (perpendicularly),

    + alfa, beta - starting & ending angles; if alfa=beta a full

    + circle is drawn; values should be given in radians;

    + cbord - border color,

    + fill - if fill < > 0, interior is filled in current style& color

    + } +

    to ToC +

    +

    unit hfill : +procedure( x : integer);

    + { draw an horizontal line between the current position and

    + (x,currentY) with the current color, after it change the current

    + position to (x, currentY)

    + }

    +

    to ToC + +

    unit vfill : +procedure( y : integer);

    + { draw a vertical line between the current position and

    + (currentX,y) with the current color, after it change the current

    + position to (currentX,y)

    + }

    +

    to ToC + +

    unit patern : +procedure( x1,y1,x2,y2,c,b : +integer);

    + { draw a rectangle between the points (x1,y1) and +(x2,y2) with the

    + color c (the current color is not change). if b=0 then the box +is

    + empty else it is filled.

    + }

    +

    to ToC + +

    { Procedures operating on bitmaps }

    + +

    unit GETMAP : +function (x,y : integer) : arrayof +integer;

    + {saves rectangular area between current position as

    + top left corner and (ix,iy) as bottom right corner,

    + including border lines;

    + position remains unchanged.

    + array of integer should have

    + 4+(rows**columns/8* *coeff)

    + bytes. The coefficient coeff is 1 for Hercules, 2 for CGA, 4 for EGA

    + card.

    + ATTENTION: in DOS 286 environment a bigger size of the array may + necessitate the use of loglan with the option H+, see also +memavail

    + }

    +

    to ToC + +

    unit PUTMAP : +procedure ( a: arrayof +integer);

    + {sets rectangular area of screen pixels to that saved

    + by "getmap" in "iarray";

    + same size is restored, with top left corner in current

    + position;

    + position remains unchanged.

    + } +

    to ToC +

    +

    unit ORMAP : +procedure ( a : arrayof +integer);

    + {same as putmap, but saved bitmap is or'ed into screen

    + rather than just set.

    + } +

    to ToC +

    +

    unit XORMAP : +procedure ( a: +arrayof integer);

    + {same as putmap, but saved bitmap is xor'ed into screen

    + rather than just set.

    + } +

    to ToC +

    + +

    {Procedures operating on characters and strings}

    + +

    unit outstring : +procedure(x,y: integer, s: string, back_col, +front_col: integer);

    + { x, y are the coordinates where to put the string,

    + s is the string to be shown, in front_col colour letters on the +back_col colour background

    + }

    +

    to ToC + +

    unit track +: procedure( x,y,c,valeur : integer); +

    + { write an integer value valeur at the position (x,y) with the +color c. + It does not change the current position nor the current color

    + }

    +

    to ToC + +

    unit inkey + : function : integer;

    + + { returns next character from keyboard buffer;

    + 0 is returned if buffer is empty;

    + special keys are returned as negative numbers;

    + ALT-NUM method may be used for entering character codes

    + above 127 (this makes entering special keys 128-132

    + impossible);

    + if a character is returned, it is also removed

    + from the buffer, so MS-DOS will not see it (CTRL-C!);

    + typeahead is allowed, echo is suppressed.

    + }

    +

    to ToC + +

    unit HASCII : procedure(c: +integer);

    + {'xor's the character = chr(c) in a 8*8 box with top left corner

    + in the current position;

    + moves current position by (8,0);

    + call hascii(0)- sets complete box to black ( =background ),

    + with no change in position.

    +} +

    to ToC +

    + + +

    unit hfont +: function( +x,y,lg,min,max,default,col_f,col_e,col_c : integer): + integer;

    + + { arrange a small 1 line window for reading an integer value +from this window, +the position of the window corner is (x, y), +the length of the window is lg characters, +the value v should be greater than min and smaller than max, +the default value read is default,

    +the colour of the window is col_f,
    +the colour of the digits is col_e,
    +the colour of cursor is col_c

    + + reads in graphic mode an integer in the window which begins at the (x,y) + position, window is lg caracteres long. the maximum length of the

    + integer that is read is 10. there is a default value, a minimum value + and a maximum value. the window is drawn with the col_f color, the + cursor is in the col_c color and the integer is writing in the col_e

    + color. you can use 0..9,+,-,backspace,escape and return keys. }

    +

    to ToC + + +

    unit HPAGE : procedure(x,y,long: +integer, A: arrayof char, back, front: integer);

    + { this procedure arranges a 1-line high window in position x,y of +length long in which a portion of text A is shown in colour +front on the background colour back.

    + Making use of keys controlling the cursor {left, right, PgUp, PgDn}

    + the user can scroll the text (horizontally) in the window. Pressing the + Enter key terminates the procedure}

    +

    to ToC + +

    end IIUWGRAPH;

    + + + +


    +

    unit MOUSE .: +class;

    +


    +
    { init -lors de l'initialisation de la souris, on peut définir les événements qui vont faire réagir la +fonction getpress; le premier et le deuxième paramètre représentent respectivement la souris et le clavier, si une +valeur non nulle est donnée comme paramètre alors getpress réagira à l'événement.

    + + Une paire (1,1) va permettre de prendre en compte à la fois les événements de la souris et ceux du clavier; +une paire (1,0) quand à elle ne prendra en compte que la souris. Pour une plus grande souplesse d'utilisation, il est +possible lors du programme, après l'initalisation, de changer cette prise en compte, cela se fera par l'appel de la +procedure getmovement, procédure ayant les mêmes paramètres (avec le même ordre) que la fonction +init.

    + + Pour detecter les événements, on utilisa la fonction getpress, qui retourne un booléen indiquant la +présence ou l'absence d'événement (respectivement les valeurs true et false). Il est bon de noter qu'ainsi définie la +fonction getpress n'est pas bloquante. Les paramètres en retour sont soit nuls (pas d'événement) soit +correspondent:

    + + bool:=getpress(v,p,h,l,r,c : integer);

    + v = position en y de la souris

    + p = keyboard status (Touche control_left,control_right, alt, alt_gr, shift_left, shift_right)

    + h = position en x de la souris

    + l = touche clavier

    + r = flags

    + c = boutons de la souris (0=aucun, 1=gauche, 2=droite, 3=gauche et droite)

    + Nb: le bouton central n'est pas géré.

    + +NOTEZ BIEN! Lorsque les événements du clavier sont pris en compte dans le gestionnaire, il ne faut +pas utiliser les fonctions d'entrées clavier readl, readln, hfont, hfont8, hpage, inkey,...) sous peine de +plantage de l'ordinateur.

    +}

    +
    +

    +

    unit init +: procedure(checkMouse, +checkKeyboard: integer);

    + { initializes the Mouse driver.

    + tells which events will be checked:

    + if checkMouse < > 0 then the events of Mouse will be reported to getpress, see below otherwise +ignored;

    + if checkKeyboard < > 0 then the events of Keyboard will be reported to getpress, otherwise ignored

    + Attention please! While the events of the keyboard are taken under control by +init or getmovement

    + do not use the functions or procedures: read, readln, hfont, hfont8, hpage, inkey +that read keys

    + YOU RISK TO HANG YOUR SYSTEM!

    + }

    + end init

    +

    to ToC + +

    unit getmovement : +procedure(checkMouse, checkKeyboard: +integer);

    + tells which events will be checked:

    + if checkMouse < > 0 then the events of Mouse will be reported to getpress, see below otherwise +ignored;

    + if checkKeyboard < > 0 then the events of Keyboard will be reported to getpress, otherwise ignored

    + Attention please! While the events of the keyboard are taken under control by +init or getmovement

    + do not use the functions or procedures: read, readln, hfont, hfont8, hpage, inkey +that read keys

    + YOU RISK TO HANG YOUR SYSTEM!

    + end getmovement;

    +

    to ToC + +

    unit getpress : +function(v,p,h,l,r,c : integer): +Boolean;

    + { v = y coordinate of the cursor,

    + h = x coordinate of the cursor,

    + p = keybord status control_left,control_right, alt, alt_gr, shift_left, shift_right

    + l = code of key pressed

    + r = flags

    + c = buttons pressed (0=aucun, 1=gauche, 2=droite, 3=gauche et droite)

    + Nb: the middle button is not taken into account.

    + end getpress

    +

    to ToC + + +

    unit showcursor : +procedure;

    + {the cursor becomes visible and follows the movements of the mouse}

    + end showcursor;

    +

    to ToC + +

    unit hidecursor : +procedure;

    + {the cursor becomes invisible}

    + end hidecursor;

    +

    to ToC
    + +

    end MOUSE;

    + +


    + +

    Enclosed you find a sample program .

    +
    +Program SystemeGraph; 
    +       (* by Frederic Pataud, October 1994 *) 
    +Begin 
    +Pref iiuwgraph block     (* inherit the graphic functions *) 
    + Begin 
    + Pref mouse block	(* inherit the mouse functions *) 
    +
    +
    +(*********************************************************************) 
    +(*                   P r o g r a m  m e   P r i n c i p a l                  *) 
    +(*********************************************************************) 
    +     var v,p,h,i : integer, 
    +       l,r,c : integer, 
    +       rep : arrayof char, 
    +       d : boolean, 
    +       xx,yy : arrayof integer, 
    +       status,code,x,y,flags,button : integer; 
    +    
    +   Begin 
    +      
    +     call gron(0);            (* enter the graphic mode *) 
    +     call init(1,0);            (* initialize the mouse, disregard the keyboard events, check for mouse events *) 
    +      
    +     call showcursor;		(* show cursor *) 
    +     call patern(5,5,635,475,2,0);         (* make a frame around the screen *) 
    +     call outstring(10,10,"x=",2,0); 
    +     call outstring(100,10,"y=",2,0); 
    +     call outstring(10,30,"status = ",2,0); 
    +     call outstring(10,50,"code   = ",2,0); 
    +     call outstring(10,70,"flags  = ",2,0); 
    +     call outstring(10,90,"button = ",2,0); 
    +     call patern(100,210,300,320,3,1);         (* make a rectangle filled in colour 3 *) 
    +
    +     array xx dim (1:6); 
    +     array yy dim (1:6); 
    +     xx(1):=410; yy(1):=10; 
    +     xx(2):=450; yy(2):=30; 
    +     xx(3):=460; yy(3):=50; 
    +     xx(4):=430; yy(4):=80; 
    +     xx(5):=420; yy(5):=40; 
    +     xx(6):=480; yy(6):=30; 
    +     call intens(6,xx,yy,8,1); 		(* show a polygon filled*) 
    +     for i:=1 to 6 
    +      do 
    +       yy(i):=yy(i)+100; 
    +      od; 
    +     call intens(6,xx,yy,15,0);		(* show another polygon empty *) 
    +      
    +     call cirb(500,300,50,40,100,3500,10,0);	(* draw an empty pie or camembert *) 
    +     call cirb(400,400,40,40,600,4000,11,1);     (* draw a filled pie *) 
    +
    +
    +     i:=hfont(100,350,6,-9999999,9999999,500,9,0,15);      (* read integer from a window *) 
    +     call hpage(100,400,10,unpack("Il fait beau dans ma verte campagne"),9,0);   (* show text *) 
    +     rep:=hfont8(100,430,10,80,unpack("tototutu"),9,0,15);		(* read text *) 
    +      
    +     call getmovement(1,1);           (* take into consideration both key events and mouse events *) 
    +      
    +     do 
    +      d:=getpress(v,p,h,l,r,c);		(* ask about an event *) 
    +      if (d) 
    +      then call outstring(10,400,"Event",2,0); 
    +           call patern(80,25,130,100,0,1); 
    +           call track(40,10,v,0,4);		(* print integer *) 
    +           call track(140,10,p,0,4); 
    +           call track(80,30,h,0,4); 
    +           call track(80,50,l,0,4); 
    +           call track(80,70,r,0,4); 
    +           call track(80,90,c,0,4); 
    +           if((h=164 and l=27) or (c=3))                 (* exit if either two buttons were pressed c=3 or Ctrl+Esc key *) 
    +           then exit; 
    +           fi; 
    +      fi; 
    +     od; 
    +     call groff;				(* leave the graphic mode and return to the text mode *) 
    +     writeln("i=",i); 
    +     for i:=lower(rep) to upper(rep) 
    +     do 
    +       write(rep(i)); 
    +     od; 
    +     writeln; 
    +   End 
    + End 
    +End. 
    +
    +

    to ToC +

    +


    +
    GMyAS Last update Sun 7 May +1995
    + + + diff --git a/HTML/iuwgraf5.htm b/HTML/iuwgraf5.htm new file mode 100644 index 0000000..aefad61 --- /dev/null +++ b/HTML/iuwgraf5.htm @@ -0,0 +1,735 @@ + +iiuwgraph +

    unit IIUWGRAPH: class;

    +

    a predefined Loglan'82 class LOGLAN

    + +{ this predefined class enables basic graphic operations + for DOS machines based on 486 or 386 processors +}

    + +{this document gives the specification of new version of IIUWGRAPH + class
    + made in October 1994 by Frederic Pataud à Pau}

    +


    +Table of Contents.
    + + + + +
    + + + +{ the early versions of library IIUWGRAPH have been elaborated by + Piotr Carlsson, Miroslawa Milkowska, Janina Jankowska, + Michal Jankowski at Institute of Informatics, + University of Warsaw 1987,

    + and added to Loglan system by Danuta Szczepanska 1987,

    + + the recent versions were done at LITA, Pau,

    + by

    + Pawel Susicki (1991) for Unix,

    + Sebastien Bernard (1992) for ATARI, see a separate document,
    + Eric Becourt et Jerôme Larrieu (1993) for Unix and Xwindows, see a + separate document on Xiiuwgraf , +

    + +

    +fait à Pau, le 15 Novembre 1994, par Andrzej Salwicki, LITA}

    + +{ the predefined class IIUWGRAPH is included in all versions of interpreter of +Loglan, with the exception of the present version of interpreter for +VAX/VMS.}

    +


    +

    +

    +hidden   MaxX, MaxY,  current_X, current_Y, is_graphic_On,       
    +              current_Colour, current_Background_Colour,  current_Style, 
    +              current_Palette,  current_Pattern ; 
    +
    +
    +                
    +const  MaxX =            
    +          MaxY =            
    +
    +{    the screen's coordinates are 
    +        
    +       (0,0)   ---------------------->   (MaxX,0) 
    +           ¦ 
    +           ¦ 
    +           ¦ 
    +          V 
    +       (0, MaxY)                            (MaxX,MaxY) 
    +
    +}
    + 
    +
    +var  currentDriver : integer,                     { see NOCARD below }  
    +       current_X, current_Y:  integer         { it is the current position } 
    +       is_graphic_On:  Boolean,	   { evidently tells whether we are in 			
    +			graphics mode } 
    +       current_Colour : integer,		{ } 
    +       current_Background_Colour : integer, 
    +       current_Style : integer,		{ } 
    +       current_Palette : integer, 
    +       current_Pattern  
    +
    +

    +

    unit GRON procedure +(i: integer);

    + { procedure sets the monitor in graphic mode and clears the buffer + of screen. The parameter determines the resolution and the number of + colours.
    +The user should assure that the resolution chosen should correspond to that +which is set by means of command
    +SET go32 drivers {path}< driver.file> < width> < height> < +noColours> +eg.
    +set go32 drivers c:\loglan\svga\drivers\vesa.grn gw 1024 gh 480 nc 256
    +

    An execution of instruction call gron(i) must precede + any of the graphic commands described below.

    +

    +case (i)
    +  {
    +  0 : 640x480x16
    +  1 : 640x480x256
    +  2 : 800x600x16
    +  3 : 800x600x256
    +  4 : 1024x768x16
    +  5 : 1024x768x256
    +  6 : 1280x1024x16
    +  7 : 1280x1024x256
    +  8 : 1600x1280x16
    +  9 : 1600x1280x256
    + }
    +
    +

    to ToC + +

    unit GROFF procedure;

    + { the procedure sets the monitor in the text mode filling it with + spaces.

    + DO NOT FORGET to set the monitor in the text mode before +you terminate your program

    + }

    +

    to ToC + + +

    unit CLS . +: procedure;

    + { the screen will be cleared and filled with colour 0 }

    +

    to ToC

    + + + +

    { PROCEDURES CONTROLLING THE COLOURS }

    +

    + +

    unit COLOR . : + procedure(co : integer);

    +{ sets current color to co
    + for monochrome displays, 0 means black, non-0 - white
    + for color displays, 0 means background
    + see PALLET

    +}

    +

    to ToC + +

    unit STYLE : + procedure(styl : integer);

    +{ sets style of lines and fill shades to a combination

    + of current color and background color (for mono -

    + white and black, respectively) according to 5 predefined

    + patterns:

    +

    +		0	....
    +		1	****
    +		2	***.
    +		3	**..
    +		4	*.*.
    +		5	*...
    +
    + where '*' means current color, '.' background colour

    +When drawing the segments the subsequent pixels will have colour determined +by cyclic application of style pattern. The first and the last pixels of a segment +will have always current colour.

    +When filling contours the given style will be applied to horizontal lines with even +coordinate. The style for odd lines is determined automatically.

    +The same applies for perpendicular lines.

    +} +

    +

    to ToC + +

    unit BORDER . : +procedure (background_Colour: +integer);

    + +

    { sets actual background color to i ( i = 0,1,...,15 ) }

    + +

    to ToC + +

    unit PALLET : +procedure (nr : integer);

    + {the following line makes an example, it is not valid for, say, +256 colours +

    +the codes of colors are usually i.e. when you have 16 colours, as follows

    +

    +		0	black
    +		1	blue dark
    +		2	green dark
    +		3	turquoise dark
    +		4	red dark
    +		5	violet
    +		6	brown
    +		7	grey light
    +		8	grey dark	 
    +		9	blue
    +		10	green
    +		11	turquoise
    +		12	red light
    +		13	rose
    +		14	yellow
    +		15	white
    +
    } +

    +

    to ToC + + + +

    { PROCEDURES CONTROLLING POSITION }

    + +

    unit MOVE : +procedure (x,y :integer);

    + { procedure MOVE sets the current position on the screen on the pixel + with coordinates

    + x - column,

    + y - line }

    + { precondition of MOVE: + 0*x*MaxX & 0*y*MaxY + }

    +

    to ToC + +

    unit INXPOS : +function: integer;

    + { function INXPOS returns the x coordinate of the current position }

    +

    to ToC + + +

    unit INYPOS : +function : integer;

    + { function INYPOS returns the y coordinate of the current position }

    +

    to ToC + + +

    unit PUSHXY : +procedure;

    +{ pushes current position, color & style onto the stack.

    + The stack is kept internally, max depth is 16

    +} +

    +

    to ToC + +

    unit POPXY : +procedure;

    + +{ restores position, color & style from internal stack }

    + +{ Example

    +

    unit  DIAGONAL : procedure;
    +    var ix, iy : integer;
    +begin
    +	call PUSHXY;
    +	ix := INXPOS;
    +	iy := INYPOS;
    +	call DRAW(ix+10, iy+10);
    +	call POPXY
    +end DIAGONAL;
    +
    } +

    +

    to ToC + + +

    { PROCEDURES SERVING POINTS & +LINES}

    + +

    unit POINT : +procedure(x,y: integer);

    +{ moves current position to pixel (x,y) and sets it to the current color +

    + }

    to ToC + +

    +

    unit INPIX : function +(x,y : integer) : integer;

    + {

    + moves to pixel (x,y) and returns its color setting;

    + } +

    to ToC +

    + +

    unit DRAW : +procedure( x,y : integer);

    + {

    + draws a line from current screen position to (x,y);

    + sets current position to (x,y);

    + line is drawn in current color, with both terminal pixels

    + always turned white ( non-background) for non-black

    + ( non-background ) line color.

    + } +

    to ToC +

    +

    unit intens : +procedure(Size :integer; +xCoord,yCoord:arrayof integer, Colour,Filled +:integer);

    + +/* draw a polygon*/ +{ draw a simple, closed polygon of Size points, the edges of the polygon go from +(xCoord[i], yCoord[i]) to (xCoord[i+1], yCoord[i+1]) for i = 1, ..., Size-1 +The colour used will be Colour. The polygon will be filled iff Filled< +> 0. +}

    +

    to ToC +

    +

    unit CIRB : procedure (xi, yi, rx,ry : integer, alfa, beta : real, +cbord, fill : integer);

    + + + { +

    draws a circle (or ellipse, depending on aspect value, see below),

    + optionally filling its interior;

    + does not preserve position;

    + (xi,yi) - are center coordinates,

    + rx - radius in pixels (horizontally),
    + ry - radius in pixels (perpendicularly),

    + alfa, beta - starting & ending angles; if alfa=beta a full

    + circle is drawn; values should be given in radians;

    + cbord - border color,

    + fill - if fill < > 0, interior is filled in current style& color

    + } +

    to ToC +

    +

    unit hfill : +procedure( x : integer);

    + { draw an horizontal line between the current position and

    + (x,currentY) with the current color, after it change the current

    + position to (x, currentY)

    + }

    +

    to ToC + +

    unit vfill : +procedure( y : integer);

    + { draw a vertical line between the current position and

    + (currentX,y) with the current color, after it change the current

    + position to (currentX,y)

    + }

    +

    to ToC + +

    unit patern : +procedure( x1,y1,x2,y2,c,b : +integer);

    + { draw a rectangle between the points (x1,y1) and +(x2,y2) with the

    + color c (the current color is not change). if b=0 then the box +is

    + empty else it is filled.

    + }

    +

    to ToC + +

    { Procedures operating on bitmaps }

    + +

    unit GETMAP : +function (x,y : integer) : arrayof +integer;

    + {saves rectangular area between current position as

    + top left corner and (ix,iy) as bottom right corner,

    + including border lines;

    + position remains unchanged.

    + array of integer should have

    + 4+(rows**columns/8* *coeff)

    + bytes. The coefficient coeff is 1 for Hercules, 2 for CGA, 4 for EGA

    + card.

    + ATTENTION: in DOS 286 environment a bigger size of the array may + necessitate the use of loglan with the option H+, see also +memavail

    + }

    +

    to ToC + +

    unit PUTMAP : +procedure ( a: arrayof +integer);

    + {sets rectangular area of screen pixels to that saved

    + by "getmap" in "iarray";

    + same size is restored, with top left corner in current

    + position;

    + position remains unchanged.

    + } +

    to ToC +

    +

    unit ORMAP : +procedure ( a : arrayof +integer);

    + {same as putmap, but saved bitmap is or'ed into screen

    + rather than just set.

    + } +

    to ToC +

    +

    unit XORMAP : procedure ( a: +arrayof integer);

    + {same as putmap, but saved bitmap is xor'ed into screen

    + rather than just set.

    + } +

    to ToC +

    + +

    {Procedures operating on characters and strings}

    + +

    unit outstring : +procedure(x,y: integer, s: string, back_col, +front_col: integer);

    + { x, y are the coordinates where to put the string,

    + s is the string to be shown, in front_col colour letters on the +back_col colour background

    + }

    +

    to ToC + +

    unit track +: procedure( x,y,c,valeur : integer); +

    + { write an integer value valeur at the position (x,y) with the +color c. + It does not change the current position nor the current color

    + }

    +

    to ToC + +

    unit inkey + : function : integer;

    + + { returns next character from keyboard buffer;

    + 0 is returned if buffer is empty;

    + special keys are returned as negative numbers;

    + ALT-NUM method may be used for entering character codes

    + above 127 (this makes entering special keys 128-132

    + impossible);

    + if a character is returned, it is also removed

    + from the buffer, so MS-DOS will not see it (CTRL-C!);

    + typeahead is allowed, echo is suppressed.

    + }

    +

    to ToC + +

    unit HASCII : procedure(c: +integer);

    + {'xor's the character = chr(c) in a 8*8 box with top left corner

    + in the current position;

    + moves current position by (8,0);

    + call hascii(0)- sets complete box to black ( =background ),

    + with no change in position.

    +} +

    to ToC +

    + + +

    unit hfont +: function( +x,y,lg,min,max,default,col_f,col_e,col_c : integer): + integer;

    + + { arrange a small 1 line window for reading an integer value +from this window, +the position of the window corner is (x, y), +the length of the window is lg characters, +the value v should be greater than min and smaller than max, +the default value read is default,

    +the colour of the window is col_f,
    +the colour of the digits is col_e,
    +the colour of cursor is col_c

    + + reads in graphic mode an integer in the window which begins at the (x,y) + position, window is lg caracteres long. the maximum length of the

    + integer that is read is 10. there is a default value, a minimum value + and a maximum value. the window is drawn with the col_f color, the + cursor is in the col_c color and the integer is writing in the col_e

    + color. you can use 0..9,+,-,backspace,escape and return keys. }

    +

    to ToC + + +

    unit HPAGE : procedure(x,y,long: +integer, A: arrayof char, back, front: integer);

    + { this procedure arranges a 1-line high window in position x,y of +length long in which a portion of text A is shown in colour +front on the background colour back.

    + Making use of keys controlling the cursor {left, right, PgUp, PgDn}

    + the user can scroll the text (horizontally) in the window. Pressing the + Enter key terminates the procedure}

    +

    to ToC + +

    end IIUWGRAPH;

    + + + +


    +

    unit MOUSE .: +class;

    +


    +
    { init -lors de l'initialisation de la souris, on peut définir les événements qui vont faire réagir la +fonction getpress; le premier et le deuxième paramètre représentent respectivement la souris et le clavier, si une +valeur non nulle est donnée comme paramètre alors getpress réagira à l'événement.

    + + Une paire (1,1) va permettre de prendre en compte à la fois les événements de la souris et ceux du clavier; +une paire (1,0) quand à elle ne prendra en compte que la souris. Pour une plus grande souplesse d'utilisation, il est +possible lors du programme, après l'initalisation, de changer cette prise en compte, cela se fera par l'appel de la +procedure getmovement, procédure ayant les mêmes paramètres (avec le même ordre) que la fonction +init.

    + + Pour detecter les événements, on utilisa la fonction getpress, qui retourne un booléen indiquant la +présence ou l'absence d'événement (respectivement les valeurs true et false). Il est bon de noter qu'ainsi définie la +fonction getpress n'est pas bloquante. Les paramètres en retour sont soit nuls (pas d'événement) soit +correspondent:

    + + bool:=getpress(v,p,h,l,r,c : integer);

    + v = position en y de la souris

    + p = keyboard status (Touche control_left,control_right, alt, alt_gr, shift_left, shift_right)

    + h = position en x de la souris

    + l = touche clavier

    + r = flags

    + c = boutons de la souris (0=aucun, 1=gauche, 2=droite, 3=gauche et droite)

    + Nb: le bouton central n'est pas géré.

    + +NOTEZ BIEN! Lorsque les événements du clavier sont pris en compte dans le gestionnaire, il ne faut +pas utiliser les fonctions d'entrées clavier readl, readln, hfont, hfont8, hpage, inkey,...) sous peine de +plantage de l'ordinateur.

    +}

    +
    +

    +

    unit init +: procedure(checkMouse, +checkKeyboard: integer);

    + { initializes the Mouse driver.

    + tells which events will be checked:

    + if checkMouse < > 0 then the events of Mouse will be reported to getpress, see below otherwise +ignored;

    + if checkKeyboard < > 0 then the events of Keyboard will be reported to getpress, otherwise ignored

    + Attention please! While the events of the keyboard are taken under control by +init or getmovement

    + do not use the functions or procedures: read, readln, hfont, hfont8, hpage, inkey +that read keys

    + YOU RISK TO HANG YOUR SYSTEM!

    + }

    + end init

    +

    to ToC + +

    unit getmovement : +procedure(checkMouse, checkKeyboard: +integer);

    + tells which events will be checked:

    + if checkMouse < > 0 then the events of Mouse will be reported to getpress, see below otherwise +ignored;

    + if checkKeyboard < > 0 then the events of Keyboard will be reported to getpress, otherwise ignored

    + Attention please! While the events of the keyboard are taken under control by +init or getmovement

    + do not use the functions or procedures: read, readln, hfont, hfont8, hpage, inkey +that read keys

    + YOU RISK TO HANG YOUR SYSTEM!

    + end getmovement;

    +

    to ToC + +

    unit getpress : +function(v,p,h,l,r,c : integer): +Boolean;

    + { v = y coordinate of the cursor,

    + h = x coordinate of the cursor,

    + p = keybord status control_left,control_right, alt, alt_gr, shift_left, shift_right

    + l = code of key pressed

    + r = flags

    + c = buttons pressed (0=aucun, 1=gauche, 2=droite, 3=gauche et droite)

    + Nb: the middle button is not taken into account.

    + end getpress

    +

    to ToC + + +

    unit showcursor : +procedure;

    + {the cursor becomes visible and follows the movements of the mouse}

    + end showcursor;

    +

    to ToC + +

    unit hidecursor : +procedure;

    + {the cursor becomes invisible}

    + end hidecursor;

    +

    to ToC
    + +

    end MOUSE;

    + +


    + +

    Enclosed you find a sample program .

    +
    +Program SystemeGraph; 
    +       (* by Frederic Pataud, October 1994 *) 
    +Begin 
    +Pref iiuwgraph block     (* inherit the graphic functions *) 
    + Begin 
    + Pref mouse block	(* inherit the mouse functions *) 
    +
    +
    +(*********************************************************************) 
    +(*                   P r o g r a m  m e   P r i n c i p a l                  *) 
    +(*********************************************************************) 
    +     var v,p,h,i : integer, 
    +       l,r,c : integer, 
    +       rep : arrayof char, 
    +       d : boolean, 
    +       xx,yy : arrayof integer, 
    +       status,code,x,y,flags,button : integer; 
    +    
    +   Begin 
    +      
    +     call gron(0);            (* enter the graphic mode *) 
    +     call init(1,0);            (* initialize the mouse, disregard the keyboard events, check for mouse events *) 
    +      
    +     call showcursor;		(* show cursor *) 
    +     call patern(5,5,635,475,2,0);         (* make a frame around the screen *) 
    +     call outstring(10,10,"x=",2,0); 
    +     call outstring(100,10,"y=",2,0); 
    +     call outstring(10,30,"status = ",2,0); 
    +     call outstring(10,50,"code   = ",2,0); 
    +     call outstring(10,70,"flags  = ",2,0); 
    +     call outstring(10,90,"button = ",2,0); 
    +     call patern(100,210,300,320,3,1);         (* make a rectangle filled in colour 3 *) 
    +
    +     array xx dim (1:6); 
    +     array yy dim (1:6); 
    +     xx(1):=410; yy(1):=10; 
    +     xx(2):=450; yy(2):=30; 
    +     xx(3):=460; yy(3):=50; 
    +     xx(4):=430; yy(4):=80; 
    +     xx(5):=420; yy(5):=40; 
    +     xx(6):=480; yy(6):=30; 
    +     call intens(6,xx,yy,8,1); 		(* show a polygon filled*) 
    +     for i:=1 to 6 
    +      do 
    +       yy(i):=yy(i)+100; 
    +      od; 
    +     call intens(6,xx,yy,15,0);		(* show another polygon empty *) 
    +      
    +     call cirb(500,300,50,40,100,3500,10,0);	(* draw an empty pie or camembert *) 
    +     call cirb(400,400,40,40,600,4000,11,1);     (* draw a filled pie *) 
    +
    +
    +     i:=hfont(100,350,6,-9999999,9999999,500,9,0,15);      (* read integer from a window *) 
    +     call hpage(100,400,10,unpack("Il fait beau dans ma verte campagne"),9,0);   (* show text *) 
    +     rep:=hfont8(100,430,10,80,unpack("tototutu"),9,0,15);		(* read text *) 
    +      
    +     call getmovement(1,1);           (* take into consideration both key events and mouse events *) 
    +      
    +     do 
    +      d:=getpress(v,p,h,l,r,c);		(* ask about an event *) 
    +      if (d) 
    +      then call outstring(10,400,"Event",2,0); 
    +           call patern(80,25,130,100,0,1); 
    +           call track(40,10,v,0,4);		(* print integer *) 
    +           call track(140,10,p,0,4); 
    +           call track(80,30,h,0,4); 
    +           call track(80,50,l,0,4); 
    +           call track(80,70,r,0,4); 
    +           call track(80,90,c,0,4); 
    +           if((h=164 and l=27) or (c=3))                 (* exit if either two buttons were pressed c=3 or Ctrl+Esc key *) 
    +           then exit; 
    +           fi; 
    +      fi; 
    +     od; 
    +     call groff;				(* leave the graphic mode and return to the text mode *) 
    +     writeln("i=",i); 
    +     for i:=lower(rep) to upper(rep) 
    +     do 
    +       write(rep(i)); 
    +     od; 
    +     writeln; 
    +   End 
    + End 
    +End. 
    +
    +

    to ToC +

    +


    +
    GMyAS Last update Sun 7 May +1995
    + + + diff --git a/HTML/klasyiob.htm b/HTML/klasyiob.htm new file mode 100644 index 0000000..d906c80 --- /dev/null +++ b/HTML/klasyiob.htm @@ -0,0 +1,590 @@ + + + + + +Klasy i obiekty + + + + + + + +

    Chapter 1: Classes +and objects

    + +

    +The still growing fascination of object-oriented programming dates +to 1989 when several software companies offered compilers of object-oriented +Pascal's, of C (C++ and Objective C) etc. We welcome this recognition +of merits of object-oriented programming with satisfaction. Let +us recall that classes and objects have more than 24 years of +tradition. They appeared in Simula-67. Along the line of R&D +concerning classes and their objects one can find the results +achieved at the Institute of Informatics, University of Warsaw. +We shall present many of them during these lectures. +

    +Notion of object has its roots in the well known structure of +an Algol and Pascal-like program. +

    +Let us begin with the notion of module. In a program one can indicate +several modules. The whole program is a module, every procedure +and function declared in a program is a module too. +

    +In the language Loglan we have more kinds of modules: +

    + +

    +Let us look at the most external module of a program +

    +      _______________________ 
    +      |program name (...)   |
    +      |                     |    This a module.
    +      | <declarations> e.g. |    (It can contain other modules) 
    +      | var x,y:real,a:bool;|
    +      |                     |
    +      |begin                |
    +      |                     |
    +      | <instructions> e.g. |
    +      | x:=x+y;             |
    +      | a:=x*x<y;           |
    +      | if not a then ...fi;|
    +      | while ...           |
    +      | do                  |
    +      |   ...               |
    +      | od                  |
    +      |                     |
    +      |end                  |
    +      |_____________________|
    +
    + +

    +During an execution of a program the so called activation record +of the above module is allocated in a memory. This is a prototype +of the notion of object. +

    +    _________________________
    +    |memory of data         |
    +    |                       |
    +    | x real  0.5           |
    +R   | y real -1.17          |    This is an activation record,
    +A   | a bool  true          |    sometimes called a dynamic ins-
    +M   | ..................... |    tance of the (program) module.
    +    |memory of instructions |
    +m   | x:=x+y;               |
    +e   | a:=x*x<y;             |
    +m   | if not a then ... fi; |
    +o   | while ...             |
    +r   | do                    |
    +y   |   ...                 |
    +    | od                    |
    +    |_______________________|
    +
    + +

    +Object-oriented programming develops the above remarks and enriches +the image the reader could build from them. In particular, object-oriented +programming requires more frames and assumes a wider spectrum +of the types of frames. Objects are just one type of frames appearing +in programming. +

    +More frames! Where they are coming from? Can we recognize them +in our Pascal practice? Yes, they arise during execution of procedure +statements. How? They are known under the name of activation records +or dynamic instances of procedures. +

    +An example, a snapshot of program's execution may look like: +

    +The above picture is a snapshot of an execution of the main program +taken in the moment when in the main program we executed a call +g procedure instruction, which caused the creation of an activation +record for g and its execution, which in turn executed a call +f procedure instruction, which caused the creation of (1st) +instance of an activation record for f procedure and ... +

    +   __________________________________________________
    +   |                                   ___________  |
    + __|______________       _____________|____      |  |        
    + | activ.rec f   |       | activ.rec. g   |      |  |
    + |               ÆÍÍÍÍÍ>͵                |      |  |
    + | (1st instance)|       | (1st instance) |      |  |
    + |               |       |                |     ____________
    + |               |       | ______________ ====> | Main     |
    + | ____________  |       |                |     |          |
    + |  ...          |       | call f         |     |f: proc   |
    + |  call f       |       |                |     |          |
    + |               |       |                |     |g: proc   |
    + |               |       |                |     |          |
    + -----------------       ------------------     |_________ |
    +   ^                                            |          |
    +   |       _________________________________>___|call g    |
    + ________________       __________________      |          |
    +| activ.rec. f   |     | activ.rec. f    ÃÄÄÄÄ>Ä´          |
    +|                ÆÍ<ÍÍ͵                 |      ÀÄÄÄÄÄÄÄÄÄÄÙ
    +| (2nd instance) |     | (3rd instance)  |
    +|                |     |                 |
    +| _____________  |     |                 |
    +|                |     |                 |
    +|  call f        |     |   ...           |
    +|                |     |                 |
    +|________________|     |_________________|
    +
    + +

    +The instance of main program is the static father of all remaining +activation records. This may be denoted by single lines (static +links) leading to the leftmost object. A static father of an object +is to be searched when the processor finds an identifier e.g. +a variable which is non-local for a currently executed object. +This in turn may lead to further searches along the path of static +links. In every snapshot the set of objects together with the +set of all static links creates a tree. Every edge of this graph +corresponds to the tree structure of module nesting in an obvious +way. +

    +Another kind of arrows (double lines) leads from an object to +its dynamic father i.e. to the object in which processor subsumes +the execution of instructions when all the instructions of a current +object are executed to the end. The graph structure +of objects and dynamic links differs from the previous one and +shows "who called who". Making use of our Pascal experience +we would like to assert it is a straight line structure. Later +we shall see that objects and coroutines enrich and complicate +the picture. +

    +Let us think of a scenario for an activation record of +a procedure. +

    +About Simula-67
    +
    The origins of object oriented programming go back to 1967 +when O.-J.Dahl, K.Nygaard and B.Myhrhaug defined the language +Simula-67. [books: SIMULAbegin by G.Birtwistle, O.J.Dahl, +Auerbach Publ. and Simula 67 by W.M.Bartol, H.Oktaba, PWN Publ. +are worth reading]. +

    +about class
    +
    General structure of a class module is as follows: +

    +   unit <name_of_class >:  class (<formal parameters>);
    +      <local declarations
    +        of variables, procedures, functions and classes! >
    +   begin 
    +      <instructions>
    +   end <name_of_class >
    +
    + +

    +Example +

    +unit circle :  class (center: point, radius: real);
    +unit intersects: function (c: circle): line;
    +{the function returns the line which passes through the intersection points of this circle object and the c circle object, NOTE! it might return none if the two circles have no common points, see how it is solved below }...
    +end intersects; 
    +begin 
    +if r=0 then raise SignalNoCircle fi
    +end circle
    +
    + +

    +Let us remark that the syntactic difference between a procedure +declaration and class declaration is little: the keyword procedure +is replaced by another keyword class. However, the semantics +is entirely different as it will be seen from the diagram-scenario +below. +

    +declaration of variables of type class
    +
    One can assume that every declaration of a class introduces +a new type, for it enables declarations of variables like: +

    +   var x : circle
    +
    + +

    +objects
    +Objects of classes can be generated by means of expressions (object +generator) of the form
    +new KLASA(actual_parameters>
    +and stored in variables
    +k:= new KLASA(actual_paramts)
    +One module of a class can serve as a pattern for many objects +
    +x:= new circle(point1, 88);
    +y:= new circle(new point(45,159), 644)
    +they can have different names. The names help to acces objects +
    +z:= x
    +and their internal structure
    +x.center ... y.radius
    +The values of the latter expressions will be correspondingly: +point1 and 644. +

    +scenario of an object looks as follows
    +
    + +

    +IMPORTANT consequences
    +1. one can use initialization phase to execute an algorithm or +to initialize objects.
    +EXERCISE. write factorial algorithm using objects and no +recursion.
    +2. objects can be used as records,
    +EXERCISE. write a piece of program which realizes a tree. +
    +3. one can send commands to objects, an object is able to execute +the call commands referring to its local procedure declarations +(and local functions too)
    +e.g. call x.aProc(a)
    +z:= x.aFun(b)
    +if aProc and aFun were declared in a class C and if x denotes +an object of the class C. +

    +Examples
    +  complex numbers
    +unit complex:  class (re,im: real);
    +var module: real;
    +   unit add: function(z: complex): complex;
    +begin      result:=  new complex(re+z.re, im+z.im)
    +   end add;
    +unit mult: function(z: complex): complex;
    +begin      result:=  new complex(re*z.re-im*z.im, re*z.im+z.re*im)
    +   end mult;
    +begin   module:= sqrt(re*re+im*im)
    +end complex;
    +
    +Having such class one can create several objects of type complex and manipulate on them e.g.
    +program UsingComplex;
    +unit complex ...   end complex;
    +var c1,c2,z1,z2: complex;
    +begin   c1:= new complex(1,9);     {creation of complex number 1+9i}   c2:= new complex(-3,-21);  {second object of class complex}   z1:= c1.add(c2.mult(c1));  {now z1=c1+(c2*c1))}   z2:= z1.mult(new complex(z1.re,-z1.im)) {Note an object without a name, once used, it becomes a garbage}end UsingComplex
    +
    + +

    +EXERCISE. Write a similar program in Pascal and compare +: how many parameters transmitted in an expression?, are the concepts +of complex numbers encapsulated? +

    +EXAMPLE which follows introduces concepts of planar geometry and +uses them in a prefixed block. The reader can run it and modify +it as well. {This is the first Loglan program I wrote in December +1981 to test the compiler.}
    + +

    +program CircumscribedCircle;
    +
    +unit GEOPLAN : class;
    +(* This class is in fact a problem oriented language, it offers various facilities for problem solving in the field of analitical planar geometry. 
    +The class has the following structure: remark the correspondence between software notions of class, procedure, function and the notions of general algebra: algebraic structure, sorts and operations  
    +
    +                            GEOPLAN                    <----- class                                       algebraic structure                           /   |   \
    +                          /    |    \
    +                         /     |     \
    +                    POINT    CIRCLE  LINE              <----- classes                                                 sorts                   /  |  \     |     / | \ 
    +                  /   |   \    |    /  |  \          operations                 /    |    |   |   |   |   \           <--|
    +                /     |    |   |   |   |    \             |
    +opera-     EQUALS   DIST   |   | MEETS |     \            |
    +                        ERROR  |       |    ERROR         \   tions 
    +                               |       |                  /         
    +                          INTERSECTS   |                  |
    +                                       |                  |
    +                                   PARALLELTO          <--|
    +*)   unit POINT : class(X,Y : REAL);
    +unit EQUALS : function (Q : POINT) : BOOLEAN;
    +begin        RESULT:= Q.X=X and Q.Y=Y ;
    +end EQUALS;
    +
    +unit DIST : function (P : POINT) : REAL;
    +(* DISTANCE BETWEEN THIS POINT AND POINT P *)      begin        if P = none        then          call ERROR
    +else          result:= SQRT((X-P.X)*(X-P.X)+(Y-P.Y)*(Y-P.Y))
    +fi      end DIST;
    +
    +
    +unit virtual ERROR : procedure;
    +begin        WRITELN(" THERE IS NO POINT")
    +end ERROR;
    +end POINT;
    +
    +
    +unit CIRCLE : class (P : POINT, R : REAL);
    +{ THE CIRCLE IS REPRESENTED BY ITS CENTER P AND THE RADIUS R } 
    +unit INTERSECTS : function (C : CIRCLE) : LINE;
    +(* IF BOTH CIRCLES INTERSECT AT 2 POINTS, THE LINE JOINING THEM
    +  IS RETURNED. IF CIRCLES INTERSECT AT ONE POINT, IT IS TANGENT
    +  TO BOTH OF THEM. OTHERWISE PERPENDICULAR BISECTION OF THEIR    CENTRES IS RETURNED *)     var R1,R2 : REAL;
    +begin       if C=/= none       then         R1:= R*R-P.X*P.X-P.Y*P.Y;
    +         R2:= C.R*C.R-C.P.X*C.P.X-C.P.Y*C.P.Y;
    +result := new LINE (P.X-C.P.X,P.Y-C.P.Y,(R1-R2)/2);
    +fi     end INTERSECTS;
    +
    +begin     if P=none 
    +then       WRITELN (" WRONG CENTRE")
    +fi   end CIRCLE;
    +
    +
    +unit LINE : class (A,B,C : REAL);
    +{LINE IS REPRESENTED BY COEFFICIENTS OF EQUATION AX+BY+C=0 } 
    +
    +unit MEETS : function (L : LINE) : POINT;
    +     (* IF TWO LINES INTERSECT function MEETS RETURNS THE POINT
    +          OF INTERSECTION, OTHERWISE RETURNS NONE *)     VAR T  : REAL;
    +begin       if L =/= none and not PARALLELTO (L)
    +then         T := 1/(L.A*B-L.B*A);
    +result := new POINT (-T*(B*L.C-C*L.B),
    +                               T*(A*L.C-C*L.A));
    +else         call ERROR
    +fi     end MEETS;
    +unit PARALLELTO : function (L : LINE) : BOOLEAN;
    +begin       if L=/= none       then         if A*L.B-B*L.A = 0.0
    +then           result:=TRUE; WRITELN(" zle"); 
    +else           result:=FALSE; WRITELN(" dobrze");
    +fi        
    +else         call ERROR
    +fi     end PARALLELTO;
    +
    +unit virtual ERROR  : procedure;
    +begin       WRITELN(" THERE IS NO LINE")
    +end ERROR;
    +
    +var D : REAL;
    +
    +begin (* NORMALIZATION OF COEFFICIENTS *)     D := SQRT(A*A+B*B);
    +if D= 0.0
    +then       WRITELN( " ZLE, ZERO"); call ERROR
    +else       A := A/D;
    +       B := B/D;
    +       C := C/D;
    +fi   end LINE;
    +
    +end GEOPLAN;
    +
    +
    +
    +begin 
    +pref GEOPLAN block    (* THE LANGUAGE GEOPLAN IS USED FOR FINDING THE CIRCLE CIRCUMSCRIBED ON A GIVEN TRIANGLE:             
    +                          P
    +                         / \
    +                        /   \
    +                       /  .<-\------- CENTRE  
    +                      /       \
    +                     Q---------R 
    +*)  taken POINT,LINE,CIRCLE;
    +
    +var P,Q,R,CENTRE : POINT,
    +    L1,L2 : LINE,
    +    C1,C2,C4 : CIRCLE,
    +    RADIUS, X1,Y1 : REAL;
    +
    +begin   do    WRITELN("THIS PROGRAM FINDS THE CENTRE AND RADIUS OF ");
    +    WRITELN(" THE CIRCLE CIRCUMSCRIBED  ON A GIVEN TRIANGLE ");
    +    WRITELN(" GIVE THE VERTICES COEFFICIENTS OF A TRIANGLE");
    +    WRITELN(" X1,Y1= ?? ??");
    +    READ (X1,Y1);
    +    P := new POINT(X1,Y1);
    +    WRITELN(" ",X1,"   ",Y1);
    +    WRITELN(" X2,Y2= ?? ??");
    +    READ (X1,Y1);
    +    Q := new POINT(X1,Y1);
    +    WRITELN(" ",X1,"   ",Y1);
    +    WRITELN(" X3,Y3= ?? ??");
    +    READ (X1,Y1);
    +    R := new POINT (X1,Y1);
    +    WRITELN(" ",X1,"   ",Y1);
    +
    +    RADIUS := P.DIST(Q) + Q.DIST(R);
    +    C1 := new CIRCLE (P,RADIUS);
    +    C2 := new CIRCLE (Q,RADIUS);
    +    C4 := new CIRCLE (R,RADIUS);
    +
    +    L1 := C2.INTERSECTS(C1); 
    +		(*THE PERPENDICULAR BISECTOR OF THE SIDE PQ*)    L2 := C2.INTERSECTS(C4); 
    +		(*THE PERPENDICULAR BISECTOR OF THE SIDE QR *) 
    +    CENTRE := L1.MEETS(L2);
    +
    +if CENTRE = none    then      WRITELN(" ALL POINTS LAY ON THE SAME LINE");
    +else      WRITELN(" THE CIRCUMSCRIBED CIRCLE IS AS FOLOWS:");
    +      WRITELN(" CENTRE = (",CENTRE.X,',',CENTRE.Y,')');
    +      WRITELN(" RADIUS = ",CENTRE.DIST(P));
    +fi   od  end
    +end 
    +The static structure of modules in the above program is the tree
    +
    +
    +                          PROGRAM
    +                          /    \
    +                         /      \
    +                        /        \     
    +                       /          \
    +                   GEOPLAN      pref GEOPLAN block            
    +
    +                  /   |   \
    +                 /    |    \
    +                /     |     \
    +           POINT    CIRCLE  LINE             
    +
    +          /  |  \     |     / | \ 
    +         /   |   \    |    /  |  \
    +        /    |    |   |   |   |   \          
    +       /     |    |   |   |   |    \         
    +  EQUALS   DIST   |   | MEETS |     \        
    +               ERROR  |       |    ERROR     
    +                      |       |
    +                      |       |              
    +                 INTERSECTS   |              
    +                              |              
    +                          PARALLELTO         
    +
    +
    +The edges lead from a module to its static father (up). The module GEOPLAN and the block prefixed with the name GEOPLAN are in another relation: namely of prefixing, or inheritance. We shall develop this remark later. What is worth noting here is that the structure of GEOPLAN remains intact. This is due to the fact that the class GEOPLAN encapsulates the structure of internal classes and modules.
    +
    + +

    +Let us view a few snapshots. +

    +   ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿      The initial snapshot shows just one 
    +   |program          |      dynamic instance of the main prog-
    +   | ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ |      ram.
    +   | |GEOPLAN      | |
    +   | |             | |      The only instruction to be execu-
    +   | |             | |      ted is the instruction of prefixed 
    +   | |             | |      block.
    +   | |             | |
    +   | ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ |
    +   |                 |
    +   | ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ |
    +   | |block        | |    ---- block prefixed with GEOPLAN
    +   | |             | |
    +   | |             | |
    +   | |             | |
    +   | |             | |
    +   | |             | |
    +   | ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ |
    +   |                 |
    +   ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    +
    +Just before the first writeln ... instruction
    +
    +   ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿SL          ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    +   |program          ÃÄÄ<ÄÄÄÄÄÄÄÄÄ´GEOPLAN block    |
    +   | ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ |DL          |                 |
    +   | |GEOPLAN      | ÆÍÍ<ÍÍÍÍÍÍÍÍ͵ all features of |
    +   | |             | |            | GEOPLAN inhtd.  |
    +   | |             | |            |                 |
    +   | |             | |            | P  point none   |
    +   | |             | |            | Q  point none   |
    +   | ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ |            | R  point none   |
    +   |                 |            | C1 circle none  |
    +   | ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ |            | C2 circle none  |
    +   | |block        | |            | C4 circle none  |
    +   | |             | |            | L1 line none    |
    +   | |             | |            | L2 line  none   |
    +   | |             | |            | RADIUS real 0   |
    +   | |             | |            | CENTRE          |
    +   | |             | |            |                 |
    +   | ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ |            |                 |
    +   |                 |            |                 |
    +   ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ            ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    +    This may be a snapshot just before the instruction putting radius to be equal the sum of distances PQ and QR. We omitted all SL links and DL links in order to simplify the picture. 
    +
    +
    +   ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿   ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿       ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   |program          |   |GEOPLAN block    | ÚÄÄÄÄÄ´ X real 4 |
    +   | ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ |   |                 | |     | Y real 6 |
    +   | |GEOPLAN      | |   | all features of | |     ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   | |             | |   | GEOPLAN inhtd.  | |     ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   | |             | |   |                 | | ÚÄÄÄ´ X real -4|
    +   | |             | |   | P  point ÄÄÄÄÄÄÄÅÄÙ |   | Y real 88|
    +   | |             | |   | Q  point ÄÄÄÄÄÄÄÅÄÄÄÙ   ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   | ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ |   | R  point ÄÄÄÄÄÄÄÅÄÄÄ¿   ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   |                 |   | C1 circle none  |   |   | X real -9|
    +   | ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ |   | C2 circle none  |   ÀÄÄÄ´ Y real 23|
    +   | |block        | |   | C4 circle none  |       ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   | |             | |   | L1 line none    |                   
    +   | |             | |   | L2 line  none   |                
    +   | |             | |   | RADIUS real 0   |
    +   | |             | |   |                 |
    +   | |             | |   |                 |
    +   | ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ |   | => radius:= ... |
    +   |                 |   |                 |
    +   ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ   ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    +
    +
    +
    +
    +   This may be a snapshot just after the three circles were created.  
    +
    +
    +   ___________________   ___________________       ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   |program          |   |GEOPLAN block    | ÚÄÄÄÄÄ´ X real 4 |
    +   | _______________ |   |                 | |     | Y real 6 |
    +   | |GEOPLAN      | |   | all features of | |     ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   | |             | |   | GEOPLAN inhtd.  | |     ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   | |             | |   |                 | | ÚÄÄÄ´ X real -4|
    +   | |             | |   | P  point ÄÄÄÄÄÄÄÅÄÙ |   | Y real 88|
    +   | |             | |   | Q  point ÄÄÄÄÄÄÄÅÄÄÄÙ   ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   | |_____________| |   | R  point ÄÄÄÄÄÄÄÅÄÄÄ¿   ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   |                 |   | C1 circle ÄÄÄÄÄÄÅÄÄ¿|   | X real -9|
    +   | _______________ |   | C2 circle ÄÄÄÄÄÄÅÄ¿|ÀÄÄÄ´ Y real 23|
    +   | |block        | |   | C4 circle ÄÄÄÄÄÄÅ¿|ÀÄÄ¿ ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   | |             | |   | L1 line none    ||ÀÄÄ¿| ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   | |             | |   | L2 line  none   |ÀÄ¿ |ÀÄ´CENTER  P |
    +   | |             | |   | RADIUS real 0   |  | |  ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   | |             | |   |                 |  | ÀÄÄÂÄÄÄÄÄÄÄÄÄÄ¿
    +   | |             | |   |                 |  |    |CENTER  Q |
    +   | |_____________| |   | => L1:= ...     |  |    ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   |                 |   |                 |  |    ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   |_________________|   |_________________|  ÀÄÄÄÄ´CENTER  R |
    +                                                   ÀÄÄÄÄÄÄÄÄÄÄÙ
    +
    + +

    +This may be a snapshot of situation in which two lines were +created and their intersection point was found. +

    +   ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿   ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿       ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   |program          |   |GEOPLAN block    | ÚÄÄÄÄÄ´ X real 4 |
    +   | ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ |   |                 | |     | Y real 6 |
    +   | |GEOPLAN      | |   | all features of | |     ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   | |             | |   | GEOPLAN inhtd.  | |     ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   | |             | |   |                 | | ÚÄÄÄ´ X real -4|
    +   | |             | |   | P  point  ÄÄÄÄÄÄÅÄÙ |   | Y real 88|
    +   | |             | |   | Q  point  ÄÄÄÄÄÄÅÄÄÄÙ   ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   | ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ |   | R  point  ÄÄÄÄÄÄÅÄÄÄ¿   ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   |                 |   | C1 circle ÄÄÄÄÄÄÅÄÄ¿|   | X real -9|
    +   | ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ |   | C2 circle ÄÄÄÄÄÄÅÄ¿|ÀÄÄÄ´ Y real 23|
    +   | |block        | |   | C4 circle ÄÄÄÄÄÄÅ¿|ÀÄÄ¿ ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   | |             | |   | L1 line  ÄÄÄÄÄÄ¿||ÀÄÄ¿| ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   | |             | |   | L2 line  ÄÄÄÄÄ¿||ÀÄ¿ |ÀÄ´CENTER  P |
    +   | |             | |   | RADIUS real 0 |ÀÅÄ¿| |  ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   | |             | |   | CENTRE Ä¿     | | || ÀÄÄÂÄÄÄÄÄÄÄÄÄÄ¿
    +   | |             | |   |         |     | | ||    |CENTER  Q |
    +   | ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ |   | => if CE|NTRE | | ||    ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   |                 |   |         |     | | ||    ÚÄÄÄÄÄÄÄÄÄÄ¿
    +   ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ   ÀÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÅÄÙ |ÀÄÄÄÄ´CENTER  R |
    +            ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ     |   |     ÀÄÄÄÄÄÄÄÄÄÄÙ
    +   ÚÄÄÄÄÄÄÄÄÁÄÄÄÄ¿      ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´   | ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    +   | X coeff. of |      |A real ...      |   ÀÄ´A real   ...  |
    +   | Y solution  |      |B real ...      |     |B real   ...  |
    +   |             |      |C real ...      |     |C real   ...  |
    +   ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ      ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ     ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    +
    +
    +Exercises. Add drawing functions as attributes of classes point, line, circle.	
    +Write the algorithm inverting a point w.r.t. a given circle.
    +
    + +
    +Andrzej Salwicki +
    + + + + diff --git a/HTML/loghome.htm b/HTML/loghome.htm new file mode 100644 index 0000000..149c644 --- /dev/null +++ b/HTML/loghome.htm @@ -0,0 +1,95 @@ + + + + + +Loglan'82 home page + + + + + + + +

    logo +Loglan'82 - programming with objects

    +
    + +

    Loglan's home page

    +
    + +

    +Loglan'82 is an object-oriented, universal, imperative programming +language.
    +It comes with Doc, Compilers (DOS, Unix, Atari,.), Examples etc. +
    +Four features of Loglan'82 make it original and interesting for +everybody: +

    + +

    +


    + +

    INDEX

    + + +
  • Why Loglan'82? Should I be acquainted with it? + + +
    A SUGGESTION: Use recent versions of Mosaic or Netscape viewers +in order to read the tables we prepared for you.
    +For those who can not see the tables there are ASCII versions +of tables as well as postscript files
    + + +
  • a Quick Reference Card of Loglan'82 + + +
  • a short comparison with other OO languages + + +
  • A micro-manual of Loglan'82 + +
  • How to get a copy of Loglan'82 system? +
  • existing platforms + + +
  • research problems related to Loglan'82 +
      +
    • solved ones +
    • open ones +
    + +
  • Dr Fun or the mysteries of "scientific" bureaucracy +
  • a short history of Loglan'82 project +
  • why I learn so late on Loglan'82? + +
  • +
    + +
    +AS last +update Sun 21 May 1995 +
    + + + + +pp \ No newline at end of file diff --git a/HTML/loghome.htm~ b/HTML/loghome.htm~ new file mode 100644 index 0000000..46bd5d6 --- /dev/null +++ b/HTML/loghome.htm~ @@ -0,0 +1,95 @@ + + + + + +Loglan'82 home page + + + + + + + +

    logo +Loglan'82 - programming with objects

    +
    + +

    Loglan's home page

    +
    + +

    +Loglan'82 is an object-oriented, universal, imperative programming +language.
    +It comes with Doc, Compilers (DOS, Unix, Atari,.), Examples etc. +
    +Four features of Loglan'82 make it original and interesting for +everybody: +

    + +

    +


    + +

    INDEX

    + + +
  • Why Loglan'82? Should I be acquainted with it? + + +
    A SUGGESTION: Use recent versions of Mosaic or Netscape viewers +in order to read the tables we prepared for you.
    +For those who can not see the tables there are ASCII versions +of tables as well as postscript files
    + + +
  • a Quick Reference Card of Loglan'82 + + +
  • a short comparison with other OO languages + + +
  • A micro-manual of Loglan'82 + +
  • How to get a copy of Loglan'82 system? +
  • existing platforms + + +
  • research problems related to Loglan'82 +
      +
    • solved ones +
    • open ones +
    + +
  • Dr Fun or the mysteries of "scientific" bureaucracy +
  • a short history of Loglan'82 project +
  • why I learn so late on Loglan'82? + +
  • +
    + +
    +AS last +update Sun 21 May 1995 +
    + + + + +p \ No newline at end of file diff --git a/HTML/loglan82.htm b/HTML/loglan82.htm new file mode 100644 index 0000000..a02dfcf --- /dev/null +++ b/HTML/loglan82.htm @@ -0,0 +1,36 @@ + + Index of Loglan82 archive + + +

    Index of Loglan82 archive

    +

    on infpc1.univ-pau.fr

    + + +
    +
    AS Last update Mon 6 Mar 1995
    + + \ No newline at end of file diff --git a/HTML/loglanmm.gif b/HTML/loglanmm.gif new file mode 100644 index 0000000..8cf0382 Binary files /dev/null and b/HTML/loglanmm.gif differ diff --git a/HTML/logo.gif b/HTML/logo.gif new file mode 100644 index 0000000..feed42a Binary files /dev/null and b/HTML/logo.gif differ diff --git a/HTML/mosaic.ghi b/HTML/mosaic.ghi new file mode 100644 index 0000000..5204a76 Binary files /dev/null and b/HTML/mosaic.ghi differ diff --git a/HTML/nextpage.gif b/HTML/nextpage.gif new file mode 100644 index 0000000..4f510e0 Binary files /dev/null and b/HTML/nextpage.gif differ diff --git a/HTML/openpbms.htm b/HTML/openpbms.htm new file mode 100644 index 0000000..f3550f3 --- /dev/null +++ b/HTML/openpbms.htm @@ -0,0 +1,131 @@ + + +Open research problems + + + +

    Open problems and questions

    +

    Loglan'82 is the result of university +research. +We were not pretending to conquer the market. It happened however that the + language turned out to be +a good vehicle for teaching objects. Its features still make him +a good candidate language for those who wish to have a reliable +tool for programming quite complicated algorithms, data structures and +systems. + +

    On the other hand we believe that it is necessary to study the +problems and questions which arise in the domain of object +programming. +We believe that the progress is done by profiting from the experience +and results obtained by others and by adding someones own results. +Therefore we propose to study the questions listed below. +To our knowledge they are still open. We shall be happy to hear any news + and comments +from you. + +

    List of open questions and problems

    + + +As you see the list of questions is quite long. We would appreciate any + help. +We are looking for collaborators to work together on the problems listed +above. +There is plenty of work for everybody. +For example, we have a system of network objects=processes written by +Pawel Susicki. He could not debug the system. Would you? +
    + + + + +
    +Andrzej Salwicki Last update Fri 19 May 1995 + +pp \ No newline at end of file diff --git a/HTML/openpbms.htm~ b/HTML/openpbms.htm~ new file mode 100644 index 0000000..7021300 --- /dev/null +++ b/HTML/openpbms.htm~ @@ -0,0 +1,131 @@ + + +Open research problems + + + +

    Open problems and questions

    +

    Loglan'82 is the result of university +research. +We were not pretending to conquer the market. It happened however that the + language turned out to be +a good vehicle for teaching objects. Its features still make him +a good candidate language for those who wish to have a reliable +tool for programming quite complicated algorithms, data structures and +systems. + +

    On the other hand we believe that it is necessary to study the +problems and questions which arise in the domain of object +programming. +We believe that the progress is done by profiting from the experience +and results obtained by others and by adding someones own results. +Therefore we propose to study the questions listed below. +To our knowledge they are still open. We shall be happy to hear any news + and comments +from you. + +

    List of open questions and problems

    + + +As you see the list of questions is quite long. We would appreciate any + help. +We are looking for collaborators to work together on the problems listed +above. +There is plenty of work for everybody. +For example, we have a system of network objects=processes written by +Pawel Susicki. He could not debug the system. Would you? +
    + + + + +
    +Andrzej Salwicki Last update Fri 19 May 1995 + +p \ No newline at end of file diff --git a/HTML/platform.htm b/HTML/platform.htm new file mode 100644 index 0000000..52f882d --- /dev/null +++ b/HTML/platform.htm @@ -0,0 +1,79 @@ + + +Supported Platforms + + + +

    Supported Platforms

    + +
  • DOS +
  • Unix +
  • Atari +
  • others +
  • + + + +
    + + + +
    +
    +AS + last update 2 January 1995 +
    + + + + + + + + + + + + + + diff --git a/HTML/prevpage.gif b/HTML/prevpage.gif new file mode 100644 index 0000000..5296801 Binary files /dev/null and b/HTML/prevpage.gif differ diff --git a/HTML/procesy.htm b/HTML/procesy.htm new file mode 100644 index 0000000..b30c17f --- /dev/null +++ b/HTML/procesy.htm @@ -0,0 +1,490 @@ + +Processes + + + +

    Chapter: PROCESSES

    + +

    by Andrzej Salwicki

    + +

    Plan

    + + + + +
    +

    Introduction

    +

    +The word process has two meanings: it may denote a module of a programm or +it may denote an object of a module.
    +Once created a process-object may be activated. Its instructions are executed in parallel +with the instructions of other processes-objects. The word multithread execution explains +well the intuition of concurrent processes. +While the objects of classes and of coroutines share a processor, +the objects of processes do have a processor associated with each +object of process. The processor can be either a physical processor +e.g. a personal computer or workstation connected to other computers +by means of LAN network, or it may be a virtual processor, in reality +it can be an ability to acquire a time slice of a real computer. +(More or less like a process in Unix system). + + +

    +

    Syntax

    + + +

    The syntax of module process is similar to those of modules class or coroutine + +

    unit {processTypeName}: {prefix} process ({formalParameters}):
    +     {declarations}
    +begin
    +     {instructions}
    +end {processTypeName};
    + +The present status of the processes in Loglan82 is experimental. There are several contextual restrictions imposed. Some of them are explained by the experimental and temporary status ... Some of them are not checked by the compiler. Sorry! Attention please! + +

    Context restrictions.

    + + +
      +
    1. All process modules should be declared as global units. They can not be nested. They can inherit however. +
      This is explained by the distributed model of memory of processes. +
    2. There is no shared memory. Every process can access only its private resources, whether declared locally or transmitted as parameters, or procedures and functions declared in other object of process if it is accessible to the process. +
    3. The parameters of a process can be +
      integer, real, char, Boolean, string i.e. of primitive type +
      or +
      process objects +
      or +
      procedure declared in a process object +
      or +
      procedure transmitted as a formal parameter. + +
    4. The procedure's instruction of the form +

      + call X.proced1(params) + +
      placed in the body of a process module has an effect of communicating the calling process with the callee X. +
      Therefore such an instruction will be named an alien call of a procedure. We shall see later that the execution of an alien call needs a cooperation of both the calling and the callee processes. + +

    5. The operations in, is , qua, this +are not defined on processes. The user should not put them in the body of a process module. +

      Sorry, the compiler will not check it as an error!!! + +

    6. There is no dynamic type checking concerning objects of processes. +
      Again, the compiler does not warn you. Be careful! + +
    7. Each process has its own subsystem of coroutines. The instructions attach and detach can not transfer the control beyond the subsystem. + + +
    8. No process object can access the global variables declared in the MAIN process. This does not apply to the principal program=MAIN. Remark that MAIN is a process object too. + +
    +

    Allien call

    + + +

    Let Y be a process object. Let X be another process object. If a command of the following form + +

    call X.procedr1(actual_params) + +
    is to be executed in Y then we shall say of an allien call. +
    The called procedure, in this example procedr1, can be either: +

    +

    Y is said a calling process, X is the callee process. + + +

    Mask.

    + + +

    Each process has a predefined variable MASK associated with it. The value of the variable is a subset of the set of names of procedures and functions that are declared inside the process. + +The initial value of the MASK is the empty set . + +The instructions ENABLE and DISABLE can change the value of the MASK variable. + +

    +
    +		         MASK={q1, ... ,qn}
    +                                
    +                                
    +         enable p1,p2;          
    +		                      	disable p1, p2;
    +                                
    +                                
    +		MASK={q1, ... , qn, p1, p2}
    +
    +As you see from the above diagram an instruction 'enable' adds the names to the MASK. An instruction 'disable' deletes the names from the mask. + +There are two other instructions + RETURN ENABLE p1, ... , pn DISABLE q1, ... , qk; +and + ACCEPT p1, ... , pl; + +which modify the value of the mask. Their meaning is described below. + +The instruction RETURN ENABLE p1, ... , pn DISABLE q1, ... , qk; is legible in the body of a procedure or function only. The instruction ACCEPT can be put anywhere in a process module. + + + +

    +

    SEMANTICS

    + +

    Let us repeat: a process can be initialised, its initialisation phase terminates when the return statement is reached. It can be given a name, say p, and it remains passive. When another proces executes the command resume(p) then the process p is activated, its actions are executed in parallel with the actions of the other active processes. +Once activated it continues the execution of its commands. It may execute a stop command and become a passive process. Other processescan call for an allien call of a procedure (or function) declared in the process p. The permission to interrupt the execution of its own commands and to do a service for an external process will be granted iffthe process p is active and if the name of the called procedure is in MASK. +The process can change the value of the MASK variable by means of commands enable and disable. One can use also the commands accept and return disable ... enable... +

    +

    ACCEPT

    + +

    +The execution of the command accept p1, ... , pn is as follows: +1° the names p1, ... ,pn are added to the MASK +2° the process waits for an allien call of a procedure listed in the MASK. + +When an allien call is terminated the MASK is set to its previous value, i.e. to that before the ACCEPT was executed. This is a rule with an exception: see the return disable ... enable... command below. + + + +

    Execution of an allien call

    + + +
      +
      +
    1. 1. The calling process Y calls the callee process X and waits, +
    2. 2. If the callee process X is active and if it is before execution of its Loglan command C and if the name of the called procedure is in the value of MASK variable, (let us recall it is a set of names of procedures) then the callee X is interrupted and +
    3. 3. The calling process Y transmits the actual parameters of the called procedure to the process X and waits. +
    4. 4. The calllee X saves the MASK, next, the MASK is set to empty (it means that all further alien calls are to wait) +
      REMARK that the called procedure can change the value of MASK. +
    5. 5. The callee X executes the called procedure. +
    6. 6. When the execution of the procedure reaches its end then the output parameters of the procedure are transmitted to the calling process Y which receives them. +
    7. 7. The MASK is restored to its state before the call. +
      REMARK. If the execution of the called procedure ends with the command +
      return enable ... disable ...; +
    8. Then the restored MASK is subject to the modifications described by this command. +
    9. 8. Both processes resume their activities from before alien call +
      - the calling process passes to the instruction next to the alien call, +
      - the callee process executes the instruction C which was planned already to be executed. +
      +
    + + +The semantical phenomena +of parallel programming are different than those of sequential programming. + +Example 1 +Let us look what will happen if you execute the following program First. +First of all, you will remark that the strings are mixed. This is because + the commands write(a(i)) of the process w1 are executed in parallel with +the commands write(a(i)) of the another process w2. The screen receives +them interleaved and so the characters appear on the screen interleaved. + +Next, remark that the execution of a program is no longer determined +by its text and its data. Execute the following program twice and compare +the results. You will observe that the results displayed on the screen are +different. However there is no visible reason for this difference. + + +
    program First;
    +     unit writer: process(node:integer, nr:integer,s: string);
    +         var i: integer,
    +             A: arrayof char;
    +     begin
    +           return;
    +        a:=unpack(s);
    +           for i := lower(a) to upper(a)
    +           do
    +              write(a(i));
    +           od;
    +           writeln;
    +     end writer;
    + 
    +     var w1, w2: writer, i: integer;
    + 
    +begin
    +     w1:=new writer(0,1,"ici un texte tres long,
    +             		tres long, tres long tres long tres long tres long");
    +     w2:=new writer(0,2,"zdies otche'n dolgoj tiekst, otche'n dolgoj     	 	                 tiekst, otche'n dolgoj tiekst");
    +        resume(w1);
    +        resume(w2);
    +     writeln("give me a character");
    +     readln;
    +end First
    + 
    +We are going now to remede the interleaving the characters. +For this purpose we are going to construct a semaphore. +But what it is a semaphore? Well, it is a device that allows +a train to pass iff it is in a state permitting to pass and in +the same moment of the passage it changes its state to blocking one. +Therefore only one train is authoised to pass. In the state blocking +it accepts only the demand to liberate the semaphore i.e. the state of +the semaphore changes from blocking to free. By default, it is assumed +that it is only the train that passed who will execute the command: +liberate (when it leaves the station). + + + +
    program Second;
    +
    +  unit aSemaphore: process(node:integer);
    +     unit pass: procedure;
    +     end pass;
    +     unit free: procedure;
    +     end free;
    +  begin
    +     return;
    +     do
    +	  accept pass;
    +	  accept free;
    +     od
    +  end aSemaphore;
    +
    +  unit writer: process(node:integer, nr:integer,s: string, sem: aSemaphore);
    +    var i: integer,
    +        A: arrayof char;
    +  begin
    +     return;
    +     call sem.pass;
    +     a:=unpack(s);
    +     for i := lower(a) to upper(a)
    +     do
    +       write(a(i));
    +     od;
    +     writeln;
    +     call sem.free;
    +  end writer;
    + 
    +  var s: aSemaphore, w1, w2: writer, i: integer;
    + 
    +begin
    +  s := new aSemaphore(0);
    +  resume(s);
    +  w1:=new writer(0,1,"ici un texte tres long,
    +          		tres long, tres long tres long tres long tres long",s);
    +  w2:=new writer(0,2,"zdies otche'n dolgoj tiekst, otche'n dolgoj     	 	                     			tiekst, otche'n dolgoj tiekst", s);
    +  resume(w1);
    +  resume(w2);
    +  writeln("give me a character");
    +  readln;
    +end Second
    +
    + +Theorem +The texts shown on the screen will never be mixed. + +We can prove even stronger theorem that for any number of objects-processes of type writer defined as in the program Second they critical sections (here it means printing on the screen) will be executed in mutual exclusivity. + +Therefore with the use of semaphores one is able to assure +the mutual exclusivity of critical sections of given processes. + +A new question appears: is it true that semaphores garantee +the mutual exclusion? +The answer is no, as it can be seen from the Third program. + + + +
    program Third;
    +
    +  unit Semaphore: process(node:integer);
    +     unit pass: procedure;
    +     end pass;
    +     unit free: procedure;
    +     end free;
    +  begin
    +     return;
    +     do
    +	  accept pass;
    +	  accept free;
    +     od
    +  end Semaphore;
    +
    +  unit writer1: process(node:integer, nr:integer,s: string, sem: semaphore);
    +    var i: integer,
    +        A: arrayof char;
    +  begin
    +     return;
    +     call sem.pass;
    +     a:=unpack(s);
    +     for i := lower(a) to upper(a)
    +     do
    +       write(a(i));
    +     od;
    +     writeln;
    +     call sem.free;
    +  end writer1;
    +  unit writer2: process(node:integer, nr:integer,s: string, sem: semaphore);
    +    var i: integer,
    +        A: arrayof char;
    +  begin
    +     return;
    +     call sem.free;
    +     a:=unpack(s);
    +     for i := lower(a) to upper(a)
    +     do
    +       write(a(i));
    +     od;
    +     writeln;
    +     call sem.pass;
    +  end writer2;
    +  var s: semaphore, w1: writer1, w2: writer2, i: integer;
    +begin
    +  s := new semaphore(0);
    +  resume(s);
    +  w1:=new writer1(0,1,"ici un texte tres long,
    +          		tres long, tres long tres long tres long tres long",s);
    +  w2:=new writer2(0,2,"zdies otche'n dolgoj tiekst, otche'n dolgoj     	 	                     			tiekst, otche'n dolgoj tiekst", s);
    +  resume(w1);
    +  resume(w2);
    +  writeln("give me a character");
    +  readln;
    +end Third
    +
    +The example above reveals that one should use semaphores with rigour. +It may be the case that both processes use a semaphore but due +to an error their critical sections are executed in parallel causing +a chaos. + +In most cases it would be better to conceive the architecture of the +system of parallel processes as clients and servers. In the example +below we create one server: ecran for serving the resourc eof screen. +The processes are calling the process server asking for a service. +In this case it will be printing on the screen. + +
    program Fourth;
    +  unit ecran: process(node: integer);    (* it is a server *)
    +    unit print: procedure(s: string);
    +       var i: integer,
    +           A: arrayof char;
    +    begin
    +     a:=unpack(s);
    +     for i := lower(a) to upper(a)
    +     do
    +       write(a(i));
    +     od;
    +     writeln;
    +    end print;
    +  begin
    +    return;
    +    do accept print od             (* it offers just the print service *)
    +  end ecran;
    +
    +  unit writer: process(node:integer, nr:integer,s: string, ec:ecran); 
    +    (* it is a client *)
    +  begin
    +     return;
    +     call ec.print(s)
    +  end writer;
    + 
    +  var e: ecran, w1, w2: writer, i: integer;
    + 
    +begin
    +  e := new ecran(0);
    +  resume(e);
    +  w1:=new writer(0,1,"ici un texte tres long,
    +          		tres long, tres long tres long tres long tres long", e);
    +  w2:=new writer(0,2,"zdies otche'n dolgoj tiekst, otche'n dolgoj     	 	                 				tiekst, otche'n dolgoj tiekst", e);
    +  resume(w1);
    +  resume(w2);
    +  writeln("give me a character");
    +  readln;
    +end Fourth
    +
    +Theorem +The critical sections of printing the texts supplied by the processes w1 and w2 is done in mutual exclusion. + +============================================================================ +Example 5 + +In the example below we shall illustrate an asynchronous cooperation of processes. +The case we are going to discuss now is as follows: there are several processes " writers ". Any of writers may print a file on a designated printer. In order to increase the throughput and in order to avoid an intermixed printing we have spoolers - one for each printer. A printer prints files taking them out of a queue. + +
    program Five;
    + 
    +  unit writer1: process(node: integer, printer1: spooler);
    +
    +  begin
    +
    +  end writer1;
    +
    +  unit writer2: process(node: integer, printer1, printer2: spooler);
    +     (* this process may print on any of 2 printers *)
    +  end writer2
    +
    +  unit spooler: process(node: integer);
    +
    +    var Q: queue,
    +	  f: file,
    +     tick: integer;
    + 
    +    unit print: procedure(f: file, ticket: integer);
    +    begin
    +       call Q.insert(f);
    +       if Q.full then return disable print fi;
    +       tick := tick + 1;
    +       ticket := tick;
    +    end print;
    +
    +  begin (*spooler*)
    +    Q := new queue;
    +    return;
    +
    +     do
    +       disable print;
    +       if Q.empty then accept print fi;
    +       f := Q.out;
    +       enable print;
    +       (* printing the file *)
    +        ...
    +     od
    +   end spooler;
    +
    + var s1, s2: spooler,
    +     w1, w2: writer1,
    +     w3    : writer2;
    +begin
    +
    +   ...
    +   s1 := new spooler(0);
    +   resume(s1);
    +
    +   w1:= new writer1(0, s1);
    +   w2 := new writer1(0, s1);
    +   resume(s1);
    +   resume(s2);
    +
    +   
    +end Five
    +
    +What are the properties of the program Five? +Is it possible to obtain a mixture of texts coming from different files? +
    +
    + + +
    + + + + + +

    +ò +
    \ No newline at end of file diff --git a/HTML/progobi.htm b/HTML/progobi.htm new file mode 100644 index 0000000..dcc0bb9 --- /dev/null +++ b/HTML/progobi.htm @@ -0,0 +1,62 @@ + + + + + +Programowanie Obiktowe + + + + + + + +

    Programowanie Obiektowe

    + +

    1995/96 prof. Andrzej Salwicki

    + +

    wyklad i cwiczenia, III rok informatyki PB

    +
    + +

    +Spis Tresci +

    +
  • Cele: +
  • Streszczenie +
  • Program +
  • Metody pracy +
  • Pomoce dydaktyczne - Loglan'82 +
  • Notatki z wykladow +
  • Notatki z cwiczen +
  • Pytania egzaminacyjne +
  • +
    + +

    Cele:

    + +
      +
    1. pomoc sluchaczom w wyrobieniu sobie pogladu na obiekty, +
    2. opanowac narzedzia programowania obiektowego +
    + +

    Streszczenie

    + +

    Program

    + +

    Metody pracy

    + +

    Pomoce dydaktyczne - Loglan'82

    + +

    +Metody programowania obiektowego sa ilustrowane przykladami zrealizowanymi +w jezyku Loglan'82. Wybralismy Loglan z wielu powodow:
    +mozemy w nim zrealizowac +

    Notatki z wykladow

    + +

    Notatki z cwiczen

    + +

    Pytania egzaminacyjne

    + + + + diff --git a/HTML/quick.htm b/HTML/quick.htm new file mode 100644 index 0000000..c114ba9 --- /dev/null +++ b/HTML/quick.htm @@ -0,0 +1,391 @@ + + +Quick Reference Card + + + +

    LOGLAN'82

    +

    Quick Reference Card

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Syntax Form its (informal) meaning
    program < name>;
    <declarations>
    +begin
    <instructions>
    end
    Program is a module (=unit).
    It is the root of a tree of nested units.
    During an execution of a program this tree is used as a collection of patterns for instances . An instance of a unit is either an activation record of a procedure, a function, a block unit, or an object of a class, a coroutine, a process.
    DECLARATIONS
    there are five forms of a declaration var, const, unit, signal, handlers
    var x:T, y,z: U declaration of variables: x of type T, y,z of type U
    There exist units in several colours i.e. kinds procedure, class, coroutine, process, block, handler, function
    unit A: <kind>(<params>);
    + <declarations>
    +begin
    +<instructions>;
    end A;
    declaration of a module A.
    + + params is a list of formal parameters.
    +Remarks +- block has no name +- - its first line is: block or pref C block +- function has a type of result after parameters, +- handler has a different form, see below, +- lastwill instructions are executed exceptionally.
    const cc=82 declaration of a constant
    signal S;
    signal Alarm(x:T, y:Q);
    declaration of a signal S
    a signal may have a list of formal parameters
    handlers
    + when sig1, SIGN3: Inst; return
    +when sig2: instructions2; wind;
    +others instr2; terminate
    + end handlers
    declaration of a module which handles exceptions,
    +sig1, sig2, SIGN3 are names of exceptions or signals
    +Inst, instructions2, instr2 are sequences of instructions,
    + handler appears as the last declaration in a unit!!
    Parametrisation of Units
    modes of transmission of values of expressions are: input, output, inout
    procedure, function, type can be transmitted as parameter as well formal procedures and functions should be specified i.e. the types of arguments and results should be given.
    A formal type T alone is of limited use, however it may accompany other parameters using T.
    Processes are distributed, it means that they cannot share objects. You can transmit only values of simple types and names of processes or formal procedures to be used for alien calls. Processes can reside on different processors of your computer or network. Or several processes may share one processor (UNIX and DOS systems). This explains the reasons for the restrictions. The present implementation of processes has several limitations. Sorry.
    INSTRUCTIONS
    Atomic instructions
    x := <expression> assignment instruction
    x := copy(<expression) a copying assignment instruction, has sense only for object expressions
    call Aprocedure(params) procedure call instruction
    return leaving procedure or function
    exit or exit exit or exitexitexit ... leaving one, two or more nested loops do ...od
    new Aclass(params) instruction generating an object
    Objects
    x := new Aclass(params) creates an object of class Aclass with params and stores it under the name of x
    end Aclass
    also return
    terminating initialisation of a newly created object
    kill(x) deallocation instruction, causes x=none and kill x
    REMARK
    No dangling references!
    {x=y & x=z}=>kill(x){x=none & y=none & z =none}
    inner pseudoinstruction; it is a slot to put the instructions of an inheriting unit;
    Coroutines
    x := new Cor(params) creates a coroutine object x of type Cor, the coroutine-object x is passive
    attach(x) makes the current coroutine chain passive and activates coroutine x
    detach undoes the last attach
    You can combine coroutines and recursive procedures.
    +Coroutines enable quasi-parallel programming - of importance for SIMULATION and games.
    +
    Processes & Concurrency
    Loglan'82 offers truly object oriented processes and an object oriented communication mechanism alien call just by calling methods of a distant process
    process5 := new prcsTyp(...) creates an object-process of
    unit prcsTyp:process(<params>)
    resume(process5) activate a passive process process5
    stop the current process passivates
    enable hisProcedure process adds the name of hisProcedure to the MASK of the process, enabling other processes to communicate with the process by means of hisProcdure.
    disable aProcedure, aFunction deletes the names: aProcedure, aFunction from the MASK.
    accept aProc1, aProc2, AFun process waits (inactively) for another process calling a method.
    +accept makes possible rendez-vous of this process and another process calling a method from the MASK or the list aProc1, aProc2, aFun.
    return disable aProc1 enable aProc2 return from a rendez-vous reestablishes the MASK of the called process; it is possible to modify its MASK disabling some procedures and enabling others.
    call process5.hisProcedure(par)
    +

    this is ALIEN CALL

    The current process demands process5 process to execute hisProcedure with the par parameters transmitted and waits for the results, eventually gets outputs.
    +1) this instruction may meet with an accept instruction of process5 processs - in such a case there is a rendez-vous of two processes,
    +2) otherwise the call tents to interrupt the normal flow of execution of the called process.
    Exception handling
    raise aSignal A signal is raised. This lances the research of a module handler of the aSignal signal along the chain of DL links i.e. along dynamic fathers of instances.
    3 forms of terminating an exception handling are provided:
    return returns to after raise statement
    wind destructs several instances of units (cf.lastwill) but the instance containing the handler.
    terminate destructs several instances of units (cf.lastwill) and the instance containing the handler.
    Composed Instructions
    if Cond then I else J fi Cond is a Boolean expression, I,J are sequences of instructions,
    +(else J is optional )
    do I od looping instruction, it is suggested to put an exit instruction among the instructions I.
    while Cond do I odis equivalent to
    +do
    if Cond then I else exit fi
    od
    for i := A to B do I od i - an integer variable, A, B integer expressions, I a sequence of instructions
    case c
    + when c1: I1;
    + when c2: I2;
    + otherwise J
    +esac
    case instruction,
    +I, J are sequences of instructions,
    +c an integer expression, c1, c2 integer constants
    EXPRESSIONS
    Arithmetic expressions they are as you believe they should be
    Boolean expressions NOTE object relations in and is , e.g. if x in Class2
    Object expressions
    new T(actual_params)returns a new object of class (coroutine, process) T
    this T returns as a value the object of type T containing this expression
    E qua A qualifies the value of object expression E as of type A
    +Raises error if not E in A
    copy(E) returns a copy of the value of the object expression E
    Character expressions as usual
    String expressions no operations on strings

    INHERITANCE & NESTING

    2 fundamental methods of unit's composition
    Multi-level inheritance permits to make extensions of classes, coroutines, processes defined on different levels of the nesting structure of units. Multi-kind inheritance permits to inherit in a block, procedure, function, class, coroutine or process.
    Multiple inheritance is emulated by means of multi-level inheritance and other ingredients of Loglan'82 Generic modules are doable in various ways: by formal types, by multi-level inheritance combined with nesting, to say nothing about virtuals.
    +
    + + + +
    +
    +AS Last update Sat 4 Feb 1995 +
    + + +pp \ No newline at end of file diff --git a/HTML/quick.htm~ b/HTML/quick.htm~ new file mode 100644 index 0000000..44fb6c6 --- /dev/null +++ b/HTML/quick.htm~ @@ -0,0 +1,391 @@ + + +Quick Reference Card + + + +

    LOGLAN'82

    +

    Quick Reference Card

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Syntax Form its (informal) meaning
    program < name>;
    <declarations>
    +begin
    <instructions>
    end
    Program is a module (=unit).
    It is the root of a tree of nested units.
    During an execution of a program this tree is used as a collection of patterns for instances . An instance of a unit is either an activation record of a procedure, a function, a block unit, or an object of a class, a coroutine, a process.
    DECLARATIONS
    there are five forms of a declaration var, const, unit, signal, handlers
    var x:T, y,z: U declaration of variables: x of type T, y,z of type U
    There exist units in several colours i.e. kinds procedure, class, coroutine, process, block, handler, function
    unit A: <kind>(<params>);
    + <declarations>
    +begin
    +<instructions>;
    end A;
    declaration of a module A.
    + + params is a list of formal parameters.
    +Remarks +- block has no name +- - its first line is: block or pref C block +- function has a type of result after parameters, +- handler has a different form, see below, +- lastwill instructions are executed exceptionally.
    const cc=82 declaration of a constant
    signal S;
    signal Alarm(x:T, y:Q);
    declaration of a signal S
    a signal may have a list of formal parameters
    handlers
    + when sig1, SIGN3: Inst; return
    +when sig2: instructions2; wind;
    +others instr2; terminate
    + end handlers
    declaration of a module which handles exceptions,
    +sig1, sig2, SIGN3 are names of exceptions or signals
    +Inst, instructions2, instr2 are sequences of instructions,
    + handler appears as the last declaration in a unit!!
    Parametrisation of Units
    modes of transmission of values of expressions are: input, output, inout
    procedure, function, type can be transmitted as parameter as well formal procedures and functions should be specified i.e. the types of arguments and results should be given.
    A formal type T alone is of limited use, however it may accompany other parameters using T.
    Processes are distributed, it means that they cannot share objects. You can transmit only values of simple types and names of processes or formal procedures to be used for alien calls. Processes can reside on different processors of your computer or network. Or several processes may share one processor (UNIX and DOS systems). This explains the reasons for the restrictions. The present implementation of processes has several limitations. Sorry.
    INSTRUCTIONS
    Atomic instructions
    x := <expression> assignment instruction
    x := copy(<expression) a copying assignment instruction, has sense only for object expressions
    call Aprocedure(params) procedure call instruction
    return leaving procedure or function
    exit or exit exit or exitexitexit ... leaving one, two or more nested loops do ...od
    new Aclass(params) instruction generating an object
    Objects
    x := new Aclass(params) creates an object of class Aclass with params and stores it under the name of x
    end Aclass
    also return
    terminating initialisation of a newly created object
    kill(x) deallocation instruction, causes x=none and kill x
    REMARK
    No dangling references!
    {x=y & x=z}=>kill(x){x=none & y=none & z =none}
    inner pseudoinstruction; it is a slot to put the instructions of an inheriting unit;
    Coroutines
    x := new Cor(params) creates a coroutine object x of type Cor, the coroutine-object x is passive
    attach(x) makes the current coroutine chain passive and activates coroutine x
    detach undoes the last attach
    You can combine coroutines and recursive procedures.
    +Coroutines enable quasi-parallel programming - of importance for SIMULATION and games.
    +
    Processes & Concurrency
    Loglan'82 offers truly object oriented processes and an object oriented communication mechanism alien call just by calling methods of a distant process
    process5 := new prcsTyp(...) creates an object-process of
    unit prcsTyp:process(<params>)
    resume(process5) activate a passive process process5
    stop the current process passivates
    enable hisProcedure process adds the name of hisProcedure to the MASK of the process, enabling other processes to communicate with the process by means of hisProcdure.
    disable aProcedure, aFunction deletes the names: aProcedure, aFunction from the MASK.
    accept aProc1, aProc2, AFun process waits (inactively) for another process calling a method.
    +accept makes possible rendez-vous of this process and another process calling a method from the MASK or the list aProc1, aProc2, aFun.
    return disable aProc1 enable aProc2 return from a rendez-vous reestablishes the MASK of the called process; it is possible to modify its MASK disabling some procedures and enabling others.
    call process5.hisProcedure(par)
    +

    this is ALIEN CALL

    The current process demands process5 process to execute hisProcedure with the par parameters transmitted and waits for the results, eventually gets outputs.
    +1) this instruction may meet with an accept instruction of process5 processs - in such a case there is a rendez-vous of two processes,
    +2) otherwise the call tents to interrupt the normal flow of execution of the called process.
    Exception handling
    raise aSignal A signal is raised. This lances the research of a module handler of the aSignal signal along the chain of DL links i.e. along dynamic fathers of instances.
    3 forms of terminating an exception handling are provided:
    return returns to after raise statement
    wind destructs several instances of units (cf.lastwill) but the instance containing the handler.
    terminate destructs several instances of units (cf.lastwill) and the instance containing the handler.
    Composed Instructions
    if Cond then I else J fi Cond is a Boolean expression, I,J are sequences of instructions,
    +(else J is optional )
    do I od looping instruction, it is suggested to put an exit instruction among the instructions I.
    while Cond do I odis equivalent to
    +do
    if Cond then I else exit fi
    od
    for i := A to B do I od i - an integer variable, A, B integer expressions, I a sequence of instructions
    case c
    + when c1: I1;
    + when c2: I2;
    + otherwise J
    +esac
    case instruction,
    +I, J are sequences of instructions,
    +c an integer expression, c1, c2 integer constants
    EXPRESSIONS
    Arithmetic expressions they are as you believe they should be
    Boolean expressions NOTE object relations in and is , e.g. if x in Class2
    Object expressions
    new T(actual_params)returns a new object of class (coroutine, process) T
    this T returns as a value the object of type T containing this expression
    E qua A qualifies the value of object expression E as of type A
    +Raises error if not E in A
    copy(E) returns a copy of the value of the object expression E
    Character expressions as usual
    String expressions no operations on strings

    INHERITANCE & NESTING

    2 fundamental methods of unit's composition
    Multi-level inheritance permits to make extensions of classes, coroutines, processes defined on different levels of the nesting structure of units. Multi-kind inheritance permits to inherit in a block, procedure, function, class, coroutine or process.
    Multiple inheritance is emulated by means of multi-level inheritance and other ingredients of Loglan'82 Generic modules are doable in various ways: by formal types, by multi-level inheritance combined with nesting, to say nothing about virtuals.
    +
    + + + +
    +
    +AS Last update Sat 4 Feb 1995 +
    + + +pp \ No newline at end of file diff --git a/HTML/quickref.ps.Z b/HTML/quickref.ps.Z new file mode 100644 index 0000000..a5bc51b Binary files /dev/null and b/HTML/quickref.ps.Z differ diff --git a/HTML/quickref.txt b/HTML/quickref.txt new file mode 100644 index 0000000..d69f4ce --- /dev/null +++ b/HTML/quickref.txt @@ -0,0 +1,311 @@ +LOGLAN'82 +Quick Reference Card +Syntax Form + its meaning (informal) + + program ; + + begin + ; + end +Program is a unit. It is the root of a tree of units. +During an execution of the program this tree is +used as a collection of patterns for instances. An +instance of a unit is either an activation record (of +a procedure) or an object(of a class). + +Declarations + + +there are five forms of a declaration: + + + +var, const, unit, signal, handlers + + var x: T, y,z: U; +declaration of variables x of type T, y,z of type U + + unit A: B(params); + + begin + ; + last_will: + end A; + +evidently you need not to inherit from a module +declaration of a module A which inherits from B. +kind may be one of: procedure, class, coroutine, +process, block, handler, function +params is a list of formal parameters, +REMARKS +- block has no name + its first line is: block or pref C block +- function has a type of result after parameters, +- handler has a different form., see below, +- last_will instruction are executed exceptionally. + + const cc=80 +declaration of a constant + + signal S; + signal Alarm(x: T, y: Q); +declaration of a signal S +it may have a list of formal parameters + + + handlers + when sig1,SIGN3: Inst; return; + when sig2: instructions2; wind; + others in; terminate + end handlers +declaration of a module handling exceptions, +sig1, sig2, SIGN3 are names of exceptions, +Inst, instructions2,in are sequences of instructions + +handlers appear as the last declaration in a unit + + + + +Parametrisation of Units + + +modes of transmission: +input, output, inout values of expressions + +also procedure, function, type can be +transmitted as a parameter +formal procedures(functions) should be specified +i.e. the types of arguments and results should be +given. +a formal type T alone is of limited use, however it +may accompany other parameters using T. + +Processes are distributed it means that +they cannot share objects. You can +transmit only values of simple types and +names of processes or formal procedures +to be used for alien calls. +Processes can reside on different systems of your +network. This explains the reasons for the +restrictions. +The present implementation of processes has +several limitations. Sorry. + +Instructions + + +Atomic instructions + + + x := +assignment instruction + + x := copy () +copying assignment instruction, has sense only for +object expressions + + call Aprocedure(params) +procedure call instruction + + return +leaving procedure or function + + exit or exit exit or exit exit exit +leaving one, two or three nested loops do od + + new Aclass(params) +instruction generating an object + + Objects + + + x := new Aclass(params) +creates an object of class Aclass with params +and stores it under the name of x + + end Aclass or return +terminating initialisation of a newly created object + + kill(x) +deallocation instruction, causes{x=none}and kills x +REMARK. No dangling references! +{x=y&x=z} => kill(x) {x=none&y=none&z=none} + + inner +pseudoinstruction: a slot for the instructions of an +inheriting unit + + Coroutines + + + x := new Cor(params) +creates a coroutine object x of type Cor + + attach(x) +activates coroutine x, and then makes the current +coroutine chain passive + + detach +undoes the last attach + + Processes & Concurrency +truly object oriented processes and an objective com- +munication mechanism just by calling methods of a +distant process + + proces5:=new procesType(...); +creates an object of + unit procesType: process(); ... + + resume(proces5) +activate a passive process process5 + + stop +the current process passivates + + enable hisprocedure +adds the name hisprocedure to the MASK of the +process, enabling other processes to communicate +with the process by means of hisprocedure + + disable aProcedure,aFunction +deletes aProcedure,aFunction from the MASK + + accept aProc1, aProc2, aFnctn +process waits (inactively) for another process +calling a method; +accept makes possible rendez-vous of this process +and another process calling his method + + return disable aProc1 enable aQ +return from a rendez-vous reestablishes the MASK +of the called process; it is posible to modify its +MASK disabling some procedures and enabling +others + + call proces5.hisprocedure(par) + + * + + this is ALIEN CALL +the current process demands process5 process to +execute hisprocedure with the transmitted par +parameters and waits for the eventual outputs; +1 this instruction may meet with an accept +instruction of process5 process - in such case there +is a rendez-vous of two process, +2 otherwise the call tents to interrupt the normal +flow of execution of the called process5 process. + + + Exception handling + + + raise Asignal +Asignal is raised. This lances the research of a +module handling the signal along the chain of DL +links i.e. along dynamic fathers of instances. + + return +* returns to after raise statement + + wind +* 3 forms of terminating an exception handling + + terminate +* destructs (lastwill) several instances of units + + +Composed instructions + + + if * then I else J fi +* is a Boolean expression +I, J are sequences of instructions {else J is optional} + + do I od +looping instruction; it is suggested to put an exit +instruction among the instructions I, see below + + while * do I od +* is a Boolean expression +I a sequence of instructions +equivalent to +do + if * then I else exit fi +od + + for i:= A to B do I od +i integer variable, A, B integer expressions, +I a sequence of instructions + + case c + when c1: I; + otherwise J + esac +case instruction +I, J are sequences of instructions +c is an expression, c1 is a constant + + + +Expressions + + +Arithmetic expressions + + +Boolean expressions +remark in and is object relations, e.g. if x in Clas2 + +Object expressions + + + new T(actual_params) +create new object of class (coroutine, process) T +passing the actual_params list to it + + this T +returns as a value the object of type T containing +this expression + + E qua A +qualifies the value of E as of type A +Raises error if not E in A + + copy(E) +returns a copy of value of the object expression E + +Character expressions + + +String expressions +only constant strings! + + +Inheritance & Nesting * + +2 fundamental methods of unit's composition + +Multi-level inheritance permits to make +extensions of classes, coroutines, +processes defined on different level of +the nesting structure of units. +Multi-kind inheritance permits to inherit in a +block, procedure, function, class, coroutine or +process. + + +Multiple inheritance is doable by means +of multi-level inheritance and other +ingredients of Loglan. +Generic modules are doable in various ways: by +formal types, by multi-level inheritance combined +with nesting, to say nothing about virtuals. + + +Loglan'82 Quick Reference Card - 3 - December, 94 + + diff --git a/HTML/read_it.htm b/HTML/read_it.htm new file mode 100644 index 0000000..598566e --- /dev/null +++ b/HTML/read_it.htm @@ -0,0 +1,29 @@ +Read it first + + +

    Index of pub directory on infpc1.univ-pau.fr

    + +We are giving you access to several directories. + +
      + +

    • In Loglan82 directory you will find the Loglan'82 system: + its compilers, the documentation, the sources, its environment, the examples + +

    • In Algorithmic_Logic directory you will find some reports and papers in preliminary form. +You are bound by the Copyright. + +

    • In Lecture_Notes_Li1 directory we present a sample of lecture notes on the course Li& and other +material. This is our intelectual property and you are bound by the Copyright. + +

    • In Loglan'95 Research directory we put some material to inform you about our plans of research.Should you be +interested in the topics please contact us. +
    + +
    AS Last update Sun 5 Mar 1995
    + + + + +

    + diff --git a/HTML/signals.htm b/HTML/signals.htm new file mode 100644 index 0000000..3eb3329 --- /dev/null +++ b/HTML/signals.htm @@ -0,0 +1,525 @@ + + + + + +Signals + + + + + + + +

    Loglan'82 Programming Language
    +______________________________

    + +

    Signallling Exceptional Situations & Treatment of Exceptions +
    +

    + +

    1. MOTIVATIONS

    + +

    +Programs which we are constructing should be robust, i.e. +they should not fail even if the values of parameters(data) for +a procedure, function etc.are out of the domain of a procedure +in question. The minimal requirement would be: if the data do +not belong to the assumed domain of program then this information +should be displayed. However, in many cases the programmer is +able to react at errors which appear during the execution of a +program.
    +Sometimes she(he) is able to use the mechanisms build for the +use in unusual situations in a non-standard, elegant way (see +the example MAZE below). However we are not suggesting this to +turn into your style or "maniere" of writing programs. +

    +Another keyword applicable here is security. If we wish to construct +a secure program then we need appropriate tools to assure this +property.
    +What will be called an exceptional situation?
    +Example 1
    +
    Let us consider the data structure STACKS with operations +
    + +

      +
    • pop(s) +
    • push(e,s) +
    • top(s) +
    • empty(s) +
    + +

    +It will be an exceptional situation, if one will call pop for +an empty stack or will call push for a full stack. Obviously we +can require that the user never calls pop(s) when s in an empty +stack, but our program can be more flexible i.e. clever and we +can foresee eventual unproper usage of the partial operations +from our module.
    + +

    +Another example of exceptional situation arrive when one thinks +of getting an element of an array in such a way that the index +of the element is outside the limits of the array. Obviously we +can advise to replace any occurrency of a subscripted variable +A[i] by a guarded command like the following one +

    +   if lower(A)-1 < i and i < upper(A)+1 
    +   then 
    +       y := A[i]
    +   else
    +      (* put here your reaction for the array index error *)
    +   fi 
    + +
    + +

    +which replaces the instruction +

    +   y := A[i]
    +
    + +

    +.
    +The advice consequently applied throughout a program would make +it unreadable, thus opening the doors for numerous errors. A solution +lies in signalling an error or exception and propagating such +a signal to the nearest object or dynamic instance of a procedure +which contain a recipe (a handler) how to react. Some exceptional +situations are detected automatically by the Loglan system (see +the list of run-time errors) . Some exceptions may be signalled +trough the raise instruction.
    + +

    2. SYNTAX

    + +

    +Treatment of signals in Loglan is distributed onto different fragments +of a program. +

      +
    • (a) declaration of signal +
    • (b) handlers of exceptions +
    • (c) raise instruction +
    • (d) return, terminated, wind: the ways +to terminate handlers +
    • (e) lastwill +
    + +

    +In order to do with signals and exceptional situations one must: +
    + +

      +
    1. declare a signal,
      + +
    2. propagate the signal toward a handler,
      + +
    3. write one or more modules which will handle the signal,
      + +
    4. exit from a handler,
      + +
    5. the latter action may necessitate the execution of the lastwill +instructions for the instances of modules that may be killed by +such an exit.
      + +
    + +

    3. SEMANTICS

    + +

    (a) Signal declaration
    +

    + +

    +A signal declaration consists of keyword signal and the +list of names of signals we are going to use together with eventual +lists of formal parameters (the parameters of signals are not +obligatory however ), e.g.
    + +

    +signal empty_stack(s:stack),
    +        no_record(r:key),
    +        stackoverflow; 
    +
    + +

    +Declaration of signal(s)may appear anywhere in the declaration +part of a module.
    + +

    (b) Modules handling signals
    +

    + +

    +Let Ni be a name of a signal and Si a sequence of +instructions. We assume that names of signals are visible (declared). +Then we can write ( as the end part of the declaration part of +a module) the following definition of handling signals:
    + +

    +handlers
    +   when N1: S1;
    +when N2: S2;
    +   ..............
    +others Sn
    +end handlers
    +
    + +

    +The sequence of instructions Si is called a handler for the signal +Ni. The sequence Sn appearing after the clause others is +a universal handler for any signal which can be propagated into +an object of this module and which is not listed above. Si - can +contain any legal instructions and moreover instructions return, +wind, terminate which determine the way in which this handler +will be finished, and the place where the execution of program +will be continued.
    + +

    (c) Raising a signal
    +

    + +

    +An instruction raising a signal contains the keyword raise +and the name of a signal which we would like to be handled, the +list of actual parameters can be given if the signal was declared +with a list of formal parameters.
    +Example 2
    + raise
    found;
    +if x> size then raise too_much fi;
    +raise
    empty_stack(s)
    +
    +Meaning:
    +A signal can be raised during an execution of a program either +by run-time system (e.g. MEMERROR) or by program (cf. raise +instruction above) Suppose that a signal f has been raised in +an object M. For brevity, we shall use the name object also for +dynamic instances of blocks, functions, procedures. If M contains +a handler for f then this handler is executed. More precisely: +an instance H of this handler is created, the static father of +H is M, the dynamic father of H is the module in which the signal +was raised, in this case it is again M. Otherwise the search of +a handler for a signal is continued in the dynamic father of the +object M. One can also say that the signal has been propagated +to the dynamic father of the object. There are three modifications +to this scheme: 1. if M is an exception handler then signal is +propagated to the object in which M is declared 2. if M is a coroutine +or the whole program then the whole program is terminated' 3. +If M is a process then the process is terminated. When an object +containing a handler for the signal was found, the object of handler +is created. Its dynamic father is the object in which the signal +was raised, its static father is the object in which a declaration +of the handler was found.
    +Example 3
    + +

    +program three;
    +unit record : class;
    +var key : T;
    +  end record;
    +
    +  signal no_record(k:T);
    +unit search :  function(k:T): record;
    +var r:record;
    +handlers
    +        when eof_error: raise no_record(k);
    +end handlers;
    +   begin
    +      do         get(f,r);
    +  if equal(r.key,k) then  result:=r; exit fi;
    +od
    +   end search;
    +handlers
    +      when no_record : ...
    +end handlers;
    +begin    ...
    +    r:=search(k);
    +    ...
    +end three
    + +
    + +

    +In this example the signal no-record is raised when the system +raises the signal eof. Thus we reinterpret the eof signal and +adapt it to our aims.
    + +

    +Example 4
    + +

    +program exercise4;
    +   signal f;
    +   unit A: procedure;
    +   begin...
    +      raise f;
    +       ...
    +   end A;
    +
    +   unit B : procedure;
    +     handlers
    +         when f : ...
    +     end handlers;
    +   begin
    +     call A; 
    +      ...
    +     raise f;
    +   end B;
    +   handlers
    +       when f :...
    +   end handlers;
    +begin        (*main program *)
    +    ...
    +   raise f;
    +    ...
    +   call B;
    +    ...
    +   call A
    +end exercise4.
    + +
    + +

    +In this example one signal has two handlers. The signal f raised +in the main program or in procedure A will be served by the handler +declared in the main program module. The signal f raised in procedure +B either directly: by raise, or indirectly by raise +in the procedure A called from B will be served by the handler +declared in procedure B.
    +.
    +
    +
    +

    (d) How to end a service (handling) of a signal?
    +

    + +

    +When the handler finishes the service of a signal, the execution +continues in a module determined by the appropriate instruction +which should be: +

      +
    • return - then the execution is resumed in an object +where the instruction raise was executed, +
    • wind - then all objects we were searching for a handler +will be terminated (see lastwill) and the program continues +in the object containing the handler from the dynamic instance +in which it generated an object that later led to the signal raising, +
    • terminate - then all objects we were searching will +be terminated including also the object containing the handler, +the execution is continued in the dynamic father of the object +containing handler, +
    • call endrun - in order to halt the entire program. +
      + +
    + +

    (e) Lastwill
    +

    + +

    +When an object (or a dynamic instance of a block, procedure, function) +is terminated abnormally through the execution of wind +or terminate instructions, then the lastwill - a sequence +of instructions will be executed before such an object will be +terminated. The sequence of lastwill instructions must +be located at the end of a module and is announced by a +label lastwill:. A normal termination of an object will +never cause the execution of lastwill. Termination of a dynamic +instance of block, function, procedure causes its deallocation. +In the following example we shall demonstrate the usage of the +wind instruction in a handler. When executed it causes +that all objects - instances beginning from the module in which +a signal was raised and ending in the module containing the handler +are closed and terminated. The execution will be continued in +the object containing the handler from the point which caused +creation. In order to assure the smooth continuation the language +offers a possibility to define a lastwill instruction(s).
    + +

    +Example 5
    + +

    +program MAZE;
    + var  A : arrayof arrayof boolean,
    +      i,n : integer,
    +      there_is_a_path : boolean;
    + signal Found;
    + 
    + unit PATH :  procedure (i,j : integer);
    +      (* the procedure makes one move from(i,j) *)
    + begin
    +   if A(i,j)
    +   then  (* we can go through (i,j) field *)
    +      if i=n and j=n  then raise Found fi;
    +      if i< n then call PATH(i+1,j) fi;
    +      if j< n then call PATH(i,j+1) fi;
    +   fi;
    + last_will : write(i,j);
    +       (* the path will be printed in the reverse order *)
    + end PATH;
    +
    + handlers
    +        when Found : there _is_a_path :=true; wind
    + end handlers;
    +begin (**  main program **)
    +     .... (* create a maze A etc. *)
    +   call PATH(1,1);
    +   if there_is_a_path  then ...
    +     ...
    +end MAZE.
    + +
    + +

    +In this example we can observe how the programmer turned unusual +situation of a raised signal into the desired one: through lastwills +she got a simple program to print the path through the maze. +
    + +

    (f) Inheritance vs. signalling
    +

    + +

    +Handlers (modules handling signals) behave similarly to virtual +procedures, i.e. the new handler from the prefixed module replaces +the module from the prefixing module.
    +Example 6
    +
    +

    +unit STACKS:  class (type :telem);
    +  signal empty_stack(s:stack), stack_overflow(s:stack);
    +  unit stack : class (size:integer);
    +    hidden place, top;
    +    var place : arrayof taken,
    +        top: integer;
    +    unit pop: function:telem;
    +      handlers
    +       when conerror: raise empty_stack(this stack)
    +      end handlers;
    +    begin
    +     result :=place(top);
    +      (** here con_error signal can be raised by run_time_system **)
    +      top:=top-1
    +    end pop;
    +
    +    unit push : procedure (e:telem);
    +    begin
    +      if top> size 
    +      then
    +        raise stack_overflow(this stack)
    +      fi;
    +      top:=top+1;
    +      place(top):=e
    +    end push;
    +
    +    unit empty: function : boolean;
    +    begin
    +      result:=top< 1
    +    end empty;
    +
    +    unit increase : procedure (addition: integer);
    +      var i : integer,
    +          x : arrayof telem;
    +    begin
    +      array X dim (size+addition);
    +      size:=size+addition;
    +      for i:=1 to upper(place)
    +      do
    +        x(i):=place(i)
    +      od;
    +      kill(place);
    +      place:=X
    +    end increase.
    +
    +  begin
    +    array place dim(1:size);
    +  end stack;
    +  handlers
    +    when empty_stack: write("empty stack"); terminate;
    +    when stack_overflow: write("stack overflow"); terminate;  
    +    when conerror : write("error in stack increasing");
    +         call endrun;
    +  end handlers;
    +
    +end STACKS; 
    + +
    + +

    +Applications
    + Example 7
    +
    +

    +program APPLICATION_1;
    +  unit STACKS: ...
    +  unit element: ...
    +   ...
    +  pref STACKS(element) block
    +    var s1,s2 : stack
    +       ...
    +    handlers
    +      when stack_overflow : ...
    +      call s.increase(70);
    +      return;
    +    end handler;
    +  begin (***  block ***)
    +       ...
    +       s1:= new stack(c1);
    +       s2:= new stack(c2);
    +       ...
    +       call s1.push(e);
    +       ...
    +       y:=s2.pop;
    +       ...
    +  end (*block*);
    +
    +end APPLICATION_1
    + +
    + +

    +In this example the handler for stack_overflow from the prefixed +block overrides the handler given in the class STACKS.
    +
    +Example 8
    + +

    +program ReversePolishNotation;   (* Application 2 *)
    +  unit STACKS: class; ... end STACKS;
    +        ...
    +  unit element : class(sign:char);
    +  end element;
    +    ...
    +  pref STACKS(element) block;
    +      ...
    +    handlers
    +       when empty_stack: write("
    +            error in expression_to many ( closing brackets ");
    +       terminate;
    +    end handlers;
    +
    +  begin (*block *)
    +    while not eof
    +    do
    +      read(x);
    +      if x= ')' then 
    +         (* take operators from stack until ( is met *)
    +      else
    +          ....
    +      fi
    +    od
    +  end (*block*)
    +end ReversePolishNotation;
    + +
    + +

    +This example shows that there are situations in which the user +of a class STACKS knows how to handle the signal empty_stack and +solves the problem gracefully since in this case empty_stack means +that the data were not a well formed expression.


    + +
    +GMyAS +
    + +

    +Last update Wed 3 May 1995 + + + diff --git a/HTML/solate.htm b/HTML/solate.htm new file mode 100644 index 0000000..10bc386 --- /dev/null +++ b/HTML/solate.htm @@ -0,0 +1,41 @@ + + +Why I learn so late about Loglan? + + + + +

    Why I learned so late about Loglan'82?

    + +Do not worry. It is not your fault. It is not too late, neither. +As you can see we worked steadily, but slowly. Making the best use of our modest resources.
    +But now you can use it: +
      +

    • +in your classes,
      WE RECOMMEND IT warmly. You can verify it ... +

    • +If you are looking for a software vehicle for your nearest research project here it is. A good candidate +which will speed up the programming phase of your project. It is quite probable that your Loglan +experience will influence your project, as Loglan permits to elaborate your own view of the systems. +
    + +If you are looking for an interesting project do not hesitate and join us in our Loglan'95 project or in +Programmers_Assistant project. + + + + +
    + + + +
    + +
    +AS + last update 2 January 1995 +
    + + + + diff --git a/HTML/tablica3.htm b/HTML/tablica3.htm new file mode 100644 index 0000000..05455a1 --- /dev/null +++ b/HTML/tablica3.htm @@ -0,0 +1,314 @@ + + +Brief comparison of OO Languages + + + + + +

    A brief comparison of several object oriented languages

    +

    In the table below you will find a comparison of several languages with respect to the most important features and tools of programming.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Languages:
    ________
    ________
    Features
    ----v----
    S
    i
    m
    u
    l
    a
    6
    7
    o
    b
    j
    .
    P
    a
    s
    c
    a
    l
    s
    C
    +
    +
    M
    o
    d
    u
    l
    a
    3
    S
    m
    a
    l
    l
    t
    a
    l
    k
    E
    i
    f
    f
    e
    l
    A
    d
    a
    B
    e
    t
    a
    J
    a
    v
    a
    L
    o
    g
    l
    a
    n
    '
    8
    2
    Modularisation
    - nesting of modules + + - - - - + + - +
    - inheritance + + + + + + - + + +
    - - multilevel inheritance - - - - - - - + - +
    - - multiple inheritance - - + - + + - - +7) +1)
    -inherit in other modules2) - - - - - - - + - +
    - static binding of names + + - + - - + + - +
    Classes & Objects + + + + + + - + + +
    Coroutines + + - - - - + + - +
    Processes - - - + - - + + + +
    - alien call of methods 3) - - - - - - - - - +
    Signals & Exceptions - - - - - - + + ? +4)
    Safety
    - safe deallocation5) - - - - - - - ? - +
    - type checking + + - - - - + + +? +
    - protection of private + - - + - - + + + +
    Genericity & Polymorphism
    - types as formal param. - - - - - -+ -+ -+ -+ +
    - overloading of operators - ? + + ? + + + + -
    - virtual methods6) + - + ? + -+ - + + +
    + + + +
    +

    Footnotes

    + + +In Loglan'82:
    +
      +
    1. multiple inheritance may be obtained from multi-level inheritance and + coroutines, +
    2. it is possible to inherit a class in a procedure, a function, a process, a coroutine, a block, +
    3. alien call is a truly object oriented protocol of executing a method of + a callee process in cooperation between a calling and the callee processes, +
    4. exceptions are handled with continuations and lastwill actions, +
    5. i.e. absence of dangling references & possibility to deallocate no longer needed objects, +
    6. with virtual methods there is no need for overloading,
      +several languages admit only virtual methods, they do not admit usual methods +
    7. in Java there is no multiple inheritance of classes, quite reasonably +Java distinguishes between classes and interfaces. Multiple inheritance of interfaces is allowed. +
    +
    + + + +
    +
    +AS Last update Tue 12 Mar 1996 +
    + + + + + +ppp \ No newline at end of file diff --git a/HTML/tablica3.htm~ b/HTML/tablica3.htm~ new file mode 100644 index 0000000..8bdd21d --- /dev/null +++ b/HTML/tablica3.htm~ @@ -0,0 +1,314 @@ + + +Brief comparison of OO Languages + + + + + +

    A brief comparison of several object oriented languages

    +

    In the table below you will find a comparison of several languages with respect to the most important features and tools of programming.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Languages:
    ________
    ________
    Features
    ----v----
    S
    i
    m
    u
    l
    a
    6
    7
    o
    b
    j
    .
    P
    a
    s
    c
    a
    l
    s
    C
    +
    +
    M
    o
    d
    u
    l
    a
    3
    S
    m
    a
    l
    l
    t
    a
    l
    k
    E
    i
    f
    f
    e
    l
    A
    d
    a
    B
    e
    t
    a
    J
    a
    v
    a
    L
    o
    g
    l
    a
    n
    '
    8
    2
    Modularisation
    - nesting of modules + + - - - - + + - +
    - inheritance + + + + + + - + + +
    - - multilevel inheritance - - - - - - - + - +
    - - multiple inheritance - - + - + + - - +7) +1)
    -inherit in other modules2) - - - - - - - + - +
    - static binding of names + + - + - - + + - +
    Classes & Objects + + + + + + - + + +
    Coroutines + + - - - - + + - +
    Processes - - - + - - + + + +
    - alien call of methods 3) - - - - - - - - - +
    Signals & Exceptions - - - - - - + + ? +4)
    Safety
    - safe deallocation5) - - - - - - - ? - +
    - type checking + + - - - - + + +? +
    - protection of private + - - + - - + + + +
    Genericity & Polymorphism
    - types as formal param. - - - - - -+ -+ -+ -+ +
    - overloading of operators - ? + + ? + + + + -
    - virtual methods6) + - + ? + -+ - + + +
    + + + +
    +

    Footnotes

    + + +In Loglan'82:
    +
      +
    1. multiple inheritance may be obtained from multi-level inheritance and + coroutines, +
    2. it is possible to inherit a class in a procedure, a function, a process, a coroutine, a block, +
    3. alien call is a truly object oriented protocol of executing a method of + a callee process in cooperation between a calling and the callee processes, +
    4. exceptions are handled with continuations and lastwill actions, +
    5. i.e. absence of dangling references & possibility to deallocate no longer needed objects, +
    6. with virtual methods there is no need for overloading,
      +several languages admit only virtual methods, they do not admit usual methods +
    7. in Java there is no multiple inheritance of classes, quite reasonably +Java distinguishes between classes and interfaces. Multiple inheritance of interfaces is allowed. +
    +
    + + + +
    +
    +AS Last update Tue 12 Mar 1996 +
    + + + + + +ppp \ No newline at end of file diff --git a/HTML/tablica3.txt b/HTML/tablica3.txt new file mode 100644 index 0000000..6d9cf12 --- /dev/null +++ b/HTML/tablica3.txt @@ -0,0 +1,67 @@ + + A brief comparison of several object oriented languages + ======================================================= + + + + Languages -> S o C M S E A L + i b + o m i d o + m j + d a f a g + Comparison u . u l f l + of main features l P l l e a + | a a a t l n + | - s 3 a ' + V 6 c l 8 + 7 a k 2 + l + s + + + +Modularisation + nesting of modules + + - - - - + + + inheritance + + + + + + - + + - multilevel - - - - - - - + + inheritance + - multiple inh. - - + - + + - + 1) + inherit in other - - - - - - - + 2) + modules + static binding + + - + - - + + + of identifiers + +Classes & Objects + + + + + + - + + +Coroutines + - - + - - - + + +Processes - - - + - - + + + alien call - - - - - - - + 3) + of methods + +Signals & Exceptions - - - - - - + + 4) + +Safety +safe deallocation i.e. + no dangling - - - - - - - + + references + + type checking + + - - - - + + + protection of private + - - + - - + + + +Genericity&Polymorphism + types as formal - - - ? - -+ -+ + + parameters + overloading - - + + ? + + - + of operators + virtual methods + - + ? + + - + + +_______________________________________________________________________ + + +In Loglan'82: +1) - multiple inheritance may be obtained from multi-level inheritance and + coroutines, +2) - it is possible to inherit a class in a procedure, a function, a process, a coroutine, a block, +3) - alien call is a truly object oriented protocol of executing a method of + a callee process in cooperation between a calling and the callee processes, +4) - exceptions are handled with continuations and last will actions. + diff --git a/HTML/tarski/default1.hot b/HTML/tarski/default1.hot new file mode 100644 index 0000000..0410c7f --- /dev/null +++ b/HTML/tarski/default1.hot @@ -0,0 +1,79 @@ +[User Menu0] +Menu_Name=Starting Points +Menu_Type=TOPLEVEL +Item0=Starting Points Document,http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/StartingPoints/NetworkStartingPoints.html +Item1=NCSA Mosaic Demo Document,http://www.ncsa.uiuc.edu/demoweb/demo.html +Item2=NCSA Mosaic's 'What's New' Page,http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/whats-new.html +Item3=NCSA Mosaic Home Page,http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/NCSAMosaicHome.html +Item4=Windows Mosaic home page,http://www.ncsa.uiuc.edu/SDG/Software/WinMosaic/HomePage.html +Item5=MENU,UserMenu1 +Item6=MENU,UserMenu2 +Item7=MENU,UserMenu3 +Item8=Finger Gateway,http://cs.indiana.edu/finger/gateway +Item9=Whois Gateway,gopher://sipb.mit.edu:70/1B%3aInternet%20whois%20servers +Item10=MENU,UserMenu4 +Item11=Archie Request Form,http://hoohoo.ncsa.uiuc.edu/archie.html + +[User Menu1] +Menu_Name=World Wide Web Info +Item0=Web Overview,http://www.w3.org/hypertext/WWW/LineMode/Defaults/default.html +Item1=Web Project,http://www.w3.org/hypertext/WWW/TheProject.html +Item2=Data Sources By Service,http://www.w3.org/hypertext/DataSources/ByAccess.html +Item3=Information By Subject,http://www.w3.org/hypertext/DataSources/bySubject/Overview.html +Item4=Web Servers Directory,http://www.w3.org/hypertext/DataSources/WWW/Servers.html +Item5=HTML Quick Reference,http://www.ncsa.uiuc.edu/General/Internet/WWW/HTMLQuickRef.html +Item6=Internet RFCs,http://www.cis.ohio-state.edu:80/hypertext/information/rfc.html + +[User Menu2] +Menu_Name=Home Pages +Item0=The University of Illinois at Urbana-Champaign,http://www.uiuc.edu +Item1=NCSA Home Page,http://www.ncsa.uiuc.edu/General/NCSAHome.html +Item2=CERN Home Page,http://info.cern.ch/ +Item3=UNC-Chapel Hill home page,http://sunsite.unc.edu +Item4=ANU Bioinformatics,http://life.anu.edu.au:80/ +Item5=Data Research Home Page,http://dranet.dra.com/ +Item6=British Columbia,http://www.cs.ubc.ca/ +Item7=BSDI Home Page,http://www.bsdi.com/ +Item8=Carnegie Mellon,http://www.cs.cmu.edu:8001/Web/FrontDoor.html +Item9=Cornell Law School,http://www.law.cornell.edu/lii.table.html +Item10=Cornell Theory Center,http://www.tc.cornell.edu:80/ctc.html +Item11=DESY Home Page,http://info.desy.de:80/ +Item12=ECE WWW Page,http://www.ece.uiuc.edu +Item13=Honolulu Home Page,http://www.hcc.hawaii.edu/ +Item14=Indiana Home Page,http://cs.indiana.edu/home-page.html +Item15=Lysator ACS Sweden,http://www.lysator.liu.se:80/ +Item16=National Center for Atmospheric Research,http://http.ucar.edu/metapage.html +Item17=Northwestern Home Page,http://www.acns.nwu.edu/ +Item18=CICA's WWW Server ,http://www.cica.indiana.edu +Item19=Ohio State Home Page,http://www.cis.ohio-state.edu:80/hypertext/information/information.html +Item20=SSC Home Page,http://www.ssc.gov/SSC.html + +[User Menu3] +Menu_Name=Gopher Servers +Item0=Gopherspace Overview,gopher://gopher.micro.umn.edu:70/11/Other%20Gopher%20and%20Information%20Servers +Item1=Veronica Search,gopher://veronica.scs.unr.edu:70/11/veronica +Item2=NCSA Gopher,gopher://gopher.ncsa.uiuc.edu:70/1 +Item3=PSC Gopher,gopher://gopher.psc.edu:70/1 +Item4=SDSC Gopher,gopher://gopher.sdsc.edu:70/1 +Item5=Original (UMN) Gopher,gopher://gopher.micro.umn.edu:70/1 +Item6=UIUC Gopher,gopher://gopher.uiuc.edu:70/1 +Item7=UIUC Weather Machine,gopher://wx.atmos.uiuc.edu:70/1 +Item8=SDSU Sounds,gopher://athena.sdsu.edu:71/11/sounds + +[User Menu4] +Menu_Name=Other Documents +Item0=Beginner's Guide to HTML,http://www.ncsa.uiuc.edu/demoweb/html-primer.html +Item1=InterNIC Info Source,gopher://is.internic.net:70/11/infosource +Item2=Internet Services List,http://slacvx.slac.stanford.edu:80/misc/internet-services.html +Item3=Internet Talk Radio,http://www.ncsa.uiuc.edu/radio/radio.html +Item4=Library of Congress Vatican Exhibit,http://www.ncsa.uiuc.edu/SDG/Experimental/vatican.exhibit/Vatican.exhibit.html +Item5=NCSA Access Magazine,http://www.ncsa.uiuc.edu/Pubs/access/accessDir.html +Item6=Doctor Fun,http://sunsite.unc.edu/Dave/drfun.html +Item7=Postmodern Culture,http://jefferson.village.virginia.edu/pmc/contents.all.html +Item8=Zippy The Pinhead,http://www.cis.ohio-state.edu:84/ +Item9=Britannica Online,http://www.eb.com/ +Item10=ANU Art History Exhibit,http://www.ncsa.uiuc.edu/SDG/Experimental/anu-art-history/home.html +Item11=Web/Net T-Shirts,http://sashimi.wwa.com/~notime/mdd/www_shirt.html +Item12=Census Information,gopher://bigcat.missouri.edu/11/reference/census/us/basictables/ +Item13=FTP Sites,http://hoohoo.ncsa.uiuc.edu:80/ftp-interface.html + diff --git a/HTML/tarski/ghostscr.htm b/HTML/tarski/ghostscr.htm new file mode 100644 index 0000000..1854bd8 --- /dev/null +++ b/HTML/tarski/ghostscr.htm @@ -0,0 +1,163 @@ + + + Ghostscript and GSview Information + + + +

    +Ghostscript, Ghostview & GSview Icon + Ghostscript and GSview

    + +

    "Copyright Software"

    +
    +

    Ghostscript v3.12

    +

    Copyright (C) 1989, 1992, 1993, 1994

    + This copy of Ghostscript is governed not by the GNU +License, but by a substantially different license in a similar spirit, the +Aladdin Ghostscript Free Public License; the file PUBLIC contains a copy of +this license. You can find this file in the gs312ini.zip file. +

    + +Aladdin Enterprises
    +P.O. box 60264
    +Palo Alto, CA 94306
    +voice (415)322-0103
    +fax (415)322-1734
    +ghost@aladdin.com
    +

    + +Ghostscript is software that provides: +

      +
    • An interpreter for the PostScript (TM) language, and +
    • A set of C procedures (the Ghostscript library) that implement +the graphics capabilities that appear as primitive operations in the +PostScript language. +
    +

    +More details are available from the + +Ghostscript, Ghostview and GSview home page. +


    + +

    GSview Icon + GSview v3.12

    +

    GSview is copyright by Russell Lang.

    +
    +GSview is distributed with the GSview Free Public Licence. +This licence is contained in the LICENCE file that is contained in the gsvw113b.zip file. +The GSview Free Public Licence does not require any payment to the author; +however the author would welcome any donations to cover costs and time +involved in developing and maintaining GSview. These may be sent to: + +

    +Russell Lang
    +12 Princetown Road
    +MOUNT WAVERLEY, VIC 3149
    +AUSTRALIA
    +
    +

    +GSview for Windows is a Graphical User Interface (GUI) for MS-Windows +Ghostscript. GSview is dependent on the Ghostscript. GSview allows selected +pages to be viewed or printed. Ghostscript 3.12 or later is required. +

    +More details are available from the + + Ghostscript, Ghostview and GSview home page. +


    + +

    Installing Ghostscript and GSview

    +
      + +
    1. Download the following files: +
      +
      + +gs312w32.zip (369,810) +
      Ghostscript for Win32s Systems +

      +

      + +gs312ini.zip (426,513) +
      Necessary files to support Ghostscript +

      +

      +gs312fn1.zip (1,365,916) +
      Font package number 1 +

      +

      +gs312fn2.zip (741,137) +
      Font package number 2 +

      +

      +gsview12.zip (570,034) +
      GSview - A Graphical User Interface for Ghostscript. +
      +

      +

    2. Download the files to the root directory. ie. c:\ +

      +

    3. Use the "pkunzip -d" command when you unzip the files. +

      +

    4. Unzip gs312ini.zip and gs312w32.zip. These files will create a subdirectory called "GS3.12". +

      +

    5. Move gs312f1.zip, gs312fn2.zip and gsvw113b.zip to the c:\gs3.12 directory. +

      +

    6. Unzip gs312fn1.zip and gs312fn2.zip. These files will a subdirectory called "FONTS" +

      +

    7. Unzip gsvw113b.zip. This file will create three subdirectories, ESPTOOLS, +GSGRAB & SRC, and put a couple files in the c:\gs3.12 directory. (This file +contains a Windows and an OS/2 version of GSview.) +

      +

    8. (Optional) Delete the following files from c:\gs3.12: gvpm.exe, +gvpm.hlp, gvpm.inf (the OS/2 version of GSview) and gsview.exe (the 16-bit +version of GSview) +

      +

    9. Create a program item (icon) within one of your program groups by +dragging and dropping gsview32.exe from File Manager into a Program Group. +

      +

    10. Start GSview then select "Options, Ghostscript Command", and enter the +correct executable path. Include path for Ghostscript and the path to the +directory that contains the fonts. For example: +

      +

      +
      C:\gs3.12\gswin32.exe -IC:\gs3.12;C:\gs3.12\fonts +
      + +

      +

    11. Read the PUBLIC, README, USE.DOC files (Ghostscript) and Readme.gv and LICENSE (GSView) for details about the products. +

      +

    +
    + +

    Mosaic Configuration:

    +
      +
    1. Open Options, Preferences..., Viewers +
    2. Edit or enter the following information: +
    + +
    +
    Associate Mime Type of: +
    application/postscript +
    Description of MIME Type (Optional): +
    Postscript File Format +

    +

    With this/these extensions: +
    .eps,.ai,.ps +

    +

    To This Application: +
    C:\gs3.12\gswin32 +
    + + +
    +
    +mosaic-w@ncsa.uiuc.edu
    + +National Center for Supercomputing Applications
    +University of Illinois at Urbana/Champaign
    +
    + + + + + + diff --git a/HTML/tarski/tarski1.htm b/HTML/tarski/tarski1.htm new file mode 100644 index 0000000..c2fc0b6 --- /dev/null +++ b/HTML/tarski/tarski1.htm @@ -0,0 +1,24 @@ + + + + + +Tarski's World: More Information (1) + + + + + + + +

    +[Back | Forward] +

    Tarski's World

    + +

    +Tarski's World is based on a simple premise: that languages +are best learned by using them. The program applies this premise +to the symbo + + + diff --git a/HTML/tarski/tarski10.gif b/HTML/tarski/tarski10.gif new file mode 100644 index 0000000..4bdccdc Binary files /dev/null and b/HTML/tarski/tarski10.gif differ diff --git a/HTML/tarski/tarski11.gif b/HTML/tarski/tarski11.gif new file mode 100644 index 0000000..2fd9b9f Binary files /dev/null and b/HTML/tarski/tarski11.gif differ diff --git a/HTML/tarski/tarski12.gif b/HTML/tarski/tarski12.gif new file mode 100644 index 0000000..7e54089 Binary files /dev/null and b/HTML/tarski/tarski12.gif differ diff --git a/HTML/tarski/tarski14.gif b/HTML/tarski/tarski14.gif new file mode 100644 index 0000000..d29de1d Binary files /dev/null and b/HTML/tarski/tarski14.gif differ diff --git a/HTML/tarski/tarski3d.htm b/HTML/tarski/tarski3d.htm new file mode 100644 index 0000000..e69de29 diff --git a/HTML/tarski/tarski3e.htm b/HTML/tarski/tarski3e.htm new file mode 100644 index 0000000..09766b1 --- /dev/null +++ b/HTML/tarski/tarski3e.htm @@ -0,0 +1,26 @@ + + + + + +Tarski's World: More Information (3e) + + + + + + + +

    +[Back] +

    +Here are the files Edgar's World and Edgar's Sentences: +

    + +

    +[Back] +

    + + + + diff --git a/HTML/tarski/tarski3e.url b/HTML/tarski/tarski3e.url new file mode 100644 index 0000000..03694df --- /dev/null +++ b/HTML/tarski/tarski3e.url @@ -0,0 +1,2 @@ +[URL] +URL= diff --git a/HTML/tarski/tarski5.gif b/HTML/tarski/tarski5.gif new file mode 100644 index 0000000..346cd90 Binary files /dev/null and b/HTML/tarski/tarski5.gif differ diff --git a/HTML/tarski/tarski6.gif b/HTML/tarski/tarski6.gif new file mode 100644 index 0000000..4bdccdc Binary files /dev/null and b/HTML/tarski/tarski6.gif differ diff --git a/HTML/tarski/tarski7.gif b/HTML/tarski/tarski7.gif new file mode 100644 index 0000000..2a94c25 Binary files /dev/null and b/HTML/tarski/tarski7.gif differ diff --git a/HTML/tarski/tarski8.gif b/HTML/tarski/tarski8.gif new file mode 100644 index 0000000..462c8ea Binary files /dev/null and b/HTML/tarski/tarski8.gif differ diff --git a/HTML/tarski/tarski9.gif b/HTML/tarski/tarski9.gif new file mode 100644 index 0000000..fa8b086 Binary files /dev/null and b/HTML/tarski/tarski9.gif differ diff --git a/HTML/tarski/~wrd2230.tmp b/HTML/tarski/~wrd2230.tmp new file mode 100644 index 0000000..da3665d Binary files /dev/null and b/HTML/tarski/~wrd2230.tmp differ diff --git a/HTML/userman.htm b/HTML/userman.htm new file mode 100644 index 0000000..71e1a17 --- /dev/null +++ b/HTML/userman.htm @@ -0,0 +1,1195 @@ + + + + + + + + + + + +

    LOGLAN'82
    +

    + +

    USER'S GUIDE

    + +

    Institute of Informatics University of Warsaw January 1988 +

    + +
    revised October 1994 24/11/94 08:33 LITA Université +de Pau
    +
    + +

    TABLE of CONTENTS

    + +

    +PREFACE 3 1. +

    +USING LOGLAN-82 SYSTEM 3 1.1. +

    +COMPILATION 3 1.2. +

    +COMPILER SWITCHES 4 1.3. +

    +CODE GENERATION 4 1.4. +

    +PROGRAM execution 5 1.5. +

    +COMPILE TIME ERRORS 6 1.6. +

    +RUN-TIME ERRORS 6 2. +

    +COMPILER OPTIONS 7 2.1. +

    +OPTION FORMAT 7 2.2. +

    +OPTIONS LIST 7 2.3. +

    +FRAGMENTATION 8 3. +

    +CURRENT LOGLAN-82 IMPLEMENTATION SPECIFICATION 9 3.1. IMPLEMENTED +SUBSET OF LOGLAN 9 3.2. PREDEFINED LANGUAGE ELEMENTS 9 3.3. FILE +SYSTEM 9 3.4. FILE VARIABLES 9 3.4.1. FILE GENERATION 10 3.5. +FILE DEALLOCATION 10 3.6. GENERAL FILE OPERATIONS 10 3.7. TEXT +FILES 11 3.8. BINARY SEQUENTIAL FILES 11 3.9. DIRECT ACCESS BINARY +FILES 11 3.10. CONCURRENCY 12 3.10.1 INVOKING THE LOGLAN INTERPRETER +FOR CONCURRENT ROGRAMS 12 3.10.2 RESTRICTIONS AND DIFFERENCES +FROM THE REPORT 13 3.10.3 COMMUNICATION MECHANISM 14 3.11 SYSTEM +SIGNALS 16 3.12. IMPLEMENTATION RESTRICTIONS 16 4. APPENDIX A +: PREDEFINED CONSTANTS 17 5. APPENDIX B : PREDEFINED CLASSES 17 +5.1. MOUSE 19 6. APPENDIX ) : PREDEFINED PROCEDURES AND FUNCTIONS +21 7. APPENDIX D : ERROR CODES 23 8. APPENDIX E : LOGLAN RUNTIME +ERRORS 35 9. APPENDIX F : CHARACTER SET 37 10. BIBLIOGRAPHY 38 +10.0.1. LOGLAN'82 38 10.0.2. Algorithmic Logic 41 10.0.3. Related +literature 42 +

    PREFACE

    + +

    +This document provides information necessary to compile and execute +Loglan programs. +

    +This manual assumes basic knowledge of Loglan-82 language, described +in "Report on the Loglan Programming Language" (see +Bibliography). to ToC +

    1. USING LOGLAN-82 SYSTEM

    + +

    +The following three steps are required to execute a Loglan program: +

      +
    • Compilation (to intermediate code), +
    • Generation of the interpreted code (from intermediate code), +
    • Interpretation (i.e. execution of program). +
    + +

    +Compilation is accomplished by invoking Loglan compiler. This +step creates two destination files: the intermediate code file(.lcd) +and the listing file(.lst). The intermediate code file is the +input file for the second step: generation of the code accepted +by interpreter. In this step two files containing object code(.pcd +& .ccd) are produced. They are the input files for the third +step: interpretation. This step is equivalent to execution of +a program. to ToC +

    1.1. COMPILATION

    + +

    +To invoke the Loglan compiler without specifying any command line +parameters, type: +

    +LOGLAN +

    +Then the prompt appears on your terminal: +

    +File name: +

    +and the compiler waits for file specification.The default extension +is LOG. +

    +The compiler will produce (optionally) listing file with the same +file name and the extension LST and will produce, if no error +occurs, the code file with the extension LCD. Destination files +will be stored on the same drive and directory as the source file. +
    + +

    +Examples: +

    +$ LOGLAN +

    +File name: PROGRAM < ENTER>
    +
    + +

    +Loglan compiler compiles program from PROGRAM.LOG file and creates +PROGRAM.LCD. +

    +$ LOGLAN A:PROGRAM.DAT
    +
    + +

    +In this case the source file is A:PROGRAM.DAT. The file PROGRAM.LCD +will be created on drive A. +

    +$ LOGLAN /home/vous/PROGRAM2
    +
    + +

    +If any error occurs, the code file is not produced. At the end +of compilation the following message is printed: +

    +< number of errors> error(s) detected +

    1.2. COMPILER SWITCHES

    + +

    +There are two possibilities to specify compiler's options: by +compiler switches (i.e. external options) or by comments in the +source program (see chapter 2.). You may enter the compiler switches +in command line after file name in the following format: +

    +where swi consists of character that designates the name of the +option and either '+' or '-'. +

    +Examples: +

    +$ LOGLAN PROGRAM L- T+ +

    +$ LOGLAN PROGRAM The KBD directive +

    +In this case the default switches values are assumed. +

    +Scope of the switch is the entire program. All switches ,except +H, correspond to options. A switch has greater priority then options: +when you specify switch, all corresponding options inside source +program will be ignored. Full description of each option is given +in chapter 2.2. Switch L has additional significance. When this +switch is set off no listing file is produced. +

    1.3. CODE GENERATION

    + +

    +In this step information from the intermediate code file is read +and two destination files containing the code are produced. No +switch is permitted for this step. To generate code files, type: +

    +GEN < file name> +

    + (or HGEN The KBD directive < file +name> , if the switch H+ was specified for the compiler.(DOS/AT +only)) +

    +You type file name without extension (extension is ignored). +

    +Examples: +

    +$ GEN +

    +FILE_NAME: PROGRAM +

    +Information is read from file PROGRAM.LCD from default drive and +directory. Two destination files are produced: PROGRAM.CCD and +PROGRAM.PCD and stored in the same directory as the input file. +

    +$ GEN /home/vous/PROGRAM2 +

    +Files PROGRAM.CCD and PROGRAM.PCD are stored on drive A. +

    1.4. PROGRAM execution

    + +

    +To interprete (execute) the Loglan program you must invoke the +interpreter INT or HINT (if tNe switch H+ was specified). File +name must be specified in command line. The file extension is +ignored. The interpreter reads input files with the given name +and extensions CCD and PCD and executes the Loglan program. +

    +The syntax for calling the interpreter is +

    +INT < options> < file name> +

    +or +

    +HINT < options> < file name> (DOS/AT only) +

    +The following options are supported: +

    +/m < n > set memory size for Loglan program (in 16 bit words +for small and 32 bit words for huge memory). For concurrent programs +it means memory size for every process. +

    +/i information about garbage collection-compactification is printed. +

    +/r < n > used to invoke interpreter on nodes different from +console (see 3.4.). option parameter is console node number (as +defined by D-Link Network). +

    +/d causes trace to be printed to the file with .TRD extension +provided that the option or switch D+ was used during compiling. +

    +At the end of interpretation the following message is printed: +

    +End of LOGLAN-82 program execution +

    +Examples: +

    +$ LOGLAN \DAT\EXAMP.SRC, L+ +

    +The file \DAT\EXAMP.LCD and \DAT\EXAMP.LST are generated. +

    +$ GEN \DAT\EXAMP +

    +The files \DAT\EXAMP.CCD and \DAT\EXAMP.PCD are created. +

    +Then the program can be interpreted by:
    + +

    +$ INT \DAT\EXAMP +

    1.5. COMPILE TIME ERRORS

    + +

    +The errors detected during the compilation are printed on the +listing file, if this file is created. In the scope of option +L- or if the switch L is set off only the incorrect lines and +errors messages are printed . When the switch ( not option !) +L is set off then listing file is not produced and incorrect lines +and error messages are printed on the user's terminal. +

    +Error message has the following format: +

    +*** ln ERROR en txt id
    +
    +

    +where: +

    +ln - index of incorrect line, +

    +en - error's number (see Appendix B), +

    +txt- text that explain type of the error, +

    +id - identifier helpful to situate the error. +

    +Error messages are printed in the source listing after incorrect +lines. +

    +For syntax errors (numbered 101-147, 201-212), sign '?' indicates +the error's position in the line. +

    +Error may be detected beyond the line containing it. +

    +Identifier helpful to find an error is printed as soon as possible. +

    +For codes 331-338 error message is printed after first line of +virtual module declaration. +

    +Errors like "undeclared identifier" are printed in each +module once, after first reference to this identifier. Further +references are ignored. +

    +The errors related to case instruction may appear before the incorrect +line. +

    1.6. RUN-TIME ERRORS

    + +

    +Loglan run-time errors are detected by Loglan run-time system. +When any of these errors occurs, the appropriate system signal +is raised and error message is printed if handler is not found. +All of these error messages are described in Appendix C. moreover +the line number of the last executed statement is printed on the +user's terminal. +

    2. COMPILER OPTIONS

    + +

    +Options, like switches are used to pass some information to the +compiler. Options are placed in source program in comments. Scope +of options in source program is textual. Option may appear in +any place of source program, but it is active from the beginning +of the nearest instruction. Listing option L is active from the +next line after line containing setting this option on up to the +line containing setting this option off. Options overwrite defaults, +but are overwritten by switches (external options). Option definition +is not allowed before the keyword program. +

    2.1. OPTION FORMAT

    + +

    +Options may be placed in source program in comments in the following +format: +

    +(*$opt1,opt2,...*) +

    +where opti consists of character that designates the option and +either '+' or '-' e.g.: (*$L-,T+*). Options in one comment should +be separated by commas. Spaces in such comment are not allowed. +

    2.2. OPTIONS LIST

    + +

    +D - trace +

    +D+ - causes the line numbers of the executed instruction to be +printed, +

    +D- - default, +

    +L - listing +

    +L- - default, only incorrect lines are printed on the terminal +

    +L+ - all lines are printed on the listing file +

    +O - optimization +

    +O+ - optimization of some arithmetical and logical expressions +are included to generated code (default), +

    +O- - generate code without optimization, +

    +T - type conflict checking +

    +T+ - default, dynamic checking of type conflict in assignment +instructions and in parameter transmissions, +

    +T- - no dynamic checking +

    +H - memory model (switch only) APPLIES ONLY to PC/AT/XT !! +

    +H- - default, small memory +

    +H+ - huge memory +

    +PC/AT/XT When H- is specified all code and data must fit into +64K
    + +

    +bytes. When H+ is specified all memory available on IBM PC +

    +may be utilized, with the cost of increased execution time. +

    2.3. Fragmentation

    + +

    +It is possible to split one Loglan program into different files. +The preprocessor puts together the fragments of a program coming +from different files and enables in this way the a compilation +and, later, an execution of the entire Loglan source. +

    +In any place of Loglan text where it is possible to put semicolon +(;) you can put aside the following compiler directive +

    +#include < file> +

    +It means that any two declarations of instructions can be separated +by the directive. Do not forget however to end the preceding declaration +or instruction by the semicolon. +

    +Grammar +

    +#include "{path> }< file name> " < CR> +CR stands for end of line Carriage Return +

    +Remarks +

    +1. It may be a white space between the word 'include' and the +character ". +

    +2. You need not to specify the path to the included file if it +is stored in the current directory, i.e. the one from which you +began the compilation. +

    +3. The ortography of path should correspond to the plateform used +

    +(i.e. in DOS you use \ characters, in Unix it will be / character) +

    +Example +

    +program pr;
    +   var x: real;
    + #include c:\loglan\examples\simulation.log
    +
    +   unit c: class;
    +   end c;
    +begin
    +   read(x);
    +   ...
    +end
    +
    + +

    +The content of the file c:\loglan\examples\simulation.log replaces +the line include. +

    3. CURRENT LOGLAN-82 IMPLEMENTATION SPECIFICATION

    + +

    3.1. IMPLEMENTED SUBSET OF LOGLAN

    + +

    +The following constructions described in the report of Loglan-82 +have not been implemented: +

    +- local attributes, +

    +- separate compilation, +

    +File system is described in 3.3. +

    3.2. PREDEFINED LANGUAGE ELEMENTS

    + +

    +Predefined constants, procedures and functions are added to the +language (see Appendix A). Moreover keywords char (short form +of character) and bool (short form of boolean) are added. +

    +The character set, defined in the report of Loglan-82, is extended +by lower-case letters and the tabulation character (decimal code +9). It is possible to use operator '< > ' which stands for +'not equal'. +

    3.3. FILE SYSTEM

    + +

    +Loglan contains the predefined reference type file and a set of +statements and standard procedures to manipulate files. Both sequential +and direct access files are implemented. +

    3.4. FILE VARIABLES

    + +

    +Variables of the type file can be declared in the Loglan program +and can be used as any variables of a reference type. +

    +Example: +

    + var f:file, 
    +A:arrayof file; 
    +
    +unit p:procedure(f:file); ... end p; 
    +begin 
    +       ...... 
    +       f := A(i); 
    +       ...... 
    +end; 
    +
    + +

    3.4.1. FILE GENERATION

    + +

    +A file object is generated by open statement of the form: +

    +open(f,T) for internal files or
    +
    +open(f,T,A) for external files
    + +

    +where +

    +f is a file variable, +

    +T = text for text files, +

    +char for binary sequential files of character,
    +integer integer or +

    +real real values +

    +direct for direct access binary files. +

    +A is an expression of the type arrayof char designating external +file name. After execution of open statement the new file object +is created and it becomes a value of the file variable f. If the +file is opened as an external one, then it references to the file +A. +

    +Example: +

    +open(data,text) - new internal text file data is opened +

    +open(num ,integer) - new internal binary file num is opened +

    +(the file components are integer numbers) +

    +open(f,text,unpack("my.dat")) - external text file f +is opened; +

    +it references to the file my.dat stored on the default drive and +directory. +

    +open(f,direct,A) - an external direct access file with name in +array A is opened. +

    3.5. FILE DEALLOCATION

    + +

    +The file can be closed and deallocated by execution of the statement +kill. +

    3.6. GENERAL FILE OPERATIONS

    + +

    +There are three standard procedures associated with files: RESET, +REWRITE and UNLINK. +

    +call RESET(f) rewinds the file f. After execution of RESET on +sequential files only read/get operations are available. +

    +call REWRITE(f) creates a new empty file. After execution of REWRITE +on sequential files only write/put operations are available. +

    +call UNLINK(f) closes and deletes file f. File object is deallocated +and f is set to one. +

    +RESET or REWRITE must be performed on the file opening before +the first I/O operation on it. +

    3.7. TEXT FILES

    + +

    +The following operations are available to text files: read, readln, +eoln, write, writeln, eof. The first parameter of the operation +is a file variable. If it is omitted, then a standard input/output +file assigned to user's terminal is used. +

    +Example: +

    +   read(f,a,b); 
    +read(c); 
    +writeln(g," .... "); 
    +if eof(f) then .... 
    +
    + +

    +For more information see [1]. +

    3.8. BINARY SEQUENTIAL FILES

    + +

    +Any file created with the parameter T = integer, real or char +is a binary one. It is a sequence of components of the type T. +Only objects of type T can be read from or written to this file. +

    +The following operations are available to binary files: +

    +put(f, w1, ..., wn) +

    +get(f, x1, ..., xn) +

    +eof(f) +

    +where f is a file opened with the type T, wi is an expression +of the type T and xi is a variable of the type T. +

    +The statement put(f, w1, ..., wn) writes the components w1, ...,wn +to the file f. The statement get(f, x1, ..., xn) reads the next +n components from the file f and assigns them to the variables +x1, ..., xn. The statement eof is the same as for text files. +

    3.9. DIRECT ACCESS BINARY FILES

    + +

    +Direct access files are treated as a sequence of bytes without +any interpretation. Operations RESET and REWRITE prepare a file +for both reading and writing. RESET is used for existing files, +

    +REWRITE for the new ones. +

    +The following additional operations are available: +

    +call SEEK(f, offset, base) - moves the file pointer to the position +designated by offset relative to base. +

    +Offset is a signed integer specifying the number of bytes. +

    +Possible values for base are: +

    +0 - begining of file, +

    +1 - current position of file pointer, +

    +2 - end of the file. +

    +Examples: +

    +call SEEK(f, 0, 0) - rewinds file f, +

    +call SEEK(f, -3, 1) - backspaces file f by 3 bytes, +

    +call SEEK(f, 0, 2) - moves the file pointer to the first byte +after end of file +

    +POSITION(f) - returns current position of the file pointer associated +with f. +

    +PUTREC(f, A, n) - where A is an array of any primitive type and +n is an integer variable. Let k be the number of bytes occupied +by elements of array A. This operation writes min(k, n) bytes +from A to the file f and advances file pointer by the number of +written bytes. The number of bytes written to the file is returned +in the variable n. +

    +GETREC(f, A, n) - where A is an existing array of any primitive +type and n is an integer variable. Let k be the number of bytes +occupied by elements of array A This operation reads min(k,n) +bytes (or less, if end of file is encountered) from the file and +advances the file pointer by the number of read bytes. The number +of bytes read from the file is returned in the variable n. +

    3.10. CONCURRENCY

    + +

    +Implemented concurrency mechanisms differ much from those described +in the LOGLAN-82 report []. In particular, only distributed processes +are implemented, so they cannot communicate through shared variables. +For this reason semaphores had to be replaced by an entirely new +communication mechanism. Such a mechanism has been designed and +it is based on the rendez-vous schema. +

    3.10.1. INVOKING THE LOGLAN INTERPRETER FOR CONCURRENT PROGRAMS +

    + +

    +A concurrent LOGLAN program may run on a single computer with +concurrency simulated by time slicing. In this case LOGLAN interpreter +is invoked as usual. One must only remember that /m optional parameter +(see 1.4.) denotes memory size for each process rather than for +the whole program. +

    +To achieve true parallel (multiprocessor) execution, a network +of IBM PC computers may be used. For the time being, only D-Link +Network Version 3.21 is supported. In order to run a LOGLAN program +in the network environment take the following steps: +

    +1) make sure that every node is logged on, +

    +2) select arbitrarily one node as a console, +

    +3) invoke the LOGLAN interpreter on every node except the console, +giving it /r option with the console node number (see 1.4.). You +must give the same program file to all interpreters. Most conveniently +it may be achieved by accessing a file on a disk connected through +the network to each node. +

    +4) invoke the interpreter on the console without the /r option +(in the usual way). Give it the same program file as above. +

    +After the last step the main program process begins its execution +on the console node. Other processes may be created dynamically +on any node on which an interpreter is running. +

    +Regardless of the fact whether the network is used or not, +more than one process may be executed on the same computer. + +

    3.10.2. RESTRICTIONS AND DIFFERENCES FROM THE REPORT

    + +

    +All processes (even those executed on the same computer) are implemented +as distributed, i.e. without any shared memory. This fact implies +some restrictions on how processes may be used. Not all restrictions +are enforced by the present compiler, so it is the programmer's +responsibility to respect them. This is the list of restrictions: +

    +1) all process units must be declared as global, i.e. directly +inside the main program, +

    +2) a process cannot access global variables (except for the main +program process), +

    +3) any remote access to a process object other than a procedure +call is inhibited +

    +4) each parameter of +

    +a process, +

    +a procedure called by remote access to a process object, +

    +a procedure parameter of a process, +

    +must be one of the following: +

    +a value of the primitive type (INTEGER, REAL, CHAR, BOOLEAN, STRING) +

    +a procedure declared directly inside a process +

    +a procedure which is a formal parameter of a process +

    +any reference to a process object. +

    +This restriction implies that references to objKcts other than +processes have only local meaning (in a single process) and cannot +be passed among the processes. +

    +5) comparisons, IS, IN and QUA operations are not allowed for +the references to processes. +

    +6) operations which require dynamic type checking on the references +to processes are not allowed. +

    +7) a process may be attached only by a proper coroutine generated +by it. +

    +8) the variable MAIN is accesible only in the main program process. +

    +The following concurrent constructs described in the report are +not implemented at all: +

    +- semaphores and all operations on them +

    +- the WAIT expression. +

    +Semantics of the NEW generator is slightly modified when applied +to the processes. The first parameter of the first process unit +in the prefix sequence must be of type INTEGER. +This parameter denotes the node number of the computer on which +this process will be created. For a single computer operation +this parameter must be equal to 0. +

    +Example: +

    +unit A:class(msg:string);
    +...
    +end A;
    +unit P:A process(node:integer, pi:real);
    +...
    +end P;
    +...
    +var x:P;
    +...
    +begin...
    + (* Create process on node  4.  The  first  parameter  is  the  *) 
    + (* string required by the prefix A, the second is the node number *)
    + x := new P("Hello", 4, 3.141592653);
    +...
    +end
    +
    + +

    +. +

    +The following parallel constructs are implemented as defined in +the report: +

    +- KILL operation for a process +

    +- RESUME statement +

    +- STOP statement without parameter. +

    3.10.3. COMMUNICATION MECHANISM

    + +

    +Processes may communicate and synchronize by a mechanism based +on rendez-vous. It will be referred to as "alien call" +in the following description. +

    +An alien call is either: +

    +- a procedure (or function) call performed by a remote access +to a process object, or +

    +- a call of a procedure which is a formal parameter of a process, +or +

    +- a call of a procedure which is a formal parameter of an alien-called +procedure (this is a recursive definition). Every process object +has an enable mask. It is defined as a subset of all procedures +declared directly inside a process unit or any unit from its prefix +sequence (i.e. subset of all procedures that may be alien-called). +

    +A procedure is enabled in a process if it belongs to that process' +enable mask. A procedure is disabled if it does not belong to +the enable mask. +

    +Immediately after generation of a process object its enable mask +is empty (all procedures are disabled). +

    +Semantics of the alien call is different from the remote call +described in the report. Both the calling process and the process +in which the procedure is declared (i.e. the called process) are +involved in the alien call. This way the alien call may be used +as a synchronization mechanism. +

    +The calling process passes the input parameters and waits for +the call to be completed. +

    +The alien-called procedure is executed by the called process. +Execution of the procedure will not begin before certain conditions +are satisfied. First, the called process must not be suspended +in any way. The only exception is that it may be waiting during +the ACCEPT statement (see below). Second, the procedure must be +enabled in the called process. +

    +When the above two conditions are met the called process is interrupted +and forced to execute the alien-called procedure (with parameters +passed by the calling process). +

    +Upon entry to the alien-called procedure all procedures become +disabled in the called process. +

    +Upon exit the enable mask of the called process is restored to +that from before the call (regardless of how it has been changed +during the execution of the procedure). The called process is +resumed at the point of the interruption. The execution of the +ACCEPT statement is ended if the called process was waiting during +the ACCEPT (see below). +

    +At last the calling process reads back the output parameters and +resumes its execution after the call statement. +

    +The process executing an alien-called procedure can easily be +interrupted by another alien call if the enable mask is changed. +

    +There are some new language constructs associated with the alien +call mechanism. The following statements change the enable mask +of a process: +

    +ENABLE p1, ..., pn +

    +enables the procedures with identifiers p1, ..., pn. If there +are any processes waiting for an alien call of one of these procedures, +one of them is chosen and its request is processed. The scheduling +is done on a FIFO basis, so it is strongly fair. The statement: +

    +DISABLE p1, ..., pn +

    +disables the procedures with identifiers p1, ..., pn. +

    +In addition a special form of the RETURN statement: +

    +RETURN ENABLE p1, ..., pn DISABLE q1, ..., qn +

    +allows to enable the procedures p1, ..., pn and disable the procedures +q1,...,qn after the enable mask is restored on exit from the alien-called +procedure. It is legal only in the alien-called procedures (the +legality is not enforced by the compiler). +

    +A called process may avoid busy waiting for an alien call by means +of the ACCEPT statement: +

    +ACCEPT p1, ..., pn +

    +adds the procedures p1, ..., pn to the current mask, and waits +for an alien call of one of the currently enabled procedures. +After the procedure return the enable mask is restored to that +from before the ACCEPT statement. +

    +Note that the ACCEPT statement alone (i.e. without any ENABLE/DISABLE +statements or options) provides a sufficient communication mechanism. +In this case the called process may execute the alien-called procedure +only during the ACCEPT statement (because otherwise all procedures +are disabled). It means that the enable mask may be forgotten +altogether and the alien call may be used as a pure totally synchronous +rendez-vous. Other constructs are introduced to make partially +asynchronous communication patterns possible. +

    3.11. SYSTEM SIGNALS

    + +

    +System signals are connected to runtime errors (see APPENDIX C). +

    +These signals are the following: +

    +ACCERROR - reference to non existing object, CONERROR - array +index outside the range or lower bound is greater than upper bound +during array object generation, LOGERROR - errors related to control +transfer, MEMERROR - memory overflow, NUMERROR - errors related +to arithmentic operations like division by zero, floating point +overflow, TYPERROR - type conflict in assignment statement, during +parameter tran smission or headline conflict for actual parameter +function and procedure. SYSERROR - errors related to file system, +like reading after writing, too many files etc. +

    3.12. IMPLEMENTATION RESTRICTIONS

    + +

    +- Text line in source program can't be longer than 80 characters. +- Maximal length of identifier is 20 characters, but entire length +of all identifiers and keywords should be less than 3000 characters. +- String constant can't be longer than 260 characters. - For case +instructions: - up to 6 levels of nested case instructions are +allowed, - range of labels can't be greater than 160. - Number +of formal parameters can't be greater than 40, whereas up to 35 +output or input parameters are allowed. Total number of formal +parameters and variables declared in one module can't be greater +than 130. - Number of array indices (i.e. arrayof) can't be greater +than 63, - Standard type integer has the range (-32767,+32767) +for small memory (16 - bit word). For huge memory (32-bit word) +the range is (-2147483647,+2147483647), but values of constant +expressions in a program must lie within the range (-2767, 32767). +- Real numbers have the range (-8.43E-37, 3.37E+38) with 24-bit +mantissa and 8-bit exponenet for small memory , giving about 7 +digits of precision. For huge memory the range is (4.19E-307, +1.67E+308) with 53-bit mantissa and 11-bit exponent, giving about +15 digits of precision.Values of constant expression in a program +must lie in the range (-8.43E-37, 3.37E+38). Warning +

    +Compiler computes values of expressions built from constants without +range checking. It means, that integer overflow, floating point +overflow or underflow cause incorrect result without any message. +

    APPENDIX A : PREDEFINED CONSTANTS

    + +

    +INTSIZE +

    +The size in bytes of integer variables +

    +REALSIZE +

    +The size in bytes of real variables +

    APPENDIX B : PREDEFINED CLASSES

    + +

    +of GRAPHICS & MOUSE +

    +for PC486 for Unix for PC286 +

    APPENDIX C : PREDEFINED PROCEDURES AND FUNCTIONS

    + +

    +ENDRUN:procedure;
    +Terminates program execution (ABORT).
    +RANSET:procedure(x:real);
    +Initializes random generator (for RANDOM function)
    +RANDOM:function:real;
    +Generates uniformly distributed pseudo-random numbers in the interval +(0,1).
    +SQRT:function(x:real):real;
    +Computes square root of parameter x.
    +SIN:function(x:real):real;
    +Computes sinus of parameter x.
    +COS:function(x:real):real;
    +Computes cosinus of parameter x.
    +TAN:function(x:real):real;
    +Computes tangens of parameter x.
    +EXP:function(x:real):real;
    +Computes e**x.
    +LN:function(x:real):real;
    +Computes natural logarithmus of parameter x.
    +ATAN:function(x:real):real;
    +Computes arcus tangens of parameter x.
    +ENTIER:function(x:real):integer;
    +Computes entier part of parameter x.
    +ROUND:function(x:real):integer;
    +Computes rounded value of parameter x: ROUND(x)=ENTIER(x+0.5). +
    +IMIN:function(x, y:integer):integer;
    +Computes minimum of two parameters.
    +IMAX:function(x, y:integer):integer;
    +Computes maximum of two parameters.
    +IMIN3:function(x, y, z:integer):integer;
    +Returns the minimum of three parameters.
    +IMAX3:function(x, y, z:integer):integer;
    +Returns maximum of three parameters.
    +ISHFT:function(x, k:integer):integer;
    +Logically shifts x by k bits: left, when k is positive, right +otherwise.
    +IAND:function(n, k:integer):integer;
    +Returns logical product of parameters (on all bits).
    +IOR:function(n, k:integer):integer;
    +Returns logical sum of parameters (on all bits).
    +XOR:function(n, k:integer):integer;
    +Returns exlusive sum of parameters (on all bits).
    +INOT:function(n:integer):integer;
    +Returns logical complement of parameters (on all bits).
    +ORD:function(c:char):integer;
    +Returns number that represents character c (see APPENDIX F). +
    +The following equations are satisfied: CHR(ORD(c)) = c & ORD(CHR(n)) += n
    +CHR:function(n:integer):char;
    +Returns character represented by parameter n (see APPENDIX F). +
    +UNPACK:function(s:string):arrayof char;
    +Returns address of new array object containing characters of the +string s.
    +MEMAVAIL:function:integer;
    +Returns the size of available memory in the current process (in +words).
    +EXEC:function(cmd:arrayof char):integer;
    +Calls secondary command processor with cmd as a command string. +Exit code is returned as a value of EXEC. TIME:function: integer; +
    +Returns an integer value indicating the amount of central processor +
    +time in seconds used by current process.
    +RESET:procedure(f:file);
    +Positionnes file f at the first component and readies it to reading. +
    +REWRITE:procedure(f:file);
    +Positionnes file f at the first component and readies it for output. +
    +The file f becomes empty (eof(f) = true).
    +UNLINK:procedure(f:file);
    +Closes and deletes file f (see 3.3.4)
    +SEEK:procedure(f:file; offset, base:integer);
    +Positiones file pointer (see 3.3.7)
    +POSITION:function(f:file):real;
    +Reads position of file pointer (see 3.3.7) +

    appendix D: Error Codes APPENDIX E : LOGLAN RUNTIME ERRORS +

    + +

    +In the following list system signal name, raised after detection +of runtime error, is placed in brackets. +

    +ARRAY INDEX ERROR (CONERROR) +

    +Index outside range during reference to array variable. NEGATIVE +STEP VALUE (CONERROR) +

    +SL CHAIN CUT OFF (LOGERROR)
    + +

    +Control transfer to object that has SL link cut off earlier in +the consequence of kill operation. ILLEGAL ATTACH (LOGERROR) +

    +The value of parameter of attach instruction is none or object +differs from coroutine. ILLEGAL DETACH (LOGERROR) +

    +An attempt to return by detach to coroutine that has been dealocated +(by kill). ILLEGAL RESUME (LOGERROR) +

    +An attempt to resume an object which is not a process or a process +which is running. TOO MANY PROCESSES ON ONE MACHINE (SYSERROR) +

    +Number of processes existing on one computer is greater than 64. +INVALID NODE NUMBER (SYSERROR) +

    +An attempt to create a process on a computer which is not connected +to network. IMPROPER QUA (LOGERROR) +

    +Error during computing expression of the form: ...x qua a, when +'x' references to none or 'a' doesn't prefix dynamic type object, +which is value of 'x'. ILLEGAL ASSIGNMENT (TYPERROR) +

    +Type conflict between left and right side of assignment instruction. +FORMAL TYPE MISSING (LOGERROR) +

    +Formal type is not accessible because of SL cut off. ILLEGAL KILL +(LOGERROR) +

    +An attempt to deallocate object in SL chain of active object. +ILLEGAL COPY (LOGERROR) +

    +An attempt to copy non terminated object (i.e. class before execution +of return statement, coroutine before execution of end statement...). +REFERENCE TO NONE (ACCERROR) +

    +An attempt to remote access (by dot) to attributes of non existing +object: dealocated or not generated. MEMORY OVERFLOW (MEMERROR) +

    +INCOMPATIBLE HEADERS (TYPERROR)
    + +

    +Actual parameter list of generated object (procedure, function +or class) is incompatible with formal parameter list from module +declaration or formal function type is incompatible with actual +function type. INCORRECT ARRAY BOUNDS (CONERROR)
    + +

    +An attempt to generate dynamic array object, when lower bound +of index range is greater than upper bound. +

    +DIVISION BY ZERO (NUMERROR)
    + +

    +COROUTINE TERMINATED (LOGERROR) +

    +An attempt to transfer control to a terminated coroutine. COROUTINE +ACTIVE (LOGERROR) +

    +An attempt to transfer control to an active coroutine. HANDLER +NOT FOUND (LOGERROR) +

    +There is no handler for signal declared by user. ILLEGAL RETURN +(LOGERROR) +

    +An attempt to execute return instruction in handler serving system +signal. UNIMPLEMENTED STANDARD PRC. (LOGERROR) +

    +Standard procedure or function is not implemented. FORMAL LIST +TOO LONG (MEMERROR) +

    +Formal parameter list is greater than 40. ILLEGAL I/O OPERATION +(SYSERROR) +

    +Reading after writing, the type of the read/write parameter does +not match the type of the file etc. I/O ERROR (SYSERROR) +

    +System error during I/O. CANNOT OPEN FILE (SYSERROR) +

    +INPUT DATA FORMAT BAD (SYSERROR)
    + +

    +SYSTEM ERROR (SYSERROR)
    +Should not occur. UNRECOGNIZED ERROR +

    APPENDIX F : CHARACTER SET

    + +

    +At the top of the table are hexadecimal digits (0 to 7), and to +the left of the table are hexadecimal digits (0 to F). Hexadecimal +code of ASCII character is constructed by contatenation of column +label and row label. For example, the value of character representing +the plus sign is 2B. +

    +                   0     1     2     3     4     5     6     7 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          0     ! NUL ! DLE ! SP  !  0  !  @  !  P  !     !  p  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          1     ! SOH ! DC1 !  !  !  1  !  A  !  Q  !  a  !  q  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          2     ! STX ! DC2 !  "  !  2  !  B  !  R  !  b  !  r  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          3     ! ETX ! DC3 !  #  !  3  !  C  !  S  !  c  !  s  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          4     ! EOT ! DC4 !  $  !  4  !  D  !  T  !  d  !  t  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          5     ! ENQ ! NAK !  %  !  5  !  E  !  U  !  e  !  u  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          6     ! ACK ! SYN !  &   !  6  !  F  !  V  !  f  !  v  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          7     ! BEL ! ETB !  '  !  7  !  G  !  W  !  g  !  w  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          8     ! BS  ! CAN !  (  !  8  !  H  !  X  !  h  !  x  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          9     ! HT  ! EM  !  )  !  9  !  I  !  Y  !  i  !  y  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          A     ! LF  ! SUB !  *  !  :  !  J  !  Z  !  j  !  z  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          B     ! VT  ! ESC !  +  !  ;  !  K  !  [  !  k  !  {  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          C     ! FF  ! FS  !  ,  !  <   !  L  !  \  !  l  !  |  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          D     ! CR  ! GS  !  -  !  =  !  M  !  ]  !  m  !  }  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          E     ! SO  ! RS  !  .  !  >   !  N  !  ^  !  n  !  ~  ! 
    +                _________________________________________________ 
    +                !     !     !     !     !     !     !     !     ! 
    +          F     ! SI  ! US  !   / !  ?  !  O  !   _ !  o  ! DEL ! 
    +                _________________________________________________ 
    +
    + +

    +. where: +

    +     NUL  Null	DLE  Data Link Escape 
    +     SOH  Start of Heading	DC1  Device Control 1 
    +     STX  Start of Text	DC2  Device Control 2 
    +     ETX  End of Text	DC3  Device Control 3 
    +     EOT  End of Transmission	DC4  Device Control 4 
    +     ENQ  Enquiry	NAK  Negative Acknowledge 
    +     ACK  Acknowledge	SYN  Synchronous Idle 
    +     BEL  Bell	ETB  End of Transmission Block 
    +     BS   Backspace	CAN  Cancel 
    +     HT   Horizontal Tabulation	EM   End of Medium 
    +     LF   Line Feed	SUB  Substitute 
    +     VF   Vertical Tab	ESC  Escape 
    +     FF   Form Feed	FS   File Separator 
    +     CR   Carriage Return	GS   Group Separator 
    +     SO   Shift Out	RS   Record Separator 
    +     SI   Shift In	US   Unit Separator 
    +     SP   Space	DEL  Delete 
    +
    + +

    Bibliography

    + +

    +16 LITA, Pau Loglan'82 user's manual Loglan'82 users's manual +November 24, 1994 15 + + + diff --git a/HTML/whylog.htm b/HTML/whylog.htm new file mode 100644 index 0000000..efe425a --- /dev/null +++ b/HTML/whylog.htm @@ -0,0 +1,258 @@ + + + + +Why Loglan'82? + + + +

    Why Loglan'82?

    + +

    +We think that everybody should take acquaintance with certain +features of Loglan'82. Even if you will continue to use your favorite +XYZ language, you will be at least aware of what you are missing. +
    +Four features of Loglan'82 distinguish it from the other OO languages: +

    1. +multi-level inheritance,
      + the language offers both nesting and inheritance of modules +
      +
      nesting enables sharing of environments and inheritance +enables private copies of environments.
      +Both methods of module's construction are useful and important! + +
    2. multi-kind inheritance +
      + e.g. a procedure can inherit from a class,
      +
      making use of it one can enforce protocols, dynamically check +axioms of abstract data types etc. +
    3. SAFETY
      +- Loglan'82 signals a lot of programming errors that pass +unrecognized in other systems.
      +-
      There is no risk of dangling references, no confusion of +types ...
      + Safe deallocation statement and safe storage management +system +
    4. object-oriented concurrency +
      + objects of processes can be created dynamically and allocated +on a processor accessible by the network
      +
      The processes can communicate and synchronize through a new, +powerful mechanism: ALIEN CALL +
    + +

    +Other, standard methods of OO programming are present in Loglan'82: +

      +
    • classes and objects of classes, +
    • virtual methods, +
    • hierarchies of classes, +
    • exception handling, +
    • operators of structured programming, +
    • dynamic arrays, +
    • coroutines +
    • etc. +
    + +

    + +

    +Loglan'82 is accompanied by an original methodology of software +engineering which supports the most complicated and most expensive +phases of software creation: specification, analysis and verification. +There are good reasons for using Loglan'82 in: +

    + +

    Education.

    + +

    +The academic community has a need for one language which enables +to teach all elements of object programming: classes & objects, +coroutines, processes (in Loglan'82 processes are objects which +are able to act in parallel), inheritance, exception handling, +dynamic arrays etc. Loglan'82 offers the complete sets of programming +tools used in object and modular and structural programming. +

    +It is of importance to have compilers acting in different operating +environments: MS-DOS, Unix, Atari, etc. in order to assure the +exchange of sources between students and teachers, between users +of : personal computers, workstations and servers of university's +networks. We are working on the prolongation of the list of machines +and systems that support Loglan'82. +

    +Loglan'82 supports other styles of programming e.g. programming +by rules, functional programming etc. +

    +The teacher and the students can use different computers (see +"Machines" file) and still they can exchange the sources +and to follow the experiments of others. You can distribute the +files of Loglan'82 among the students which own PC/DOS, ATARI, +PS2, PC/Unix. You can install Loglan'82 in your computing centre +on Unix or Vax/VMS or Novell servers. You can install Loglan'82 +on your workstation (Sun, PC/Unix, Apollo etc.). On all machines +you can compile and execute the same program. Whether it will +be a student's program checked by a teacher, or an instructive +program transmitted to the students. And students can work at +home or in a computer room of your University. +

    +For the PC users Loglan'82 comes with an environment consisting +of - lotek - a text editor integrated with compiler and other +tools, - a structural editor which guides you when you do not +know the syntax of Loglan'82, - an electronic manual to be used +with Norton Guide or its clones, +

    +A set of instructive examples is added to the distribution package. +

    +We encourage you to experiment with the system since: +

      +
    • you can find it useful and interesting to teach the object +programming, +
    • you can find Loglan'82 useful in fast prototyping of software, +
    • you can apply and extend several predefined classes which +define and implement the problem- oriented languages extending +Loglan'82 in various directions. +
    + +

    Research.

    + +

    +Loglan'82 has been used as a tool with a success in research +in: +

      +
    • object oriented databases, +
    • symbolic computation (computer algebra, ...), +
    • formal proofs, +
    • proving the properties of programs.
      + +
    + +

    +this list is not the exhaustive one. +

    +Loglan'82 is a source of many problems of broader interest. +

      +
    1. The problem of giving one non-contradictory semantics to the +language admitting both nesting of modules and inheritance from +various levels. +
    2. Dangling reference problem. +
    3. Mathematical models of concurrent processes.
      +Loglan'82 is the result of a research on fundamental questions +like 1-3 . +
    4. Multiple inheritance and nesting. +
    5. Libraries of predefined classes - how to define the meaning +of separately compiled modules in the presence of nesting and +multiple inheritance. +
    6. The virtual Loglan'82 machine as a federation of co-processes. +
    7. Execution of processes of a Loglan'82 program in a LAN of +heterogeneous computers. +
    8. Execution of Loglan'82 programs on parallel computers e.g. +transputers. +
    9. to find a complete, axiomatic definition of the notions of +class and of inheritance, +
    10. is it possible to make efficiently the nesting of modules +and the multiple inheritance? +
    11. how to manage the libraries of predefined procedures and classes +in the presence of nesting? +
    12. how to install the language on a real multiprocessor system? +
    + +

    +The problem 1 was solved by the team lead by A.Kreczmar in co-operation +with the group of H. Langmaack. +

    +The problem 2 was solved by A.Kreczmar and was analyzed formally +by H. Oktaba. +

    +T.Müldner and A.Salwicki gave the Max model of parallel computations. +H.-D. Burkhard proved that it differs essentially from the interleaving +model. +

    +B. Ciesielski gave a new concept of objects of processes and a +communication mechanism of alien calls of procedures. This version +was implemented by him in 1988. +

    +The problems 4 - 12 are open. We would be happy to co-operate +on solving them together with you. +

    +We recommend Loglan'82 as a tool to be used in the research in: +object-oriented databases, development of CASE tools, VHDL, silicon +compilers, simulation, etc. +

    Production of new software

    + +

    +There are only a few languages which, like Loglan'82, enable both +ways of modules' developing: nesting (- a module can be declared +in other module) and inheritance (also called prefixing). The +modules of your software can share the environment (by means of +nesting) or they can inherit other modules as private copies of +the modules declared elsewhere. The inheritance in Loglan'82 permits +to inherit a module declared somewhere in the tree of nested modules. +Moreover, the inheritance is no longer restricted to classes. +Any module, whether it will be a class, a block, a procedure, +a function, a coroutine or a process can inherit from a class. +Coroutines and processes can be inherited in classes, coroutines +or processes. Another kind of module is a handler. Handlers serve +to handle signals (of exceptions). +

    +Altogether one can use 7 kinds of modules. +

    +The tools offered by Loglan'82 enable in various ways to create +generic modules whether they are to serve as generic procedures +or parameterized data types. In order to do so one can use either +the possibility to pass types as formal parameters or the inheritance +mechanisms. The language makes possible overloading the names +of operations via the mechanism of virtual functions or procedures. +

    +This and other programming tools offered by Loglan'82 permit to +quickly create a prototype of a program and to test it in a friendly +environment. The compiler gives a good diagnostic of the eventual +errors. For the time being we can not offer a code generator. +Instead you can use the Loglan_to_C crosscompiler. +

    +The language is especially well suited for the +

      +
    • reusability and +
    • proving the correctness. +
    + +

    +Loglan'82 supports various methods of programming: +

      +
    • imperative - since it is a descendant of Algol, Pascal, ... +
    • object-oriented - since it is a continuation, and extension +of the ingenious ideas of Simula-67, +
    • functional programming is easy, +
    • programming by rules is supported by a specialized class BACKTRACK +designed and developed in Loglan'82. +
    +
    + +
    +We would appreciate any news (comments, questions, suggestions, +objections, ...) from you. Please write to Andrzej.Salwicki@univ-pau.fr + +
    +
    + +

    + + + +


    + +
    +AS 08:03 +04/12/1994 +
    + +

    +Pau, le 26 Janvier 1994 + + + +p \ No newline at end of file diff --git a/HTML/whylog.htm~ b/HTML/whylog.htm~ new file mode 100644 index 0000000..2784f4c --- /dev/null +++ b/HTML/whylog.htm~ @@ -0,0 +1,258 @@ + + + + +Why Loglan'82? + + + +

    Why Loglan'82?

    + +

    +We think that everybody should take acquaintance with certain +features of Loglan'82. Even if you will continue to use your favorite +XYZ language, you will be at least aware of what you are missing. +
    +Four features of Loglan'82 distinguish it from the other OO languages: +

    +multi-level inheritance,
    + the language offers both nesting and inheritance of modules +
    +
    nesting enables sharing of environments and inheritance +enables private copies of environments.
    +Both methods of module's construction are useful and important! +

      +
    1. multi-kind inheritance +
      + e.g. a procedure can inherit from a class,
      +
      making use of it one can enforce protocols, dynamically check +axioms of abstract data types etc. +
    2. SAFETY
      +- Loglan'82 signals a lot of programming errors that pass +unrecognized in other systems.
      +-
      There is no risk of dangling references, no confusion of +types ...
      + Safe deallocation statement and safe storage management +system +
    3. object-oriented concurrency +
      + objects of processes can be created dynamically and allocated +on a processor accessible by the network
      +
      The processes can communicate and synchronize through a new, +powerful mechanism: ALIEN CALL +
    + +

    +Other, standard methods of OO programming are present in Loglan'82: +

      +
    • classes and objects of classes, +
    • virtual methods, +
    • hierarchies of classes, +
    • exception handling, +
    • operators of structured programming, +
    • dynamic arrays, +
    • coroutines +
    • etc. +
    + +

    + +

    +Loglan'82 is accompanied by an original methodology of software +engineering which supports the most complicated and most expensive +phases of software creation: specification, analysis and verification. +There are good reasons for using Loglan'82 in: +

    + +

    Education.

    + +

    +The academic community has a need for one language which enables +to teach all elements of object programming: classes & objects, +coroutines, processes (in Loglan'82 processes are objects which +are able to act in parallel), inheritance, exception handling, +dynamic arrays etc. Loglan'82 offers the complete sets of programming +tools used in object and modular and structural programming. +

    +It is of importance to have compilers acting in different operating +environments: MS-DOS, Unix, Atari, etc. in order to assure the +exchange of sources between students and teachers, between users +of : personal computers, workstations and servers of university's +networks. We are working on the prolongation of the list of machines +and systems that support Loglan'82. +

    +Loglan'82 supports other styles of programming e.g. programming +by rules, functional programming etc. +

    +The teacher and the students can use different computers (see +"Machines" file) and still they can exchange the sources +and to follow the experiments of others. You can distribute the +files of Loglan'82 among the students which own PC/DOS, ATARI, +PS2, PC/Unix. You can install Loglan'82 in your computing centre +on Unix or Vax/VMS or Novell servers. You can install Loglan'82 +on your workstation (Sun, PC/Unix, Apollo etc.). On all machines +you can compile and execute the same program. Whether it will +be a student's program checked by a teacher, or an instructive +program transmitted to the students. And students can work at +home or in a computer room of your University. +

    +For the PC users Loglan'82 comes with an environment consisting +of - lotek - a text editor integrated with compiler and other +tools, - a structural editor which guides you when you do not +know the syntax of Loglan'82, - an electronic manual to be used +with Norton Guide or its clones, +

    +A set of instructive examples is added to the distribution package. +

    +We encourage you to experiment with the system since: +

      +
    • you can find it useful and interesting to teach the object +programming, +
    • you can find Loglan'82 useful in fast prototyping of software, +
    • you can apply and extend several predefined classes which +define and implement the problem- oriented languages extending +Loglan'82 in various directions. +
    + +

    Research.

    + +

    +Loglan'82 has been used as a tool with a success in research +in: +

      +
    • object oriented databases, +
    • symbolic computation (computer algebra, ...), +
    • formal proofs, +
    • proving the properties of programs.
      + +
    + +

    +this list is not the exhaustive one. +

    +Loglan'82 is a source of many problems of broader interest. +

      +
    1. The problem of giving one non-contradictory semantics to the +language admitting both nesting of modules and inheritance from +various levels. +
    2. Dangling reference problem. +
    3. Mathematical models of concurrent processes.
      +Loglan'82 is the result of a research on fundamental questions +like 1-3 . +
    4. Multiple inheritance and nesting. +
    5. Libraries of predefined classes - how to define the meaning +of separately compiled modules in the presence of nesting and +multiple inheritance. +
    6. The virtual Loglan'82 machine as a federation of co-processes. +
    7. Execution of processes of a Loglan'82 program in a LAN of +heterogeneous computers. +
    8. Execution of Loglan'82 programs on parallel computers e.g. +transputers. +
    9. to find a complete, axiomatic definition of the notions of +class and of inheritance, +
    10. is it possible to make efficiently the nesting of modules +and the multiple inheritance? +
    11. how to manage the libraries of predefined procedures and classes +in the presence of nesting? +
    12. how to install the language on a real multiprocessor system? +
    + +

    +The problem 1 was solved by the team lead by A.Kreczmar in co-operation +with the group of H. Langmaack. +

    +The problem 2 was solved by A.Kreczmar and was analyzed formally +by H. Oktaba. +

    +T.Müldner and A.Salwicki gave the Max model of parallel computations. +H.-D. Burkhard proved that it differs essentially from the interleaving +model. +

    +B. Ciesielski gave a new concept of objects of processes and a +communication mechanism of alien calls of procedures. This version +was implemented by him in 1988. +

    +The problems 4 - 12 are open. We would be happy to co-operate +on solving them together with you. +

    +We recommend Loglan'82 as a tool to be used in the research in: +object-oriented databases, development of CASE tools, VHDL, silicon +compilers, simulation, etc. +

    Production of new software

    + +

    +There are only a few languages which, like Loglan'82, enable both +ways of modules' developing: nesting (- a module can be declared +in other module) and inheritance (also called prefixing). The +modules of your software can share the environment (by means of +nesting) or they can inherit other modules as private copies of +the modules declared elsewhere. The inheritance in Loglan'82 permits +to inherit a module declared somewhere in the tree of nested modules. +Moreover, the inheritance is no longer restricted to classes. +Any module, whether it will be a class, a block, a procedure, +a function, a coroutine or a process can inherit from a class. +Coroutines and processes can be inherited in classes, coroutines +or processes. Another kind of module is a handler. Handlers serve +to handle signals (of exceptions). +

    +Altogether one can use 7 kinds of modules. +

    +The tools offered by Loglan'82 enable in various ways to create +generic modules whether they are to serve as generic procedures +or parameterized data types. In order to do so one can use either +the possibility to pass types as formal parameters or the inheritance +mechanisms. The language makes possible overloading the names +of operations via the mechanism of virtual functions or procedures. +

    +This and other programming tools offered by Loglan'82 permit to +quickly create a prototype of a program and to test it in a friendly +environment. The compiler gives a good diagnostic of the eventual +errors. For the time being we can not offer a code generator. +Instead you can use the Loglan_to_C crosscompiler. +

    +The language is especially well suited for the +

      +
    • reusability and +
    • proving the correctness. +
    + +

    +Loglan'82 supports various methods of programming: +

      +
    • imperative - since it is a descendant of Algol, Pascal, ... +
    • object-oriented - since it is a continuation, and extension +of the ingenious ideas of Simula-67, +
    • functional programming is easy, +
    • programming by rules is supported by a specialized class BACKTRACK +designed and developed in Loglan'82. +
    +
    + +
    +We would appreciate any news (comments, questions, suggestions, +objections, ...) from you. Please write to Andrzej.Salwicki@univ-pau.fr + +
    +
    + +

    + + + +


    + +
    +AS 08:03 +04/12/1994 +
    + +

    +Pau, le 26 Janvier 1994 + + + +pp \ No newline at end of file diff --git a/HTML/xiiuwgr.htm b/HTML/xiiuwgr.htm new file mode 100644 index 0000000..73133e6 --- /dev/null +++ b/HTML/xiiuwgr.htm @@ -0,0 +1,430 @@ + + +Xiiuwgraf + + + + +

    XIIUWGRAF

    + +
    Une classe Loglan predefinie
    +pour la gestion de graphismes en multifenêtrage
    +sous XWindows.
    + +

    + + +

    Auteurs et realisateurs:

    +

    Eric BECOURT & + Jerôme LARRIEU

    + + + + + + + + + + + + + + + + + + + + + + + + + + +LITA Pau 1993

    +


    +Table de matières ou +tresc
    + + +

    +

    +1: +Différences essentielles entre XIIUWGRAF et IIUWGRAPH

    + + + Ce paragraphe a pour objet de donner certaines particularités de XIIUWGRAF, ceci afin de comprendre son fonctionnement général.

    + + Tout d'abord il est important de signaler qu'à la différence de IIUWGRAPH, XIIUWGRAF est un programme à part entièc;re (plus exactement un processus crée par l'interprêteur LOGLAN).C'est pour cela qu'il est déconseillé (sauf cas de force majeure) de faire CONTROL-C pour terminer un programme : en effet, ceci a pour effet de terminer l'exécution de l'interprêteur sans terminer XIIUWGRAF (création d'un processus zombie). Pour terminer une session graphique, il faudra donc automatiquement taper dans le programme en LOGLAN la commande GROFF car elle va terminer l'exécution de XIIUWGRAF.

    + + Certaines commandes de IIUWGRAPH n'ont pas été implémentées (par exemple HIDECURSOR, SHOWCURSOR, PALLET, ...), soit parce qu'elles seraient d'un intérêt trèc;s faible dans la gestion de XWindows, soit parce qu'elles seraient difficilement réalisables, soit parce que les programmeurs ont été atteints de fainéantise chronique.

    + + Enfin, dans vos programmes il faudra impérativement que vos unités gérant le graphisme héritent de la classe IIUWGRAPH sous peine d'erreurs à la compilation .

    + +ATTENTION: appelez Xint au lieu de int

    + +

    : vers Tableau de Matieres

    +

    2: Ouvrir et fermer une fenêtre avec XIIUWGRAF

    + + + XIIUWGRAF permet à l'utilisateur d'ouvrir jusqu'à seize fenêtres à l'écran. Ces fenêtres sont sélectionnables dans le programme en LOGLAN par la commande GRON décrite plus loin.

    + +

    2.1: La procédure HPAGE .

    + +
    unit HPAGE: procedure(numerofenetre,x,y: INTEGER);

    + + Cette procédure a pour rôle de donner la position à laquelle sera affichée la fenêtre dans l'écran, de donner la taille de cette fenêtre et de l'effacer quand le besoin s'en fait sentir. Cette procédure devra être appelée deux fois pour ouvrir une fenêtre.

    + + HPAGE reçoit trois paramêtres : le premier est le numéro de la fenêtre (un entier compris entre 0 et 15), les deux suivants sont soit les coordonnées de la fenêtre à l'écran, soit la taille de cette fenêtre. Un troisièc;me appel de HPAGE avec l'un des deux derniers paramêtres nuls aura pour effet de l'effacer.

    + + Exemple : +

    +	      CALL HPAGE(0, posx, posy);

    + CALL HPAGE(0, longueur, hauteur);

    +

    + Le coin en haut à gauche de la fenêtre 0 sera aux coordonnées (posx,posy) et la fenêtre aura une taille de longueur X hauteur.

    + + CALL HPAGE(0, 0, valeur)

    + ou CALL HPAGE(0, valeur, 0)

    + ou CALL HPAGE(0, 0, 0)

    + + La fenêtre 0 est effacée.

    + +

    : vers Tableau de Matieres

    + + + +

    2.2: La procédure GRON .

    + +
    unit GRON: procedure(numerofenetre: INTEGER);

    + + La procédure GRON affiche la fenêtre de numéro numerofenetre à l'écran. Ensuite pour sélectionner la fenêtre dans laquelle on veut travailler, on refait un deuxièc;me appel de cette commande.

    +Exemple : +

    +    		             CALL HPAGE(0,0,0);

    + CALL HPAGE(1,150,0);

    + CALL HPAGE(0,100,100);

    + CALL HPAGE(1,200,150);

    + CALL GRON(0); (* Affichage de la fenêtre 0 *)

    + CALL GRON(1); (* Affichage de la fenêtre 1 *)

    + ...

    + CALL GRON(0); (* Sélection de la fenêtre 1 *)

    + ...

    +

    +

    : vers Tableau de Matieres

    + +

    2.3 : La procédure GROFF .

    + +
    unit GROFF: procedure;

    + + L'appel à cette commande a pour conséquence l'effaçage de toutes les fenêtres et la fin d'exécution du processus XIIUWGRAF.

    +

    : vers Tableau de Matieres

    + + +

    3: Description . des différentes +commandes graphiques

    + + +

    3.1: Procédure COLOR .

    + +
    unit COLOR: procedure(couleur: INTEGER);

    + + Permet de déterminer la couleur d'avant plan (0 pour noir et une valeur supérieure ou égale à 1 pour blanc). Cette commande a une action locale à la fenêtre sélectionnée par GRON.

    +

    : vers Tableau de Matieres

    + +

    3.2: Procédure BORDER .

    + +
    unit BORDER: procedure(couleur: INTEGER);

    + + Commande qui sélectionne la couleur de fond.

    +

    : vers Tableau de Matieres

    + +

    3.3: Procédure MOVE .

    + +
    unit MOVE: procedure(posx, posy: INTEGER);

    + + posx et posy deviennent les coordonnées courantes dans la fenêtre. Comme COLOR, MOVE n'agit que sur la fenêtre sélectionnée.

    +

    : vers Tableau de Matieres

    + +

    3.4: Procédure CLS .

    + +
    unit CLS: procedure;

    + + Efface la fenêtre en blanc par défaut ou de la couleur spécifiée par la commande BORDER.

    +

    : vers Tableau de Matieres

    + +

    : Procédure POINT .

    + +
    unit POINT: procedure(x,y: INTEGER);

    + Affiche un point aux coordonnées (x,y) de la couleur spécifiée par la commande COLOR ou noir par défaut. La position courante dans la fenêtre devient (x,y).

    +

    : vers Tableau de Matieres

    + +

    : Procédure DRAW .

    + +
    unit DRAW: procedure(x,y: INTEGER);

    + + Affiche une ligne qui part de la position courante dans la fenêtre vers la position (x,y). La position courante dans la fenêtre devient (x,y). Elle est affichée avec la couleur courante (sélectionnée avec COLOR) et avec le style de tracé courant (sélectionnée par la commande STYLE décrite plus loin);

    +

    : vers Tableau de Matieres

    + +

    : Procédure CIRB .

    + +
    unit CIRB: procedure(posx,posy,rayon:INTEGER,alpha,beta:REAL,cbord,style,p,q:INTEGER);

    + + Si style a pour valeur 0, CIRB affiche un arc de centre (posx,posy), de rayon rayon. alpha et beta sont les angles de départ et d'arrivée de l'arc en question. Si alpha=beta alors un cercle (ou une ellipse) est dessiné. Si p=q alors on obtient un cercle, si p> q une ellipse allongée dans le sens vertical est obtenue, sinon si p> q on a pour résultat une ellipse allongée dans le sens horizontal. Cet affichage est fait avec la couleur d'avant plan courante et le style de tracé courant.

    + + Si style vaut 1, CIRB affiche un arc rempli ressemblant à une portion de camenbert avec la couleur d'avant plan courante.

    + + Si style vaut 2, l'intérieur de l'arc délimité par sa courbure et la corde joignant ses deux extrêmités est rempli avec la couleur d'avant plan courante.

    + + Si l'on choisi pour style une valeur < 0 ou > 3, la valeur 0 est prise.

    +

    : vers Tableau de Matieres

    + +

    : Procédure HFILL .

    + +
    unit HFILL: procedure(y: INTEGER);

    + + Trace une ligne horizontale de la position courante (posx,posy) vers les coordonnées (posx,y) avec la couleur d'avant plan courante et le style de tracé courant. La position courante dans la fenêtre devient (posx,y).

    +

    : vers Tableau de Matieres

    + +

    : Procédure VFILL .

    + +
    unit VFILL: procedure(y: INTEGER);

    + + Trace une ligne verticale de la position courante (posx,posy) vers les coordonnées (x,posy) avec la couleur d'avant plan courante et le style de tracé courant. La position courante dans la fenêtre devient (x,posy).

    + +

    : vers Tableau de Matieres

    + +

    : Fonction INXPOS .

    + +
    unit INXPOS: function: INTEGER;

    + + Retourne la position courante sur l'axe des abscisses de la fenêtre courante.

    + +

    : vers Tableau de Matieres

    +

    +

    : Fonction INYPOS .

    + +
    unit INYPOS: function: INTEGER;

    + + Retourne la position courante sur l'axe des ordonnées de la fenêtre courante.

    + +

    : vers Tableau de Matieres

    +

    +

    : Commandes de saisie . et de restitution d'une partie d'une fenêtre.

    + +

    : Fonction GETMAP .

    + +

    unit GETMAP: function(x,y: INTEGER): arrayof  INTEGER;

    + + Sauve dans le tableau tab une partie rectanguraire de la fenêtre courante, le coin en haut à gauche étant la position courante dans la fenêtre et le coin en bas à droite étant la position (x,y).

    + Le tableau devrait avoir une taille minimum de: 4 + (nbrelignes * (3 + nbrecol div 8)) octets

    + En sachant qu'en LOGLAN un entier tient sur 4 octets(en UNIX seulement), il ne vous reste plus qu' à faire votre cuisine.

    +

    : vers Tableau de Matieres

    + +

    : Procédure PUTMAP .

    + +
    unit PUTMAP: procedure(tab: arrayof INTEGER);

    + + Affiche la portion d'image sauvée dans tab à la position courante dans la fenêtre. Ce qu'il y avait à cette même position avant l'affichage est totalement effaçé.

    +

    : vers Tableau de Matieres

    + +

    : Procédure ORMAP .

    + + unit ORMAP: procedure(tab: arrayof INTEGER);

    + + Lors de l'affichage, une opération OR est faite avec la portion d'image sauvée dans tab et celle à la position courante dans la fenèc;tre: l'image est donc affichée en "transparence".

    +

    : vers Tableau de Matieres

    + +

    : Procédure XORMAP .

    + +
    unit XORMAP: procedure(tab: arrayof INTEGER);

    + + Même chose qu' avec ORMAP à la différence qu'une opération XOR est faite avec l'image sauvée dans tab et celle à la position courante dans la fenêtre.

    + +

    : vers Tableau de Matieres

    + +

    : Procédure STYLE .

    + +
    unit STYLE: procedure(styl: INTEGER);

    + + Définit le style de tracé dans la fenêtre courante.

    + + Si style vaut 0, le tracé sera fait avec la couleur de fond.

    + Si style vaut 1, le tracé sera fait avec la couleur d'avant plan.

    + Si style vaut 2,3,4 ou 5, le tracé sera fait avec les motif suivant :

    + +

    2 : ******...******...******

    + 3 : ****......****......****

    + 4 : **...**...**...**

    + 5 : **.........**.........**

    où * : couleur d'avant plan

    + . : couleur de fond

    +

    : vers Tableau de Matieres

    + +

    : Fonction INPIX .

    + +
    unit INPIX: function(x,y: INTEGER);

    + + Cette fonction met la postion courante dans la fenêtre à (x,y) et renvoie la couleur du point de la fenêtre à cette position(0 pour noir et 1 pour blanc).

    + +

    +

    : vers Tableau de Matieres

    + +

    : Commandes de saisie et d'affichage de caractèc;res .

    + +

    : Fonction INKEY .

    + +
    unit INKEY: function: INTEGER;

    + + Retourne le code ascii de la touche tapée au clavier ou la valeur 0 sinon. L'appui sur les touches spéciales (comme SHIFT, les touche F1, F2, ..., CONTROL, ...) renvoient des valeurs négatives. Vous verrez bien par vous-même quelles sont ces valeurs en faisant un petit programme test.

    +

    : vers Tableau de Matieres

    + +

    : Procédure HASCII .

    + +
    unit HASCII: procedure(code_char: INTEGER);

    + + Affiche le caractèc;re de code ascii code_char avec le coin en haut à gauche du caractèc;re à la position courante (posx,posy) dans la fenêtre. La position courante devient (posx+largeur,posy).

    + Si code_char=0, une partie rectangulaire de largeur*hauteur est affichée avec la couleur de fond de la fenêtre courante et position courante dans la fenêtre reste inchangée.

    + En général la fonte par défaut qui est utilisée sous XWindows a une hauteur de dix points et une largeur de six points.

    + +

    : vers Tableau de Matieres

    + +

    : Procédure OUTSTRING .

    + +
    unit OUTSTRING: procedure(tab: arrayof  CHAR);

    + + Affiche la chaine de caractèc;re tab à la position courante (posx,posy) de la fenêtre. La position courante devient (posx+largeur*longueur_chaine,posy) où largeur est la largeur de la fonte utilisée.

    + +

    +

    : vers Tableau de Matieres

    + +

    : Procédure PUSHXY .

    + +
    unit PUSHXY: procedure;

    + + Sauvegarde le contexte graphique dans une pile, c'est à dire la position courante dans la fenêtre,les couleurs de fond et d'avant plan et le style de tracé sélectionné pour cette fenêtre.

    + + Chaque Fenêtre est dotée de sa pile de sauvegarde qui lui est propre et chaque pile a une profondeur maximale de 16.

    + +

    : vers Tableau de Matieres

    + +

    : Procédure POPXY .

    + +
    unit POPXY: procedure;

    + + Restore dans la fenêtre courante le contexte graphique situé en haut de la pile de sauvegarde et ce contexte est enlevé de la pile.

    +

    : vers Tableau de Matieres

    + +

    : Description des commandes de gestion de la souris .

    + + + +

    : Procédure STATUS .

    + +

    unit STATUS: procedure(h, v: INTEGER, l, r, c: BOOLEAN);

    + + Cette procédure renvoie la position courante (h,v) du pointeur de la souris ainsi que l'état des boutons de la souris. l,r,c sont respectivement les boutons gauche, droit et du centre de la souris.

    + + Ces valeurs booléennes ont la valeur TRUE si le bouton correspondant est appuyé.

    +

    : vers Tableau de Matieres

    + +

    : Procédure GETPRESS .

    + +
    unit GETPRESS: procedure(b: INTEGER; OUTPUT h,v,p : INTEGER, l,r,c : BOOLEAN);

    + + Cette procédure renvoie le nombre p de fois où le bouton sélectionné a été appuyé depuis le dernier appel à cette commande, ainsi que la position (h,v) du curseur la dernièc;re fois que le bouton considéré a été appuyé.

    + + Le paramêtre b permet de sélectionner le bouton à tester :

    + - 0 : bouton gauche

    + - 1 : bouton droit

    + - 2 : bouton du milieu

    + + En sus, la procédure renvoie l'état courant des trois boutons l,r,c.

    + +

    : vers Tableau de Matieres

    + +

    : Procédure GETRELEASE .

    + +
    unit GETRELEASE: procedure(b: INTEGER; OUTPUT h,v,p : INTEGER, l,r,c : BOOLEAN);

    + + Cette procédure a la même fonction que GETPRESS à la différence qu'elle teste le nombre de relâchementss du bouton sélectionné et non l'appui.

    + +

    +

    : vers Tableau de Matieres

    + +

    : Procédure GETMOVEMENT .

    + +
    unit GETMOVEMENT: procedure(h,v: INTEGER);

    + + Cette procédure renvoie le mouvement relatif (h,v) du curseur de la souris depuis son dernier appel.

    + + + +

    + +

    : vers Tableau de Matieres

    + + + +
    + + +
    : GMyAS à Pau, le 25 Octobre 1993

    + + + + + diff --git a/HTML/zaproszenie.html b/HTML/zaproszenie.html new file mode 100644 index 0000000..0b8b5eb --- /dev/null +++ b/HTML/zaproszenie.html @@ -0,0 +1,188 @@ + + +Zaproszenie do wspolpracy + + +

    Zaproszenie do wspolpracy

    +

    w 3 nowych duzych projektach badawczych:

    + +
  • Loglan'96

    +
  • CASE Next Generation

    +
  • Algorytmy probabilistyczne

  • +
    + +Do wszystkich, ktorzy chca dzialac:
      + +
    • rozwijac nowe koncepcje programowania obiektowego, wspolbieznego, rownoleglego i rozproszonego +
    • podniesc(zdobyc) swoje kwalifikacje biorac udzial w badaniach, +
    • przyczynic sie do rozwoju systemu Loglan, +
    • stworzyc nowa jakosc w inzynierii oprogramowania, +
    • dolozyc swoja cegielke do budowy obrazu naszego srodowiska, jako srodowiska dynamicznego, wiedzacego czego chce, zamierzajacego rozwiazac wazne problemy i oferujacego spoleczenstwu wyniki badan +
    +

    kierujemy niniejsze + + +

    ZAPROSZENIE

    + +na spotkanie - dyskusje
    +
    +

    27 marca 1996 o godz. 12

    +

    w sali 12, Instytutu Informatyki +Politechnika Bialostocka

    +

    ul Wiejska 45a Bialystok

    + +

    Podczas spotkania przedstawimy trzy sporych rozmiarow projekty badawcze: +

      +
    • prof. dr hab. Wiktor DANKO - Algorytmy probabilistyczne

      +
    • prof. dr hab. Grazyna MIRKOWSKA - CASE NT, system CASE nastepnej +generacji

      +
    • prof. dr hab. Andrzej SALWICKI - Loglan'96

      +
    + +

    Wszystkie projekty rzucaja wyzwanie trudnosciom teoretycznym, zlozonosci projektow i +naszej ogolnej niemoznosci. Nie mamy zamiaru niczego ukrywac, chcemy te wyzwania +omowic i przedyskutowac. Wiemy, ze ich pokonanie jest mozliwe.
    +Projekty te sa ze soba scisle powiazane: w projekcie CASE NT chcemy wykorzystac +Loglan jako narzedzie pracy i jako zrodlo doswiadczen, w projekcie Loglan'96 +chcielibysmy by system CASE NT stanowil uzupelnienie systemu kompilator+interpreter. + +

    Czy mamy szanse?

    Jak najbardziej TAK! Swiadcza o tym rozne fakty +
      +
    • Loglan'82 - juz raz to zrobilismy z sukcesem, +
    • Linux - tu nie tylko sie powiodlo ale system rozprzestrzenia sie (miliony uzytkownikow) i +rozwija (nowi wspolpracownicy w sieci Internet wnosza coraz to nowe pomysly i +rozwiazania) +
    • Java - pojawienie sie Javy - mlodszego brata Loglanu, potwierdza:
      slusznosc naszych +koncepcji (np. interpreter pozwala uniezaleznic sie od platformy),
      przewage naszych +doswiadczen(np. alien call nie zostal dotad odkryty i zastosowany poza Loglanem),
      +dojrzalosc naszej bazy teoretycznej(np. rozwiazanie problemu 'wiszacych referencji", +mozliwosc zagniezdzania modulow i dziedziczenia z roznych poziomow zagniezdzania), +
    • systemy rozproszone - TU JEST NASZA SZANSA! i nisza ekologiczna, +
    • GNU - spokojna praca dla srodowiska informatykow daje rezultaty doceniane przez +wielu (no, moze poza Microsoftem) +
    + + +

    Czy bedziemy sami?

    +

    Mamy nadzieje, ze nie. Kazdy z proponowanych projektow moze przyciagnac wielu wspolpracownikow z Polski i z zewnatrz. Dla kazdego znajdzie sie praca odpowiednia do jego kwalifikacji i zamilowan. +Nasze zaproszenie jest zaadresowane do pracownikow naukowych, ambitnych studentow, placowek badawczych i firm software'owych. + +

    Co mozemy z tego miec?

    +
      +
    1. Kilka produktow o nowych cechach, nowej jakosci.
      Produkty te moga byc rozpowsechniane na zasadach jakie zostana przez nas ustalone. Nawet jesli ustalimy, ze "goly" produkt bedzie udostepniany za darmo, to jego odpowiednio "ubrana" wersja moze byc produktem komercyjnym. Osoby i firmy konfekcjonujace software moga zawsze pobierac za to oplaty.
      Dla przykladu przypominam, ze system TEX jest dystrybuowny za darmo a systemy TEXtures (dla Maca) i Scientific Word (dla Windows), kosztuja kilkaset zlotych/egz. Mozna znalezc inne przyklady (Mosaic i Netscape, Linux ktory mozna sciagnac za darmo lub kupic CD-ROM z Linuxem, etc.) +
    2. Najwazniejszym efektem naszych prac powinny sie stac publikacje i komunikaty na konferencjach. +
    3. Publikacje te powinny prowadzic do potwierdzenia zdobytych kwalifikacji w postaci stopni naukowych: magisteriow, doktoratow i habilitacji. + +
    +

    Co trzeba zrobic?

    +

    Zacznijmy od cytatu "apetyt rosnie w miare jedzenia". W naszym przypadku oznacza to, ze poczatkowa specyfikacja +projektu (projektow) bedzie ulegac zmianom, rozszerzeniom. +

    +

    Loglan'96

    +

    Tu jest wiele do zrobienia: +

      +
    • projekt nowego jezyka i jego realizacja,
      + +Nalezy wprowadzic troche niezbednych zmian i troche ulepszen.
      +Opracowac definicje semantyki jezyka (najlepiej podac aksjomatyczna definicje - to zadanie trudne ale mozliwe do zrealizowania),
      +Napisac kompilator w Loglanie. Dlaczego w Loglanie?
      +Zaprojektowac nowy interpreter - L-maszyne Dlaczego interpreter?
      + + +
    • rozwoj zastosowan obecnej wersji Loglanu i jej pielegnacja do czasu uruchomienia nowej wersji
      +Szczegolnie wazne jest dokonczenie prac nad wykonywaniem programow Loglanowskich w sieci maszyn w pelni heterogenicznej. Obecnie Loglan jest realizowany w sieci maszyn Unixowych (Sun, Apollo, Linux, SCO Unix etc). Dla uczelni wazne jest aby siec zawierala maszyny roznych platform (DOS, Windows, Unix...)
      +Ulepszenie predefiniowanych klas GRAFIKA i MYSZ. Szczegolnie dla X-windows. Obecne wersje nas nie zadowalaja. +
    • opracowanie programu pracowni programowania obiektowego,
      + +
    • opracowanie bardziej nowoczesnej wersji srodowiska Loglanu +
    +Idzie tu nie tylko o badania wdrozeniowe, ktorych cecha jest poszukiwanie odpowiedzi na pytanie: czy mozna zbudowac przedmiot (tu: software) o pozadanych (wyspecyfikowanych ) cechach. +W projekcie mieszcza sie tez badania o charakterze podstawowym - poszukiwanie odpowiedzi na zasadnicze pytania zob. otwarte problemy

    +

    Ponizej przedstawiamy zestawienie zadan w trzech wiekszych grupach tematycznych.

    I nieco komentarzy. + + + + + + + + + + + + + + + + + + + +

    Loglan'96

    Przedyskutowac i zatwierdzic raport jezykauwaga.1sza wersja powinna byc gotowa szybko. +Spodziewamy sie ze trzeba bedzie ja poprawic gdy beda pierwsze wyniki dot. implementacji
    Stworzyc opis jezyka Chcielibysmy by byl to opis formalny, aksjomatyczny, wykorzystujacy aparature logiki algorytmicznej. Ale wymagac to bedzie rozwiazania nowych problemow. W szczegolnosci dotyczacych dziedziczenia klas.
    Stworzyc opis L-maszyny virtualnej czyli interpreteraIstnieje cenne opracowanie A. Kreczmara. Do niego trzeba by dodac: procesy i obiekty trwale (persistent object).
    Podac specyfikacje i zaimplementowac kompilator Loglanu'96 w Loglanie Proponujemy by zastosowac metode zstepujacej rekursji. Zastanowic sie czy przy okazji nie da sie stworzyc modulu alternatywnego dla yacca i bisona. Mialoby to polegac na automatycznym tworzeniu klas i innych modulow (pierwszej czesci) kompilatora na podstawie gramatyki jezyka zapisanej w notacji EBNF.
    Zbadac i zaproponowac nowa koncepcje biblioteki modulow predefiniowanychKazdy program jest domyslnie prefiksowany klasa BIBLIOTEKA
    +pref BIBLIOTEKA programjego nazwa;
    +...
    end;
    +Dzieki temu moze dziedziczyc inne moduly zawarte w BIBLIOTECE. Ale tylko te z pierwszego poziomu zagniezdzenia.
    +Krotko mowiac, uwazamy ze nalezy pojecie biblioteki zorganizowac wokol pojec modul i klasa. +
    Zaimplementowac rozpraszanie procesow w sieci heterogenicznej. Obecnie potrafimy rozpraszac procesy w sieci maszyn Unixowych. Najblizsze zadania polegaja na przeniesieniu obecnych rozwiazan na siec zawierajaca maszyny DOS i Windows, a takze na Novella i inne platformy.
    Biblioteki uslug sieciowych dla programowania w Loglanie. Rozszerzyc zbior klas predefiniowanych o klase NETLIB umozliwiajaca korzystanie z protokolow sieciowych roznych warstw np. TCP/IP, FTP, HTTP, ...
    "Stary" Loglan
    Uporzadkowac dokumentacje Np. wydac nowa wersje raportu jezyka. To juz jest zaawansowane.
    Ulepszyc srodowisko Loglanu Np. poprawic edytor Lotek, lub napisac nowy
    +Rozwazyc ponowne wprowadzenie debuggera Teresy Przytyckiej.
    +Ujednolicic biblioteke graficzna: w tej chwili biblioteki dla DOSa i Xwindows bardzo sie roznia. Mozna napisac w Loglanie jedna wspolna "czapke".
    Uporzadkowac aplikacje i ich opisy
    1. Klasa simulation
    2. Opracowac pracownie programowania dla wybranych przedmiotow np. algorytmy i struktury danych , programowanie wspolbiezne i rozproszone, etc.
    Nowe aplikacje
    CASE NT zob. ponizej
    browser typu HotJava to moze byc i ciekawe i pozyteczne
    Obiektowa baza danych Tu jest sporo wynikow zespolu L. Banachowskiego trzeba to wykorzystac
    Nowa klasa simulation Jak powinna wygladac symulacja przeprowadzana na maszynie wieloprocesorowej? Nie wiemy, ale podejrzewamy ze powinien powstac nowy uniwersalny modul. Jego specyfikacja nie jest dla nas ozywista. Symulacja wieloprocesorowa powinna byc bardziej wydajna za wzgledu na przyspieszenie ale moze tez wnosic i inne aporty.
    +Jest oczywiste ze ta tabela to tylko proba zorganizowania roznych zadan zwiazanych z naszym projektem. Bedzie sie ja rozbudowywac i zaopatrywac w odnosniki wskazujace na stan zaawansowania i adres osoby(osob) pracujacych nad zagadnieniem. +

    CASE NT

    +

    Obecne systemy CASE sa drogie i nie dostarczaja zadnych narzedzi wpomagajacych analize poprawnosci +powstajacego oprogramowania wzgledem jego specyfikacji. Gorzej, bo nie dostarczane sa narzedzia wspomagajace tworzenie specyfikacji ani tym bardziej ich analizy. Dzis czesto przez specyfikacje rozumie sie liste metod (operacji) czyli funkcji i procedur wraz z wyliczeniem typow argumentow i wynikow. To jest uproszczenie idace zbyt daleko. Mozna dolaczyc postulaty dotyczace tych procedur. Zapisane w jezyku etnicznym nie nadaja sie one do dalszego formalnego przetwarzania.
    +My mozemy sie wesprzec na naszych wlasnych wynikach dotyczacych specyfikacji. Nasza metoda specyfikacji zostala sprawdzona w kilku eksperymentach i cieszy sie nastepujacymi (meta)wlasnosciami:
    +

      +
    • IDENTYFIKACJA - rozwiazujemy zadanie zidentyfikowania (specyfikacji) abstrakcyjnego typu danych, +
    • PELNOSC - zbior prawdziwych wlasnosci programow wykonywanych w modelach specyfikacji jest rowny zbiorowi wlasnosci dowodliwych z aksjomatow, +
    zatem +
      +
    • dostarcza KRYTERIUM AKCEPTOWALNOSCI modulow software'owych, +
    • stanowi dobra baze dla weryfikacki wlasnosci dowodow (BAZA DOWODOW) +
    +Nowy system CASE powienen stac sie asystentem zespolu tworzacego oprogramowanie. Powinien nie tylko pamietac o sygnaturze modulow jakie maja powstac, ale i o wlasnosciach jakie maja byc zagwarantowane.
    +

    Formalnym narzedziem powstajacego systemu CASE bedzie logika algorytmiczna. Rachunek ten w swiecie programowania ma do spelnienia role porownywalna z rola rachunku rozniczkowego i calkowego w tradycyjnej inzynierii mechanicznej czy elektrycznej.
    +Naszym zdaniem nowy system powinien przewyzszac dotychczas znane systemy i dostarczac narzedzi wspomagajacych dowodzenie wlasnosci programow z aksjomatow specyfikacji.
    +Zadania jakie sobie stawiamy to miedzy innymi opis abstrakcyjnego typu danych: SRODOWISKO DOWODOW FORMALNYCH Logiki Algorytmicznej i jego obiektowa realizacja. Nalezy wiec opisac typy danych np. formula, wezel drzewa dowodu, drzewo dowodu, etc.i operacje na nich. Zaprogramowac klasy i metody odpowiadajace opisanym typom i operacjom. Zaprogramowac przyjazne srodowisko asystujace dowodzeniu wlasnosci programow. +

    Algorytmy probabilistyczne

    Algorytmy probabilistyczne znajduja rozliczne zastosowania + (bardziej znane to np. symulacja i analiza procesow masowej + obslugi). +

    +
    wyznaczanie prawdopodobienstw zachowan algorytmow + probabilistycznych dzialajacych na zbiorach skonczonych,opracowanie oprogramowania (w Loglanie) umozliwiajacego wyznaczanie prawdopodobienstw zachowan algorytmow probabilistycznych (niezaleznie od symulacji ich dzialania)
    zastosowanie algorytmow do zagadnien analizy informacji + niepewnej (porownanie z metoda zbiorow przyblizonych - + Z.Pawlak, A.Skowron), w procesie analizy algorytmow probabilistycznych nasza uwaga skupiona jest wylacznie na stanach koncowych, np. proces wypracowania przyblizonych regul decyzyjnych (analogicznie: zasad wnioskowania statystycznego) dokonuje sie przy pomocy pewnego algorytmu probabilistycznego; poszczegolnym regulom odpowiadaja pewne stany koncowe,
    badanie zwiazkow miedzy algorytmami probabilistycznymi, + interpretowanymi w dziedzinach skonczonych, ze skonczenie + stanowymi lancuchami Markowa:nawet w przypadku bardzo prostych iteracyjnych + algorytmow probabilistycznych, interpretowanych + w skonczonym zbiorze, odpowiadajacy lancuch Markowa + nie musi byc ergodyczny,
    potrafimy juz wyznaczac prawdopodobienstwa przejsc + wylacznie do stanow koncowych, nawet w przypadku + lancuchow nieergodycznych.
    + + + + + + + + + +

    Czy trzeba biernie czekac na spotkanie?

    +

    Mamy nadzieje, ze nasza propozycja nie jest Ci obojetna. +

      +
    • Jesli jestes oponentem przyjdz na spotkanie lub napisz do nas. +
    • Jesli wydaje Ci sie ze plan jest do przyjecia to zglos sie do nas nie czekajac. +
    • Czekamy na wszelkie uwagi, propozycje, krytyke. +
    +

    Jesli nie jestes mieszkancem Bialegostoku to nie szkodzi.

    Mozemy pracowac razem na odleglosc. (Tak jak pracuja w projekcie Linux i in.). A moze zechcialbys przyjechac 27go? (czy mamy zalatwic nocleg?) +

    Jesli czytasz te strony po 27 marca to:

    +- przeczytaj sprawozdanie ze spotkania.
    +- napisz do nas
    +
    +
    Last update Fri 1 Mar 1996
    +Grazyna Mirkowska
    + Andrzej Salwicki +
    + + \ No newline at end of file diff --git a/at_work/case_al/index.html b/at_work/case_al/index.html new file mode 100644 index 0000000..f226885 --- /dev/null +++ b/at_work/case_al/index.html @@ -0,0 +1,17 @@ + + + + + + + + +

    + +Sorry, page under construction ! +

    + + + + +ÔÔ diff --git a/at_work/case_al/index.html~ b/at_work/case_al/index.html~ new file mode 100644 index 0000000..d1f5294 --- /dev/null +++ b/at_work/case_al/index.html~ @@ -0,0 +1,17 @@ + + + + + + + + +

    + +Sorry page under construction ! +

    + + + + +Ô \ No newline at end of file diff --git a/at_work/exe_old/486.inc/bank2.log b/at_work/exe_old/486.inc/bank2.log new file mode 100644 index 0000000..3e5b881 --- /dev/null +++ b/at_work/exe_old/486.inc/bank2.log @@ -0,0 +1,336 @@ +BLOCK +(* BANK DEPARTMENT SERVICE SIMULATION *) + + + +UNIT PRIORITYQUEUE: CLASS; + (* HEAP AS BINARY LINKED TREE WITH FATHER LINK*) + + + + UNIT QUEUEHEAD: CLASS; + (* HEAP ACCESING MODULE *) + VAR LAST,ROOT:NODE; + + UNIT MIN: FUNCTION: ELEM; + BEGIN + IF ROOT=/= NONE THEN RESULT:=ROOT.EL FI; + END MIN; + + UNIT INSERT: PROCEDURE(R:ELEM); + (* INSERTION INTO HEAP *) + VAR X,Z:NODE; + BEGIN + X:= R.LAB; + IF LAST=NONE THEN + ROOT:=X; + ROOT.LEFT,ROOT.RIGHT,LAST:=ROOT + ELSE + IF LAST.NS=0 THEN + LAST.NS:=1; + Z:=LAST.LEFT; + LAST.LEFT:=X; + X.UP:=LAST; + X.LEFT:=Z; + Z.RIGHT:=X; + ELSE + LAST.NS:=2; + Z:=LAST.RIGHT; + LAST.RIGHT:=X; + X.RIGHT:=Z; + X.UP:=LAST; + Z.LEFT:=X; + LAST.LEFT.RIGHT:=X; + X.LEFT:=LAST.LEFT; + LAST:=Z; + FI + FI; + CALL CORRECT(R,FALSE) + END INSERT; + +UNIT DELETE: PROCEDURE(R: ELEM); + VAR X,Y,Z:NODE; + BEGIN + X:=R.LAB; + Z:=LAST.LEFT; + IF LAST.NS =0 THEN + Y:= Z.UP; + Y.RIGHT:= LAST; + LAST.LEFT:=Y; + LAST:=Y; + ELSE + Y:= Z.LEFT; + Y.RIGHT:= LAST; + LAST.LEFT:= Y; + FI; + Z.EL.LAB:=X; + X.EL:= Z.EL; + LAST.NS:= LAST.NS-1; + R.LAB:=Z; + Z.EL:=R; + IF X.LESS(X.UP) THEN CALL CORRECT(X.EL,FALSE) + ELSE CALL CORRECT(X.EL,TRUE) FI; + END DELETE; + +UNIT CORRECT: PROCEDURE(R:ELEM,DOWN:BOOLEAN); + (* CORRECTION OF THE HEAP WITH STRUCTURE BROKEN BY R *) + VAR X,Z:NODE,T:ELEM,FIN,LOG:BOOLEAN; + BEGIN + Z:=R.LAB; + IF DOWN THEN + WHILE NOT FIN DO + IF Z.NS =0 THEN FIN:=TRUE ELSE + IF Z.NS=1 THEN X:=Z.LEFT ELSE + IF Z.LEFT.LESS(Z.RIGHT) THEN X:=Z.LEFT ELSE X:=Z.RIGHT + FI; FI; + IF Z.LESS(X) THEN FIN:=TRUE ELSE + T:=X.EL; + X.EL:=Z.EL; + Z.EL:=T; + Z.EL.LAB:=Z; + X.EL.LAB:=X + FI; FI; + Z:=X; + OD + ELSE + X:=Z.UP; + IF X=NONE THEN LOG:=TRUE ELSE LOG:=X.LESS(Z); FI; + WHILE NOT LOG DO + T:=Z.EL; + Z.EL:=X.EL; + X.EL:=T; + X.EL.LAB:=X; + Z.EL.LAB:=Z; + Z:=X; + X:=Z.UP; + IF X=NONE THEN LOG:=TRUE ELSE LOG:=X.LESS(Z); + FI; + OD + FI; + END CORRECT; + +END QUEUEHEAD; + + +UNIT NODE: CLASS (EL:ELEM); + (* ELEMENT OF THE HEAP *) + VAR LEFT,RIGHT,UP: NODE, NS:INTEGER; + UNIT LESS: FUNCTION(X:NODE): BOOLEAN; + BEGIN + IF X= NONE THEN RESULT:=FALSE + ELSE RESULT:=EL.LESS(X.EL) FI; + END LESS; + END NODE; + + +UNIT ELEM: CLASS(PRIOR:REAL); + (* PREFIX OF INFORMATION TO BE STORED IN NODE *) + VAR LAB: NODE; + UNIT VIRTUAL LESS: FUNCTION(X:ELEM):BOOLEAN; + BEGIN + IF X=NONE THEN RESULT:= FALSE ELSE + RESULT:= PRIOR< X.PRIOR FI; + END LESS; + BEGIN + LAB:= NEW NODE(THIS ELEM); + END ELEM; + + +END PRIORITYQUEUE; + +(********************************************************************* +*********************************************************************) + +#include "simula.inc" + +UNIT LISTS:SIMULATION CLASS; + (* WE WISH TO USE LISTS FOR QUEUEING PROCESSES DURING SIMULATION*) + + UNIT LINKAGE:CLASS; + (*WE WILL USE TWO WAY LISTS *) + VAR SUC1,PRED1:LINKAGE; + END LINKAGE; + UNIT HEAD:LINKAGE CLASS; + (* EACH LIST WILL HAVE ONE ELEMENT ESTABLISHED *) + UNIT FIRST:FUNCTION:LINK; + BEGIN + IF SUC1 IN LINK THEN RESULT:=SUC1 + ELSE RESULT:=NONE FI; + END; + UNIT EMPTY:FUNCTION:BOOLEAN; + BEGIN + RESULT:=SUC1=THIS LINKAGE; + END EMPTY; + BEGIN + SUC1,PRED1:=THIS LINKAGE; + END HEAD; + + UNIT LINK:LINKAGE CLASS; + (* ORDINARY LIST ELEMENT PREFIX *) + UNIT OUT : PROCEDURE; + BEGIN + IF SUC1=/=NONE THEN + SUC1.PRED1:=PRED1; + PRED1.SUC1:=SUC1; + SUC1,PRED1:=NONE FI; + END OUT; + UNIT INTO:PROCEDURE(S:HEAD); + BEGIN + + CALL OUT; + IF S=/= NONE THEN + IF S.SUC1=/=NONE THEN + SUC1:=S; + PRED1:=S.PRED1; + PRED1.SUC1:=THIS LINKAGE; + S.PRED1:=THIS LINKAGE; + FI FI; + END INTO; + END LINK; + + UNIT ELEM:LINK CLASS(SPROCESS:SIMPROCESS); + (* USER DEFINED PROCESS WILL BE JOINED INTO LISTS *) + END ELEM; + + END LISTS; + + + + + + (*BEGIN OF BANK DEPARTMENT SIMULATION *) + + + UNIT OFFICE:LISTS CLASS; (*AN OFFICE*) + + UNIT TILL:SIMPROCESS CLASS(QUEUE:HEAD); + (* TELLER WITH CUSTOMERS QUEUEING UP *) + UNIT VIRTUAL SERVICE:PROCEDURE; + (* SERVICE OF THIS TELLER WILL BE PRECISED LATER *) + END SERVICE; + VAR CSTM:CUSTOMER, (*THE CUSTOMER BEING SERVED*) + REST,PAUSE:REAL; + + BEGIN + PAUSE:=TIME; + DO + REST:=REST+TIME-PAUSE; + WHILE NOT QUEUE.EMPTY DO + (* SERVE ALL QUEUE *) + CSTM:=QUEUE.FIRST QUA ELEM.SPROCESS; + CALL SERVICE; + CALL SCHEDULE(CSTM,TIME); + OD; + PAUSE:=TIME; + CALL PASSIVATE + OD; + END TILL; + + UNIT CUSTOMER:SIMPROCESS CLASS; + + VAR ELLIST:ELEM, K:INTEGER; + UNIT ARRIVAL:PROCEDURE(S:TILL); + (* ATTACHING TELLER S *) + BEGIN + IF S=/=NONE THEN + ELLIST:=NEW ELEM(THIS CUSTOMER); + CALL ELLIST.INTO(S.QUEUE); + IF S.IDLE THEN CALL SCHEDULE(S,TIME) FI; + CALL PASSIVATE; FI; + END ARRIVAL; + END CUSTOMER; + + END OFFICE; + + + +UNIT BANKDEPARTMENT:OFFICE CLASS; + + + UNIT COUNTER:TILL CLASS; + VAR PAYTIME:REAL; (*RANDOM SERVICE TIME*) + UNIT VIRTUAL SERVICE:PROCEDURE; + BEGIN + WRITELN(" THE PAY DESK SERVES CUSTOMER NO",CSTM.K, + " AT",TIME:10:4); + CALL CSTM.ELLIST.OUT; + PAYTIME:=RANDOM*2+2; + CALL HOLD(PAYTIME); + END SERVICE; + END COUNTER; + + + UNIT TELLER:TILL CLASS(NUMBER:INTEGER); + VAR SERVICETIME:REAL; + UNIT VIRTUAL SERVICE:PROCEDURE; + VAR N:INTEGER; + BEGIN + WRITELN(" THE TELLER NO",NUMBER," WAS IDLE FOR",REST:10:4, + " SEC"); + CALL CSTM.ELLIST.OUT; + N:=CSTM QUA BANKCUSTOMER.NO; + WRITELN(" THE CUSTOMER NO",CSTM.K, + " BEGINS TO BE SERVED BY THE TELLER NO",NUMBER, + " AT",TIME:10:4); + ACCOUNT(N):=ACCOUNT(N)+CSTM QUA BANKCUSTOMER.AMOUNT; + IF ACCOUNT(N)<0 THEN CALL CSTM.ARRIVAL(CONTROL);FI; + SERVICETIME:=RANDOM*7+3; + CALL HOLD(SERVICETIME); + + END SERVICE; + END TELLER; + + + UNIT BANKCUSTOMER:CUSTOMER CLASS(NO:INTEGER,AMOUNT:REAL); + (* BANK CUSTOMER. AMOUNT- THE MONEY TO BE PAID AT THE BANK *) + VAR ARRIVALTIME,STAYTIME:REAL,CHOOSETELLER:INTEGER; + BEGIN + I:=I+1; + K:=I; + ARRIVALTIME:=TIME; + WRITELN(" THE CUSTOMER NO",K," ARRIVED AT",TIME:10:4); + CHOOSETELLER:=RANDOM*5+1; + CALL ARRIVAL(TELLERS(CHOOSETELLER)); + IF AMOUNT<0 THEN CALL ARRIVAL(CTR); FI; + STAYTIME:=TIME-ARRIVALTIME; + WRITELN(" THE CUSTOMER NO",K," STAYED AT THE BANK FOR", + STAYTIME:10:4," SEC; STATE OF ACCOUNT",ACCOUNT(NO):10:4); + END BANKCUSTOMER; + + VAR TELLERS:ARRAYOF TELLER,ACCOUNT:ARRAYOF REAL; + VAR CTR:COUNTER, CONTROL:TILL,I:INTEGER; + + BEGIN (* NEW BANK DEPARTMENT GENERATION *) + CTR:=NEW COUNTER(NEW HEAD); + ARRAY TELLERS DIM(1:5); (* WE DEAL WITH 5 TELLES *) + FOR I:=1 TO 5 DO TELLERS(I):=NEW TELLER(NEW HEAD,I); OD; + ARRAY ACCOUNT DIM(1:100); + (* WE DEAL WITH 100 ACOUNTS IN THIS BANK DEPARTMENT *) + FOR I:=1 TO 100 DO ACCOUNT(I):=RANDOM*901+100; OD; + (* AN ACCOUNT VALUE CAN FLUCTUATE FROM 100 TO 1000$ *) + I:=0; + END BANKDEPARTMENT; + + + + BEGIN (* OF PROGRAM *) + PREF BANKDEPARTMENT BLOCK + UNIT GENERATOR:SIMPROCESS CLASS; + (* CUSTOMERS GENERATION *) + BEGIN + DO + CALL SCHEDULE(NEW BANKCUSTOMER(RANDOM*100+1, + RANDOM*9996+5),TIME); + CALL HOLD(RANDOM*10); + CALL SCHEDULE(NEW BANKCUSTOMER(RANDOM*100+1, + -(RANDOM*900+5)),TIME); + CALL HOLD(RANDOM*10); + OD + END GENERATOR; + BEGIN + WRITELN(" BANK DEPARTMENT SERVICE SIMULATION"); + WRITELN; + CALL SCHEDULE(NEW GENERATOR,TIME); + CALL HOLD (40); + END +END diff --git a/at_work/exe_old/486.inc/cc.bat b/at_work/exe_old/486.inc/cc.bat new file mode 100644 index 0000000..f4c1dcc --- /dev/null +++ b/at_work/exe_old/486.inc/cc.bat @@ -0,0 +1,11 @@ +rem IF: +rem 1ø the programs: loglan.exe, gen.exe, int.exe are visible here +rem 2ø the first parameter %1 of this command is the file +rem containing what you believe a source of Loglan program +rem THEN it may be useful to use this command cc + +loglan %1 +pause +gen %1 +del %1.lcd +int %1 diff --git a/at_work/exe_old/486.inc/essai.log b/at_work/exe_old/486.inc/essai.log new file mode 100644 index 0000000..7d2081b --- /dev/null +++ b/at_work/exe_old/486.inc/essai.log @@ -0,0 +1,10 @@ +program essai; + +#include "var.inc"; + + +begin + writeln("give an integer"); + readln(i); + writeln(i); +end essai; diff --git a/at_work/exe_old/486.inc/exec.bat b/at_work/exe_old/486.inc/exec.bat new file mode 100644 index 0000000..fc25de7 --- /dev/null +++ b/at_work/exe_old/486.inc/exec.bat @@ -0,0 +1,6 @@ +@ECHO OFF +set COMPILER_PATH=c:/loglan/exe/svga +set TMPDIR=c:/tmp +set GO32TMP=c:/tmp +set GO32=driver c:/loglan/exe/386/ega16.grd gw 640 gh 348 + diff --git a/at_work/exe_old/486.inc/gen.exe b/at_work/exe_old/486.inc/gen.exe new file mode 100644 index 0000000..635f731 Binary files /dev/null and b/at_work/exe_old/486.inc/gen.exe differ diff --git a/at_work/exe_old/486.inc/int.exe b/at_work/exe_old/486.inc/int.exe new file mode 100644 index 0000000..c0330e7 Binary files /dev/null and b/at_work/exe_old/486.inc/int.exe differ diff --git a/at_work/exe_old/486.inc/loglan.exe b/at_work/exe_old/486.inc/loglan.exe new file mode 100644 index 0000000..62821c2 Binary files /dev/null and b/at_work/exe_old/486.inc/loglan.exe differ diff --git a/at_work/exe_old/486.inc/logpp.exe b/at_work/exe_old/486.inc/logpp.exe new file mode 100644 index 0000000..fcf7ce4 Binary files /dev/null and b/at_work/exe_old/486.inc/logpp.exe differ diff --git a/at_work/exe_old/486.inc/old1.ccd b/at_work/exe_old/486.inc/old1.ccd new file mode 100644 index 0000000..162cde8 Binary files /dev/null and b/at_work/exe_old/486.inc/old1.ccd differ diff --git a/at_work/exe_old/486.inc/old1.log b/at_work/exe_old/486.inc/old1.log new file mode 100644 index 0000000..2184cc8 --- /dev/null +++ b/at_work/exe_old/486.inc/old1.log @@ -0,0 +1,91 @@ +Program SystemedeFenetrage; +Begin +Pref iiuwgraph block + Begin + Pref mouse block + + + (*****************************************************************************) + (* P r o g r a m m e P r i n c i p a l *) + (*****************************************************************************) + var v,p,h,i : integer, + l,r,c : integer, + rep : arrayof char, + d : boolean, + xx,yy : arrayof integer, + status,code,x,y,flags,button : integer; + + Begin + + call gron(0); + call init(1,0); + + call showcursor; + call patern(5,5,635,475,2,0); + call outstring(10,10,"x=",2,0); + call outstring(100,10,"y=",2,0); + call outstring(10,30,"status = ",2,0); + call outstring(10,50,"code = ",2,0); + call outstring(10,70,"flags = ",2,0); + call outstring(10,90,"button = ",2,0); + call patern(100,210,300,320,3,1); + + array xx dim (1:6); + array yy dim (1:6); + xx(1):=410; yy(1):=10; + xx(2):=450; yy(2):=30; + xx(3):=460; yy(3):=50; + xx(4):=430; yy(4):=80; + xx(5):=420; yy(5):=40; + xx(6):=480; yy(6):=30; + call intens(6,xx,yy,8,1); + for i:=1 to 6 + do + yy(i):=yy(i)+100; + od; + call intens(6,xx,yy,15,0); + + call cirb(500,300,50,40,100,3500,10,0); + call cirb(400,400,40,40,600,4000,11,1); + + + i:=hfont(100,350,6,-9999999,9999999,500,9,0,15); + call hpage(100,400,10,unpack("Il fait beau dans ma verte campagne"),9,0); + rep:=hfont8(100,430,10,80,unpack("tototutu"),9,0,15); + + call getmovement(1,1); + + do + d:=getpress(v,p,h,l,r,c); + if (d) + then call outstring(10,400,"Event",2,0); + call patern(80,25,130,100,0,1); + call track(40,10,v,0,4); + call track(140,10,p,0,4); + call track(80,30,h,0,4); + call track(80,50,l,0,4); + call track(80,70,r,0,4); + call track(80,90,c,0,4); + if((h=164 and l=27) or (c=3)) + then exit; + fi; + fi; + od; + call groff; + writeln("i=",i); + for i:=lower(rep) to upper(rep) + do + write(rep(i)); + od; + writeln; + End + End +End. + + + + + + + + diff --git a/at_work/exe_old/486.inc/old1.pcd b/at_work/exe_old/486.inc/old1.pcd new file mode 100644 index 0000000..5c830b6 Binary files /dev/null and b/at_work/exe_old/486.inc/old1.pcd differ diff --git a/at_work/exe_old/486.inc/readme b/at_work/exe_old/486.inc/readme new file mode 100644 index 0000000..51d830f --- /dev/null +++ b/at_work/exe_old/486.inc/readme @@ -0,0 +1,9 @@ +Make sure that the directory + + c:\tmp +exists. It is needed for the correct behaviour of programs. +Don't worry. You have nothing to do in it! + + + + diff --git a/at_work/exe_old/486.inc/simula.inc b/at_work/exe_old/486.inc/simula.inc new file mode 100644 index 0000000..082ccac --- /dev/null +++ b/at_work/exe_old/486.inc/simula.inc @@ -0,0 +1,187 @@ +UNIT SIMULATION: PRIORITYQUEUE CLASS; +(* THE LANGUAGE FOR SIMULATION PURPOSES *) + + VAR CURR: SIMPROCESS, (*ACTIVE PROCESS *) + PQ:QUEUEHEAD, (* THE TIME AXIS *) + MAINPR: MAINPROGRAM; + + + UNIT SIMPROCESS : COROUTINE; + (* USER PROCESS PREFIX *) + VAR EVENT, (* ACTIVATION MOMENT NOTICE *) + EVENTAUX: EVENTNOTICE, + (* THIS IS FOR AVOIDING MANY NEW CALLS AS AN RESULT OF *) + (* SUBSEQUENT PASSIVATIONS AND ACTIVATIONS *) + FINISH: BOOLEAN; + + UNIT IDLE: FUNCTION: BOOLEAN; + BEGIN + RESULT:= EVENT= NONE; + END IDLE; + + UNIT TERMINATED: FUNCTION :BOOLEAN; + BEGIN + RESULT:= FINISH; + END TERMINATED; + + UNIT EVTIME: FUNCTION: REAL; + (* TIME OF ACTIVATION *) + BEGIN + IF IDLE THEN CALL ERROR1; + FI; + RESULT:= EVENT.EVENTTIME; + END EVTIME; + + UNIT ERROR1:PROCEDURE; + BEGIN + ATTACH(MAIN); + WRITELN(" AN ATTEMPT TO ACCESS AN IDLE PROCESS TIME"); + END ERROR1; + + UNIT ERROR2:PROCEDURE; + BEGIN + ATTACH(MAIN); + WRITELN(" AN ATTEMPT TO ACCESS A TERMINATED PROCESS TIME"); + END ERROR2; + BEGIN + + RETURN; + INNER; + FINISH:=TRUE; + CALL PASSIVATE; + CALL ERROR2; + END SIMPROCESS; + + +UNIT EVENTNOTICE: ELEM CLASS; + (* A PROCESS ACTIVATION NOTICE TO BE PLACED ONTO THE TIME AXIS PQ *) + VAR EVENTTIME: REAL, PROC: SIMPROCESS; + + UNIT VIRTUAL LESS: FUNCTION(X: EVENTNOTICE):BOOLEAN; + (* OVERWRITE THE FORMER VERSION CONSIDERING EVENTTIME *) + BEGIN + IF X=NONE THEN RESULT:= FALSE ELSE + RESULT:= EVENTTIME< X.EVENTTIME OR + (EVENTTIME=X.EVENTTIME AND PRIOR< X.PRIOR); FI; + + END LESS; + END EVENTNOTICE; + + +UNIT MAINPROGRAM: SIMPROCESS CLASS; + (* IMPLEMENTING MASTER PROGRAM AS A PROCESS *) + BEGIN + DO ATTACH(MAIN) OD; + END MAINPROGRAM; + +UNIT TIME:FUNCTION:REAL; + (* CURRENT VALUE OF SIMULATION TIME *) + BEGIN + RESULT:=CURRENT.EVTIME + END TIME; + +UNIT CURRENT: FUNCTION: SIMPROCESS; + (* THE FIRST PROCESS ON THE TIME AXIS *) + BEGIN + RESULT:=CURR; + END CURRENT; + +UNIT SCHEDULE: PROCEDURE(P:SIMPROCESS,T:REAL); + (* ACTIVATION OF PROCESS P AT TIME T AND DEFINITION OF "PRIOR"- PRIORITY *) + (* WITHIN TIME MOMENT T *) + BEGIN + IF T