Quellcode V1.8.0 Single User 10 11 86
Quellcode-V1.8.0-SingleUser-10-11-86 Quellcode-V1.8.0-SingleUser-10-11-86
User Manual: Quellcode-V1.8.0-SingleUser-10-11-86
Open the PDF directly: View PDF .
Page Count: 356
Download | |
Open PDF In Browser | View PDF |
Quellcode der insertierten ELAN - Pakete Version: Teil: Stand: 1.8.0 Single - User 10.11.86 ©1986 Selbstverlag GMD Aile Rechte vorbehalten. Insbesondere ist die UberfOhrung in maschinenlesbare Form, sowie das Speichern in Informationssystemen, auch auszugsweise, nur mit schriftlicher Genehmigung dar GMD gestattet. Herausgeber: Gesellschaft fOr Mathematik und Datenverarbeitung mbH Postfach 1240, Schl08 Birlinghoven 0- 5205 Sankt Augustin 1 Telefon(02241) 14-1, Telex 8 89 469 gmd d Telefax(02241) 142889, BTX *43900# Teletex 2627 - 224135 = GMDW Texterstellung: Dieser Text wurda mit dar EUMEL - Textverarbeitung erstellt und aufbereitet und mit dem Agfa Laserdrucksystem P400 gedruckt. Umschlaggestaltung: Hannelotte Weeken Hinweis: Diese Dokumentation wurde mit gr6Btm6glicher Sorgfalt erstellt. Dennoch wird fUr die Korrektheit und Vo/lstllndigkeit der gemachten Angaben keine GewiJhr Obernommen. Bei vermuteten Fehlern der Software oder der Dokumentation bitten wir um beldige Meldung, damit eine Korrektur m6glichst Tasch erfolgen kann. Anregungen und Kritik sind jederzeit willkommen. Inhaltsverzeichnis 1. 2. 3. 4. Ubersicht Dber die insertierten Pakete Ubersicht Door die exportierten Objekte nach Paketen geordnet Ubersicht Dber die exportierten Objekte alphabetisch geordnet Quellcode der insertierten Pakete 1. Obersicht Ober die insertierten Pakete '(M)' '(S)' '(T)' vor der Paketnummer heiBt, daB dies Objekt nur im Multi - User vorhanden ist. vor der Paketnummer heiBt, daB dies Objekt nur im Single - User vorhanden ist. vor der Paketnummer heiBt, daB dies Objekt nur in einem System mit Textverarbeitung vorhanden ist. Die Paketnummer ergibt sich aus der Reihenfolge, in der die Pakete im Multi - User mit Textverarbeitung insertiert wurden. Bitte beachten Sie, daB diese Reihenfolge nicht dar Insertierungsreihenfolge im Single - User entspricht. Dar Quellcode dar insertierten Pakete ist in Teil 4 nach Paketnummern sortiert. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. S29. S30. S31. 48. 849. 39. a bits tex1 pcb and init control dataspace basic transput bool integer error handling real date handling command dialogue thesaurus handling local manager pattern match file handling elan do interface scanner screen description tasten verwaltung editor paket editor functions std transput local manager part 2 eurnel coder part 1 mathlib command handler advertising tasks single font store basic archive archive single narneset 840. 52. S53. 543. system info konfigurieren configurator single single user monitor 44. sysgen off 545. ur startlS 2, Obersicht aber die exportierten Objekte nach Paketen geordnet: '(M)' '(S)' '(T)' vor der Paketnummer heiBt, daB dies Objekt nur im Multi - User vorhanden is!. vor der Paketnummer heiBt, daB dies Objekt nur im Single - User vorhanden is!. vor dar Paketnummer heiBt, daB dies Objekt nur in einem System mit Textverarbeitung vorhanden is!. Die Paketnummer ergibt sich aus der Reihenfolge, in der die Pakete im Multi - User mit Textv9rarbeitung insertiert wurden. Bitte beachten Sie, daB diese Reihentolge nicht der Insertierungsreihenfolge im Single - Usar antspricht. Dar Quallcoda dar insertiertan Pakata ist in Teil 4 nach Paketnummern sortiert. PACKET a: PACKET bits: PROC rotate <: INT VAR bits, INT CONST number of bi t8 J INT OP AND (INT CONST left, right) INT OP OR I. INT CONST left, right) INT OP XOR (INT CONST left, rlght) oool PROC bi t (INT CONST bi ts, bi t no) PROC set bit (INT VAR bits, INT CONS: blt nol PROC reset blt (INT VAR bits, INT CONST bit no) INT PROC 10lolest set (INT CONST bits) INT PROC 10lolest reset (INT CONST bits) 2-19 2-23 2-27 2-31 2-35 2-41 2-47 2-53 2-65 PACKET text: INT CONST max text length TEXT OP SUB (TEXT CONST text, INT CONST pas 1 TEXT PROC subtext (TEXT CONST source, INT CONST from, to) TEXT PROC subtext (TEXT CONST source, IN! CONST from) INT PROC code (TEXT CONST text) TEXT PROC code (IN! CONST code) INT OP ISUB (TEXT CONST text, IN! CONST index) PROC replace (TEXT VAR text, INT CONST index, value) REAl OP RSUB (TEXT CONST text, IN! CONST index) PROC replace (TEXT VAR text, IN! CONST index, REAL CONST code) PROC replace (TEXT VAR dest, IN! CONST pas, ~XT CONST source) TEXT PROC text (TEXT CONST source, INT CONST length) TEXT PROC text (TEXT CONST source, HIT CONST length, from) OP CAT (TEXT VAR right, TEXT CONST left) TEXT OP + (TEXT CONST left, right) TEXT OP • (INT CONST times, TEXT CONST source) INT PROC length (TEXT CONST text) IN! OP lENGTH (TEXT CONST text) IN! PROC pas (TEXT CONST source, pattern) IN! PROC pas (TEXT CONST source, pattern, IN! CONST from) IN! PROC pes (TEXT CONST source, pattern, IN! CONST from, to) IN! PROC pos (TEXT CONST source, 10101, high, INT CONST from) 3-35 3-37 3-41 3-45 3-49 3-53 3-57 3-61 3-65 3-69 3-74 3-78 3-95 3-99 3-103 3-109 3-120 3-124 3-128 3-1:12 3-136 3-140 TEXT PROC compress (TEXT CONST text) PROC change ITEZT VAR destination, INT CONST from, to, TEXT CONST ne.,,) FROC change (TEXT VAR destination, TEXT eONST old, ne.,,) PRoe delete char \ TEXT VAR string, HIT CONST delete pas) PROC insert char (TEXT VAR strir.g, TEXT eONST char, INT CONST lnsert pas) INT PROC heap size PROe collect heap garbage PROC stranalyze (ROW 256 INT CONST table, INT VAR sum, INT CONST max sum, TEXT CONST string, INT VAR index, INT eONST to, INT VAR exi t code) BOO1 OP 1EXEQUAL (TEXT CONST left, right) BOO1 OP 1EXGREATER (TEXT CONST left, right) BOO1 OP 1EXGREATEREQUA1 (TEXT CONST left, right) OP CAT (TEXT VAR result, INT CONST number i PROC insert int (TEXT VAR result, IN! CONST insert pas, number) PROC delete int (TEXT VAR result, INT CONST delete pas) 3-144 3-167 3-183 3-214 3-224 3-236 3-240 3-244 3-262 3-269 3-276 3-374 3-379 3-385 PACKET pcb and init control: TYFE INITrLAG INT FROC session· IN! PROC pcb (INT CONST field) FROC set line nr (INT CONST value) OP : = (INITrLAG VAR t'l~, BOOL CONST n~true) B001 PROC initialized \ INITrLAG VAR flae;) REAL PROC clock (INT CONST nr) PROC stor~e (INT VAR size, used) INT pROC id \ INT CONST no) FROC ke 4-19 4-22 4-26 4-34 4-39 4-50 4-62 4-66 4-70 4-74 PACKET dataspace : TYPE ALIGN OP :. (DATASPACE VAR dest, DATASPACE CONST source) DATASPACE PROC ni1space PROC forget (DATASPACE CONST da taspace ) PROC type \ DATASPACE CONST ds, IN! CONST type) INT PROC type (DATASPACE CONST ds) INT FROC heap size (DATASPACE CONST ds) IN! PROC stor~e (DATASPACE CONST is) IN! PROC ds pages !. DATASPACE CONST ds) IlIT FROC next ds page (DATASPACE CONST ds, IN! CONST page nr) PROC blackout (DATASPACE CONST ds, IN! CONST page nr, codel, code2, IN! VAR return code) PROC b10ckin (DATASPACE VAR ds, IN! CONST page nr, codel, code2, IN! VAR return code) 5-21 5-23 5-27 5-31 5-35 5-39 5-43 5-47 5-51 5-59 5-63 5-68 PACKET basic transput : PROC out (TEXT CONST te>:t I PROC outsubtext (TEXT CONST source, IN! CONST from) PROC outsubtext (TEXT CONST source, IN! CONST from, to) PROC outtext (TEXT CONST source, INT CONST from, to) OP TIMESOUT (IN! CONST times, TEXT CONST text) PROC display (TEXT CONST text) FROC inchar (TEXT VAR character) TEXT PROC incharety exportlerte Ob,jekte nach Paketen geordnet 6-35 6-39 6-43 6-47 6-59 6-81 6-87 6-91 TEXT PROC incharety (INT CONST time limi t) PROe pause r INT CONST time lilt1 t) PROC pause PROe cat input rTEXT VAR t, esc char) PROe cursor (INT eONST '" y) PROe set cursor lINT VAR x, y) PROe cout (INT CONST nun:ber) INT PROC channe 1 BOOL PROC online PROe control (INT CONST codel, code2, code3, INT VAR return codel PRoe blockout (ROW 256 INT CONST block, INT CONST codel, code2, INT VAR return code) PROC blockin (ROW 256 INT VAR block, INT eONST codel, code2, INT VAR return codel 6-95 6-100 6-105 6-113 6-118 6-124 6-128 6-133 6-137 6-142 6-146 6-161 PACKET bool : BOOL CONST "true BOOL CONST false BOOr. OP XOR (BOOL CONST left, risht) 7-4 7-4 7-7 PACKET integer : INT PROC minint INT PROC maxi nt TEXT PROC text (INT CONST number) TEXT PROC text (INT CONST number, lensth) INT PROe int (TEXT CONST number) INT OP MOIl (INT CONST left, r1ght) INT PROC slgn (INT CaNST argument I INT OP SIGN (INT CaNST argument) INT PROC abs (INT CONST argument) HIT OP ABS (INT CONST argument) INT OP ... (INT CONST arg, exp I INT PRce m1n (nn CaNST first, second) INT PROC max (INT CaNST first, second) BOOL PROC last conversion ok PROC set conversion (BOOL CONST success) PROC initialize random (INT CONST start) INT PROC random (INT CONST lower bound, upper bound) 8-7 8-9 8-12 8-25 8-38 8-95 8-101 8-110 8-114 8-122 8-126 8-154 8-160 8-170 8-174 8-197 8-208 PACKET error handling: PROC enable stop PROC disable stop BOOL PROC is error PROC clear error :SXT PROC error message INT PROC error code INT PROC error l i ns PROC errors top (TEXT CONST message) PROe errors top (INT CONST code, TEXT CONST message) PROC put error PROC stop 9-28 9-32 9-40 9-44 9-72 9-79 9-<30 9-101 9-107 9-116 9-135 PACKET real : REAL FROC max real REAL FROC small real INT FROC decimal exponent (REAL CONST mantissal FROC set exp (INT CONST exponent, REAL VAR number) REAL FROC floor (REAL CONST real) REAL FROC round (REAL CONST real, INT CONST digi ts ) TEXT FROC text (REAL CONST real) TEXT FROC text (REAL CONST real, INT CONST length) T~XT PROC text (REAL CONST real, INT CONST length, fracs) REAL FROC real (TEXT CONST text) REAL FROC abs (REAL CONST value) REAL OF ABS (REAL CONST value I INT FROC Slgn (REAL CONST yalue) INT OF SIGN : REAL CONST value) REAL OF I«lD (REAL CONST left, right) REAL PROC frac (REAL CONST value) REAL FROC max (REAL CONST a, b) REAL FROC min (REAL CONST a, b) OF INCR (REAL VAR dest, REAL CONST increment I OF DECR (REAL VAR dest, REAL CONST decrement I INT FROC int (REAL CONST valuel REAL FROC real (INT CONST value I 10-40 10-42 10-48 10-~2 10-62 10-66 10-88 10-1~5 10-199 10-24:3 10-:329 10-:3:38 10-:344 10-~:3 10-:359 10-:369 10-:375 10-:381 10-:387 10-:39:3 10-:399 10-424 PACKET date handling : REAL REAL REAL REAL TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT REAL REAL REAL PROC day PROC hour PROC mi nu te PROC second PROC date PROC date (REAL CONST datum) PROC day (REAL CONST datum) PROC month (REAL CONST datuml PROC year (REAL CONST datum) PROC time of day PROC time of day (REAL CONST value I PROC time (REAL CONST value) PROC time (REAL CONST value, INT CONST length) PROC date (TEXT CONST datum) PROC time (TEXT CONST time) CONST hour 11-28 11-29 11-:30 11-:31 11-:3:3 11-44 11-128 11-1:39 11-156 11-166 11-170 11-174 11-178 11-201 11-260 11-265 PACKET command dialogue : TYPE QUIET QUIET PROC quiet BOOL PROC BOOL BOOL PROC PROC TEXT PROC TEXT PROC command dialogue cOlllll&lld dialogue (BOOL CONST status) PROC yes (TEXT CONST question) PROC no (TEXT CONST question) say (TEXT CONST message) param position (INT CONST x) PROC last param last param (TEXT CONST new) PROC std 12-29 12-:31 12-:38 12-40 12-45 12-81 12-87 12-95 12-181 12-114 12-118 PACKET thesaurus handling: TYPE THESAURUS YdESAURUS PROC empty thesaurus OP :. (THESAURUS VAH dest, THESAURUS CONST source) PROC insert (TIlESAURUS VAH thesaurus, TEXT CONST name, INT VAH indeK) PROC insert (THESAURUS VAH thesaurus, TEXT CONST name) PROC delete (THESAURUS VAH thesaurus, TEXT CONST name, INT VAH indeK) PROC delete (TIlESAURUS VAH thesaurus, INT CONST indeK) BOOL OP CONTAINS (THESAURUS CONST thesaurus, TEXT CONST name) PROC rename (THESAURUS VAH thesaurus, TEXT CONST old, new) PROC rename (THESAURUS VAH thesaurus, INT CONST index, TEXT CONST new) INT PROC link (THESAURUS CONST thesaurus, TEXT CONST name) TEXT PROC name (THESAURUS CONST thesaurus, INT CONST index) PROC get (THESAURUS CONST thesaurus, TEXT VAH name, INT VAH index) INT PROC highest entry (THESAURUS CONST thesaurus) 13-17 13-96 13-103 13-111 13-170 13-180 13-188 13-231 13-242 13-248 13-267 13-274 13-281 13-323 PACKET local manager: PROC create (TEXT CONST name) DATASPACE PROC new (TEXT CONST name) DATASl'ACE PROC old (TEXT CONST name) DATASPACE PROC old (TEXT CONST name, INT CONST expected type) BOOL PROC exists (TEXT CONST name) PROC forget (TEXT CONST name) PROC forget (TEXT CONST name, QUIET CONST q) PROC forget PROC status (TEXT CONST name, status teKt) TEXT PROC status (TEXT CONST name) PROC stetus (INT CONST pas, TEXT CONST status pattern) PROC copy (DATASPACE CONST source, TEXT CONST dest name) PROC copy (TEXT CONST source name, dest name) PROC rename (TEXT CONST old name, new name) PROC begin list PROC get list entry (TEXT VAH entry, status text) TEXT PROC write password TEXT PROC read password PROC enter password (TEXT CONST password) PROC enter password (TEXT CONST fUe name, write pass, read pass) BOOL PROC read permisslon (TEXT CONST name, supply password) BOOL PROC write permission (TEXT CONST name, supply password) THESAURUS PROC all 14-61 14-86 14-96 14-110 14-127 14-13414-145 14-157 14-166 14-176 14-187 14-200 14-218 14-224 14-237 14-24414-257 14-263 14-270 14-28414-312 14-335 14-358 PACKET pattern match: TEXT OP - (TEXT CONST alphabet) TEXT OP OR (TEXT CONST a, b) TEXT OP - (TEXT CONST p, INT CONST x) TEXT CONST any TEXT PROC any (INT CONST n) TEXT PROC any (TEXT CONST a) TEXT PROC any (INT CONST n, TEXT CONST a) TEXT PROC notion (TEXT CONST t) TEXT CONST bound TEXT PROC match (INT CONST xl INT PROC matchpo s (INT CONST x) INT PROC matchend (INT CONST x) 15-43 15-54 15-58 15-62 15-54 15-78 15-72 15-78 15-87 15-91 15-95 15-97 TEXT 8001 8001 TEXT PROC somefix (TEXT GONST pattern) OP UNLIKE (TEXT CONST t, p) OP lIKE (TEXT CONST t, pattern I PROG notion (TEXT CONST t, INT CONST rl 15-123 15-191 15-193 15-765 PACKET file handling: TYPE FILE TYPE l'RANGE OP :. (rILE VAH left, rILE CONST right) TEXT PROG prefix (TEXT CONST pattern) 8001 PROG pattern found TRANSPL~IRECTION PROG input TRANSPUTDIRECTION PROG output TRANSPUTDIRECTION PROG modify FILE PROC sequential file (TRANSPUTDIRECTION CONST mode, DATASPAGE GONST ds) rILE PROG sequential file (TRANSPUTDIRECTION GONST mode, TEXT CONST name) PROG reset (FILE VAH f) PROG reset (FILE VAH f, TRANSPUTDIRECTION CONST mode) PROG input (FILE VAH fl PROG output (rILE VAH fl PROG modify (rILE VAH f) PROG close (FILE VAH fl PROG to line (FILE VAH f, INT CONST destination line I PROG to first record (FILE VAH f) PROG to eof (FILE VAH fl PROG putline (FILE VAH f, TEXT CONST word) PROG delete record (rILE VAH f I PROC insert record (rILE VAH f) PROG down (FILE VAH fl PROC up (FILE VAH f) PROC down (rILE VAH f, INT CONST n I PROG up (rILE VAH f, INT CONST n) PROC write record (rILE VAH f, TEXT CONST record) PROC read record (rILE CONST f, TEXT VAH record) PROG line (rILE VAH f) PROC line (rILE VAH f, INT CONST lines) PROG getHne (FILE VAH f, TEXT VAH textl 8001 moe is first record (FILE CONST fl 8001 PROC eof (rILE CONST f) INT moe line no (FILE CONST fl PROC line type (FILE VAH f, INT CONST t) INT moe line type (FILE CONST f) PROC put (rILE VAH f, TEXT CONST word) PROC put (rILE VAH f, INT CONST value) PROC put (FILE VAH f, REAL CONST real) PROC write (rILE VAH f, TEXT CONST word) PROC get (FILE VAH f, TEXT VAH word, TEXT CONST separator) moe get (FILE VAH r, TEXT VAH word, INT CONST max lel18th) PROC get (rILE VAH r, TEXT VAH word) moe get (FILE VAH r, INT VAH number) PROC get (rILE VAH r, REAL VAH number) PROC split line (rILE VAH r, INT CONST split col) PROC split line (rILE VIJI r, INT CONST spli t col, 8001 CONST note indentation I PROC concatenate line (FILE VAH r, 8001 CONST delete blanks) moe set ral18e (FILE VAH r, INT CONST start. line, start col, mANGE VAH old ral18e) 16-150 16-152 16-160 16-546 16-574 16-851 16-856 16-861 16-869 16-B85 :6-926 16-935 16-962 16-969 16-976 16-983 16-1023 16-1031 16-1038 16-1045 16-1055 16-1063 16-1071 16-1078 16-1085 16-1091 16-1098 16-1111 16-1119 16-1145 16-1152 16-1174 16-1182 16-1197 16-1204 16-1210 16-1217 16-1236 16-1243 16-1250 16-1268 16-1312 16-1336 16-1346 16-13M 16-1365 16-1371 16-1407 16-1550 FROG set range (FILE VAR f, mANGE VAR nell range) FROC reset range (rILE VAR f) FROC remove (rILE VAR f, INT CONST size) FROC clear removed (rILE VAR f) FROG reinsert (rILE VAR f) FROC copy attributes (rILE CONST source file, FILE VAR dest file) INT FROC max line length (FILE CONST f) FROC max line length (FILE VAR f, INT CONST nell limit) TEXT FROC headline (FILE CONST t) FROC headline (rILE VAR f, TEXT CONST head) FROC get tabs (FILE CONST f, TEXT VAR tabs) FROC put tabs (FILE VAR f, TEXT CONST tabs) INT FROC edit info (FILE CONST f) FROC edi t info (FILE VAR f, INT CONST info) INT FROC lines (rILE CONST f) INT FROC removed lines (rILE CONST f) INT FROC segments (FILE CONST f) INT FROC col (FILE CONST f) FROC col (FILE VAR f, INT CONST nell column) TEXT FROC word (FILE CONST f) TEXT PROC liard (rILE CONST f, TEXT CONST delimiter) TEXT FROC liard (rILE CONST f, INT CONST max length) BOOL PROC at (FILE CONST f, TEXT CONST word I PROe exec (PROC (TEXT VAR, TEXT CONST) proc, FILE VAR f, TEXT CONST t) FROe exec (PROC (TEXT VAR, INT CONST) proc, FILE VAR f, INT CONST i) INT FROC pos (rILE CONST f, TEXT CONST pattern, INT CONST 1) PROC dOlln (FILE VAR f, TEXT CONST pattern) FROC dOlln (FILE VAR f, TEXT CONST pattern, INT CONST max line I PROC dOllnety (FILE VAR f, TEXT CONST pattern) PROC dOllnety (FILE VAR f, TEXT CONST pattern, INT CONST max linel PROC up (rILE VAR f, TEA"! CONST pattern) PROC up (FILE VAR f, TEXT CONST pattern, HIT CONST max line) FROC uppety (FILE VAR f, TEXT CONST pattern) FROC uppety (FILE VAR f, TEXT CONST pattern, INT CONST max line) INT FROC len (rILE CONST f) TEXT PROC subtext (FILE CONST f, INT CONST from, to) FROC change (FILE VAR f, INT CONST from, to, TEXT CONST new I BOOL FROC mark (FILE CONST f) FROC mark (FILE VAR f, INT CONST line no, col) INT FROC mark line no (FILE CONST f) INT FROC mark col (FILE CONST f) FROC set marked range (rILE VAR f, l'RANGE VAR old range) FROC sort (TEXT CONST dateinamel FROC sort (TEXT CONST dateiname, INT CONST sortier&nfang) FROC lex sort (TEXT CONST date1name) FROC lex sort (TEXT CONST dateiname, INT CONST sortieranfang) 16-1620 16-1668 16-1679 16-1687 16-1695 16-1703 16-1716 16-1723 16-1732 16-1739 16-1746 16-1753 16-1760 16-1767 16-1774 16-1781 16-1788 16-1795 16-1801 16-1809 16-1815 16-1825 16-1831 16-1844 16-1853 16-1861 16-1869 16-1875 16-1884 16-1890 16-1899 16-1905 16-1914 16-1920 16-19~ 16-1938 16-1946 16-1956 16-1962 16-1973 16-1982 16-1993 16-2016 16-2020 16-2025 16-2029 PACKET elan do interface : PROC do (TEXT CONST COlIIIII&nd) FROC no do again 17-23 17-44 PACKET scanner: PROC PROC FROC PROC scan (TEXT CONST sCan text) continue scan (TEXT CONST scan text) next symbol (TEXT VAR symbol) next symbol (TEXT VAR symbol, INT VAR type) 18-36 18-44 18-52 18-59 FROC scan (FILE VAR fl FROC next symbol (FILE VAR f, TEXT VAR symbol) FROC next symbol (FILE VAR f, TEXT VAR symbol, INT VAR type) 18-296 18-303 18-312 PACKET screen description : INT FROC xsize INT FROC ysize INT FROG marksize FROC xsize (INT CONST i I FROG ysize (INT CONST i I FROG markslze (INT CONST 1) BOOL FROC mark refresh line mode FROG mark refresh line mode (BOOL CONST bl 19-9 19-11 19-13 19-15 19-17 19-19 19-24 19-28 PACKET tasten verwaltung : FROG TEXT FROC TEXT BOOL FROC lernsequenz auf taste legen (TEXT CONST taste, lernsequenz) FROC lernsequenz auf taste (TEXT CONST taste I kommando auf taste legen (TEXT CONST taste, kommando I FROC kommando auf taste (TEXT CONST taste) FROC taste enthaelt kommando (TEXT CONST taste) std tastenbelegung 20-27 20-63 20-71 20-79 20--87 20-92 PACKET editor peket : FROC edi tget command (BOOL CONST schal ter I FROC editget {TEXT VAR editsatz, INT CONST editlimit, editlaenge, TEXT CONST sep, res, TEXT VAR exit chari FROC editget (TEXT VAR ed1tsatz, INT CONST ed1tlimit, TEXT VAR ex1t char) FROC ed1tget (TEXT VAR ed1tsatz, TEXT CONST sep, res, TEXT VAR exit char) PROC editget (TEXT VAR ed1tsatz) PROC edltget (TEXT VAR editsatz, INT CONST edltl1mit, editlaenge) BOOL PROC is edi tget PROC get editllne (TEXT VAR editllne, INT VAR ed1tpos, edltmarke) FROG put editline (TEXT CONST editline, INT CONST editpos, editmarke) BOOL PROC lIithin kanji (TEXT CONST satz, INT CONST stellel BOOL PROC is kanji esc (TEXT CONST char) BOOL PROC tllO bytes PROC tllO bytes (BOOL CONST nell mode) BOOL PROC \/rite permission PROC push (TEXT OONST austuehrkollllll&lldo) PROC type (TEXT OONST austuehrkollllll&!ldo) PROC getchar (TEXT VAR zeichenl BOOL PROC is incharety (TEXT CONST muster) TEXT PROC getcharety PROC get editcursor (INT VAR x, y) INT PROC aktueller editor INT PROC groesster editor PROC quit last PROC quit INT CONST aktueller editor PROC n1chts neu PROC satznr neu PROC ueberschrift neu PROC ze1le neu PROC abschnltt nau (INT OONST von satznr, bis satznr) exportlerte ObJekf,e na.ch Paketen geordnet 21--81 21-87 21-192 21-196 21-200 21-205 21-913 21-917 21-925 21-933 21-947 21-952 21-954 21-989 21-991 21-1ee9 21-1173 21-1194 21-1208 21-1219 21-1279 21-1281 21-2144 21-2153 21-2158 21-2217 21-2219 21-2221 21-2223 21-2228 PROC bildabschni tt neu (INT CONST von zeile, bis zeUe) PROC bUd neu PROC bUd neu (FILE VAR f) PROC alles neu FROC satznr zelgen PROC ueberschrift zeigen PROe bUd zeigen PROC set busy indica tor PROe word wrap (BOOL CONST br BOOL PROC word wrap INT PROC margin PROC marg1n (INT CONST 1) BOOL FROC rubin mode BOOL FROC rubin mode (INT CONST editor nr) FROC edit (INT CONST i, TEXT CONST res, PROe (TEXT CONST) kommando interpreter) PROC edit (INT CONST von, bis, start, TEXT CONST res, PROC (TEXT CONST) kommando interpreter) PROe open editor (FILE CONST new file, BOOL CONST access) PROC open editor (INT CONST editor nr, FILE CONST new file, BOOL CONST access, INT CONST x start, y, x len start, y len) PROC open edi tor (IlIT CONST i) FILE PROC ed1tf11e FROC get window (INT VAR x, y, x size, y size) 21-2237 21-2249 21-2251 21-2261 21-2270 21-2274 21-2417 21-2508 21-2607 21-2623 21-2630 21-2632 21-2653 21-2655 21-2665 21-2670 21-2753 21-2792 21-2881 21-2929 21-2935 PACKET editor functions : PROC std kommando 1nterpreter (TEXT CONST taste) PROC edit (FILE VAR f) FROC ed1t (FILE VAR f, INT CONST x, y, x size, y size) PROC ed1t (FILE VAR f, TEXT CONST res, PROC (TEXT CONST) kdo interpreter) FROC ed1t PROC ed1 t (TEXT CONST filename) PROC edit (TEXT CONST filename, INT CONST x, y, x s1ze, y s1ze) PROC edt t (INT CONST i) PROC show (FILE VAR f) PROC show (TEXT CONST filename) FROC show OP PUT (TEXT CONST filename) OP P (TEXT CONST f11ename) OP GET (TEXT CONST filename) OP G (TEXT CONST filename) INT PROC len PROC col (INT CONST stelle) INT PROC col PROC 11mi t (INT CONST 11mi t ) INT PROC limi t INT PROC lines INT PROC line no PROC to 11ne (INT CONST satz nr) OP T (INT CONST satz nr) PROC down (INT CONST &/lZ) OP D (INT CONST anz) PROC up (INT CONST &/lZ) OP U (INT CONST anz) PROC down (TEXT CONST muster) OP D (TEXT CONST muster) PROC down (TEXT CONST muster, INT CONST &/lZ) 22-58 22-176 22-186 22-193 22-200 22-233 22-2561 22-261 22-266 22-273 22-283 22-293 22-362 22-367 22-438 22-443 22-448 22-453 22-458 22-463 22-468 22-473 22-478 22-488 22-493 22-498 22-583 22-5$8 22-513 22-525 22-530 FROC up (TEXT CONST muster) OP U (TEXT CONST muster I FROC up (TEXT CONST muster, HIT CONST anz) FROC downety (TEXT CONST muster) FROC downety (TEXT CONST muster, INT CONST anz I PROG uppety (TEXT CONST muster) FROC uppety (TEXT CONST muster, INT CONST anz I OP C (TEXT CONST old, new) OP C (TEXT CONST replacement I FROC change to (TEXT CONST old, newl OP CA (TEXT CONST old, new) FROC change all (TEXT CONST old, new) B001 PROC eof B001 PROC mark FROC mark (BOO1 CONST mark on) B001 PROC at (TEXT CONST pattern) TEXT PROC word TEXT PROC word (TEXT CONST sep) TEXT PROC word (INT CONST len) FROC no te (TEXT CONST text) PROC note (INT CONST number) PROC note line B001 PROC anything noted rILE PROC note file FROC note edit (rILE VAR context) PROC note edit 22-535 22-547 22-552 22-557 22-565 22-570 22-578 22-58:3 22-587 22-596 22-613 22-618 22-623 22-628 22-633 22-642 22-646 22-651 22-656 22-671 22-677 22-683 22-689 22-695 22-701 22-731 PACKET std transput : FROC TEXT FROC TEXT PROC FROC FROC PROC sysout (TEXT CONST file name) PROC sysout sys1n (TEXT CONST file name) PROC sys1n put (TEXT CONST word) put (INT CONST number) put (REAL CONST number) putl1ne (TEXT CONST textl1ne) PROC line FROC line (INT CONST times I FROC page PROC write (TEXT CONST word) FROC get (TEXT VAR word) PROC get (TEXT VAR word, TEXT CONST separator) FROC get (INT VAR number) PROC get (REAL VAR number) PROC get (TEXT VAR word, INT CONST length I PROC getl1ne (TEXT VAR textl1ne) PROC get secret line (TEXT VAR textl1ne) 23-33 23-44 23-48 23-59 23-64 23-73 23-79 23-85 23-94 23-103 23-112 23-126 23-1:3e 23-152 23-175 23-182 23-189 23-293 23-217 PACKET local manager part 2 : FROC list PROC list (rILE VAR f) 24-18 24-22 PACKET eumel coder part 1 : FROC FROC PROC PROC PROC PROC PROC PROC FROC PROC PROC BOOL PROC PROC BOOL PROC PROC BOOL help (TEXT CONST proc name) bulletin (TEXT CaNST packet name I bulletin packe ts run (TEXT CONST file name) run run agai n insert (TEXT CONST file name I insert prot (TEXT CONST file name) prot off PROC prot check on check off PROC check warnings on warnings off PROC warnings 25-328 25-559 25-679 25-701 25-735 25-744 25-748 25-756 25-765 25-826 25-832 25-837 25-841 25-845 25-849 25-853 25-857 25-861 PACKET math lib : REAL REAL REAL REAL REAL REAL REAL PROC pi PROC e PROC In (REAL CONST x I PROC log10 (REAL CaNST xl FROC log2 (REAL CONST z I FROC sqrt (REAL CaNST z) FROC exp (REAL CaNST z) PROC tan (REAL CONST x I PROC tand (REAL CaNST x) PROC sin (REAL CaNST x) PROC sind (REAL CaNST xl FROC cos (REAL CONST x) PROC cosd (REAL CaNST x) PROC arctan (REAL CONST y) PROC arctand (REAL CONST x I OP ** (REAL CONST b, e I OP - (REAL CONST a, INT CONST b) REAL REAL REAL REAL REAL REAL REAL REAL REAL REAL REAL PROC random FROC initializerandom (REAL CONST z) 26-25 26-26 26-28 26-32 26-36 26-64 26-83 26-111 26-116 26-146 26-154 26-162 26-170 26-204 26-218 26-222 26-231 26-259 26-263 PACKET command handler: PROC get command (TEXT CONST command text) PROC get command (TEXT CONST command text, TEXT VAR command 11ne) PROC all&lyze COlIIIII&nd (TEXT CONST command list, INT CONST permitted type, PROC PROC PROC PROC PROC INT VAR command index, number of params, TEXT VAR param 1, param 2) all&lyze command (TEXT CONST cOlllllll1nd list, command line, INT CONST permitted type, INT VAR command index, number of params, TEXT VAR param 1, param 2) do command command error cover tracks cover tracks (TEXT VAR secret) export.lerie ObJelrte nacb Pabten pord.net 27-33 27-39 27-106 27-117 27-233 27-247 27-266 27-277 PACKET advertising : SOME PROe eumel must advertise S29-4 PACKET tasks single : TYPE TASK TASK PROC myself OP :. (TASK VAH dest. TASK GONST source) BOOL OP • (TASK CONST left. right) BOOL PROG is n11 task (TASK CONST t) INT PROG pcb (TASK CONST id. INT CONST field) INT PROC status (TASK CONST id) INT PROC channel (TASK CONST id) REAL PROC clock (TASK CaNST id) INT PROC storage (TASK CONST id) PROC continue (INT CONST channel no) INT PROG da taspaces S30-38 S30-44 S30-51 S30-57 S30-63 S30-69 S30-75 S30-81 S30-87 S30-93 S30-112 S30-121 PACKET font store : PROG font table (TEXT CONST new font table I TEXT FROC font tab:i.e PROC list font tables FROC list fonts (TEXT CONST name) PROC list fonts INT PROC x step conversion (REAL CONST em) REAL PROC x step conversion (INT CONST steps) INT FROC y step conversion (REAL CONST cm) REAL PROC y step conversion (INT CONST steps) TEXT PROC on string (INT CONST modification) TEXT FROC off string (INT CONST modification) INT PROC font (TEXT CONST font name) TEXT FROC font (INT CONST font number) BOOL PROC font exists (TEXT CONST font name) BOOL PROC next larger font exists (INT CONST font number. INT VAH next larger font) BOOL PROC next smaller font exists (INT CONST font number, INT VAH next smaller font) INT PROC font lead (INT CONST font number) INT PROC font he ight (INT CONST font number) INT PROC font depth (INT CONST font number) INT FROC indentation pitch (INT CONST font number) INT PROC char pitch (INT CONST font number. TEXT CONST char) INT PROC extended char pitch (INT CONST font number. TEXT CONST esc char, char) TEXT PROC replacement (INT CONST font number. TEXT CONST char) TEXT PROC extended replacement (INT CONST font number. TEXT CONST esc char. char) TEXT PROC font string (INT CONST font number) TEXT PROC y offsets (INT CONST font number) INT PROC bold offset (INT CONST font number) PROC get font (INT CONST font number. INT VAH indentation pitch, S31-88 S31-128 S31-135 S31-164 S31-176 S31-218 S31-229 S31-237 S31-248 S31-206 S31-270 S31-284 S31-298 S31-311 S31-318 S31-;338 S31-358 S31-371 S31-384 S31-397 S31-410 S31-430 S31-452 S31-480 S31-537 S31-550 S31-563 font lead. font height, font depth. ROW 256 INT VAH pitch table) PROC get replacements (INT CONST font number, TEXT VAH replacements, ROW 256 INT VAH replacements table) export.1erte ObJelTEXT I INT CONST arg, exp) -- > INT 1REAL CONST a, INT CONST b) --> REAL lREAL CONST b, el --> REAL i TEXT CONST p, INT CONST x) --> TEXT I TEXT CONST left, right) -- > TEXT I THESAURUS CONST left, TEXT CONST right) THESAURUS (THESAURUS CONST left, right) -- > THESAURUS (TEXT CONST alphabet) --> TEXT (THESAURUS CONST left, TEXT CONST right) -- > THESAURUS I THESAURUS CONST left, right) -- > THESAURUS I. THESAURUS CONST left, right) -- > THESAURUS (DATASPACE VAH dest, DATASPACE CONST source) I FILE VAH left, rILE CONST right) (INITFLAG VAR n..." oooL CONST flag true ) (TASK VAH de.t, TASK CONST source) (THESAURUS VAH de.t, THESAURUS CONST source) \ TASK CONST left, right) --> BOOL 3-109 8-126 26-231 26-222 15-58 3-103 39-47 39-32 15-43 39-72 39-57 39-81 5-23 16-160 4-39 S30-51 13-103 S30-57 A abschni tt neu (INT CONST von satznr, ABS (INT CONST argument) -- > INT abo (INT CONST argument) --> INT abs (REAL CONST value) --> REAL ABS (REAL CONST va.lue) --) REAL aktueller editor --) INT aktueller editor --) INT bis satznr) ALIGN aHes neU CONST from) --) THESAURUS CONST file name) --) THESAURUS all --) THESAURUS analyze command (TEXT CONST command list, command line, INT CONST permitted type, INT VAH command index, number of pa.rams, TEXT VAH pa.ram 1, pa.ram 2) analyze command (TEXT CONST command list, INT CONST permitted type, INT VAH command index, number of pa.rams, TEXT ViJl pa.ram 1, pa.ram 2) AND (INT CONST left, right) --) INT ansi cursor (TEXT CONST pre, mid, post I any (INT CONST n) --) TEXT ALL ALL (TASK (TEXT exporlierte ObJekte &lpb&betiach geordnet 21-2228 8-122 8-114 10-329 10-338 21-1279 21-2158 5-21 21-2261 549-649 39-96 14-358 27-117 27-106 2-23 52-231 15-64 any (INT CONST n, TEXT CONST a) --) TEXT any --) TEXT any ( TEXT CONST a) TEXT an,'thing noted BOOL archi ve blocks --) INT archi ve (TEXT CONST name) arctand (REAL CONST x) --) REAL arctan (REAL CONST r) --) REAL at (FILE CONST f, TEXT CONST word) - - ) BOOL at ( TEXT CONST pattern) - -) BOOL 15-72 15-62 15-70 22-689 48-329 549-72 26-218 26-204 16-1831 22-642 B baudra te ( INT CONST nr, rate) begin list blldabschnltt neu (INT CONST von zene, bis zeile) bild neu bild neu (TILE VAR f) bild zeigen bi t (INT CONST bits, bit no) --) BOOL bits (INT CONST channel, key) bi ts (INT CONST channel, number, parity) blockin (DATASPACE VAH ds, INT CONST page nr, codel, code2, INT VAH return code) blockin (ROW 256 INT VAH block, INT CONST codel, code2, INT VAH return code) block number --) INT blackout (DATASPACE CONST ds, INT CONST page nr, codel, code2, INT VAR return codel blackout (ROW 2~6 INT CONST block, INT CONST codel, code2, INT VAH return code) bold offset ( INT CONST font number) --) INT bound TEXT bulletin bulletin (TEXT CONST packet name) 52-81 14-237 21-2237 21-2249 21-2251 21-2417 2-~ 52-89 52-85 5-68 6-161 48-4:3 5-6:3 6-146 S31-~63 15-87 25-679 25-559 c CA (TEXT CONST old, new) cat input (TEXT VAH t, esc char) CAT (TEXT VAH result, INT CONST number) CAT (TEXT VAH r1ght, TEXT CONST left) change all ( TEXT CONST old, new) change (FILE VAH f, INT CONST from, to, TEXT CONST new) change (TEXT VAH destinat10n, INT CONST from, to, TEXT CONST new) change (TEXT VAH destination, TEXT CONST old, new) change to (TEXT CONST old, new) channel --) INT channel (TASK CONST id) --) INT char pitch (INT CONST font number, TEXT CONST char) --) INT check --) BOOL check off check on check read check (TEXT CONST _ , TASK CONST from) clear error clear removed (FILE VAH f) clear (TASK CONST dest) 22-61:3 6-11:3 :3-:374 3-99 22-618 16-1946 3-167 :3-183 22-596 6-133 S30-81 S31-410 25-849 25-84~ 25-841 48-118 549-5:34 9-44 16-1687 549-678 cloci( (INT CONS~ nrl - - ) REAL clock (TASK CONST ldl REAL close (FILE VAR fi code (INT CONST code I TEXT code (TEXT CONST text I - - ) INT col (FILE CONST fi IlIT col (FILE VAR f, IN'! ::aNST new co1umnl ) col INT col (INT CONST stelle) collect gar~e blocks collect heap ga.r~e command dialogue BOOL command dialogue (BaOL CONST status I command error compress ( TEXT CONST text) --) TEXT concatenate line (FILE VAR f, BOOL CONST delete blanks) configurate CONTAINS (THESAURUS CONST thesaurus, TEXT CONST name I --) BOOL continue (INT CONST channel nol continue scan (TLXT CONST scan textl contro: (INT CONST codel, code2, code:5, INT VAR rett:rn code I copy attributes (FILE CONST source file, FILE VAR dest file) copy (DATASPACE CONST source, TEXT CONST dest name I copy (TEXT CONST source name, dest name) cosd (REAL CONST x) --) REAL cos (REAL CONST x) --) REAL cout ( INT CONST number) cover tracks cover tracks (TEXT VAR secret I create ( TEXT CONST name) C (TEXT CONST old, new) C (TEXT CONST replacement) cursor ( INT CONST x, y) cursor log1c (INT CONST dist, modus, TEXT CONST pre, mid, post) cursor 10g1c (INT CONST dist, TEXT CONST pre, mid, post) --) 4-62 S:30-87 16-98:5 3-~:5 3-49 16-1795 16-1801 22-453 22-448 54:5-202 :5-240 12-:56 12-40 27-247 3-144 16-1407 S53-220 13-231 S:30-112 18-44 6-142 16-1703 14-200 14-218 26-170 26-162 6-128 27-266 27-277 14-61 22-~8:5 22-~87 6-118 52-237 52-2~ o da taspaces I NT date (REAL CONST datum) TEXT date --) TEXT date (TEXT CONST datum) --) REAL day --) REAL day (REAL CONST datum) --) TEXT decimal exponent (REAL CONST mantissa) --) INT DECR (REAL VAR dest, REAL CONST decrement) delete char (TEXT VAR string, INT CONST delete pos) delete int (TEXT VAR result, INT CONST delete pos) delete record (FILE VAR f) delete (THESAURUS VAR thesaurus, INT CONST index) delete (THESAURUS VAR thesaurus, TEXT CONST name, INT VAR index) D ( INT CONST anz) disable stop display (TEXT CONST text) do conmand do (PROC (TEXT CONST) operate, THESAURUS CONST thesaurus) do (PROC (TEXT CONST, TASK CONST) operate, THESAURUS CONST thesaurus, TASK CONST task) do (TEXT CONST command) exportJ.erte ObJeIrte &l.pbabetisch geordnet S:30-121 11-44 11-:5:5 11-201 11-28 11-128 10--48 10-393 3-214 3-385 16-10~~ 1:5-188 13-180 22-498 9-:52 6-81 27-2:5:5 39-16:5 39-199 17-23 dOIJnety (FILE VAR f, TE.xT CaNST pattern i . dOIJnet:i (FILE VAR f, TEXT COllST pattern, INT CaNST max line) dOIJnety (TEXT CaNST muster) dOIJnety (TEXT CaNST muster, INT CaNST anz) dOIJn (FILE VAR f) dOIJn (FILE VAR f, INT CaNST n) dOIJn (FILE VAR 1', n::n CaNST pattern) dOIJn (FILE VAR f, TEXT CaNST pattern, INT CaNST max line) dOIJn ( INT CaNST anz ) dOIJn ( TEXT CONST mus ter) dOIJn (TEXT CaNST muster, INT CaNST anz) ds pages (DATASPACE CaNST ds) --) INT D (TEXT CONST muster) 16-1884 1€-1890 22-~57 22-565 16-1071 16-1085 16-1869 16-1875 22-49;3 22-51;3 22-5;30 5-51 22-525 E edit edi Uile FILE edi t (FILE VAR f) edit (FILE VAR 1', INT CaNST x, y, x size, y size.1 edit (rILE VAR 1', TEXT CaNST res, PROe :TEXT CaNST) kdo interpreter) edi tget cOJl'.mand (BOOL CaNST schalter) editget (TEXT VAR editsatz) edi tget (TEXT VAR editsatz, INT CaNST edl tlim t, ed:' tlaenge) editget (TEXT VAR editsatz, INT CaNST edit~imit, editlaenge, TEXT CONST sep, res, TEXT VAR e>:i t char) editget (TEXT VAR editsatz, INT CaNST editlirnit, TEXT VAR exit char) editget (TEXT VAR editsatz, TEXT CaNST sep, res, TEXT VAR exi1: char) ed1t info (FILE CONST r) --) INT edi t info (FILE VAR 1', INT CONST info) edi t ( INT CONST i) edi t (INT CONST i, TEXT eONST res, PROC (TEXT CaNST) kornrnando interpreter) edit (INT CONST von, bis, start, TEXT CaNST res, PROe (TEXT CONST) kornrnando interpreter) edi t (TEXT CONST filename) edi t (TEXT CaNST filename, INT CONST x, y, x size, y size) edit (THESAURUS CONST nameset) elbit cursor empty thesaurus --) THESAURUS enable step enter incode (INT CONST elan code, TEXT CONST sequenz) enter outcode (INT CONST eurnelcede, TEXT CaNST IJart) enter outcode (INT CONST eumel code, IJartezeit, TEXT CONST sequenz) enter outcode (INT CONST eurnel code, ziel code) enter paSSIJord (TEXT CONST file name, IJri te pass, read pass) enter passIJerd ( TEXT CONST paSSIJord I eof --) BOOL eo l' ( FILE CONST l' ) BOOL erase erase (TEXT CONST file name I erase (TEXT CONST file name, TASK CONST desti erase ( THESAURUS CONST nameset) erase (THESAURUS CONST nameset, TASK CONST task) e --) REAL error code INT error line --) INT error message --) TEXT errorstop (INT CONST code, TEXT CONST message) errors top ( TEXT CONST message) 22-200 21-2929 22-176 22-186 22-19;3 21-81 21-200 21-205 21-87 21-192 21-196 16-1760 16-1767 22-261 21-2665 21-2670 22-2:3:3 22-250 39-;348 52-247 13-96 9-28 52-211 52-194 52-178 52-156 14-284 14-270 22-623 16-1182 549-:306 549-314 S49-320 39-338 39-336 26-26 9-79 9-8:5 9-72 9-107 9-101 eurne: must advertise SOME exec configuration exec (PROC (TEXT VAR, INT CONST) proc, TILE VAR f, INT CONST i) exec (PROC (TEXT VAR, ~XT CONST) proc, TILE VAR f, TEXT CONST t) e>::sts (TEXT CONST na:ne) --) BOOL exists (TEXT CONST name, TASK CONST froml --) BOOL exp (REAL CONST z) --) REAL extended char pi tch (INT CO/;ST font number, TEXT CONST INT extended replacement (INT CONST font number, TEXT CONST --) TEXT esc esc S29-4 S53-447 16-1853 16-1844 14-127 S49-563 26-83 char, char) S31-430 char, char) S31-480 F false --) BOOL fetch all fetch all (TASK CONST manager) fetch (TEXT CONST file name) fetch (TEXT CONST file name, TASK CONST from) fetch (THESAURUS CONST nameset I fetch (THESAURUS CONST nameset, TASK CONST task) TILE TILLBY TILLBY TILLBY (TILE VAR file, THESAURUS CONST thesaurus) ( TEXT CONST file name, THESAURUS CONST thesaurus) (THESAURUS VAR thesaurus, TILE VAR file) fixpoint floor (REAL CONST real) --) REAL flow (INT CONST nr, INT CONST dtype) font depth (INT CONST font number) --) INT font exists (TEXT CONST font name I --) BOOL font height (INT CONST font number) --) INT font (INT CONST font number) --) TEXT font lead (INT CONST font number) --) INT font string (INT CONST font number) --) TEXT font table (TEXT CONST new font table) font table --) TEXT font (TEXT CONST font name) --) INT forget forget (DATASPACE CONST dataspace) forget (TEXT CONST name) forget ( TEXT CONST name, QUIET CONST q) forget (THESAURUS CONST name set ) format archive lINT CONST format code) format (INT CONST format code, TASK CONST dest) format (TASK CONST dest) frac ( REAL CONST value) --) REAL mANGE 7-4 39-300 39-306 S49-215 S49-221 39-276 39-282 16-150 39-254 39-267 39-237 543-208 10-62 52-68 S31-384 S31-311 S31-371 531-298 S31-358 S31-~37 531--88 S31-128 531-284 14-157 5-31 14-134 14-145 39-324 48-378 S49-722 549-740 10-369 16-152 G getcharety TEXT getchar (TEXT VAR ze1chen) get command (TEXT CONST command text) get command (TEXT CONST command text, TEXT VAR command line) get cursor (INT VAR x, y) get edltcursor lINT VAR x, y) get editllne (TEXT VAR editline, INT VAR editpos, editmarke) get (FILE VAR f, INT VAR number) exportierte ObJekte alpbabetisch geordnet 21-1208 21-1173 27-33 27-39 6-124 21-1219 21-917 16-1346 get get get get get (FILE VAR f, REAL VAR number) (FILE VAR f, TEXT VAR word) (FILE VAR f, TEXT VAR word, INT CONST max length) (rILE VAR f. TEXT VAR word, TEXT CONST separator) font (INT CONST font number, INT VAR indentation pi tch, font lead, font height. font depth, ROW 256 INT VAR pitch table) get (INT VAR number) getl1ne (FILE VAR f, ~T VAR text) getl1ne (TEXT VAR textl1ne.l get list entry (TEXT VAR entry, status text) get (REAL VAR number) get replacements (IN! CONST font number. TEXT VAR replacements, ROW 256 INT VAR replacements table) get secret line (TEXT VAR textline) get tabs (FILE CONST f, TEXT VAR tabs) GET ( TEXT CONST filename) get (TEXT VAR word) get (TEXT VAR word, IN! CONST length) get (TEXT VAR word, TEXT CONST separator) get (THESAURUS CONST thesaurus. TEXT VAR name, INT VAR index) get window (INT VAR x, y, x siZe, y siZe I groesster editor --) INT G ( TEXT CONST filename) 16-1354 16-1336 16-1312 16-1268 S31-576 23-175 16-1152 23-203 14-244 23-182 531-595 23-217 16-1746 22-367 23-130 23-189 23-152 13-281 21-2935 21-1281 22-438 H headline (FILE CONST f) --) TEXT headline (FILE VAR f, TEXT CONST head) heap size (DATASPACE ::ONST ds) --) INT heap size --) INT help (FILE VAR help f11e) help help (TEXT CONST proc name) highest entry (THESAUR;JS CONST thesaurus) hour --) REAL hour --) REAL --) INT id ( INT CONST no) --) INT 1ncharety (INT CONST t1me limit) --) TEXT 1ncharety --) TEXT inchar (TEXT VAR character) INCR (REAL VAR dest, REAL CONST increment) 1ndentat10n pitch ( IN! CONST font number) --) INT 16-1732 16-1739 5--43 3-236 540-71 540-61 25-328 13-323 11-29 11-265 4-70 6-95 6-91 INITFLAG 6-a7 10-387 S31-397 4-19 initialized (INITFLAG VAR flag) --) BOOL ini tialize random (INT CONST start) initial1zerandom (REAL CONST z) input buffer size (INT CONST nr, size) input (FILE VAR f) input --) TRANSPUTDlRECTION insert insert char (TEXT VAR string, TEXT CONST char, INT CONST insert pos) insert int (TEXT VAR result, INT CONST insert pos, number) insert record (FILE VAR f) insert (TEXT CONST file name ) insert (THESAURUS CONST nameset) 8-197 26-263 52-76 16-962 16-a51 25-765 3-224 3-379 16-1063 25-756 39-342 exportlerte ObJekte &lpbabetlsch pordnei; 4-59 insert (THESAURUS VAR thesaurus, TEXT CONST name) insert. (THESAURUS VAR thesaurus, TEXT CONST name, IN! VAR index) int (REAl CONST value) --) INT int (TEXT CONST number) --) IN! 1s edi tget --) BOOL is error --) BOO1 is first record (rILE CONST fl --) IIOOL is incharety (TEXT CONST muster) --) BOO1 is kanj i esc (TEXT CONST char I --) IIOOL is niltask (TASK CONST t) --) IIOOL ISUB (TEXT CONST text, IN! CONST index) --) IN! 13-170 13-111 10-399 8-38 21-913 9-40 16-1174 21-1194 21-947 5:30-63 3-57 K ke kommando auf taste kommando auf taste legen (TEXT CONST taste, kommando) I TEXT CONST taste) --) TEXT 4-74 20-71 20-79 L last conversion ok --) BOOL lan parant - -) TEXT las t param ( TEXT CONST nell ) len (FILE CONST f) --) INT LENGTH ( TEXT CONST text) IN! length (TEXT CONST text) --) IN! len INT lernsequeru: auf taste legen (TEXT CONST· taste, lernsequenz) lernsequenz auf taste (TEXT CONST taste: --) TEXT 1EXEQUAL (TEXT CONST :eft, right I --) BOOL 1EXGREATEREQUAL (TEXT CONST left, right) --) Il001 LEXGREATER (TEXT CONST left, right I --) BOOL lex sort (TEXT CONST da te1name) lex sort (TEXT CONST dateiname, INT CONST sortieranfang) LIKE (TEXT CONST t, pattern) --) IIOOL LIKE (THESAURUS CONST thesaurus, TEXT CONST pattern) --) THESAURUS limit --) IN! limit ( IN! CONST limit) line line (rILE VAR f) 11ne (rILE VAR f, IN! CONST lines) line (IN! CONST t1mes) line no ( rILE CONST f) --) IN! line no --) IN! lines (rILE CONST f) --) IN! lines --) IN! line type (rILE CONST f) IN! line type (rILE VAR f, IN! CONST t) link (IN'! CONST nr, TEXT CONST dtype) link (THESAURUS CONST thesaurus, TEXT CONST name) --) IN! list list (rILE VAR f) list (FILE VAR list file, TASK CONST from) list fonts l1st fonts (TEXT CONST l1&1li8) list font tables list (TASK CONST from) In (REAL CONST x) --) REAL 8-170 12-101 12-114 16-1930 3-124 3-120 22-443 20-27 20-63 3-262 3-276 3-269 16-202:1 16-2029 15-193 39-142 22-463 22-458 23-94 16-1119 16-114:1 23-103 16-1197 22-473 16-1774 22-468 16-1219 16-1264 52-142 13-267 24-10 24-22 549-588 531-176 S31-164 S31-13!l 549-576 26-28 log10 (REAL CONST x) --) REAL log2 (REAL CONST z) --) REAL 10llest reset (IN! CONST bits) --) IN! lo .... est set (INT CONST bits) --) INT 25-32 26-36 2-65 2-53 M margin INT margin (INT CONST i) mark --) BOOL mark (BOOL CONST mark on) mark col (TILE CONST f) --) IN! mark (FILE CONST f) --) BOOL mark (FILE VAR f, INT CONST line no, col) mark line no (TILE CONST f) --) INT mark refresh line mode --) BOOL mark refresh line mode (BOOL CONST b) marksize INT marksize (INT CONST i) ma tchend (INT CONST >:) INT match (INT CONST >:1 --) TEXT rnatchpos (INT CONST >:) --) IN! max (INT CONST first., second) --) INT rnaxint --) INT max line length (TILE CONST f) --) INT max line length (TILE VAR f, INT CONST nell limit) max ( REAL CaNST a , b ) REAL max real REAL max text length INT min (IN! CaNST first, second) --) INT minint INT min (REAL CONST a, b) --) REAL minute --) REAL modify (FILE VAR f) modify TRANSPUTDIRECTION MOD ( IN! CaNST left, right) --) INT MOD (REAL CaNST left, right) REAL monitor (PROC ini t system) monitor month (REAL CONST datum) --) TEXT myself --) TASK 21-2630 21-2632 22-628 22-633 16-1982 16-1956 16-1962 16-1973 19-24 19-28 19-13 19-19 15-97 15-91 15-95 8-160 8-9 16-1716 16-1723 10-375 10-40 3-35 8-154 8-7 10-381 11-30 15-976 16-861 8-95 10-359 S43-40 S43-34 11-139 530-44 N name ne.... nell nell next next (TIlESAURUS CONST thesaurus, INT CONST index) --) TEXT configuration (TEXT CONST name) --) DATASPACE type (TEXT CONST d type ) ds page (DATASPACE CaNST ds, INT CONST page nr) --) INT larger font exists (IN! CONST font number, IN! VAR next oooL next srnaller next symbol next symbol next symbol next symbol nichts neu font exists (INT CONST font number, INT BOOL (TILE VAR f, TEXT VAR symbol) (FILE VAR f, TEXT VAR symbol, INT VAR type) (TEXT VAR symbol) (TEXT VAR symbol, INT VAR type) VAR elCp)rtlerte ObJeltte &lpbabetlsch geordnet next 13-274 52-39 14-86 52-105 5-59 larger font) S31-318 smaller font) S31-338 18-303 18-312 18-52 18-59 21-2217 nilspace DATASPACE no do again note edi t note edit (TILE VAR contex"tl no te file FILE no"te ( IN! COrlST numl:er I note line no"te (TEXT CaNST text I no (TEXT CaNST question I --) BOOL notion (TEXT CaNST t, INT CaNST r I notion (TEXT CaNST tJ --) TEXT 5-27 17-44 22-7~1 22-701 22-695 22-677 22-68~ TEXT 22-671 12-81 15-765 15-78 o off string (INT CaNST modification I --) TEXT old (TEXT CaNST name I --) DATASPACE old (TEXT CaNST name, INT CaNST expected type I --) JATASPACE online BOOL on string i.INT CaNST modlfication) --) TEXT open editor (FILE CaNST nell file, BOOL CaNST access' open editor (INT CONST editor nr, FILE CaNST nell file, BOOL CONST access, INT CONST x start, y, x len start, y len) open editor (INT CaNST i I OR (INT CaNST left, right) --) IN! OR (TEXT CaNST a, bJ --) TEXT output (FILE VAR fl output --) TRANSPUTDIRE(;I'ION outsubtext I TEXT CaNST source, IN! CaNST from) outsubtext (TE-XT CaNST source, IN! CaNST from, to) out ( TEXT CONST text) out text (TEXT CaNST source, IN! CaNST from, to) S~1-270 14-96 14-110 6-137 531-256 21-2753 21-2792 21-2881 2-27 15-54 16-969 16-856 6-39 6-43 6-35 6-47 p packets page param position lINT CONST xl pattern found BOOL pause pause ( INT CaNST time limit) pcb (INT CONST fieldl INT pcb (TASK CONST id, INT CaNST fieldl --) INT pi REAL pas (FILE CaNST f, TEXT CaNST pattern, INT CONST iJ --) INT pos (TEXT CaNST source, lOll, high, IN! CaNST from) --) IN! pas (TEXT CONST source, pattern I --) INT pas (TEXT CaNST source, pattern, IN! CaNST from) INT pos (TEXT CONST source, pattern, IN! CONST from, to) --) INT prefix (TEXT CONST pattern) --) TEXT prot --) BOOL pro"t off prot (TEXT CaNST file name) P ( TEXT CaNST filename) push ( TEXT CONST ausfuehrkommando) put edi tline (TEXT CaNST edi tline, IN! CaNST editpos, edi tmarke) put error puc (FILE V/>Jl f, IN! CaNST value) put (FILE V/>Jl f, REAL CaNST real) exp>rtierte Objekte &lpbabetiach seordnet 25-701 23-112 12-95 16-674 6-105 6-100 4-26 530-69 26-25 16-1861 ~-140 3-128 3-132 ~-136 16-M6 25-8~7 25-8~2 25-826 22-362 21-991 21-925 9-116 16-1236 16-1243 put I. rILE VAR f, TEXT CONST IIOrd) put (INT CONST number) putl1ne (rILE VAR f, TEXT CONST IIOrd) putUne (TEXT CONST text:;'ine) put (REAl CONST number) put tabs (rILE VAR f, TEXT CONST tabs) PUT ( TEXT CONST filename) put (TEXT CONST lIord) 16-1217 23-73 16-1045 23-85 23-79 16-1753 22-293 23-64 Q QUIET quiet quit quit --) QUIET last 12-29 12-31 21-2153 21-2144 R random (INT CONST lOl/er bound, upper bound) INT random - -) REAL read block (DATASPACE VAR ds, INT CONST ds page no, HIT CONST block no, INT VAR return code) read (DATASPACE VAR ds) read (DATASPACE VAR ds, INT CONST max pae;es, BOOL CONST error accept) read paSSIiOrd TEXT read permission (TEXT CONST name, supply paSSIiOrd) --) BOOl read record (rILE CONST f, TEXT VAR record) real (INT CONST value) --) REAL rea 1 ( TEXT CONST text) REAl reinsert (FILE VAR f) release (TASK CONST t) remai nder THESAURUS removed Unes (rILE CONST f) --) INT remove (FILE VAR f, INT CONST size) rename ( TEXT CONST 0 ld name , nell name ) rename (THESAURUS VAR thesaurus, INT CONST index, TEXT CONST nell) rename (THESAURUS VAR thesaurus, TEXT CONST old, nell) replacement (INT CONST font number, TEXT CONST char) --) TEXT replace (TEXT VAR dest, INT CONST pos, TEXT CONST source) replace (TEXT VAR text, INT CONST index, REAl CONST code) replace (TEXT VAR text, INT CONST index, value) reset bit (INT VAR bits, INT CONST bit no) reset (FILE VAR f) reset (FILE VAR f, TRANSPUTDIRECTION CONST mode) reset range (rILE VAR f) rellind rotate (INT VAR bits, INT CONST number of bits) round (REAL CONST real, INT CONST digits) --) REAL RSUB (TEXT CONST text, INT CONST index) --) REAL rubin mode --) BOOL rubin mode (INT CONST editor nr) --) BOOL run run again run (TEXT CONST file name) 8-208 26-259 48-268 48-70 48-74 14-263 14-312 16-1111 10-424 10-243 16-1695 549-81 39-157 16-1781 16-1679 14-224 13-248 13-242 531-452 3-74 3-69 3-61 2-47 16-926 16-93:1 16-1668 48-51 2-19 10-66 3-85 21-2853 21-2855 25-744 25-748 25-735 s satznr neu satznr zeigen save all save all (TASK CONST manager) save sa'ie system save (TEXT CONST tile name) save (TEXT CONST tile name, TASK CONST to) save (THESAURUS CONST name set ) save (THESAURUS CONST nameset, TASK CONST task) say ( TEXT CONST me s sage) scan I FILE VAR 1') scan (TEXT CONST scan text) search dataspace (INT VAR ds pages) second --) REAL seek (INT CONST block) segments (TILE CONST f) --) INT sequential file (TRANSPUTDIRECTION CONST mode, DATASPACE CONST ds) --) TILE sequential file (TRANSPUTDIRECTION CONST mode, TEXT CONST name) --) TILE session --) INT set bit (INT VAR bits, INT CONST bit no) set buSl' indicator set clock (REAL CONST time) set conversion (BOOL CONST success) set date set exp (INT CONST exponent, REAL VAR number) set line nr (INT CONST value) set marked range (TILE VAR r, mANGE VAR old range) set range (FILE VAR f, FRANGE VAR nell range) set range (TILE VAR t, INT CONST start line, start col, mANGE VAR old range) setup shOll shOll (FILE VAR t) shOll ( TEXT CONST filename) shutup SIGN (INT CONST argument) --) INT sign (INT CONST argument) --) IN! sign (REAL CONST value) --) INT SIGN (REAL CONST value) --) IN! sind (REAL CONST x) --) REAL sin (REAL CONST x) --) REAL size ( IN! CONST key) --) IN! skip da tasp&ce small real --) REAL sometix (TEXT CONST pattern) --) TEXT SOME (TASK CONST task) --) THESAURUS SOME (TEXT CONST file name) --) THESAURUS SOME (THESAURUS CONST thesaurus) --) THESAURUS sort (TEXT CONST date1name) sort (TEXT CONST dateiname, IN! CONST sortierantang) spli t line (FILE VAR f, INT CONST split col) split line (rILE VAR f, IN! CONST split col, BOOL CONST note indentation) sqrt (REAL CONST z) --) REAL status (INT CONST pos, TEXT CONST status pattern) status (TASK CONST id) --) INT status (TEXT CONST name, status text) status (TEXT CONST name) --) TEXT 21-2219 21-2270 39-312 39-318 S49-411 S43-192 S49-417 S49-423 39-288 39-294 12-87 18-296 18-36 48-333 11-31 48-47 16-1788 16-869 16-885 4-22 2-41 21-~ S43-235 8-174 S43-121 10-02 4-34 16-1993 16-1620 16-1~oe ~3-403 22-283 22-266 22-273 S43-1B2 8-11e 8-1el le-344 10-353 26-154 26-146 48-321 48-59 10-42 15-123 39-1:58 39-136 39-1a~ 16-2816 16-2828 16-1365 16-1371 26-64 14-187 S:5El-7~ 14-166 14-176 std kommando interpreter (TEXT ~ONST taste) std tastenbelegung std --) TEXT stop storage (DATASPACE CONST ds) INT storage info s:o,-age (INT VAR Slze, used) storage (TASK CaNST id) INT stranalyze (ROW 256 INT CONST table, INT VAR sum, INT CONST max sum, TEXT CONST str1ng, INT VAR index, INT CaNST to, INT VAR exit code) SUB (TEXT CaNST text, INT CaNST pos) --) TEXT subtext (FILE CaNST f, INT CaNST from, to) --) TEXT subtext (TEXT CONST source, IN! CONST from) --) TEXT subtext (TEXT CONST source, INT CONST from, to) --) TEXT sysin TEXT sysin (TEXT CONST file name) sysout --) TEXT sysout (TEXT CONST file name) 22-58 20-92 12-118 9-135 5-47 S40-45 4-66 S:30-93 3-244 3-37 16-1938 3-45 3-41 23-59 23-48 23-44 23-33 T tand (REAL CONST x) --) REAL tan (REAL CaNST xl --) REAL TASK task taste te: = < < ill I a 1/4 Zeile 230 E :. AN **** 1. 8 EUMEL 10.11. 86 a a .*********************** IPACKET a 231 232 233 out ...................... IPROe out (TEXT CONST tJ 2:34 I EXTERNAL 60 I ENDPROG out 235 I 236 237 outtext .................. IPROG OU"I; text (TEXT CONST t, INT CONST typ) INTE:.:;,;:' 257 ; IT typ = typ 238 2:39 THEN out (t) rr 240 241 242 243 244 245 i ENDPROe out text I outline .................. I PROC o.t line (INT eONST typ) I THEIl out (""13"·10·") 246 247 248 249 250 251 ~2 ~3 254 255 256 257 258 259 260 261 262 1/l) INTERNAL 258 ; I IF typ • typ I FI IENDPROC out line I I ENDPACKET a I I I I I I I I I I I I & 1/5 Zelle ..... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 + + 18 19 28 21 22 E LAN EIlMEL 1.8 18.11.86 - bits 1 bi ts _ ..............- 1 PACKET bits DEFINES 1 1 AND, 1 OR, 1 XOR, 1 bit, 1 lowest reset , 1 lowest set , 1 reset bit, 1 rotate, 1 set bit : 1 1LET bi ts per int • 16 1 IROW bits per int INT YAR bit mask := ROW bits per int INT: 1 1 (1,2,4,8,16,32,64 ,128,256,512,1824 ,2E148 ,4096 ,8192,16384 ,-32'l 67-1) ; 1 1 rotate ................... IPROC rotate (INT YAR bits, INT CONST number of bits) 1 EXTERNAL 83 IENDPROC rotate 1 23 24 25 26 AND .••...••••.••.••..•.•• 1INT OP AND (INT CONST left, right) 27 28 29 38 OR ....................... 1INT OP OR (INT CONST lett, right) 1 ~~AL 125 1ENlXlP OR 31 32 33 34 XOR ...................... 1INT OP XOR (INT CONST left, right) 1 ~~AL 121 1ENlXlP XOR 35 bit ...................... IBOOL PROC bit (INT CONST bits, bit no) 36 1 ~~ALl24 1ENlXlP AND 1 1 1 1 1 37 38 39 (bits AND bit mask (bit no+l» () 0 1 1ENDPROC bit 48 1 41 42 43 44 45 46 2/1 setbi t ................... 1PROC set bit (INT YAR bits, INT CONST bit no) 1 1 bits:= bits OR bit mask (bit no+1) 1 IENDPROC set bit 1 bits 2/1 Zelle 47 E LAN EUMEL 1.8..... ~ 51 !i2 I 49 !i3 !j4 !i5 56 57 58 59 68 61 62 63 64 65 66 67 68 69 78 71 72 73 74 75 76 77 2/2 bits resetbit ................. IPIIOC reset bit (INT VAR bits,INT CONST bit no) : I I I 48 18.11.86 bi ts :. bits XOR (bits AND bit m&sk (bit no+1» I ENDPIIOC reset bit lowestset ................ lINT PIIOC lowest set (INT CONST bits) I I I I I I I I I INT VAR III&sk index ; FOR m&sk index FROM 1 UP1'O 16 REP IF (bits AND bit mask (m&sk index» () 8 'l'Hni LEAVE lowest set WITH m&Sk index - 1 FI pm; -1 I ENDPIIOC lowest set I lowestroset .............. lINT PIIOC lowest reset (INT CONST bits) : I I I I I I I I INT VAR III&sk index ; FOR m&sk index FROM 1 UPl'O bits per int REP IF (bits AND bit III&sk (m&sk index» • 8 THEN LEAVE lowest reset WITH III&Sk index - 1 FI PER; -1 I I ENDPIIOC lowest reset I IENDPACKET bits ; bits 2/2 Zeile 1 2 3 E LAN EUMEl 1.8 **** 10.11.86 text 1(* ------------------- VERSIOtl 3 06.03.86 ------------------- *) text ****************---IPACKET text DEFINES I 4 ma;.: text length • 5 SUB • 6 subtext . text, length • LENGTH 7 8 CAT 9 10 11 12 13 + • replace change • change all • compress pos . code 1~ 15 16 17 ISUB • RSUB • 18 19 delete char insert char delete int insert lnt heap size . collect heap garbage stranalyze 20 21 22 23 24 25 26 27 28 LEXEQUAL • LEXGREATER LEXGREATEREQUAL 29 30 31 32 33 3.. 35 36 37 38 39 40 41 42 43 44 I TEXT VAR text buffer • tail buffer I lINT CONST max text length : = 32000 I SUB ...................... !TEXT OP SUB (TEXT CONST text, INT CONST pos ) I EXTERNAL 48 IEND OP SUB I subtext .................. ITEXT ?ROC subuxt (TEXT CONST source. IlIT CONST from. to I: I EXTERNAL 49 I ENDPROC subtext I 45 46 47 48 subtext .................. ITEXT FROC subtext (TEXT CONST source. INT CONST from ) I EXTERNAL ~0 IENDPROC subtext 49 50 51 52 code ..................... lINT PROC code (TEXT CONST text) I EXTERNAL 46 lEND PROC code 3/1 I I text 3/1 Zelle 53 E LAN EUMEL 1. 8 10.11. 86 **** text code ..................... ITEXT PROC code (INT CONS':' code) ~4 I EXTERNAL 47 I ENDPROC code 55 55 I 57 58 59 50 ISUB ••••..•.••...••.••..• I IlIT OP ISUB (TEXT CONST text, INT CONST index) I EXTERNAL 44 I ENDOP ISUB 61 52 63 54 replace .................. IPROC replace (TEXT VAR text, INT CONST index, value) 65 66 67 58 RSUB ••••.•.•••.••...••.•• I REAL OP RSUB I TEXT CONST text, INT CONST index) I EXTERNAL 100 I ENDOP RSUB 69 70 71 replace .................. IPROC replace ITEXT VAR text, :NT CONST index, REAL CONST code) I I EXTERNAL 45 I ENDPROC replace I I I EXTERNAL 101 I ENDPROC replace I I 72 73 74 75 76 replace .................. I PROC replace (TEXT VAR dest. INT CONST pes, TEXT CONST source) I EXTERNAL 51 I EIIDPROC replace I 77 78 79 text •.................... I TEXT PROC text (TEXT CONST source. INT CONST length) I I I I 80 81 82 83 84 85 85 87 88 mi tblanksauffuellen IT length < LENGTH source THEN text buffer := subtext (source,i.length) ELSE text buffer : = source mit blanks auffuellen I I rr I text buffer . I I Imi t blanks auffuellen I INT VAR i ; !'ROM 1 UPTO length - LENGTH source REP text buffer CAT " " PER. 89 I !'OR i 90 91 92 I I I 93 IENDPROC text 94 I 95 96 97 text .•.••.•...•••••.....• I TEXT PROC text (TEX':' CONST source, INT CONST length. from) I text ( subtext (source, from) • length ) IENDPROC text I 98 3/2 -"'.J.":. text 3/2 Zeile E LAN EUME1 1.8 **** text 10.11.86 99 100 101 102 CAT .••••.•••••••••••••••• IOF CAT (TEXT VAR right, !EXT CaNST left) I EXTERNAL ~2 I ENDOP ::AT 103 111)4 105 106 107 108 + •••••••.•••••••••.•••••• 1rEXT 109 110 111 112 113 114 115 116 117 118 119 * ........................ ITEXT OP * 120 121 122 123 length ................... IIN! FROC length (TEXT CONST text I EXTERNAL 03 IENDFROC length 124 125 126 127 LENGTH •••••••••••..•••••• IIN! OP LENGTH (TEXT CONST text I EXTERNAL 53 IENDOP LENGTH 128 129 130 131 pos ...................... 1IN! PROC pos I EXTERNAL 54 IENDPROC pos 132 133 134 135 pos ...................... IIN! PROC pos (TEXT CONST source, pattern, IN! CONST from) I EXTERNAL 05 IENDPROC pos 136 137 138 139 pos ..•................... 1 IN! PROC pos (TEXT CaNST source, pattern, IN! CONST from, to) 140 pos ...................... I IN! PROC pos (TEXT CONST source, low, bigh, IN! CONST from) I OP + (TEXT CONST left, right) text buffer : = left ; I text buffer CAT right I te>:t buffer IENDOP + I I (INT CONST times, TEXT CONST source ) I I I text buffer :. •• ; IN! VAR i ; TOR i FROM 1 UPTO times REP text buffer CAT source I I I PER; I text buffer I IENDOP * I I I source, pattern) I I I EXTERNAL 56 IENDPROC pos I 141 I 142 143 IENDPROC pos 3/3 I TEXT CONST EXTERNAL 58 I text ZeCe 144 E LAN 1. ~ EUMEl **"* :0.11. 86 text compress ................. ITEXT FROC compress (TEXT CeNST text) 145 146 I 147 148 149 150 151 152 I I INT VAR begin, end ; search first non blank search last non blank ; text buffer . - subtext (tex", begin, end I text buffer . I 1~3 searchfirstnonblank Isearch first non blank ; I begin;. 1 I ·.~'EI1E (text SUB begin I • " " REP I begin INCR 1 154 156 PER . 157 158 159 160 searchlastnonblank 161 162 I PER. I 163 164 165 166 167 IENDPRO: compress I change ................... IPROC change (TEXT VAR destination, INT COtlST from, to, TEXT CONST I newl: :68 I I I IT LENGTH new = to - frorr. ... 1 AlID to <. LENGTH destination THEN replace (destination, from, new) I ELSE change via buffer I 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 lsearch last non blank: I end; = LENGTH text ; I WHILE (text SUB endl • " " REP I end DECR 1 changeviabuffer I TI . I I Ichange I I I I I via bu!'!~,. ; text buffer :. subtext (destination, 1, from-l1 text buffer CAT new ; tail buffer ;. subtext (destination, to ... 1 I ; text buffer CAT tail buffer destination;. text buffer I IENDPROC change I change ••......•.••..•.... PROC change (TEXT VAR destination, TEXT CONST old, newl 185 186 187 INT CONST position ;= pos (destination, old) ; IT position ) 0 THEN change (destination, pOSition, position ... LENGTH old -1, newl 188 rr 189 190 IENDPROC change 191 I 192 193 194 3/4 changeal::. ................ IPROC change a:l (TEXT 'JAR destination, TEXT CONST old, new I I lINT VAR position; = pos 'destination, old) ; text 3/4 E LAN EUMEL 1.8........ 10.11.86 text IT LENGTH o:d • LENGTH new THDI change by replace 195 196 ELSE change by change rI. 197 198 199 I 200 201 202 203 204 205 changebyreplace Ichange by rep:ace : I WHILE position) 0 REP I replace (destination, position, new) ; I position:. pos (destination, old, position + LENGTH new) I PER. 1 1 206 207 208 209 210 211 212 213 214 215 216 217 218 219 ~ 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 change by change 1 I I I change by change : WHILE posi tion ) 0 REP change (destination, position, position + LENGTH old - 1 , new) pos:tion:. pos (destination, old, position + LENGTH new) PER. 1 1 ENDPROC change all 1 I deletechar ............... IPROC delete char (TEXT VAR string, INT CONST delete pes) 1 I 1 1 I I I 1 Ir delete pos ) 0 THEN tail butter :. subtext (string, delete pes + 11 string :. subtext (string, 1, de lete pos - 1) ; string CAT tail butter IT END PROC delete char 1 insertchar •.•............ IPROC insert char (TEXT VAR string, TEXT CONST char, 1 INT CONS! insert pesl : i I I Ir insert pos ) 0 AND insert pes (. LENGTH string 1 str:ng :. subtext (string, 1, insert pes - 1) ; string CAT char ; strir.g CAT tail butter 1 1 I rI 1 I 1 END PROC insert char 1 236 237 238 239 heapsize ................. lINT PROC heap size : 1 EXTERNAL 93 1ENDPROC heap siZe 240 241 242 243 collectheape;arbage ....... 1PROC collect heap garbage : 1 EXTERNAL 94 1ENDPROC collect heap garbage 3/5 + THEN tail butter := subtext (string, insert pesl ; I I text 3/5 Zeile 244 245 246 247 248 249 25e 251 252 253 254 255 256 257 258 E LAN EUMEL 1.8 *-* 10.11.86 text strana1yze ............... IPROC strana1yze (ROI\' 256 INT CONST table, INT VAR sum, INT CONST IIl8f I sum, I TEXT CONST string, INT VAR index, INT CONST to, I INT VAR exit code) : I EXTERNAL 57 IENDPROC strana1yze ; I !(***.********.....**********................*******••*****....******) I (* 1exikographische Verg1eiche *) 1(* Nach DIN 5007, Absclmitt 1 und Abschnitt 3.2 (Bindestrichl *) 1(* Autor: Rainer Hahn, Jochen Liedtke *) 1(* Stand: 1.?4 (Jan. 1985) *1 I (...... MM.MM . . . . . . . . . . . . . . .***•••••************************......... ) ILET first umlaut _ ""214"" , I umlauts • ""214""215"n216""21?""218""219""251"" ; I ~9 I 260 261 ITEXT VAR left letter, right letter; I 262 263 264 265 265 267 268 LEXEQUAL ................. 1000L OP LEXEQUAL (TEXT CONST left, right) I I compare (left, right) ; I left letter. right letter 269 270 271 272 LEXGREATER ..........•.... 1000L OP LEXGREATER (TI:~T CONST left, right) I I compare (left, right) ; I left letter ) right letter I 1ENDOP LEXEQUAL 1 I n3 274 IENDOP LEXGREATER n5 I 276 277 278 279 LEXGREATEREQUAL .....••... 1000L OP LEXGREATEREQUAL (TEXT CONST left, right 1 I 1 compare Cleft, right) ; 1 left letter )- right letter 280 I 281 282 IENDOP LEXGREATEREQUAL I 283 compare ••••••....••••.•.• IPROC compare (TEXT CONST left, right) Z84 I 285 286 287 I I I I I 288 289 290 291 292 293 294 29:1 3/6 tobeglnoflexrelevantte to begin of lex relevant text ; REP get left letter ; get right letter UNTIL NOT letter match OR both ended PER I I Ito begin of lex relevant text : I INT VAR I left pes :. pes (left, ""65"",""254"", 11 1 right pas :. pos (right,""65"",""254"", 11 I IF left pes • e text 3/6 Zeile E LAN 296 297 298 299 300 301 EUME~ 1.8 I **** text THEN loft pos :. LENGTH left ~ 1 THEN right pos :. LENGTH right + I rI; I IF right I 10.11.86 pos • 0 1 I rI. I I 302 303 304 305 gotleftlettor 306 307 308 309 getright1etter 310 1ettermatch Iget left letter : I left letter :. left SUB left pos I left pos INCR 1 . I I 311 312 313 314 315 316 Iget right letter : I right letter :. right SUB right pos I right pos INCR 1 I I I letter match I IF left letter = right letter I THEN TRUE I ELSE dine (left, left letter, lett pas) ; I dine (right, right letter, right pos) I IT exactly one letter is double letter I THEN expand other :etter 317 318 I TI ; I lett letter 319 I rI. I I 320 = right letter 321 322 323 eY.&ct1yone1etterisdoub Iexactly one letter is double :etter : I LENGTH left letter () LENGTH right letter. 324 325 326 327 328 expandother1etter I I 329 330 331 332 333 334 335 336 337 338 339 I I bcthended IENDPROC compare I dine ..................... IPROC dine (TEXT CONST string. TEXT VAR char, INT VAR string pos) I I skip non letter chars ; I I I I I I I 341 342 343 344 348 3/7 Iboth ended : left letter • "" I Me 345 346 347 Iexpand other letter : I IT LENGTH left letter = 1 I THEN left letter CAT (left SUB lett pas) I left pas INCR 1 I ELSE right letter CAT (right SUB right pos) I right pos INCR 1 I Fl. sklpnon1otterchars IF is capital letter THEN translate to small letter ELIT char >. first umlaut THEN translate umlaut rI. Iskip non letter chars I WHILE NOT (is letter OR end of string) REP I char:. string SUB string pos I string pos INCR 1 text 3/7 Zeile E L A II EUMEL 1.8 ..... 10.11.86 text PER . 349 350 351 352 353 translatetos~~llletter 354 355 356 357 358 359 360 361 transla ~eumlaut 362 363 364 365 iscapi ~lletter 366 367 368 369 isletter 370 371 372 373 endofstring !translate to small letter: char :. code <. code (char) translate umlaut : SELECT pos (umlauts, CASE 1,4 char: = CASE 2,5 char:= CASE 3,6 char:. I CASE 7 char .I ENDSELECT. chari "ae" "oe" "ue" "ss" + 32) . or I I 11S c&Pi~l I I letter: lIlT VAR char code .' code (char J 65 (= char code AND char code (= 90 I I Iis lette::- : I char code .' code (char I OR 32 I (97 (. char code AND char code (. 1221 OR char code ) = 128 . I I lend of string: char. "" . I IENDPROC dine I 374 375 376 377 378 CAT ..•...........•....... IOP CAT (TEXT VAR result, IIlT CONST number) : I result CAT" "; I replace ( result, LENGTH result DIV 2, number); lEND OP CAT; 379 380 381 382 383 384 insertint ...•...•........ IPROC insert int (TEXT VAR result, lIlT CONST insert pos, number) I lIlT VAR pos : = insert pos • 2 - 1; I change (result, pos, pos - 1," "); I replace (result, insert pos, number); IEND PROC insert int; 385 386 387 388 389 390 del.teint ................ IPROC delete int (TEXT VAR result, lIlT CONST delete pos) I INT VAR pos : = delete pos • 2; I change (result, pos - 1, pos, ""I lEND PROC delete int; 3/8 I I I IENDPACKET text ; text 3/8 Ze1le 1 2 3 - ELA N EtlMEL 1.8 - - 10.11.86 -** pcb and ini t control I pcb&ndinitcontrol *---IPACKET pcb and init control DEFINES I 4 5 6 7 I I I I sesslon, pcb, set line nr , clock, INITFLAG, I I lnl tlalized , stor&«e, id, ke: (* Autor: J.Liedtke .) (. Stand: 2!i.eB.B4 *) I I .", 8 9 10 11 12 13 I I I I 14 15 ILET line number t1eld I myself id field 16 17 18 = 1 • 9 I 19 ITYPE INITFLAG • INT 20 21 I I 22 23 24 25 session .................. lINT PROC session : I EXTERNAL 126 IENDPROC session 26 pcb ...................... lINT PROC pcb (INT CONST fleld) I 27 I 2B IENDPROC pcb 29 I EXTERNAL B0 30 31 32 33 writepcb ................. IPROC write pcb (INT CONST task nr, fleld, value) I EXTERNAL 105 IENDPROC write pcb 34 setlinenr ................ IPROC set line nr (INT CONST value) I write pcb (pcb (myself id t1eld), line number field, value) IENDPROC set line nr 35 36 37 I I I 3B 39 48 .•.•..................... IOP .' (INITFLAG VAR fl&«, BOOL CONST fl&«true) I 41 42 43 44 45 46 47 4B 49 4/1 I I I I I I myselfno IF fl&«true THEN CONCR (fl&«) : = myse If no EI.'lE CONCR (fl&«) :. 8 FI. Imyself no pcb (myself id field) AND 255 • I IENDOP :. ; I pcb and ini t control 4/1 E LAN Zeile 50 1.8 *-* 10.11.86 52 53 54 55 56 57 myselfno I I IF CONeR (n~) = myself no I THEN TRUE I ELSE CONCR (fl~) := myself no I FALSE I Fl. I I Imyself no pcb (myself 1d field) I AND 255 . IENDPROC in1 t1alized I 51 62 63 64 65 clock .................... IREAL PROC clock (INT CONST nr) I EXTERNAL 102 IENDPROC clock 66 67 68 69 sto~e 70 71 72 73 1d ....................... I INT PROC 1d (INT CONST no) I EXTERNAL 129 IENDPROC id 74 75 76 ke ....................... IPROC ke I EXTERNAL 5 IENDPROC ke ; I .......•.......... IPROC stor~e (INT VAR size, used) I EXTERNAL 89 IENDPROC stor~e I I 77 I 78 IENDPACKET pcb and init control '12 pcb and init control initialized .............. IBOOL PROC 1nit1alized (INITFLAG VAR flag) 51 58 59 60 EUMEL pcb and ini t control 4/2 Zolle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 E LAN EUMEL 1.8 •••• 10.11.86 ciataspace 1(. ------------------- VERSION 3 cia tasp&Ce ....* ..... _ .... 1PACKET c1&taspace DEFINES I I I I I I I 22.04.86 ------------------- nilspace • forget. type • heap size, stor&«e • I cis pages • next cis page • I blockout • I blockin • I I ALIGN: I I ILET myself ici fielci = 9 • I lowest cis number = 4 • I highest cis number = 255 I ITYPE ALIGN = ROW 252 INT I .- ..........••..••.••••.. IOP := (DATASPACE VAR ciest. DATASPACE CONST source) I EXTERNAL 70 IENDOP : = ; I 27 28 29 30 nilsp&Ce ..•••••.••..••••• IDATASPACE PROC nllspace I EXTmIIAL 69 I ENDPROC nilsp&Ce 31 32 33 forget •••.•.••••••....••. I PROC forget (DATASPACE CONST c1&tasp&Ce I EXTERNAL?1 I ENDPROC forget M 35 36 37 38 I I type .•.......•••••.•••••• I PROC type (DATASPACE CONST cis. INT CONST type) I EXTmIIAL 72 I ENDPROC type I 39 40 41 42 type ..................... I INT PROC type (DATASPACE CONST cis) I EXTERNAL 73 IENDPROC type 43 44 45 46 heapsize •••.•••..•••..•.• lINT PROC heap size (DATASPACE CONST cis) I EXTERNAL 74 IENDPROC hea.p size 5/1 I I ciatasp&Ce 5/1 Zelle 47 46 49 ~ :11 52 53 54 E LAN EUMEL 1.6.... 19.11.66 dataspace storage .................. 1INT PIIOC storage (DATASPACE CONST ds) 1 (ds pages (ds) + 1) DIV 2 1ENDPIIOC storage 1 dspages .................. 1INT PROC ds pages (DATASPACE CONST ds) 1 pages (ds, pcb (myself ld field)) 1ENDPIIOC ds pages 1 55 56 57 56 pages •••.....•••••..•••.. IINT PROC pages (DATASPACE CONST ds, INT CONST task nr) 1 EXTERNAL 66 IENDPROC pages 59 nextdspage ••••••........• 1INT PIIOC next ds page (DATASPACE CONST ds, INT CONST page nr) 1 EXTERNAL 67 1ENDPROC next ds page 69 61 62 1 1 63 64 65 66 67 blockout ......••......... IPROC blockout (DATASPACE CONST ds, INT CONST page nr, codel, code2, 1 INT VAH return code) 1 EXTERNAL 85 IENDPROC blockout 66 blockln ....•••••.....•••• IPROC blockln (DATASPACE VAH ds, INT CONST page nr, codet, code2, 1 INT VAH return code) 1 EXTERNAL 66 1ENDPIIOC blockln ; 69 79 71 72 73 5/2 1 1 IENDPACKET dat&space dat&space 5/2 Zeile 1 2 3 4 5 6 7 8 9 10 11 12 E LAN 1. 8 EUMEL --. basic tr&nsput 19.11.86 I b&sictransput ............ 1PACKET basic transput DEFIIIDl I out , I outsubtext , outtext , TlMESOUT , cout t displ&y , inch&r , inch&rety , C&t input, plLuse , 13 cursor , 14 get cursor, ch&nnel , online, control, blockout , blockin ; 15 16 17 18 19 2e 21 22 23 24 25 + 26 27 28 29 39 31 32 33 34 35 36 ILET ch&nnel field • 4 , I bl&nk times 64 • I I I " ., ILET BLOCKIO = STRUCT (ALIGN p&ge &lign, ROW 256 INT butter) , I butter p&ge • 2 I IBOUND BLOCKIO VAH block io ; IDATASPACE VAH block io ds ; IINITFLAG VAH this packet ;. FALSE I I out ...................... IPROC out (TEXT CONST text I EXTDlNAL 69 37 IENDPROC out 38 I 39 49 41 42 43 44 45 46 47 48 49 59 51 52 53 6/1 outsubtext ............... IPROC outsubtext ( TEXT CONST source, INT CONST tram) I EXTDlNAL 62 lEND PROC outsubtext; I outsubtext ...........•... IPROC outsubtext (TEXT CONST source, INT CONST tram, to) I EXTDINAL 63 lEND PROC outsubtext; I outtext ...•.............. IPROC outtext ( TEXT CONST source, INT CONST from, to ) lout subtext (source, tram, to) ; I INT VAH trailing ; I IF from <. LENGTH source I THEN trailing .' to - LENGTH source I ELSE tralli ng ; - to + 1 - from I FI; b&sic transput 6/1 :leile E LAN ~4 1.8 .._. 10.11.86 basic transput I I IF trailing ) 0 THEN trailing TIMESOUT " " I FI IENDPROC outtext ~5 56 57 ~ ~9 EUMEL I TIMESOUT •................ IOP TIMESOlrl' (INT CONST times, TEXT CONST text) I 60 61 62 I I I IF text = " THEN fast timesout blank ELSE timesout I I I FI. 71 72 I PER; I outsubtext (blank times 64, 1, times - i) . 73 I I 63 64 65 66 67 68 fasttimesoutblank 69 70 74 75 76 77 timesout Ifast timesout blank I INT VAR i := 0 ; I WHILE i + 64 ( times REP l o u t (blank times 64) ; I i INCR 64 Itimesout : I FOR i FROM 1 UPl'O times REP I out( text) I ENDREP. 78 79 I 80 I 81 82 83 84 85 86 87 88 89 90 91 IENlXlP TIMESOlrl' display .................. lpROC display (TEXT CONST text) I IF online I THEN out (text) I FI IENDPROC display I incbar ................... IPROC incbar (TEXT VAR character ) I I incb&rety •.••............ ITEXT PROC incb&rety I 94 I 9~ 97 98 99 EXTERNAL 64 IENDPROC incbar 92 93 96 ft EXTERNAL 65 IEND PROC incb&rety incbarety .....•••...•.... ITEXT PROC incbarety (INT CONST time limit) I internal pause (time limit) ; I lncbarety IENDPROC incb&rety I basic transput 6/2 ZeUe E LAN 1.8 **** EUMEL basIc transput 10.11.86 lee 101 1132 103 194 pause .................... IPROC pause (INT CONST tIme limit) I Internal pause (tIme lImIt) ; I TEXT CONST dummy :. Inch&rety IENDPROC pause 10:! 1136 107 108 pause .......•............ IPROC pause I TEXT VAH duDIIIIY; Inch&r (dummy) IENDPROC pause 109 110 111 112 internalpause ............ IPROC Internal pause (INT CONST tIme limIt) I EXTERNAL 66 IENDPROC internal pause 113 114 115 116 117 catinput ................. IPROC cat Input (TEXT YAH t, esc char) I EXTERNAL 68 IENDPROC cat input 118 119 129 121 122 123 cursor ................... IPROC cursor (INT CONST lout (""6"") ; lout (code(y-1» I out (code(x-l» IENDPROC cursor 124 getcursor ................ IPROC get cursor (INT VAH x, y) I EXTERNAL 67 IENDPROC get cursor 125 126 127 I I I I I x, y) I I 128 129 138 131 132 cout ..................... IPROC cout (INT CONST number) I EXTERNAL 61 IENDPROC cout 133 134 13:1 136 ch&nnel ......••.•........ lINT PROC channel I pcb (channel field) IENDPROC channe 1 137 138 139 148 141 online ................... IBOOt PROC online I pcb (channel field) () 0 IENDPROC online 6/3 I I I I I basic transput 6/3 ZeUe E LAN BIIIEL 1.8 - 18.11.86 bas1c transpJt 142 143 144 145 control .................. IPIIlC control (INT CIOIIST code1, code2, code3, INT VAH return code) I EXTIRNAL 84 IEIIDRIOC control 146 147 148 149 158 151 152 blackout ................. IPIIlC blockout (1IlW 256 INT CIOIIST block, INT CIOIIST code1, cocle2, I INT VAH return code) 153 154 155 156 157 158 159 168 161 162 163 164 165 166 167 168 169 178 171 172 173 174 175 176 177 178 6/4 I I I I I accessblock1ods access block 10 cis ; block 10. blUer : z block blockout (block 10 ds, blUer page, code1, code2, return code) I I Iaccess block 10 cis I IF NOT 1nitlalized (tbis packet) I THEIl block 10 ds : ~ nilspace In; I block 10 :. block 10 cis I IENIlPIIlC I blockout blockin ...•...•.......... IPIIlC block1n (ROW 256 INT VAH block, INT CIOIIST code1, code2, I INT VAH return code) I I I I I I accessblockiods access block 10 cis ; block1n (block 10 cis, blUer page, code1, code2. return code) block:. block 10. bltter laccess block 10 cis : IF NOT Inl tialized (tbis packet) THEIl block 10 ds : = nilspace FI; block 10 :. block 10 cis I I I I I IENDPROC I blockln ; IENDPACKET lBslc transpJt I I bas1c transpJt 6/4 Zelle 1 2 3 4 5 6 7 8 9 18 11 12 13 14 15 7/1 ELAN lDIEL 1.8 - 18.11.86 bool 1 bool ••••••••••••••••••••• IPACKBr 0001 DEFINES XCII, true, false 1 IBOOL caIST true := TRUE , 1 1 false:. rALSE ; l{(lI •.••.•.••.•••...•••••• IBOOL OP l{(lI (BOOL COIIST lett, rtsbt) 1 1 IF lett 'llIDI NO'l' rtsbt 1 ELSE r18bt 1 F1 1 IENOOP X(lI 1 IEN1lPACKET bool bool 7/1 E LAN Zeile + + 4 5 10.11.86 integer I minint ..............•.... I INT PROC minint -32767 - 1 ENDPROC minint I 8 9 10 11 lI\&Xint ................... lINT PROC lI\&Xint 12 13 14 15 16 17 18 19 text ..................... ITEXT PROC text (INT CONST number) : 20 21 22 2C I digi t I code ( number MOD 10 + 48 ) . I I I I I I I I I I number = minint THEN "-32768" number ( 0 THEN "-" + text( -number) number ( = 9 THEN code (number + 48) EUlE text (number DIV 10) + digit text TEXT VAR result := text (number) ; INT CONST number length :. LENGTH result IF number length ( length THEN (length - number length) • " " + result ELIF number length ) length THEN length" " .. " EUlE result FI IENDPROC text I int .•••••..••••..••..•.•• IINT PROC int (TEXT CONST number) I I 39 4e 41 I 42 43 &/1 IF I ELIF I ELIF I I FI. I I Idigit text •••.................. ITEXT PROC text (INT CONST number, length) 29 3e 31 32 33 M 35 36 37 44 45 46 47 48 I I IENDPROC I 2B 3B 32767 ENDPROC lI\&Xint I I 24 25 26 27 23.10.85 integer .................. IPACKET integer DEFINES text, int, MOD, I sign, SIGN, &bs I ABS, •• , min, max, minlnt, I lI\&Xint, I random, initialize random , I last conversion ok, set conversion 6 7 - 1(. ------------------- STAND: I --------------------.) 1 2 3 1.8 EllMEL skipbl&nksancisign skip blanks and sign get value result. I I I Iskip blanks and sign I BOOL VAR number is I I I positive INT VAR pos :. 1 ; skip blanks ; IF (number SUB pos) • " " integer 8/1 Ze1le -- ELAN EUMEL I getvalue 61 62 63 64 65 getfirstc1igit 73 74 75 iSd1gi t 76 77 dlgi t 78 79 result ee 83 setconversionokresult 86 67 ~ 91 92 93 94 95 96 97 98 99 lee 8/2 I Iget value I IN'! VAH value I get first digi t I WHILE is digit REP I value:. value • 10 + digit I pos INCR 1 I PER; I set conversion ok result I I Iget first digit: I IF is digit I THEN value : = digi t I pos INCR 1 I ELSE set conversion (FALSE) I LEAVE int WITH 0 I Fl. I I 11S dlgl t : 0 <. dlgi t AND dlgit <. 9 I I Idigit : code (number SUB po.) - 48 . I I 81 82 88 89 integer THEN number is posi ti ve : = FALSE pos INCR 1 ELIF (number SUB pos) • "+" THEN number is positive : = TRUE I pos INCR 1 I ELSE number is posi ti ve : = TRUE I Fl. se 84 85 10.11.86 I I I 56 66 67 68 69 70 71 72 ._. I 49 50 51 52 53 54 55 57 58 59 1.8 skipbl&nks Iresult : I IF number is positive I THEN value I ELSE - value I FI. I I Iset conversion ok result I skip blanks ; I conversion ok :. (pos ) LENGTH number) I I Iskip blanks I WHILE (number SUB pos) • " " REP I I I ~mCR1 PER. IENDPROC int I I«lD ...................... I IN'! OP I«lD (IN'! CONST left. right) I I EXTERNAL I IENlXlP I«lD I 43 integer 8/2 Zeile 181 182 183 .... ELAN EUMIL 1.8.... s1gn ••••••••••••••••••••• 18.11.86 .... integer lINT PROC sign (INT IXlIST arsu-nt) I I IF arsu-nt ( 8 '11II!If -1 I ELII' arsu-nt > 8 '11II!If 1 I ELSE 8 I FI 184 185 186 I 187 188 189 IENllPROC s1gn ; I 118 111 112 113 SIGN ••...........•....... lINT OP SIGN (INT OONST arsu-nt ) I s1gn (arsu-nt ) IDIlXlP SIGN 114 115 abs ...................... lINT PROC abs (INT CONST arsu-nt ) I I I IF argument > 8 I ElSE - arguant I FI I 116 117 118 119 128 IENllPROC abs 121 I 122 123 124 125 126 127 128 129 138 131 132 133 134 135 136 137 138 139 148 141 142 ABS .....................• I INT OP ABS (INT CONST argument) I abs (argument) IENroP ABS I ........................ INT OP .. (INT CONST arg, exp) INT YAH x : = arg , Z : = 1 , counter :. exp IFexp.e THEN LEAVE .. WITH 1 ELIF exp ( e THEN LEAVE .. WITH 1 DIY arg FI ; WHILE counter >= 2 REP calculate new x and z counter :. counter DIY 2 nmu:P ; z .. x • 143 144 145 146 147 148 calculatenewxandz 149 158 151 152 counter1snoteven 8/3 THEN a.rgu.ent Icalculate new x and z I IF counter 1s not even THEN z :. z • x I I FI ; I X:aX*X. I I Icounter 1s not even I counter MOD 2 • 1 I IENroP" ; integer 8/3 Zene e integer 18.11.86 tin ..........•........... 1!NT RtOC ain (INT IXIIST tirst, second) : 158 1 1 IJ' tirst < second 1 IINDl'ROC ain 159 1 156 157 THEIl tirst ELSE second J'I 168 161 162 163 164 165 166 167 168 169 .ax •••••••••••••••••••••• 1INT RtOC .ax (!NT IXIIST tirst, second) : 178 lastcormorsionok ......... IBOOL RtOC last conversion ok 1 conversion ok IINDl'ROC last conversion ok 171 172 173 e EUMEL 1.8.... 153 154 155 e ELAN 174 175 176 177 178 179 188 181 182 183 184 185 186 187 188 189 198 191 192 193 194 19!1 196 197 198 199 2eQ 281 282 283 284 8/4 1 1 IJ' tirst > second THEIl tirst ELSE second J'I 1 IINDl'ROC .ax 1 I 1 IBOOL YAH conversion ok :. TRUE I I setcormorsion •••••••••••• 1RtOC set conversion (BOOL IXIIST success) 1 conversion ok : = success II!2IDPIIOC set conversion 1 1 1 1(··················································· ................ ) III (I (1(I (1(1(1(- -) Autor: A. J'laaIIIenkalllp RANInI GENERATOR -) x .• 4895 - x n+l MOD (4895-4896+4893) -) n -) -) Periods: 2-24-4 16.886 -) 1(- 1(1(· -) -) -) Beachte: x = 4896. xl + xe, 8 <= xe,x1 < 4896 .) .) 1(·································""················ ........•......• ) I I lINT YAH high .= 1, low .- e I ini tial1zerandolD ..•...... IRtOC initialize random (INT CONST start) I I I I low:. start MOD 4896 ; IF start < e THEN high := 2!l6 + 16 + start DIY 4896 IF low < > e THEN high DECR 1 J'I EUlE high :. 256 + start DIV 4896 I I In integer 8/4 Zelle - ELAN EUMEL 1.6 113.11.66 ••- integer I IENDPROC initialize random I 2e6 random ................... lINT PROC random (INT CONST lower bound, upper bound) ~9 I 2113 211 212 213 214 I compute new random value I normalize high ; I normali ze low ; I map into interval 215 216 217 216 219 computenewrandomvalue 220 221 222 223 normalizehigh Icompute new random value I (. (high,low) :. (low-high, 3-high-low) .) I high:= low - high ; I low INCR low - 3 • high , I I 224 225 I I normalize low 226 227 Inormalize high : I IF high < e I THEN high INCR 4096 I Fl. low DECR 3 I I I·normalize low I ( • high INCR low DIY 4096 I low : = low MOD 4096 226 I .) 229 23e I IF low ). 4096 THEN low overflow I ELIF low < 0 THEN low underflow I Fl. 231 I I 232 233 lowoverflow 234 235 236 237 236 239 postnormalization 240 241 242 243 244 245 246 247 Ilow overflow I IF low). 6192 I THEN low DECR 6192 I ElSE low DECR 4096 I Fl. high INCR 2 high INCR 1 post nomalization I I lpost normalization I (. IF (high,low) ). (4095,4093) I THEN (high, low) DECR (4095,4093) I FI I .) I I I I I I I 246 249 250 251 252 lowunderflow 253 254 255 256 257 mapintointerval IF high ). 4095 TIIEN IF low ELIF high FI Fl. >. 4093 TIIEN high DECR 4095 high : = e = 4096 TIIEN low DECR 4093 low INCH 3 Ilow underflow I low INCR 4096 ; high DECR 1 I I lmap into interval I INT YAH number :. high II)D 16 - 6 I number INCR 4095 • nUliber + low ; I IF lower bound <. upper bound I TIIEN lower bound + nllllber II)D (upper bound - lower bound + 1) integer 8/5 Zelle 2M 259 260 261 ..... E LAN EUMEL 1.8 •••• ELSE I I FI . I 10.11.86 upper bound + number MOD (lower bound - upper bound + 1) IENDPROC random 263 I I 264 IENDPACKET integer 262 8/6 integer integer 8/6 Zaile 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2B 29 30 31 32 33 34 35 36 37 3B 39 40 41 42 43 44 45 46 47 48 49 50 9/1 E LAN EUMEL 1.8 **** error handl1 ng 10.11.86 I errorhandling *********.**IPACKET error handling DEFINES I I enable stop • I dis&ble stop • I is error. I cle&r error • I errormessage. I error code • I error line • I put error • I errors top • I stop: I I ILET cr It' I line nr field I error line field I error code field I syntax error code= I I error pre I I ITEXT VAR errortext .' I I ""13""10"" 1 2. 3. 100 ""7""13""10""5"FEIILER en&blestop ............... IPROC ena.ble stop : I EXTERNAL 75 IENDPROC enable I stop dis&blestop .............. IPROC dis&ble stop : I EXTERNAL 76 IENDPROC dis&ble I stop seterrorstop ............. IPROC set error stop (INT CaNST code) I EXTERNAL 77 IENDPROC set error I stop ; iserror .................. IBOOL PROC is error I EXTERNAL IENDPROC is I 78 error ; cle&rerror ............... IPROC cle&r error : I EXTERNAL 79 IENDPROC cle&r I error selecterrormessage ....... IPROC select error message I I SELECT error code OF error handling 9/1 Zeile 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 E LAN 1.8 EUMEL ,, ,, .... CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 CASE 6 CASE 7 CASE 8 CASE 9 CASE 10: CASE 11: CASE 12: CASE 13: CASE 14: CASE 15: CASE 16: CASE 17: END SELECT ,'ENDPROC error handling 113.11.86 · · error text error text error text := error text : = error text : = error text :. error text :. error text : = error text · error text error text error text := error text : = error text := error text : = error text error text · - ·. · · select error mess'4!!e 78 errormess'4!!e ............. 'TEXT PROC error mess'4!!e : , , select error mess'4!!e , error text , 'ENDPROC error mess'4!!e , 79 80 81 82 83 errorcode ................ 'INT PROC error code : , , pcb (error code field) , 'ENDPROC error code 77 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 180 9/2 "'halt' vom Terminal" "Stack -Ue ber laut" "Heap-Ueberlauf" "INT-Ueberlaut" "DIV durch 0" "REAL-Ueberlaut" "TEXT-Ueberlauf" "zu viele DATASPACEs" "Ueberlauf bei Subskription" "Unterlauf bei Subskription" "falscher DATASPACE-Zugriff" "INT nicht initialisiert" "REAL nicht ini tialisiert" "TEXT nicht initialisiert" "nicht implementlert" "Block unlesbar" "Codefehler" , errorl1ne ................ 'INT PROC error line , , IF is error , THEN pcb (error line field) , ELSE 0 , FI , 'ENDPROC error line , syntaxerror ....•......... 'PROC syntax error (TEXT CONST mess'4!!e) , , INTERNAL 259 ; , errors top (syntax error code, mess'4!!e) . , 'ENDPROC syntax error ; , error handl1ng 9/2 ZeUe 101 102 103 104 105 E LAN 1.8 I I I errors top (0, message) IENDPIIOC errors top I errors top ................ IPROC errors top (INT CONST code, TEXT CONST message) I 108 I IF NOT I THEN I w i n 113 I 109 110 111 I 115 puterror ................. IPROC put error I I I I I I I I 117 118 119 120 121 122 123 124 125 126 127 128 129 130 puterrormessage THEN select error message IF error text () ~~ THEN put error message FI Fl. lout (error pre) lout (error text) ; I IF error line ) 0 I THEN out (" bei Zeile I I 134 I ~); out (text (error line» FI; lout (cr If) . IENDPIIOC put error stop ..................... IPROC stop : 136 137 I I 1~ I 139 140 141 I 9/3 IF is error I Iput error message 131 132 133 135 1s error error text :. message set error stop (code) IENDPROC errors top 114 116 error handling 10.11.86 - errors top ................ IPROC errors top (TEXT CONST message) 106 107 EUMEL errors top ("stop") IENDPROC stop; IENDPACKET error h&ndling error h&ndling 9/3 Zeile E LAN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 real EUMEL 1.8 lABS, I I I sign, SIGN, MOD, min, 20 21 22 I 23 I 24 25 IlEI' I I I INT I 27 28 29 30 31 32 33 M 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 10/1 05.05.86 ------------------- * (* Autor: J . Liedtke • I text, lint, I real, I round, I floor, I frac, I decimal exponent I set exp , I INCR, I DEeR, labs, 17 26 VERSION 6 IPACm real DEFINES I 18 real 10.11.86 ----* 1(*I ------------------- 16 19 -- I I max, max real , small real mantissa length = 13 , digit zero index = 1 , digi t nine index = 10 ; CONST decimal point index :. -1 I ITEXT VAR mantissa ; I IROW 10 REAL VAR real digit I lINT VAR i ; REAL VAR d := 0.0 IFOR i FROM 1 UPl'O 10 REP I real digit (1) : = d ; I d:= d + 1.0 Ipm I maxreal .................. IREAL PROC max real 9.9999999999990126 ENDPROC max real I smallreal ................ IREAL PROC small real 1. 08-12 ENDPROC small real I sId ...................... IPROC sId (INT CONST in, REAL VAR real, INT VAR out) I EXTmNAL 96 IENDPROC sId I decimaloxponent .........• lINT PROC decimal exponent (REAL CONST mantissa) I EXTmNAL 97 IENDPROC decimal exponent I real 10/1 Zelle E LAN 52 setexp ................... 53 54 55 EUMEL 1.8 --- 10.11.86 Imoe set exp (INT I EXTERNAL 98 IENDPROC set exp ; I reAl CONST exponent, REAL VAR number) 56 57 58 59 50 61 tenpower ................. IREAL PROC tenpower (INT CONST exponent) I REAL VAR result := 1.0 ; I set exp (exponent, result) ; I result IENDPROC tenpower 62 floor ...............•.... IREAL PROC floor (REAL CONST reAl) I EXTERNAL 99 IENDPROC floor ; 63 64 65 66 67 68 69 I I round .................... IREAL PROC round (REAL CONST reAl, INT CONST digits) I I I I I I I + 70 71 72 73 74 75 76 77 78 79 8El 81 82 83 84 85 86 87 88 roundresul t REAL VAR result : = reAl ; IF (reAl () 0.0) CAND (decim&l exponent (reAl) length) THEN round result FI; result. + digits ( m&ntiss& I I Iround result I set exp (decim&l exponent (result) + digits, result) I IF result ). 0.0 I THEN result: = floor (result + 0.5) I ELSE result :. floor (result - 0.5) I Fl; I IF result () 0.0 I THEN set exp (decima.l exponent (result) - digits, result) I FI. I IENDPROC round I ITEXT VAR result I text.. .. .. .. .. .. .. .. .. ... TEXT PROC text (REAL CONST reAl) : 89 ge 91 92 93 94 95 96 97 98 99 100 101 102 103 10/2 REAL VAR VAlue :. rounded to seven digi ts IF vAlue. 0.0 THEN ~0.0~ ELSE proces s sign get m&ntissA (vAlue) INT CONST exponent : = decim&l exponent (vAlue) ; get short ma.ntissA ; IF exponent ) 7 OR exponent ( LENGTH short IIIILntissA - 7 THEN scientific notAtion ELSE short notAtion FI FI . reAl 10/2 1.8 •••• EUMEL Zaile E LAN 104 105 106 107 rounded tosevendigi ts 108 109 110 111 112 113 114 processsign 115 116 117 118 119 120 121 getshortmantissa 122 123 124 125 126 127 scientificnotation 128 129 130 131 132 133 134 shortnotation 10.11.86 real Irounded to seven digits : I round ( real. tenpower( -decimal exponent( real) ) , 6 ) I • tenpower ( decimal exponent(real) ) . I I Iprocess sign : I IF value ( 0.0 THEN result := " - " ., I value : = - value I ELSE result . s I I FI . I I Iget short mantissa : lIlT VAH i : = 7 ; I WHILE (mantissa SUB 1) • "0" REP ! iDECRl I UNTIL i=l END REP ; I TEXT CONST short mantissa := sUhtext (mantissa, 1, i) . I I I Iscientific notation : I result CAT (mantissa I I I I I 135 136 137 138 139 140 141 142 SUB 1) ; result CAT"." ; result CAT suhtext (mantissa, 2, 7) result + "e" + text (exponent) . short notation : IF exponent ( 0 THEN result + "0." + (-exponent - 1) • "0" + short mantissa ELSE result CAT suhtext (short mantissa, 1, exponent+l) ; result CAT (exponent+l - LENGTH short mantissa) • "8" ; result CAT"." ; result CAT suhtext (short mantissa, exponent+2) IF LENGTH short mantissa ( exponent + 2 THEN result + "0" ELSE result FI FI . IENDPROC I text 143 144 145 146 147 148 149 150 151 152 153 154 getmantissa .............. IPROC get mantissa (REAL CONST number) 155 156 157 text ..................... ITEXT PROC text (REAL CONST real, INT OONST length) : 10/3 I I I I I I I I I REAL VAH real mantissa : = number ; mantissa: = n ; lIlT VAH i , digit; FOR i FROM 1 UPl'O mantissa length REP sld (0, real mantissa, digit) ; mantissa CAT code (digit + 48) PER; IENDPROC get mantissa I I I lIlT CONST mantissa length := min (length - 7, 13) ; real 10/3 Ze1le E LAN 158 159 160 161 162 163 EUMEL 1.8 , , , **** 10.11.86 •••• real IF mantissa length > El THEN construct scientific notation ELSE result : = length. "." 'FI; , , result. , 164 165 166 167 168 169 170 171 172 constructscientificnot 'construct SCientific notation: , REAL VAR value : = rounded real , IF value = 0.0 , THEN result := subtext (" 0.0 , ELSE process sign ; ' p r o c e s s mantissa ' p r o c e s s exponent , FI. , 173 174 + 175 176 roundedreal 177 178 179 180 181 182 processsign 183 184 185 186 187 188 processmantissa 189 190 191 192 193 194 195 196 197 198 processexponent 199 280 201 202 203 204 285 2$6 207 208 209 210 211 1El/4 ", 1, length) , 'rounded real , round (real • tenpower ( -decimal exponent (real)) , mantissa , length - 1) , • tenpower (decimal exponent (real)) . , , 'process sign : , IF value < 0.8 , THEN result . - " " , ELSE result := "+" ,Fl. , , 'process mantissa : , get mantissa (value) , result CAT (mantissa SUB 1) ; , result CAT "." ; , result CAT subtext (ma.ntissa, 2, ma.ntissa length) . , , 'process exponent : IF decimal exponent (value) >= El , THEN result CAT "e+" , ELSE result CAT "e-" , FI; , result CAT text (ABS decimal exponent (value), 3) , change all (result, " ", "0") . , ,ENDPROC text , I text ..................... 'TEXT PROC text (REAL CONST real, INT CONST length, !racs) , , REAL VAR value :. round (real, !racs) ; I INT VAR exponent : = decimal exponent (value) , I F value = 8.0 THEN exponent :. 0 FI , INT VAR floors :. exponent + 1 , , f l o o r length :. length - fracs - 1 ; , I F value < 8.El THEN floor length DECR 1 FI , , IF value too big , TIIEN length • • •• , ELSE transformed value , FI. real 18/4 ZeUe E LAN EUMEL 1.8 -- 1e.11.86 rea.l 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 transformedva.lue 231 232 233 234 235 236 237 processleadingbla.nksa.n Iprocess leading blanks a.nd sign: I result:= (floor length - ma.x(floors,e» • I IF va.lue ( €I.e I THEN result CAT "-" ; I va.lue : = - va.lue I FI. I 238 239 va.luetoobig tra.nsformed va.lue process leading bla.nks a.nd sign get mantissa. (va.lue) ; result CAT subtext (mantissa., 1, floors) IF LENGTH mantissa. ( floors THEN result CAT (floors - LENGTH mantissa.) • "€I" FI ; result CAT "." ; IF exponent ( €I THEN result CAT (-floors) • "€I" ; result CAT subtext (mantissa., 1, length - LENGTH result) ELSE result CAT subtext (mantissa., floors+1, floors + fracs) FI ; IF LENGTH result ( length THEN result CAT (length - LENGTH result) • "€I" FI ; re~lt. I I ~e ~1 IENDPROC text I ~2 ~3 Iva.lue too big : I floors) floor length rea.l ..................... IREAL PROC rea.l (TEXT CONST text) I ~4 ~!j I I I I I ~6 24 7 ~8 249 250 skip leading bla.nks sign; mantissa. part exponent result. I I 2:51 2:52 253 254 skipleadingbl&nks 255 256 257 258 259 skipblanks 260 261 262 263 sign Iskip leading bla.nks I INT VAH pos := 1 ; I skip bla.nks I I Iskip blanks I WHILE (text SUB pos) • " " REP I pos INCR 1 I PER. I I 264 265 1e/5 Isign BOOL VAH nega.tive I IF (text SUB pos) "" I THEN nega.ti ve :. TRUE I pos INCR 1 I ELIF (text SUB pos) • "+" I rea.l 18/5 Zeile E LAN 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 1.8 **** EUMEL I I I I I I mantlssapart 284 real THEN negative:; FALSE pos INCR 1 ELSE negative:; FALSE Fl. Imantissa part: I REAL VAH value I INT VAH exponent pos :; 0 ; I get first digit; I WHILE pos <; LENGTH text REP I digi t :; code (text SUB pos) - 47 ; I IF digit); digit zero index AND digit <; digit nine index I THEN value :; value * 10.0 + real digit (digit) I pos INCR 1 I ELIF digit; decimal point index AND exponent pos ; 0 I THEN pos INCR 1 ; I exponent pos :; pos I ELSE LEAVE mantissa part I FI I I 285 286 10.11.86 END REP . I 287 288 289 290 291 292 getfirstdigi t Iget first digit INT VAH digit :. code (text SUB pos) - 47 IF digit = decimal point index THEN pos INCR 1 ; exponent pos : = pos ; digit: = code (text SUB pos) - 47 FI; IF digit) = digit zero index AND digit <. digit nine index THEN value : = real digit (digi t) pos INCR 1 ELSE set conversion (FALSE) LEAVE real WITH 0. 0 FI • 301 302 303 304 305 306 307 308 309 310 Ml exponent Iexponent I INT VAH exp I IF exponent pos ) 0 I THEN exp :; exponent pos - pos I ELSE exp : = 0 I FI; I IF (text SUB pos) = "e" I THEN exp INCR int (subtext( text,pos+l» I ELSE no more nonblank chars permitted I Fl. 312 313 314 315 316 317 318 nomorenonblankcharsper Ino more nonblank chars permitted I skip blanks ; I IF po s ) LENGTH text I THEN set conversion (TRUE) I ELSE set conversion (FALSE) I FI. 319 320 321 322 result ~3 294 295 296 297 298 299 300 I lEl/6 I I I I Iresult I value: = value I IF negative I THEN - value real * tenpower (exp) 10/6 E LAN Zeile :325 :326 327 328 336 :337 33B :339 340 341 342 343 344 345 346 347 348 ~ ~0 351 352 ~:3 354 ~5 356 357 ~8 ~9 360 361 362 363 364 365 366 367 368 369 370 371 372 10/7 1.8 **** 10.11.86 **** real I ELSE value I FI. I IENDPROC real I I :323 :324 :329 338 :331 :3:32 3:33 :334 335 EUMEL abs ...................... IREAL PROC abs (REAL I I IF value 0.0 TIIEN value I ELSE -value I I FI I IENDPROC abs I CONST value) )= ABS ...................... IREAL OP ABS (REAL CONST value) I labs (value) I IENOOP I ABS sign ..................... lINT PROC sign (REAL CONST value) I I I I IF value ( 0.0 TIIEN -1 ELIF value = 0.0 TIIEN 0 ELSE 1 I IT I IENDPROC I sign SIGN ..................... I INT OP SIGN (REAL CONST value) I I sign (value) I IENOOP SIGN I MOD ...................... IREAL OP MOD (REAL CONST left. right) : I I I I I I REAL VAR result := left - floor (left/right) * right IF result ( 0.0 THEN result + abs (right) ELSE result FI I IENOOP I MOD frac ..................... IREAL PROC frac (REAL CONST value) I I value - floor (value) I real 10/7 Zaile .... ELAN EUMEL 1.8 •••• 10.11.86 373 IENDPROC frae 374 I 375 376 377 378 379 380 381 382 383 max ...................... IREAL PROC max (REAL CONST a, b) I I I 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 18/8 b) I I I 398 b THEN a ELSE b FI min ...................... IREAL PROC min (REAL CONST a, 385 386 393 394 395 396 397 > IENDPROC max I 391 392 IF a I 384 387 388 389 3~ real IF a < b THEN a ELSE b FI IENDPROC min INCR ..................... Iop INCR (REAL VAR dest, REAL CONST increment) I I dest:= dest + increment I IENDOP INCR I DECR ••.•.••.•••..•••...•• IOP DECR (REAL VAR dest, REAL CONST decrement) I I dest:= dest - decrement I IENDOP I DEeR int ...................... lINT PROC int (REAL CONST value) I I IF value = minint value THEN minint I ELSE compute int result I IF value < 0.0 I THEN - result I ELSE result I FI I I FI . I I computeintresul t Icompute int result: I INT VAR result := 0, digit ,i ; I REAL VAR mantissa := value; I I FOR i FROM 0 UPTO decimal exponent (value) REP sld (0, mantissa, digit) ; I result := result. 10 + digit I I PER . I I minintvalue - 32768.@ . Iminint value real 18/8 E LAN Zeile 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 minint EUMEL 1.8 10.11.86 Iminint real - 32767 - 1 . I IENDPROC int I real ..................... IREAL PROC real (INT CONST value) I I I I I I I I I I IF value < 0 THEN - real (-value) ELIF value < 10 THEN real digit (value+l) ELSE split value into head and last digit; real (head) * 10.0 + real digit (last digit+l) FI. spl1 tvalueintoheadandl I spli t value into head and last digit I INT CONST I head: = value DIV 10 , I last digit .• value - head * 10 . 438 I 439 440 441 I 10/9 *-* IENDPROC real IENDPACKET real real 18/9 Zeile 1 2 3 .. 5 6 r LAN ~.8 EUMEL 16 + 17 18 19 20 21 22 23 + 24 + 25 26 + 27 :0.11.86 date handli ng (. ,:..utor: H. datehandling **••••••** ••• IP~.CKET date handling DEfINES date, time, I Indenbirken·) time of day. I. Stand: i 02.06.1986 (wk)·) I month, day , year , I hour, I r.linute, I second I ILET 7 8 9 10 11 12 13 14 15 **.. I I I I I I 1(. I middle yearlength = 31557380.0, weeklength 604800.0, daylength 86400.0, hours 3600 . 0 , minutes 60.0, seconds 1.0; T~e bis zum Jahr 01.01.1900: 693970.25 .) 1(* Dieser T~ ist ein Mon~ IREAL VAH begin of today .- 0.0 , end of today .- 0.0 I ITEXT VAH today, result I I IROW 12 REAL CONST previous days 5097600.0, ROW 12 REAL : (0.0, 2678400.0, I I I I I I I I 7776000.0, 10368000.0, 1:3046400.0, 15638400.0. 18316800.O, 20995200.0, 23587200.0, 26265600.0, 28857600.0); day ...•.................. IREAL PROC day: day length END PROC day; 29 hour ..•.................. IREAL PROC hour: hours :30 minute ................... IREAL 31 32 second ................... IREAL PROC second: seconds END PROC second; 33 34 date ..................... ITEXT PROC date 35 37 38 39 moc END PROC hour; minute: minutes END PROC minute; I I I I I I I I % 41 42 I 43 I 11/1 Sekunden I·) I 28 36 5.995903910 I IF clock (1) ( begin of today OR end of today ( = clock (1) THEN begin of today : = clock (1) ; end of today : = floor (begin of today/daylength).daylength+daylength; today := date (begin of today) FI; today IENDPROC date date handling 11/1 Zeile 44 45 46 **** ELAN , , , , , ,I , 61 62 63 64 65 leapyear n M 88 89 ~ M 92 93 94 95 96 97 98 ~ 100 101 11/2 « ,,correct kalendary day; correctkalendaryday 78 79 00 81 82 83 54 85 86 date handling 10.11. 86 , 57 58 59 60 67 68 69 70 71 72 73 74 75 76 **** date ..................... 'TEXT PROC date (REAL CONST datum): , INT VAR year:: int (datum/middle yearlength), , day :: int (datum - datum MOD daylength) MOD middle , year length) / daylength) + 1; 47 48 49 50 51 52 53 54 55 56 66 1. 8 EUMEL calculate month and correct day; result:. day text ; result CAT monthtext; result CAT yeartext; change all (result, "" "€I") result. ,correct kalendary day: IF day ) = 60 AND NOT leapye&r , THEN day INCR 1 FI , ! , 'leapyear: IF year MOD 100 = 0 THEN year MOD 400 • , , ELSE year MOD 4 = 0 , FI. I e ,I calculatemonthandcorre ,calculate month and correct day: , INT VAR month; , IF day ) 182 , THEN IF day ) 274 THEN IF day ) 305 THEN IF day ) 335 THEN month : = 12; day DEX:R 335 ELSE month : = 11; day DEX:R 305 TI ELSE month : = 10; day DEeR 274 TI ELSE IF day ) 213 THEN IF day ) 244 THEN month : = 9; day DEX:R 244 ELSE month : = 8; day DEX:R 213 TI ELSE month : = 7; day DEeR 182 TI TI ELSE IF day ) 91 THEN IF day ) 121 THEN IF day ) 152 THEN month : = 6; day DEX:R 152 ELSE month : = 5; day DEX:R 121 TI ELSE month := 4; day DEX:R 91 date handling 11/2 E LAN ZeUe EUMEL 1.8 .. ** I I, I I I I 102 103 104 105 106 107 108 109 110 111 112 113 I I 114 115 116 daytext 117 118 119 IIOnthtext 120 121 122 123 124 125 126 127 yeartext 10.11.86 * ••* date handling FI ELSE IF day ) 31 THEN IF day ) 60 THEN month :. 3; day DECR 60 ELSE month : = 2; day DECR 31 FI ELSE month : = 1 FI I FI I I FI I I Idaytext I text (day, 2) + "." I I Imonthtext : I text (month,2) + "." I I Iyeartext: I IF 1900 (. year AND I THEN text (year - year ( 20EIE) 1900, 2) ELSE text (year, 4) I IF! I lEND PROC date; I ...................... ITEXT PROC day (REAL CONST datum): I SELECT int (( datum MOD week1ength)/day1ength) I CASE 1: "Donnerstag" I CASE 2: "Freitag" I CASE 3: "Sa.mstag" I CASE 4: "Sonntag" I CASE 5: "Montag" I CASE 6: "Dienstag" I OTHERWISE "Ml ttwoch" ENDSELECT lEND PROC day; I 128 129 130 131 132 133 134 135 136 137 138 day 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 month .................... TEXT PROC month (REAL CONST datum): SELECT lnt (subtext (date (datum), 4, CASE 1: "Januar" CASE 2: "Februar" CASE 3: "Marz" CASE 4: "April" CASE 5: "Mal" CASE 6: "Jun1" CASE 7: "Ju11" CASE 8: "August" CASE 9: "September" CASE 10: "Oktober" CASE 11: "November" OTHERWISE "!lezember" ENDSELECT U/3 lEND I 5» OF OF PROC month; date handling 11/3 E LAN Zoile 156 157 158 159 160 161 162 163 164 EUMEL 1.8 **** date handl1ng 10.11.86 year ...•.•............... ITEXT PROC year (REAL CONST datum) : I I TEXT VAR buffer := subtext (date (datum), 7) I IF LENGTR buffer = 2 I THEN "19" + buffer I ELSE buffer I FI. I IENDPROC year I ~5 166 167 168 169 timeofday ................ ITEXT PROC time of day : I time of day (clock (1» IENDPROC time of day ; 170 171 172 173 timeofday ................ ITEXT PROC time of day (REAL CONST value) : I subtext (time (value MOD daylength), 1, 5) IENDPROC time of day ; 174 175 176 177 time ..................... ITEXT PROC time (REAL CONST value) I time (value,10) IENDPROC time 178 179 time ....................• ITEXT PROC time (REAL CONST value, INT CONST length) I result:=""; I IF length > 7 I THEN result CAT hour result CAT ". " I 180 181 182 183 I I I 198 I FI ; I result CAT minute I result CAT ":" ; I result CAT rest ; I change all (result, " " , I result. I I Ihour I text (int (value/hours), I I Iminute I text (int (value/minutes I I Irest I text (value MOD minutes, I 199 200 I 184 185 186 187 188 189 190 hour 191 192 193 194 195 minute 196 rest 197 201 202 203 204 11/4 "0") length-8) . MOD 60.0), 2) 4, 1) • IEND PROC time date ..•.................. IREAL PROC date (TEXT CONST datum) : I spli t and check datum; I real (day no )*CIaylength + I previous days [month noJ + calendary day + date handling 11/4 Zeile -- ELAN EUMEL 1.8 10.11.86 ...* date handling floor (real (year no)-middleyearlength / daylength)-uylength 295 296 297 - spli t&ndcheckda tum 208 299 210 211 212 213 214 215 216 217 218 219 spu t and check datum: INT CONST day no :: first no; IF NOT last conversion ok THEN errors top ("inkorrekte Datums&ngabe (Tag) " . datum) FI; INT CONST month no :: second no; IF NOT last conversion ok 011 month no ( 1 011 month no > 12 THEN errors top ("inkorrekte Datumsangabe (Monat) : " • datUIII) FI INT CONST year no :: third no • century; IF NOT last conversion ok THEN errorstop ("inkorrekte Datumsangabe (Jahr) : " • datUIII) FI; IF day no ( 1 011 day no > size of month THEN errorstop ("inkorrekte Datumsangabe (Tag) 220 221 "+ datum) FI 222 223 century 224 225 226 sizeofmonth 229 238 231 232 februarysize 235 236 237 Isize of month: I SELECT month no OF I CASE 1, 3, 5, 7, 8, 10, 12: 31 I CASE 4, 6, 9, 11: 38 I OTHERWISE february size ENmELECT I february size: I IF leapyear I THEN 29 I ELSE 28 FI I I 238 239 Icentury: I IF (length (datUIII) - second pos) (. 2 I TIIEN 1909 I ELSE 0 FI I I 233 234 I I I 227 228 calendaryday 240 241 242 243 244 245 246 leapyear 247 tirstno Icalendary day: I IF month no > 2 AND leapyear I THEN daylength I ELSE 0.0 FI I I Ileapyear: I year no MOD 4 = 11) AND year no MOD 40!il <> 0 . I I 248 249 lfirst no: I INT CONST first pos :: pos (datUIII, "."); lint (subtext (datum, 1, first pos-l» I I 250 251 252 253 254 secondno 255 thirdno Isecond no: I INT CONST second pos ;: pos (datUID, ".", first pos+l); lint (subtext (datum, first pos + 1, second pos-1» I I 2M Ithird no: lint (subtext (datum, second pos + 1» 257 I 11/5 . date handling 11/5 Zeile E LAN 264 265 da ,e hand li ng i0.11.B€ PRO:: date; :::te ..................... I REAL BOe time i, TEZ: COtiST tine; I sph t and cteck t~l!le; I hour ~ min + sec I splitandchecktime I i spU t and cheok time: 266 267 268 269 270 271 272 273 274 I I I I I I 275 276 277 278 279 **** :.8 IE:m I 258 259 260 261 262 263 r:"MEL hourno 280 281 282 REAL eONST hour :: hou!" ",0 * hours; IT NOT last conversion o~ THEN errorstop ("inkarrekte Datumsangabe (Stunde I " + REAL :ONST min :: min :10 * r.lir.'Jtes; IT NO: last conversion ok THEN errors top I, "ir.korre~te Ja t'lmsar.gabe (Minute I " + timel FI: REAL CONST sec :: sec no; IF NOT last conversion o~ THEN errors top ("inkcrrekte Jat:;msangabe (Sekundel time) rI; " + timel FI; set oonversion (l;cur ok ANI: min ok ANJ sec ok) Ihour no: lINT CONST hour pos :: pos (:~:!1e. ":" I ; I real (subtext (tlme, 1. hour pos-ll1 I I 283 284 285 minno 286 287 288 289 290 291 292 I I secno 293 Isec no: IF min pos = 0 TIIEll 0.0 I ELSE real (subtext (time, min pos + 111 I I I rr. I I 294 295 296 Imin no: I IN! VAR m1n pos :: pos (time. ":", hour pos+ll; I IF min pos = 0 I THEN real (subtext ,tirr:e, ho",," pes + 1, LENGTH time I I I ELSE real (subte:·:t (Hr.,e, hou,," pos + 1, min pos-ll1 I FI. hourok Ihour ok: 0.0 I 297 298 299 300 301 11/6 mlnok Im1n ok: secok I Isec 0.0 ok: 0.0 IEND PROC time; hour All] hcur < daylength m1n AND min < hours sec AND sec < minutes I lEND PACKET datehandling date handling 11/6 Zeile 1 2 3 4 5 6 7 E LAN EUMEL 1.8 •••• , commanddialogue .......... IPACKET , , , , , 8 , 9 19 11 12 13 14 , , , , , , 15 ,LET up 16 17 18 19 29 21 22 23 24 25 26 27 28 29 30 I , I I 19.11.86 command dialogue DEFINES • ""3"" , right ""2"" , cr If ""13""19"" param pre "(""", param post = """) "13""19"" I I ITEXT VAR std para.m . _ "" ; I IBOOL VAR dialogue flag : = TRUE I lINT VAR para.m x := 9 ; I I ITYPE QUIET = INT I qUiet .................... IQUIET PROC quiet I QUIET: (9) IENDPROC quiet 36 37 38 commanddialogue .......... 'BOOL moc command dialogue I dialogue flag IENDmOC command dialogue 39 I 43 44 45 46 47 48 49 59 51 12/1 (. Autor: J.Liedtke .~ (. Stand: 25.11.83.) cOJlllll8.nd dialogue , say, yes, no , para.m position , last para.m , std , QUIET , quiet 31 32 33 34 35 49 41 42 command dialogue I , commanddialogue .......... IPROC command dialogue (BOOL CONST status) I dialogue flag : = status IENDPROC command dialogue I , yes ...................... IBOOL moc yes (TEXT CONST question) I I I I I I IF dialogue flag TIIEN ask question ELSE TRUE FI. cOllllll&nd dialogue 12/1 E LAN Zeile 52 53 54 55 56 57 58 59 60 61 62 63 64 65 askquestion 66 67 getanswer EUMEL 1.8 •••• 10.11.86 command dialogue Iask question : lout (question) 1 skip previous input chars lout (" (J/n) ? ") 1 get answer ; 1 IF correct answer 1 THEN out (answer) 1 out (cr if) ; I positive answer 1 ELSE out (""7"") ; 1 LENGTH question + 9 1 yes (question) 1 FI. TIMESOUT ftft8ftft 1 1 68 Iget answer TEXT VAH answer 1 inchar (answer) 69 1 1 1 70 71 72 correctanswer 73 74 75 positiveanswer 76 77 78 79 skippreviousinputchars Icorrect answer: pos (" jnyJNY" , answer) ) 1 e. 1 1 lpositive answer: pos ("jyJY", answer) ) 0 . 1 1 1 1skip I previous input chars : REP UNTIL incharety = "" PER 1 1ENDPROC 8@ yes 1 81 82 83 84 85 86 no ....................... IBOOL PROC no (TEXT CONST question) 1 1 NOT yes (question) 1 1ENDPROC no ; 87 88 89 90 91 92 93 94 say 95 96 97 98 99 paramposition ............ 1PROC param position (INT CONST x) 1 •••••••••••••••••••••• 1PROC say (TEXT CONST message) 1 1 1 1 IF dialogue flag THEN out (message) FI 1 1ENDPROC say 1 1 1 param x := x 1 100 IENDPROC param position 1 12/2 cODDl1&nd dialogue 12/2 Zaile E LAN EUMEL 1.8 ***. 10.11.86 •••• 101 102 103 104 105 106 107 108 109 110 111 112 113 lastpa.ram ................ ITEXT PROC l&st p&ra.m : 114 115 116 117 l&stpa.ram ................ IPROC last p&ra.m (TEXT CONST new) I std p&ra.m : = new IENDPROC las t p&ra.m ; 118 119 128 121 122 std ...•.................. ITEXT PROC std I std p&ra.m IENDPROC std ; 12/3 I I I I I I I I I I command dialogue IF p&ra.m x ) 0 AND online THEN out (up) ; p&ra.m x TIMESOUT right out (p&ra.m pre) ; out (std p&ra.m) ; out (p&ra.m post) FI; std p&ram • IENDPROC last p&ra.m I I I IENDPACKET command dialogue COlIIIII&nd dialogue 12/3 Zeile 1 2 3 4 5 6 7 8 E LAN EUMEL 1.8 •••• 10.11.86 1(. ------------------- VERSION 2 thesaurushandling ........ PACKET thesaurus handling DEFINES TllESAURUS insert, delete, vorhanden· ) rename, vorhanden· ) CONTAINS, link , + + 10 11 12 13 name. get , highest entry I I I 14 15 16 17 ITYPE THESAURUS = TEXT (. aendert ein Element falls (. (. (. (. (. steUt fest, ob enthalten .) index in thesaurus .) name of entry .) get next entry (0. is eof)-) highest valid index of thes.) ; ILET thesaurus size = 200 nil = 0 , I niltext = max name length = 80 , I I 2e 21 22 23 I I I I I I I I I 24 25 26 27 28 29 30 31 ''''e'''' begin entry char end entry char nil entry nil name ""1 "" = ''''@''''1'''' , quote ITEXT VAH entry lINT VAH cache index : = 0 , 32 33 34 35 36 I cache pas ; I I access ................... IPROC access (TllESAURUS CONST thesaurus, TEXT CONST name) I I I I 39 40 41 42 43 44 45 46 I I I I 47 I I I construct entry ; IF NOT cache identifies entry THEN search through thesaurus list FI; IF entry found THEN cache index . - code (list SUB (cache pas - 1)) ELSE cache index : = 0 FI. 48 49 50 51 52 53 constructentry 54 55 searchthroughthesaurus Isearch through thesaurus list: I cache pas := pas (list, entry) 13/1 (* fuegt ein Element ein .) (. loescht ein Element falls I 18 19 56 06.93.86 ------------------- .) (* Autor: J.Liedtke .) empty thesaurus , 9 37 38 thesaurus handling Iconstruct entry I entry: = begin entry char I entry CAT name ; I decode invalid chars (entry, 2) I entry CAT end entry char . I I I thesaurus handling 13/1 EUMEL Zeile E LAN 57 58 59 cacheidentifiesentry + 60 61 62 entryfound 63 64 65 66 list 67 constructentry 84 cacheidentifiesindex + 87 88 89 entryfound 90 list 96 97 98 99 100 101 102 lentry found I I Ilist I IENDPROC I I I I I I I I I + 91 92 93 94 95 10.11.86 Icache identifies entry : I cache pos <) 0 AND I pos (list, entry, cache I I I I I 69 70 71 72 73 74 75 76 77 78 79 80 81 85 86 ........ thesaurus handling pos, cache pos + LENGTH entry) cache pos cache pos ) 0 . CONCR (thesaurus) access access .••••.•..••••••.••• IPROC access (THESAURUS CONST thesaurus, INT CONST index) 68 82 83 1.8 I I I I I IF cache identifies index THEN cache index : = index construct entry ELSE cache pos : = pos (list, code (index) + begin entry char} IF entry found THEN cache pos INCR 1 cache index : = index construct entry ELSE cache index : = 0 entry : = nil text FI FI. Iconstruct entry : I entry:= subtext (list, cache pos, pos I cache pos)} I I Icache identifies index : I subtext (list, cache pos-1, cache pos) I entry char . I I lentry found I I Ilist I IENDPROC I I I (list, end entry char, z code (index) + begin cache pos ) 0 . CONeR (thesaurus) access emptythesaurus ........... ITHESAURUS PROC empty thesaurus I I THESAURUS: I IENDPROC empty I I (""1 ftft) thesaurus thesaurus handling 13/2 Zeile E LAN 1. 8 EUMEL **** **** 10.11. 86 thesaurus handling 103 104 105 106 107 108 109 110 : = ....................... IOF : = (THESAURUS VAR dest, THESAURUS caNST source ) 111 insert ................... I FROC insert (THESAURUS VAR thesaurus, TEXT CONST name, INT VAR I index) + I I IENllOF := I I TEXT VAR insert name I I I I I 112 113 114 115 116 117 118 119 120 caNCR (dest) . - caNCR (source) . I insert name := name ; decode invalid chars (insert name, 1) ; IF insert name = "" OR LENGTH insert name ) max name length THEN index : = nil ; errors top ("Name ulUlulaessig") ELSE insert element FI . insert element : search free entry IF entry found THEN insert into directory ELSE add entry to directory if possible FI . insertelement 121 122 123 124 125 126 127 128 129 searchfreeentry 130 131 132 133 insertintodirectory 134 135 136 137 138 139 140 addentrytodirectoryifp Isearch free entry : I access (thesaurus, nil name) . I I I insert into directory : I change (list, cache pos + 1, cache I index:= cache index. I I Iadd entry to directory if possible : 141 142 143 144 145 146 147 148 addentrytodirectory I IF next free index <= thesaurus I THEN add entry to directory I ELSE directory overflow I FI. I I . Iadd entry to directory 149 150 151 directoryoverflow 152 153 entryfound I I I I I I I I pos, insert name) INT CONST next free index := code (list SUB LENGTH list) size list CAT begin entry char cache pos : = LENGTH list cache index : = next free index list CAT insert name ; list CAT end entry char + code (next free index + 1) index: = cache index . I 13/3 Idirectory overflow I index: = nil . I I Ientry found cache I index ) 0 . thesaurus handling 13/3 Zeile 154 155 156 157 158 159 E LAN list .*.. 1.8 10.11.86 Ilist : thesaurus handling CONCR (thesaurus) . I IENDPROC insert I decodeinvalidchars ....... IPROC decode invalid chars (TEXT VAR name, INT CONST start pas) : I I INT VAR invalid char pas : = pas (name, ww(')Wft, ftW31 ftft, start pas) I WHILE invalid char pas ) iii REP I change (na.me, invalid char pas, invalid char pas, decoded char) I invalid char pas := pas (name, ftft(')ftW, ftft31ftft, invalid char pas) I PER. 160 161 162 163 164 165 166 EUMEL decodedchar + I I Idecoded char I quote. 167 168 I 169 I quote + text( code (n&me SUB invalid char pas» IENDPIIOC decode invalid chars 170 171 172 173 174 175 176 177 178 179 insert ................... IPROC insert (THESAURUS VAR thesaurus, TEXT CONST name) 189 delete ................... IPROC delete (THESAURUS VAR thesaurus, TEXT CONST name, INT VAR I index) + I I I I I I I IENDPROC insert I I I I I 183 184 185 186 187 195 196 197 198 199 20e 13/4 FI . I 181 182 188 189 199 191 192 193 194 INT VAR index ; insert (thesaurus, name, index) ; IF index = nil AND NCYr is error THEN errors top ( ft THESAURUS-Ueberl&ufft ) access (thesaurus, name) ; index : = cache index ; delete (thesaurus, index) . IENDPROC delete I delete ................... IPROC delete (THESAURUS VAR thesaurus, INT CONST index) I I I I deleteentry access (thesaurus, index) IF entry found THEN delete entry I rr. I I Idelete entry I IF is last I THEN cut I ELSE set I I : entry of thesaurus off as much as passible to nil entry FI. thesaurus handling 13/4 + Zeile 201 202 E LAN EUMEL 1.8 settonilentry **** 10.11.86 thes80urus ha.ndling I set to nil entry : I cha.nge (list, c80che pos, c80che pos + LENGTH entry - 1, nil entry) I I I + 203 204 205 206 207 208 209 210 cutoff8osmucha.spossible Icut off 80S much 80S possible: I WHILE predecessor is 8olso nil entry REP I set c80che to this entry I PER; I list: = subtext (list, 1, ca.che pos - 1) I er80se c80che . 211 212 213 predecessorisa.lsonilen Ipredecessor is 8olso nil entry : I subtext (list, ca.che pos - 3, ca.che pos - 2) 214 215 216 setc8ochetothisentry I I nil entry . I I I set c80che to this entry I c80che pos DECR 3 . I I 217 218 219 era.sec8oche I er80se c80che : I c80che pos : = 0 ; I c80che index : = 0 I I 220 221 222 223 is18ostentryofthes8ourus lis l80st entry of thes80urus : I pos (list, end entry cha.r, c80che pos) 224 225 list 226 227 228 229 230 entryfound 231 232 233 I I I list Ientry found: IENDPROC delete I I CONTAINS ................. IBOOL OP CONTAINS (THESAURUS CONST thes8ourus, TEXT CONST na.me I I 235 236 237 I 13/5 c80che index ) nil . I I 242 243 244 245 246 247 CONCR (thes8ourus) . I I 234 238 239 240 241 LENGTH list - 1 . I I I entryfound IF na.me = nil text OR LENGTH na.me ) ma.x na.me length THEN FALSE ELSE 80ccess (thes8ourus, na.me) ; entry found Fl. lentry found c80che index) nil . I IENDOP CONTAINS I rena.me ................... IPROC rena.me (THESAURUS VAR thes8ourus, TEXT CONST old, new) I I rena.me (thes8ourus, link (thes8ourus, old), new} I IENDPROC rena.me I thes80urus ha.ndling 13/5 Zeile 248 + 249 250 251 252 253 254 255 256 257 258 259 260 E LAN **** 1.8 10.11.86 thesaurus handling rena.me ................•.. IPROC ren&me (THESAURUS VAH thesaurus, INT CONST index, TEXT CONST I new): I I I I I I I I changetonewna.me 261 262 263 264 265 266 EUMEL list I insert n&me : = new ; decode invalid chars (insert n&me, 1) ; IF insert na.me = "" OR LENOnI insert n&me TIIEN errorstop ("N&me unzulaessig") ELSE change to new n&me Fl. ) m&X na.me length Ichange I I I I to new name : access (thesaurus, index) ; IF cache index <) 0 AND entry TIIEN change (list, cache pos + 1, cache pos + LEIIGnI entry - 2, insert na.me) Fl. I I I Ilist I CONCR (thesaurus) IENDPROC ren&me ; I ..................... IINT I 267 268 269 270 271 272 273 link 274 275 276 277 278 279 na.me ...........•......... ITEXT PROC n&me (THESAURUS CONST thesaurus, INT CONST index) I I I 288 IENDPROC link ; I I I I IENDPROC na.me ; get ..............•....... IPROC get (THESAURUS CONST thesaurus, TEXT VAH na.me, INT VAH index) identifyindex 293 294 13/6 access (thesaurus, index) ; subtext (entry, 2, LEIIGnI entry - 1) . I 289 290 291 292 295 296 297 access (thesaurus, n&me) ; cache index . I 28E) 281 282 283 284 285 286 287 PROG link (THESAURUS CONST thesaurus, TEXT CONST na.me) tonextentry I I identify index ; I REP I to next entry I UNTIL end of list COR valid entry found PER . I I I identify index : I IF index = 0 I TIIEN cache index . = 0 ; I cache pos := 1 I ELSE access (thesa.urus, index) I Fl. I I Ito next entry : I cache pos : = pos (list, begin entry char, cache I IF cache pos ) 0 thesaurus handling pos + 1) 13/6 Zaile E LAN 298 299 3@0 301 302 303 getentry 304 305 306 307 308 309 310 EUMEL 1.8 **** I THEN ELSE I I FI . I I get entry get nil entry I I getnllentry Iget n11 entry I cache index : = 0 I cache pos : = 0 ; I index:= 0 311 I I I 313 314 endentrypos 315 316 endoflist 317 318 validentryfound 319 list name:::"" Iend entry pos lend of list I I Ivalid entry found name <) ,.., . CONCR (thesaurus) I list I 321 IENDPROC get I 322 highestentry ............. lINT PIloe highest entry (THESAUIIUS CONST thesaurus) I (0084081300 ) I 324 325 I 326 I I list code (list SUB LENGTH list) - 1 . I list 328 I 329 330 331 I 13/7 index = 0 . I 320 327 pos (list, end entry char, cache pos) I I I + thesaurus handling Iget entry I cache index INCR 1 I index :. cache index I name := subtext (list, cache pos + 1, end entry pos - 1) 312 323 10.11.86 CONCR (thesaurus) IENDPROC highest entry ; IENDPACKET thesaurus handling thesaurus handling 13/7 Zeile 1 2 3 4 5 6 **•• ELAN EUME1 .**. 1.8 1 (* ------------------- 1 all : 1 1 1LET 1 size nil 1 1INT VAR index ; *) *) 200 o; ITEXT VAR system write password := system read password .1 actual password 43 1 44 45 46 1 1 14/1 *) ftft , 1 1 59 *) *) *) *) 1 32 33 34 35 36 37 38 39 40 41 42 60 *) 1 22 52 53 54 ~ 56 57 58 *) t 1 23 24 25 26 27 28 51 -------------------Al. (* Autor: J.Liedtke 1 14 47 48 49 50 24.02.86 VERSION 2 create, (* neue lokale Datei einrichten new, (* 'create' und Datei liefern old, (. bestehende Datei liefern forget, (* lokale Date1 loeschen exists, (* existiert Datei (lokal)? status, (* setzt und liefert Status ren8JJIe, (* Umbenennung copy, (* Datenraum in Datei kopieren enter password,(* Passwort einfuehren write password , read password , write permission , read permission begin list, get list entry , 15 31 local ma.na.ger DEFINES 13 29 30 •••• localma.na.ger ************* PACKET local ma.na.ger 7 8 9 10 11 12 16 17 18 19 20 21 10.11.86 1 INITFLAG VAR this packet : = FALSE 1 IDATASPACE VAR password space ; 1 1BOUND ROW size STRUCT (TEXT write, read) VAR passwords 1 1 1THESAURUS 1 1ROW VAR dir : = empty thesaurus size STRUCT (DATASPACE ds, BOOL protected, TEXT status) VAR crowd 1 1nit1alizeifnecessary .... 1PROC 1ni tialize if necessary : 1 1 1 1 1 1 1 1 IF NOT in1 tialized (this packet) THEN system write password : = ftft system read password := ftft dir : = empty thesaurus ; password space : = nils pace passwords : = password space IT 1 1ENDPROC initialize if necessary 1 1 1 local ma.na.ger 14/1 E LAN Zeile 61 62 63 64 65 66 EUMEL 1.8 **** 10.11.86 local manager create ................... I PROC create (TEXT CONST name) I I IF exists (name ) I THEN error (name, I I "existiert bereits") index : = nil ELSE insert and initialize entry ~ lIT 68 I I I insert a.nd initialize entry I disable stop ; I insert (dir, name, index) I IF index <) nil I THEN crowd (index). ds : = nilspace I IF is error I THEN delete (dir, name, index) I LEAVE create I FI ; I status (name, "") ; I crowd (index). protected .' FALSE I ELIF NOT is error I THEN errorstop ("zu viele Dateien") I IT. I 69 70 71 insertandini tializeent 72 73 74 75 76 77 78 79 80 81 82 83 84 I ENDPROC create 85 I 86 new ...................... I DATASPACE PROC new (TEXT CONST name) I I I I I I 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 14/2 create (name) ; IF index <) nil THEN crowd (index). ds ELSE nils pace FI I I ENDPROC new I old ...................... IDATASPACE PROC old (TEXT CONST name) I I I I I space ini tialize if necessary ; index : = link (dir, name) IF index = 0 THEN error (name, "gibt es nicht") nilspace ELSE space FI . I I I I I Ispace I crowd (index).ds . I ENDPROC old ; I old ...................... IDATASPACE PROC old (TEXT CONST name, INT CONST expected type) I I I I ini tialize i f necessary ; index:= link (dir, name) IF index = 0 local manager 14/2 E LAN Zeile 1.8 I I I I I I I I I 115 116 117 118 119 120 121 122 123 124 125 126 EUMEL space **** 10.11.86 **** local manager THEN error (name, "gibt es nicht") ; nilspace ELIF type (space) <> expected type THEN errorstop ("Datenraum hat falschen Typ") nilspace ElSE space Fl. Ispace : crowd (index). ds . I IENDPROC old I 127 128 129 138 131 132 133 exists ................... IBOOL PROC exists (TEXT CONST name) 134 135 136 137 138 139 148 141 142 143 144 forget ••••••••••••••••••• IPROG forget (TEXT CONST name 145 146 147 148 149 150 151 152 153 154 155 156 forget 157 158 159 160 161 162 163 164 165 forget ••••••••••••••••••• I PROG forget : 14/3 I I I I in1 tialize i f necessary dir CONTAINS name IENDPROC exists I I I I I I I I I initialize if necessary say (""'''') say (name) THEN say (""" existiert nicht") IF NOT exists (name) ELIF yes (""" loeschen") THEN forget (name, quiet) FI . IENDPROC forget I ................... IPROC forget (TEXT CONST name, I I initialize if necessary; I I I I I I I QUIET CONST q) disable stop ; delete (dir, name, index) IF index < > nil THEN forget ( crowd (index). ds crowd (index).status := "" Fl. IENDPROC forget I I I I I I I BOOL VAR status . - command dialogue command dialogue (TRUE) ; forget (last param) ; command dialogue (status) IENDPROC forget I local manager 14/3 Zeile E LAN EUMEL 1.8 **** 10.11.86 10c8ol manager 166 167 168 169 170 171 172 173 174 175 status ..•.•••••••••...•.. IPROC status (TEXT CONST name, status text) 176 177 178 179 180 181 182 183 184 185 186 status •••••.•.....••••••• I TEXT PROC status (TEXT CONST name) 187 status ................... IPROC status (INT CONST pos, TEXT CONST status pattern) I I I I I I I I ENDPROC status I I I I I I I I I ini ti80lize i f necessary ; INT VAR index := link (dir, name) IF index ) 0 THEN crowd (index).status ELSE ftft FI I ENDPROC statUD I I 188 189 190 191 192 193 194 195 196 initi80lize if necess80ry ; INT VAR index: = link (dir, name) ; IF index) 0 THEN crowd (index). status : = date + ft ft + text (status text, 4) FI 8octu8olst8otus I I I I I I I I initi80lize if necessary ; INT VAR index := 0 ; WHILE index ( highest entry (dir) REP index INCR 1 ; replace (8octu8ol status, pos , status pattern) PER. l8octu8ol status: crowd (index).status . I 197 198 IENDPROC status ; 199 I 200 copy ••••......••.•••...•• I PROG copy (DATASPACE CONST source, TEXT CONST dest name) I I I I I I I 201 202 203 204 205 206 207 208 209 210 211 212 213 ~ 215 copyfile IF exists (dest name) THEN error (dest name, ftexistiert bereits ft ) ELSE copy file FI. Icopy I I I I I I I I file dis80ble stop cre80te ( dest name ) ; INT VAR index : = link (dir, dest name) IF index ) nil THEN forget (crowd (index). ds) ; crowd (index) .ds : = source IT 216 I ENDPROC copy 217 I 14/4 10c8ol manager 14/4 E LAN ZeUe EUMEL 1.8 *.*. 10.11.86 local manager 218 Z9 220 221 222 223 copy ..................... IPROC copy (TEXT CONST source name, dest name) 224 225 226 227 228 229 230 231 232 rename ................... IPROC rename (TEXT CONST old name, new name) : I I I copy (old (source name), dest name) IENDPROC copy I 2~ I I I I I I I I I 2M 235 236 I I IF exists (new name) THEN error (new name, "existiert bereits") ELIF exists (old name) THEN rename (dir, old name, new name) ; las t param (new name) ELSE error (old name, "gibt es nicht") rI. IENDPROC rename 237 238 239 240 241 242 243 beginlist ................ IPROC begin list : 244 245 246 247 248 249 250 251 getlistentry ............. IPROC get list entry (TEXT VAR entry, status text) 252 253 254 255 256 257 258 259 26e 261 262 263 264 265 266 267 268 14/5 I I I I initialize if necessary index:. 0 IENDPROC begin list I I I I I I I I found I get (dir, entry, index) ; IF found THEN status text : = crowd (index). status ELSE status text : = Fl. Ifound I : index ) 0 . IENDPROC get list entry I I wri tepassword ............ ITEXT PROC write password I r I system write password IENDPROC wrl te password I readpassword ............. ITEXT PROC read password I I I system read password IENDPROC read password I local manager 14/5 Zeile E LAN EUMEL 1.8 **** 10.11.86 local manager 269 270 271 272 273 274 275 276 277 278 enterpa.ssword ............ IPROC enter password (TEXT CONST password) I I I I I I I I I 279 I I I 280 ~1 ~2 ~3 284 285 286 ini tialize if necessary ; say (""3""5"") ; INT CONST slash pas := pos (password, "/") IF slash pos = 0 THEN system write password .' password ; system read password .' password ELSE system write password := subtext (password, 1, slash pas-1) system read password IENDPROC enter password I enterpassword ............ IPROC enter password (TEXT CONST file name, write pass, read pass) I I I ~7 INT CONST index : = link (dir, file name) IF index ) 0 THEN set protect password 288 I ~9 I FI. I I 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 ~ 309 310 311 312 313 314 315 316 317 318 319 320 14/6 .- subtext (password, slash pas+l) Fl. setprotectpassword Iset protect password I IF write pass = "" AND read pass I THEN crowd (index). protected : = I ELSE crowd (index). protected : = I passwords (index). wri te : = I passwords (index).read := I Fl. FALSE TRUE ; write pass read pass I IENDPROC enter password I passwordindex ............ lINT PROC password index (TEXT CONST file name) I I initialize if necessary I INT CONST index := link (dir, file name) ; I IF index ) 0 CAND crowd (index). protected I THEN index I ELSE 0 I FI I IENDPROC password index I readpermission ........... IBOOL PROC read permission (TEXT CONST name, supply password) : I I I (******************************** ...................................... ) I (* for reasons of data security the password check algorithm .) (* must not copy parts of the file password into variables *) ( * loco. ted in the standard da ta.space ! *) (*****. . . . . .*******.............................................. ) I I access file password ; I I local manager 14/6 Zeile E LAN + 322 readpasswordmatch 324 325 326 accessfi lepassword 327 filepassword 330 331 332 **** 10.11.86 file hes no password COR (supply password ma.tch) <) AND read password Iread password match I file password. read = supply password OR file password. read I I laccess file password I INT CONST pw index : = password index (name) . filehesnopassword Ifile password passwords (pw index) . I I Ifile has no password : pw index o. I 333 IENDPROC read permission 334 I 335 336 337 local ma.nager I I 328 329 1. 8 I I I I 321 323 EUMEL wrl tepermission .......... BOOL PRoo write permission (TEXT CONST name. supply password) : (************************. . .****** ..........***......**** ••******) 338 (* (* (* for reasons of data. security the password check algorithm *) must not copy parts of the file password into variables *) located in the s tanda.rd dB. ta.space ! *) (********.**********. . . . . . . . .***....................************.) 339 340 341 342 343 344 access file password ; file hes no password COR (supply password <> password ma.tch). AND write 345 346 347 348 wri tepasswordma tch 349 350 accessfilepassword 351 352 353 filepassword 354 filehasnopassword 355 356 357 358 359 360 361 + 362 363 Iwrite password ma.tch : I file password. write = supply password OR file password. write ••• I I laccess file password I INT CONST pw index . - password index (name) . I I Ifile password Ifile hes no password: pw index • 0 . I IENDPRoo write permission; I all ...................... ITHESAURUS PRoo all : I I I I I ini tialize if necessary THESAURUS VAR result := dir Compiler *) result (*ueberfluessig ab na.echstem I 364 IENDPROC all 365 I 14/7 passwords (pw index) . I I local manager 14/7 Zeile 366 367 368 369 :370 :371 :372 14/8 E LAN EUMEL 1.8 **** 10.11.86 100801 ma.nager error .................... IPROC error (TEXT CONST file name, error text) : I I errors top ("""" + file I IENDPROC error ; I IENDPACKET 100&1 manager local manager name + """ " + error text) 14/8 Zeile 1 2 + 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 + 38 39 + 40 + 41 + 42 43 44 45 46 47 48 w 50 M 52 15/1 E LAN EUMEL 1.8 ._. 10.11.86 pattern 111& tch (. Author: patternma.tch ............. IPACKET pattern III&tch DEFINES I P.Heyderhoff .) I I I I I I I I I I I I I I I I (. Date: 09.06.1986 ..OR, , any, notion, bound, III&tch, III&tchpos, III&tchend, somefix, UNLIKE, LIKE : I (.------- Operation codes of the internal intermoadiate language: I --------.) I ILET z ""e"" , I ""1""0"", stopz I ""2""9"", I closez ""2""0'''''3''''0'''' , I closor ""3"", or I "'''3''''5"'', oralpha I ""4""0""'4"''''0''''', open2 I ""5"''', alpha I ""5"'''0"'', I alphaz ""6""0"", lenz I any (0) "'''6''''0''''8''''0''''7''''@'''', nHz I ""7""0"", starz I ""8""0""2""7""0""1""8"", star I ""8""9"", powerz I ""8""0""1"", I powerz9 ""9""0"", I notionz ""10""8"", fullz I I boundz ""11""0""; I (.---------------------------------------------------------------I -----.) I ILET undefined = 0, I value .) forcer = 0, I parameter •) I I delimiter = " !""_SU'( )*+,-./: ; ( E ) ? notion' .) I (. fixleft (. value ... _ ' - " ; (. for 'PROC I - ........................ ITEXT OP - (TEXT CONST alphabet ): I I I I p:= ""; INT VAR j; FOR j FROM 0 UPTO 255 REP I I I I I IF pos(alphabet,code(j» THEN P CAT coder j) IT PER; P ENDOP pattern III&tch 15/1 Ze1le E LAN EUMEL 1.8 *... 10.11.86 pattern III&tch 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 OR ....................... ITEXT OP OR (TEXT CONST a., b): I I open2 + notnil (a.) + closor + notnil (b) + closez ENlXlP OR; I ....................... I TEXT OP •• (TEXT CONST p, INT CONST x): I I I powerz + code (l+x) + notnil (p) + stopz ENlXlP **; ITEXT CONST a.ny:= sta.rz; I a.ny ...................... I TEXT PROC a.ny (INT CONST n): I TEXT VAR t:=" "; I repla.ce (t, 1, ABSn); I lenz + t + sta.rz I ENDPROC a.ny; I 70 71 a.ny ...................... I TEXT PROC a.ny (TEXT CONST a.): a.lpha.z + a. + 72 73 74 75 76 77 a.ny ...................... I TEXT PROC a.ny (INT CONST n, TEXT CONST a.): I TEXT VAR t:=" "; I replace (t, 1, ABSn); I lenz + t + a.lpha.z + a. + sta.rz I ENDPROC a.ny; 78 not1on ................... I TEXT PROC notion (TEXT CONST t): notlonz + notnil(t) + stopz DIIlPROC I notion; 79 ae 81 82 83 M 8:i 86 87 88 89 ge 91 92 93 94 15/2 S ta.rz ENDPROC a.ny; I I I notn1l ................... I TEXT PROC notn1l (TEXT CONST t): I IF t = ftft I TIIDI n1lz I EISE t I IT I ENDPROC notnil; I I TEXT CONST bound :. boundz; I full ..................... I TEXT PROC full (TEXT CONST t): fullz + t + stopz ENDPROC full; I III&tch .................... ITEXT PROC III&tch (INT CONST x): I subtext (p, ma.tchpos(x), ma.tchend(x)) I ENDPROC ma.tch; I pattern ma.tch 15/2 Zaile 95 E LAN II1II. tchpos + EUMEL 1.8 I IIIII.tchend ••••••••••••••••• 1INT !'ROC IIIII.tchend (INT CaNST xl: maend (1 + x MOD 256) - 1 I ENDPROC ma tchend; 98 I 99 100 1(*----------------- GLOBAL VARIABLES: + 101 102 103 + 104 + 105 + 106 + 107 108 I I -----------------------------------*) IROW 256 INT VAR I I I I I I I I I lINT (* Table of match registers. Each entry consists of two *) (* pointers, which points to the TEXT object 't' *) mapos, (* points to the beginning of the match maend; (* points to the position after the end of match VAR ppos, tpos, I *) 109 I floatpos, + I I I I I I I I I I + 110 + 111 + 112 + 113 + 114 115 I 116 I I I I I I I + + 118 + 119 120 + 121 + 122 123 124 125 + 126 127 128 129 130 131 132 + 1~/3 (* workpositions in pattern 'p' and text 't' (* a.ccumulation of all pending float lengths *) failpos, (* result of ' PROC in alpha' plen, tlen, (* length of pattern 'p' and length of text 't' *) (. for track forward skipping skipcount, *) multi, v&ri; (. for handling of nonexclusive a.lternatives *) (* the pattern to be find or some result ITEXT VAR p, + 117 pattern IIIII.tch 10.11.86 ................. I INT PROC II1II.tchpos (INT CaNST x): IIIII.pos (1 + x MOD 256) ENDPROC I matchpos; 96 97 **** *) (. stack of pending aSSignments stack, *) alphabet:=""; ( .. result of 'PROC find alpha', reset to nil *) ( .. after its usage by , find any' .. ) IBOOL VAR fix, ( .. text position is fixed and not floating I I I ( .. not variing the order of alternatives *) no vari; I some fix ........•......... ITEXT PROC some fix (TEXT CONST pattern): I I I I I I I I I I I (* delivers the first text occuring unconditionally in the pattern *) p: = pattern; INT VAR j:= 1, n:= 0, k, len:= LENGTH p; REP SELECT text( subtext (p, j, j+1), 2) ISUB 1 OF CASE 1,3,7,9,10,11: J INCH 2 CASE 2: j INCH 2; n DECR 1 ( .. condition closed pattern match 15/3 Zeile E LAN 1.8 -** EUMEL .) + CASE 5: CASE 6: CASE 8: OTHERWISE 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 159 160 161 + 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 15/4 INCR 2; n INCR 1 (* condition opened CASE 4: 133 153 154 155 156 157 158 pa.ttern m&tch 10.11.86 j := pos (p, sta.rz, J+2) + 2 j INCR 4 j INCR 3 k:= pos(p, z, J+l) - 1; IF k <= 0 THEN k:= 1+1en FI; IF star found THEN change (p, starpos, starpos, sta.r); len:= LENGTH p; k:= starpos FI; IFn= 0COO(pSUBk) <>orCOOk, THEN LEAVE somefix WITH suhtext(p,j,k-l) ELSE j: =k FI ENDSELECT j ) len UNTIL PER; star found: INT VAR starpos:= pos (p, "-", j); starpos ) 0 COO sta.rpos <. k . sta.rfound ENDPROC somefix; skip •................•... IPROC skip (TEXT CONST p, BOOL CONST upto or): I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I (. skips 'ppos' upto the end of the opened nest, n • nesting level *) INT VAR n:. 0; REP SELECT text (subtext (p, ppos, ppos+l), 2) ISUB 1 OF IF n. 0 CASE 1,2: THEN LEAVE skip FI; ppos INCR 2; nDECRl IF n. 0 COO upto or CASE 3: THEN LEAVE skip FI; ·ppos INCR 2 CASE 7: ppos INCR 2 CASE 4,9,10,11: ppos INCR 2; n INCR 1 ppos:. pos (p, sta.rz, ppos+2) CASE 5: ppos INCR 4 CASE 6: ppos INCR 3; CASE 8: n INCR 1 ppos:. pos(p, Z, ppos+l) - 1; OTHERWISE IF ppos < 0 THEN ppos:. plen; LEAVE skip FI ENDSELECT + 2 PER ENDPROC skip; pa.ttern m&tch 15/4 E LAN Zeile EUMEL 1.8 •••• 10.11.86 pattern match 190 191 UNLIKE ................... IBOOL OP UNLIKE (TEXT CONST t, p): NOT ( t LIKE P ) ENOOP UNLIKE; I ~2 193 194 195 196 197 LIKE ..................... IBOOL OP LIKE (TEXT CONST t, pattern): I init; I OOOL CONST found:= find (t,l,l, fixresult, floatresult); I save; I found. 196 199 200 201 202 203 204 205 206 init 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 + 2~ 229 230 + 231 232 233 234 235 236 237 238 239 240 15/5 save I I I init: no vari:= TRUE; I vari:= 0; I tlen:= 1 + LENGTH t; I p: = full (pattern); I IF pos (p, hound) ) 0 I THEN I IF subtext (p, 14, 15) = bound I THEN p:= subtext (p, 1, 8) + powerz0 + subtext (p, I 16) I FI; I plen: = LENGTH p - 7; I IF subtext (p, plen, plen+l) = bound I THEN p:= subtext (p, 1, plen - 1) + stopz + stopz I FI; I FI; I plen:= LENGTH p + 1; I INT VAR fixresult, floatresult; I tpos:= 1; I floatpos:= 0; I stack:= ""; I alphabet: = ""; I fix: = TRUE; I skipcount:= 0; I multi:: 0. I I I save: p: = t I I ENOOP LIKE; I I (.-------- Realisation of the pattern matching a~orithms 'find' I --------.) I find ..................... IOOOL PROC find I (TEXT CONST t, INT CONST unit, from, INT VAR fixleft, I floatlen): I I I I I I I I I I ini tialize; BOOL CONST found:= pattern SELECT next command. unit CASE 0,1,2: CASE 3: OTHERWISE ENDSELECT . pattern match unit; OF found next; find al terna ti ve find concatenation 15/5 E LAN Zeile EUMEL 1.8 **** pattern match 10.11.86 find alternative: IF found THEN save left posi tion; backtrack; IF find pattern CAND better THEN note multiplicity ELSE back to first one FI Eo'LSE backtrack multi 241 242 243 244 245 246 247 248 249 250 251 findalternative 252 253 better better: permutation XOR more left. 254 255 permutation permutation: vari MOD 2 256 257 saveleftposi tion save left position: j:: fixleft. 258 259 more left more left: j > fixleft. 260 261 262 263 backtrackmulti backtrack multi: multi:: 2 * backmulti + 1; vari:: backvari DIV 2; find pattern. 264 notemul tiplici ty note multiplicity: multi:: 2 * multi + 1; vari:: vari DIV 2; TRUE. backtofirstone back to first one: backtrack; IF find first subpattern THEN skip (p, FAUlE); note multiplicity ELSE errorstop ("pattern"); FAUlE FI. 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 1. Flo findconca tenation find conca tenation: IF found THEN IF ppos:plen COR find pattern COR track forward COR ( multi > backmulti CAND vari • 0 CAND find variation ) + 280 281 282 THEN TRUE ELSE backtrack; FAUlE 283 284 ELSE skip (p, TRUE); FAUlE FI Flo 285 286 + 287 288 289 290 291 15/6 trackforward track forward: variation *) (* must be performed before j::0; last multi:: multi; last vari:= vari; WHILE skipcount : 0 REP IF tlen : tpos pattern match 15/6 Zeile E LAN EUMEL 1.8 **** 10.11.86 pat tern ma.tch TIIEN LEAVE track forward WITH FALSE FI; backtrack; 292 293 294 295 296 297 298 299 J INCR 1; skipcount: = j UNTIL find first subpattern CAND find pattern PER; j: = skipcount; skipcount:=0; j=0. 3@0 301 302 findvariation find variation: multi:= last multi; vari:= last vari; FOR k FROM 1 UPTO (multi+1) DIV (backmulti+l) - 1 REP backtrack with variation; IF find first sUhpattern CAND find pattern THEN vari: =0; LEAVE find variation WITH TRUE FI PER; FALSE. 315 316 317 318 backtrackwi thvariation backtrack wi th variation: backtrack; vari:= k. 319 findpattern find pattern: find (t, 1, ppos+forcer, fixresult, floatresult) CAND keep result. findfirstsubpattern find first subpattern: find (t, 0, from, fixresult, floatresult) CAND keep result initialize in1 tialize: INT VAR 303 304 305 306 307 308 309 310 311 312 313 314 320 + 321 322 323 324 325 326 327 j, k, fixresult, floatresult, last multi, last vari; BOOL CONST backfix: = fix; TEXT CONST backstack:= stack; floatlen: = 0; INT CONST back: = tpos, backfloat:= floatpos, backskip:. skipcount, backmulti: = multi, backvari : = vari; fixleft: = fixleft0. 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 15/7 fixleft0 fixleft0: IF fix TIIEN back ELSE undefined FI. pattern match 15/7 E LAN Zeile 344 345 346 347 348 349 350 backtrack: fix: = backfix; tpos:: back; fixleft:: fixleft0; floatlen:= 0; floa tpos :: backfloat; stack:: backstack; skipcount:= backskip; multi:: backmul ti; vari:: backvari. keepresult keep result: IF fix left = undefined THEN IF fixresult: undefined THEN floatlen INCR floatresult ELSE fixleft : = fixresult - floatlen; floatpos DECR floatlen; floatlen: = 0 352 353 354 356 357 358 359 360 361 362 363 364 365 366 367 FI FI; TRUE. pat ternuni t 368 369 370 371 372 373 374 375 376 377 378 379 pattern unit: init ppos; SELECT command OF CASE 1,2: CASE 3: CASE 4: CASE 5: CASE 6: CASE 7: CASE 8: CASE 9: CASE 10: CASE 11: OTHERWISE find end find nil find choice find alphabet find fixlength any find var length any find and store match find notion find full next; find nil find plain text SELECT. + 381 pattern match 10.11.86 backtrack 351 355 EUMEL 1.8 **** initppos init ppos: ppos:: from + 2. COllllll8.nd command: text (subtext (p, from, from+l), 2) ISUB 1. nextcommand next command: text (subtext (p, ppos, ppos+l), 2) ISUB 1. next next: ppos INCH 2. findend find end: ppos DECR 2; fixleft:: tpos; LEAVE find WITH TRUE; TRUE. findnil find nil: ppos DECR 2; fixleft: = tpos; TRUE. 382 385 386 387 388 389 399 391 392 393 394 395 396 15/8 pattern match 15/8 ZeUe ..... E LAN EUMEL 1.8 .... 10.11.86 •••• pattern match 397 findchoice find choice: 403 404 405 406 407 408 f1ndplaintext find plain text: find text upto next conunand; THEN allow fix position only IF fix ELIF text found THEN allow variable position ELSE allow backtrack Flo 409 findtextuptonextconunan find text upto next command: ppos:= pos (p, z, from + 1); IF ppos = 0 THEN ppos: = plen ELSE ppo s DECR 1 FI; IF star found THEN change (p, starpos, starpos, star); plen:= 1 + LENGTH p; ppos:= starpos FI; tpos:= pos (t, subtext (p, from, ppos - 1), tpos). 422 423 424 425 starfound star found: INT VAR starpos:= pos (p, ft.ft, from); starpos ) 0 CAND starpos < = ppos . 426 textfound text found: WHILE skipoount ) 0 CAND tpos ) 0 REP skipcount DECR 1; tpos:= pos (t, subtext(p,from,ppos-l), tpos+l) 398 399 400 401 402 410 411 412 413 414 415 416 417 418 419 420 IF find pattern THEN next; TRUE ELSE next; FALSE Flo 421 427 428 429 430 431 PER; tpos ) 0 . 432 433 allowfixpos1 tiononly allow fix pos1t1on only: IF tpos = back THEN tpos INCR (ppos-from); TRUE ELSE tpos:, back; from = ppos Flo allowvariablepos1tion allow variable pos1 tion: IF alphabet = ftft COR 1n alpha (t, back, tpos) THEN fix it; tpos INCR (ppos-from); TRUE ELSE tpos:= back; FALSE Flo 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 15/9 pattern match 15/9 Zeile E LAN 449 450 451 452 453 454 455 456 anowba.cktrack 457 findalphabet EUMEL 1. 8 pattern match allow ba.cktrack: tpos:= ba.ck; IF from = ppos THEN fix it; TRUE 459 460 461 462 find alphabet: j:= pos (p, starz, ppos); alphabet:= subtext (p, ppos, j-l); ppos := j; TRUE. findfixlengthany find fixlength any: get length value; find alpha attribut; IF alphabet = "" THEN find any with fix length ELSE find any in alphabet with fix length FL getlengthvalue get length value: floatlen:= subtext(p, ppos, ppos+l) ISUB 1; ppos INCR 4. findalphaa ttri bu t find alpha attribut: IF (p SUB (ppos-2)) THEN next FL 464 465 466 467 468 469 470 471 472 473 10.11. 86 ELSE FALSE FI . 458 463 **** 474 475 476 477 478 alpha CAND find alphabet 479 480 findanywi thfixlength 481 482 483 484 485 486 487 488 + find any wi th fix length: tpos INCR floatlen; IF tpoS) tlen THEN tpos:= ba.ck; floa tlen: =0; FALSE ELSE IF fix THEN floatlen:= 0 ELIF floatlen = 0 THEN fix it 490 TRUE 491 492 493 495 496 497 498 499 unlike nil text 6. 6 . ELSE floatpos INCR floa.tlen FI; 489 494 (* *) FL findanyinalphabetwithf find any in alphabet with fix length: IF first chara.cter in alpha THEN IF NOT fix THEN fix it FI; set fix found ELSE set fix not found FL 500 15/10 pattern match 15/10 Zeile **** E LAN EUMEL 1.8 **** 10.11.86 **** pattern ma.tch 501 502 503 firstcharacterinalpha first cha.ra.cter in alpha: (fix COR adva.nce) CAND in a.lpha (t, tpos, tpos+floatlen). 504 505 506 507 508 509 510 advance advance: FOR tpos FROM back UP1'O tlen REP IF pos (alphabet, t SUB tpos) ) 0 THEN LEAVE advance WITH TRUE FI PER; FALSE. 511 512 513 514 515 516 fixit fix it: fixleft:= back-floatpos; make fix (back); fix left : = tpos. 517 518 519 520 521 522 setfixfound set fix found: tpos INCR floatlen; floa.tlen: = 0; a.lphabet:= ""; TRUE. 523 setfixnotfound set fix not found: tpos:= back; alphabet:= ""; floatlen: = 0; FALSE. 528 529 530 531 532 findvarlengthany find va.rlength any: IF alphabet = "" THEN really any ELSE find varlength any in alpha.bet 533 reallyany 524 525 526 527 FI. really any: 537 IF fix THEN fix:= FALSE; fixleft:. tpos ELIF floa. tpos • 0 THEN fixleft:= tpos + 538 FI; 534 535 536 TRUE • 539 540 541 542 543 544 findvarlengthanyinalph 545 546 547 find va.rlength a.ny in a.lphabet: IF fix THEN fixleft . - tpos FI; IF fix CAND pos (alphabet, t SUB tpos) ) 0 COR NOT fix CAND adva.nce THEN IF NOT fix THEN fix it FI; set var found ELSE set var not found FI. 548 549 550 setvarfound set var found: 551 552 111/11 (. 6.6. pattern ma.tch tpos:. end of varlength a.ny; a.lphabet:= ""; TRUE. 15/11 E LAN Zeile EUMEL 1.8 •••• 10.11.86 pat tern match 553 554 555 setvarnotfound set var not found: 556 557 558 559 560 endofvarlengthany end of varlength any: IF NOT in alpha(t,tpos,tlen) THEN failpos ELSE tlen Flo 561 562 563 findandstorematch find and store match: get register name; IF find pattern THEN next; store; TRUE ELSE next; FALSE Flo store store: IF fix THEN mapos (reg):. fixleft; maend (reg): = tpos ELSE stack CAT code(floatlen) + code(floatpos) + code( fixleft) + c Flo getregistername get register name: TEXT CONST c:= p SUB (ppos); INT VAR reg:. code (c); 564 565 566 567 568 tpos:= back; alphabet: = ""; FALSE. 569 570 571 572 573 574 + 575 576 577 578 579 ppos INCR 1. 580 581 582 583 findnotion find notion: 584 floatnotion float notion: float notion; exhaust notion j:= back; REP IF find pattern THEN IF is notion (t, fixleft) THEN LEAVE find notion WITH TRUE ELIF baekfix THEN LEAVE float notion ELSE go ahead FI ELIF j=back THEN next; LEAVE find notion WITH FALSE ELSE LEAVE float notion FI 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 PER. goahead go ahead: simple simple: j INCR 1; IF simple THEN j: = max (tpos, j) FI; notion backtrack. 600 601 602 603 604 605 15/12 k:= from; REP k := pos (p, z, k+2); IF k > ppos-3 THEN LEAVE simple WITH TRUE pattern match 15/12 Zeile E LAN EUMEL 1. 8 **** pattern match 10 .11. 86 ELIF pos (oralpha. p SUll k-1) ) 0 mEN LEAVE simple WIn! FALSE FI 696 697 698 609 610 PER; FALSE. 611 612 613 614 615 616 617 618 619 notionb&cktrack notion backtrack: tpos: = j; fix: = backfix; fixleft: = fixleft0; floatlen:= 0; floatpos:= backfloat + tpos - back; stack:= b&ckstack; ppos: = from + 2 . 620 exhaustnotion exhaust notion: IF COR CAND CAND 621 622 623 624 625 626 627 628 notion expansion multi) backmulti no vari notion variation THEN TRUE ELSE backtrack; FALSE FI. notionexpansion notion expansion: j: = 0; multi:= last multi; vari:. last vari; WHILE skipcount = 0 REP skip and try PER; j: = skipcount; skipcount:= 0; j = 0. skipandtry skip and try: 629 630 631 632 633 634 635 636 637 638 639 640 641 642 backtrack; j INCR 1; 644 645 skipcount: =j; ppos: = from + 2; IF find pattern mEN IF is notion (t. fixleft) mEN LEAVE find notion WIn! TRUE FI ELSE next; LEAVE find notion WIn! FALSE 646 FI. 643 647 648 649 550 551 652 553 554 555 655 557 notionvariation notion variation: no vari: = FALSE; last multi:. multi; las t vari: = vari; FOR k FROM 1 UPI'O (multi+l) DIV (backmulti+l) - 1 REP backtrack IIi th variation; IF find first subpattern mEN no vari:= TRUE; LEAVE find notion WIn! TRUE FI PER; 658 no vari::e TRUE, 659 669 FALSE. 15/13 pattern match 15/13 Zeile 661 E LAN **** 10.11.86 pattern me.tch find full: find pattern COO (end of line COR exhaust line). endofline end of line: next; IF fix THEN tpos = tlen ELSE tpos: = tlen; make fix (1); TRUE 669 670 671 672 673 674 1.8 findfull 662 663 664 665 666 667 668 EUMEL FI. exhaustline 675 676 677 678 exhaust line: IF full expansion COR multi ) 0 CAND no vari CAND full variation THEN TRUE ELSE backtrack; FALSE FI. 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 fullexpansion 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 full variation full expansion: j:=0; last multi:. multi; last va.ri: = vari; WHILE skipcount = 0 REP IF tlen = tpos THEN LEAVE full expansion WITH FALSE FI; backtrack; j INCR 1; skipcount: = j; ppos:.from + 2 UNTIL find pattern CAND tpos.tlen PER; j: = skipcount; skipcount:=0; j=0. full variation: no vari:= FALSE; multi: = last multi; vari:= last vari; FOR k FROM 1 UPTO multi REP backtrack with variation; IF find first subpattern THEN no vari: = TRUE; LEAVE find WITH TRUE FI PER; no vari: = TRUE; FALSE. ENDPROC find; 713 714 715 isnotion ................. IBOOL PROC is notion (TEXT CONST t. INT CONST t'ixleft): I ppos INCR 2; I ( NOT fix 15/14 pattern me.tch 15/14 Zeile E LAN EUMEL 1.8 **** COR COR COR COR CAND CAND ( COR COR COR CAND 716 717 718 719 72G 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 10.11.86 pattern match tpos = tlen pas (delimiter, t SUB tpos) ) 0 pos (delimiter, t SUB tpos-f) ) 0 (t SUB tpos) <= "z" (t SUB tpos-1) ) "Z" fixleft < = 1 pas (delimiter, t SUB fixleft-1) ) 0 pos (delimiter, t SUB fixleft) ) 0 (t SUB fixleft) ) "Z" (t SUB fixleft-l) <= "Z" END PROC is notion; makefix .................. I PROC make fix (INT CONST back): WHILE stack not empty REP INT VAR reg: = code (stack SUB pos:= code (stack SUB len: = code (stack SUB dis:= code (stack SUB maend(reg):= min (tpos + diS, + top), top-1), top-3), top-2) - floatpos; tlen); (* 6.6. *) 736 737 mapas(reg):= pos or fix or float; stack:= subtext (stack,l,top-4) 7~ PER; 739 740 fix: = TRUE; floatpos:= 0 741 742 743 744 stacknotempty stack not empty: INT VAR top:. LENGTH stack; toP) 0. 745 746 747 748 749 750 751 752 753 754 755 posorfixorfloat pos or fix or float: IF pos = undefined THEN IF len = 0 THEN min (back + dis, tlen) ELSE maend(reg) - len FI ELSE pos 756 757 758 759 760 761 762 763 764 765 + 766 767 15/15 FI. ENDPROC make fix; inalpha .................. IBOOL PROC in alpha (TEXT CONST t, 1NT CONST from, to): I FOR failpos FROM from UPl'O to - 1 I REP IF pos (alphabet, t SUB failpos) • 0 I THEN LEAVE in alpha WITH FALSE I FI I I I PER; TRUE ENDPROC in alpha; I notion ................... I TEXT PROC notion (TEXT CONST t, INT CONST r): notion (t) I ENDPROC notion; r I IENDPACKET pattern match; pattern match 15/15 Zeile 1 2 3 4 5 6 7 E LAN EUMEL 1. 8 --- 1(. ------------------- FILE, :"', U c~", 13 14 putline, getline, ~ ~t, ~ gd, H ~~, 18 19 32 line, reset, down, up, downety, uppety, pattern found, to first record, to line, to eof, insert record, delete record, read record, wri te record, is first record, ~ ~f, 22 23 24 25 26 27 28 29 30 31 34 line no, 35 mANGE, 36 set range, reset range , remove, c lear removed, reinsert, ma.x line length, edi t info, line type , copy attributes, headline, put tabs, get tabs, 37 ~ 39 40 41 42 43 44 45 46 47 ~ ~l, 49 word, at, removed lines, exec, ~e 51 52 53 54 55 56 pes , 58 len, subtext , change, lines, segments , 59 m&rk , ~7 60 oaa.rk line no , 61 m&rk 62 16/1 02.86.86 ------------------- .) (. Autoren: J. Liedtke , D.Martinek .) ( ***..* ..... ) 8 9 10 11 21 VERSION 3:i filehandling _•••• _ •••••• PACKET file handling DEFINES sequential file, reorganize, input, output, modify, 29 file handling 10.11. 86 col, set rna.rked range , file handling 16/1 Zeile -- E LAN EUMEL 1.8 _.. 10.11.86 •••• file ha.ndling split line, conca.tena te line , prefix, sort , lexsort : 63 64 65 66 67 68 69 70 (......**.....***................**.****........................~ -) 71 .) + (• 72 .) + 73 74 75 76 77 78 + 79 + 80 81 82 83 1(· I 1(* I 1(. I 1(· I 1(· I 1(· I 1(· I I (I 1(· I 1(* 89 90 91 92 93 + 94 95 + 96 + 97 16/2 I Die einzelnen Atome ha.ben zwar eine Position im Row, a.ber in dieser Betrachtung keine .) logische Reihenfolge. *) *) ATOM -) Ba.siselement, ka.nn eine Zeile der Da.tei und die zugehoerige Verwa.ltungsinformation a.ufnehmen .) CHAIN .) SEXlMENT I 1(· I 1(· I 1(I 1(· I 1(· I 1(· I I (* I .) I 1(I 1(I 1(I 1(· I *) 1(- Menge a.ller Atome eines FILEs. .) *) I (- 88 ATOMROW .) I 85 + .) *) 1(* 1(* 87 .) I 84 86 Terminologie: Zyklisch geschlossene Kette von Segmenten. Tellbereich des Atomrows, enthael t 1 oder mehr zusa.mmenhaengende Atoms. .) Jedes Segment ha.t ein Vorga.enger- und ein .) Nachfolgersegment. *) Jades Segment enthaelt einen logisch zumsammen- -) ha.engenden Teile einer Sequence. *) .) S~UENCE Logische Folge von Lines. *) Jede Sequence ist Teil einer Cha.in oder besteht vollsta.endig dara.us: *) *) SEG1--SEG2--SEG3--SEG4--SEG5 *) :----sequence----: *) file ha.ndling 16/2 Zeile 98 99 100 1(')1 1(')2 103 1(')4 1(,)~ + 1(')6 1(')7 + 1(')8 E LAN EUME!. 1.8 •••• 1(· I 1(· I 1(· 112 113 114 115 116 117 + 118 + 119 Ein Atom als Element ein Sequence betrachtet. j(. I 1(· I 1<··....·······**·······..· ..·**********·................•••......• ... I •• ) I{· I I (. Eigenschaften: I .) 1(* + Sequence. I 1(· I 1(· I I 1(· I 1(· I 1(· I 1(· I 1(· I 1(· I 1(· I 1(· I 1(· I 1(· 111 file handling Lines ist eine wesentliche Eigenschaft einer 1(· + + _ •• Die 'Reihenfolge' ebenso wie die 'Anza.hl' der I 1(')9 11(') 10.11.86 .) Folgende Mengen bilden eine Zerlegung (im math. Sinn) einer .) gesamten Datei: .) used segment chain scratch segment chain free segment chain unused tail .) Fuer jedes X aus (used, scratch, free) gelten: .) 'X sequence' ist echte Teilmenge von 'X segment chain'. .) 120 121 (D&raus folgt, es gibt keine leere 'chain'.) .) + 122 .) 123 'X segment chain' ist zyklisch gekettet. .) + 124 .) + 125 AHe Atome von 'X segment chain' h&ben definierten Inh<. + 126 + 127 128 129 16/3 1(· I .) 1<·........................•..........••..................................·····1111 ••••••• I I I •• ) file handling 16/3 Zeile E LAN 130 131 132 133 1M 135 136 137 138 139 140 141 142 143 144 145 1.8 **** EUMEL = 4075 ILET file size nil I I I I I I I I + 148 149 150 151 152 = 0 , free root scratch root used root first unused 1 2 3 = 4 ILET SEQUENCE = STRUCT (INT index, segment begin, segment end, I I I I I ATOM ATOMROW INT line no, lines), STRUCT (INT succ, pred, end), • STRUCT (SEXlMENT seg, INT type, TEXT line), = ROW filesize ATOM, LIST = STRUCT (SEQUENCE used, INT prefix lines, postfix I I I I I I I 146 147 file handling 10.11.86 SEXlMENT lines, SEQUENCE scratch, free, INT unused tail, INT mode, col, limit, edit 1nfo, m&rk line, mark col, ATOMROW atoms); ITYPE FILE = BOUND LIST ; I ITYPE FRANGE = STRUCT (INT pre, post, BOOL pre was split, post was I split); I I 153 154 155 156 157 158 159 .- 160 161 162 163 164 := ....................... IOP := (FILE VAH left, FILE CONST right): 165 166 167 168 169 170 becomes .................. IPROG becomes (INT VAH a, b) 171 172 173 174 175 176 177 initialize ............... IPROG initialize (FILE VAH f) : + 178 179 16/4 ....................... IOP : = (FRANGE VAH left, FRANGE CONST right): I CONCR (left) := CONCR (right) IENlXlP . - , I I I EXTERNAL 260 lEND OP .-, I I I INTERNAL I a: = b 260 ; IEND PROC becomes; I I I I l' . used : = SEQUENCE : (used root, used root, used root, 1, El); I f.prefix lines := 0; I f.postfix lines := 0; I f . free : = SEQUENCE (free root, free root, free root, 1, e) ~ I f . scratch : = SEQUENCE ( scratch root, seratch root , scratch I root, 1, 0); I f . unused tail : = first unused; I file handling 16/4 E LAN Zeile EUMEL 1.8 INT VAH i; FOR i FROM 1 UPI'O 3 REP root (i). seg := SEGMENT root (i). line : = put tabs (f, "") . root Iroot : f . atoms . I IEND PROC initialize; I I 1(*******·******. . . .·******..• ....·**··**********·********···· ........ I + I .) I 1(· I .) 1(. + 201 + Segment Handler I I + 203 & CHAINs) .) .. ) segs ..................... lINT PROC segs (S~UENCE CONST s, ATOMROW CONST atom) I I I I I I I I I 208 209 210 211 212 213 214 215 216 INT VAH number of segments : = 0 , actual segment : = s. segment begin REP number of segments INCR 1 actual segment : = a tom (actual segment). seg. succ UNTIL actual segment • s. segment begin PER ; number of segments IENDPROC segs ; I I nextsegment .............. IPROG next segment (S~UENCE VAH s, ATOMROW CONST atom) I I d1sable stop; I s . line no INCR (s. segment end - s. index + 1); I INT CONST ne\l segment index : = actual segment. succ; I s . segment begin : = ne\l segment index; I s . segment end : = ne\l segment. end; I s . index . - ne\l segment index • I I actualsegment nll\lsegment lactual segment I Ine\l segment: atom (s.segment begin).seg . atom (ne\l segment index).seg 228 I 229 IEND PROC next segment; 16/5 (SEGMENTs 1(**······..·····****···****···...··........·••·..•..•....•........... 202 227 •• ) 1(· 200 226 (i, i, 1); PER; 199 217 218 219 220 221 222 223 224 225 file handling f.col := 1 ; f. mark line : = 0 ; f.mark col := 0 ; + 204 205 206 207 10.11.86 f.limit := 77; t.edit info := 0; 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 _.. file handling 16/0 Zeile E LAN EUMEL 1.8 **** rile handling 10.11.86 2:30 231 232 233 234 235 236 237 238 239 240 241 242 M3 244 245 246 247 248 249 250 251 252 253 previoussegment .......... IPROC previous segment (S~UENCE VAR s, ATOMROW CONST atom) I I disable stop; I s . line no DEeR (s. index - s. segment begin + 1); I INT CONST new segment index :. actual segment.pred; I s . segment begin . - new segment index; I s . segment end . = new segment. end; I s . index . - s. segment end . actu&lsegment newsegment I I lactual segment atom (s.segment begin) .seg . I Inew segment: atom (new segment index).seg I IEND PROC previous segment; I I splHsegment ............. IPROC split segment (S~UEIICE VAR s, ATOMRO'I/ VAR atom) I I I I I disable stop; IF not at segment top THEN spH t segment at actual position FI. I I 254 255 256 257 258 259 260 261 262 263 264 265 266 257 268 269 spli tsegmentatactu&lpo Ispli t segment at actual posi t10n : I INT CONST pred index . - s. segment begin, I actual index := s.index, I succ index :. pred. succ; 270 271 notatsegmenttop 272 pred I I I I I I pred. succ pred. end . - actual index; :. actual index - 1; succ. pred : = actual index; I I I I s.segment begin :. actual index I I Inot at segment top I I Ipred I I 274 275 actual 275 277 278 279 succ 16/5 :. pred index; :. succ index; :. s. segment end; I ~3 280 actual. pred actual. succ actual. end Iactual I I Isucc s.index) s.segment begin. a tom (pred 1 ndex) . seg . atom (actual index).seg . : atom (succ index).seg I lEND PROC split segment; I I file handling 16/5 Zeile 281 282 283 284 285 286 287 288 289 E LAN 1.8 EUMEL **** 10.11.86 file handli ng JOinsegJll8nts ............. IPROC join segments (ATOMROW VAR atom, I INT CONST first index, INT VAR second index) I I I I I I I I disable stop; IF first seg. end + 1 = second index THEN attach second to first segment ELSE link first to second segment Fl. 290 291 292 293 294 295 296 297 298 attachsecondtofirstseg lattach second to first segment: I first seg.end : = second seg.end; I INT VAR successor of second := second seg.succ; I IF successor of second = second index I THEN first seg. succ : = first index I ELSE join segments (atom, first index, successor of second) I FI; I second index : = first index 299 300 301 302 linkfirsttosecondsegme llink first to second segment : I first seg.succ := second index; I second seg.pred : = first index. 303 firstseg 304 305 306 307 308 309 310 311 312 313 314 315 I I I I secondseg Ifirst seg: atom (first index).seg . I Isecond seg : atom (second index). seg . I lEND PROC join segments; I I deletesegments ........... IPROC delete segments (SEQUENCE VAR from, ATOMROW VAR atom, I INT CONST first index, last index, lines) I I I I determine surrounding segments and new atom index; join surrounding segments; update sequence descriptor . I I 316 317 318 319 320 determinesurroundingse Idetermine surrounding segments and new atom index I INT VAR pred index := first seg.pred, I actual index : = last seg. succ; I from. index : = actual index . 321 322 323 joinsurroundingsegment I join surrounding segments : I join segments (atom, pred index, actual index) . 324 325 326 327 328 updatesequencedescript 329 actualseg 16/7 I I I I Iupdate I I I I I sequence descriptor : from. segment begin : = actual index; from. segment end := actual seg.end; from . lines DEeR lines . lactual seg atom (actual index) .seg . file handling 16/7 Zeile E LAN f1rstseg 331 lastseg EUMEL 1.8 Ifirst seg: I Ilast seg: 332 I 333 334 335 I I 336 337 **** 10.11.86 file handling atom (first index).seg . atom (last index).seg IEND PROC delete segments; insertsegments ........... IPROC insert segments (SEQUENCE VAR into, ATOMROY/ VAR atom, I INT CONST first index, last index, lines) I 338 339 340 341 I I join into sequence and new segments; update sequence descriptor . I I 342 343 344 345 346 347 348 joinintosequenceandnew I join into sequence and new segments : I INT VAR actual index :. into.index, I pred index : = actual sag. pred; I join segments (atom, last index, actual index); I actual index : = first index; I join segments (atom, pred index, actual index) . 349 350 351 352 353 updatesequencedescript Iupdate sequence descriptor : I into. index : = first index; I into. segment begin :. actual index; I into.segment end := actual seg.end; I into . lines INCR lines . I I I I ~4 ~5 ~6 actualseg 367 368 369 370 371 372 373 374 375 376 377 378 + 379 16/8 atom (actual index) .seg . IEND PROC insert segments; 357 358 359 360 361 362 363 364 365 366 lactual seg: I I I nextatom ................. 1PROG next atom (SEQUENCE VAR s, ATOMROY/ CONST atom) I I I I tonexta tom I I I IF s. line no <= s . lines THEN to next atom ELSE errorstop ("'down' nach Datelende") Fl. Ito next a tom : I disable stop; I IF s.index = s.segment end I THEN next segment (s, a tom) I ELSE s . index INCR 1; I s.line no INCR 1 I FI I lEND PROG next atom; I I nextatoms ................ IPROG next atoms (SEQUENCE VAR s, ATOMROW CONST atom, INT CONST I I times): file handling 16/8 Zeile E LAN EUMEL 1.8 •••• jumpuptodestinationseg jump upto destination segment: WIIILE s . line no + length of actual segments tail ( destination line REP next segment (s, atom); 386 387 388 PER • 389 390 391 392 393 posi tlonwi thindestinat 394 395 396 397 398 lengthofactualsegments Ilength of actual segments tail 399 I I I I I position wi thin destination segment : disable stop; s.index INCR (destination line - s.line no); s.line no : = destination line . lEND PROC next atoms; I I previousatom ............. IPROC previous atom (SEQUENCE VAR s, ATOMRCNI CONST atom) I 401 402 403 I I I ~ I IT. I I I to previous a tom I disable stop; 405 413 414 415 416 417 418 419 429 421 4~ s. segment end - s. index . I 400 406 407 408 409 410 411 412 file handling INT CONST destination line := min (s.line no + times, s.lines + 1) jump upto destination segment; position within destination segment. 380 381 382 383 384 385 10.11.86 topreviousa tom I IF s.line no ) 1 THEN to previous atom ELSE errors top ("'up' am Dateianfang") : IF s.index = s.segment begin previous segment (s, atom) s. index DECR 1; s.line no DECR 1 I THEN I ELSE I I FI I IEND PROC I I previous a tom; previousatoms ............ IPROC previous atoms (SEQUENCE VAR s, ATOMRCNI CONST atom, INT CONST I times): I I I I INT CONST destination line := max (1, s.line no - times); jump back to destination segment; position wi thin destination segment . I I 423 424 + 425 426 427 16/9 Jumpbacktodestlnatlons IJump back to destination segment: I WIIILE s . line no - length of actual segments head ) destination I line REP I previous segment (s, atom); I I PER. file handling 16/9 Zaile 428 429 430 431 E LAN EUMEL 1.8 441 442 443 444 10.11.86 file hlLndling I posi tion wi thin destination segment : pos1 t1onw1 th1ndest1nat I I I disable stop; s.index DECR (s.line no - destination line); s . line no : = destination line . I I 4~ 433 434 435 436 437 438 439 440 *- lengthofactualsegments Ilength of actual segments head I lEND I I s.1ndex - s.segment begin. PROC previous atoms; ITEXT VAR pre, pat, pattern0; lINT VAR last search line ; I searchdown ............... PROC search down (SEQUENCE VAR s, ATOMROW CONST atom, TEXT CONST pattern, INT CONST max 11nes, INT VAR column) : INT CONST start col : = column , start line : = s .lineno ; last search line := min (s.lines, s.lineno + max lines) pre:= some fix (pattern) ; pattern0 : = pattern ** 0 ; down in atoms (s, atom, pre, column); IF NOT (last search succeeded CAND like pattern) THEN try again FI; last search succeeded .= TRUE column := matchpos (0) . 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 tryagain 461 462 463 464 Itry again: I WHILE s . line no ( last search line I REP next atom (s, atom) ; column := 1 ; I down in atoms (s, atom, pre, column); I IF last search succeeded CAND like pattern I THEN LEAVE try agal n FI PER; column . = 1 + LENGTH record; las t search succeeded : = FALSE LEAVE search down. 465 466 467 468 469 470 471 likepattern like pattern : correct position pat := any (column-i) pat CAT any ; pat CAT pattern0 ; pat CAT any; record LIKE pat . 472 473 474 475 476 477 478 479 480 481 482 16/10 correctposi tion Icorrect position: I IF s.lineno = start line I THEN column : = start col I ELSE column := 1 I FI. I file hlLndling 16/18 E LAN Zeile 483 EUMEL record **... file handling 10.11.86 Irecord : a tom (s. index) . line I 484 485 486 487 1.8 IENDPROC search down; I downinatoms .............. PROC down in atoms pattern, (S~UENCE VAR s, ATOMROW CONST atom, TEXT CONST INT VAR column) 488 489 490 491 492 493 494 495 496 497 498 499 I I 1&st search succeeded :. FALSE ; search forwards in actual line ; IF Nor found AND s . line no < 1&st search line THEN search in following lines FI ; IF found 'mEN 1&s t search succeeded : = TRUE ELSE set column behind 1&st char Fl . 500 501 502 setcolumnbehindlastcha I set column behind last char : I column:. LENGTH atom (s. index) . line + 1 • 503 504 505 506 507 508 509 searchforwardsinactual Isearch forwards I IF pattern <) I 'mEN column I ELIF column ) I THEN column I Fl. 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 searchinfollowinglines 525 526 527 searchforwardsthroughs Isearch forwards through segment: I INT VAR search index : = s. index I last index .- min (s.segment end, s.index+(1ast search line-s.line I no»; I I in actual line : :. pos (atom (s.index).line, pattern, column) LENGTH atom (s . index) . line :. 0 I I search in following lines next atom (s, atom) ; IF pattern = ft. 'mEN column :. 1 ; LEAVE search in following lines FI ; REP search forwards thrcugh segment ; update file posi tion forwards ; IF found OR s . line no = last search line THEN LEAVE search in following lines ELSE next segment (s, a tom) Fl PER • 528 I 529 530 531 532 533 I I I 534 535 16/11 I I I I REP column:. pos (atom (search index).l1ne, pattern) IF found OR search index = 1&st index 'mEN LEAVE search forwards through segment FI; search index INCH 1 PER. file handling 16/11 Za1le E LAN EUMEL 1.8 **- 10.11.86 536 537 538 539 540 541 updatefilepositionforw lupdate file position forwards : I disable stop ; I s.line no INCR (search index I s . index : = search index ; I enable stop . 542 M3 544 545 found I I Ifound I IENDPROC I file handling s.index) column > 0 . down in a toms 546 547 548 M9 550 551 552 553 554 555 556 prefix ................... ITEXT PROC prefix (TEXT CONST pattern) : 557 searchup. . . . . . . . . . . . . . . .. PROC search up (SEQUENCE VAH s, ATOMROW CONST atom, TEXT CONST pattern, INT CONST max lines, INT VAH column) : + 558 559 560 561 562 563 564 565 566 567 568 569 570 571 I I I I I I I I IENDPROC I tryagain 573 574 575 576 577 578 579 PER; 581 582 583 16/12 try again: WHILE s.lineno > last search line OR column> 1 REP previous atom (s, atom); column := LENGTH record ; up in atoms (s, atom, pre, column); IF last search succeeded CAND last pattern in line found THEN LEAVE try again FI column := 1; last search succeeded : = FALSE LEAVE search up. 58E> 584 prefix last search line : = max (1, s .lineno - max lines) pre:= prefix (pattern); pattern0 := pattern ** 0; remember start point ; up in atoms (s, atom, pre, column); IF NOT (last search succeeded CAND last pattern in line found) THEN try again FI; last search succeeded := TRUE column := matchpos (0) . 572 585 586 INT VAH invalid char pos : = pos (pattern, ""0"", ""31"", 1) SELECT invalid char pos OF CASE 0 pat tern CASE 1 OTHERWISE subtext (pattern, 1, invalid char pos - 1) ENDSELECT. rememberstartpoint remember start point : INT VAH c:= column, r:= s.l1neno;. file handling 16/12 E LAN ZeUe 1.8 EUMEL 587 588 589 590 591 592 593 594 lastpattern1nlinefound 595 596 597 598 599 600 601 l1kepattern 602 rightofsta.rt 603 604 605 606 record ,, ,I , , ,,, , , ,I, ,, .... 10.11.88 file handling last pattern 1n line found : column :. 2 ; WHILE like pattern CAND right of sta.rt REP column :. ma.tchpos (0) +1 PER . column DEeR 1 ; like pattern CAND right of sta.rt like pattern : pat :. any (column-1) pat CAT any ; pat CAT pattern0 ; pat CAT any; record LIKE pat . I ,I r1ght of sta.rt , record , ,'ENDPROC search up (r ) s. lineno COR c )= ma.tchpos(0) ) atom (s .1ndex) . line 608 609 610 611 612 613 614 615 616 617 618 M9 up1natoms ................ 'PROC up 1n atoms (SEQUENCE VAR s, ATOMROW CONST atom, TEXT CONST , pattern, , I N T VAR column) , , last search succeeded :. FALSE ; I search backllards in actual line ; , IF NOT found AND s . line no ) last search line , THEN search 1n preceeding lines , FI; , IF found , THEN last search succeeded : = TRUE , ELSE column . - 1 , FI. , 620 621 622 623 624 625 626 627 628 629 searchbackllards1na.ctua 'search backllards in actual line I IF pattern = "" , THEN LEAVE search backllards 1n actual line , FI; , INT VAR last pos , nell pos :. 0 ; , REP , last pos : = nell ·pos ; , nell pos := pos (atom (s.index).l1ne, pattern, last pos+1) , UNTIL nell pos = 0 OR nell pos ) column PER ; , column: = last pos . 607 630 631 632 633 634 635 636 637 , ,, ·search1npreceed1ngline 'search in preceeding lines , previous atom (s, atom) ; , IF pattern = "" , THEN column := LENGTH atom (s.index) .11ne + 1 , l a s t search succeeded :. TRUE ; , LEAVE search in preceeding lines , FI; 638 , 639 640 , , 16/13 REP search backllards through segment update file position backllards ; file handling 16/13 ZeUe E L A II EUMEL 1.8 ........ _ .... file handling IF found OR s . line no = last search line THEN LEAVE search in preceeding lines ELSE previous segment (s, atom) FI PER . 641 642 64:3 644 645 646 647 648 649 + 650 651 652 653 654 655 656 657 658 659 10.11.86 searchbackwardsthrough search backwards through segment : lIlT VAR search index : = s . index , last index := III&X (s.segment begin, s.index-(s.line no-last search line»; REP new pos := 0 ; REP column : new pos new pos := pos (atom (search index).line, pattern, column+l) UNTIL new pos = 0 PER ; IF found OR search index = last index THEN LEAVE search backwards through segment FI ; search index DECR 1 0:: 660 , 661 , PER. , 662 66:3 664 665 666 667 updatefilepositionback ,update file position backwards: , disable stop ; I s . line no DECR (s. index search index) I s.index:= search index I enable stop . 668 669 670 671 672 67:3 found I 1 'found column) 0 , 'ENDPROC up 1n atoms 1 IBOOL I VAR last search succeeded 674 675 676 M7 678 679 patternfound ............. IOOOL PRO<: pattern found 1 last search succeeded 1ENDPROC pattern found ; 680 681 682 68:3 684 685 686 687 deleteatom ............... IPROC delete atom (S~UENCE VAR used, free, ATOMROW VAR atom) , , disable stop; I IF used. line no (= used. lines , THEN delete actual atom I ELSE errors top ("'delete' am Ila.telende") 1 Fl. I I , 1 1 688 689 690 691 692 69:3 16/14 deleteactualatom ,delete actual atom position behind actual free segment; 1 spli t segment (used, a tom) ; 1 lIlT VAR actual index : = used. index; 1 cut off tail of actual used segment; I delete segments (used, atom, actual index, actual index, 1); I file handling 16/14 Zeile E LAN EUMEL 1.8 I I I 594 695 ..... 10.11.86 file handling insert segments (free, atom, actual index, actual index, 1) . 696 697 698 699 700 positionbehind&etualfr Iposi tion behind &etual free segment I IF free. line no ( = free. lines I THEN next segment (free, atom) I FI. 701 702 703 cutofft&ilofactualused Icut off t&il of actual used segment : I IF actual index (> used. segment end I THEN used. index INCR 1; I split segment (used, atom); I used. index DECR 1 I Fl. 704 705 706 707 I I I IEND PROC delete atom; 708 709 I I 710 711 insert&tom ............... IPROC insert atom (SEQUENCE VAR used, free,INT VAR unused, ATOMROIY I VAR atom) : 712 I 713 714 715 I I I I I I I 716 717 718 719 720 721 722 723 724 725 I I I insertnewatomfromfrees I insert new atom from free sequence : I get a free segments he&d; I make this atom to actual segment; I transfer from free to used chain . 726 727 728 729 7~ 731 732 disable stop; split segment (used, atom); IF free . lines > 0 THEN insert new atom from free sequence ELIF unused (. file size THEN insert new atom from unused t&1l ELSE errorstop ("FlLE-Ueberl&uf") Fl. get&freesegmentshe&d I I Iget I I I I a free segments he&d : IF actual free segment is root segment THEN previous segment (free, atom) FI; posi ticn to &etual segments he&d . I I 733 734 735 736 737 posi tiontoactualsegmen Iposi tion to actual segments he&d : I INT VAR actual index : = free. segment begin; I free.line no DEeR (free.index - actual index); I free. index : = actual index . 738 makethisatomto&etualse lmake this atom to actual segment: I IF free.segment end> actual index I THEN free. index INCR 1; I split segment (free, atom); I free. index DEeR 1 I FI. 739 740 741 742 743 744 16/15 I I I file handling 15/15 Zelle - E LAN EUMEL 1.8 •• ** 10.11.86 **.* flle handling 745 746 747 748 ft9 transferfromfreetoused I transfer from free to used chain : I delete segments (free, atom, actual index, actual index, 1); I insert segments (used , atom, actual index, actual index, 1); I atom (actual index) . line . - •• 750 751 752 753 insertnewatomfromunuse I insert new a tom from unused tail I actual index : = unused; I a tom (actual index). seg : = I SmMENT: (actual index, actual index, actual I index); I atom (actual index).line := •• ; I insert segments (used, a tom, actual index, actual index, 1); I unused INCR 1 + 754 755 756 757 758 + I I I I actualfreesegmentisroo lactual free segment is root segment I root. + 764 = free I 759 760 761 762 763 free. segment begin lEND PROC insert atom; I I insertnext ............... IPROC insert next (SEQUENCE VAR used, free, INT VAR unused, ATOMROW I VAR atom, I TEXT CONST record) I 765 766 767 768 769 I I I I I I I 770 771 772 773 I I IF used.ltre no > used.lines THEN insert a tom (used, free, unused, a tom) ELIF actual position before unused nonempty atomrow part THEN forward and insert atom by simple extension of used atomrow part ELSE next atom (used, atom); insert atom (used, free, unused, atom) FI; atom (used.index).line := record. I I 774 775 776 777 778 779 780 781 782 forwardandinsertatomby Iforward and insert atom by simple extension of used atomrow part I used. line no I!'CR 1; I used. lines INCR 1; I used, index INCR 1; I used, segment end INCR 1; I atom (used.segment begin) ,seg.end INCR 1; I unused INCR 1 . 783 784 785 actualpositionbeforeun lactual position before unused nonempty atomrow part I used. index = unused - 1 AND unused part not empty 786 unusedpartnotempty 787 788 789 790 791 792 793 16/16 I I I I Iunused part not empty unused <= file size . I lEND PROC insert next; I I transfersubsequence ...... IPROC transfer subsequence (SEQUENCE VAR source, dest, I ATOMROW VAR atom, INT CONST size) I file handling 16/16 Zeile E LAN EUME!. 794 795 796 797 798 799 800 801 802 803 804 805 806 807 markbeginofsourcepart 1.8..... I I I I I I I I I fUe handling 10.11.86 IF size ) 0 THEN INT VAA subsequence size : = min (size, source . line no); mark begin of source part; mark end of source part; split destination sequence; transrer part Fl. lmark begin of source part : previous atoms (source, atom, subsequence size - 1); split segment (source, atom); I INT CONST first : = source. segment begin . I I I markendofsourcepart 808 809 810 811 &2 I Imark end or source part : next atoms (source, atom, subsequence size - 1); I INT CONST last := source. segment begin; I next atom (source, atom); I split segment (source, atom) . I I I 813 814 815 splitdestinationsequen Isplit destination sequence: I split segment (dest, atom) 816 817 transferpart 818 819 820 821 822 823 824 825 826 827 + 828 829 + 83e + 831 + 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 16/17 I I Itransfer part disable stop; delete segments (source, atom, first, last, subsequence size); I source . line no DEeR subsequence size; I insert segments (dest, atom, first, last, subsequence size); I next atoms (dest, atom, subsequence size - 1) . I I I IEND PROC transfer subsequence; I I I 1(****.*****..****.***...................................***............... 1• • • • • • I 1( ...... I ***.*) I(....... I * •••• ) FILE handler 1( ••••• I ••• _) I( •••••*.****************.*•••*****.****..*******••**............. ~ I ) I I I ILET I I I I I I I file type file type 16 closed inp outp mod end 1003 1002 & a 0, 1, 2, 3, 4, I I I max limit super limit 16000, = 16001; I file handling 16/17 Zeile E LAN EUMEL 1.8 _.. 10.11.86 847 I 848 ITYPE TRANSPUTDIRECTION 849 850 I I 851 852 853 854 855 856 857 858 859 I I output ................... ITRANSPUTDIRECTION PROC output I TRANSPIlTDlRECTION: (outp) lEND PROC output; I I modify ................... ITRANSPUTDIRECTION PROC modify I TRANSPUTDIRECTION: (mod) I END PROC modify; I I IFILE VAR result file; I I 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 + 886 887 888 889 890 891 892 893 894 895 896 16/18 IN!; input .................... ITRANSPUTDlRECTION PROC input I TRANSPIlTDlRECTION: (inp) lEND PROC input; 860 861 862 863 864 865 866 867 file handling sequentiAlfile ........... IFILE PROC sequentiAl file (TRANSPUTDIRECTION CONST mode, I DATASPACE CONST ds) I IF type (ds) • file type I THEN result: = ds I ELIF type (ds) ( 0 I THEN result: = ds; type (ds, file type); initiAlize (result file) I ELSE enAble stop; errorstop ("lJatenr&um hat f&Ischen Typ") I FI; I reset (result file, mode); I result file . result I I Iresult : CONCR (result file) I IEND PROC sequential file; I I sequentialflle ........... IFILE PROC sequential file (TRANSPUTDIRECTION CONST mode, TEXT CONST I nAme): I I I I I I I I I I I IF exists (name) THEN get datAspace if file ELIF CONCR (mode) () inp THEN get nell file space ELSE errors top (""""+n&me+""" giht es nicht") FI; updAte stAtus if necessary; reset (result file, mode); result file . file handli ng enAble stop 16/18 Zeile E LAN 897 898 899 900 901 902 903 904 905 906 907 getdataspaceiffile 908 is170file EUMEL 10.11.86 file handling Iget dataspace if file : I IF type (old (name)) = file type 16 I THEN reorganize (name) I Fl; I result: = old (n&me, file type) I IF is 170 file I THEN result.col :- 1 . I result.m&rk line :. e I result.m&rk col : = 0 I Fl. I I Iis 170 file result .m&rk col < e. I 909 910 911 912 913 914 915 1.8 •••• getnewfilespace I Iget new file space : I result:= new (name); I IF NOT is error I THEN type (old (n&me) , file type); ini tialize (result file) I Fl. I I 916 917 918 ~ updatestatusifnecess&r lupdate status if necessary: I IF CONCR (mode) () inp I THEN status (name, ft"); headline (result file, name) I Fl. 920 921 922 923 924 925 result I I Iresult: CONCH (result file) I IEND PROC sequential file; I I 926 927 928 929 930 931 932 933 934 reset .................... IPROC reset (FILE VAH f) 935 936 937 936 939 940 941 reset .................... IPROC reset (FILE VAH f, TRANSPUTDIRECTION CONST mode) 942 943 944 945 946 947 948 949 16/19 I I IF f.mode = end THEN reset I ELSE reset I I FI • I IENDPROC reset I I I I I ini t1alizefileindex I I I (f, input) (f, TRANSPUTDIRECTION: (f. mode) ) IF f. mode () mod OR new mode () mod THEN f. mode : = new mode ; initialize file index Fl. 11ni tialize file index : I IF new mode = outp I THEN to line without check (f, f.used.lines); I col := super limit I ELSE to line without check (f, 1); I col : = 1 ; I IF new mode = inp AND file is empty I THEN f. mode : = end file handling 16/19 E LAN Zeile 950 951 952 953 954 filelsempty 955 956 newmocie 957 958 959 960 961 col 962 963 964 965 966 967 968 1.8 EUMEL .... 10.11.86 file handling FI I I FI . I I f.used.lines • 0 • Ifile is empty I I CONCR (mode) . Inew mode I I CONCH (CONCR (f)) .col . Icol I IEND PROC reset; I I input .................... IPROC input (FILE VAR f) I I reset (f. input) I lEND PROC input; I I 969 970 971 972 973 974 975 output ................... IPROC output (FILE VAR f) 976 977 978 979 modify ................... IPROG modify (FILE VAR f) I I reset (f. output) I lEND I I moe output; I I reset (f. modify) I 980 IEND PROG modify; 981 982 I I 983 984 985 986 987 988 989 close .................... Imoe close (FILE VAR f) 990 checkmode ................ IPROG check mode (FILE CONST f. INT CONST mode) I I IEND I I 991 I 992 I I I I I I I 993 994 995 996 997 998 16/20 f . mode :. closed I moe close; IF f. mode = mode THEN LEAVE check mode ELIF f. mode = closed THEN errors top ("!l&tei zu!") ELIF f. mode = mod THEN errors top ("unzul&esslger Zugrlff auf modify-FILE") ELIF mode = mod file handling 16/20 Zeile E LAN EUMEL 1.8 I I I I I I I I I 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 .*.. THEN ELIF THEN ELIF THEN ELIF THEN FI . 10.11.86 file handling errors top ("Zugrlff nur auf modify-FILE zulaessig") f.mode • end errorstop ("Leseversuch nach Dateiende") mode • inp errorstop ("Leseversuch auf output-FILE") mode • outp errorstop ("Schreibversuch auf input-FILE") lEND PROC check mode; I I 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 tol1newithoutcheck ....... IPROC to line without check (FILE VAR t, INT CONST destination line) 1023 1024 1025 1026 1027 1028 1029 1030 toline ................... IPROC to line (FILE VAR f, INT CONST destination line) 1031 1032 1033 1034 1035 1036 1037 tofirstrecord ............ I PROC to first record (FILE VAR f) 1038 1039 1040 1041 1042 1043 1044 toeof .................... IPROC to eof (FILE VAR f) : 1045 1046 1047 1048 1049 putline .................. 1PROC putline (FILE VAR f, TEXT CONST word) 16/21 I I INT CONST distance :. destination line - f.used.line I IF distance > 0 I THEN next atoms (f.used, f. atoms , distance) I ELIF distance ( 0 I THEN previous atoms (f.used, f.atoms, - distance) I FI. I IEND PROC to line wi thout check; I I I I I I no; check mode (f, mod); to line without check (C, destination line) lEND PROC to line; I I I I to line (f, 1) I IEND PROC to first I I record; I I I to line (f, f. used. lines + 1) . lEND PROC to eof; I I I I I write (f, word); col:· super limit I file handling 16/21 E LAN Ze1le 1050 1051 1052 1053 1054 col EUMEL 10.11.86 1.8 file handling Icol : CONCR (CONCR (f)). col I IEND PROC putUne; I I 1055 1056 1057 1058 1059 1060 1061 1062 deleterecord ............. IPROC delete record (FILE VAR f) 1063 1064 1005 1066 1067 1068 1069 1070 insertrecord ............. IPROC insert record (FILE VAR f) 1071 1072 1073 11374 11375 1076 11377 down ..................... IPROC down (FILE VAR f) 1078 1079 1080 1081 up ....................... IPROC up (FILE VAR f) I I I I check mode (f, mod); delete atom (f.used, f.free, f.atoms) . lEND PROC delete record; I I I I I check mode (f, mod); insert atom (f. used, f. free, f. unused tail, r .atoms) . I IEND I I I I I check mode (f, mod); next atom (r.used, f.atoms) I IEND I 1082 I I I I 1083 1084 I PROC insert record; PROC down check mode (f, mod); previous atom (f. used, f.atoms) . lEND PROC up 1085 1086 1087 1088 1089 11390 down ..................... IPROC down (FILE VAR f, INT CONST n) 11391 1092 1093 1094 11395 1096 1097 up ....................... IPROC up (FILE VAR f, INT CONST n) 16/22 I I to line (f, I IENDPROC down I I I to line (f, I IENDPROC up I I !ineno (f) + n) lineno (f)' - n) rile handling 16/22 E LAN Zeile 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1.8 **** EUMEL fUe handling 10.11.86 IIri terecord .............. IPROC IIr! te record (FILE VAH f, TEXT CONST record) I I I I I notateof I I I check mode (f, mod); IF not at eof THEN f.atoms (f.used.index).line :. record ELSE errors top ("'write' nach Datelende") FI. Inot at eof f.used.line no <= f.used.lines . I IEND PROC wri te record; I I 1111 llU 1113 1114 1115 1116 1117 1118 readrecord ............... IPROC read record (FILE CONST f, TEXT VAH record) 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 line ..................... PROC line (FILE VAH f) I I I check mode (f, mod); record:= f.atoms (f.used.index).line I IEND PROC read record; I I IF mode = end THEN errors top ("Leseversuch Mch Dateiende") ELIF mode = inp THEN next a tom (f. used, f . atoms); col :. 1; check eof ELIF mode = outp THEN IF co 1 <= max limit THEN col : = super limit ELSE append empty line FI FI . Iappend empty line : I insert next (f.used, f.free, f.unused tail, f. atoms , "") . 1132 1133 1134 appendemptyline 1135 1136 col Icol 1137 1138 mode I I Imode I I 1139 1140 1141 1142 1143 1144 checkeof 1145 1146 1147 1148 16/23 I I CONCR (CONCR (f)). col . CONCR (CONCR (f)). mode . Icheck eof I IF eof (f) THEN mode := end FI . I IEND I I PROC li ne ; line ..................... IPROC line (FILE VAH f, INT CONST lines) : I I INT VAH i; FOR i FROM 1 UPI'O lines REP line (f) PER I file handling 16/23 E LAN Zeile 1149 1150 1151 1152 1153 1154 1155 1156 1157 W8 1159 1160 1161 1162 1.8 **** EUMEL 10.11.86 file handling lEND PROC line; I I getline. . . . . . . . . . . . . . . . .. PROC getline (FILE VAR f, TEXT VAR text) check mode (f, inp); text ;= subtext (record, f.col); IF f.used.line no >= f.used.lines THEN f. mode ; = end ; ~t~d~fi~ EISE to next line f.col ;.1 FI . 1163 1164 1165 tonextline 1166 1167 1168 setendofflle 1169 1170 1171 1172 1173 record I to next line : I next atom (f.used, f.atoms) I I Iset end of flle I f. col : = LENGTH record + 1 . I I Irecord : f.atoms (f.used.index).line I lEND PROC getline; I I 1174 1175 1176 1177 1178 1179 1180 1181 isfirstrecord ............ IBOOL PROC is first record (FILE CONST f) 1182 1183 1184 1185 1186 1187 1188 eof ...................... IBOOL PROC eof (FILE CONST f) : 1189 1190 I I I I check mode (f, mod); f.used.line no = 1 . IEND PROC is first record; I I I I I I I IF line no < lines THEN FAISE ELIF line no lines THEN col > LENGTH record EISE TRUE Fl. I I lineno lines lline no I I lines f. used . line no f. used . lines I 1191 1192 1193 1194 1195 1196 16/24 col record Icol I f.col . Irecord f.atoms (f.used.index) .11ne . I IEND I I PROC eof; file handling 16/24 E LAN Zeile EUMEL 1.8 •••• 10.11.86 file handling 1197 1198 1199 1200 1201 1202 1203 lineno ................... 1INT PROC line no (FILE CONST f) 1204 1205 1206 1207 1208 1209 linetype ................. IPROC line type (FILE VAR 1', INT CONST t) 1210 1211 1212 1213 1214 1215 1216 linetype ................. lINT PROC line type (FILE CONST f) 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 put ...................... IPROC put (FILE VAR 1', TEXT CONST word) I I l' . used. line no I IEND PROC line no; I I I I f .atoms (f. used. index) . type : = t . I IENDPROC line type I I I l' . atoms (f. used. index) . type I IENDPROC line type I I I I I I I I I I check mode (1', outp); IF col + LENGTH word , l' .limi t THEN append new line ELSE record CAT word FI; record CAT " "; col:= LENGTH record + 1 I I 1227 1228 1229 appendnewline 1230 record Iappend new line I insert next (f.used, f.free, f.unused tail, f. atoms , word) . I I I record l' . atoms (f. used. index) . line . I 1231 1232 1233 1234 1235 col Icol: f.col I lEND PROC put; I I 1236 1237 1238 1239 1240 1241 1242 put ...................... IPROC put (FILE VAR 1', INT CONST value) 1243 1244 1245 put ...................•.. IPROC put (FILE VAR 1', REAL CONST real) 16/25 I I put (1', text (value)) I lEND I I PROC put; I I put (1', text (real)) file handling 16/25 E LAN Zeile 1.8 **** 10.11.86 rile h&ndling I 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 EUMEL lEND PROC put; I I write .................... IPROC write (FILE VAR r, TEXT CONST word) I I I I I I I check mode (r, outp); IF col .. LENGTH word - 1 ) f .limi t THEN append new line ELSE record CAT word FI; col: = LENGTH record .. 1 I I 1259 1260 1261 appendnewline 1262 record Iappend new line I insert next (f.used, f.free, f.unused tail, f. atoms , word) . I I Irecord f.atoms (f.used.index).line . I 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 col Icol I lEND f.col . PROC write; I I get ...................... IPROC get (FILE VAR f, TEXT VAR word, TEXT CONST separator) I I I I I I I I I 1277 1278 1279 1280 sk1pseparators 1281 1282 1283 isseparator 1284 1285 wordfound 1286 1287 1288 1289 1290 1291 1292 getword 1293 1294 sepa.ra.torround check mode (f, inp); skip separators; IF word found THEN get word ELSE try to find word 1n next line FI . I skip separators I INT CONST separator length := LENGTH separator; I WHILE 1s separator REP col INCH separator length PER I I 16/26 11s separator: I subtext (record, col, col .. separator length - 1) I I Iword found col (= separator. LENGTH record . I I Iget word lINT VAR end of word := pos (record, sepa.ra.tor, col) - 1; I IF separs. tor found THEN get text upto sepa.r& tor I I ELSE get rest of record I FI . I I Isepara tor found end or word ). 0 . I file handling 16/26 Zelle E LAN 1295 1296 1297 1298 1299 gettextuptoseparator 1300 1301 1302 getrestofrecord 1303 record EUMEL 1.8 •••• 11;).11.86 fUe handling Iget text upto separator: I word: = subtext (record, col, end of word); I col:= end of word + separator length + 1; I IF col> LENGTH record THEN line (f) FI . I I Iget rest of record I word:= subtext (record, col); 11ne (f) . I I Irecord f.atoms (f.used.index).line . I 1304 1305 col 1306 1307 trytcfindwordinnextlin I try to find word in next line : I line (f); IF eof (f) THEN word .' "" ELSE get (f, word, separator) I FI . f.col . I 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 Icol I I IEND PROC get; I I get ...................... IPROC get (FILE VAH f, TEXT VAH word, INT CONST max length) I I I I I I I I check mode IF word is THEN get ELSE get (f, lnp); only a part of record text of certain length rest of record FI . 1320 1321 1322 wordisonlyapartofrecor Iword is only a part of record : I col <= LENGTH record - max length 1323 1324 1325 1326 gettextofcertalnlength Iget text of certain length : I word:= text (record, max length, col); I col INCR max length 1327 1328 1329 getrestofrecord 1330 record I I I I Iget rest of record I word:= subtext (record, col); line (f) . I I Irecord f.atoms (f.used.1ndex).line . I 1331 1332 1333 1334 1335 1336 1337 1338 1339 134@ 1341 1342 16/27 col Icol f.col I lEND PROC get; I I get ...................... IPROC get (FILE VAR f, TEXT VAH word) I I get (f, word, " ") I lEND PROC get; I I file handling 16/27 Zeile E LAN EUMEL 1343 1344 1345 1.8 **** 10.11.86 file handling ITEXT VMl number word; I I 1346 1347 1348 1349 1350 1351 1352 1353 get ...................... IPROC get (FILE VMl f, INT VMl number) I I get (f, number word); I number: = int (number word) I IEND PROC get; I I 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 get ...................... IPROC get (FILE VAR f, REAL VMl number) I I get (f, number word); I number:. real (number word) I IEND PROC get; I I ITEXT VMl split record lINT VMl indentation 1365 1366 1367 1368 1369 1370 spli tline ................ IPROC split line (FILE VMl f, INT CONST split col) I I split line (f, split col, TRUE) 1371 splitline ................ IPROC split line (FILE VMl f, INT CONST split col, BOOL CONST note I indentation ) : I I IF note indentation I THEN get indentation I EISE indentation : = 0 I FI; I get split record ; I insert split record and indentation I cut off old record . 1372 1373 1374 1375 1376 1377 1378 1379 I I IENDPROC spli t line ; I I I 1380 1381 1382 1383 1384 1385 1386 getindentation 1387 1388 1389 getspli trecord 1390 1391 1392 insertspli trecordandin I insert split record and indentation I down (f) ; I insert record (f) ; 16/28 Iget indentation : I indentation:= pos (actual record,""33"",""254"",1) - 1 I IF indentation ( 0 OR indentation )= split col I THEN indentation : = split col - 1 I Fl. I I Iget split record I split record :. subtext (actual record, split col, max limit) I I file handling 16/28 Zeile E LAN I I I I I I 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 cutoffoldrecord 1403 1404 1405 1406 actualrecord 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1.8 **** EUMEL 10.11.86 file handling INT VAR i ; FOR i FROM 1 llPTO indentation REP actual record CAT " " PER ; actual record CAT split record up (f) I I Icut off old record I actual record := I I subtext (actual record, 1, split col-l) lactual record: f.atoms (f.used.index).line . I IENDPROC spli t line ; I concatenate line .......... PROC concatenate line (FILE VAR f, oooL CONST delete blanks) down (f) ; spli t record : = actual record IF delete blanks THEN delete leading blanks FI ; delete record (f) up (f) actual record CAT spl1 t record 1418 1419 1420 1421 1422 1423 deleteleadingblanks 1424 1425 1426 1427 actualrecord Idelete leading blanks : I INT CONST non blank col := pos (split record, I IF non blank col > 0 THEN split record : = subtext (split record, I I FI. I I f.atoms (f.used.index).line Iactual record I non blank col) IENDPROC concatenate line I 1428 1429 14:30 1431 concatenate line .......... IPROC concatena.te line (FILE VAR f) I concatenate line (f, TRUE) IENDPROC concatenate line ; 1432 1433 1434 1435 1436 1437 1438 1439 1440 reorganize ............... IPROC reorganize : 16/29 ""33"", ""254 U I I I I reorganize (last pa.ra.m) lEND PROC reorganize; I I ITEXT VAR file record I file handling 16/29 , 1) Zeile 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 E LAN EUMEL •••• 10.11.86 reorganize ............... IPROC reorganize (TEXT CONST file file h&ndling name) enable stop ; FILE VAR input file, output file; DATASPACE VAR scratch space; INT CONST type of do. taspace : = type (old (file INT VAR counter; name» last pa.ram (file name); IF type of dataspace = file type THEN reorganize new to new ELIF type of dataspace = file type 16 THEN reorganize old to new ELSE errors top ("Datenraum hat falschen Typ") FI; replace file space by scratch space . 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 reorganizenewtonew 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 reorganizeold tonew 16/:38 1.8 reorganize new to new : input file: = sequential file (input, file name); disable stop ; scratch space : = nilspace output file : = sequential file (output, scratch space); copy attributes (input file, output file) ; FOR counter FROM 1 UPI'O 9999 WHILE NOT eof (input file) REP cout (counter); getline (input file, file record); putline (output file, file record); check for interrupt PER . Ireorganize old to new: I LET OLDRECORD = STRUCT (INT succ, pred, x, y, TEXT record); I LET OLDFILE = BOUND ROW 4075 OLDRECORD; I LET date ianker = 2, fre ianker = 1; I INT VAR index := date1anker; I I I I I I I I I OLDFlLE VAR old file : = old (file name); disable stop; scratch space:. nilspace; output file := sequential f11e (output, scratch space); get old attributes ; say ("Date1 wird in 1. 7-Format gewandelt: ") I FOR counter FROM 1 UPI'O 9999 I WHILE NOT end of old file REP cout (counter); I index : = next record; I file record : = record of old file ; I IF pos (file record, ""128"", ""259"". 1) ) 0 I THEN change special chars I I FI ; putline (output file, file record); I check for interrupt I I I PER • file handling 16/38 Zeile E LAN 1499 1500 15191 15192 getoldattributes 15193 15194 15195 getoldheadline 15196 1507 1508 getoldlimitandtabs EUMEL 1.8 •••• file handling Iget old attributes: I get old headline ; I get old limit and tabs I I Iget old headline : I headline (output file, old file (dateianker) . record) . I I Iget old limit and tabs: I file record : = old file (freianker). record I max line length (output file, int (subtext (file record, 11, 15)) I 1509 1510 119.11.86 I put tabs (output file, subtext (file record, 16)) . I I 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 changespecialchars 1524 1525 endofoldfile 1526 1527 nextrecord 1528 1529 recordofoldfile 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 checkforinterrupt 15419 1541 1542 1543 1544 1545 1546 1547 1548 1549 replacefilespacebyscra Ireplace file space by scratch space: I headline (output file, file name); I forget (file name, quiet) I type (scratch space, file type); I copy (scratch space, file name); I forget (scratch space) 16/31 Ichange special chars : I change all (file record, I change all (file record, I change all (file record, I change all (file record, I change all (file record, I change all (file record, I change all (file record, I change all (file record, I change all (file record, I change all (file record, I change all (file record, I I lend of old file I I I next record ""193"", ""207"", ""213"", ""225"", ""239"", ""245"", ""235"", ""173"", ""163"", ""214"") ""215"") ""216"") ""217"") ""218"") ""219"") ""220"") ""221"") ""222"") (. (. (* (* (. (. (. (. (. ""160"", ""223"") (* ""194"", ""251"") (. next record Ae .) De .) Ue ae oe ue k - *) .) *) .) .) *) fis .) blank *) eszet .) dateianker. old file (index). succ . I I Irecord of old file old file (index) . record . I I Icheck for interrupt : I INT VAR size, used ; I storage (size, used) I IF used ) size I THEN errorstop ("Speicherengpass") I FI; I IF is error I THEN forget (scratch space) LEAVE reorganize I FI. I I I lEND PROC reorganize; I I file handling 16/:31 Zeile 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 ..... ELAN EUMEL 1. 8 •••• 10.11. 86 file handling setrange ................. ,PROC set range (FILE VAR f, INT CONST start line, start col, ' m A N G E VAR old range) , , check mode (f, mod); , IF valid restriction parameters , THEN prepare last line ; ' p r e p a r e first line ; ' s a v e old range ; , s e t new range , ELSE errors top ("mANGE ungueltig") , FI. , , 1564 validrestrictionparame 'valid restriction parameters , start line ) 0 AND start col ) 0 AND start before or at actual , point , 1565 1566 1567 1568 startbeforeoratactualp 'start before or at actual point: , start line , line no (f) OR , start line = line no (f) AND start col , 1569 1570 1571 1572 1573 1574 preparelastline 1575 1576 1577 1578 1579 preparefirstline 'prepare first line : , IF start col ) 1 , THEN split start line , FI. , 1580 1581 1582 1583 1584 1585 spli tstartline ,spli t start line : , INT VAR old line no :. line no (f) , to line (f, start line) ; , split line (f, start col, FALSE) , to line (f, old line no + 1) . , 1586 1587 1588 1589 saveoldrange 'save old range , old range.pre :. f.prefix lines; , old range.post:. f.postfix lines. , 1590 1591 1592 1593 1594 1595 1596 1597 1598 setnewrange ,set new range I get pre lines , get post lines , disable stop ; I f . prefix lines INCR pre lines ; , f.postfix lines INCR post lines , f. used . lines DECR (post lines + pre lines) , f. used. line no DECR pre lines 1599 1600 1601 1602 getprelines 1562 1563 16/32 , ,= col (f) . , 'prepare last line : , INT VAR last line , IF col (f) ) 1 , THEN split line (f, col( f), FALSE) , FI. ,I , , , ,, ,get pre lines : , INT VAR pre lines , IF start col • 1 , THEN old range. pre was split:. FALSE file handling 16/32 Zeile E LAN 1603 1604 I I I 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1.8 **** EUMEL getpostlines 10.11.86 pre lines : = start line - 1 ELSE old range.pre was split := TRUE pre lines : = start line I FI. I I Iget post lines : I INT VAH post lines I IF col (fl = 1 I THEN old range. post was split: = FALSE ; I post lines := lines (fl - line no (f) + 1 I ELSE old range.post was split := TRUE ; I post lines := lines (f) - line no (fl I FI. I IEND PROC set range; I I setrange ................. IPROC set range (FILE VAH f, FRANGE VAH new range) I I I I I I I I I I I I check mode (f, mod); INT CONST pre add : = prefix - new range. pre, post add := postfix - new range.post; IF pre add ( 0 OR post add ( 0 THEN errorstop ("mANGE ul1gUeltig") ELSE set new range; undo splitting if necessary make range var invalid FI. 1632 1633 1634 1635 1636 1637 1638 setnewrange 1639 1640 1641 1642 1643 1644 1645 1646 undosplittingifnecessa lunda splitting if necessary: I IF new range. pre was split I THEN concatenate first line I FI; I IF new range.post was split I THEN concatenate last line 1647 1648 1649 1650 1651 1652 concatenatefirstline 1653 1654 1655 1656 1657 concatenatelastline 16/33 file handling Iset new range I disable stop; I prefix DECR pre add; I postfix DECR post add; I used. line no INCR pre add; I used. lines INCR (pre add + post add) I I I Fl. I I Iconcatenate first line : I INT VAR old line : = line no (f) I to line (f, pre add) ; I concatenate line (f, FALSE) I to line (f, old line - 1) . I I Iconcatenate I I I I last line : old line : = line no (fl to line (f, lines (f) - post add) concatenate line (f, FALSE) to line (f, old line) . file handling 16/33 E LAN Zeile 1.8 .... EUMEL file handling I I 1658 1659 1660 1661 rn&kerangevarinvalid 1662 used IlII8.ke range var invalid : I new range.pre := I118.xint I I Iused I 1663 10.11.86 prefix Iprefix f. used . f. prefix lines . I 1664 1665 1665 1667 postfix Ipostfix : f. postfix lines . I IEND PROC set range; I 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 resetrange ............... IPROC reset range (FILE VAR f) I I mANGE VAR complete I complete.pre := 0 ; I complete.post: = 0 ; I complete. pre was split := FALSE I complete.post was split:= FALSE I set range (f, complete) I IENDPROC reset range ; I 1679 1680 1681 1682 1683 1684 1685 1686 remove ................... IPROC remove (FILE VAR f, INT CONST size) 1687 1688 1689 1690 clearremoved ............. IPROC clear removed (FILE VAR f) 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 161M I I I check mode (f, mod); transfer subsequence (f.used, f.scratch, f.atoms, size) . I IEND PROC remove; I I I I I check mode (f, mod); transfer subsequence (f.scratch, f.free, f.atoms, f.scratch.lines) I I lEND PROC clear removed; I I reinsert ................. IPROC reinsert (FILE VAR f) I I I check mode (f, mod); transfer subsequence (f. scratch, f.used, f.atoms, f.scratch.l1nes) I I IEND PROC reinsert; I I file handling 161M E LAN Zaile 1703 1704 1705 1706 1707 EUMEL 1.8 •••• 10.11.86 file handling copyattributes ........... IPROC copy attributes (FILE CONST source file, FILE VAR dest file) I I I I dest.limit := source.limit dest.atoms (free root).line .- source.atoms (free root).line dest.atoms (scratch root).line := source.atoms (scratch root).line I 1708 1709 1710 1711 1712 1713 1714 1715 I dest.edit info .- source.edit info. I dest source I Idest CONCR (CONCR (dest file» I Isource I CONCR (CONCR (source file» . IENDPROC copy attributes I I 1716 1717 1718 1719 1720 1721 1722 maxlinelength ............ lINT PROC max line length (FILE CONST f) 1723 1724 1725 1726 1727 1728 1729 1730 1731 maxlinelength ............ IPROC max line length (FILE VAR f, INT CONST new limit) 1732 1733 1734 1735 1736 headline ................. ITEXT PROC headline (rILE CONST f) ~M 1738 I I f.limit. I lEND PROC max line length; I I I I I I I IF new limit ) 0 AND new limit <= max limit THEN f .limi t . - new limi t rI . lEND PROC max line length; I I I I f . atoms (free root) . line I IEND PROC headline; I I 1739 1740 1741 1742 1743 1744 1745 headline ................. IPROC headline (FILE VAR f, TEXT CONST head) 1746 1747 1748 1749 1750 1751 get tabs .................. IPROC get tabs (FILE CONST f, TEXT VAR tabs) 16/35 I I f.atoms (free root) . line := head . I lEND PROC headline; I I I I I tabs:= f.atoms (scratch root).line lEND PROC get tabs; I file handling 16/35 Zeile •••• E LAN 1.8 .... EUMEL 10.11.86 •••• file handling 1752 1753 1754 1755 1756 1757 1758 1759 putta.bs .................. IPROC put ta.bs (FILE VAR 1', TEXT CONST ta.bs) 1760 1761 1762 1763 1764 1765 1766 editinfo ................. lINT PROC edit info (FILE CONST f) 1767 1768 1769 1770 1771 1772 1773 editinfo ................. IPROC edit into (FILE VAR 1', INT CONST into) 1774 1775 1776 1777 1778 1779 1780 lines .................... lINT PROC lines (FILE CONST f) 1781 1782 1783 1784 1785 1786 1787 removedlines ............. lINT PROC removed lines (FILE CONST f) 1788 1789 1790 segments ................. lINT PROC segments (FILE CONST f) : + 1791 1792 1793 1794 1795 1796 1797 1798 16/36 I I f.atoms (scratch root).line := ta.bs . I lEND PROC put ta.bs; I I I I f.edit info. I IEND PROC edit info; I I I I f.edit info := info I lEND PROC edit info; I I I I f . used. lines I IEND PROC lines; I I I I f.scratch.lines. I IEND PROC removed lines; I I I I I segs(f.used,f.atoms) + segs(f.scratch,f.atoms) segs(f.free,f.atoms) - 2 . + I IENDPROC segments I I col ...................... I INT PROC col (FILE CONST t) I I I t.col tile handling 16/36 Zeile •••• EUMEL 1.8 **** 10.11.86 **** file handling IENDPROC col 1799 1800 1801 1802 1803 1804 1805 1806 1807 E LAN I col ...................... IPROC col (FILE VAR 1', INT CONST new column) I I I IF new column ) 0 THEN 1'. col : = new column I I FI I ENDPROC col I 1808 1809 1810 1811 1812 1813 1814 word ..................... ITEXT PROC word (FILE CONST f) 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 word •................•... ITEXT PROC liard (FILE CONST 1', TEXT CONST delimiter) 1825 1826 1827 1828 1829 1830 word ..................... ITEXT PROC word (FILE CONST 1', INT CONST max length) 1831 1832 1833 1834 1835 1836 1837 at ....................... IBOOL PROC at (FILE CONST 1', TEXT CONST word) 1838 1839 1840 1841 1842 1843 1844 + 1845 16/37 I I word (1', " ") I IENDPROC liard I I I I I I I I INT VAR del pas := pas (1', delimiter, col (f» IF del pas = 0 ; THEN del pas := len (f) + 1 FI; subtext (1', col (f), del pas - 1) IENDPROC liard I I I subtext (1', col (f), col (f) + max length - 1) I IENDPROC word I I I I I I pat: = any (column-l) pat CAT word ; pat CAT any ; record LIKE pat I I column record Icolumn I Irecord f.col. f.atoms (f.used.index).line . I IENDPROC at I I exec ................••.•. IPROC exec (PROC (TEXT VAR, TEXT CONST) proc, FILE VAR 1', TEXT OONST I t): I file handling 16/37 E LAN Ze1le record 10.11.86 file handling proc (record, t) . Irecord: f.atoms (f.used.1ndex).l1ne . I IEND PROC exec; I I exec ..................... IPROC exec (PROC (TEXT VAR, INT CONST) proc, FILE VAR f, INT CONST 1) I I 1854 1855 1856 I record 1857 1858 1859 1860 1865 1866 1867 1868 •••• I I 1848 1849 1850 1851 1852 1861 1862 1863 1864 1.8 I 1846 1847 1853 EUMEL proc (record, i) . I I Irecord: f.atoms (f.used.1ndex).line . I IEND PROC exec; I pos •••••••••••••••••••••• 1INT I I PROC pos (FILE CONST f, TEXT CONST pattern, INT CONST il pos (record, pattern, i) . I I record Irecord : f. a toms (f. used. index) . line . I lEND PROC pos I 1869 1870 1871 1872 1873 1874 down ..................... IPROC down (FILE VAR f, TEXT CONST pattern) 1875 1876 1877 1878 1879 1880 1881 1882 1883 down 1884 1885 1886 1887 1888 1889 downety .................. IPROC downety (FILE VAR f, TEXT CONST pattern) 16/38 I I down (f, pattern, file size) I IENDPROC down I •••••.••••••.•.•.•••• 1PROC down (FILE VAR f, TEXT CONST pattern, INT CONST max 11ne) I I I I I i check mode (f,mod) ; INT VAR pattern pos := f.co1 + 1 ; search down (f.used, f. atoms , pattern, max line, pattern pos) f.co1 := pattern pos IENDPROC down I I I downety (f, pattern, file s1ze) I IENDPROC downety I file handling 16/38 E LAN Zeile EUMEL 1.8 .*.. 10.11.86 file handling 1890 1891 1892 1893 1894 1895 1896 1897 1898 downety .................. IPROC downety (FILE VAR f, TEXT CONST pattern, INT CONST max 11ne) 1899 1900 1901 1902 1903 1904 up ....................... IPROC up (FILE VAR f, TEXT CONST pattern) 1905 1906 1907 1908 1909 1910 1911 1912 1913 up ....................... IFROC up (FILE VAR f, TEXT CONST pattern, INT CONST max line) 1914 1915 1916 1917 1918 1919 uppety 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 uppety ................... IPROC uppety (FILE VAR f, TEXT CONST pattern, INT CONST max line) 1930 1931 1932 1933 len ...................... 1 INT FROC len (FILE CONST f) 1 1 1 1 1 check mode (f, mod) ; INT VAR pattern pos := f.col ; search down (f. used, f. atoms , pattern, max line, pattern pos) f. col :. pattern pos 1 1ENDPROC downety 1 I 1 up (f, pattern, file size) 1 IENDFROC up 1 1 1 1 1 1 check mode (f,mod) INT VAR pattern pos := f.col - 1 ; search up (f.used, f.atoms, pattern, max line, pattern pos) f.col := pattern pos 1 IENDFROC up 1 ••••••••••••••••••• 1FROC 1 1 uppety (FILE VAR f, TEXT CONST pattern) uppety (f, pattern, file size) 1 IENDPROC uppety 1 1 I 1 1 1 1 check mode (f,mod) ; INT VAR pattern pos := f.col ; search up (f.used, f. atoms , pattern, max line, pattern pos) f.col := pattern pos IENDPROC uppety 1 1 I 1 length (record) . 1 1 1934 1935 1936 1937 16/39 record Irecord : f.atoms (f.used.1ndex).11ne . 1 1ENDPROC len ; 1 file handling 16/39 E LAN Zeile 1938 1939 1940 1941 EUMEL 1.8 •••• file handling 10.11.86 subtext ............ '.' .... 1TEXT PRCX:: subtext (FILE CONST f, INT CONST from, to) 1 1 subtext (record, from, to) . 1 1 1942 1943 1944 1945 1946 1947 1948 1949 1950 record Irecord : f.atoms (f.used.index).line 1 1ENDPRCX:: subtext 1 change ................... IPRCX:: change (FILE VAR f, INT CONST from, to, TEXT CONST new) 1 1 1 check mode (r, mod) ; change (record, from, to, new) . 1 I 1951 1952 1953 1954 1955 record. Irecord : f.atoms (f. used. index) .11ne • 1 1ENDPRcx:: change I 1 1956 1957 1958 1959 1960 1961 mark ..................... IBOOL PRcx:: mark (FILE CONST f) 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 mark 1973 1974 1975 1976 1977 1978 1979 1980 1981 marklineno ............... 1INT PRcx:: mark line no (FILE CONST f) 1982 1983 1984 1985 1986 1987 markcol .................• 1 INT PRCX:: mark col (FILE CONST f) 16/40 1 1 f.mark line) 0 1 IENDPRCX:: mark 1 . . . . . . . . . . . . . . . . . . . . . 1PRcx:: 1 1 I 1 1 1 1 mark (FILE VAR f, INT CONST line no, col) IF line no ) 0 THEN f. mark line f.mark col EUlE f. mark line f.mark col FI 1 1ENDPRcx:: ::: line no + t. prefix lines := col := 0 := 0 mark 1 I 1 1 I 1 IF f. mark line • 0 THEN 0 EUlE max (1, f . mark line - f. prefix 11nes) FI 1 IENDPRCX:: mark Ii ne no 1 1 1 1 1 1 IF f.mark line = 0 THEN 0 ELIF f. mark line ( = f. prefix lines THEN 1 file handling 16/40 ZeUe E LAN I I I 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 1.8 **** EUMEL 10.11.86 file handling ELSE f. mark col FI IENDPROC mark col I setmarkedrange ........... IPROC set marked range (FILE VAR f, mANGE VAR old rang&) previousrangeoffile I I IF mark (f) I THEN set range (f, mark line no (f), mark col (f), old I ELSE old range . - previous range of file I FI. I I Iprevious range of file : I FRANGE: (f. prefix lines, r. postfix lines, FALSE, FALSE) range) . I IENDPROC set marked range ; I I 2006 1(**••************. . . . . . . . . . . .***************...................... ) 2007 2008 I I I I I + 2009 + 2010 2011 2012 2013 2014 2015 (* Autor: P. Heyderhoff *) (* Stand: 11.10.83 *) I IBOUND LIST VAR datei; VAR sortierstelle, sortanker; IBOOL VAR ascii sort; ITEXT VAR median, tausch, links, reehts; lINT I 2016 2017 2018 2019 sort ..................... IPROC sort (TEXT CONST dateiJllLllHl) I sort (dateiname, 1) IEND PROC sort; 2020 2021 2022 2023 2024 sort ..................... IPROC sort (TEXT CONST dateina.me, INT CONST sortieranfang) I ase ii sort : = TRUE ; I sortierstelle :. sort1eranfang; sortiere (dateiname) lEND PROC sort; 2025 2026 2027 2028 lexsort .................. IPROC lex sort (TEXT CONST dateiJllLllHl) I lex sort (date1name, 1) IENDPROC lex sort ; 2029 2030 2031 2032 2033 lexsort ..............•..• IPROC lex sort (TEXT CONST dateinam&, INT CONST sorti&ra.nfang) I ascii sort : = FALSE ; I sortierstelle :. sortieranfang; sortiere (dateiname) IENDPROC lex sort ; 16/41 I I I I file handling 16/41 Ze1le 20M 2035 20:36 2037 20M E LAN EUME!. 1. 8 **** 10.11. 86 rile handling sortiere ................. IPROC sortiere (TEXT CONST dateiname) I I 2039 2040 2041 2042 2043 2044 reorganizefileifnecess 2045 2046 2047 2048 2049 2050 2051 2052 2053 sortfile reorganize file if necessary ; I sort file . I I Ireorganize file I if necessary : FILE VAH f := sequential file (modify, date1name) IF segments (f) ) 1 THEN reorganize (dateiname) FI. I I I I I Isort file : I f:= sequential I I I I file (modify, dateiname) INT CONST sortende : = lines (f) + 3 ; sortanker: = 1 + 3 ; datei:= old (d&teiname) ; quicksort( sort.&nker, sortende) I lEND PROC sort1ere; I 2054 2055 2056 2057 2058 2059 2060 2061 quicksort ................ IPROC quicksort ( INT CONST anfang, ende ) I IF anfang ( ende I THEN INT VAH p,q; I spalte (anfang, ende, p, q); I quicksort (anfang, q); I quicksort (p, ende) FI IEND PROC quicksort; 2062 2063 2064 2065 2066 spalte ................... PROC spalte (INT CONST anfang, ende, INT VAH p, q): fange an der seite an und waehle den median; ruecke p und q so dicht wie moeglich zus8.llllllen; hole ggf median in die m1tte . 2067 I fangeandersei teanundwa fange an der sei te an und waehle den median p : = &nfang; q : = ende ; INT CONST m :: (p + q) DIV 2 ; median := subtext(datei m, sortlerstelle) 2072 2073 2074 2075 2076 rueckepundqsod1chtw1em ruecke p und q so dicht wle moegl1ch zusa.mmen : REP schiebe p und q so weit wie moeglich auf bzw ab; IF p ( q THEN vertausche die beiden FI UNTIL p ) q END REP • 2077 2078 2079 vert.&uschediebelden vert.&usche die beiden : tausch : = datei p; datel p : = datel q; datel q . = t.&usch; p INCR 1; q DEeR 1 . schlebepundqsoweitwlem schiebe p und q so weit wie moegllch auf bzw ab : WHILE p kann groesser werden REP p INCR 1 END REP; WHILE q k&nn kleiner werden REP q DECR 1 END REP . 2068 2069 2070 2071 2080 2081 2082 2083 2084 16/42 file handling 16/42 Zeile 2065 2086 E LAN EUMEL 1.8 **** 10.11.86 file handling pkanngroesserwerden p kann groesser werden : IF p <= ende THEN links: = subtext (datei p, sortierstelle) IF ascii sort THEN median ) = li nks ELSE median LEXGREATEREQUAL links Fl ELSE FALSE FI . 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 qunnkleinerwerden q kann kleiner werden : IF q ) = anfang THEN rechts := subtext(datei q, sortierstelle) IF ascii sort THEN rechts ) = median ELSE rechts LEXGREATEREQUAL median FI ELSE FALSE Fl. 2105 2106 2107 2108 holeggfmedianindiemi tt hole ggf median in die mi tte IF m < q THEN verta.usche m und q ELIF m ) p THEN verta.usche m und p FI 2109 2110 verta.uschemundq verta.usche m und q : tausch := datei m; datei m .- datei q; datei q := ta.usch; q 2087 2088 2089 2090 2091 2092 2093 2094 DECR 1 • + 2111 2112 2113 verta.uschemundp + verta.usche m und p : tausch : = datei m' datei m . = datei p; datei p INCR 1 . .= ta.usch; P 2114 2115 dateim 2116 dateip 2117 2118 2119 2120 2121 dateiq 16/43 datei m I datei I I datei I lEND PROC I datai.atoms (m).line p datei.atoms (p).line q datei.atoms (q).line spalte; lEND PACKET file handling; file handling 16/43 Zeile 1 2 E LAN EUMEL I I I I 4 5 6 (-Autor: J.Lied *) (-Stand: 08.11.85 *) do, no do again I I I 7 8 9 10 ILET I I I I I I 11 12 13 14 15 I I 16 17 18 19 20 no ins = FALSE , no 1st = FALSE , no check = FALSE , no sermon = FALSE , compile line mode = 2 , do again mode = 4 , max command length = 2000 lINT VAR do again mod nr : = 0 ITEXT VAR previous command . - "" I IDATASPACE VAR ds I I 21 22 do ....................... IPROC do (TEXT CONST command) I I I I I I I I I I I 26 27 28 29 30 31 32 33 doagain 35 36 37 38 39 40 41 42 43 elan do interface 10.11.86 I 3 34 ****. elandointerface ********** IPACKET elan do interface DEFINES + 23 24 25 1.8 compileandexecute enable stop ; IF LENGTH command > max command length THEN errors top ("Kommando zu lang") ELIF do again mod nr (> 0 AND command = previous comma.nd THEN do again ELSE previous command .' cOlllll8.nd ; compile and execute FI. Ido again : I elan (do again mode, ds, "", do again mod nr, I no ins, no 1st, no check, no sermon) . I I Icompile and execute : I elan (compile line mode, I no ins, no 1st, no I ds, command, do again mod nr, check, no sermon) . IENDPROC do I 44 45 46 47 48 49 nodoagain ................ IPROC no do again : 50 51 52 elan ..................... IPROC elan (INT CONST mode, DATASPACE CONST source, TEXT CONST line, I INT VAR start module number, I BOOL CONST ins, 1st, rt check, ser) : 17/1 I I do again I IENDPROC no I mod nr := 0 do agai n ; elan do interface 17/1 Zelle 53 54 55 56 17/2 E LAN EUMEL 1.8 **** 10.11.86 I EXTERNAL 256 IENDPROC elan ; I IENDPACKET elan elan do interface do interface elan do interface 17/2 E LAN Zeile EUMEL 1.8 .... 1 1(. ------------------- 2 3 4 scanner ••**** ............. 1PACKET scanner DEFINES I I I I I 5 6 7 I I I I I I I I I 1 2 3 4 bo~ number text operator= 5 , delimi ter = 6 , end of file 7 \Ii thin cOlllllent = 8 , \lithin text = 9 ILET digit 0 48 57 I digit 9 I upper case a I upper case z I lO\ler case a I lO\ler case z I I ITEXT VAR line : = I char: = I chars: = I 30 31 32 33 34 35 38 14.05.86 ------------------- .) (. Autor: J . Liedtke •j scan, conti nue scan , next symbol : ILET t~ 9 H 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 39 40 41 42 43 VERSION 4 I 8 36 37 scanner 10.11.86 65 90 97 122; position : = 0 comment depth IBOOL VAR continue text ; lINT VAR I I I scan •.........•.....•••.. IPROC scan (TEXT I I comment depth I continue text I continue scan I CONST scan text) := 0 ; : = FALSE (scan text) IENDPROC scan ; I 44 45 46 47 48 49 50 51 continuescan ............. IPROC continue scan (TEXT CONST scan text) 52 53 54 55 nextsymbol ............... IPROC next symbol (TEXT VAR symbol) 56 18/1 I I I line: = scan text position . - 0 . I nextchar I IENDPROC continue I scan I I I I INT VAR type ; next symbol (symbol, type) scanner 18/1 Zeile E LAN 57 58 59 60 61 62 63 64 65 66 67 1.8 **** EUMEL 10.11.86 'ENDPROC next symbol , nextsymbol ......•.....•.. ,PROC next symbol (TEXT VAR symbol, INT VAR type) , , , , , , , , , , , , , 68 69 70 71 72 73 74 skip blanks ; IF is begin comment ELlF comment depth ) 0 , , , 75 76 77 78 79 BEl 81 82 processcomment 83 84 85 86 87 88 89 90 91 92 93 94 95 process tag ELIF ELIF ELIF ELIF ELIF ELIF ELSE FI. THEN process comment THEN cOllBl1ent depth DECR 1 process comment is quote OR continue text THEN process text is lower case letter THEN process tag is upper case letter THEN process bold is digi t THEN process number is delimiter THEN process delimiter is nil text THEN eof process operator 'process comment : , read comment ; , IF comment depth ~ 0 , THEN next symbol (symbol, type) , ELSE type : = within comment ' s y m b o l : = "" , FI. , , 'process tag : type : = tag assemble chars (lower case a, lower case z) symbol : = chars REP skip blanks ; IF is lower case letter THEN assemble chars (lower case a, lower case z) ELIF is digit THEN assemble chars (digi t 0, digit 9) ELSE LEAVE process tag FI ; symbol CAT chars 96 PER ; 97 98 nextchar . 99 processbold 101 102 103 108 109 110 111 112 18/2 process bold : type: = bold assemble chars (upper case a, upper case z) symbol : = chars . ,, , , , 100 104 105 106 107 scanner processnumber 'process number : , type: = number , assemble chars (digit 0, digit 9) ; , symbol:= chars ; , IF char = "." AND ahead char is digi t THEN process fraction ; IF char = "e" THEN process exponent , , , , FI scanner 18/2 Zelle E LAN EUMEL 1.8 •••• 113 114 115 116 aheadcharisdigi t 117 118 process fraction 119 120 121 122 123 124 125 126 processexponent 127 128 129 130 131 132 133 134 process text I I I Iprocess fraction: I symbol CAT char ; I nextchar; I assemble chars (digit 0, digit 9) I symbol CAT chars . I I Iprocess exponent I symbol CAT char ; I nextchar; I IF char = "+" OR char = I THEN symbol CAT char nextchar I I FI ; I assemble chars (digit 0, digit 9) I symbol CAT chars . I I Irrocess 139 140 141 142 143 144 145 146 147 148 149 155 156 157 158 159 160 161 162 163 164 165 166 18/3 endoftextorexception text : type := text symbol :,. "" IF continue text THEN continue text :. FALSE ELSE next char FI ; WHILE not end of text REP assemble chars (35, 254) symbol CAT chars ; IF NOT is quote THEN symbol CAT char nextchar FI ENJlREP Inot I I 152 153 154 FI. I I 137 138 notendoftext scanner Iahead char is digit I digit 0 <= code (ahead char) AND code (ahead char) <= digi t 9 . 135 136 150 151 10.11.86 end of text : IF is niltext THEN conti nue text : = TRUE ; type .' wi thin text ELIF is quote THEN end of text or exception ELSE TRUE FI. FALSE I I I I I I Iend of I next I I I I I I I text or exception char ; IF is quote THEN get quote ELIF is digit THEN get spacial char ELSE FALSE Fl. scanner TRUE TRUE 18/3 E LAN Zeile 167 getquote 168 169 170 171 getspecialchar 173 174 processdelimiter 177 178 179 180 processoperator 186 187 188 189 190 191 192 193 I Iget special char: I assemble chars (digit 0, digit 9) I symbol CAT code (int (chars) ) ; I nextchar. Iprocess delimiter : I type:. delimiter I symbol:. char I nextchar. I I Iprocess I I I I I 194 195 196 197 198 ~r 200 201 202 203 sCanner Iget quote : I symbol CAT char I nextchar. I I I I I I I I 182 183 184 185 ~9 ***. I I 175 181 10.11.86 I 172 176 EUMEL 1.8 **** islowercaseletter 204 205 I I I I I opera tor : type:. opera tor symbol:. char; next char ; IF symbol. "." THEN IF char· "." OR char = "." THEN symbol :. ":." nextchar ELSE type :. de limi ter FI ELIF is relational double char THEN symbol CAT char ; nextchar ELIF symbol • "." AND char = "." THEN symbol :. "**" next char FI. I~f I I I I type. - end of rile symbol:."" 11s lower case letter lower case a <. code (char) AND code (char) I I I I is I I I 206 207 208 isuppercaseletter 209 210 211 isdigit 212 213 isdelimi ter 214 isrelationaldoublechar lis relational double char: I TEXT VAR double :. symbol + char ; I double = "<)" OR double. "<." OR double 215 216 217 18/4 <= lower case z . upper Case letter upper case a <= code (char) AND code (char) <- upper case z . lis digit dig1t 0,= code (char) AND code (char) <- digit 9 . I I I I is delimiter pcs ( "()[ J. ,;" , char ) ) 0 . I I ")." I scanner 18/4 Zeile E LAN 218 219 isquote 220 221 isniltext 222 223 224 225 isbegincomment 226 227 228 229 230 231 EUMEL 1.8 **** char • '''''''' I I 11s nlltext char I I lis begin comment : char ft{ft OR char ft{ ft AND &head char nextchar ................. I PROC next char : I I I position INCR 1 char: = line SUB position I I ENDPROC next char ; I skipblanks ............... I PROC skip blanks : I I position:= pos I IF posi tion = 0 I THEN pos1 tion I FI; ~5 236 237 238 239 240 241 M2 I (line, ""3:3 ftft , ftft2M"" , position) : = LENGTH line + 1 char: = line SUB position I I ENDPROC sk1p blanks ; I M3 244 245 246 247 M8 aheadchar ................ I TEXT PROC ahead char : 249 250 251 252 253 254 255 assemblechars ............ IPROC assemble chars (INT CONST low, high) 256 257 258 259 260 261 262 263 264 265 266 267 268 18/5 ft." . I IENDPROC next symbol ; I ~2 233 234 liS quote scanner 10.11.86 I I line SUB posi tion+l I IENDPROC ahead char I I I positionbehindvalidtex INT CONST begin :. position; I position behind valid text; I chars:= subtext (line, begin, I char: = line SUB position . I I lposition behind valid text: I position:= pos (line, ftft32ftft, I IF position = 0 I THEN position : = LENGTH line I FI; position-i) code (low-i), begin) + 1 I INT CONST higher pos : = pos (line, code (high+1), ftft254 ftft , begin) I IF higher pos (> 0 AND higher pos ( position THEN position . - higher pos I I Fl. I IENDPROC assemble chars I I scanner 18/0 Zeile 269 270 271 E LAN EUMEL 1.8 TEXT VAR l&st ch&r comment depth INCR 1 REP l&s t ch&r : = ch&r ; nextchar ; IF is begin comment THEN read comment FI ; IF char = ftft THEN LEAVE read comment FI UNTIL is end comment PER comment depth DEeR 1 next char ; skip bl&nks . 273 274 275 276 277 278 279 280 281 282 28:3 284 285 286 isendcomment 288 'is end comment : , ch&r = ftlft OR ch&r , = ft)ft, AND l&st ch&r • ft(ft AND &head char. ft.ft • , 289 290 291 292 29:3 294 295 scanner 10.11.86 readcomment. . . . . . . . . . . . .. PROC read comment : 272 287 ..... isbegincomment 'is begin comment , ch&r. ft{ft OR ch&r • , ,'ENDPROC read comment , ft.ft • 296 297 298 299 :300 :301 :302 sc&n ..................... 'PROC sc&n (FILE VAH f) :303 :304 :305 :306 :307 :308 :309 310 311 nextsymbol ............... 'FROG next symbol (FILE VAH f, TEXT VAH symbol) 312 313 314 315 316 317 318 319 320 321 322 nextsymbol ............... 'PROG next symbol (FILE VAH f, TEXT VAH symbol, IN! VAH type) 18/6 , , , , getline (f, line) ; sc&n (line) ,'ENDPROC sc&n , , , , IN! VAH type ; next symbol (f, symbol, type) ,'ENDPROC next symbol ,'TEXT VAH sc&nned , , , , , , i ,, next symbol (symbol, type) ; WHILE type ) = 7 AND NOT eof (f) REP getline (f, line) ; continue sc&n (line) ; next symbol (sc&nned, type) symbol CAT sc&nned PER. 'ENDPROC next symbol sc&nner 18/6 Zeile 323 324 18/7 E LAN EUMEL 1.8 **** 10.11.86 scanner I IENDPACKET scanner scanner 18/7 Zeile 1 2 3 4 E LAN 1. 8 EUMEl **** screen description 10.11.86 screendescription ********IPACKET screen description DEFUIES I i I I 5 6 7 8 xsize, ysize, markslze, mark refresh line mode lINT VAR xs := 80, ys .= 24, ms :. 1; I 9 10 xslze .................... lINT PROC xsize: xs END PROC xslze; 11 12 ysize .................... lINT PROC ysize: ys END PROC ysize; 13 14 ma.rksize ................. IINT PROC marksize: ms END PROC marksize; 15 16 xslze •••.•..••.....••••.• IPROC xsize (INT CONST 1): xs := i END PROC xslze; I 17 18 yslze 19 marks1ze ................. IpROC markslze (INT CONST i): ms : = i END PROC marksize; 20 21 22 23 I I I ..•.••••••.•........ IPROC yslze (INT CONST 1): ys : = 1 END PROC ys1ze; I I I IBOOt VAR line mode. - FALSE; I 24 25 26 27 ma.rkrefreshlinemode ...... IBOOt PROC mark refresh line mode: I li ne mode IEND PROC mark refresh line mode; 28 29 markrefreshllnemode ...... IpROC mark refresh line mode (BOOt CONST b): I line mode := b lEND PROC mark refresh line mode; ~ 31 32 19/1 I I IEND PACKET screen descr1ption ; screen descr1pt1on 19/1 Ze11e 1 2 + :3 4 5 6 7 8 9 10 11 12 13 14 E LAN EUMEL 1.8 •••• 10.11.86 I tastenverwaltung ......... IPACKET tasten verwaltung I ..ee9·) I I I tasten verwaltung DEFINES (............... ) lernsequenz auf taste legen, lernsequenz auf taste, kommando auf taste legen, kommando auf taste, taste enthaelt kommando, std tastenbelegung : I I I I I I I I ILET kommandoidentlfikat1on ""0"", esc = ""27"'" , niltext • hop r1ght left up down cr tab rubin rubout mark esc ""1""2""8""3""10""13""9""11""12""16""27"" 2(;) I I I I I I 21 22 lINT VAR i; FOR i FROM 1 UPl'O 256 REP belegung (i) . - "" PER; 23 I 24 25 26 I I 15 16 17 18 19 27 28 29 3e 31 32 33 34 35 36 37 38 39 4(;) 41 42 43 44 45 46 47 48 49 50 51 52 20/1 IROW 256 TEXT VAR belegung; I std tastenbelegung; lernsequenzauftasteleg ... IPRo::: lernsequenz auf taste legen (TEXT CONST taste, lernsequenz) I I belege (belegung (code (taste) + 1), taste, lernsequ"nz) I IENDPROC lernsequenz auf taste legen ; I belege ................... IPROC belege (TEXT VAR tastenpuffer, TEXT CONST taste, lernsequenz) I tastenpuffer: = lernsequenz ; I verhindere rekursi ves lernen . I I verhindererekursi vesle Iverhindere rekursi ves lernen : I loesche alle folgen esc taste aber n1cht esc eSC taste I IF taste 1st rreies sonderzeichen I THEN change all (tastenpuffer, taste, n11text) I I I FI. loescheallefolgenescta Iloesche alle folgen esc taste aber n1cht esc esc taste I INT VAR 1 : = pos (tastenpuffer, "sc + taste) ; I WHILE i ) (;) REP I IF 1st eSC eSC taste I THEN i INCR 1 I ELSE change (tastenpuffer, 1, 1+1, n11text) I FI; I i : = pos (tastenpuffer, esc + taste, i) I PER. I tasten verwaltung 20/1 ZeUe E LAN EUMEL 53 54 55 1stescesctaste 56 57 58 tasteistfreiessonderze 59 60 61 62 63 64 65 66 67 68 69 70 1. 8 **** tasten verwaltung 10. 11. 86 Iist esc esc taste : I (tastenpuffer SUB i-l) = esc I I Itaste ist freies sonderzeichen I taste ( ""32"" AND I I I AND (tastenpuffer SUB i-2) () esc. : pos (hop right left up down cr tab rubin rubout mark esc, taste) 0 . I END PROC be lege I I lernsequenzauftaste ...... ITEXT PROC lernsequenz auf taste (TEXT CONST taste) I IF taste enthaelt kommando (taste) I THEN"" I ELSE belegung I FI (code (taste) + 1) I END PROC lernsequenz auf taste; I I 71 72 73 74 75 76 77 78 kommandoauftastelegen .... IPROC kommando auf taste legen (TEXT CONST taste, kommando) 79 80 81 82 kommandoauftaste ......... ITEXT PROC kommando auf taste (TEXT CONST taste) I IF taste enthaelt kommando (taste) I TIlEN subtext (belegung (code (taste) + 1), 2) 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 2JiJ/2 I I I I belegung (code (taste) + 1) := komm&ndoidentlfikation; belegung (code (taste) + 1) CAT kommando I END PROC kommando auf taste legen; I I I ELSE I FI IEND PROC I I kommando auf taste; tasteenthael tkommando .... 1800L PROC taste enthael t kommando (TEXT CONST taste) : I (belegung (code (taste) + 1) SUB 1) = kommandoidentiflkat1on lEND PROC taste enthaelt kommando; I I stdtastenbelegung •••••••• I PROC std tastenbelegung: I lernsequenz auf taste legen I lernsequenz auf taste legen I lernsequenz auf taste legen I lernsequenz auf taste legen I lernsequenz auf taste legen I lernsequenz auf taste legen I lernsequenz auf taste legen I lernsequenz auf taste legen I lernsequenz auf taste legen I lernsequenz auf taste legen tasten verwaltung ("(", ''''91'''') ; (")" , ''''93''''); ("(" , ""123"") ; ( " ) " , ftftl25'''') ; (ftA", ""214'''') ; ("0", ""215"") ; ("U", ''''216"''} ; ("&" , ""217""); ("0" , ""218"") ; ("u" , ""219""); 2JiJ/2 Zelle 103 104 105 106 107 108 109 110 111 112 2fi>/3 E LAN EUMEL 1.8 **** 10.11.86 I I I I I I lernsequenz auf taste legen lernsequenz auf taste legen lernsequenz auf taste legen lernsequenz auf taste legen lernsequenz auf taste legen lernsequenz auf taste legen lEND PROC std tastenbelegung; tasten verwaltung ("k". ''''220''''); ("-", ""221""); (".", ""222""); (" ", ""223""); ("B", ''''251'''') ; ("s" , ""251""); I I lEND PACKET tasten verwaltung; tasten verwaltung 2fi>/'J Zeile 1 2 + 3 4 E LAN EUMEL 1.8 **** ,, ,,, ,, 6 + 49 50 51 52 53 :i4 55 21/1 (. EDITOR edi torpaket .............. 'PACKET editor p&ket DEFINES 5 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 ed1 tor p&ket 10.11.86 ,, , , ,,, , ,LET , , , ,,, , , I ,, ,LET , , , ,LET , , , , 123 .) ( ********** ) -bk- .) (. 19.07.8:5 (. -W9- 10.09.8:5 .) (. 25.94.86 -sh- .) edit, editget, -wk- *) quit, quit l&st, -jl- *) push, type, word wrap, ma.rgin, write permission, set busy indic&tor, two bytes, is k&nJi esc, within k&nJi, rubin mode, is editget, editget comm&nd, getch&r, getch&rety, is inch&rety, get Window, get edi tcursor, get editline, put editl1ne, &ktueller editor, groesster editor, open edi tor, edittlle, hop up ch&r cle&r eol piep down ch&r rubout m&rk key inscr b&ckcr d&ch (. 10.86.86 (. 04.86.86 nichts neu, s&tznr neu, ueberschritt neu, zelle neu, &bschni tt neu, bild&bschni tt neu, b1ld neu, &lles neu, 5&tznr ze igen, ueberschritt zeigen, blld zeigen: = ""1"", = "''''3'''', ""'18"", ""20"", right cle&r eop cursor pos lett rubin cr &bscr dezim&l esc ""94"", bl&nk ""5"", ""7"", "'''10"'', =- ""'12"", ""'16"", no output • 0, out teldrest • 2, cle&r teldrest • 4; ""2"" , ""4"" , ""6"", ""8"" , ""11"'" , .. ""13"", "" ""17"", ""19"" , =- ""27"", . "., out zeichen out teld • 1, • 3, FELDSTATUS • STRUCT (INT stelle, <e stelle, r&nd, limit, &nta.ng, m&rke, !&enge, verschoben, BOOL eintuegen, tliesstext, write access, TEXT t&bul&tor) ; ,'FELDSTATUS VAH teldst&tus; 'TEXT VAH begin m&rk := , end m&rk :. , ~~15~", ~~14ww; 'TEXT VAH sep&r&tor .' "", kollllll&lldo .• "" , &udit editor p&ket .K zeichen .- 21/1 n . Zeile E LAN 69 70 1.8 •••• I I 56 57 58 59 68 61 62 63 64 65 66 67 68 EUMEL lINT 10.11.86 satzrest .- edi tor paket merksa tz :.. '''', alter edi tsa tz : = ''''; VAR kOllDll&ndo zeiger : = 1, umbruchstelle, umbruch verschoben, I I I zeile, spalte, output mode := no output, pestblanks := 8, min schreibpes, ma.x schrelbpes, cpes, absatz ausgleich; IBOO1 VAR lernmodus := FALSE, separator eingestellt := FALSE, invertierte darstellung :. FALSE, absatzmarke steht, cursor dlff : = FALSE, edi tget modus : = FALSE, two byte mode : = FALSE, std fllesstext : = TRUE, edi tget kommando darf ausge1'iihrt werden : = TRUE;. I I I I I schirmbrel te schlrmhoehe ma.xbreite I Ischirmbrelte I Ischirmhoehe I Imaxbrei te X size - 1 y size schirmbreite - 2 . I 71 72 73 74 75 76 77 78 79 88 81 82 83 84 85 86 87 88 89 98 91 92 93 94 95 96 97 98 99 108 101 102 183 184 105 186 187 21/2 ma.xla.enge mark length Imaxla.enge schirmhoehe - 1 . I lmarklength mark size ., I I ini tialisiere editor; I l.initia11s1ere editor I anfang:. 1; zeile := 0; verschoben := 0; tabulator := ftft; I e1nfuegen: = FALSE; fliesstext : = TRUE; zellene1nfuegen . - FALSE; I marke:= 0; bildmarke := 8; feldm&rke := 0.; I ed1 tgetcolIDII&nd ........... IPROC edi tget cOlIDII&nd (BOO1 CONST schalter) : I edi tget kOllDll&ndo darf ausgeflihrt werden : = schalter IENDPROC edi tget cOlIIIII&nd ; I 1(*.************************."*** I I editget ................................ ) edltget .................. PROC ed1tget (TEXT VAR editsatz, INT CONST editlim1t, editlaenge, TEXT CONST sep, res, TEXT VAR exit char) : IF ed1 tla.enge ( 1 THEN errorstop (ftFenster zu kle1nft) FI; separator : = ftft13 ftft ; separator CAT sep; separator eingestellt := TRUE; TEXT VAR reservierte editget tasten :. ftftllftft12ftft reservierte ed1tget tasten CAT res; disable stop; absatz ausgleich := 8; exit char :. ftft; get cursor; FELDSTATUS CONST alter feldstatus := feldstatus; feldstatus := FELDSTATUS : (1, 1, spalte - 1, ed1tlimit, 1, 8, editla.enge, 8, FALSE, FALSE, TRUE, ftft); konstanten neu berechnen; output mode :. out feld; feld ed1 tieren; zeile verlassen; !eldstatus :. alter feldstatus; konstanten neu berechnen; separator . _ ft"; separator eingestellt := FALSE editor pake t 21/2 Zelle E LAN EUMEL edi tor pakat 10.11.86 I I 108 199 119 111 112 1.8 **** feldedi tieren I feld edi tieren I I 113 114 115 116 117 118 119 129 121 122 123 124 125 126 127 128 129 139 REP feldeditor (editsatz, reservierte edltget testen); IF is error THEN kommando zeiger : = 1; kommando :. MM; LEAVE feld edl tieren FI ; TEXT VAR t, zeichen; getchar (zeichen); IF zeichen ist sepa.rator THEN exit char:. zeichen; LEAVE feld editleren ELIF zeichen = hop THEN feldout (edi tsa tz, stelle); getchar (zeichen) ELIF zeichen = mark key THEN output mode : = out feld ELIF zeichen = abscr THEN exit char : = cr; LEAVE feld editieren ELIF zeichen = esc THEN getchar (zeichen); auf exit pruefen; IF zeichen = rubout (*sh*) THEN IF marke) 9 THEN merksatz := subtext (editsatz, marke, stelle - 1)1 change (edi tsatz, marke, stelle - 1, MM); stelle : = marke; marke :. 9; konstenten naU berechnen FI ELIF zeichen rubin THEN t := subtext (editsatz, 1, stelle - 1); 131 132 133 134 135 136 137 138 139 t CAT merksa tz; satzrest := subtext (edltsatz, stelle); t CAT satzrest; stelle INCR LENGTH merksatz; merksatz := MM; editsatz := t ELIF editget kOlllll&ndo darf ausgefUhrt werden 149 CAND 141 142 143 144 145 146 147 148 149 zelchen ist kein esc kommando COO kommando auf teste (zeichen) () THEN editget kommando ausfuehren 159 + 151 FI ; I zeichenistke1nesckolllll& Izeichen ist kain esc kommando : I (*wk*) I pos (hop + left + right, zeichen) • 9 . 152 153 154 155 156 157 158 zeileverlassen 159 169 zeichenistsepa.rator 21/3 output mode :. out feld I FI I PER. I I I I Izeile I I I I I I verlassen : IF marke) (;) OR verschoben () 9 THEN stelle DECR verschoben; verschoben .= a; feldout (editsatz, 8): ELSE cursor (rand + 1 + min (LENGTH editsatz, edi tl.aenge) , zelle) Fl. Izeichen ist sepa.rator pos (separator, zeichan) ) a. I edi tor paket 21/3 ZeUe E LAN EUMEL 1.8 **** 18.11.86 ed1 tor pLket 161 162 163 164 165 aufexitpruefen 166 167 editgetkommandoausfueh led1tget kommando ausfuehren I edi tget zust&ende sichern I do (kommando auf taste (zeichen» I alte ed1 tget zustaende w1eder herstellen I IF stelle < marke THEN stelle :. marke FI; I konstanten neu berechnen . 168 169 17@ 171 lauf exit pruefen : I IF pos (res, zeichen) ) @ I THEN exit char : = esc + zeichen; LEAVE feld edit1eren I FI. I I I I led1tget zustaende I (*wk*) 172 173 editgetzust&endesicher + 174 175 176 177 178 179 188 181 182 163 184 185 186 187 188 189 190 191 192 + 193 194 195 196 + 197 198 + 199 200 201 + 202 I I I I I I I I I I sichern : 800L VAR alter edi tget modus : = ed1 tget modus; FELllSTATUS VAR feldstatus vor do kommando := feldstatus INT VAH zelle vor do kommando : = zelle ; TEXT VAR separator vor do kOlll1l&ndo :. separator ; 800L VAR separator eingestellt vor do kommando :. separator eingestellt ; editget modus := TRUE ; alter edi tsa tz : = edi tsa tz al teedi tgetzust&endewi Ialte edi tget zustaende wieder herstellen I editget modus := alter editget modus; I editsatz : = alter edi tsatz; I feldstatus: = feldstatus vor do kommando I ze 11e : = ze 11e vor do kommando ; I separator: = separator vor do kommando ; I separator eingestallt : = separator e1ngestellt vor do kOlll1l&ndo . I lEND PROC ed1tget; I ed1tget .................. IPROC ed1tget (TEXT VAR editsatz, INT CONST edltl1mit, TEXT VAH ex1t I char): I editget (editsatz, editlimit, x s1ze - x cursor, ex1t chi (* 85.07.84 lEND PROC editget; I I -bk- *) ed1tget .................. IPROC ed1tget (TEXT VAR editsatz, TEXT CONST sep, res, TEXT VAH exit I char): I editget (editsatz, max text length, x size - x cursor, sep, res, I ex1t char) IEND PROC edi tget; (* E>li.E>7.84 I -bk- *) I ed1tget .................. lpROC editget (TEXT VAR editsatz) I TEXT VAR exit char; I -bk- *) 283 I ed1 tget (ed1 tsa tz, max text length, x size - x cursor, I exit char) lEND PROC ed1tget; 2til4 I 21/4 edi tor pLket "" , 21/4 Ze1le 205 206 207 208 209 210 ..... E LAN EUMEL 1.8 •••• editor paket ed1tget .................. IPROC editget (TEXT VAR editsatz, INT CONST editl1mit, editlaenge) I TEXT VAR exit char; I ed1 tget (ed1 tsa tz, edi tlimi t, ed1 tlaenge, n , "", exi t char) IENDPROC editget; I 1(****.**********.******.... ****** I I 211 212 feldedi tor **********•••***************. . ) ITEXT VAR reservierte feldedi tor tasten I I + 213 214 215 216 217 218 219 220 221 222 223 10.11.86 (*jl*) feldeditor ............... IPROC feldeditor (TEXT VAR satz, TEXT CONST res) : I enable stop; I reservierte feldeditor tasten := ""1""2""8"" ; I reservierte feldedi tor tasten CAT res; I absatzmarke steht : = (satz SUB LENGTH satz) = blank; I alte stelle merken; I cursor diff best1mmen und ggf ausgleichen; I feld edi tieren; I absa tzrnarke upda ten . I I 224 225 altestellemerken lalte stelle merken alte stelle .• stelle. 226 227 228 229 230 231 232 233 cursordiffbestimmenund Icursor diff bestimmen und ggf ausgleichen I IF cursor diff I THEN stelle INCR 1; cursor diff : = FALSE 234 feldedi tieren I I I FI; I IF stelle a.uf zwei tem ha.lbzeichen I THEN stelle DEeR 1; cursor diff :. TRUE I Fl. I I Ife ld editieren 235 I REP 236 237 238 239 I I feld optisch aufbereiten; kommando annehmen und ausfuehren PER. I I I 240 241 242 243 244 245 absatzrnarkeupdaten 246 247 absatzmarkesollstehen 248 249 250 251 252 253 254 feldoptischa.ufbere1 ten I feld optisch aufberei ten I stelle korrigieren; I verschieben wenn erforderlich; I randausgleich fuer doppelzeichen; I output mode beha.ndeln; I a.usga.be verhindern . 21/5 labsatzrnarke updaten : I IF absatzmarke soll stehen I THEN IF NOT absatzrnarke steht THEN absatzrnarke schreiben (TRUE) FI I ELSE IF absatzmarke steht THEN absatzmarke schreiben (FALSE) 1 I Fl. I I Ia.bsa.tzmarke soll stehen (sa.tz SUB LENGTH sa.tz) blank. I I I edi tor paket 21/5 Zeile 255 256 257 258 E LAN EUMEL 1.9 **** 10.11.86 editor paket randausglelchfuerdoppe I randausglelch fuer doppelzelchen : I rr stelle = max schrelbpos CAN] stelle auf erstem halbze1chen I THEN verschiebe (1) I rI. I ~9 I 260 261 262 263 264 265 Istelle korrigieren : I rr stelle auf zwei tem halbzeichen TIIEN stelle DEeR 1 FI . I I stelleauferstemhalbzei Istelle auf erstem halbzeichen wi thin kanji (satz, stelle I I stellekorrlgieren stelleaufzweitemhalbze 266 267 268 269 270 outPltmodebehandeln Istelle I I auf zwei tem halbzeichen wi thin kanji (satz, stelle) . loutput mode behandeln : I SELECT output mode OF I CASE no output I 271 272 273 274 275 ~6 im markiermode markierung anpassen CASE out zeichen zeichen ausgeben; LEAVE output mode behandeln CASE out feldrest feldrest neu schreiben CASE out feld feldout (satz, stelle) CASE clear feldrest feldrest loeschen END SELECl'; schreibmarke positionieren (stelle) . I I I I I I I I Iausgabe I I 277 278 ausgabeverhindern 279 280 281 lmmarklermodemarklerun 11m marklermode marklerung anpassen I IF marklert THEN marklerung anpassen FI 282 283 284 285 286 287 288 marklerunganpassen 289 290 291 marklerungverlaengern 292 293 mark1erungverkuerzen ~4 295 296 297 298 299 380 301 302 21/6 + 1) . ze1chenausgeben verhindern output mode : = no output . I I Imarklerung anpassen I IF stelle) alte stelle I THEN markierung ver Laengern I ELIF stelle < al te stelle I THEN marklerung verkuerzen I Fl. I I Imarklerung verlaengern I invers out (satz, alte stelle, stelle, ,end mark) . I I Imark1erung verkuerzen I invers out (satz, stelle, alte stelle, end mark, WW) • I I Ize1chen auageben I IF NOT marklert I THEN out (zeichen) I ELIF mark refresh 11ne mode I THEN feldout (satz, stelle); schrelbmarke positionleren (stelle) I ELSE out (begln mark); markleft; out (ze1chen); out (end mark); I markleft I Fl. I edi tor paket 21/6 Zeile E LAN EUMEL 1.8 •••• 10.11.86 editor paket 3(1)3 3(1)4 305 markleft 3(1)6 3(1)7 308 3(1)9 310 311 312 313 314 feldrestneuschreiben 315 316 317 1'eldrestunmarkiertneus Ifeldrest unmarkiert neu schreiben : I schreibm&rke posi tionieren (&l te stelle); lout subtext mit randbehandlung (satz, alte stelle, stelle am ende) I I + Ifeldrest neu schreiben : I IF NOT markiert I THEN 1'eldrest unm&rkiert neu schreiben I ELSE feldrest markiert neu schre1ben I FI; I WHILE postblanks ) 0 CAND x cursor (. rand l o u t (blank); postblanks DEeR 1 I PER; postblanks :. 0 . feldrestmarkiertneusch l1'eldrest markiert neu schreiben : I markierung verlaengern; out subtext mit r&ndbehandlung I (satz, stelle, stelle am ende - 2 • I marklength) • I I 323 324 325 kommandoannehmenundaus Ikommando annehmen und aus1'uehren I kommando annehmen; kommando aus1'uehren 326 327 kommandoannehmen I I kOllllll&ndozurueckweisen1' Ikommando zurueckwelsen falls noetig : I IF NOT write access CAND zeichen ist druckbar I THEN benutzer warnen; kommando ignorieren I IT. I I ~ 333 benutzerwarnen lbenutzer warnen out (piep) . I I 335 336 337 Ikommando annehmen I getchar (zeichen); kommando zurueckwelsen falls noetig . I I 328 334 laenge REP I I I 322 329 330 331 + I I 318 319 320 321 Imarkleft : I marklength TlMESOUT left kommandoignorieren Ikommando ignorieren : I zeichen: = Oft; LEAVE kommando annehmen und aus1'uehren . 339 340 341 342 343 344 345 346 347 348 kommandoausfuehren Ikommando ausfuehren : I neue satzlaenge bestlmmen; I alte stelle merken; I IF zeichen ist separator I THEN 1'eldedi tor verlassen I ELIF zeichen ist druckbar I THEN fortschreiben I ELSE funktionstasten behandeln 349 350 neuesatzla.engebestinvne Ineue satzla.enge bestimmen I 338 I 21/7 I Fl. I I INT VAR satzla.enge :. LENGTH satz . I edi tor paket 21/7 Zeile E LAN 351 352 feldeditorverlassen EUMEL 1.8 **** + 353 354 355 356 357 10.11.86 ed1 tor paleet Ifeldedi tor verlassen I IF NOT absatzmarke steht THEN blanks abschneiden Fl; I (*sh*) I push (zeichen); LEAVE feld editieren . I I blanksabschneiden + 358 359 36@ Iblanks abschneiden : I INT VAH letzte non blank pos := satzlaenge; I WHILE letzte non blank pos ) 0 CAND (satz SUB letzte non blank I pos) = blank REP I letzte non blank pos DEeR 1 I PER; sa tz : = subtext (sa tz, 1, letzte non blank pos) . I I 361 362 zeichenistdruckbar 363 364 365 zeichenistseparator 366 367 368 369 370 fortschre1ben 371 372 373 374 375 376 zeicheninsatzeintragen Izeichen in satz elntragen : I IF hinter dem satz I THEN satz mit leerzeichen auft'uellen und zeichen ant'uegen I ELIF einfuegen I THEN zeichen vor aktueller position eint'uegen I ELSE altes ze1chen ersetzen I Fl. ~ I t'ortschre1ben I zeichen in satz eintragen; I IF is kanji esc (zeichen) THEN kanji zeichen schreiben FI; I bei erreichen von limit ueberlauf behandeln . I hinterdemsatz I Ihinter dem satz stelle) satzlaenge . I I satzmi tleerze1chenaut'f Isatz mit leerzeichen auffuellen und zeichen ant'uegen I sa tz AIlFFUELLENMIT blank; I zeichen ant'uegen; I output mode : = out zeichen 385 386 Izeichen ist sepa.rator : I separator eingestellt CAND pos (separator, ze1chen) ) 0 . I I 38S 381 382 383 384 zeichen)= blank . I I 378 379 Izeichen ist druckbar I I zeichenant'uegen I I Izeichen anfuegen I 387 388 ze1chenignorieren 389 390 391 392 393 zeichenvoraktuellerpos Izeichen vor aktueller position einfuegen I insert char (satz, zeichen, stelle); I neue sa tzlaenge bestimmen; I output mode : = out feldrest 394 395 396 397 398 399 al teszeichenersetzen 21/8 Izeichen ignorieren satz CAT zeichen; neue satzlaenge bestilllllHln . benutzer warnen; LEAVE kommando aust'uehren . I I I I Ial tes zeichen ersetzen : I replace (satz, stelle, zeichen); I IF stelle auf erstem halbzeichen I THEN output mode .- out feldrest; replace (satz, stelle + 1, blank) I ELSE output mode : = out zeichen I Fl. edi tor paleet 21/8 •••• E LAN 400 401 402 403 404 405 406 407 408 409 410 1. 8 EUMEL k&nJizeichenschreiben .. ** 10.11. 86 •••• I I Ikanji zeichen schreiben : I alte stelle merken; I stelle INCH 1; getchar (zeichen); I IF ze1chen ( ""64"" THEN ze1chen .- ""64"" FI; I IF hinter dem satz I THEN zeichen anfuegen I ELIF einfUegen I THEN zeichen vor aktueller posit1on einfuegen I ELSE replace (satz, stelle, zeichen) I FI; 411 I output mode : = out feldrest . 412 I I lbei I 413 beierreichenvonlimitue + 414 415 416 417 418 419 satzl&engekrltisch 420 421 422 423 424 425 426 + 427 428 429 430 431 umbruchmoeg11ch 435 437 438 439 440 441 442 443 444 445 446 447 448 449 4~ 21/9 erreichen von limit ueberlauf behandeln (.sh.) I IF satzlaenge kritisch I THEN in naechste zelle falls moeglich I ELSE stelle INCH 1 I I I Fl. I I I Fl. I I I Fl. Isatzlaenge kritisch I IF stelle). satzl&enge I THEN sa tzlaenge limit I ELSE satzlaenge - lim1 t + 1 innaechstezellefallsmo 11n naechste zeile falls moegl1ch I IF fliesstext AND umbruch moeglich 011 NOT fliesstext AND stelle I ). satzlaenge I THEN in naechste zeile I ELSE s te lle INCH 1 432 433 434 436 editor p&ket 1nnaechstezeile lumbruch moeglich I INT CONST st := stelle; stelle := limit; I INT CONST 1tzt wortanf : = letzter wortanfang (satz) ; I stelle: = st; einrueckposi tion (satz) ( ltzt wortanf I I 11n naechste zeile I IF fliesstext I THEN ueberlauf und oder umbruch I ELSE ueberlauf ohne umbruch I I I Fl. I I Fl. ueberlaufUndoderumbruc lueberlauf und oder umbruch I INT VAR umbruchpos :. 1; I umbruchposi t10n bestimmen; I loeschpos1tion bestimmen; I IF ste lle = satzl&enge I THEN ueberlauf mit oder ohne umbruch I ELSE umbruch mit oder ohne ueber lauf ed1 tor p&ket 21/9 Zeile E LAN 1.8 •••• EUMEL 10.11.86 editor p&ket 451 452 453 454 455 456 umbruehposi tionbestimm Iumbruehposi tion bestimmen : I umbruehstelle: = stelle; I stelle: = sa tzlaenge ; I umbruehpos: = max (umbruehpos, letzter wortanfang (sa tz) ) ; I stelle:. umbruehstelle . 457 458 459 460 loesehposi tionbest1mme Iloesehpos1 tion best1mmen I INT VAR loesehpos := umbruehpos; I WHILE davor noeh blank REP loesehpos DEeR 1 PER . 461 462 463 davornoehblank 464 465 ganzlinks 466 467 468 469 470 471 ueberlau!mi toclerohneum Iueberlau! mit oder ohne umbrueh : I IF ze1ehen. blank OR loesehpos • ganz links I THEN stelle : = 1; ueberlauf ohne umbrueh I ELSE ueberlauf mit umbrueh I FI. 472 473 ueberlaufohneumbrueh 474 475 476 477 478 ueberlaufmitumbruch 479 480 481 482 483 484 umbruehkommandoau!bere lumbruehkommando au!bere1ten : I ze 1ehen : = hop + rubout + inser; I satzrest:= subtext (satz, umbruehpos); I zeiehen CAT satzrest; I IF stelle 1st 1m umgebrochenen teil I THEN insert char (zeiehen, backcr, max (stelle - umbruchpos + 1, I I I I Idavor noeh blank I loesehpos > ganz links CAND (sa tz SUB (loesehpos - 1» blank. I I Iganz links max (1, marke) . I I I I lueberlau! ohne umbrueh push (er) . I I Iueberlau! mit umbruch : I ausgabe verhindern; I umbruehkommando au!bere i ten; I auf loesehposition positionieren I I I 485 486 487 I I I 488 0) + 4); zeichen CAT backer FI; push (ze1ehen) . I I Istelle I I 489 490 stelleist1mumgebroehen ist im umgebroehenen teil stelle >= loeschpos . 491 492 au!loeschposit1onposit lau! loeschposit1on positionieren stelle.m loeschpos . 493 494 495 496 497 498 499 umbruchmitoderohneuebe lumbruch mit oder ohne ueberlau! : I umbruchposition anp&ssen; I IF stelle ist 1m umgebrochenen teil I THEN umbrueh mit ueberlau! I ELSE umbruch ohne ueberlau! I FI. 21/10 I I I ed1 tor paket 21/10 Zaile 500 501 502 503 504 505 E LAN EUMEL neueloesehposi tionbest 5U 511 M2 stellenoehnichterreich 513 514 umbruchmitueberlauf 515 516 517 518 519 520 521 522 523 524 525 umbruehohneueberlauf 526 527 528 529 530 531 532 533 534 535 536 537 funktionst&stenbehande ~3 21/11 10.11. 86 edi tor pa.ket I I Ineue loeschposi tion bestimmen : I loeschpos: = umbruehpos; I WHILE davor noeh blank AND stelle noeh I loesehpos DEeR 1 PER . I I I stelle noeh nicht erreieht loesehpos) I I lumbrueh mit ueberlauf nieht erreicht REP stelle + 1 . ueberlauf mit umbruch . I I lumbrueh ohne ueberlauf : zeiehen: = inser; satzrest:= subtext (satz, umbruehpos); zeiehen CAT satzrest; zeiehen CAT up char + baeker; umbruehstelle INCR 1; umbrueh versehoben .• versehoben; satz:= subtext (satz, 1, loesehpos - 1); schreibm&rke positionieren (loesehpos); feldrest loeschen; output mode: = out feldrest; I push (zeichen) I I I I I I I I I I Ifunktionst&sten behandeln I SELECT pos (komma.ndos, zeichen) OF I CASE c hop hop kOll1lll&ndos beh&ndeln I CASE c esc esc kOmm&lldos behandeln I 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 --- umbruchposltionanpasse lumbruchposition anpassen : I IF zeichen = blank I THEN umbruchpos : = stelle + 1; I umbruehposi tion bestimmen; I neue loesehposi tion bestimmen I Fr. 596 507 508 509 1. 8 komma.ndos CASE e right naeh reehts oder ueberl&uf I CASE e left wenn moeglich ein schri tt nach links I CASE c tab zur naeehsten tabulator pos1 tion I CASE c dezim&l dezim&len schreiben I CASE e rubin einfuegen umseh&l ten I CASE e rubout ein zeichen loeschen I CASE e abser, e inser, e down : feldeditor verl&ssen I CASE e up eine zelle naeh oben I (-sh-) I CASE e cr ggf absatz erzeugen I CASE e mark markieren umseh<en I CASE e backcr zurueck zur umbruchstelle I OTHERWISE sondert&ste hahandeln I END SELECT • I I Ikomma.ndos I LET e hop 1, e right • 2, I e up 3, cleft 4, I e t&b 5, c down 6, I e rubin 7, c rubout 8, leer e abser e dezim&l c backcr I I I I = 9, 11 , 13, 15; editor pa.ket e mark c inscr c esc 18, • 12, = 14, 21/11 Zaile **** E LAN 1. 8 EUMEL I I I 554 555 **** 10.11.86 **** edi tor paket ""1""2""3""8""9""19""11""12""13""16""17""18""19""27""20"". 556 557 dezimalenschreiben 558 559 560 zurueckzurumbruchstell Izurueck zur umbruchstelle: I IF umbruch stelle ) 0 THEN stelle :. umbruch stelle FI; I IF verschoben umbruch verschoben I THEN verschoben : = umbruch verschoben; output mode : = out feld I FI. 561 562 Idezimalen schreiben I I 563 564 565 566 567 568 569 hopkommandosbehandeln hop kommandos behandeln : TEXT VAR zwei tes zeichen; getchar (zwe! tas zeichen); zeichen CAT zwei tes zelchen; SELECT pos (hop kommandos, zwei tes zeichen) OF CASE h hop nach links oben CASE h right nach rechts blaet tern CASE h left nach links blaettern CASE h tab tab position detinieren oder loeschen CASE h rubin zeile spli tten CASE h rubout loeschen oder rekombin1eren CASE h cr, h up, h down: feldedi tor verlassen OTHERWISE : zeichen ignorieren END SELECT . 570 571 572 573 574 575 576 577 578 579 580 581 582 583 hopkommandos nachlinksoben 588 589 599 591 592 593 + 594 595 596 597 598 Ihop kommandos I LET h hop I h up I h tab I h rubin I h cr I I I I 584 585 586 587 IF write access THEN dezimaleditor (satz) FI . I I nachrechtsblaettern 1, h h h h 3, = 5, • 7, • 9; right lett down rubout • 2, 4, 6, 8, ""1""2""3""8""9""10""11""12""13"" Inach links oben I stelle:= max (marke, anfang) + verschoben; feldeditor verlassen I I Inach rechts blaettern : I INT CONST rechter rand .' stelle am ende - mark1erausgle1ch; I IF stelle ist am rechten rand I THEN stelle INCR laenge - 2 * mark1erausgleich + ausgle1ch fuer I doppelzeichen I ELSE stelle :. rechter rand I FI; I IF satzlaenge <= limit THEN stelle := min (stelle, limit) FI; I alte einrueckposition mitziehen . I I 599 600 801 602 stelleistamrechtenrand Istelle ist am rechten rand: I stelle auf erstem halbzeichen CAND stelle • rechter rand - 1 I COR stelle rechter rand 603 6e4 ausgleichfuerdoppelzei lausgleich fuer doppelzeichen 21/12 I I stelle - rechter rand . I ed1 tor pa.ke t 21/12 Zeile E LAN 605 606 607 608 609 nachl1nksblaettern EUMEL 1.8 lnach links blaettern : INT CONST linker rand . - stelle am anfang; IF s te lle = linker rand THEN stelle DEeR laenge - 2 • mark1erausgle1ch ELSE stelle :. 11nker rand FI; I stelle:. max "(ganz links, stelle); I alte e1nrueckposit1on mitz1ehen . 610 614 618 619 ed1 tor paket 10.11.86 I I I I I 611 612 M3 615 616 617 •• - I I tabposi t1ondef1niereno Itab posi t10n definieren oder loeschen I IF stelle) LENGTH tabulator I THEN tabula tor AUITUELLENMIT right; tabula tor CAT dach I ELSE replace (tabulator, stelle, neues tab zeichen) I FI; I felded1 tor verlassen . I 620 I 621 622 neuestabze1chen 6~ 624 625 zellespli tten + 631 632 633 634 loeschenoderrekomblnle Iloeschen oder rekombinieren I IF NOT wri te access I THEN zeichen ignorieren I ELIF hinter dem sa tz I THEN zenen rekomb1n1eren I ELIF auf erstem ze1chen I THEN ganze zeile loeschen I ELSE zellenrest loeschen 635 636 637 Izelle spli tten : I IF write access THEN felded1 tor verlas,en ELSE ze1chen 19norlerem I FI . I I 626 627 628 629 638 Ineues tab ze1chen : IF (tabulator SUB stelle) • r1ght THEN dach ELSE r1ght FI I I I ze1lenrekombin1eren I I I FI. Ize1len rekombinieren felded1 tor verlassen I 638 639 auferstemzeichen ganzezeileloeschen zeilenrestloeschen M4 M5 M6 647 648 649 650 651 652 653 654 655 21/13 Iganze zelle loeschen stelle = 1 . satz:. ""; feldeditor verlassen I I Me 641 M2 M3 Iauf erstem zeichen I esckommandosbehandeln Izeilenrest loeschen : I change (satz, stelle, satzl&enge, ""); I output mode : = clear feldrest . I I lese kommandos behandeln : I getchar (zwe1 tes zelchen); I zeichen CAT zwei tes zeichen; I auf exit pruefen; I SELECT pes (esc kommandos, zwei tes ze1chen) OF I CASE e hop lernmodus umschal ten I CASE e right zum naechsten wort I CASE e left zum vorigen wort I OTHERWISE belegte taste ausfuehren I END SELECT . I edi tor paket 21/13 Zeile E LAN 656 657 658 aufexi tpruefen 659 esckollllll&ndos EUME!. •••• edi tor paket 10.11.86 lauf exit pruefen : I IF pos (res, zwei tes zeichen) ) 0 THEN feldedi tor verlassen FI . I I 660 661 662 Iesc kommandos I LET e hop I e right I e left I I I I 663 664 665 666 1.8 lernmodusumschal ten 667 2, 3; ""'1""2""8"" Ilernmodus umschal ten : I IF lernmodus THEN lernmodus ausschalten ELSE lernmodus .inschalten I I 668 669 1, FI; feldeditor verlassen . I I 670 671 lernmodus ausschalten : lernmodus := FALSE; belegbare taste erfragen; audit := subtext (audit, 1, LENGTH audit - 2); IF taste = hop THEN (* lernsequenz nicht auf taste legen *) -ws- *) ELSE l.rnsequenz auf taste legen (taste, audit) lernmodusausschalten 672 673 674 675 676 677 FI ; audit := 678 679 680 681. 682 683 $I" (* 16.08.~ . belegbaretasteerfragen Ibelegbare taste erfragen : I TEXT VAR taste; getchar (taste); I WHILE taste ist reserviert REP I benutzer warnen; getchar (taste) I I 684 685 PER. I 686 tasteistr.servi.rt 687 688 689 lernmoduselnschalten 690 691 zumvorigenwort I taste ist reserviert : (* 16.ea.~ I -ws- *) I taste () hop CAND pos (reservierte feldeditor tasten, taste) ) e . I I Ilernmodus einschalten audi t : = ""; lernmodus . - TRUE . I I 695 Izum vorigen wort I IF stelle) 1 I THEN stelle DEeR 1; stelle : = letzter wortanfang (satz); I alte einrueckposition mitziehen; I IF (sa tz SUB stelle) <) blank THEN LEAVE zum vorigen wort FI 696 I FI; 697 I feldedltor verlassen . 698 I I 692 693 694 699 zumnaechstenwort 700 I I ~1 702 703 704 705 21/14 Izum naechsten wort : I IF kein naechstes wort THEN feldeditor verlassen FI . keinnaechsteswort Ikein naechstes wort : I BOOL VAR im alten wort : = TRUE; lINT VAR i; I FOR i FROM s te lle UPI'O satzlaenge REP editor paket 21/14 Zeile E LAN EUMEL I I I I 706 707 708 709 710 I I I I I 711 712 713 714 715 716 717 **** 10.1L86 edi tor paket IF im alten wort THEN im alten wort . - (sa tz SUB i) () blank ELIF (sa tz SUB il () bla.nk THEN stelle : = i; LEAVE kein naechstes wort WITH FALSE FI PER; TRUE belegtetasteausfuehren Ibelegte taste ausfuehren : I IF ist kommando taste I THEN feldedi tor verlassen I ELSE gelerntes ausfuehren 7~ 719 '120 1.8 istkomma.ndota.ste In. I I list kommando taste taste enthaelt komma.ndo (zweites zeichen) . I 721 I 722 723 gelerntesausfuehren nachrechtsoderueberlau I nach rechts oder ueberlauf : I IF fliesstext COR stelle < limit OR satzlaenge ) limit I THEN nach rechts I ELSE auf anfang der naechsten zeila I Fl. I I 730 731 732 . I I 724 725 726 727 728 729 Igelerntes ausfuehren : I push (lernsequenz auf taste (zweites zeichen» I (*sh*) nachrechts Inach rechts I IF stelle auf erstem halbzeichen THEN stelle INCR 2 ELSE stelle I 733 INCR 1 FI; I alte einrueckposition mitziehen . 734 I 735 7M aufanfangdernaechstanz lauf anfang der naechsten zeile 737 nachlinks 740 741 742 743 745 M7 748 749 750 751 752 753 21/15 stelle DEeR 1; al te einrueckposi tion mi tziehen . alteeinrueckpositionmi lalte elnrueckposition mitziehen I IF satz ist leerzeile I THEN alte einrueckposition .- stelle I ELSE alte einrueckposi tion : = min (stelle, einrueckposition (satz») I FI. 744 746 Inach links push (abscr) . I I 7~ 739 I I satzistleerzelle I I Isatz ist laerzeila : I satz = "" OR satz = blank . I I wennmoeglicheinschrl tt Iwenn moegl1ch ain schritt nach links I IF stelle = ganz links I THEN zeichen ignorieren I ELSE nach links I FI. I editor paket 21/15 E LAN Zeile EUMEL 1.8 - - 10.11.86 edi tor pa.ket Izur naechsten ta.bulator position : I bestimme naechste expl1zi te ta.bulator I IF ta.bula tor gefunden I THEN explizi t ta.bulieren I ELIF stelle satzlaenge I THEN implizi t ta.bulieren 754 755 756 757 758 759 760 761 762 zurnaechstenta.bulatorp 763 764 765 766 767 best1mmenaechsteexpliz I bestimme naechste explizite ta.bula tor position : I INT VAR ta.b position := pos (ta.bulator, dach, stelle + 1); I IF ta.b position) limit AND satzlaenge (. limit I THEN ta.b position : = 0 I Fl. position; (= I I I I 7~ 769 770 ta.bulatorgefunden 771 772 explizitta.bul1eren 773 774 775 776 777 778 779 implizi tta.bul1eren 780 781 einfuegenumsch&l ten + 782 783 784 785 ELSE auf anfang der naechsten zeile FI. I I Itabulator I I gefunden lexpl1zit tabulieren I I Iimplizi t tab position () 0 . stelle._ ta.b position; push (dezimal) . ta.bulieren : I ta.b position : = einrueckposi tion (s&tz); I IF stelle ( ta.b position I THEN stelle . - ta.b position I ELSE stelle :. satzl&enge + 1 I FI. I I Ieinfuegen umschalten I IF NOT write access THEN zeichen ignorieren FI; I (osho ) I einfuegen: = NOT einfuegen; I IF einfuegen THEN einfuegen optisch anze1gen FI; I feldedi tor verlassen . I I 786 787 788 789 790 791 792 793 794 795 796 einfuegenoptisch&nzeig leinfuegen optisch anzeigen I IF markiert I THEN out (begin mark); markleft; out (dach left); warten; l o u t (end mark); markleft I ELSE out (dach left); warten; I IF stelle aut erstem h&lbzeichen I THEN out text (sdz, stelle, stelle + 1) I ELSE out text (satz, stelle, stelle) I FI 797 markiert 798 799 dschleft 800 801 802 803 warten 21/16 I FI. I I Imarkiert I Idach left I I Iwarten I TEXT VAR I kOmm&ndo I marke) 0 ""94 ""8"" t : = inch&rety (2); CAT t; IF lernmodus THEIl &udi t CAT t FI . editor pa.ket 21/16 Zeile E LAN 804 805 e1nzeichenloeschen EUMEL + 806 807 808 809 810 811 812 813 ze1chendavorsollgeloes 814 815 816 nachlinksoderignoriere + 817 818 819 820 821 822 823 824 825 826 827 828 829 830 a.ktuelleszeichenloesch 831 einezeilenachoben I + 833 834 835 8M + 838 839 ggfabsa tzerzeugen 840 841 842 + + 21/17 zeichen loeschen : FI . postblanks INCR 1 FI; delete char (satz, stelle); postblanks INCR 1; neue satzlaenge bestimmen; output mode : = out feldrest Ieine zeile nach oben : I (*sh*) I IF NOT absatzmarke steht I umbruchkommandos I THEN blanks abschneiden I FI; I push (ze1chen); LEAVE feld I I CAND NOT 1st teil eines ed1 t1eren (kommando SUB kommandozeiger) • I I Iggf absatz erzeugen I (*sh*) I IF write access I THEN IF NOT absatzmarke steht THEN blanks abschne1den I IF stelle > LENGTII satz AND fl1esstext AND (satz I satz) blank I THEN sa tz CAT blank I FI I FI push (ze1chen); LEAVE feld ed1 t1eren I I FI; SUB LENGTH (> 843 844 845 846 850 ed1 tor paket **** istteileinesumbruchkom list teil e1nes umbruchkommandos I backer. + 847 848 849 Iein 10.11.86 I IF NOT write access THEN zeichen ignorieren FI; I (*sh*) I IF zeichen davor soll geloescht werden I THEN nach links oder ignor1eren I FI I IF NOT hinter dem satz THEN a.ktuelles zeichen loeschen I I Izeichen davor soll geloescht werden I hinter dem sa tz COR markiert . I I Inach links oder ignorieren I IF stelle > ganz links I THEN nach links I (*sh*) I ELSE zeichen ignorieren I Fl. I I Iaktuelles zeichen loeschen : I stelle korrigieren; alte stelle marken; I IF stelle auf erstem halbzeichen I THEN delete char (sdz, stelle); I I I I I I I 832 837 1.8 **** markierenumschalten lmarkieren umschalten IF mark1ert THEN marke : = 0; ma.xschreibpos INCR marklength; cpos D!X:R marklength ELSE marke := stelle; ma.xschre1bpos D!X:R marklength; cpos INCR marklength; I I I I I edi tor paket 21/17 Zane E LAN EUMEL 1. 8 858 859 860 861 852 863 864 865 edi tor paket 10.11.86 verschieben wenn erf'orderlich FI ; feldedi tor verla.ssen . 851 852 853 854 855 856 857 ***.. sondertastebeha.nde In Isondertaste behandeln lEND PROG feldeditor; push (esc + ze1chenl . I dezimaleditor ............ IPROC dezimaleditor (TEXT VAR satz) I INT VAR dezimalanfang : = stelle; I zeichen einlesen; I IF dezimalstartzeichen CAND ueberschreibbar THEN dezimalen I schreiben FI; I push (zeichen) . zeichene i n lesen dezimalzeichen + I I Izeichen einlesen I Idezimalzeichen I separator TEXT VAR zeichen; getchar (zeichen) . pos (dezimalen, zeichen) ) 0 AND nicht I 866 dezimalst&rtzeichen 867 dezimalen 868 startdezimalen Idezimalstartzeiche!l I separator I Idezimalen I Istartdezimalen I Inicht separator pos (startdezimalen, zeichenl ) 0 AND nicht "0123456789" . "+-0123456789" pos (separator, zeichen) 869 870 nichtseparator 871 872 873 874 ueberschreibbar 875 876 ueberschreibbarezeiche Iueberschreibbare zeichen 877 dezimalenschreiben Iueberschreibbar I dezimalanfang) LENGTH sa tz OR I pos (ueberschreibbare zeichen, satz SUB dezimalanfang) ) 0 . I I ",. +-0123456789" . I I Idezimalen schreiben : 878 I REP 879 I I I I I I dezimale in satz eintrl4!en; dezimalen zeigen; zeichen einlesen; dezimaIa.nfang DECR 1 UNTIL dezimaleditor beendet PER; stelle INCR 1 . B80 881 882 883 B84 885 886 887 8B8 889 + 890 891 892 893 21/18 0. I I I I dezimaleinsatzeintrl4!e Idezimale in satz eintrl4!en : I IF dezimalanfang) LENGTH satz I THEN satz AUFFUELLENMIT blank; satz CAT zeichen I ELSE delete char (satz, dezimalanf'ang); insert char (satz, I ze1chen, stelle) I FI. I I dezimalenzeigen Idezimalen zeigen I INT VAR min dezimalschreibpos . - max (min schreibpos, I dezimalanfang) ; edl tor paket 21/18 ZeUe E LAN EUMEL 894 895 896 897 898 markiert 899 900 901 902 markiertzeigen 903 904 905 906 unmarklertzeigen 907 908 909 910 911 912 dezimaleditorbeendet 1.8 **-* editor paleet 10.11.86 I IF markiert THEN markiert zeigen ELSE unmarkiert I schreibmarke positionieren (stelle) . I I Imarkiert marke) 0 . I I Imarkiert zeigen : I invers out (So. tz, min dezimalschrei bpos, stelle, zeigen FI; ,end mark); lout (zeichen) . I I Iunmarkiert zeigen : I schreibmarke positionieren (min dezimalschreibpos); lout subtext (satz, min dezimalschreibpos, stelle) . I I Idezimaleditor beendet I Nor dezimalzeichen OR I dezimalanfang ( max (min I NOT ueberschreibbar . IEND I schreibpos, marke) OR PRoo dezimaleditor; 913 914 915 916 isedi tget ................ IBOOL PROC is edi tget : I edi tget modus lEND PROC is editget ; 917 918 919 920 921 922 923 924 getedi tl1ne 925 putedi tline I .............. IPROC get edi tline (TEXT VAH editline, IN! VAH edi tpos, edi tmarke) IF edi tget modus THEN editline := alter editsatz; I edi tpos : = stelle I FI; I edi tmarke : = marke lEND PROC get editline; I I I .............. IPROC put edi tline (TEXT CONST edi tline, IN! CONST edi tpos, editmarke): I IF edltget modus I THEN alter editsatz := editline; I stelle := max (editpos, 1); I marke := max (editmarke, 0) I FI lEND PROC put editl1ne; I 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 21/19 I wi thinkanji •.•.....•.•..• IBOOL PRoo within kanji (TEXT CONST satz, IN! CONST stelle) I count directly prefixing kanji esc bytes; I number of kanji esc bytes is odd . countdirectlyprefixing I I Icount I IN! I I I directly prefixing kanji esc bytes : VAH pos : = stelle - 1, kanji esc bytes : = 0; WHILE pos ) 0 CAND is kanji esc (satz SUB pos) REP kanji esc bytes INCR 1; pos DEeR 1 PER. editor paleet 21/19 Zeile E LAN EUMEL 1.8 943 945 946 947 + 948 949 + 950 951 952 10.11.86 edi tor pa.ket I I 942 944 ._. numberofkanjiescbytesi Inumber of kanji esc bytes 1s odd I (kanji esc bytes AND 1) < > 0 . lEND PROC within kanji; I iskanjiesc ............... IBOOL PROC is kanji esc (TEXT CONST char) : I (.sh.) I two byte mode CAND I (char >= Rft129 Rft AND char <= ""159"" OR char >= ""224"" AND char I <= ""239 Rft ) lEND PROC is kanji esc; I two bytes ................. IBOOL PROC two bytes two byte mode END PROC two bytes; I ~3 954 955 956 957 two bytes ................. IPROC two bytes (BOOL CONST new mode) I two byte mode : = new mode IEND PROC two bytes; 958 959 960 961 962 963 964 965 966 outtext .................. IPROC outtext (TEXT CONST source, INT CONST from, to) lout subtext mit randbehandlung (source, from, to); I INT VAR trailing; I IF from <= LENGTH source I THEN trailing : = to - LENGTH source I ELSE trailing : = to - from + 1 I FI; trailing TIMESOUT blank IEND PROC au t text; 967 outsubtextmitrandbehan ... IPROC out subtext mit randbehandlung (TEXT CONST satz, INT CONST von, Ibis) : I IF von > bis I THEN I ELIF bis >= LENGTH satz COR NOT within k&nji (satz, bis + 1) I THEN out subtext mit anfangsbehandlung (satz, von, bis) I ELSE out subtext mit anfangsbehandlung (satz, von, bis - 1); out I (blank) I FI lEND PROC out subtext mit randbehandlung; + 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 21/20 I I I outsubtextmitanfangsbe ... IPROC out subtext mit anfangsbehandlung (TEXT CONST satz, INT CONST I von, bis) : I IF von > bis I THEN I ELIF von· 1 COR NOT wi thin kanji (satz, von) I THEN out subtext (satz, von, bis) I ELSE out (blank); out subtext (satz, von + 1, bis) I FI I END PROC out subtext mit anfangsbehandlung; I edi tor pa.ket 21/28 ZeUe E LAN EUMEL 1.8 *.** 10.11.86 98:i '+ 986 getcursor ...........•..•. IPROC get cursor 987 + 988 xcursor .................. lINT PROC x cursor I cursor; 989 wri tepermission .......... IBOOL PROC write permission I permission; 9~ I 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 I edi tor paket get cursor (spal te, zeUe) END PROC get get cursor; spalte END PROC x cursor; I I write access END PROC write push .•................... IPROC push (TEXT CONST ausfuehrkommando) I IF ausfuehrkommando "" I (.sh.) I THEN I ELIF kommando • I THEN kommando := ausfuehrkommando I ELIF (kommando SUB kommando zeiger - 1) • ausfuehrkommando I THEN kommando zeiger DEeR 1 I ELIF replace moeglich I THEN kommando zeiger DEeR laenge des ausfuehrkommandos; replace (kommando, kommando zeiger, ausfuehrkommando) I I ELSE insert char (kommando, ausfuehrkommando, kOllllll&ndo zeiger) I Fl. replacemoeglich I I Ireplace moeglich : I INT CONST laenge des ausfuehrkommandos : = LENGTH ausfuehrkollllll&ndo; I kommando zeiger ) laenge des ausfuehrkommandos . lEND PROC push; I 1009 1010 1011 1012 type ...................•. IPROC type (TEXT CONST ausfuehrkommando) I kommando CAT ausfuehrkommando IEND PROC type; I 1013 + 1014 stelleamanfang ........... 1INT PROC stelle am anfang I anfang; 1015 + 1016 stelleamende ............. lINT PROC stelle am ende I stelle am ende; I stelle am anfang+laenge-1 END PROC 1017 SIGN marke. mark length END PROC 1018 markierausgleich ......... lINT PROC markierausglelch I markierausgleich; I 1019 1020 1021 1022 verschiebenwennerforde ... IPROC verschieben wenn erforderl1ch : I IF stelle) max schreibpos I THEN verschiebe (stelle - max schreibpos) I ELIF stelle < min schreibpos 21/21 anfang + verschoben END PROC stelle I editor pake t 21/21 &III Zeile 11323 11324 11325 11326 11327 11328 11329 11330 11331 11332 11333 11334 11335 11336 1037 11338 11339 1040 11341 11342 11343 11344 E LAN EUMEL 1.8 •••• 113.11.86 edi tor paket I THEN verschiebe (stelle - min schre1bpos) IF! IEND PROC verschieben wenn erforderlich; I verschiebe ............... IPROC verschiebe (TNT CONST i) INCR i' I verschoben I min schreibpos INCR i; I max schre i bpo s INCR i' DEeR i; I cpos I output mode :. out reId; I schreibmarke posi tionieren ( stelle) -ws- .) I lEND PROC verschiebe ; I (* 11.135.85 konst&ntenneuberechnen ... IPROC konst&nten neu berechnen : I min schrelbpos : = anfang + verschoben; I IF min .;chreibpos < 13 (* 17.05.85 I -ws- .) I THEN min schreibpos DEeR verschoben; verschoben : = 13 I FI; I max schreibpos : = min schrelbpos + laenge - 1 - markierausgle1ch; I cpos:. rand + laenge - max schreibpos IEND PROC konst&nten neu berechnen; I 11345 11346 1047 1048 schrelbnarkeposl tionie ... IPROC schre1bmarke positionieren (INT CONST sstelle) I cursor (cpos + sstelle, zeile) IEND PROC schreibnarke positionieren; 1049 113513 1051 11352 1053 11354 simplefeldout ............ IPROC simple feldout (TEXT CONST satz, INT CONST dunvny) I (* PRECONDITION NOT markiert AND verschoben = 13 *) I (. AND feldrest schon geloescht .) I schreibnarke an feldanfang posi tionieren; lout subtext mit randbehandlung (satz, anfang, anfang + laenge - 1); I IF (satz SUB LENGTH satz) = blank THEN absatzmarke schreiben 1055 1056 11357 1058 11359 11360 11361 11362 11363 I I I I schreibmarkeanfeldanfa Ischrelbmarke an feldanfang positlar.ieren IEND PROC simple feldout; cursor (rand + 1, ze1le) . I feldout .................. IPROC feldout (TEXT CONST satz, INT CONST sstelle) I schreibnarke an feldanfang positionieren; I reId ausgeben; I feldrest loeschen; I IF (satz SUB LENGTH satz) blank THEN absatzmarke schreiben I 1064 (TRUE) FI . (TRUE) FI . I I 1065 11366 21/22 schreibmarkeanfeldanfa I schreibmarke an feldanfang posi tianieren cursor (rand + 1, zene) . I ed1tor paket 21/22 Zeile E LAN EUME!. 1.8 ........ 10.11.86 edi tor pe.ket 1067 1068 1069 1070 1071 1072 1073 1074 1075 feldeusgeben 1076 1077 nichtm&rkiert 1078 1079 1080 markiertesnichtsichtba lmarkiertes nicht sichtbar : Ibis DECR marklength .. (1 + SIGN sstelle); marke ) bis 1081 1082 1083 unm&rkierta.usgeben 1084 markierta.usgeben + 1092 1093 1@94 1095 1@96 11397 11398 11399 1100 1101 1102 1103 1104 11@5 FI. Imcht markiert marke (= 0 . + 1 • I I Iunmarkiert ausgeben lout subtext mit randbehandlung (satz, von, bis) . I I Imarkiert ausgeben I INT VAR smarke : = max (von, marke); lout text (satz, von, smarke - 1); out (begin mark); I verschiedene feldout modes behandeln . I I verschiedenefeldoutmod Iverschiedene feldout modes behandeln : I IF sstelle = 0 I THEN out subtext mit randbehandlung (satz, smarke, bis); out (end I mark) I ELSE out text (satz, smarke, zeilenrand); out (end mark); I (..sh.. ) l o u t subtext mit randbehandlung (satz. sstelle, bis) I Fl. I zeilenrand I Izeilenrand : min (bis, sstelle - 1) . IEND PROC feldout; I absatzmarkeschreiben ..... IPROC absatzmarke schreiben (BOOL CONST schreiben) I IF fliesstext AND nicht markiert I THEN cursor (rand + 1 + laenge, zeile); l o u t (absatzmarke) I absa tzmarke s teht : = TRUE I Fl. I I 1106 1107 nichtmarkiert 1108 1109 11113 1111 111? 1113 1114 1115 1116 absatzmarke 21/23 I I I I I 1085 1086 1087 1088 1089 11390 11391 Ifeld ausgeben : I INT VAR von := anfang + verschoben, bis := von + laenge - 1; I IF nicht markiert I THEN unmarkiert ausgeben I ELIF markiertes nicht sichtbar I THEN unmarkiert ausgeben I ELSE markiert ausgeben Inlcht markiert I I marke (= 13 . labsatzmarke I IF NOT schreiben I THEN" " I ELIF mark length ) 13 I THEN ""15""14"" I ELSE ""15" "14" " I Fl. lEND PROC absatzmarke schreiben; I edi tor pe.ket 21/23 Zeile 1117 + 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1136 E LAN EUMEL 1. 8 **** edi tor paleet 10.11. 86 inversout ................ IPROC invers out (TEXT CONST satz, INT CONST von, bis, TEXT CONST I pre, post) : I IF mark refresh line mode I THEN feldout (satz, stelle) I ELSE schreibmarke posi tionieren (von); l o u t (begin mark); markleft; out (pre); l o u t text (satz, von, bis - 1); out (post) I FI. I I markleft lmarkleft I marklength TIMESOUT I IEND PROC invers out; I left feldrestloeschen ......... IPROC feldrest loeschen : I IF rand + laenge ( maxbreite COR invertierte darstellung I THEN INT VAR x; get cursor (x, zeile); I (rand + laenge - x + 1 + absatz ausgleich) TIMESOUT blank; I (*sh*) I cursor (x, zeile) I ELSE out (clear eol); absatzmarke steht : = FALSE I FI lEND PROC feldrest loeschen; I 1139 1140 1141 1142 1143 1144 1145 AUFFUELLENMIT ............ IOP AUFFUELLENMIT (TEXT VAR satz, TEXT CONST fuellzeichen) I INT VAR i; I FOR i FROM stelle - LENGTH satz IlOWNTO 2 REP I satz CAT fuellzeichen 1146 einrueckposi tion ......... lINT PROC e1nrueckposi tion (TEXT CONST satz) I (*sh*) I IF fliesstext AND satz = blank I THEN anfang I ELSE max (pos (satz, ""33"", ""254"", i), 1) I FI lEND PROC einrueckposition; 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 21/24 I PER lEND OP AUFFUELLENMIT; I I letzteNortanfang ........ I INT PROC letzter wortanfang (TEXT CONST sa tz) I (*sh*) INT CONST ganz links : = max (1, marke); BOOL VAR noch nicht im neuen wort := TRUE; INT VAR 1; FOR i FROM stelle DOWNTO ganz links REP IF noch nicht im neuen wort THEN noch nicht 1m neuen wort :. char = blank ELIF is kanJ 1 esc (char) THEN LEAVE letzter wortanfang WITH ELIF nicht mehr im neuen wort THEN LEAVE letzter wortanfang WITH + 1 FI PER ; ed1 tor paleet 21/24 E LAN Zeile EUMEL I 1166 1167 1168 1169 char 1170 1171 1172 nichtmehrimneuenwort 117~ 1174 1175 1176 1177 1178 1179 1180 1181 1182 1.8 I I 1187 1188 1189 1190 1191 1192 119~ 1194 1195 1196 1197 1198 1199 1200 1201 1202 120~ 1204 1205 1206 1207 1208 1209 1210 1211 1212 121~ 1214 1215 1216 1217 21/25 10.11.86 edi tor pa.ket ganz links . Ichar : Batz SUB i . I I Inicht mehr im neuen wort : char IEND PROC letzter wortanfang; blank COR wi thin kanji (satz, 1) I getchar .................. PROC getchar (TEXT VAR zeichen) : IF komma.ndo = •• THEN inchar (zeichen); IF lernmodus THm aud1t CAT zeichen ELSE zeichen := kommando SUB kommando zeiger; kommando zeiger INCR 1; IF kommando zeiger ) LENGTH kommando THEN kOllllll&ndo zeiger :. 1; komma.ndo :. FI FI ; IF LENGTH kommando - kommando zeiger < THEN kommando CAT inchety FI 11~ 1184 1185 1186 •••• ~ FI . IEND PROC getchar; I inchety .................. ITEXT PROC inchety I IF lernmodus I THEN TEXT VAR t : = incharety; audit CAT t; t I ELSE incharety I FI IEND PROC inchety; I isincharety .............. IBOOL PROC is incharety (TEXT CONST muster) I IF kornrnando = •• I THEN TEXT CONST t := inchety; I IF t = muster THEN TRUE ELSE kOllllll&ndo . - t; FALSE FI I ELIF (kommando SUB kommando zeiger) = muster I THEN kommando zeiger INCR 1; I IF komma.ndo zeiger ) LENGTH kommando I THEN kommando zeiger : = 1; kOllDll&ndo : = •• I FI ; I TRUE I ELSE FALSE IFI IEND PROC is incharety; I getcharety ............... ITEXT PROC getcharety I IF komma.ndo = •• I THEN inchety I ELSE TEXT CONST t := kommando SUB kommando zeiger; I kOllDll&ndo zeiger INCR 1; I IF kommando zeiger ) LENGTH komma.ndo I THEN kommando zeiger : = 1; kOllDll&ndo :. I FI ; t I FI IEND PROC getcharety; edi tor pa.ket 21/25 Zeile E LAN EUMEL 1. 8 **** editor pa.ket 10.11.86 1218 1219 + 1220 1221 1222 1223 1224 1225 1226 1227 getedi tcursor ............ IPROC get editcursor (INT VAR x, y) : I (*sh*) I IF actual editor ) 0 THEN a.ktualisiere bildparameter FI; I x : = rand - (anfang + verschoben - 1 - markierausgleich) + stelle; I y := zeile . I I aktualisierebildparame I 1228 1229 1230 . 1(***....****.*** •••**••• **** Zugriff auf Feldstatus 1232 stelle 1233 altestelle 1234 rand 1235 limit 1236 anfang 1238 y) PROC get edi tcursor; ***••• **.** .........*** . . . *** ) . I I I feldstatus.stelle I stelle I 1231 1237 aktualisiere bildparameter : INT VAR old x, old y; get cursor (old x, old y); dateizustand holen; bildausgabe steuern; satznr zeigen; fenster zeigen; zeile . - bildrand + zeilennr; cursor (old x, old I I I I IEND I marke laenge Ialte stelle I Irand I I limit I . feldstatus.alte stelle feldstatus. rand feldstatus.limit . feldstatus.anfang . lanfang I feldstatus.marke . lmarke I Ilaenge feldstatus .laenge . I Iverschoben I feldstatus.verschoben 1239 verschoben 1240 einfuegen leinfuegen feldstatus.einfuegen . fl1esstext I Ifliesstext I feldsta tus. fliesstext . 1241 1242 wri teaccess 1243 1244 1245 tabulator Iwri te access feldstatus.write access I 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 + 21/26 Itabulator feldstatus. tabulator. I I (•••••** •• ** •••••• ** •••••••* ................................JllI ............. 11 I ••••••• ) I ILET undefinierter bereich bildzeile abschnitt bild I I I I ILET I I I I I I I I I BILDSTATUS 0, 2, 3, 4, nix a.kt satznr ueberschrift fehlermeldung 1, 2, 3, 4; STRUCT (INT feldlaenge, kurze feldlaenge, blldrand, bildlaenge, kurze bildla.enge, ueberschriftbereich, bildbereich, erster neusatz, letzter neusatz, old zeilennr, old lineno, old mark 11neno, BOCL zeileneinfuegen, old line update, TEXT satznr pre, ueberschrift pre, ueberschrift text, ueberschrift post, old satz, editor paket 21/26 Zelle E LAN EUMEL I I I I I I I 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 + 1282 1283 + 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 21/27 10.11.86 ed1 tor paleet FRANGE old range, FILE file), EDITSTATUS = STRUCT (FELDSTATUS feldstatus, BILDSTATUS bildstatus) , max editor 10, EDITSTACK = ROW max edi tor EDITSTATUS; I IROW max editor INT VAH einrueckstack; I IBOOL VAH markiert; ITEXT VAH fllena.me, tab, bildsatz, bildzeichen, fehlertext, akt bildsatz ; I lINT VAH zeilennr, satznr, bildanfang, bildm&rke, feldm&rke, actual editor : = 0, max used editor . - 0, I letzer editor auf dieser datei, I alte einrueckposition := 1; I I aktuelleredi tor .......... lINT PROC aktueller editor I editor; actual editor END PROC aktueller I groessteredi tor .......... lINT PROC groBSster edi to!' I editor; I max used editor END PROC groesstar I(.....**.......................... bi ldedi tor I ............................... ) I 1284 1285 **** IBILDSTATUS VAH b11dstatus IEDITSTACK VAH editstack; 1280 1281 1 •8 bildeditor ............... IPROC bilded1 tor (TEXT CONST res, PROC (TEXT CONST) komma.ndo I interpreter): I evtl fehler behandeln; I enable stop; I TEXT VAH reservierte tasten . - ""11""12""27"bf" I reservierte tasten CAT res ; I INT CONST my highest editor . - max used editor; laenge : = feldlaenge; konstanten neu berechnen; REP markierung justieren; alte. feld nachbereiten; feldlaenge einsteller.; ueber.chrift zeigen; fenster zeigen ; zeile bereitstellen; zeile edi tieren; kommando ausfuehren PER . evtlfehlerbehandeln levtl fehler behandeln : I IF is error I THEN fehlertext : = errormessage; I IF fehlertext "" THEN neu (fehlermeldung, nix) FI; I c lear error I ELSE fehlertext := editor paket 21/27 Zeile **** E LAN 1.8 **** EUMEL me.rki"rungjustieren 1322 zeilebereitstellen + 1323 1324 hinterletztemsatz 1325 1326 1327 1328 1329 1330 1331 al tesfeldnachberei ten Izeile bereitstellen I (file) rr I Ihinter letztem satz IF hinter letztem satz THEN insert record lineno (file) ) lines (file) . Ial tes feld nachberei ten : I IF old line update AND lineno (file) () old lineno I THEN IF verschoben <) 0 I THEN verschoben := 0; konstanten neu berechnen; I FI ; I INT CONST alte zeilennr : = old lineno - bildanfang + 1; I IF al te zellennr ) 0 AND al te zellennr <= attuelle I bildlaenge I THEN INT CONST m : = marke; I IF lineno (file) < old lineno I THEN marke : = 0 I ElIF old lineno = bildms.rke I THEN marke := min (feldms.rke, LENGTH old. satz + 1) I ElSE marke := min (marke, LENGTH old satz + 1) I FI ; I zeile := blldrand + alte zeilennr; I feldout (old satz, 0); marke := m I FI I FI; I old line update : = F~E; old satz : = I feldla.engeeinstellen 1355 1356 1357 zelleedi tieren 21/28 I I I 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 + Ims.rkierung justieren : I IF bildmarke) 0 satznr < = bildmarke I THEN IF I THEN bildms.rke : = sa tznr; I ste Ue : = III8.X (stelle, feldms.rke); I ms.rke : = feldms.rke I ELSE ms.rke . - 1 I FI I FI. I I 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1358 1359 1360 1361 1362 edi tor paket I rr. I I 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 10.11.86 Ifeldla.enge ein.teUen I INT CONST alte l&enge : = laenge; I IF zeilennr) kurze bildlaenge I THEN laenge : = kurze feldlaenge I ElSE laenge := feldlaenge I FI; I IF laenge < > al te laenge I THEN konstanten neu berechnen I FI. I I Izeile editieren : I zeile:= bildrand + zeilennr; I exec (PROC (TEXT VAR, TEXT CONST) feldeditor, file, reservierte I tasten); I old line no : = satznr; I IF markiert oder verschoben I THEN old line update := TRUE; read record (file, old satz) I FI. I edi tor paket 21/28 Zeile E LAN EUMEL 1.8 **** 10.11.86 1363 1364 m&rk1ertoderverschoben Im&rk1ert oder verschoben 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 kommandoausfuehren ed1 tor paket mark1ert COR verschoben () 0 . I I + 1375 1376 1377 1378 Ikommando ausfuehren : I getchar (b1ldzeichen); I SELECT pos (kolMl&ndos, b1ldzeichen) OF I CASE x hop hop kommando verarbe1ten I CASE x esc esc kommando verarbeiten I CASE x up zum vorigen sa tz I CASE x down zum folgenden satz I CASE x rubin zeicheneinfuegen umsch<on I CASE x mark m&rkierung umsch<en I CASE x cr eingerueckt mit cr I -ws- *) I CASE x inscr eingerueckt zum folgenden satz I CASE x abscr zum anfang des folgenden satzes I I I (* 08.06.81 END SELECT • 1379 1380 1381 1382 1383 1384 1385 1386 1387 kommandos Ikommandos I LET x hop • 1, I x down 3, I x cr 5, I x abscr 7, I x esc • 9; 1388 1389 1390 1391 zeicheneinfuegenumscha Izeicheneinfuegen umsch&l ten I rubin segment in ueberschr1ft eintragen; I neu (ueberschrift, nix) . 1392 1393 1394 rubinsegmentinuebersch Irubin segment in ueberschr1ft e1ntragen : I repl&ce (ueberschrift text, 9, rubin segment) 1395 1396 1397 rub1nsegment 1398 1399 1400 1401 1402 1403 1404 1405 1406 hopkommandoverarbeiten Ihop komm&ndo verarbe1ten : I getch&r (bildzeichen); I read record (file, bildsa tz) ; I SELECT pos (hop kommandos, bildzeichen) OF I CASE y hop nach oben I CASE y cr neue se i te I CASE Y up zurueckblaettern I CASE Y down wei terblaettern I CASE Y tab put tabs (f1le, tabulator); neu (ueberschr1ft, I nix) I CASE Y rubout zeile loeschen I CASE Y rubin zeileneinfuegen umsch<en x up • 2, x rubin 4, x ma.rk 6, x inscr • 8, I I ""1""3""10""11""13""16""17""16""27"" I I I I I I lrubin segment : I IF einfuegen THEN "RUBIN" ELSE " " FI . I I 1407 1408 1409 1410 1411 1412 1413 1414 1415 21/29 hopkomm&ndos I I I END SELECT • Ihop kommandos I LET y hop I Y tab I y rubin I y cr 1, Y up 3, 5, Y down = 4, Y rubout • 6, • 2, 7; ed1 tor paket 21/29 Zeile E LAN EUMEL 1.8 I I I I 1416 1417 "W --- 10.11.86 edi tor pa.ket ""1""3""9""10""11""12""13"". 1419 1420 1421 1422 1423 1424 1425 ze1leneinfuegenumschal Izeileneinfuegen umschal ten I zeileneinfuegen: = NOT zeileneinfuegen; I IF zelleneinfuegen I THEN zeile aufspalten; logisches eof setzen I EISE leere zeile am ende loeschen; logisches eof loeschen I FI; restbild zeigen . 1426 1427 1428 1429 143e zeileaufspalten 1431 loescheggftrennendebla Iloesche ggf trennende blanks und spalte zeile: I -bk- .) I INT VAR first non blank pos : = stelle; I WHILE first non blank pos <= length (b1ldsatz) CAND I (bildsatz SUB first non blank pos) = blank REP I first non blank pos INCR 1 I I Izeile aufspalten I IF stelle <= LENGTH b1ldsatz OR stelle. 1 I THEN loesche ggf trennende blanks und spal te zeile I I FI. I + 1432 1433 1434 1435 (- 26.06.~ 1436 I PER; 1437 I I I I I split line and indentation; (-sh-) first non blank pos : = stelle - 1; WHILE first non blank pos >= 1 CAND (bildsatz SUB first non blank pos) first non blank pos DECR 1 I PER; I I bildsatz: = subtext (bildsatz, 1, first non blank pos); wri te record (file, bildsatz) . I 1438 1439 1440 1441 1442 1443 1444 1445 blank REP I I 1446 1447 1448 splitlineandindentatio Isplit line and indentation: I split line (file, first non blank pos, TRUE) . 1449 1450 1451 1452 logischeseofsetzen 1453 1454 1455 1456 14" leerezeilea.mendeloesch Ileere zeile a.m ende loeschen : I to line (file, lines (file)); I IF len (file) = 0 THEN delete record (file) FI; I to line (file, satznr) . 1458 1459 1460 logischeseofloeschen 1461 1462 1463 1464 1465 1466 21/3e I I Ilogisches eof setzen : I down (file); col (f1le, 1); I set range (file, 1, 1, old range); up (file) . I I I I Ilog1sches eof loeschen : I col (file, stelle); set range (file, old range) . I restbildzeigen I Irestbild zeigen : I erster neusatz : = satznr; I letzter neusatz : = bildanfang + blldla.enge - 1; I rest segment in ueberschrift eintragen; I neu (ueberschrift, abschnitt) . I edi tor pa.ket 21/3e Zeile E LAN EUMEL **** 1.8 edi tor pe.ket 10.11.86 Irest segment in ueberschrift elntragen : I replace (ueberschrift text. feldlaenge I I Irest segment : I IF zeilenelnfuegen THEN "REST" ELSE " I I 1467 1468 1469 restsegmentinueberschr 1470 1471 1472 restsegment 1473 1474 1475 esckommandoverarbeiten lese kommando verarbeiten : I getchar (bildzelchen); I eventuell zeichen zurueckllelsen; I I I I I I I 1476 1477 1478 1479 1400 1481 I I I I erlaubtetaste 1487 zulaessigezeichen 1488 1489 benutzerwarnen 1490 1491 1492 endenachqui t 1493 1494 tasteistreserviert 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 festvordefinierteescfu 1509 1510 1511 1512 1513 1514 1515 1516 esckommandos 21/31 IF THEN ELSE FI; • FI . (* 04.eO.65 *) taste ist reserviert belegte taste ausfuehren fest vordefinierte esc funktlon ende nach quit. (. 04.0~.8li eventuellzeichenzuruec leventuell zelchen zuruecklleisen : 1482 1483 1484 1485 1486 -IIS- - 2~. rest segment) . -IIS- *) IF Nar write access CAND Nar erlaubte taste THEN benutzer lIarnen; LEAVE kommando ausfuehren FI. I I Ierlaubte taste I Izulaessige zeichen I Ibenutzer lIarnen I I Iende nach quit: I IF max used editor I I ltaste ist reserviert I I pos (zulaessige zeichen. bildzeichen) > 0 . res + ""1 ""2""8""27"brq" out (piep) . < my highest editor THEN LEAVE bildedi tor FI . pos (res, bildzeichen) > 0 . fest vordefinierte esc funktion : read record (file. bildsatz) ; SELECT pos (esc kommandos. bildzeichen) OF CASE z hop lernmodus umschal ten CASE z esc kOllll18.ndodialog versuchen CASE z left zum vorigen lIort CASE z right zum naechsten lIort CASE z b bild an aktuelle zeile angleichen CASE z f belegte taste ausfuehren CASE z rubout markiertes vorsichtig loeschen CASE z rubin v',rsichtig geloeschtes einfuegen OTHERWISE belegte taste ausfuehren END SELECT • Iesc kommandos I LET z hop 1. I z left 3. z rubout 5, I z b 7. I I I ""1""2""8""11""12""27"bf" I edi tor paket z right z rubin • z esc • z f 2. 4. 6. 8; 21/31 ZeUe E LAN 1517 1518 1519 1520 1521 1522 zumvorigenwort 1523 1524 1525 vorgaengererlaubt 1526 1527 zumnaechstenwort + 1528 1529 1.8 **** EUMEL nichtaut'letztemsatz edi tor paket 10.11.86 Izum vorigen wort : I IF vorgaenger erlaubt I I I I I THEN vorgaenger; read record (file, bildsatz); stelle:. LENGTH bildsatz + 1; push (esc + left) FI. Ivorgaenger erlaubt I satznr ) III&X (1, bildmarke) I I Izum naechsten wort IF nicht auf letztem satz THEN weitersuchen wenn nicht gefunden FI I I I I Inicht auf letztem satz line no (file) < lines (file) . I I ~~ 1531 1532 1533 1534 1535 1536 1537 wei tersuchenwennnichtg lwei tersuchen wenn nicht gefunden : I nachfolgenden satz holen; I IF (nachfolgender satz SUB anfang) • blank I THEN push (abscr + esc + right) I ELSE push (abscr) I FI. 1538 1539 1540 nachfolgendensatzholen I nachfolgenden satz holen : I down (file); read record (file, nachfolgender satz); up (file) . 1541 1542 1543 1544 1545 bUdanaktuellezeileang IbUd an aktuelle zeUe angleichen : I anfang INCR verschoben; verschoben . = 0; I margin segment in ueberschrift eintragen; I neu (ueberschrift, bUd) . 1546 1547 1548 marginsegmentinuebersc lmargin segment in ueberschrift eintragen : I replace (ueberschrift text, 2, margin segment) 1549 1550 1551 1552 1553 1554 1555 marginsegment 1556 1557 belegtetasteausfuehren Ibelegte taste ausfuehren : I kommando analysieren (bildzeichen, PROC(TEXT CONST) kolllll&lldo I interpreter) . + 1558 1559 1560 1561 1562 1563 1564 21/32 I I I I I I I I Imargin segment : I IF anfang <= 1 I THEN" •..... " I ELSE TEXT VAR margin text : = "M" + text (anfang); I (6 - LENGTH margin text) * ft ft + margin text I Fl. I I I I komma.ndodialogversuche Ikommandodialog versuchen: I IF fenster ist zu schmal fuer dialog I THEN kommandodialog ablehnen I ELSE komma.ndodialog fuehren I FI. I editor paket 21/32 Zelle E LAN EIlMEL 1.8 **** 19.11.86 ed1 tor pa.ket 1565 1566 fenster1stzuschmalfuer Ifenster ist zu schmal fuer dialog I 1567 1568 1569 konunandodialogablehnen Ikonunandodialog ablehnen I fehlertext: z ~zu schmal fuer ESC I 1579 1571 1572 1573 1574 1575 1576 1577 1578 1579 1589 1581 1582 konunandodialogfuehren + 160~ + 1696 1697 1698 1699 1619 1611 1612 1613 1614 1615 1616 1617 1618 1619 21/33 28 . ESC~; neu (fehlermeldung, nix) I Ikonunandod1alog fuehren: I INT VAH xe, xl, x2, x3, y; I get cursor (xe, y); I cursor (rand + 1, bildrand + zeilennr); I get cursor (xl, y); lout (begin mark); out (monitor meldung); I get cursor (x2, y); I (lunge - LENGTH monitor meldung - marklength) TIMESOUT blank; I get cursor (x3, y); lout (end mark); out (blank); I konunandozeile editieren; I ueberschrift zeigen; I absatz ausgleich : = 2; I (*sh*) I IF konunandotext = ~~ THEN LEAVE kOlllllandodialog fuehren FI; I konunando auf taste legen ("f~, konunandotext); I konunando analysieren ("f", PROC(TEXT CONST) kommando interpreter) I IF fehlertext <> "" I THEN push (esc + esc + esc + "k") I ELIF markiert I THEN ze lle neu I FI. I I kOll1lll&ndozeileedit1eren Ikommandozene editieren : I TEXT VAH konunandotext : = ""; I cursor (xl, y); out (begin mark); I disable stop; I darstellung invertieren; I editget schleife; I darstellung invertieren; I enable stop; I cursor (x3, y); out (end mark); I exec (PROC (TEXT CONST, INT CONST) feldout, file, stelle); I cursor (xe, y) I I 1693 1694 1695 < I 1583 1564 1585 1586 1587 1588 1589 1599 1591 1592 1593 1594 1595 1596 1597 1598 1599 1690 1691 lunge darstellunginvertieren Idarstellung invertieren : I TEXT VAH dummy := begin mark; begin mark :. end mark; end mark :. I dummy; I invertierte darstellung : = NOT invertierte darstellung . I edi tgetschleUe I Iedi tget schleife : I TEXT VAH exit char; I REP I cursor (x2, y); I edi tget (konunandotext, max text length , rand + laenge - x cursor I " " , "k?!", exit char); I neu (ueberschrift, nix); I IF exit char = ~~27"k" I THEN kommando text :: kOl!lll&ndo auf taste ("f") I ELIF exit char = ""27"?" I THEN TEXT VAH taste; getchar (taste); I kommando text :. kommando auf taste (taste) edi tor pa.ket 21/33 Zoile E LAN EUMEL 1620 1621 1622 1623 + 1624 1625 1626 1627 1628 1629 1630 1631 1632 lstreserviertetaste 1633 1634 monitorneldung 1635 neueseite I I I I I I I I I I I I I I •••• 10.11.86 edi tor paket ELIF exit char = ""27"!" THEN getchar (taste); IF ist reserviarte taste THEN set busy indicator; (.sh.) out ("FEfll,ER: """ + taste + """ ist reserviert"7"") ELSE kommando auf taste legen (taste, kOllll1&ndotaxt); kommandotext : = ow; LEAVE edi tget schleife FI ELSE LEAVE edi tget schleife FI PER • list reservierte taste I Imoni tor meldung pos (res, taste) ) 0 "gib kommando : • . I + I Ineue seite I bild) bildanfang:= satznr; zeilennr .= 1; neu (akt satznr, I I 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 lIei terbl&ettern 1654 1655 1656 1657 1658 1659 1660 1661 1662 zurueckblaettern 1663 1664 1665 1666 1667 1668 1669 1670 1671 zeileloeschen 21/34 1.8 Ilieiterblaettern I INT CONST akt bildlaenge := aktuelle bildlaenge; I IF nicht auf letztem satz I THEN erster neusa tz : = sa tznr; I IF zeilennr)= akt bildlaenge I THEN blldanfang INCR akt blldlaenge; neu (akt satznr, blld) I FI ; I satznr := min (lines (file), blldanfang + akt bildlaenge - 1); letzter neusa tz : = satznr; I tol1ne (file, satznr) ; I stelle DECR verschoben; I neu (akt satznr , nix); I zellennr :. satznr - bildanfang + 1; I IF markiert THEN neu (nix, abschnitt) FI; I einrueckposition bestimmen I I FI. I I Izurueckblaettern I IF vorgaenger er l&ubt zellennr ( = 1 I THEN IF I THEN bildanfa.ng : = max (1, bildanfang - aktuelle bildlaenge); I neu (akt satznr, bild) FI ; I nach oben; einrueckposition bestimmen I I FI. I I Ize ile loeschen : I IF stelle = 1 I THEN delete record (file); erster nausa tz : = sa tznr; I letzter neusa tz : = bildanfang + bildlaenge - 1; I nau (nix, abschnitt) I I ELSE zeilen rekombinieren I FI . I edi tor paket 21/34 Zeile E LAN 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 zeilenrekombinieren 1684 1685 1686 &ktuellensatzmitblanks I&ktuellen satz mit blanks auffuellen I blldsa tz AUFFUELLENMIT blank . 1687 1688 1689 1690 nachfolgendensatzlesen Inachfolgenden satz lesen : I TEXT VAR nachfolgender satz; I read record (file, nachfolgender satz) . 1691 1692 1693 1694 nachfolgendersatzohnef Inachfolgender satz ohne fuehrende blanks: I satzrest: = subtext (nachfolgender satz, I einrueckposi tion (nachfolgender satz»; satzrest . 1695 1696 1697 1698 1699 1700 1791 1792 1793 1704 1705 1706 1707 zell..aufspli tten 1706 1709 1710 1711 1712 1713 naechstenonblankposi ti Inaechste non blank position : I INT VAR non blank pos : = stelle; I WHILE (bildsatz SUB non blank pos) • blank REP I non blank pos INCR 1 I PER; non blank pos . 1714 1715 zumvorigensatz 1718 1719 1720 1721 21/35 1.8 Izeilen I IF I THEN I I I I I I I I FI. •••• 10.11.86 edi tor pa.ket rekombinieren : nicht auf letztem satz &ktuellen satz mit blanks auffuellen; delete record (file); nachfolgenden satz lesen; bildsatz CAT nachfolgender satz ohne fUehrende blanks; wri te record (file, bildsa tz) ; ers tar neusa tz : = sa tznr; letzter neusatz : = blldanfang + blldl&enge - 1; neu (nix, abschnitt) I I I I I I I I zeile aufspl1 tten : nachtolgender satz :. ""'; INT VAR i; FOR i FROM 2 UPTO min (stelle, einrueckposit1on (b11dsatz» REP nachfolgender sa tz CAT blank PER; satzrest :. subtext (blldsatz, naechst.. non blank position); nachfolgender satz CAT satzrest; blldsatz := subtext (bildsatz, 1, stelle - 1); wri te record (file, bildsatz); down (file); insert record (file); write record (file, nachfolgender satz); up (file) . I I 1716 1717 EUMEL zUlDfolgendensatz Izum vorigen satz : I IF vorgaer.ger erlaubt THEN vorgaenger; einrueckposition bestimmen I FI . I I Izum folgenden satz : (. 12.09.85 -ws- .) I IF nachfolger erlaubt THEN nachfolger; einrueckposi tion besti...en I ELSE col (file, len (f11e) + 1); neu (nix, I nix) I I I FI. edi tor pa.ket 21/35 Zelle 1722 + 1723 1724 1725 1726 1727 1728 1729 E LAN EUMEL 1.8 •••• 10.11.86 edl tor paleet elnrueckposltionbestim lelnrueckposition bestimmen : I -ws- .) I read record (fl1e, akt bildsatz); I INT VAR neue einrueckposi tion : = einrueckposi tion (akt bildsatz); I IF akt bildsatz ist leerzeile I THEN al te einrueckposit10n : = max (stelle, neue elnrueckpos1 t10n) ELSE alte einrueckposi tion : = min (stelle, neue einrueckposi tion) I I FI • I I 173El 1731 1732 aktbl1dsatzistleerzeil lakt b11dsatz 1st leerzel1e I akt bildsatz = flfl OR akt bild.atz • blank . 1733 1734 1735 zumanfangdesfo~endens 1736 1737 1738 nachfo~ererlaubt 1739 1740 eingeruecktm1 tcr I I Izum anfang des fo~enden satzes : I IF nachfo~er erlaubt THEN nachfo~er; stelle . = anfang FI • I I lnachfo~er I I I leingerueckt mit cr : I IF NOT nachfo~er erlaubt THEN LEAVE eingerueckt mit cr FI; + I 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 I I + 1752 1753 1754 1755 1756 1757 1758 1759 1760 b11dsatz1stleerze11e 1761 eingeruecktzumfo~ende 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 21/36 erlaubt write access COR nicht auf letztem satz . (••h-) read record (file, bildsatz) ; INT VAR epos := einrueckposition (b11dsatz); nachfo~er; col (file, 1); IF eof (file) THEN IF LENGTH bildsatz ( = epos THEN stelle : = alte e1nrueckposl tlon ELSE stelle := epos FI ELSE read record (file, blldsatz) ; stelle := einrueckposition (bildsatz); IF bildsatz 1st leerzeile -ws- -) THEN stelle := alte elnrueckposition; aktuellen satz mit blanks auffuellen FI FI ; alte e1nrueckposition .= stelle. Ib11dsatz ist leerzeile : I blldsa tz = flO OR bildsa tz = blank . I I le"llgerueckt zum fo~enden satz : (.sh-) IF NOT nachfo~er erlaubt OR NOT wr1te access THEN LEAVE e1ngerueckt zum fo~enden satz I FI; I alte einrueckpos1tion merken; I naechsten satz holen; I neue einrueckposition bestimmen; I alte e1nrueckpos1t10n := stelle . I I I I I altee1nrueckposlt10nme lalte e1nrueckpos1tlon merken : I read record (flle, bildsatz) ; I epos:= elnrueckpos1t10n (b11dsatz); editor paleet 21/36 Zeile E LAN 1.8 **** EUMEL 1773 1774 1775 1776 1777 1778 1779 I I aufaufuehlungpruefen 1staufzaehlung 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 vorherabsatzzeile 1800 1801 1802 1803 wortfolgt 1820 1821 1822 1823 21/37 auf aufuehlung pruefen; IF epos ) LENGTH b11dsatz THEN epos .= anfang Fl. lauf aufzaehlung pruefen I BOOL CONST aufzaehlung gefunden . = I 1st aufuehlung CAND vorher absatzzeile CAND wort folgt; I IF aufuehlung gefunden THEN epos := anfang des naechsten worts. I FI . list aufuehlung lINT CONST wortende .= pos (bildsatz, blank, epos, epos + 20) - 1; I SELECT pos (' -*) . : ' , bildsatz SUB wortende) OF I CASE 1,2 wortende epos I CASE 3,4 wortende <= epos + 7 I CASE 5 TRUE I OTHERWISE: FALSE I ENDSELECT. I I Ivorher I IF I THEN I EISE I I I I I Fl. absatzzeile satznr = 1 TRUE up (file); INT CONST vorige sa tzlaenge : = len (file); BOOL CONST vorher war absatzzelle :. subtext (file, vorige satzlaenge, vorige satzlaenge) • blank; down (file); vorher war absatzzelle I I Iwort folgt I INT CONST anfang des naechsten wortes : = I pos (bildsatz, "33"', '"254'", wortende + 1); I anfang des naechsten wortes ) wortende . I I 1804 + ed1 tor pa.ket I I 1781 1782 1783 1784 1785 1786 1787 1788 1789 1815 1816 1817 1818 1819 **** I I 1780 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 10.11.86 naechstensatzholen Inaechsten satz holen : I nachfolger; col (file, 1); I IF eof (file) I THEN bildsa tz : = '" I EISE IF neue zeile einfuegen erforderlich I THEN 1nsert record (file); b1ldsatz := ""; I letzter neusa tz : = bildanfang + bildlaenge - 1 I ELSE read record (file, b1ldsatz); I letzter neusatz := satznr; I ggf trennungen zurueckwandeln und umbruch indikator I einfuegen I FI ; I erster neusatz := satznr; I neu (nix, abschni ttl I I I FI. neuezelleeinfuegenerfo Ineue ze1le einfuegen erforderl1ch : I BOOL CONST war absatz :. war absatzzelle; I war absatz COR neuer satz ist zu lang . I ed1 tor pa.ket 21/'37 Zeile E LAN EUMEL 1.8 --- 10.11.86 edi tor paket 1824 1825 1826 1827 warabsa tzze ile 1828 1829 neuersatzlstzulang 1830 1831 1832 1833 1834 1835 l&engedesneuensa tzes 1836 1837 upb&ckcr 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 Wl 1852 1853 ggt'trennungenzurueckwa Iggt' trennungen zurueckwande1n und umbruch indikator eint'uegen I LET trenn k = ww22E)ww, I trenn strlch = wW221 ww; I TEXT VAH umbruch indikator; IF 1etztes zelchen 1st trenn strlch THEN entferne trenn strich; IF 1etztes zeichen = trenn k THEN wand1e trenn k um FI ; umbruch lndikator := up b&ckcr ELIF 1etztes umgebrochenes ze1chen 1st k&njl THEN umbruch indikator : = up b&ckcr ELSE umbruch indlkator : = blank + up b&ckcr IT; ch&nge (kollllll&ndo, wl, w1+1, umbruch indikator) 1854 letztesumgebrochenesze Iletztes umgebrochenes zeichen ist kanji I w1-1). I + 1855 Iwar absa tzze 11e : I INT VAH w1 : = pos (kommando, up b&ckcr, komma.ndo zelger); I w1 = 0 COR (kommando SUB (w1 - 1» • blank . I I Ineuer satz ist zu lang I I 11aenge I IF I THEN I ELSE I Fl. I I 1aenge des neuen satzes )= 11mi t . des neuen sa tzes len (t'11e) ) 0 len (f11e) + w1 w1 + epos Iup b&ckcr I wW3 ww 2E)ww. I withln kanJl (kollllll&ndo, I 1856 1857 1858 1859 1860 letzteszelchenlsttrenn Iletztes zelchen ist trenn strich : I TEXT CONST last ch&r : = 1etztes zelchen; I last char trenn strich COR I last char = w_w CAND wl ) 2 CAND (kommando SUB (wl-2)) () blank . 1861 1etzteszelchen 1862 1863 entfernetrennstrich wandletrennkum I I Iletztes zeichen I Ientferne trenn strlch I Iwand1e trenn k um I Iloesche 1ndikator I kommando SUB (wl-1) . delete char (kollllll&ndo, wl-1); wl DECR 1 replace (kommando, wl-1, WCW) 1864 1865 loeschelnd1kator delete char (komm&ndo, wl) . 1866 1867 1868 1869 1870 1871 1872 1873 neueeinrueckpositionbe Ineue einrueckposition bestimmen : I IF aut'zaehlung gefunden CAND bildsatz 1st leerzeile I THEN stelle : = epos I ELIF NOT bildsatz ist leerzeile I TIIEII stelle := elnrueckpos1tlon (blldsatz) I ELIF war absatz COR auf 1etztem satz I THEN stelle : = epos I ELSE down (t'ile); read record (f11e, nachfolgender sati); I 21/38 eeli tor peket 21/38 Zaile E LAN EIlMEL 1.8 ._. 10.11.86 edt tor paleet up (file); stelle : = e1nrueckpos1 t10n (l1&Chfo~ender setz) FI; I IF ist einfuegender aber nicht 1nduzierter umbruch I THEN loesche indika tor; I umbruchstelle : = stelle + III - kOllllll&ndo zeiger - anzahl der I stz; I umbruchverschoben :. 0 I Fl. 1874 1875 1876 1877 1878 I I 1879 1880 1881 I I 1882 1883 aut'letztemsa tz Iauf letztem sa tz NOT nicht auf letztem satz . 1884 1885 1886 1887 isteinfuegenderabern1c 11st einfuegender aber nicht 1nduzierter umbruch : I wI: = pos (kolllll&ndo, backcr, kornma.ndo ze1ger); I Ill) 0 CAND (kommando SUB (Ill - 1)) () up char 1888 1889 anzahlderstz I I I I 189EJ + 1891 1892 Ianzahl der stz : I TEXT CONST umgebrochener anfang .' subtext (kommando, kommando I ze1ger, 111-1); I INT VAR anz := 0, anf := pos (umgebrcchener anfang, ""1"", ""31 WW , I 1); I WHILE anf ) 0 REP I anz INCH 1; anf .= pos (umgebrccbener ant'ang, nl n , ""31"", ant' I 1893 1894 I + 1) PER; anz . I I 1895 1896 1897 1898 1899 1900 1901 1902 1903 markiertesvorsicht1g10 Imarkiertes vorsichtig loeschen : I IF wri te access CAND markiert I THEN c lear removed (file); I IF nur im satz mark1ert I THEN behandle einen satz I ELSE behandle mahrere saetze I FI I Fl. 1904 1905 nur1msatzmarkiert 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 behandlee1nensatz 21/39 I I Inur im satz markiert line no (file) blldmarke. I I Ibehandle e1nen satz : I 1nsert record (file); I satzrest:= subtext (bildsatz, marke, stelle - 1); I write record (file, satzrest); remove (file, 1); change (blldsatz, marke, stelle - 1, ""); stelle : = marke; marke := 0; bildmarke := 0; feldmarke :. 0; markiert :. FALSE; mark (file, 0, 0); konst&nten neu berechnen; IF bildsatz = "" THEN delete record (file); erster neusetz : = satznr; letzter neusatz : = bildanfang + bildlaenge - 1; neu (nix, abschni tt) ELSE wr1 te record (file, bildsa tz) ; neu (nix, bildze 11e ) FI . edi tor palest 21/39 Zeile E LAN 1.8 EUMEL 1925 1926 1927 1928 1929 1930 1931 1932 behandlemehreresaetze 1933 1934 1935 1936 1937 1938 1939 1940 1941 zeileanaktuellerstelle 1942 nichtamanfangderzeile •••• 10.11.86 edi tor paket lbehandle mehrere saetze : erster neusatz :. bildmarke; letzter neusatz := bildanfang + bildlaenge - 1; zeile an aktueller stelle auftrennen; ersten markierten satz an markieranfang autspalten; marklerten bereich entternen; I bild anpassen . I I I I I I I Izeile an aktueller stelle auttrennen : I INT VAR markierte saetze :. line no (tile) I IF nicht am ende der zeile I THEN IF nicht am anfang der zeile I THEN zeile aufspli tten I ELSE up (tile); marklerte saetze DEeR I FI I FI. I I Inicht - bildmarke + 1; 1 am anfang der zeile stelle) 1 . am ende der zeile stelle (= LENGTH bildsatz I Inicht I I 1943 1944 nlcht&mendederzeile 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 erstenmarkiertensatzan lersten markierten satz an markieranfang aufspalten : I to line (file, line no (file) - (markierte saetze - 1»; I read record (file, bildsatz); I stelle:= feldmarke; I IF nicht am anfang der zeile I THEN IF nicht am ende der zeile I THEN zeile aufspli tten I ELSE markierte saetze DECR 1 I FI I to line (file, line no (file) + markierte saetze) I ELSE to line (file, line no (file) + marklerte saetze - 1) I FI; I read record (file, bildsa tz) . 1959 1960 1961 1962 1963 1964 1965 1966 markiertenbereichentfe 1967 1968 1969 1970 1971 1972 1973 1974 bildanpassen 1975 1976 1977 1978 1979 vorsichtiggeloeschtese 21/40 I I Imarkierten bereich entfernen I zeilen nr := line no (file) - marklerte saetze - bildanfang + 2; I remove (file, markierte saetze); I marke:= 0; bildmarke :. 0; feldmarke := 0; I markiert:= FALSE; mark (f11e, 0, 0); I konst&nten neu berechnen; I stelle: = 1 . I I Ibild anpassen I satz nr : = line no (file); I IF zeilen nr (. 1 I THEN bildanfang : = line no (fUe); zeUen nr : = 1; I neu (akt sa tznr, bild) I ELSE neu (akt satznr, abschnltt) I FI. I I Ivorslchtig geloeschtes elnfuegen : I IF NCYr wrl te access OR removed lines (fUe) = e I THEN LEAVE vorsichtig geloeschtes e1nfuegen I FI I IF nur ein satz ed1 tor paket 21/48 Zeile E LAN EUMEL 1.8 *-* I I I I I 1980 1981 1982 1983 1984 nureinsatz 1986 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 + 2026 2027 2028 2029 2030 2031 2032 2033 2034 **** edi tor pa.ket THEN in alctuellen satz einfuegen ELSE alctuellen satz aufbrechen und einfuegen FI . Inur ein satz removed lines (file) = 1 . I I 1985 1987 1988 1989 1990 1991 1992 10.11.86 inaktuellensatzeinfueg lin aktuellen satz einfuegen : I reinsert (file); I read record (file, n&chfo~ender sdz); I delete record (file); I TEXT VAR t := bildsatz; I bildsatz:= subtext (t, 1, stelle - 1); I alctuellen satz mit blanks auffuellen; I (*sh*) I bildsatz CAT n&Chfo~ender satz; I satzrest:= subtext (t, stelle); I bildsa tz CAT sa tzrest; I wri te record (file, bildsatz) ; I stelle INCR LENGTH n&ehfo~ender satz; I neu (nix, bildzeile) . alctuellensatzaufbreche I I aktuellen satz aufbrechen und einfuegen : INT CONST alter bild&nfang := bl1d&nfang; old lineno := satznr; IF stelle = 1 THEN reinsert (file); read record (file, bildsatz) ELIF stelle ) LENGTH bildsatz THEN down (file); reinsert (file); read record (file, bildsatz) ELSE INT VAR von : = stelle; WHILE (bildsatz SUB von) = blank REP von INCR 1 PER; satzrest := subtext (bildsatz, von, LENGTH b11dsatz); INT VAR bis : = stelle - 1; WHILE (bildsatz SUB bls) = blank REP bis DECR 1 PER; bildsatz := subtext (bildsatz, 1, bis); write record (file, bildsatz); down (file); reinsert (f11e); read record (file, b11dsatz) ; nachfo~ender satz : = einrueckposi tion (blldsatz) * blank; n&chfo~ender satz CAT satzrest; down (file); insert record (fl1e); wrlte record (file, n&chfo~ender 8atz); up (file) FI ; stelle := max (1, LENGTH bildsatz); (* 22.06.84 -bk- *) satz nr :. line no (file); zeilennr INCR satznr - old 11neno; zeilennr :. min (zeilennr, alctuelle bildl&enge); bl1d&nfang := satznr - zel1ennr + 1; IF bildanfang veraendert THEN abschnitt neu (blld&nfang, 9999) ELSE abschnitt neu (old 11neno, 9999) FI ; neu (alct satznr, nix). 2035 21/41 edl tor palcet 21/41 EUMEL 1.8 _.. 10.11.86 Zeile E LAN 2036 2037 bild&nfangveraendert 2038 2039 2049 lernmodusumsch<en 2041 2042 2043 learnsegmentinuebersch Ilearn segment in ueberschrift eintragen : I replace (ueberschrift text, feldlaenge - 19, learn segJlMlnt) . 2044 learnsegment Ibildanfang veraendert edi tor paleet bild&nfang () alter bildanfang . I I Ilernmodus umschal ten : I learn segment in ueberschrlft eintr&6en; neu (ueberschrift, nix) . I I I I 204~ Ilearn segment : I IF lernmodus THEN wLEARN w ELSE w..... w FI . 2046 I 2047 2048 marklerungumsch&l ten 2049 20~ markierungelnsch&l ten 2051 20:12 2053 20~4 2055 2056 20:17 2058 2059 2060 2061 2062 2063 marklerungaussch&l ten I lmarkierung umschal ten I IF markiert THEN markierung aussch<en ELSE markierung I elnschalten FI . I I Imarklerung elnsch&l ten I bildmarke:= satznr; feldmarke .- marke; markiert := TRUE; I mark (file, bildmarke, feldmarke); I neu (nix, bildzeile) . I I 2064 Imarklerung aussch&l ten I erster neusatz := max (blldmarke, b11danfang); I letzter neusa tz : = satznr; I bildmarke:= 0; feldmarke := 0; markiert := FALSE; I mark (f11e, 0, 0); I IF erster neusatz = letzter neusatz I THEN neu (nix, bildzeile) I ELSE neu (nix, abschnitt) I FI. lEND PROC bildeditor; 206~ I 2066 2067 2068 2069 2070 2071 neu ...................... IPROC neu (INT CONST ue bereich, b bereich) : I ueberschrlftberelch: = max (ueberschr1ftberelch, ue bereich); I bildbereich. - max (bildbereich, b bereich) lEND PROC neu; 2072 2073 2074 2075 2076 2077 2078 2079 nacho ben ................. IPROC Mch oben : I letzter neusatz . - satznr; I satznr: = max (bildanfang, bildmarke); I toline (file, satznr); I stelle DECR verschoben; I zeilennr: = satznr - bildanfang + 1; I erster neusatz : = satznr; I IF markiert I THEN neu (akt sa tznr, abschnit t) I ELSE neu (akt satznr, nix) I FI lEND PROC nach oben; 208@ 2081 2082 2083 2084 21/42 I I I editor palee t 21/42 Zeile 2085 2086 2087 2088 E LAN EUMEL edi tor p&ket vorgaenger ............... Imoc vorgaenger : I up (file); satznr DEeR 1; I marke:. 0; stelle DEeR verschoben; I IF ze ilennr = 1 I THEN bildanCang DEeR 1; neu (ue berschr itt, blld) I ELSE zeilennr DEeR 1; neu (akt satznr, nix); I I I 2099 2100 2101 2102 (*sh*) IF markiert THEN neu (nix, bildzeile) FI FI IEND PIIOC vorgaenger; I moc nacbColger. . . . . . . . . . . . . .. Mchfolger : down (file); satznr INCR 1; stelle DEeR verschoben; IF zeilennr = aktuelle blldlaenge THEN bildanCang INCR 1; IF rollup erl&ubt THEN rollup ELSE neu (ueberschriCt, blld) FI ELSE neu (akt satznr, nix); zeilennr INCR 1 (*sh*) FI IF markiert THEN neu (nix, blldzeile) FI • 2113 2114 2115 2116 2117 2118 rolluperl&ubt 2119 2120 2121 2122 2123 rollup Irollup erl&ubt : I kurze bildlaenge maxl&enge AND kurze Celdlaenge maxbreite. I I Irollup lout (down char); I IF bildzeichen = inscr I THEN neu (ueberschrict, nix) I ELIF is cr or down CAND (write access COR nicht auf letztem sa tz) I + (*sh-) I THEN neu (nix, blldzelle) I ELSE neu (ueberschriCt, bildzeile) I FI. 2124 2125 2126 2127 I I 2128 2129 2130 2131 iscrordown 2132 2133 kOllllllLndochar 21/43 10.11.86 I (*wk-) I ELSE kurze bildlaenge I FI IEND PROC aktue lle blldl&enge; I + 2103 2104 2105 2106 2107 2108 2109 2110 Z11 2112 **** aktuellebildl&enge ....... lINT PROC aktuelle bildlaenge : I IF stelle - stelle am anfang ( kurze feldlaenge I AND fe ldlaenge ) 0 I THEN bildlaenge 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 1.8 lis cr or down: I IF konunando • •• THEN kommando : = inchety FI; I komma.ndo char = down char COR kommando char • cr . I I Ikommando char konunando SUB kommando zeiger I editor p&ket 21/43 EUMEL Zeile E LAN 2134 2135 2136 n1chteufletztemsa tz 2137 2136 2139 2140 + 2141 2142 2143 2144 + 2145 2146 2147 2146 2149 2150 2151 2152 2153 2154 2155 1.8 •••• 10.11.86 Inicht auf letztem sa tz lEND PROC nachfolger; ed1 tor paket line no (file) < lines (file) . I nextincharetyis .......... IBOOL PROC next incharety is (TEXT CONST muster) : I INT CONST klen : = LENGTH kommando - kommando zeiger + 1, I mIen : = LENGTH muster; I INT VAR i; FOR i FROM 1 UPI'O mIen - klen REP kommando CAT 1nchety I PER; I subtext (kommando, kommando zeiger, kommando zeiger + mIen - 1) = I muster IEND PROC next incharety is; I quitlast ................. IPROC quit last: (. 22.86.84 I -bk- .) I IF actual edi tor ) 0 AND actual editor < max used editor I THEN verlasse alle groesseren editoren I FI. I I verlasseallegroesseren Iverlasse aIle groesseren editoren : I open editor (actual edi tor + 1); quit lEND PROC quit last; I quit ..................... 1PROC quit: I IF actual editor ) 0 THEN verlasse aktuellen editor FI . I I 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 verlasseaktuellenedi to Iverlasse aktuellen editor : I disable stop; I INT CONST aktueller editor .' actual editor; I in innersten editor gehen; I REP I IF ze1leneinfuegen THEN hop rubin simulieren FI; I ggf bildschirmdarstellung korrigieren; I innersten editor schliessen I UNTIL aktueller editor ) max used editor PER; I actual editor :. max used editor . 2167 2168 ininnerstenedi torgehen 2169 2170 2171 hoprubinsimulieren + 2172 2173 2174 2175 2176 2177 2178 2179 2160 21/44 innersteneditorschlies I I Iin I I innersten edi tor gehen open editor (max used editor) . hop rubin simulieren : zeileneinfuegen : = FALSE; leere zeilen am dateiende loeschen; (.sh.) ggf bildschirmdarstellung korrigieren; logisches eof loeschen . innersten editor schliessen max used editor DEeR 1; IF max used editor) 0 THEN open editor (max used editor); b1lde1nschraenkung aufheben FI . edt tor paket 21/44 Zeile E LAN EUMEL 1.8 **- edi tor paket 10.11.86 I I 2181 2182 2183 2184 logischeseofloeschen 2185 leerezeilenamdateiende Ileere zeilen &III dateiende loeschen (* 15.08.Bl! I -ws- *) I satz nr := line no (file) ; I to line (file, lines (file» I WHILE lines (file) ) 1 AND bildsatz 1st leerzeile REP I delete record (file); I to line (file, lines (file» + 2186 2187 2188 2189 2190 2191 2192 2193 Ilogisches eof loeschen : I col (file, stelle); set range (f11e, old range) . I I I PER; I to11ne (file, satznr) . I I 2194 2195 2196 2197 2198 bildsatz1stleerzeile 2199 2200 2201 istleerzeile 2202 2203 ggfbildschirmdarstellu Iggf b11dsch1rmdarstellung korrigieren I satz nr DECR 1; (* fOr I Bildschirmkorrektur .) I IF satznr) lines (file) I THEN zeUen nr DECR satz nr - lines (file); I satz nr := lines (file); I dateizustand retten I FI. + 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 Ibildsatz 1st leerzeile : I TEXT VAR bildsatz; I read record (f11e, bildsatz); l i s t leerzeile . I I 11st leerzeile : I bildsa tz • "" OR bildsatz • blank . I I I I bildeinschraenkungaufh Ibildeinschraenkung aufheben I laenge: = fe ldlaenge ; I kurze feldlaenge : = feldlaenge; I kurze b1ldlaenge := bildlaenge; I neu (nix, bild) lEND PROC quit; I 2217 2218 n1chtsneu ............... ·IPROC n1chts neu I neu (n1x, n1x) END PROC nichts neo 2219 2220 satznrneu ................ IPROC satznr neu I neu (akt .atznr, n1x) END PROC satznr net 2221 ueberschr1ftneu .......... IPROC ueberschr1ft neu : neu (ueberschr1ft, n1x) I ueberschr1ft neu; + 2222 2223 2224 2225 21/45 END PROC I zeUeneu ................. IPROC zeUe neu : I INT CONST zene : = line no (file); I abschnitt neu (zeile, ze11e) ed1 tor paket 21/4:5 Zeile E LAN 2226 2227 EUMEL 1.8 **** 10.11.86 editor paket lEND PROC zeile neu; I 2228 2229 2230 2231 2232 2233 2234 2235 2236 abschnittneu ............. IPROC abschnitt neu (INT CONST von satznr, bis satznr) : I IF von satznr <= bis satznr I THEN erster neusatz := min (erster neusatz, von satznr); I letzter neusatz : = max (letzter neusatz, bis satznr); I neu (nix, abschnitt) I ELSE abschnitt neu (bis satznr, von satznr) I FI lEND PROG abschn1tt neu; 2237 bildabschnittneu ......... IPROC bildabschnitt neu (INT CONST von zeile, bis zeile) I (*sh*) I IF von zeile < = bis zeile I THEN erster neusatz : = max (1, von zeile + bildanfang - 1); 1 letzter neusa tz : = min (bildl&enge, bis zeile + bildanfang - + 2238 2239 2240 I I 2241 2242 2243 22M 2245 2246 2247 2248 2249 1); IF von zeile < 1 I THEN neu (ueberschrift, abschnitt) 1 ELSE neu (nix , abschn1 tt) 1 IT I ELSE bildabschnitt neu (bis zeile, von zeile) I FI lEND PROG bildabschnitt neu; 1 1 bildneu .................. IPROG bild neu I (*sh*) 2250 neu (nix, bild) END PROC blld neu; 1 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 bildneu ••..•..••...•..•.. IPROC bild neu (FILE VAR f) : lINT CONST edi tor no : = abs (edi t1nfo (f) DIV 256; 1 IF edi tor no ) 0 AND edi tor no <= max used edi tor 1 THEN IF editor no = actual editor 1 THEN bild neu 1 ELSE editst&ck (editor no). blldst&tus. bildbereich : = bild I FI 1 FI 1END PROC bild neu; 2261 2262 2263 2264 2265 2266 2267 2268 2269 a11esneu 2270 2271 2272 satznrzeigen ............. 1 PROC satznr zeigen : lout (satznr pre); out (text (text (11neno (file», 4» IEND PROC satznr ze1gen; 21/46 editor paket 1 a11es neu : neu (ueberschrift, blld); 1 INT VAR i; 1 FOR i FROM 1 UPTO max used editor REP I edits tack (i).bildstatus.b11dbere1ch .- bild; I ed1 tst&ck (i). bildstatus. ueberschr1ftbere1ch : = ueberschrUt 1 PER 1END PROG a11es neu; ••••••••••••••••• 1PROG I 1 21/46 Zaile E LAN EUMEL 1.8 **** 10.11.86 edi tor paket 2273 2274 2275 2276 2277 2278 ;;279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 ueberschriftzeigen ....... IPROC ueberschrift zeigen : I SELECT ueberschriftbereich OF I CASE akt satznr satznr zeigen; I ueberschriftbereich : = nix I CASE ueberschrift ueberschrift schreiben; I ueberschriftbereich : = nix I CASE fehlermeldung fehlermeldung schreiben; I ueberschriftbereich . - ueberschrift I END SELECT IEND PROC ueberschrift zeigen; I fensterzeigen ............ IPROC fenster zeigen : I SELECT bildbereich OF I CASE bildzeile : I zeile : = bildrand + zeilennr; I IF line no (file) ) lines (file) I THEN feldout (ftft, stelle) I ELSE exec (PROC (TEXT CONST, INT CONST) feldout, file, stelle) FI CASE abschni tt : bild ausgeben CASE bild : erster neusatz ,: 1; letzter neusa tz : = 9999; bild ausgeben OTHERWISE: 2301 2302 2303 2304 2305 LEAVE fenster zeigen END SELECT; erster neusatz : = 9999; letzter neusa tz : = 0; bildbereich : = nix IEND PROC fenster zeigen 2306 I 2300 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 21/47 bildausgeben ............. IPROC bild ausgeben : I BOOL CONST schreiben ist ganz einfach . - NOT markiert AND I verschoben = 0; I INT CONST save marke : = marke, I save verschoben : = verschoben, I save laenge : = laenge, I act l1neno : = lineno (file), I von : = maX (1, erster neu ... tz - bildanfang + 1); I INT VAR bis := min (letzter neusatz - bildanfang + 1, I bildlaenge) ; I IF kurze feldlaenge (. 0 THEN bis :. min (bis, kurze bildlaenge) I FI; I IF von ) bis THEN LEAVE bild ausgeben FI; I verschoben: = 0; I IF markiert I THEN IF mark lineno (file) ( blldanfang + von - 1 I THEN marke . - anfang I ELSE marke . - 0 I I I FI FI; abschni tt loeschen und neuschreiben; edi tor paket 21/47 Zeile E LAN 1.8 **** EUMEL 2325 2326 2327 2328 2329 I I I I 10.11.86 **** edi tor pa.k.et to line (file, act line no); la.enge: = save la.enge; verschoben: = save verschoben; marke: = save marke . I I 2330 2331 markiert Imarkiert mark 11neno (fl1e) ) 0 . 2332 2333 2334 2335 2336 2337 abschnittloeschenundne labschnitt loeschen und neuschrelben : I abschnitt loeschen; I INT VAR line number : = bildanfang + von - 1; I to line (file, line number); I abschnltt schreiben . 2338 2339 2340 2341 2342 2343 2344 abschnittloeschen 2345 2346 2347 2348 bildrestdarfkomplettge Ibildrest darf komplett geloescht werden : Ibis = ma.xlaenge AND kurze bildlaenge = ma.xla.enge I AND kurze feldlaenge = ma.xbrei te 2349 2350 2351 2352 2353 2354 2355 2356 2357 zeilenweiseloeschen 2358 2359 2360 2361 2362 2363 feldla.engeelnstellen 2364 2385 ganzezelleslchtba.r 2366 2367 abschnittschreiben I I I I labschnitt loeschen : I cursor (rand + 1, bildrand + von); I IF bildrest darf komplett geloescht werden I THEN out (clear eop) I ELSE zeilenweise loeschen I FI. I I I I 2368 2369 2370 2371 2372 2373 2374 2375 2376 21/48 Izeilenweise loeschen : INT VAR i; I FOR i FROM von UPI'O bis REP I check for interrupt; I feldla.enge einstellen; I feldrest loeschen; I IF 1 < bls THEN out (down char) FI I PER. I I I Ifeldlaenge elnstellen : I IF ganze zene sichtba.r I THEN laenge . - feldla.enge I ELSE laenge : = kurze feldla.enge I FI. I I Iganze zelle slchtba.r i <= kurze blldla.enge . I I Iabschnitt schreiben : I INT CONST last line :. lines (file); I FOR 1 FROM von UPI'O bis I WHILE line number <= last line REP I check for lnterrupt; I feldla.enge einstellen; I zeile schreiben; I down (! 11e) ; I line number INCR 1 I PER. I edi tor pa.k.et 21/48 Zeile 2377 2378 2379 2380 2381 2382 E LAN checkforinterrupt 2383 2384 2385 2386 EUMEL 1.8 **** vorgaengererlaubt 2390 upcommand 2391 2392 2393 2394 2395 downcommand 2395 2397 n1chtletztersatz 2398 2399 2400 2401 2402 zeileschrelben Fl. I I Ivorgaenger erlaubt I satznr) max (1, bildmarke) I I lup command: next lncharety 1s (""3"") COR next 1ncharety is I I I (""1""3"") Idown command I next 1ncharety is (""10"") CAND bildl&enge < maxlaenge I COR next incharety is (""1""10"") . I I Inicht .letzter satz Izeile schreiben : I ze ile : = bildrand + i; I IF schreiben ist ganz einfach I THEN exec (PROC (TEXT CONST, INT CONST) simple feldout, file, 0) I ELSE zeile kompliziert schrelben ~~ I IT I IF ~07 2408 2409 2410 ~11 ~12 2413 2414 act 11neno < lines (file) . I I 2404 2405 2405 I I line number = old 11neno THEN old 11ne update : = FALSE FI . zeilekomp11ziertschrel Izeile komp11z1ert schre1ben : I IF 11ne number mark lineno (file) THEN marke .' mark col I (file) FI; I IF line number act l1neno I THEN verschoben . - save verschoben; I exec (PROC (TEXT CONST, INT CONST) feldout, file, stelle); I verschoben := 0; marke :. 0 I ELSE exec (PROC (TEXT CONST, INT CONST) feldout, file, El); I IF line number = mark lineno (file) THEN marke :. anfang FI I Fl. ~15 lEND PROC bild ausgeben; 2415 I ~17 + 2418 2419 ~20 ~21 2422 2423 ~24 2425 ~26 21/49 edi tor pa.ket Icheck for interrupt : I kommando CAT inchety; I IF kommando <) "" I THEN IF zeilen nr = 1 CAND up command CAND vorgaenger erla.ubt I THEN LEAVE abschnitt loeschen und neuschreiben I ELIF zeilen nr = bildlaenge CAND down command CAND n1cht I letzter sa tz I THEN LEAVE abschnitt loeschen und neuschre1ben I FI I 2387 2388 2389 10.11.86 bildzeigen ............... IPROC blld ze1gen I (* wk *) I I dateizustand holen ; I ueberschrift zeigen I bildausgabe steuern I bild neu ; I . fenster zeigen ; I ·oldline no :. satznr laId 11ne update : = FALSE I old satz :. "" ; editor pa.ket 21/49 Zeile E LAN EUMEL 1.8 2427 2428 2429 2430 2431 2432 2433 2434 **.* editor paket 10.11.86 I old zeilennr : = sa tznr I dateizustand retten I IENDPROC bild zeigen ; I - bildanfang + 1 ueberschriftinitialisi ... IPROC ueberschrift initialisieren I (*sh*) I satznr pre : = cursor pos + code (bildrand - 1) + code (rand + feldlaenge I I I I + 2435 24:36 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 I I I I ,, , , , , , , ,I 6) ; ue berschrift pre : = cursor pos + code (bildrand - 1) + code (rand) + mark anf; ueberschrift text := ""; INT VAR i; FOR i FROM 16 UPrO feldlaenge REP ueberschrift text CAT "." PER; ueberschrift pest : = blank + mark end + "Zeile " + mark anf; ueberschrift post CAT blank + mark end +" "; filename : = headline (file); filename : = subtext (filename, 1, fe ldlaenge - 24); insert char (filename, blank, 1); filename CAT blank; replace (ueberschrift text, filenamepos, filename); rubin segment in ueberschrift eintragen; margin segment in ueberschrift eintragen; rest segment in ueberschrift e1ntragen; learn segment in ueberschrift eintragen . , filenamepos , DIV 2 (LENGTH ueberschrift text - LENGTH filename ,'mark anf ,'mark end ,'mark ausgleich , begin mark + mark ausgleich. 2450 filenamepes 2451 markanf 2452 markend 2453 2454 markausgleich 2455 2456 2457 rubinsegmentinuebersch 'rubin segment in ueberschrift eintragen : , replace (ueberschrift text, 9, rubin segment) 2458 2459 2460 rubinsegment 2461 2462 2463 marginsegmentinuebersc 'margin segment in ueberschrift eintragen : , replace (ueberschrift text, 2, margin segment) 2464 2465 2466 2467 2468 2469 2470 marg1nsegment 2471 2472 2473 restsegmentinueberschr 21/50 , end mark + + mark ausgle1ch. (1 - sign (max (mark size, 0))) • blank . ,, 'rubin segment : IF einfuegen THEN "RUBIN" ELSE " ,I , " FI . , I 'margin segment : , IF an fang ( = 1 , THEN" ...... " I ELSE TEXT VAR margin text : = "M" + text (anfang); (6 - LENGTH margin text) * + margin text I ,, , FI. Irest , , segment in ueberschrift eintragen : replace (ueberschrift text, feldlaenge - 25, rest segment) . edi tor paket 21/~ 3) Zeile 2474 2475 E LAN restsegment EUMEL 1.8 **** 10.11.86 edi tor paket Irest segment : I IF zeileneinfuegen THEN "REST" ELSE " .... " FI . I I M% M77 2478 2479 learnsegmentinuebersch Ilearn segment in ueberschrift eintragen : I replace (ueberschr1ft text, feldlaenge - 19, learn segment) . 2480 M81 2482 2483 MM learn segment 2485 M86 M87 2488 2489 2490 2491 2492 M93 2494 I I Ilearn segment : I IF lernmodus THEN "LEARN" ELSE " ..... " FI I IEND PROC ueberschrift ini tialis1eren; I ueberschriftschreiben .... IPROC ueberschrift schreiben : I replace (ueberschrlft post, satznr pos, text (text (linene I ( file) ), 4)); lout (ueberschrift pre); out (ueberschrift text); out (ueberschrift I post); I get tabs (file, tab); I IF pos (tab, dach) ) 0 I THEN out (ueberschrift pre); I out subtext (tab, anfang + 1, anfang + feldlaenge - 1); I cursor (rand + 1 + feldla.enge, blldrand); out (end mark) I FI. 2496 I satznr pos : IF mark size) 0 THEN 9 ELSE 10 FI I (*sh*) IEND PROC ueberschrift schre1ben; M~ I 2495 satznrpos I I 2498 2499 2500 2501 2502 2503 2504 25135 2506 2507 fehlermeldungschreiben ... IPROC fehlermeldung schreiben I ueberschrift schreiben; lout (ueberschrift pre); lout ("FEIILER: "); lout subtext (fehlertext, 1, feldla.enge - 21); lout (blank); lout (p1ep); I cursor (rand + 1 + feldlaenge, bildrand); out (end mark) lEND PROC fehlermeldung schre1ben; 2508 25139 2510 2511 setbusyindicator ......... IPROC set busy indicator: I cursor (rand + 2, blldrand) IEND PROC set busy indicator; 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 kommandoanalysieren ...... IPROC kommando analysieren (TEXT CONST taste, PROC (TEXT CONST) kOlllll18.ndo interpreter) I I disable stop; I bildausgabe normieren; I zustand 1n date 1 s ichern; I edi tfile modus setzen; I kOlllll18.ndo 1nterpreter (taste); I editfile modus zuruecksetzen; o THEN LEAVE kommando analysieren FI; I IF actual editor I absatz ausglelch . - 2· (*sh*) I 21/51 I I edt tor paket 21/01 Ze1le E LAN 1. B .... ** EUMEL 2522 252:3 2524 2525 2526 2527 10 . 11 . B6 edi tor paket I konst&nten neu berechnen; I neues bild bel undefinierter benutzeraktion; I evtl fehler behandeln; I zust&nd aus datel holen; I bildausgabe steuern . I I 2528 2529 25:30 2531 editfilemodussetzen 2532 253:3 2534 edl tfilemoduszurueckse Iedi tfile modus zuruecksetzen : I edi tget modus : = alter edi tget modus 2535 2:536 2537 2538 2539 2540 2541 2542 evtlfehlerbehande In Ievtl fehler behande In : I IF is error I THEN fehlertext :. errormessage; I IF fehlertext () "" THEN neu (fehlermeldung, nix) FI; I clear error I ELSE fehlertext : = I FI. 2543 2544 2545 2546 2547 zustandindateisichern I zust&nd in datei slchern : I old zeilennr : = zeilennr; laId mark l1neno : = bildmarke; I dateizust&nd ret ten . Iedi tfile modus setzen : I BOOL VAH alter edi tget modus : = edi tget modus I edi tget modus : = FALSE . I I I I I I I I 2548 2549 2550 2551 2552 2553 zust&ndausdat&iholen 2554 2555 2556 2557 2558 2559 2560 2561 zurueckaufalteposition Izurueck auf alte position: I to line (file, old I1neno); I col (file, alte stelle); I IF fllesstext I THEN edi tinfo (file, old zeilennr) I ELSE edit1nfo (fl1e, - old zel1ennr) I FI; datelzust&nd holen . 2562 2563 2564 2565 2566 bildausgahenormieren 2567 2568 2569 2570 neuesbildheiundef1nler I neues bild hel undefinlerter henutzeraktlon : I IF bildbereich • undefinierter bereich THEN alles neu FI . lEND PROG kommando ana!ysieren; 2571 2572 257:3 21/52 Izust&nd aus datei holen : I dateizust&nd holen; I IF letzer edltor auf dleser datei () actual editor I THEN zurueck auf alte post tion; neu (ueherschrift, bild) I FI. I I I I Ibildausgahe norm1eren : I bildhereich: = undefinlerter berelch; I erster neusatz :. 9999; I letzter neusa tz : = 0 . I I I blldausgabesteuern ....... IPROC bildausgabe steuern : I IF marklert I THEN IF old mark lineno • 0 edi tor paket 21/52 Zeile E LAN EUMEL 1.8 **** editor pe.ket 10.11.86 THEN a.bschni t t neu (bildma.rke, sa. tznr) ; konsta.nten neu berechnen ELIF stelle vera.endert (*sh*) THEN ze ile neu FI ELIF old ma.rk l1neno ) 0 THEN a.bschnitt neu (old ma.rk lineno, (ma.x (sa.tznr, old lineno))); konsta.nten neu berechnen FI ; IF sa.tznr () old lineno THEN neu (a.kt sa.tznr, nix); neuen bilda.ufba.u bestimmen ELSE zeilennr : = old zeilennr FI ; zellennr : = min (min (zellennr, sa.tznr), a.ktuelle blldla.enge); blldanfang : = satznr - zeilennr + 1 . 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 stellevera.endert 2593 2594 2595 2596 2597 2598 2599 neuenbilda.ufbaubestimm 2600 2601 2602 imfensterspringen 2603 2604 2605 2606 bildneuaufbauen 2607 2608 2609 2610 2611 2612 2613 2614 2615 I I I I I I fliesstextindateisetze 2616 2617 21/53 () alte stelle . : + sa.tznr - old l1neno; IF 1 (= zeilennr AND zellennr (. a.ktuelle bildlaenge THEN im fenster springen ELSE bild neu aufbauen FI. lim fenster springen : I IF ma.rkiert THEN abschni tt neu (old l1neno, sa.tznr) FI . I I Ibild neu a.ufba.uen I neu (nix, bild); zeilennr := ma.x (1, a.ktuelle bildlaenge IEND FROC blldausgabe s'teuern; I DIV 2) . wordwra.p ................. IPROC word wra.p (BOOL CONST b) I IF a.ctual edi tor = 0 I THEN std fliesstext :. b I ELSE fliesstext in da.tei setzen I Fl. + 2618 2619 2620 2621 2622 Istelle vera.endert stelle I I Ineuen bildaufbau bestimmen I zellennr:= old zeilennr fliesstextveraendert I I Ifliesstext in da.tei setzen : I fliesstext:= b; I IF fliesstext veraendert THEN edi tinfo I FI; I neu (ueberschrift, bild) I I Ifliesstext veraendert : I fliesstext AND editinfo (file) ( 0 OR I NOT fliesstext AND editinfo (file) ) 0 (file, - editinfo (file)) lEND FROC word wra.p; I edi tor pa.ket 21/53 Zeile 2623 + 2624 2625 2626 2627 2628 2629 E LAN EUMEL 1.8 •••• 10.11.86 editor p&ket wordwrap ................. IBOOL PROC word wrap : I (.sh.) I IF actual edi tor = 0 I THEN std fliesstext I ELSE fliesstext I FI lEND PROC word wrap; I anfang END PROC margin; 2630 2631 margin ................... lINT PROC margin 2632 margin ................... IPROC margin (INT CONST il I (.sh.) I IF anfang <) i CAND i ) 0 AND i < 16001 I THEN a.nfang := i; neu (ueberschrift, bild); I margin segment in ueberschrift eintragen I ELSE IF i ) = 16001 OR i < 0 I THEN errorstop ("ungueltige Anfangsposition (1 - 16eee)") I FI I FI. 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 I I I marg1nsegmentinuebersc Imarg1n segment in ueberschrift eintragen : I replace (ueberschrift text, 2, margin segment) I I 2643 2644 marginsegment 2645 2646 2647 2648 2649 2650 2651 2652 2653 + I IEND PROC margin; I rubinmode ................ IBOOL PROC rubin mode I mode; + 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 21/54 rubin mode (actual ed1 tor) END PROC rubi' I 2654 2655 lmargin segment: I IF anfang <= 1 I THEN" ...... " I ELSE TEXT VAH margin text := "M" + text (anfang); I (6 - LENGTH margin text) * + margin text I FI. rub1nmode •••••••••••••••• 1BOOL PROC rubin mode (INT CONST editor nr) : (.sh-) I IF edi tor nr < 1 OR editor nr ) max used editor I THEN errorstop ("Editor nicht eroeffnet") I FI; I IF editor nr = actual editor I THEN einfuegen I ELSE editst8.ck (editor nr).feldstatus.einfuegen I FI IEND PROC rubin mode; I I ed1 t ..................... IPROC edit (INT CONST i, TEXT CONST res, I PROC (TEXT CONST) kommando interpreter) I edit (i, i, i, res, PROC (TEXT CONST) kommando interpreter) lEND PROC edit; edi tor p&ket 21/M Zeile *-* ELAN 1.8 ••*. EUMEL 10.11.86 ed1 tor p&ket 2669 2670 2671 2672 U73 U74 U75 U76 2677 2678 2679 2680 2681 2682 2683 2684 2685 edit .........•.......•..• IPROC edit (INT CaNST von, bis, start, TEXT CONST res, I PROC (TEXT CONST) kommando interpreter) : I disable stop; I IF von ( bis I THEN edit (von+1, bis, start, res, PROC (TEXT CONST) kOmm&ndo I interpreter) ; I IF II1&X used editor ( von THEN LEAVE edit FI; I open editor (von) I ELSE open editor (start) I FI; I absatz ausgleich : = 2; I bildeditor (res, PROC (TEXT CONST) komma.ndo interpreter); I cursor (1, schirmhoehe); I I I 2686 2687 2688 2689 lIarnung ausgeben : l o u t (clear eop); out ("WARNUNG: Lernmodus nicht I ausgeschaltet"13""10"") lEND PROC edit; U~ I 2691 U92 U93 U94 2695 2696 2697 2698 2699 2700 2701 2702 2703 + 27E14 27E15 2706 27E17 27E18 27E19 271E1 2711 2712 2713 2714 2715 2716 2717 2718 2719 272E1 21/55 lIarnungausgeben I I I I I IF is error THEN komma.ndo zeiger : = 1; komma.ndo :. ""; quit FI IF lernmodus CAND actual ed1 tor = 0 THEN lIarnung ausgaben FI (*sh*) date1zustandholen ........ PROC d&teizustand holen : modify (file); get tabs (file, tabula tor) ; zeilennr und fliesstext und letzter editor aus editinfo decod1.eren; limit : = II1&X line length (file); stelle : = col (file); markiert : = mark (file); IF markiert THEN markierung holen ELSE keine markierung FI ; satz nr : = lineno (file); IF zeilennr) &ktuelle bildlaenge (*sh*) THEN zeilennr :. min (satznr, aktuelle blldlaenge); bild neu ELIF zeilennr ) satznr THEN zeilennr := min (satznr, aktuelle blldl&enge) FI ; zeilennr := II1&X (zeilennr, 1); bildanfang : = satz nr - zellennr + 1 . zeilennrundfliesstextu Izeilennr und fliesstext I zeilennr: = edit info I IF I THEN I I I I I I ELIF THEN ELSE I und letzter editor aus edi tinfo decodieren (file); zeilennr = e zeilennr := 1; fliesstext : = std fliesstext zeilennr ) EI fliesstext : = TRUE zeilennr : = - zeilennr; fliesstext : = FALSE FI; letzer editor auf dieser datei . = zellennr DIV 256; editor paket Zeile E LAN markierungholen 2733 2734 2735 2736 2737 2738 keinemarkierung 2746 2747 2748 2749 ~~ 2751 2752 2753 2754 2755 2756 2757 •••• 10.11.86 edi tor paket zeilennr: = zeilennr MOD 256 . I I 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2745 1.8 I 2721 2722 2739 2740 2741 2742 2743 2744 EUMEL lmarkierung holen I bildmarke: = mark lineno (file); I feldmarke: = mark col (file); I IF line no (file) <= bildmarke I THEN to line (file, bildmarke); I marke : = feldmarke; I stelle := max (stelle, feldmarke) I ELSE marke . - 1 I FI. I I Ikeine markierung : I bildmarke: = 0; I feldmarke: = 0; I marke := 0 . lEND PROC dateizustand holen; I date1zustandretten ....... PROC date1zustand retten : put tabs (file, tabulator); IF fliesstext THEN edi tinfo (file, zeilennr + actual editor • 256) ELSE edit info (file, - (zellennr + actual editor. 256» FI ; ma.x line length (file, 11m1 t); col (file, stelle); IF markiert THEN mark (file, bildmarke, feldmarke) ELSE mark (file, 0, 0) TI lEND PROC dateizustand retten; I openeditor ............... IPROC open editor (FILE CONST new file, BOOL CONST access) I disable stop; quit last; I neue bildparameter bestimmen; I open editor (actual editor + 1, new file, access, x, y, x len, y I len). I I 2758 2759 2760 2761 2762 2763 2764 neuebildparameterbesti Ineue bildparameter bestimmen : I INT VAR x, y, x len, y len; I IF actual editor ) 0 I THEN tellblld des aktuellen editors I ELSE valles bild I TI. 2765 2766 2767 teilbilddesaktuellened I teilblld des aktuellen editors : I get editcursor (x, y); bildgroesse bestimmen; I IF fenster zu schmal I (.sh.) I THEN enable stop; errorstop ("Fenster zu klein") I ELIF fenster zu kurz I THEN verkuerztes altes bild nehmen I FI. + 2768 2769 2770 2771 2772 21/56 I I I editor paket 21/56 Zeile E LAN 2773 2774 2775 2776 bildgroessebestimmen 2777 fensterzuschma.l EUME!. 1.8 **** 10.11.86 **** edl tor paket Ibildgroesse bestimmen : I x len .' rand + feldl&enge - x + 3; I y len : = bildrand + bUdlaenge - y + 1 . I I I fenster zu schma.l I fensterzukurz 2780 2781 2782 verkuerztesaltesbildne Iverkuerztes altes bild nehmen : I x: = rand + 1; y : = bildrand + 1; I IF fenster zu kurz THEN enable stop; errors top ("Fenster zu I klein") FI; I x len :. feldlaenge + 2; I y len : = bildlaenge; I kurze fe ldlaenge : = 0; I kurze bildlaenge := 1 . + 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 vollesbild Ivolles bUd : I x: = 1; y : = 1; x len : = schlrmbrei te; y len . - schlrmhoehe . IEND PROC open edi tor; openedi tor ............... IPROC open edi tor (INT CONST edi tor nr, I FILE CONST new file, BOOL CONST access, I INT CONST x start, y, x len start, y len) I INT VAH x := x start, I x len := x len start; I IF editor nr ) max edltor I THEN errors top ("zu vlele Edltor-Fenster") I ElIF editor nr ) max used editor + 1 OR editor nr < 1 I THEN errorstop ("Editor nicht eroeffnet") I ElIF fenster ungue ltig I THEN errorstop ("Fenster ungueltlg") I ELSE neuen editor stacken I FI. fensterungueltig 2809 2810 21/57 I I I 2808 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 1 I I 2805 2806 2807 y ) schirmhoehe 17 2778 2779 2783 2784 2785 2786 2787 Ifenster zu kurz x) schirmbrei te I I I fenster ungueltig I x < 1 COR X) schirmbre1te COR y < 1 COR y) schirmhoehe COR I x len - 2 < = 15 COR Y len - 1 < 1 COR I x + x len - 1 ) schirmbrei te COR y + y len - 1 ) schirmhoehe I I neuenedl torstacken Ineuen editor stacken I disable stop; I IF actual editor ) 0 AND 1st elnschraenkung des &1ten bildes I THEN dateizust&nd holen; I aktuelles edi torbild elnschraenken; I arbei tspunkt in das restbild posi tlonleren; I abgrenzung beruecks1cht1gen I FI; I aktuellen zust&nd retten; I neuen zust&nd setzen; I neues edi torbild zeigen; I actual ed1 tor : = edl tor nr; I IF actual editor ) max used edt tor I THEN max used edl tor : = actual edt tor I FI. edi tor paket 21/57 Zeile E LAN EUMEL 10.11.86 edi tor pa.l rand CAND x + x len rand + feldlaenge + 3 CAND I y > bildrand CAND y + y len • bildrand + bildlaenge + 1 . I I I&ktuelles 2830 2831 2832 2833 •••• I 2826 2827 2828 2829 1.8 &ktuelleseditorbildein I I I I 2834 edi torbild einschraenken : kurze feldlaenge : = x rand - 3; kurze bildlaenge : = y - bildrand - 1 . 2835 2836 2837 2838 2839 2840 2841 2842 arbei tspunktindasrestb Iarbeitspunkt in das restbild posi tionieren : I IF stelle > 3 I THEN stelle DEeR 3; alte stelle := stelle I ELSE WHILE zeilennr > 1 AND zeilennr > kurze bildlaenge REP I vorgae nger I PER; old lineno := satznr I FI. 2843 2844 2845 2846 2847 2848 2849 abgrenzungberuecksicht labgrenzung beruecksichtigen I IF x-rand>l I THEN balken malen; 2850 balken~alen I I I I I I I x INCR 2; x len DEeR 2 FI. lbalken malen VAR i; i FROM 0 UPrO y len-1 REP I cursor (x, y+i); out (kloetzchen) I (.sh*) I INT I FOR 2851 2852 2853 + 2854 2855 I PER. I I kloetzchen 2858 2859 &ktuellenzustandretten l&ktuellen zustand retten : I IF actual edi tor ) 0 I THEN dateizustand retten; I editst&ck (actual editor).feldstatus .= feldstatus; I editstack (actual editor) .bUdstatus := bildstatus; I einrueckstack (actual editor) := alte einrueckposition I FI. 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 21/58 Ikloetzchen IF mark size> 0 THEN ftft15 ftft14ftW ELSE wW15 w "14" WFI . 2856 2857 I I neuenzustandsetzen I I Ineuen I I I I I I I I I I I zustand setzen : FRANGE VAR frange; feldstatus:= FELDSTATUS (1, 1, x-1, 0, 1,0, x len-2, 0, FALSE, TRUE, access, ""); bildsta tus : = BILDSTATUS (x len-2, x len-2, y, y len-1, y len-1, ueberschr1ft, bUd, 0, 0, 1, 0, 0, FALSE, FALSE, "ft, "ft, "M, "M, "M, frange, new file); al te einrueckposition : = 1; dateizustand holen; ueberscbrift initialisieren editor pa.l end of file THEN FAUlE I ELIF 81 • "u" THEN perhaps sImple up I ELIF sl = "D" THEN perhaps simple down I ElSE FAUlE I FI I ElSE FAUlE I Fl. I I lperhaps simple up I IF t2. string THEN up (s2); TRUE I ELIF t2 • integer THEN up (int (s2»; TRUE I ELSE FAUlE I Fl. I I Iperhaps simple down I IF t2 = string THEN down (52); TRUE I ELIF t2 • integer THEN down (int (52»; TRUE I ELSE FAUlE I Fl. I I Iperhaps simple change to : I IF t1 = string AND s2 • "c" AND t3 is string I THEN s1 C s3; TRUE I ELSE FAUlE I Fl. I I It3 is strIng : I next symbol (93, t3); I t3 = string . edi tor functions AND t4 is eof 22/3 Zeile -- ELAN 168 169 1713 171 t4iseof 172 173 174 175 176 177 178 + 179 leG 181 182 + 183 184 185 186 187 188 189 + 190 191 192 193 + 194 195 196 197 198 199 200 2131 202 203 204 205 206 207 208 209 218 211 212 213 22/4 EUMEL 1.8 ....... 113.11.86 .. - .. edi tor functions I I I t4 is eof : I TEXT VAR s4; INT VAR t4; I next symbol (s4, t4); I t4 = end of file . lEND PROC std kommando interpreter; I I edit ..................... IPROC edit (FILE VAR f) : I enable stop; I IF &ktueller editor ) 13 (.wk.) I THEN ueberschrlft neu I I FI ; I open editor (f, write acc); I edit (groesster editor, std res, PROC(TEXT CONST) std kOlllll&ndo I interpreter) lEND PROC edit; I I edit ..................... IPROC edit (FILE VAR f, INT COIIST x, y, x size, y size) : I enable stop; I open editor (groesster editor + 1, f, write &cc, x, y, X size, y I size); I edit (groesster editor, std res, PROC(TEXT CONST) std kommando I interpreter) IEND PROC edit; I I edit ...............•..... IPROC edit (FILE VAR f, TEXT CONST res, PROC (TEXT CONST) kdo I interpreter): I enable stop; I open editor (f, write acc); I edit (groesster editor, res, PROC(TEXT COIIST) kdo interpreter) lEND PROC edit; I I edit ..................... IPROC edit : I IF &ktueller editor ) 13 I THEN d&teiname einlesen; I edit (d&teiname) I EI.SE edit (last p&ram) I FI. d&teinameeinlesen I I Idateiname einlesen I INT VAR x, y; get edi tcursor (x, y); I IF x ( x size - 17 I I I I I (.sh.. ) THEN cursor (x, y); out (""15"D& teiname: "14"") ; (x size-14-x) TIMESOUT " "; (x size-14-x) TIMESOUT U8""; edi tor functions 22/4 Zeile E LAN EUMEL 214 215 216 217 218 219 22@ 221 222 trailingblanksentt'erne 223 224 225 226 227 + 228 229 quotesentfernen 236 237 240 241 + 242 + 243 244 245 246 247 248 249 250 251 252 + 253 254 255 256 257 258 259 26e 22/5 edi tor functions I TEXT VAR dateinllJl1e : = std; I editget (dateiname); I trailing blanks entt'ernen; I quotes entfernen I ELSE errors top ("Fenster zu klein") I Fl. I I I trailing blanks entfernen: I INT VAR i :. LENGTH dateinllJl1e; I WHILE (dateiname SUB i) • " " REP i DECR 1 PER; I dateinllJl1e:= subtext (dateiname, 1, i) . I I Iquotes entfernen I IF (dateinllJl1e SUB 1) = """" AND (dateiname SUB LENGTH dateiname) I I THEN dateiname := subtext (dateiname, 2, LENGTH dateiname - 1) I Fl. edi t ..................... IPROC edit (TEXT CONST filename) : I IF filename <) "" I THEN edit named file I ELSE errors top ("Name unguel tig") I FI. 238 239 10.11.86 I I 231 232 235 **** lEND PROC edit; 230 233 234 1.8 edi tnamedfile I I Iedit named file I last param (filename); I IF exists (filenllJl1e) COR yes ("" .... + filename + """ neu einrichten") THEN IF aktueller editor ) 0 THEN ueberschrift neu FI; I (*sh*) I FILE VAR f := sequential file (modify, filename); I headline (f, filename); edit (f); last param (filename) I ELSE errors top ("") I Fl. IEND PROC edit; I I I I edit •....•.•.......•..••• IPROC edit (TEXT CONST filenllJl1e, INT CONST x, y, x Size, y size) I last param (filenllJl1e); I IF exists (filename) COR yes (" .. "W + filename + "w .. neu I einrichten") I THEN FILE VAR f := sequential file (modify, filename); I headline (f, filename); edit (f, x, y. x size, y size); I last param (filename) I ELSE errors top ( .... ) I FI lEND PROC edit; I I edi tor functions 22/5 Zeile 261 262 263 264 265 266 267 268 269 + 278 271 272 273 + 274 275 276 277 278 279 2&'l 281 282 283 284 285 286 287 - E LAN EUMEL 1.8.... 18.11.86 edit ..................... IPROC edit (INT CONST i) : I edit (i, std res, PROC (TEXT CONST) std kolllll&lldo interpreter) lEND PROC edit; I I shOll ..................... IPROC shOll (FILE YAH f) : I ell&ble stop; I open edi tor (f, read acc); I edlt(groesster edltor, std res, PROC(TEXT CONST) std kolllll&lldo I lnterpreter); IEND PROC sholl; I I shOll ..................... IPROC shOll (TEXT CONST filename) I (*sh.) I last param (filename); I IF exlsts (filename) I THEN FlLE YAH f := sequential file (modify, filename); I shOll (f); last pe.ram (filename) I ELSE errors top ("""" + filename + """ gibt es nicht") I FI lEND PROC shOll; I I sholl ..................... IPROC shOll : I shOll (last param) IEND PROC sholl; I I 299 IDATASPACE YAH local space; I INT YAH zeilenoffset; ITEXT YAH kopierzeile; 291 292 I I 288 289 293 294 295 PUT ...................... lOP PUT (TEXT CONST filename) : I nichts neu; I 296 I m I I I 298 299 3ge 381 302 303 + 394 385 3e6 397 308 3e9 318 22/6 edl tor functions IF mark THEN markierten bereich 1n date1 schrelben Fl. mark1ertenberelch1ndat Imark1erten bereich 1n datel schrelben I disable etop; I zleldate1 vorberelten; I quelldatel oeffnen; I IF noch genuegend platz in der zleldatei I (*sh*) I TIIEN zeilenwelse kopieren I ELSE errorstop ("FlLE-Ueberlauf") I FI; I quelldatei schl1essen; I zieldatel schl1essen; I set busy lndlcator . I ed1tor functions 22/6 Zaile 311 312 313 314 315 316 317 318 319 - ELAN EUMEL zield&teivorbereiten + 320 321 322 323 324 325 326 327 328 I I I I I I 329 33e zeilenweisekopieren I I 336 quelld&teischliessen 35El 351 352 353 3:)4 3:)5 3:)6 3:)7 3:)8 3:)9 zleld&telschliessen 22/7 quelld&tei oeffnen : zeilenoffset:. m&rk line no (edfile) - 1; INT CONST old line :. line no, old col :. col; FRANGE VAH g&nZe d&tei; set r&nge (edfile, m&rk lineno (edfile), III&l'k col (edfile), d&tei); input (edfile) • zeilenwelse kopieren en&ble stop; satznr nau; INT VAH zeile; roll zeile FROM 1 UPl'O lines (edfile) REP getline (edfile, kopierzeile); putline (destin&tion, kopierzeile); s&tznr ze 1gen PD! • 344 345 346 347 348 349 360 editor functions nochgenuegendpl&tzinde Inoch genuegend pl&tz in der zield&tel : I lines + groesse der zield&tei ( file slze 337 338 339 Me 341 342 343 361 18.11.86 I I 333 334 335 -* IZield&tel vorbereiten : I FRANGE VAH g&nze zield&tei; IF exists (filen&me) TIIDI forget (filell&llle); ueberschrift neu rI; FILE VAH destin&tion; IF filen&me'·· TIIDI forget (100&1 spe.ce); 100&1 spe.ce :. nilspe.ce; destin&tion :. sequenti&l flle (output, lae&l spe.ce) ELSE destln&tion :. sequenti&l file (modlfy, fllell&llle) ; INT CONST groesse der zield&tei: • lines (destin&tion); (*sh*) set m&rked r&nge (destin&tion, g&nZII zield&tei) ; output (destin&tlon) FI . quelld&teioeffnen + 331 332 1.8 quelld&tei schliessen : I modify (edfUe); I set r&nge (edfUe, g&nze d&tei); I to line (old line); I col (old col) . I I I zleld&tei schliessen : I IF filen&me <) •• I TIIDI INT CONST l&st line wrltten :. line no (destin&tion) I modify (dastin&tion) ; I to lina (destin&tlon, l&st line written) I col (destin&tlon, Ian (dastin&tion) + 1) I bild neu (destin&tion) ; I set r&nge (destln&tlon, g&nZII zield&tei) I Fl. IEND OP ror; I I editor functions 22/7 g&nZII Zeile E LAN EUMEL 1.8 **** 10.11.86 **** 362 363 364 365 366 P ........................ IOP P (TEXT CONST filename) I PUT filename lEND OP P 367 GET..................... edi tor functions I I + 368 369 370 371 OP GET (TEXT CONST filename) (*sh*) IF Nor write permission THEN errorstop (·Schreibversuch auf 'show' -Jl&tei·) FI; quelldatei oeffnen; IF nicht mehr genuegend platz 1m edltfl1e THEN quelldatei schliessen; errorstop (·FlLE-Ueberlauf·) 372 373 374 375 376 FI; disable stop; zieldatei oeffnen; zeilenwelse kopieren zleldatei schliessen; quelldatei schliessen; set busy lndicator . 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 22/6 Iquelldatei oeffnen : I FILE VAR source; I FRANGE VAR ganze quelldatei; filename = I IF I THEN source : = sequential file (input, local sp&Oe) I ELSE IF Nor exists (filename) THEN errors top (.... + filename + ••• gibt es nicht·) I FI; I source : - sequential file (modify, filell&lll8); I INT CONST old line : = line no (source), I old col :. col (source); I set marked range (source, ganze quelldatei); I input (source) I I FI . I I nichtmehrgenuegendplat Inicht mehr genuegend platz im edi tfUe : I lines (source) + lines ). file siZe. I I Izeilenweise kopieren zeilenweisekopieren I enable stop; I satznr neu; I INT VAR zeile; I FOR zeile FROM 1 UPTO lines (source) REP getline (source, kopierzeile) ; I putline (edfile, kopierzeile) ; I satznr zeigen I I PER . I I Izleldatei oeffnen : zieldateioeffnen I zeilenoffset :. line no - 1; I leere datel in edi tfile einsch&cht8ln; I output (edfile) I quelldateioeffnen .. editor functions 22/8 Zeile 415 416 417 418 419 E LAN EUMEL quelld&teischliessen 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 --- 10.11.86 edi tor functions leered&teiinedi tfileei Ileere datei in edi tfile einsch&chteln I INT CONST range sta.rt col : = col; I FRANGE VAH ganze d&tei; I set range (edfile, line no, col, ganze d&tel); I IF lines = 1 THEN delete record (edfUe) FI . 42El 421 422 423 424 1.8 zield&telschliessen I I Iquelld&tei schliessen : I IF filename <) ftft I THEN modify (source); I se t range (source, ganze que lld&te 1) ; I to line (source, old line); I col (source, old col) I Fl. I I Izieldatei schliessen I modify (edfile); I to line (lines); I col (range sta.rt col); I set range (edfile, ganze d& tel) ; I abschnitt neu (zeUenoffset + 1, lines) • IEND OP GET; I I G ........................ lOP G (TEXT CONST fUename) I GET fUename lEND OP G; I I 443 444 445 446 447 len ...................... I INT PROC len : I len (edfile) IEND PROC len; 448 449 450 col ...•.................. IPROC col (INT CONST stelle) : I nichts neu; col (edfile, stelle) lEND PROC col; 451 452 453 454 455 e6 457 458 459 460 461 462 22/9 I I I I col ...................... lINT PROC col : I col (edfile) lEND PROC col; I I liml t .................... IPROC limit (INT CONST lim1 t) : I nichts neu; max line length (edfUe, limit) IEND PROC lim1 t ; I I editor functlons 22/9 Zeile E LAN EUMEL 1.8 •••• 10.11.86 463 464 465 466 %7 limi t .................... I INT PROC limit: I max line length (eMile) lEND PROC limit; 468 469 470 471 472 lines .................... lINT moc lines : I lines (edfile) IEND moc lines; 473 474 475 lineno ................... lINT moc line no : I line no (edfile) IEND moc line no; I I I I I I "6 "7 478 479 480 481 482 483 484 485 486 487 488 489 toline ................... IPROC to li ne (INT CaNST s&tz nr) I satznr neu; I edfile := editfile; I IF S&tz nr ) lines I THEN toline (edfile. lines); col I ELSE to line (edfile. S&tz nr) I FI lEND PROC to line; T •••.•.•••••••..••..••••• IOP T (INT CONST S&tz nr) I to line (S&tz nr) lEND OP T; 491 492 I I 493 494 495 496 497 down ..................... IPROC down (INT CaNST &nz) : I nichts neu; down (edfile. &nz) IEND moc down; 498 499 500 501 D •••••••.•••••••••.•••••• lOP D (INT CaNST &nz) 503 ~4 ~5 506 ~7 22/10 (len + 1) I I 490 ~2 edi tor functions I I I down (&nz) lEND OP D; I I up ....................... IPROC up (INT CONST &nz) : I nichts neu; up (edflle. &lIZ) IEND PROC up; I I edi tor functions 22/10 Zeile E LAN 508 509 510 511 U ••.•..••...•.•....•••... EUMEL 1.8 •••• 10.11.86 edi tor functions loP U (INT DONST anz) up (anz) lEND OP U; I I I M2 513 514 515 516 517 518 519 52E1 521 522 523 524 down ...•..•••...•..•••..• IPRoo down (TEXT CaNST muster) ; I nichts neu; I REP I down (muster, schri tt - line no MOD schri ttl ; I IF pattern found I THEN LEAVE down I ELSE satznr zeigen FI I I UNTIL eof PER IEND PROG down; 525 526 527 528 529 D ••••••••••.••••••••••••• 53E> 531 532 533 534 down ..................... IPROC down (TEXT CaNST muster, INT DONST anz) I nichts neu; down (edfile, muster, anz) lEND PROC down; 535 536 537 up ....................... IPROC up (TEXT CaNST muster) ; I nichts neu; I REP I up (muster, (line no - 1) MOD schritt + 1); I IF pattern found I THEN LEAVE up I ELSE satznr zeigen I FI I UNTIL li ne no • 1 PER IEND PROC up; 538 539 540 541 542 543 544 545 546 I I Iop D (TEXT DONST muster) down (mustor) lEND OP D; I I I I I I I 547 548 549 550 551 U .•.•••.....•.•••..••••.. IOP U (TEXT CaNST muster) I up (muster) lEND OP U; 552 553 554 555 556 up ...............•....... lpROO up (TEXT DONST muster, INT DONST anz) I nichts neu; up (edfile, muster, anz) lEND PRoo up; 22/11 I I I I edi tor functions 22/11 Zaile 557 558 559 560 561 562 563 564 E LAN EUMEL **- 1. 8 1@.11.86 edi tor functlons downety .............•.... IPROC downety (TEXT CONST muster) I nlchts neu; I IF N = " " I THEN textline CAT cha.r I out (".") I ELSE out (bell) I FI I PER. I 2 I I Idelete la.st cha.r : I IF LENOn! textline = 0 I THEN out (bell) I ELSE out (ba.ck bla.nk ba.ck) I delete cha.r (textline, LENGn! textline) I Fl. I I Iget line little secret : I cursor to sta.rt position ; I editget (textline, "", "", exit cha.r) . I I I std tra.nsput 23/5 Zeile 258 259 26(;) 261 262 263 23/6 ._. ELAN EUMEL 1.8 .**. cursortostartposi tion 10.11.86 *.** std trans put Icursor to start position I cursor (x, Y) • I IENDPROC get secret line ; I IENDPACKET std transput ; std transput 23/6 Zeile 1 2 3 4 5 6 7 8 9 1@ E LAN EUMEL 1.8 •••• I I I list: ITEXT VAR file name, status text; I I list ..................... IPROC list : I I I I I I I I disable stop DATASPACE VAR ds : = nilspace ; FILE VAR list file := sequential f11e (output, ds) headline (list file, "list") ; list (list file) show (list file) forget (ds) I 2@ IENDPROC list 21 I 3@ 34 35 36 37 38 39 4@ 24/1 (- Autor: J.Liedtke .:. (. Stand: 25.82.B:i -' I I 12 13 14 15 16 17 18 19 31 32 33 local manager part 2 localmanagerpart2 ••••-"-IPACKET local manager part 2 DEFINES 11 22 23 24 25 26 27 28 29 1@.11.86 list ..................... IPROC list (FILE VAR 1') I I I I enable stop ; begin list ; putline (f, "") I REP I I I I I I I I I I get list entry (file name, status text) IF file name = "" THEN LEAVE list FI; write (1', status text +" """) write (f, file name) write (1', """") ; line (f) PER. IENDPROC list I IENDPACKET local manager part 2 local manager part 2 24/1 Zelle 1 + 2 3 4 5 6 7 8 9 10 E LAN EUMEL 1.8 **** eumel coder part 1 10.11.86 eUlDBlcoderp&rtl **********IPACKET eumsl coder part 1 (* Autor: U. I Bartling *) I DEFINES run, run again, I insert, I prot, prot off, I check, check on, check off, I warnings, warnings on, warnings off, I I ( 11 help, bulletin, packets .................................................................... + ...... ) 12 + (. 13 E U MEL COD E R *) + 14 (* 15 (* *) + 16 + 17 + 18 + 19 + 20 21 + 22 23 24 25 26 27 28 29 30 31 32 33 34 1(* I 1(* I *) Zur Beschreibung des Coders siehe *) U.Bartllng, J. Liedtke: EUMEL-Coder-Interfe.ce *) 1(* I 1(* I 1(* *) Stand der Dokumentation *) Stand der Implementation 16.04.1986 I 1(* I 1(* I I (*********.....................................****.................................. I ****-) I I (--- Globale Variable ---) I I ITEXT VAR object name; I IFILE VAR bulletin f11e; I lINT VAR hash table pointer, nt link, permanent pointer, param link, I index, mode, word; I 35 IBOOL VAR found, end of pe.re.ms; 36 I 25/1 13.02.1986 eumsl coder part 1 25/1 ZeUe E LAN EUMEL 1.8 •••• 10.11.86 eume 1 coder p&rt 1 (....***.***...***.*•••• * •• ****...****..............**.*****~ ..*.**) + 39 + 1. Interface zum ELAN-Compiler 40 10.04.1986 .) + 1.7.5.4 41 + 42 + (. 43 1 44 + 45 + 46 + 1(· 1 1(. 1 48 1 1 (. 1 51 1 LET + 61 62 63 64 65 79 80 .81 82 83 84 85 .) Lesen aus und Schreiben in Na.mens- bzw. Permanent-Tabelle .) (. o begin of hash table end of hash table begin of permanent table before first pt entry first permanent entry end of permanent table 60 76 77 78 Initialisieren und Beenden des Compilers, ...... ) 53 54 55 56 57 58 59 73 74 75 Kennungen. 1 1 66 67 68 69 70 71 72 und .) 1(····..•..•....••............•..•............•................•....................... 50 52 internen Vercodung von Typen 1 1(· + Tabellen (-grousen), .) 1(· 47 49 .) Beschreibung der 1023 , 22784 22784 22785 32767 wordlength time .) two word length three word length 1 permanent permanent permanent permanent permanent permanent permanent permanent permanent 10000 :20000, p&ram const var proc op type row struct p&ra.m proc p&ra.m proc end marker type field p&r&m ptt limit begin of pt minus ptt limit void int real string bool bool result dat&space row struct (. compile u n d 2 , 3 s380E)0, :30000, 10 , 11 12 o .) o, 10000 = 12784 , e 1 2 3 5 6 7 10 11 86 25/2 eume 1 coder part 1 25/2 run E LAN Zeile I I 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 1.06 107 108 109 110 111 112 113 114 115 116 117 118 119 1~ 121 122 123 124 125 126 127 128 129 138 131 132 133 134 135 136 25/3 EUMEL 1.8 •••• 1(* (. eumel coder part 1 10.11.86 canst 1 var 2 3 proc denoter bold 5 2 TRUE , FALSE FALSE TRUE FALSE ins no ins no 1st sermon no sermon I I I I I I INT I I I lINT I I I I .) .) run agai n mode compile file mode 0 warning message error message 2 4 1 ............... point line CONST permanent packet permanent end := .= -2 -3 VAH run again mod nr .= 0 (_ ••• Start/Ende - ) ..................... IPROC elan (INT CONST mode, FILE VAR source, TEXT CONST line, I INT VAH start module number, BOOL CONST ins, 1st, I ser) : I EXTERNAL 256 IENDPROC elan I I (••••• Hash/Namenstabelle ••••• ) I. I nexthashentry Inext hash entry I hash table pointer INCR word length . I I endofhashtablereached Iend of hash table reached : elan yetanotherntentry I I I Iyet I I rtc, hash table pointer ) end of hash table . another nt entry : nt link . - cdb int (nt link) nt link <) 0 . ; I declareobject ............ IPROG declare object (TEXT CONST name, INT VAH nt link, pt pointer) I EXTERNAL 10031 IENDPROC declare object ; I eumel coder part 1 25/3 E LAN Zeile 137 138 139 140 147 148 149 150 addmultcyclic eumel coder part 1 Ihash I hash code : = 0 ; I FOR index FROM 1 UPI'O LENGTH searched object REP I addmul t cyclic I ENDREP . I I laddmult cyclic: I hash code INCR hash code I IF hash code , end of hash table THEN wrap around FI ; I hash code . - (hash code + code (searched object SUB index)) MOD I 1924 . I I 151 152 153 154 wraparound 155 156 hashcode 157 158 159 160 161 162 163 164 165 166 searchntentry 167 readcurrententry 168 169 170 Iwrap around I hash code DECR end of hash table . I I Ihash code nextprocedure nt link . I I Ise&1'ch nt entry : I found : = FALSE WHILE yet another nt entry REP I read current entry ; I IF object name = sea.rched object I THEN found : = TRUE ; I LEAVE to object I FI I I I I PER Iread current entry : I permanent pointer . - cdb int (nt link + wordlength) I object name : = cdb text (nt link + two word length) IENDPROC to object ; I I I I· I 171 172 173 174 25/4 10.11.86 I I hash 178 179 180 181 182 183 184 185 **** toobject ................. IPROC to object (TEXT CONST sea.rched object) I hash; I search nt entry . 141 142 143 144 145 146 175 176 177 1.8 EUMEL (.*••• Permanent Tabelle ..... ) Inext procedure I permanent pointer :& cdb int (permanent pointer) . I nextptparam .............. IPROC I I I I next pt param : mode : = cdb int (param link) MOD ptt limit; param link INCR wordlength ; IF mode permanent row THEIl skip over permanent row ELIF mode = permanent struct THEN skip over permanent struct I FI; I set end ma.rker if end of list . I eumel coder part 1 25/4 Zeile E LAN 186 187 188 189 skipoverpermanentrow 190 191 192 193 194 195 196 197 skipoverpermanentstruc Iskip over permanent struct 198 199 200 201 ~7 eumel coder part 1 I skip over permanent row : I param link INCR word length I next pt param . I REP I next pt param ; I mode := cdb int (param link) I UNTIL mode = permanent type field PEII I param link INCR word length IENDPROC next pt param ; I setendmarkerifendoflis ... 1PROC set end marker if end of list : I mode := cdb int (param link) ; I end of params : = mode ) = permanent proc op OR mode IENDPROC set end marker if end of list ; I typeofparamproc I Itype I I I of param proc : param link INCR word length get type &nd mode (type) ; mode : = permanent param proc I I 214 215 216 217 218 219 220 221 222 typeofobject 223 224 225 tr&nsl&tetypeifnecess& I tr&nsl&te type if necess&ry : I IF permanent row or struct THEN tr&nsl&te type FI . 226 227 228 tr&nsl&tetype 229 230 231 232 tr&nsl&temodeifnecess& Itr&nsl&te mode if necess&ry : I IF mode permanent param const THEN mode .• const I ELIF mode = permanent param V&r THEN mode : = V&r I Fl. I type of object : I IF mode < 0 THEN type .' 2769 • (32767 • mode) I mode := 0 I EI£E type : = mode MOD ptt limit ; I mode DECR type I tr&nsl&te type if necess&ry I tr&nsl&te mode if necess&ry I Fl. I I I I I tr&nsl&te type : I type . - param link - begin of pt minus ptt limit. I I I I 233 25/5 0 gettype&ndmode ........... IPROC get type &nd mode (INT VAR type) : I mode : = cdb int (param link) ; I IF mode = permanent param proc THEN type of param proc I EI£E type of object I FI . 210 211 212 213 234 235 236 <= I 208 ~9 10.11.86 I I ~2 ~3 ~4 ~5 ~6 1.8 - - EllMEL permanentroworstruct Ipermanent row or struct : I type • permanent row OR type • permanent struct IENDPROC get type &nd mode ; eumel coder part 1 25/0 ZeUe E LAN EUMEL 1.8 •••• 10.11.86 237 238 239 240 eumel coder part 1 ( ..... Allgemeine Zugriffsprozeduren *****) 241 242 243 244 cdbint ................... I IN! PROC cdb int (IN! CONST index) 245 246 247 248 cdbtext .................. ITEXT PROC cdb text (IN! CONST index) I EXTERNAL 117 IENDPROC cdb text 25/6 I EXTERNAL 116 IENDPROC cdb int I I eumel coder part 1 25/6 leile E LAN EllMEL 1.8 **** 10.11.86 eumel coder part 1 (**. . . . . . . . . . ** •••••••• ** ••••••••****.........................****~ 250 ...... ) 251 252 10. Inspector 16.04.1986 .) 253 .) ( 254 ................................................................... . + 255 256 257 258 259 260 261 262 263 264 265 266 267 lINT I 280 VAR line number, pattern length, packet link, begin of packet, last packet entry, indentation; ITEXT VAR bulletin name, type and mode, pattern, buffer; I IDATASPACE VAR bulletin ds :: nilspace ; I I . packet I name : cdb text (cdb int(packet link + wordlength) + two word length) • I I . wi thin editor : I aktueller editor ) 0 . 269 270 281 282 283 ) I 268 271 272 273 274 275 276 277 278 279 ....... I nameoftype .........••..•. IPROC I I I I I I I I I I I I 284 285 286 287 288 complextype 289 290 291 292 293 294 295 296 perhapspermanentstruct name of type (INT CONST type) SELECT type OF CASE void CASE int type and mode CAT "INT" CASE real type and mode CAT "REAL" CASE string type and mode CAT "TEXT" CASE baal, baol result type and mode CAT "BOOL" CASE dataspace type and mode CAT "DATASPACE" CASE row type and mode CAT "ROW " CASE struct type and mode CAT "STRUCT" OTHERWISE complex type ENDSELECT I Icomplex type I IF type ) ptt limit THEN perhaps permanent struct or row I ELSE get complex type I Fl. I I Iperhaps permanent struct or row : I index : = type + begin of pt minus ptt limit ; I mode : = cdb int (index) MOD ptt limit; I IF mode permanent row THEN get permanent row I ELIF mode = permanent struct THEN get permanent struct I I ELSE type and mode CAT "-' FI . I I 297 298 299 300 301 25/7 getcomplextype Iget complex type : I index : = type + begin of permanent table ; I IF is complex type THEN get name I ELSE type and mode CAT "-' I FI eume 1 coder part 1 25/7 Zeile E LAN 1.8 iscomplextype I is ~4 I ~5 I I ~6 getname ~7 308 ~9 ..... 10.11.86 eumel coder part 1 I I ~2 ~3 EUMEL l1nktotypename 310 complex type : permanent type definition mode Iget name : I type and mode CAT cdb text (link to type name + two word I length) I I llink to type name : I cdb int (index + three word length) I I 311 312 313 314 permanenttypedefini tio Ipermanent type definition mode : I cdb int (index + wordlength) 315 getpermanentrow I I 316 317 318 319 320 321 322 ~3 324 permanent type . getpermanentstruct Iget permanent row : INT VAR t; I type and mode CAT "ROW " ; I type and mode CAT text (cdb int (index + wordlength» type and mode CAT " " I I param link : = index + two word length ; I get type and mode (t) I name of type (t) I I I 326 Iget permanent struct : I type and mode CAT "STRUCT ( ••. )" IENDPROC name of type ; 327 I 325 328 329 help ..................... IPROG help (TEXT CONST proc name) I prep bulletin ; ~ I ~p~~; 331 332 333 334 335 336 337 I I I I I scan (object name) next symbol (pattern) pa.cket link : = end of permanent table IF function 0 THEN standard help ELSE asterisk help Fl. 338 339 340 341 342 343 344 345 346 347 348 349 I prephelp I I Iprep I I I I I I I I I I I 350 I 351 352 353 I I 25/8 I help object name : = compress (proc name) INT VAR function :: 0 ; INT CONST 1 :: LENGTH object name ; IF 1 ) 1 AND object name <) " • • " THEN IF (object name SUB 1) • "." THEN function INCH 2 ; delete char (object name, 1) FI ; IF (object name SUB 1) • "." THEN function INCH 1 ; de lete char (object name, 1) FI; IF another asterisk THEN wrong function FI Flo eumel coder part 1 25/8 Zeile E LAN 354 355 356 anotherasterisk 357 wrongfunction EUMEL 1.8 •••• eumel coder part 1 Ianother asterisk : I pos (object name. ".") <> 0 . I I Iwrong function : I errors top ("unzulaessige Sternfunktion") . 358 I 359 360 361 362 363 10.11.86 I standardhelp Istandard help I to object (pattern) I IF found THEN display I ELSE error stop ("unbekannt: " + proc name) I I I 364 365 Fl. 366 367 368 369 370 371 372 373 d1splay 374 375 376 377 378 379 putnameofpacketifneces Iput name of packet if necessary : I IF new packet THEN packet link : = permanent po1nter I find beg1n of packet I wr1teline (2) ; I wri te packet name I FI • 381 382 383 384 385 f1ndbeg1nofpacket 386 387 beg1nofpacketfound 394 399 400 401 402 403 404 405 406 25/9 show bulletin file I I Ifind beg1n of packet REP I packet link DEeR word length I UNTIL begin of packet found PER I I lbegin of packet found I cdb 1nt (packet link) • permanent packet . I I newpacket Inew packet permanent pointer < packet link . I I 391 395 396 397 398 ENDREP ; I I 388 392 393 I I I 380 389 390 Id1splay I WHILE permanent pointer < > 0 REP I put name of packet i f necessary I put specificat10ns (pattern) ; I next procedure asteriskhelp I Iaster1sk I I I I I I I help : hash table pointer .- begin of hash table pattern length : = LENGTH pattern - 1 ; REP list all objects in current hash table chain next hash entry UNTIL end of hash table reached ENDREP show bullet1n fH.. . I I listallobjectsincurren llist all objects in current hash table chain I nt l1nk := hash table pointer; I WHILE yet another nt entry REP I permanent pointer : = cdb 1nt (nt link + wordlength) I object name : = cdb text (nt link + two word length) I IF matching THEN into bullet1n FI eumel coder part 1 25/9 ZeUe E LAN 407 408 409 410 411 412 EUMEL 1.8 1 * ..* 10.11.86 eume 1 coder part 1 PER • 1 matching 413 1 1matching 1 1NT CONST P :: pos (object name, pa.ttern) ; 1 1 SELECT function OF CASE 1: p <) 0 AND P = LENGTH object name - pa.ttern 1 1 length CASE2: p=l CASE3: po0 OTHERWISE FALSE ENDSELECT . 414 I 415 416 417 1 1 1 1 418 1nto bulletin 419 420 421 1 into bulletin 1 object names 1nto bulletin (BOOL PROC not end of chain) 1ENDPROC help 1 422 423 424 425 notendofcha1n ............ 1 BOOL PROG not end of chain : 1 permanent pointer <) 0 1ENDPROG not end of chain 426 427 428 429 430 431 432 433 434 435 436 writepa.cketname .......... IPROC write pa.cket name : 1 indenution : = 0 ; 1 wri te line ; 1 wri te bulletin line ('PACKET ") 1 indentation :. 7 ; 1 object name : = packet name ; 1 wri te bullet1n line (obJect name) 1 write bulletin line (":") 1 writeline (2) 1ENDPROC wr1 te packet name 1 437 438 439 440 441 442 putspecifications ........ 1PROG put specifications (TEXT CONST proc name) 1 put obj name (proc name) ; 1 to first param ; 1 IF NOT end of pa.rams THEN put param list FI 1 put result ; 1 wri tel1ne . 1 «3 1 1 444 445 446 447 448 449 450 451 452 453 454 455 456 25/10 tofirstparam 1to 1 1 first param : param link : = permanent pointer + word length set end marker if end of list . 1 putresult 1 1put result I INT VAP. type; 1 get type and mode (type) ; 1 IF type () void THEN type and mode . =" --)"; 1 name of type (type) 1 write bulletin line (type and mode) 1 FI IENDPROC put specifications; 1 eumel coder part 1 25/10 Zeile 457 458 459 460 461 462 463 464 465 466 467 ~ 469 470 471 472 473 474 475 476 E LAN EllMEL puttypeandmode nameofmode 484 485 maybeparamproc 486 putvirtualparams 4~ 491 492 493 skipoverresulttypeifco 494 495 496 497 endofvlrtualparams 498 504 25/11 put type and mode : type and mode : = "" • I name of type (type) ; I type and mode CAT name of mode ; I write bulletin line (type and mode) I I Iname I I of mode : IF param mode ELIF param mode canst THEN " CONST" var THEN" VAR" ELSE " FROC" I I IT . I I Imaybe param proc : I IF mode = permanent param proc THEN put virtual params I I Iput virtual params : I skip over result type if complex type ; I IF Nerr end of virtual params THEN put param list FI. I I Iskip over result type if complex type I next pt param . I I IT . lend of virtual params : of params put param list ; I end IENDPROC I next packet ............... IPRo:: next packet : I REP I packet link I word : = cdb I IF word = I ELIF end of I FI 505 506 507 508 509 eumel coder part 1 10.11.86 I 478 479 480 481 482 483 499 500 501 502 503 **** putparamlist ............. PROC put param list write bulletin line (" (") ; REP TNT VAR type. param mode; get type and mode (type) param mode : = mode ; pu t type and mode ; maybe param proc next pt param ; IF end of params THEN write bulletin line (")") LEAVE put param list IT; write bulletin line (". ") ; PER • ~7 487 488 489 1.8 truereturn I I I I true I I INCR word length ; int (packet link) permanent packet THEN true return permanents THEN false return ENDREP . return : found : = TRUE ; LEAVE next packet eumel coder part 1 25/11 Zeile E LAN EUMEL 510 1.8 **** 10.11. 86 eumel coder part 1 / / 511 512 513 514 falsereturn 515 516 517 518 endofpermanents / false return : found : = FALSE / LEAVE next packet / / / lend of permanents : word = permanent end OR packet link ) end of permanent table / /ENDPROC next packe t ; / 519 520 521 522 523 524 525 526 prepbulletin ............. / PROC prep bulletin : / forget (bulletin ds) / bulletin ds : = nilspace / bulletin file : = sequential file (output. bulletin ds) / line number : = 0 / buffer : = "" / ENDPROC prep bulletin / 527 528 529 5:30 531 532 533 showbulletinfile ......... / PROC show bulletin file : IF within editor THEN ueberschrift neu FI ; / / DATASPACE VAR loca.l ds :: bulletin ds ; / FILE VAR local file:: sequential file (modify. local ds) / show (local file) ; / forget (loc&1 ds) / ENDPROC show bulletin file 534 / 535 536 537 538 539 wri tebulletinline ........ / PROC write bulletin line (TEXT CONST line) : / IF LENGTH buffer + LENGTH line ) 75 THEN wri teline FI / buffer CAT line / ENDPROC write bulletin line ; / 540 541 542 543 544 545 546 547 writeline ................ /PROC writeline write (bulletin file. buffer) / line (bulletin file) / / line number INCR 1 ; cout (line number) ; / / buffer := indentation * /ENDPROC writeline ; 548 549 550 551 552 553 554 555 556 557 558 writeline ................ / PROC writeline (INT CONST times) : IF LENGTH compress (buffer) <> 0 THEN index : = times - 1 / write line / EISE index :. times / FI; / line (bulletin file. index) / line number INCH index; / indentation : = 0 ; / cout (line number) / /ENDPROC writeline 25/12 / / eumel coder part 1 25/12 E LAN Zeile 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 EUMEL 1.8 bulletin ................. IPROC I I I I I I I I I I topacket 582 583 584 + 585 586 587 588 589 bulletin (TEXT CONST packet name) prep bulletin ; scan (packet name) ; next symbol (pattern) to packet ; IF found THEN list packet show bulletin file ELSE error stop (packet name + " ist kein P&ketname") FI . I I p&eketfound I packet found I IF cdb int (packet link + wordlength) = nt link I THEN last packet entry :. packet link FI . I I return I return I IF last packet entry () I I I 598 FI ; I LEAVE to packet IENDPROC bulletin 599 I 606 6@7 608 609 610 611 25/13 eumel coder part 1 getnametablinkofpacket Iget nametab link of packet name I to object (pattern) ; I IF NOT found THEN error stop ("unbekanntes Paket :" + packet I name) ; LEAVE to packet I FI . I 591 600 601 602 '*>3 604 605 **** I I 590 592 593 594 595 596 597 10.11.86 to packet last packet entry : = 0 ; get name tab link of packet name ; packet link : = before first pt entry REP packet link INCH word length ; word: = cdb int (packet link) IF word ( 0 THEN IF word = permanent packet THEN packet found THEN return ELIF word • permanent end FI FI ENDREP + 577 578 579 580 581 **** listpacket ............... IPROC I I I I o THEN found : = TRUE ; packet link : = last packet entry ELSE found : = FALSE list packet : begin of packet : = packet link + word length wri te packet name ; find end of packet ; run through name tab and list all packet obJects . I I findendofpacket Ifind end of packet I last packet entry : = begin of packet ; I REP I last packet entry INCH wordlength ; I word : = cdb int (last packet entry) I UNTIL end of packet entries PER . eumel coder part 1 2:1/13 Zeile E LAN 1. 6 EllMEL M2 **- 10. 11. 66 eume 1 coder part 1 I I 613 614 615 endotpacketentries Iend 01' packet entries I word = permanent packet OR word 616 617 616 619 620 621 622 623 runthroughnamet&b&ndli Irun through namet&b and list all packet objects I hasht&ble pointer := begin 01' hasht&ble I REP I nt link : = hasht&ble pointer ; I list objects 01' current packet in this chain I next hash entry I UNTIL end 01' hash table reached ENDREP . 624 625 626 627 626 629 listobjectsotcurrentpa llist objects 01' current packet in this chain : I WHILE yet another nt entry REP I permanent pointer : - cdb int (nt link + wordlength) I put objects 01' this name I PER . 630 631 putobjectsofthisname = peranent end . I I I I 632 I I Iput objects 01' this name : I IF there is at least one object I packet I THEN into bulletin FI . ot th1s name 1n the current I I 633 634 635 636 637 636 639 640 641 642 643 thereisatleastoneobjec I there is at least one object of this name in the current packet I REP I IF permanent pointer ) = begin of packet AND I permanent pointer ( Last packet entry I THEN LEAVE there 1s at least one object of this name I 1n the current packet WITH TRUE FI I next procedure I UNTIL permanent pointer = 0 PER ; I FALSE. 644 645 646 647 646 1ntobulletin 649 650 651 652 ~3 654 655 656 657 656 659 660 25/14 I I linto bulletin : I object name : = cdb text (nt link + two word length) ; I object names into bulletin (BOOL PROC within packet) IENDPROC list packet ; I withinpacket ............. IBOOL PROC wi thin packet : I permanent pointer ). begin of packet AND I permanent pointer ( Last packet entry IENDPROC within packet I objectnamesintobulleti ... IPROC I I I I I I object names into bullet1n (BOOL PROC link ok) scan (object name) ; next symbol (object name. mode) ; IF type defin1 t10n THEN put type det1n1 t10n EUlE put object detini tions FI . eumel coder part 1 25/14 Zeile E LAN EUMEL 661 662 663 typedefini tion 664 665 666 nopara.ms 667 668 669 670 671 puttypedefini tion 672 673 674 675 676 677 678 putobjectdefini tions 1.8 **** 10.11.86 eumel coder part 1 Itype definition : I mode = bold AND no params . I I Ino params : I cdb int (permanent pointer + word length) ) = permanent type . I I I put type definition : I put obj name (object name) I write bulletin line ("TYPE ") writeline (1) . I I I Iput object definitions: I WHILE link ok REP I put specifica.tions (object name) next procedure I I ENDREP IENDPROC object names into bulletin I 679 680 681 682 683 684 685 686 687 688 589 bulletin ................. IPROC bulletin: I prep bulletin I packet link : = first permanent entry I REP I list packet ; I write line (4) I next packet I UNTIL NOT found PER I show bulletin file IENDPROC bulletin ; 690 691 692 693 594 695 696 putobjname ............... IPROC I I I I I 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 25/15 I put obj name (TEXT CONST name) buffer := • " ; bulletin name : = point line ; change (bulletin name, 1, end of line or name, name) buffer CAT bulletin name ; indents. tion : = LENGTH buffer + 1 . I I endoflineorname lend of line or name : I min (LENGTH name, LENGTH bulletin name) IENDPROC put obj name ; I packets .................. IPROC I I I I I packets : prep bulletin packet link := first permanent entry REP object name : = packet name put obj name (object name) I wri te line ; I next packet I UNTIL NOT found PER I show bulletin file IENDPROC packets I sume 1 coder part 1 25/15 Zeile 714 E LAN EUMEL 1. 8 eumel coder part 1 ******) 1(* I 716 10 . 11. 86 1(***************************************************************. . *M I 715 **** *) 1(* I 11. ELAN Run-Interface 09.01.1986·) 717 1(* 718 (* Uebersetzen von ELAN-Progranunen 719 (. BereHstellen der Ausgabeprozeduren fuer den ELAN-Compiler *) *) *) 720 *) (******.*******.***********. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... 721 .*.... ) 722 723 724 725 726 727 728 729 730 731 732 733 734 : = FALSE IBOOL VAR list option check option I · - TRUE warning option · - FALSE I listing enabled · - FALSE I I IFILE VAR listing file I ITEXT VAR listing file name := I I 735 736 737 738 739 740 741 742 743 run ...................... IPROG run (TEXT CONST file name) I enable stop ; I IF NOT exists (file name) I THEN errors top ("""" + file name + I FI; I last param (file name) I run elan (file name, no ins) IEND PROG run; 744 745 746 747 run ...................... IPROG run : I run (last param) IENDPROC run ; 748 749 750 751 752 753 754 755 runagain ................. IPROC run again: I IF run again mod nr <) 0 I THEN elan (run again mode, bulletin file, "", run again IIIOd nr, I no ins, no 1st, check option, no sermon) I ELSE errors top ("' run again' nicht moegl1ch") I FI IENDPROC run again; 756 757 758 759 insert ................... IPROC insert (TEXT CONST file name) I enable stop ; I IF NOT exists (file name) I THEN errorstop (""MM + file name + """ gibt es nicht") 25/16 MM" gibt es nicht") I I I eume I coder part 1 25/16 Zeile E LAN --.. 10.11.86 I insert ................... IPROC insert : I insert (last param) IENDPROC insert ; I runelan ••.•......•.•..•.. IFROC run elan (TEXT CONST file name, BOOL CONST insert option) I FILE VAH source : = sequential file (modify, file name) ; I IF listing enabled I THEN open listing file I FI; I I I I I I I I I I I I I I disable stop ; no do again ; elan (compile file mode, source, "" , run again mod nr, insert option, list option, check option, sermon) IF anything noted AND command dialogue THEN ignore halt during compiling note edi t (source) ; last param (file name) ; errorstop ("") Fl. 787 788 789 790 791 792 793 ignorehaltduringcompil lignore halt during compiling I IF is error I THEN put error ; I clear error I pause (5) I Fl. 794 795 796 797 798 799 openlistingfile 800 801 802 803 804 805 + 806 807 808 809 ~ 811 M2 25/17 eume I coder part 1 FI; last par&m (file name) ; run elan (file name, ins) IENDPROC insert 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 1.8 I I I 760 761 762 763 764 765 766 767 EUMEL I I lopen listing file : listing file := sequential file (output, listing file name) III&X line length (listing file, 130) I I I IENDPROC run elan I outtext .................. IPROC out text (TEXT CONST text, INT CONST out type) I INTERNAL 257 ; I IF online I THEN out (text) I FI; I IF out type = error message OR (warning option AND out type = I warning message) I THEN note (text) I FI; I IF listing enabled I THEN write (listing file, text) I FI IENDPROC out text I eumel coder part 1 25/17 Zeile E LAN EUMEL 1.8 **** 10.11.86 eumel coder part 1 813 814 815 816 817 818 819 820 821 822 823 824 825 outlina .................. IPROC out line (INT CONST out type) I INTERNAL 258 ; I IF online I THEN out (~~13~~10~~) I FI; I IF out type = error mess~e I OR (warning option AND out type = warning mess~e) I THEN note line I ELIF listing enabled I THEN line (listing file) I FI IENDPROC out line 826 827 828 829 830 831 prot ..................... IPROC prot (TEXT CONST file na.me) I list option : = TRUE ; I listing file name : = file name I listing en&bled : = TRUE IENDPROC prot 832 833 834 835 8M protoff .................. IPROC prot off : I list option : = FALSE ; I listing an&bled : = FALSE IENDPROC prot off 837 838 839 M0 prot .........•••......... IBOOL PROC prot I list option IENDPROC prot Ml M2 M3 chackon .................. IPROC check on : I check option :. TRUE IENDPROC check on M4 I I I I I M5 M6 M7 M8 checkoff ................. I PROC check off : I check option : = FALSE IENDPROC check off M9 850 851 852 check .................... IBOOL PROC check I check option IENDPROC check 853 854 855 856 warnlngson ............... IPROC warnings on: I warning option : = TRUE I ENDPROC warnings on 25/18 I I I eumel coder part 1 25/18 Zeile 857 858 859 86@ 861 862 863 864 865 25/19 - E LA N EUMEL 1.8 --- 10.11.86 eumel coder part 1 wa.rnJ.l1Isoff . ............. IPROC warnings off : I warning option . - FALSE I ENDPROC warnings off ; I w&rlling_ ................. IBOOL PROC warnings I warning option IENDPROC warnings ; I I ENDPACKEI' eumel coder part 1 eumel coder part 1 25/19 Zeile E LAN EUMEL 1.8 **** mathlih 10.11.86 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 1(* ------------------- VERSION 2 06.03.86 ------------------mathlib ********* ••***.*.* IPACKET mathlib DEFINES sqrt, **, exp, In, log2, logi0, a, pi, I sin, cos, tan, sind, cosd, tand, 1 arctan, arctand, random, initializerandom 25 pi ....................... IREAL PRoo pi: pii END PROC pi; 26 27 e ........................ IREAL PROC e ei END PRoo e; 28 29 30 31 In ....................... I REAL PRoo 32 33 log10 .................... IREAL PROC log10 ( REAL CONST x ): I log2(x) * :!g2 I END PROC log10; 34 1 ILET 1 1 1 36 38 39 40 41 42 43 44 45 46 47 48 26/1 3.141592653589793238462, 1. 570796326794896619231, 1.047197551196597746154, 0.523598775598298873077, 1.273239544735162686151, 0.693147180559945309417, 0.301029995663981195213, 2. 302585092994045684e18 , e.434294481ge3251827651, 2.7182818284591;)45235361;), 57. 29577951308232l'J876798, 1. 732051il807568877293527, e. 57735e2691896257645e9, 3. 732e50807568877293527, e. 2679491924311227e6473, 0.707106781186547524400; IREAL VAR rdg: :0.4711; I I I In (REAL CONST x ): log2(x) * ln2 1END PROC In; I I 35 37 pH pi2 pi3 pi6 pi4 ln2 :!g2 ln10 :!ge ei pi180 sqrt3 sqr3 = sqr3p2= sqr3m2= sqr2 = log2 ..................... 1REAL PRoo log2 ( REAL CONST z ): 1 REAL VAR t, summe: :0.e, x: :z; I IF x=1.0 THEN 0.0 1 ELIF x,0.0 THEN normal I ELSE errorstop( "log2: " + text (x,20)); 0.0 FI. 1 normal I Inormal: I IF x, = 0.5 THEN normalise dOllnllards I ELSE normalise upllards I IF x (sqr2 THEN summe .- summe - 0.75; I ELSE summe .- summa - 0.25; I summe + reihenentllicklung. I mathlih FI; t := trans8 t := trans2 FI; 26/1 E LAN Zaile EUMEL 1.8 **** mathlib 10.11.86 normalise downwards; WHILE x)= 8.0 REP WHILE x)= 1.0 REP x ._ normalise upwards: WHILE x<=0.0625 REP WHILE x<= 0.5 REP x.= x.- 49 50 51 52 normalisedollnlla.ros 53 54 55 56 normaliseupllards 57 trans8 trans8: (x - 0.5946035575013605)/(x + 0.5946035575013605). 58 59 trans2 trans2: (x - 0.8408964152537145)/(x + 0.8408964152537145). relhenentlllckiung reihenentllicklung: x ._ 0.0625 * x; 8.5 • x; x: = t 16.0 * x; 2.0 * x; * t; summe:=summe+4.0 summe: =summe+1.0 PER; PER. summe:=summe-4.0 PER; summe:=summe-1.0 PER. t * 0.06405572387119384648 + (( (( ( (3.465*x+4.095)*x+5 .005)*x+6.435)*x+9.009)*x+15.015)*x+45 .045)1 IEND FROC log2; 61 62 63 64 65 66 67 68 69 70 ?1 72 I sqrt •.................... IREAL FROC sqrt ( REAL CONST z ): I REAL VAR y0, yl, x: :z; INT VAR P :: decimal exponent( x) DIV 2; IF p <= -64 THEN 0.0 ELIF x < 0.0 THEN errorstop("sqrt: " + text (x,20»; 0.0 ELSE nontrivial Flo nontrivial ?3 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 26/2 nontrivial: set exp (decimal IF x<10.0 THEN x ELSE x y0 := x; set exp (decimal y1 . - 0.5 * ( y0 y0 : = 0.5 * ( yl y1 : = 0.5 * ( y0 0.5 * ( yl IEND PROC sqrt; exponent (x) -p-p, x); .- 5.3176703 - 40.760905/( 8.408065 + x := 16.81595 - 1288.973 I( 84.08065 + x FI; exponent (x) + p, y0); + z/y0 ); + z/yl ); + z/y0 ); + z/y1 ) I exp ...................... IREAL PROC exp ( REAL CONST z ): I REAL VAR x: :Z, a: :1.0; BOOL VAR negativ .. x<0.0; I IF negatlv THEN x := -x FI; I IF x)292.42830676 I THEN IF NOT negativ THEN errorstop (~REAL-Ueberlaut~) FI I ELIF x< =0.0001 I THEN ( 0.5*z + 1.0 ) * z + 1.0 I ELSE approx I Flo approx 0.0 I I I approx: IIFx)ln10 I THEN x : = 1ge*x; I a:=lo, I set exp (int(x), a); I x : = trae( x)*ln10 I FI; math lib 25/2 Zaile 100 101 102 103 104 105 106 107 lElA 109 110 E LAN 1.8 EUMEL **** 10.11.86 mathlib I IF x ,= 2.0 THEN a : = 7. 389056098930650227230-a; x = x-2.0 FI; I IF x ,= 1.0 THEN a := 2.718281828459045235360*a; x = x-1.0 FI; I IFx ,= 0.5 THEN a : = 1. 648721270700128146848-a; x = x-0.5 FI; I IF x ,= 0.25 THEN a : = 1. 284025416687741484073-a; x = x-El.25 FI; I IF x ,= 0.125 THEN a : = 1. 133148453066826316829-a; x = x-0.125 FI; I IF x , = 0. 0625THEN a : = 1. 064494458917859429563-a; x = x-El.0625FI; I a: =a/50.4*( (( (( ((0.01.x+0.07).x+0.42).x+2.1).x+8.4).x+25.2).x+5 I 0.4)*x+50.4) ; I I IF negativ THEN 1.0/8. ELSE a FI I IENDPROC exp I 111 112 113 114 115 tan ...................... IREAL PROC tan (REAL CaNST x): I IF x < 0.0 THEN - tg( -x • p14) I ELSE tg( x * pi4) IEND PROC tan; 116 117 118 119 120 tand ..................... IREAL PROC tand (REAL CaNST x): I IF x < 0.El THEN - tg( -x / 45.0) I ELSE tg( x / 45.0) FI IEND PROC tand; 121 122 123 124 125 126 127 128 129 130 131 132 133 tg ....................... IREAL PROC tg (REAL CONST x ): I REAL VAR q: :floor(x), s: :x-q; INT VAR n; I q:= q - floor(0.25-q) .4.0 ; I IF q < 2.El I THEN IF q < 1.0 I THEN n:=0; I ELSE n:=l; s := 1.0 - s FI I ELSE IF q ( 3.El I THEN n: =2; I ELSE n:=3; s := 1.0 - s FI I FI; I q:= s • s; q : = (( (( (( (( (-5. 116186989653121!le-11-q-5.608325El22830701e-1El).q- FI I I 134 9. 526170109403018e-9)-q-1. 517906721393745e-7 )-q-2. 430939946375 515e-6).q135 3. 901461426385464e-5)-q-6.324811612385572e-4)-q-1.El76696829172 646e-2)-q0.2617993877991508)-q+p14); + 136 137 138 139 140 141 142 143 144 145 26/3 SELECT n OF CASE 0 : s/q CASE 1 : q/s CASE 2 : -q/s OTHERWISE : -s/q ENDSELECT IEND PROC tg; I mathlib 26/3 Zone E LAN EUMEL 1. 8 **** 10.11 .86 mathlib ...................... IREAL PROC sin ( REAL CONST x ): REAL VAR y, r, q; IF x ( 0.0 THEN y := -x; q .- 4.0 ELSE Y := x; q := 0.0 FI; y: = y * pi4; r : = floor(y); sincos( q+r , y-r IEND PROC sin; 146 147 148 149 150 151 152 153 sin 154 155 156 157 158 159 160 161 sind 162 163 164 165 166 167 168 169 cos 170 171 172 173 174 175 176 177 cosd 178 179 180 sincas ................... IREAL PROC sincos ( REAL CONST q, Y ): I REAL VAR r :: q - floor( 0.125*q + 0.1 ) I IF r ,= 4.0 THEN IF r ,= 6.0 THEN IF r approx( 1.0-y) 181 182 183 184 + 185 186 187 188 189 26/4 I I I I I I ..................... IREAL PROC sind ( REAL CONST x ): I REAL VAR y, r, q; I IF x ( 0.0 THEN y .- -x; q := 4.0 I y:= y / 45.0; I r:= floor(y); I sincos( q+r , y-r ELSE y := x; q := 0.0 FI; lEND PROC sind; I ...................... IREAL PROC cos ( REAL CONST x ): I REAL VAR y, q; I IF x ( 0.0 THEN Y .- -x ELSE y I y: = y * pi4; I q:= floor(y); I sincos( q+2.0, y-q ) IEND PROC cos; I ..................... IREAL PROC cosd ( REAL CONST x ): I REAL VAR y, q; I IF x ( 0.0 THEN Y . - -x ELSE y I y:. y / 45.0; I q:= flaor(y); I sincos( q+2.0, y-q ) := x FI; .' x FI; lEND PROC cosd; I * 8.0; 7.0 THEN - sin ELSE - cos approx( y) FI ELSE IF r ,. 5.0 THEN - cos approx(1.0-y) ELSE - sin approx(y) FI FI ELSE IF r ,= 2.0 THEN IF r ,= 3.0 THEN sin approx( 1. 0-y) ELSE cos approx( y) FI ELSE IF r , = 1. 0 THEN cos approx( 1. 0-y) ELSE sin approx( f FIFIFI lEND PROC sincos; I math lib 26/4 Zeile 190 191 192 + E LAN 1.8 **** mathlib 10.11.86 sinapprox ................ I REAL PROC sin approx ( REAL CONST x ): I REAL VAR z: :x*x; I I I I I I I 193 x.((((((0.6877101540593035e-ll.z-0.1757149296873372e-8).z+0.313 3615215572568 e-5) .z-0. 3657620415845891e-4 ).z+0. 24903945701887378-2 ).z-0. 8074 55121882e-l). z+0.7853981633974483) IEND PROC sin a.pprox; 194 195 196 197 198 199 EUMEL I cosapprox ................ 1REAL PROC cos approx ( REAL CONST x ): 1 REAL VAR z: :x.x; 1 ( ( ( ( ( ( -0. 3857761864560276e-12.z+0 . 115004970178141e-9).z-0 . 24611 363826741ge-7 1 1 200 1 1 ) .z+0. 3590860445885748e-5 ) .. z-0. 3259918869266875e-3).z+0 .1585434 424381541e-l) 1 "z-0.3084251375340425).z+1.0 1END PROC cos approx; I 201 202 203 204 205 206 207 208 209 210 + 1 arctan ................... IREAL PROC arctan ( I REAL VAR f, z, x; I IF neg THEN x IF x)1.0 THEN f REAL CONST Y ): BOOL VAR neg .. y < 0.0; .- -y ELSE x := y FI; := a ELSE f := -b; neg := NOT neg FI; z.-x*x; x : = x/( (( (( ( (0. 0107890276046822.z-0 . 01647757182108040)-z 211 212 213 IF 214 a 215 b +0.02177846332482151) .z-0. 83019339673273880) .z+0. 046560835 61183398)-z -0. 0888888888888888).z+0. 3333333333333333)-z+1.0) ; neg THEN x - f ELSE f - x FI. a:IF x)sqr3p2 THEN x := 1.0/x; pi2 ELSE x :* 4.0/(sqrt3+x+x+x)-sqr3; pi3 Fl. 1 b:IF x .1:.86 E _ " ti I; * ------------------2 get command • analyze command do corr-.mand • command error , CO'ler tracks : 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ILET cr If esc k I I I I I I I I I ~''"4''''13'"''10,.'' ""27"k" command pre command post m&X ""4""13'" ""13""10" command length : 2010 tag type text type eof type 1 4 7 I ITEXT VAR command handlers own command line ; = previous command line : = "" , symbol • procedure • pattern • error note := I I 24 25 26 27 28 29 30 31 32 INT VAR symbol type ; getcommand •••......•••... I PROC get command (TEXT CONST command text) : I I I get command (command text. command handlers own command line) IENDPROC get command; I 38 ge tcomrnand •••••.••.•••••• I PROC get command (TEXT CONST command text. TEXT VAR command line) I I I I I I 45 46 47 48 49 50 51 errorprotocoll 52 53 54 55 56 getcommandfromconsole 27/1 05.05.86 ------------------- * I \* Auto,.: J.Liedtke *) I 8 9 39 40 41 42 43 44 VERSIOt; 2 commandhandler *********** I PACKET command handler DEFINES 3 33 34 35 36 37 ccmmand handler set line nr (0) ; error protocoll ; get command from console lerror protocoll : IF is error THEN put error clear error ELSE command line : = FI. I I I I I I I Iget command from console I normalize cursor ; I REP I out (command pre) l o u t (command text) ; command handler 27/1 Zelle E LAN EmlEL 1.8 ........ 10.11.86 command handler out (command postl ; edi tget command UNTIL commar.d line () "" PE!l para~ posltlon IIENGTH command linel out (command postl . 57 58 59 50 61 62 I 63 64 65 edi tgeocommand leditget command TEXT VAH e:·:it char I FEP I get cursor Ix. yJ ; I ed1tget (comman:t symbo: ; IT symbol type (> tag type AllD symbol THEN error : "Name unguel tig") impossib:e command ELIT pos (command list, symbol) > Ii) THEIl procedure name ; parameter list pack option ; nothlng else in command line decode command ELSE imposs;,ble command "?" rr. Iprocedure name : I procedure: = symbol ! next symbo 1 . I I Iparamote!' list pack option I number of params :. 13 ; I param 1 : = "" ; I param 2 : = "" ; 14~ I 145 146 H7 148 149 1513 151 152 :'53 I I I I I I I IF symbol. "I" THEN next symbol parameter list rr symbol () ")" AND error note THEN error 1"1 fehh") FI ELrr symbol type (> eof type THEN error ("( fehlt") I rI. I I 154 155 156 157 158 159 160 parameterl1st 161 162 163 164 165 :'66 nothingelseincommandli 'C:I/3 Iparameter list : I parameter I param 1. number I rr symbol = "." I THEN next symbol ; I I rr. of params, permi t ted type) parameter I param 2. number ot params. permitted type) I I Inothing I I I I else in command line next symbol ; rr symbol (> THEN error ("Kommando zu schlli.rig") l'I. I command handler 'C:I/3 E LAN 1.6; decodecommand 158 EU!.:r:L 1..8 ""*** command handler :0.11.86 Idecode command : I command inde;·: index I command list, procedure, number of paramsl I 169 170 171 172 173 174 impossi blecommand Ilmposs 1 ble command I command inde:< : = 0 i IENDPROC analyze command I 175 176 177 178 179 180 181 182 183 184 185 186 parameter ................ IPROC parameter (TEXT VAR param, INT VAR number of params, I INT CONST permitted type I : 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 lndex .................... lINT PRoe i nde;: 204 205 206 207 I I IT s:lmbol type = text type OR symbol type = permitted type THEN param :. symbo 1 ; I n~mber of params :NCR 1 ; I ne:-:t symbol I ELSE error ,"Parameter ist kein TEXT (." fehltl": I I rr I !ENDPR08 parameter I INT CONS': params) TI ELSE 0 TI. procedure name found 211 212 213 getparamlndex Iprocedure name found : I HIT VAR index pas : = pos (11st, pattern) ; I WHILE index pas > <;) REP I IF index pas = 1 COR (list SUB index pos - 1) (. "9" ! THEN LEAVE procedure name found WITH TRUE I rr; 1ndex pos .- pas (11st, pattern, 1ndex pos I I PER ; I FALSE . I I + 1) Iget param index : I INT CONST param index : = I poe = 0 Th"EN command index + param index ELSE - command index 208 217 TElT CONST list, ! pattern := procedure; I pattern CAT ":" ; I IF procedure name found 209 210 214 215 216 I I 1 . I command handler 27/4 Zeile 218 219 220 221 command handler E LAN getcomrr.andir.de:< Iget oo:r.",and index : INT CONST command ':nde;.: : = int ( subte:
= 0.0 THEN int (em * font store. >: unit + 0.5 ELSE int (em * font store. Y. unit - 0.5 n I lEND PROe Y. step conversion; I ! 228 · ......... IREA1 p:«Je " step conversion (INT CONST I I in1 tiallze if necessary; I real ~ steps J / font store. X unit I IEND PROe :.: step conversion; I I steps) 229 230 231 232 233 234 235 236 >:stepconyersior. 237 238 239 240 241 242 243 244 245 246 247 ystepconversion · •..••.••. lINT PROC 248 249 250 251 252 253 254 255 ystepconversion 256 257 258 259 onstring ................. ITEXT PROC on string (INT CONST mod1fication) 26E) 261 262 263 264 265 266 267 268 S31/5 j' step conversion (REAL I I in1 tialize if necessary; I IF e!ll >= 0.0 TIIEN int (em. font store. I ELSE int (em. font store. I I n I CONST em) y unit + 0.5 y unit - 0.5 lEND PROC y step conversion; I I · ...... " .. IREAL PROC y step conversion (INT CONST I I initialize if necessary; I real (steps) / font store. y unit I steps) lEND PROC Y step conversion; I I I I ini tialize if necessary; I SELECT modification OF I CASE underline I CASE bold I CASE italics I CASE reverse I OTHERWISE I END SELECT I font store. on strings (1) font store. on strings (2) font store. on strings (3) font store. on strings (4) errcrstop ("unzulaessige Modifikation"); lEND PROC on string; I font store S31/5 Zeile .... ELAN EllMEL 1.8 •••• 10.11.86 font store 269 270 offstring ................ ITEXT PROC ~1 I 272 273 274 275 276 277 278 279 I I I I I I I I I 28(') 284 285 286 287 initialize if necessary; SELECT modification OF CASE underline font store. off strings CASE t~ld font store. off strings CASE i ta.llcs font store. off strings CASE reverse font store. off strings Ol'IIERWISE errorstop (ftunzulaessige END SELECT IEND PROC I 281 282 283 off string (IN! CONST modification) (1) (2) (3) (4) Modifilcation ft ); off string; I font ..................... I IN! PROG font (TEXT CONST font name) I 288 I I I 289 290 291 292 293 294 295 296 297 I I I I I IEND I I I ini tialize if necessary; buffer: = font name; change all (buffer, ft ft, ftft); IN! CONST link nr : = link (font names, buffer) IF link nr () 0 THEN font name links ISUB link nr EI.'>E (;) FI PROC font; 298 299 300 301 302 303 304 305 306 307 308 309 310 font ..................... ITEXT PROC font (IN! CONST font number) 311 M2 313 314 315 M6 317 fontexists ............... IBOOL FROG font exists (TEXT CONST font name) 318 319 nextla.rgerfontexists ..... IBOOL PROC next la.rger font exists( IN! CONST font number, I IN! VAR next la.rger font) 320 S31/6 I I I I I I I I I ini tialize i f necessary; IF font number ) = first font AND font number < = la.st font THEN name (font names, fonts. font name indexes ISUB 1) EI.'>E ftft FI . fonts : font store. fonts (font number) lEND FROG font; I I I I font (font name) () (;) I IEND PROC font exists; I I I font store S31/6 E LAN EUMEL 1. 8 321 322 323 324 325 I I IF next larger font <) 0 THEN next larger font : = font name links ISUB next larger font; next larger font <) 0 ELSE FALSE FI ELSE errors top ("Font" + text (font number) + " gibt es nicht") ; FALSE I I I I I I I IF! I I . fonts I 328 329 330 331 332 333 334 335 336 337 lEND PROC next larger font exists; I nextsmallerfontexists .... IBOOL PROC next smaller font exists (INT CONST font number. I INT VAR next smaller font) I I ini tialize if necessary; I IF font number )= first font AND font number <= last font I THEN next smaller font : = fonts. next smaller font; I IF next smaller font <) 0 I THEN next smaller font : = font name links ISUB next I smaller font; I next smaller font <) 0 I ELSE FALSE I FI I ELSE errorstop ("Font" + text (font number) + " g1bt es I nicht"); I FALSE I IT I I . fonts : font store. fonts (font number) I IEND PROC next smaller font ex1sts; I I + ~0 ~1 ~2 353 354 355 ~6 357 + 364 365 366 367 368 369 370 S31/7 : font store. fonts (font number) I 346 347 348 349 358 359 360 361 362 363 font store 10.11. 86 I initialize if necessary; I IF font number ) = first font AND font number <= last font THEN next larger font : = fonts. next larger font; I 326 327 338 339 340 341 342 343 344 345 .... ".. fontlead ................. IINT PROC font lead (INT CONST font I I ini tialize i f necessary; I IF font number ) = first font AND I I I I I I number) font number <= last font THEN fonts. font lead ELSE errors top ("Font " nicht"); 0 + text (font number) + " gibt es FI . fonts : font store. fonts (font number) I lEND PROC font lead; I I font store S31/7 E LAN Zeile 371 :572 :57:5 374 375 :576 I I I I I I 10.11.86 font store ini tialize if necessary; IF font number )= first font AND font number < = last font THEN fonts. font height EISE errors top ("Font" + text (font number) + " gibt es nicht"); 8 IF! I I I . fonts : font store. fonts (font number) lEND PROC font height; I I :583 fontdepth ................ I INT I I :586 i :587 I :588 I I I :589 + :590 :591 392 393 394 395 396 :597 :598 399 400 481 402 n_ fontheight ............... lINT PROC font height (INT CONST font number) 377 378 379 380 :581 :582 :584 :585 EUMEL 1.8 PROC font depth (INT CONST font number) ini tialize if necessary; IF font number ) = first font AND font number <= last font THEN fonts. font depth EISE errors top ("Font " + text (font number) + " gibt es nicht"); 8 FI I I . I IEND I I fonts : font store. fonts (font number) PROC font depth; indentationpitch ......... INT PROC indentation pitch (INT CONST font number) initialize if necessary; IF font number ) = first font AND font number <= last font THEN fonts . indentation pitch EISE errors top ("Font " + text (font number) + " gi bt es nicht"); 8 FI + 403 4Cil4 . fonts : font store. fonts (font number) 485 4Cil6 487 lEND PROC indentation pitch; 488 I I 489 418 411 412 413 414 415 + 416 417 + 418 419 428 421 531/8 charpitch ................ I INT PROC char pitch (INT CONST font number, I TEXT CONST char ) : I I initialize if necessary; I IF font number ) = first font AND font number <= last font THEN INT CONST pitch : = font. pitch table (code (char SUB I 1) ; I IF pi tch = maxint I THEN extended char pitch (font number, char SUB I char SUB 2) I ELIF pitch < 8 I THEN pitch XOR (-maxint-1) I EISE pitch I F! I font store S:51/6 1) + 1, E :. A N EUMEL 1. 8 422 I 423 I In I 424 425 -l27 lEND 428 I I 429 moc 434 435 436 437 438 439 440 441 442 4-<3 444 445 446 447 I IEND I I 448 449 e0 451 replacement char pitch; CONST font number, PROC extended char pi tch; .............. ITEXT PROC replacement ( INT CONST font number, TEXT CONST char ) : I I I ini tialize i f necessary; I IF font number ). first font AND font number (. last font THEN link nr : = font. replacements table (code (char SUB 1) + 1) ; + IF link nr = maxint THEN extended replacement (font number, char SUB 1, char SUB 2) ELSE process font replacement FI ELSE errors top (·Font • + text (font number) + • gibt es nicht"); "" 458 459 460 461 462 + S31/9 font store. fonts (font number) I TEXT CONST esc char, char) I I ini tiaUze if necessary; I IF font number ) = first font AND font number (= last font I THEN extension. pitoh table (code (char) + 1) I ELSE errors top (·Font • + text I font number) + • gibt es I nicht·); 0 I TI I I font font store. fonts (font number) I I extension font store. extensions (extension number) I I extension number I INT CONST index: = pos (font. extension chars, esc char); I IF index = 0 I THEN errors top ( •••• + esc char + char + ••• hat keine I Erwei terung·) n; I font. extension indexes ISUB index 432 433 463 464 465 466 467 468 469 470 471 472 473 font store extendedcharpi tch ........ lINT PROC extended char pitch (INT 431 452 453 454 455 456 457 10.11. 86 ELSE errorstop ("Fa", " + text (font number) + " gi bt es nicht"); 0 I • font I 426 430 **** FI font : font store. fonts (font number) process font replacement : IF link nr ( 0 THEN link nr : = link nr XOR (-maxint-l) FI; IF link nr = 0 THEN char ELIF link nr ) font store replacements length THEN link nr DECR font store replacements length; replacement text (font. replacements) font store S31/9 Zeile 474 475 .. 76 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 E 1 A N EUME1 1.8 I I I IEND I I **** ELSE replaceme::t te:·:t (font store. replacements I FRoe replacement; e>:tendedreplacement ...... ITEXT PROe e>:tended replacerr.ent (INT 499 501 502 503 504 505 506 507 508 509 510 511 eONST font number, I TEXT eONST esc char, char I I initialize if llecessary; I IT font number >= first font AN:) font number <= last font I THEN process extension replacement I ELSE errors top ("rant " + text (font number) + " gi bt es I nicht" I; "" I rr I I process extension replacement : I determine extension link nr; I IT link nr = 0 I THEll char ELIT :ink nr > font store extension replacements length THEN link nr DECR font store extension replacements length; replacement text (font extension. replacements I ELSE replacement text (font store extension. replacements) 496 500 font store rr 495 497 498 10.11.86 rr determine extension link nr : INT CONST inde:< 1 . - pos (font. extension chars, esc char) ; INT CONST index 2 : = pos (font store. extension chars, esc char); IT index 1 <> 0 THEN link nr . - font extension. replacements table (code (char) + 1); ELIF index 2 < > 0 THEN link nr : = font store extension. replacements table (code (chari + 1); ELSE errors top {7t''''" + esc char + char + .. ."" hat keine Erweiterung") fI; font extension extension number) font store. ex:ensions (font font extension number index 1 font. extension indexes ISUB font font store. fonts (font number) font store extension store extension number) font store. extensions (font font store extension number ISUB index 2 font store. extension indexes 512 513 514 515 516 517 + 518 519 520 521 522 S31/10 font store extension replacements length IF index 2 = 0 THEN 0 ELSE LENGTH font store extension. replacements font store S31/1@ E L A 11 Zeile IENll PROC extended replacement; replacement text .......... i TEXT PROC replacement text (TEXT CONST replacements) I I I I I 532 533 534 535 I I I I I 539 540 541 542 + ~ 544 545 546 547 548 549 S31/11 PROC replacement text; fontstring ............... ITEXT PROC font string (INT CaNST font number) 536 569 570 571 572 buffer: = subtext (replacements, link nr + 1, link nr + code (replacements SUB link nr)): buffer IEND I I 536 563 564 565 566 567 568 font store I I 531 556 557 558 559 560 561 562 10.11.86 rr I 530 550 551 552 553 554 555 **** I ~9 537 1.8 , 523 524 525 526 527 528 EUMEL I initialize if necessary: IF font number ) = first font AND font number <= last font THEN fonts. font string ELSE errorstop ("Font" + text (font number) + " g1bt es nicht"); "" I I rr I I . I fonts : font store. fonts (font number) lEND PROC font string; I I yoffsets ................. ITEXT PROC Y offsets (INT CaNST font number) I I initialize if necessary; I IF font number ) = first font AND font number < = last font THEN fonts. y offsets I ELSE errors top ("Font " + text (font number) + " g1bt es I nicht"); "" I I FI I I . fonts : font store. fonts (font number) I lEND PROC Y offsets; I boldoffset ............... lINT PROC bold offset (INT CONST font number) I I ini tialize if necessary; I IF font number )= first font AND font number <= THEN fonts. bold offset I ELSE errorstop ("Font " + text (font number) I nicht"); 0 I I FI I I . fonts font store. fonts (font number) I font store last font + " g1bt es S31/11 E LAN Zeile IEN1l I I 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 6e0 601 602 603 604 + 605 606 607 608 609 610 611 612 U3 614 615 616 617 618 619 620 621 622 623 EUMEL 1.8 **** getfont PROC bold offset; .................. IPROC get font (INT CONST font number. INT VAR indentation pitch. font I font depth. I ROW 256 INT VAR pitch table ) : I I I 1n1 t1alize if necessary; I I I I I I IF font number ) = first font THEN indentation pitch .pi tch table := font lead .font height := font depth ._ ELSE error.top (WFont " + nicht") ; I I I FI; I I . fonts : font store. I IEND moe get font; I I lead. font height. AND font number (= last font fonts. indentation pitch; fonts. pi tcb table; fonts. font lead; fonts. font height; fonts. font depth; text (font number) + " gibt es fonts (font number) getreplacements .......... IPROC get replacements (INT CONST font number. I TEXT VAR replacements. I ROW 256 INT VAR replacements table) I I ini t1alize if necessary; I IF font number ) = first font AND font number (= last font I THEN replacements := font store. replacements; I replacements CAT fonts. replacements; I replacements table : = fonts. replacements table; I ELSE errors top ("Font" + text (font number) + " gibt es I nicht W); I TI; I I . fonts : font store. fonts (font number) I IEND moe get replacements; I I in1t1alizeifnecessary .... IPROC initialize if necessary : I I I I I I IF NOT initialized (in this task) THEN IF font table • "" THEN in this task : = FALSE; errors top ("Fonttabelle noch nicbt eingestellt"); ELSE font table (font table); I I I FI; FI; lEND moe initialize if necessary; 6~ I I 625 lEND PACKET font store; S31/12 font store 10.11.86 font store S31/12 E LAN Zeile 10.11.86 1.8..... 1(. ------------------- 1 2 EUMEL nameset _ SOME , LIKE , 7 + 1 , do , FILLBY , rema.i ndar , 11 12 13 14 15 fetch, save, fetch all , save all forget, 16 17 18 19 20 erase, insert • 21 edit: 25 26 27 17.03.86 ------------------- .) (* Autor: J.Liedtlce .) ALL , 8 9 10 24 VERSION 3 ................. PAcm name set DEFINES 3 4 5 6 22 23 nameset ILET cr If • ""13""19"· I ITEXT VAH name ; IDATASPACE VAH edit space ; 28 I 29 ITHESAURUS VAH remaining thesaurus .' empty thesaurus 30 I I 31 32 + .••••••••••••••••••••••• ITHESAURUS OP + (THESAURUS CONST lett, right) 33 I 34 35 36 37 38 39 40 41 42 43 44 45 46 I I I I I I 47 48 49 50 51 52 53 I I I I I IENDOP + I + •..•.•••..••.•...•••••.. ITHESAURUS OP + (THESAURUS CONST left, TEXT CONST right) I I I I I I 54 I 55 56 I 39/1 THESAURUS VAH union :. lett INT VAH index := 9 ; get (right, name, index) ; WHILE name () •• REP IF NOT (union CONTAINS name) THEN insert (union, name) FI; get (right, name, index) PER; union THESAURUS VAH union := left; IF NOT (union CONTAINS right) THEN insert (union, right) FI; union IENDOP + name set 39/1 Zeile 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 E LAN 1. 8 **** I I I I I I I I I I I I THESAURUS VAR difference : = empty thesaurus ; INT VAR index : = 0 ; get (left, name, index) ; WHILE name <) " " REP IF NOT (right CONTAINS name) THEN insert (difference, name) FI; get (left, name, index) PER; difference IENOOP I ........................ ITHESAURUS I I I I I I OP - (THESAURUS CONST left, TEXT CONST right) THESAURUS VAR difference : = left ; INT VAR index ; delete (difference, right, index) ; difference IENOOP - I / ........................ ITHESAURUS OP / (THESAURUS CONST I I THESAURUS VAR intersection : = 84 lINT VAR index 85 86 87 I I I I I I I I I 88 89 90 91 92 93 94 95 left, right) : empty thesaurus := 0 ; get (left, name, index) ; WHILE name <) " " REP IF right CONTAINS name THEN insert (intersection, name) FI ; get (left, name, index) PER ; intersection IENDoP / I 96 97 98 99 100 101 102 103 104 ALL 105 106 107 108 109 110 SOME 39/2 nameset 10.11. 86 - ........................ ITHESAURUS OP - (THESAURUS CONST left, right) : 72 73 74 75 76 77 78 79 80 81 82 83 EUMEL ...................... ITHESAURUS OP ALL (TEXT CONST file name) : I I FILE VAR file : = sequential file (input, file I THESAURUS VAR thesaurus := empty thesaurus; I thesaurus FILLBY file I thesaurus I name) IENDOP ALL I ..................... ITHESAURUS OP SOME (THESAURUS I I copy thesaurus into file I edit file I copy file into thesaurus CONST thesaurus) I nameset 39/2 Zeile E LAN 111 112 113 114 115 116 copythesaurusintofile 117 118 119 120 editfile 121 122 123 copyfileintothesaurus 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 1. 8 EUMEL **** 10.11.86 name set Icopy I I I I I I thesaurus into file forget (edi t space) ; edit space := nilspace FILE VAR file := sequential file (output, edit space) file FILLBY thesaurus . ledit file: I modify (file) I edit (file) . I I Icopy file into thesaurus : I THESAURUS VAR result . - empty thesaurus I input (file) ; I result FILLBY file ; I forget (edit space) ; I result. I IENDOP I SOME SOME ................••... I THESAURUS OP SOME (TASK CONST task) I I SOME ALL task I IENDOP I SOME SOME ..................... ITHESAURUS OF SOME (TEXT CONST file name) I I SOME ALL file name I IENooP SOME I 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 LIKE ..................... ITHESAURUS OF LIKE (THESAURUS CONST thesaurus, TEXT CONST pattern) 157 remainder ................ I THESAURUS PROC remainder 158 159 160 161 W2 39/3 I I I THESAURUS VAR result: = empty thesaurus INT VAR index: = 0 ; I I I I I REP get (thesaurus, name, index) IF name = •• THEN LEAVE LIKE WITH result ELIF name LIKE pattern THEN insert (result, name) I FI I FER ; I result I IENooF LIKE I I I rema.ining thesaurus I I ENDFROC remainder I name set 39/3 ZeUe 163 164 165 E LAN 1.8 **** EUMEL do ....................... IPROC do I I I :f)6 (PROC 10.11.86 nameset (TEXT CaNST) operate, THESAURUS CaNST thesaurus) INT VAR index : = 0 , operation number :. 0 ; TEXT VAR name I 167 168 169 170 171 172 I I I I remaining thesaurus . - empty thesaurus disable stop ; \lork off thesaurus ; fill leftover \Ii th remainder I I 173 174 175 176 177 178 179 180 181 182 183 \lorkoffthesaurus 184 185 186 187 188 189 190 191 fillleftover\li thremain Ifill leftover \lith remainder : I WHILE name <) " " REP I insert (remaining thesaurus, name) I get (thesaurus, name, index) 192 193 194 195 196 197 I I I PER. I IENDPROC do I execute .................. IPROC execute (PROC (TEXT CaNST) operate, TEXT CaNST name) I I I 200 201 202 203 204 IENDPROC execu te ; I do ....................... PROC do (PROC (TEXT CaNST, TASK CaNST) operate, THESAURUS CaNST thesaurus, TASK CaNST task) : INT VAR index . - 0 , operation number : = 0 TEXT VAR name remaining thesaurus . - empty thesaurus disable stop ; \lork off thesaurus ; fill leftover \lith remainder 205 206 207 208 209 210 211 212 213 214 215 216 39/4 enable stop ; operate (name) I 1~ 199 I\lork off thesaurus : REP I get (thesaurus, name, index) ; I IF name = "" I THEN LEAVE \lork off thesaurus I FI; I opera tion number INCR 1 ; I cout (operation number) ; I execute (PROC (TEXT CaNST) operate, name) I UNTIL is error ENDREP . I workoffthesa.urus Iwork off thesaurus: REP I get (thesaurus, name, index) ; I IF name = "" I THEN LEAVE \lark off thesaurus I FI; I operation number INCR 1 ; I name set 39/4 Zeile E LAN EUMEL 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 1.8 I I I 39/5 do execute .................. IPROC execute (PROe (TEXT eONST, TASK CaNST) operate, I TEXT eONST name, TASK OONST task) : I I I I 254 255 256 257 258 259 260 261 262 263 264 265 266 cout (operation number) ; execute (PROC (TEXT CONST, TASK CONST) operate, name, task) UNTIL is error ENDREP . I I ENDPROC I I ~3 nameset fillleftoverwithremain Ifill leftover with remainder I WHILE name () •• REP I insert (remaining thesaurus, name) I get (thesaurus, name, index) I PER. 234 247 248 249 250 251 252 10.11.86 I I 235 236 237 238 239 240 241 242 243 244 245 246 **** enable stop ; operate (name, task) IENDPROC execu te FILLBY ................... lOP FILLBY (THESAURUS VAR thesaurus, FILE VAR file) I I I I I I I I WHILE NOT eof (file) REP getline (file, name) ; delete trailing blanks IF name () •• CAND NOT (thesaurus CONTAINS name) THEN insert (thesaurus, name) FI PER. I I deletetrailingblanks Idelete trailing blanks : I WHILE (name SUB LENGTH name) = • • REP I name: = subtext (name, 1, LENGTH name - 1) I PER. I IENDOP FILLBY I FILLBY ................... IOP FILLBY (FILE VAR file, THESAURUS OONST thesaurus) I I INT VAR index : = 0 ; I REP get (thesaurus, name, index) I IF name = I THEN LEAVE FILLBY I FI ; I putline (file, name) I I PER . I IENDOP FILLBY I name set 39/5 Zeile 267 268 269 270 271 272 273 274 275 E 1 AN EUMEL 1.8 **** namasat 10.11.86 FILLBY •..•.••..•.•••••.•. lOP FILLBY (TEXT CONST file name, THESAURUS CONST thesaurus) I I I I FILE VAH f := sequential file (output, file name) ; f FILLBY thesaurus I ENIXlP FILLBY I I I 276 277 278 279 280 281 fetch ••..•.....•...•••... IPROG fetch (THESAURUS CONST nameset) : 282 283 284 280 286 287 fetch •••...•.•.•...•..... IPROC fetch (THESAURUS CONST nameset, TASK CONST task) : 288 289 290 291 292 293 save •.....••...••...••... I PROC save (THESAURUS CONST name set ) : 294 295 296 297 298 299 save •••....•..•••..•.••.. I PROC save (THESAURUS CONST namesat, TASK CONST task) : 300 301 302 303 304 305 fetchall ................. I PROC fetch all : 306 307 fetchall ................. IPROC fetch all (TASK CONST 308 309 310 311 312 M3 314 39/6 I I do (PROC (TEXT CONST) fetch, nameset) I I ENDPROC fetch I I I I do (PROC (TEXT CONST, TASK CONST) fetch, nameset, task) I ENDPROC fetch ; I I I do (PROC (TEXT CONST) save, namesat) I I ENDPROC sava ; I I I do (PROG (TEXT CONST, TASK CONST) save, namesat, task) I IENDPROC save I I I fetch all (father) I IENDPROC I I I I fetch all ma~er) fetch (ALL manager, manager) I ENDPROC fetch all I savaall .................. I PROC save all : I I save all (father) nameset 39/6 Zeile 315 316 317 E LAN EUMEL 1.8 **** 10.11.86 nameset I I ENDPROC save all I 318 319 320 321 322 323 saveall ...............•.. I PROC save all (TASK CONST manager) 324 325 326 327 328 329 forget .........•......... I PROC forget (THESAURUS CONST nameset) : 330 331 332 333 334 335 erase .................... I PROC erase (THESAURUS CONST nameset) : 336 337 338 339 340 341 era.se •••....•......••.... I PROC erase (THESAURUS CONST nameset, TASK CONST task) : 342 343 344 345 346 347 insert ••..••..•.......•.• I PROC insert (THESAURUS CONST na.meset) : 348 349 350 351 352 edit ..•...•........••••.. IPROC edit (THESAURUS CONST nameset) : ~3 ~4 39/7 I I I save (ALL myself, manager) I ENDPROC save all I I I do (PROC (TEXT CONST) forget, name set ) I I ENDPROC forget ; I I I do (PROC (TEXT CONST) erase, na.meset) I I ENDPROC erase I I I do (PROC (TEXT CONST, TASK CONST) erase, nameset, task) I I ENDPROC erase I I I do (PROC (TEXT CONST) insert, nameset) I IENDPROC insert; I I I do (PROC (TEXT CONST) edit, nameset) I I ENDPROC edit; I I ENDPACKET name set na.meset 39/7 Zeile 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 S40/1 E LAN EUMEL 1.8 **** 10.11.86 system info system info **********.**** IPACKET system info DEFINES I I I I I I I I (* Autor: J. Liedt~ (* Stand: 22.09.84 *) *) task status , storage info , help: LET channel field prio field cr If cr 4 6 ''''13'' "le"" ""13"" I ""1 ""4"" page begin mark= ""15"" , ""14 "" ~ end mark ""7"" , bell ""27'''' ; esc cputimeof ................ ITEXT PROC cpu time of (TASK CONST actual task) I I disable stop ; I TEXT VAR result .- subtext (time (clock (actual task), I 12), 1, 10) I I I IF is error THEN clear error result := 10 • "." I FI; I result I IENDPROC cpu time of I taskstatus ............... IPROC task status I I I I I I I I line; put (date); put (time of day) ; line (2) ; put ("Speicher:"); put (storage (myself»; putUne ("K"); put ("CPU-Zeit:"); put (cpu time of (myself» ; line; line. IENDPROC task status I storageinfo .............. IPROC storage info : I I INT VAR size, used I storage (size, used) lout (""13""10" ") I put (used) ; I put ("K von") ; I put (size plus reserve) I putline ("K sind belegt!") system info 840/1 Zelle E LAN EUMEL 54 55 56 57 58 59 60 1.8 •••• 10.11.86 1 sizeplusreserve 1 1size plus reserve : 1 int (real (size + 24) • 64.0 / 63.0 ) . 1 IENDPROC storage info ; 1 1 61 62 63 64 65 66 67 68 69 70 help ••••••••••••••••••••• 1PROC help : 71 72 73 74 75 76 77 78 79 80 help ..................... IPROC help (FILE VAR help file) 81 82 83 84 85 system info 1 1 1 1 1 IF exists ("help") THEN FILE VAR f := sequential file (modify, "help") help (f) ELSE errors top ("""help"" gibt es nicht") 1 Fl. 1 1ENDPROC help 1 1 .\nitialize help command REP out (page) ; to paragraph show paragraph get show command UNTIL is quit command PER ini tializehelpcommand ini tialize help command : TEXT VAR help command : = getcharety IF help command = "" THEN help command : = "0" 86 FI . 87 88 89 toparagraph 90 91 92 93 94 95 96 1 to paragraph : 1 col (help file, 1 1) ; to l1ne (help file, 1) downety (help file, "." + help command + "#") IF eof (help file) THEN to line (help file, 1) ; out (bell) 1 FI. 1 1 1 1 97 98 99 100 101 102 103 showparagraph 104 105 106 showheadl1 ne 1 1 1show 1 1 1 1 1 paragraph show headline ; WHILE NOT end of help subfile REP show help line PER; show bottom line 1 1 S40/2 1 show headline lout (begin mark) I INT CONST dots : = (x size - len (help file) - 5) DIV 2 system info S40/2 Zeile E LAN 107 108 109 110 111 112 113 114 115 116 117 showhelpline 118 119 120 121 122 showbottomline 123 124 125 126 127 128 129 130 131 132 133 getshowcommand 1M endofhelpsubfile 135 136 137 138 139 140 141 142 143 144 145 146 S40/3 isqui tcommanc. EUMEL 1.8 **** 10.11.86 system info I dots TlMESOUT "." ; I exec (PROC show line, help file, 4) I dots TlMESOUT "." ; I out (end mark) ; I down (help file) I I I show help line I out (cr If) , I exec (PROC show line, help file, 1) I down (help file) I I I show bottom line I cursor (5, y size) I exec (PROC show line, help file, 3) I out (cr) I I I get show command I TEXT VAR char; I get char (char) I IF char = esc THEN get char (char) I I FI ; I IF char ,. " " THEN help command .- char I ELSE out (bell) I I FI . I I pos (help file, "n" ,1) <, 0 OR eof (help file) I end of help subfile I I I "q" OR help command = "Q" . help command I is quit command I IENDPROC help I showline ................. IPROC show line (TEXT CONST line, INT CONST from) I I I outsubtext (line, from, x size - from) I ENDPROC show line ; I I ENDPACKET system info system info S40/3 E LAN Zeile 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 EUMEL 1.8 **** single user monitor 10.11.86 1(* ------------------- VERSION 2 singleusermonitor *** ••••* IPACKET single user monitor DEFINES 26.05.86 ------------------- *) (* Autor: J. Liedtke *) I I I I I I I I monitor, shutup, save system , fixpoint, collect garbage blocks , set clock , set date : I I ILET command list = I I "edit: 1.01run: 3. 01runagain: 5.0insert:6.01forget:8.01rename: 10.2copy:l 1.2 + 16 list 17 18 19 20 21 22 23 24 25 26 27 help I I llist: 12.0storageinfo: 13.0fetch: 14.1save: 15. 01saveall: 17 .0shutup: 18.8 I 28 29 30 31 32 33 34 35 36 37 Ihelp:19.0 " ; I ILET text param type I main channel I cr = ""13"" , I I I I I garbage collect code fixpoint code shutup code shutup and save code lINT VAR command index , number of params , previous heap size , I old session : = session ; ITEXT VAR param 1, param 2 , date text; I I monitor .................. IPROC monitor : I I monitor (PROC set up) I 38 IENDPROC monitor I 45 46 47 48 49 50 51 52 53 54 543/1 2 4 12; I I 39 40 41 42 43 44 4 1 monitor .................. IPROC moni tor (PROC init system) I I I I I I I I I I I I I I I disable stop ; previous heap size .= heap size REP continue (main channel) command dialogue (TRUE) sysin ("") ; sysout ("") ; reset editor; ini t system if necessary cry if not enough storage ; get command ("gib kommando :") analyze command (command list, text par&III type, command index, number of params, param1, param2) ; single user monitor 843/1 Zeile •••• E LAN EUMEL 55 56 57 58 59 60 61 62 63 64 collectheapgarh&geifne 65 66 67 68 69 70 initsystemifnecessary 71 72 73 74 75 76 77 78 79 cryifnotenoughstorage 80 reseteditor 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 S43/2 •••• 10.11.86 single user monitor I execute command ; I collect heap garh&ge if necessary I PER. I I Icollect heap garh&ge if necessary : I I I I I I IF heap size ) previous heap size + 6 THEN collect heap garh&ge ; previous heap size : = heap size FI. ini t system if necessary : IF session () old session THEN old session : = session continue (main channel) clear error ; init system; eumel must advertise set date; storage info FI. 81 82 83 1.8 executecommand Icry i f not enough storage lINT VAR size, used; I storage (size, used) ; I IF used ) size I THEN out (""7"Speicher Engpass! Da.teien loeschen!"13""10"") I FI. I I Ireset editor : I WHILE aktueller I quit I PER. I IENDPROC moni tor I editor ) 0 REP ........... IPROC execute command I I enahle stop ; I SELECT command index OF CASE 1 edit I edi t (paraml) CASE 2 I CASE 3 run I run (paraml) CASE 4 I run again CASE 5 I CASE 6 insert I CASE 7 lnsert (paramll I forget CASE 8 I forget (p&raml) CASE 9 I CASE 10: rename (paraml, param2) I CASE 11: copy (paraml, par&m2) I CASE 12: list I CASE 13: storage info I CASE 14: fetch (p&raml) I CASE 15: save I CASE 16: save (paraml) I CASE 17: save all I single user monitor S43/2 Zeile E LAN 1.8 I I I I I 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 EUMEL **** 10.11.86 single user monitor CASE 18: shutup CASE 19: help OTHERWISE do command ENDSELECT . IENDPROC execute command ; I IBOOL VAR hard"are clock ok IREAL VAR now; I setdate .................. IPROC set date: I I I I I I I hardware clock ok : = TRUE ; try to get date and time from hardware IF NOT hard"are c lock ok THEN get date and time from user FI; define date and time . I I 130 131 132 133 134 135 136 137 138 139 140 141 trytogetdateandtimefro Itry to get date and time from hardware I disable stop ; I REAL VAR previous no" ; I now:= 0.0 ; I INT VAR try ; I FOR try FROM 1 UPl'O 3 WHILE hardware clock ok REP I previous no" : = no" ; I now:= date (hardwares today) + time (hardwares time) I UNTIL now = previous now OR is error PER ; I clear error I enable stop I 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 getdateandtimefromuser Iget date and time from user : line (2) ; put (" Bi tte geben Sie das heutige Datum ein :") date text: = date ; TEXT VAR exit char ; editget (date text, cr, "", exit char) now: = date (date text) line ; put (" und die aktuelle Uhrzeit :") date text : = time of day ; edi tget (date text, cr, "", exit char) ; now INCR time (date text) ; IF NOT last conversion ok THEN errorstop ("Falsche Zeitangabe") FI . 158 hardwarestoday I calendar (3) + + calendar (4) + calendar (2) + + calendar (1) . I I 159 160 161 hard"arestime 162 163 164 definedateandtime S43/3 Ihardwares today : I calendar (5) Ihard"ares time I I Idefine date and time I set clock (now) . I single user monitor S43/3 Ze1le E LAN .*** 1. 8 1ENDPROC 165 166 167 168 169 170 171 172 173 174 175 EUMEL 10.11. 86 single user monitor set date 1 calendar ................. 1TEXT PROC calendar (INT CONST index) 1 1 1 1 INT VAR bed ; control (10, index, 0, bed) ; IF bed < 0 THEN hardware clock ok := FALSE· "" ELSE text (low digit + 10 * high d1git) 1 Fl. 1 1 1 176 177 lowigi t 178 179 highdigit 1 1 low digi t bed AND 15 . 1 1 Ihigh digit: lee 1 1ENDPROC 181 1 182 183 184 185 186 187 188 189 190 191 192 ~3 194 195 196 197 (bcd AND (15*256» calendar ; shutup ................... 1PROC shutup 1 1 1 1 1 1 page; cursor (32, 15) ; put ("bi tte warten") cursor (35, 12) ; system operation (shutup code) 1 1ENDPROC shutup 1 savesystem ............... 1PROC save system : 1 1 1 1 1 archive ("save") IF yes ("Leere Floppy e1ngelegt") THEN system operat1on (shutup and save code) Fl. ~8 1 199 200 1 1ENDPROC 201 1 202 203 204 205 206 207 collectgarbageblocks ..... 1PROC collect garbage blocks 208 209 210 211 212 213 fixpcint ................. 1PROC fixpcint : S43/4 DIV 256 . 1 1 save system system operation (garbage collect code) 1 1ENDPROC collect garbage blocks ; 1 1 1 system operation (fixpc1nt code) 1 1ENDPROC fixpcint 1 s1ngle user monitor S43/4 Zeile 214 215 216 217 E LAN EUMEL 1.8 **** single user monitor 10.11.86 systemoperation .......... PROC system operation (INT CONST code) INT VAR size, used ; storage (size, used) IF used <= size THEN disable stop ; sys op (code) ; ignore start message error ELSE errorstop ("nicht genuegend System - Speicher vorhanden") FI . 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 S43/5 ignorestartmessageerro Iignore I pause I clear I IENDPROC I start message error (5) ; error . system operation sysop .................... IPROC sys op (INT CONST code) I EXTERNAL 90 IENDPROC .ys op ; I setclock ................. IPROC set clock (REAL CONST time) I EXTERNAL 103 IENDPROC .et clock ; I IENDPACKET single user monitor single user monitor S43/~ Zeile 1 2 3 4 5 6 7 8 44/1 E LAN EUMEL 1.8 Ike •••• 10.11.86 sysgen off (. ma.intenance ke *) I sysgenoff ................ IPROC sysgen off (INT CONST mode, INT VAR a,b,c,d,e,f,g,h,i,j,k) I EXTERNAL 256 IENDPROC sysgen I off lINT VAR x : = 0 ; Isysgen off (3,x,x,x,x,x,x,x,x,x,x,x) sysgen off 44/1 Zeile 1 2 3 4 6 7 8 9 10 11 12 13 14 15 16 17 845/1 **** ELAN EUMEL 1.8 **** 10.11.86 **** ur start I Icheck on ; Icommand dialogue (TRUE) ; Iset clock (date ("19.06.86")) Idisable stop ; Isave system; IREP UNTIL yes ("help") PER larchive ("help") ; Ifetch ("help", archive) ; IREP UNTIL yes ("dev") PER larchive ("dev") ; Ifetch all (archive) Irelease (archive) Isave system Iconfigurate Iset up ; Imonitor ; ur start 845/1 E L Zelle 2 3 4 5 6 7 5 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 basicarch~ ye **** 1.8 06.03.86 --------------. archi ',e blocks I I I format archive read block • read , rewind, search da taspace • seek, size. skip dataspace write block. write: INT VAR blocknr := 0 • ._ 0 , rerun page := -1 , bi t word ._ 1 • unreadable sequence length .' 0 lINT CONST all ones : =-1 ; I I IDATASPACE VAR label ds I ILET I I I I I (* I I I write normal archive version first page stored dr size first bi t word • write de leted data mark inconsistent read error label size • I IBOUND I I I I 0 1 2 3 4 , 64 *) 90 • 92 , 131 ; STRUCT (ALIGN dummy for paf;e1, (* Page 2 begins: *) ROW label size INT lab) VAR label; blocknumber .............. I INT PROC block number : I block nr IENDPROC block number ; I 47 48 49 50 seek ..................... IPROG seek (INT CONST block) I block nr :. block IENDPROC seek ; 51 52 53 54 55 56 rewind 48/1 basic archive 10.11.86 1(* ------------------- VERSIOII 11 ************* IPACKET basic archive DE!INES I I I I I 39 40 41 42 45 46 EUMEL I block number • I check read . 38 44 N I I 34 35 36 37 43 ~. I ................... IPROC rewind : I forget (label ds); I label ds :. nilspace; I label:= label ds; I block nr := 0; I rerun: = session basic archive 48/1 Zei2.e E L !. N EUME1 IEND I 57 58 59 60 61 62 63 64 65 66 67 1.8 ...... 10.11.86 basic archive PROC rewind; skipdataspace ............ IPROC skip dataspace: I check rerun; I get label; I IF is error THEN I I ELIF olivetti THEN block nr INCR label. lab (dr size+l) I ELSE block nr INCR label. lab (dr size) I I 68 FI lEND PROC skip data.pace; 69 I 70 71 72 73 read ..................... IPROC read (DATASPACE VAR ds): I read (ds, 30000, FAlSE) IENDPROC read 74 read ..................... IPROC read (DATASPACE VAR ds, INT CONST max pages, I accept): I enable stop ; I check rerun; I get label; I init next page; I INT VAR i ; I FOR i FROM 1 UPTO max pages REP I next page; I IF no further page THEN LEAVE read FI; I check storage I check rerun ; I read block ; I block nr INCR 1; I PER. 75 76 77 78 79 80 81 82 83 84 85 86 87 I 88 89 readblock 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 48/2 ignorereaderrorifnoerr checkstorage I I Iread block I disable .top I get external block (ds, page, block nr) I ignore read error if no errors accepted I enable stop . I I I ignore read error if no errors accepted : I IF is error CAND error code = read error I THEN clear error I FI. I I Icheck storage : I INT VAR size, used ; I storage (size, used) I IF used > size I THEN forget (ds) ; I ds : = nils pace I errors top ("Speicherengpass") I LEAVE read I FI. basic archive oooL CONST error CAND NOT error accept 48/2 ZeLe EL N EUMEL 1. -'l ..** 10.11. 86 basic archive I I 109 110 111 112 113 114 115 116 117 ~. checkrerun Icheck rerun I IF rerun () session I THEN errors top ("RERUN I LEAVE read I I IEND I beim Archi v-Zugriff") FI. PROC read; 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 checkread •.•..••••••...•• I PROC check read I I enable stop ; I get label ; I INT VAR pages, i; I IF olivetti THEN pages - label. lab (dr size+1) I ELSE pages - label. lab (dr size) I I FI ; I FOR i FROM 1 UPI'O pages REP get external block (label ds, 2, block nr) I block nr INCR 1 I I PER . I IENDPROC check read I 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 IIri te .................... I PROC IIri te (DATASPACE CONST ds): enable stop ; check rerun; INT VAR labe 1 block nr : = block nr; block nr INCR 1; ini t label; INT VAR page := -l,i; FOR i FROM 1 UPI'O ds page s (ds) REP check rerun ; page := next ds page(ds,page); put external block (ds, page, block nr) reset archive bit; label.lab(dr size) INCR 1; block nr INCR 1 PER; put label. . . 151 152 153 154 155 156 157 158 159 ini tlabel ini t label: label.lab(archive version) : = 0 ; label.lab( first page stored) : = 0 laool.lab(dr size) := 0; INT VAR j; FOR j FROM first bi t lIord UPI'O label size REP label.lab (j) : = all ones PER. 160 161 162 putlabel put label: put external block (label ds, 2, label block nr). 48/3 basic a.rchive 48/3 Zelle 163 164 165 166 167 168 169 170 171 172 173 174 E LAN EUMEL resetarchivebit 1. 8 I I I **** basic archive 10.11. 86 reset archive bit: reset bit (label.lab (~e DIV 16+flrst bit word), ~e MOD 16). lEND PROC write; I getlabel ................. IPROC get label: I I enable stop ; I get external block (label ds, 2, block nr) I block nr INCR 1; I check label. I I 175 176 177 178 179 180 checklabel Icheck label: I IF may be z80 format label OR may be old olivetti format label I THEN I ELSE errorstop (inconsistent, "Archiv inkonsistent") I FI. I 181 182 183 maybez80formatlabel 184 185 maybeoldolivettiformat Imay be old olivetti format label: I olivetti AND label.lab(first ~e stored):!;) AND label.lab(dr I size+1) ) 0 . I I IEND 186 187 PROC get label; I 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 lmay be z80 format label: z80 archive AND label.lab(dr size) ) 0 . I I I next~e. . . . . . . . . . . . . . . .. PROC next ~e: IF z80 archive THEN WHILE labelbi ts = all ones REP bitword INCR 1; IF bi tword ) = label size THEN no further ~e : = true; i.EAVE next ~e FI PER; INT VAH p : = lowest reset (labelbits); set bit (labelbits, p); ~e := 16*(bitword-first bit word)+p ELSE WHILE oli bi ts = 0 REP bi tword INCR 1; IF bitword ) = labelsize-64 THEN no further ~e := true; LEAVE next ~e FI PER; P : = lowest set (oli bits); reset bit (olibi ts, p); ~e . _ 16*(bitword-firstbitword)+p; FI. 211 labelbits label bits: label.lab (bitword). 212 213 214 olibi ts oli bits: label. lab (bitword+l). 48/4 lEND PROC next ~e; basic archive 48/4 Zelle E LAN 216 217 olivetti 218 219 zOOarchive 220 221 222 223 ini tnextpage 224 225 226 227 checkrerun 48/5 Iolivetti I I IzOO archive label.lab (archive version) label.lab (archive version) -1. 0. I init next page: I 800L VAR no further page : = false; I bi tword : = first bit word. I I Icheck rerun : IF rerun <) sess ion I THEN errorstop ("RERUN beim Archiv-Zugriff") I Fr. I I I I I I I I I I I I I readsucceeded 243 244 254 255 256 257 258 259 260 261 262 263 264 265 266 basic archive getexternalblock ......... IPROC get external block (DATASPACE VAR ds, INT CONST page, I INT CONST block nr): 241 245 246 247 248 249 250 251 252 253 10.11.86 I 231 232 233 234 235 236 237 238 239 240 242 **** I I 2re 230 1.8 I. I 215 229 EUMEL readfailed INT VAR error ; read block (ds, page, block nr, error) SELECT error OF CASE 0: read succeeded CASE 1: error stop ("Lesen unmoeglich (Archiv)") CASE 2: read failed CASE 3: error stop ("Archiv-Ueberlauf") OTHERWISE error stop ("11? (Archiv)") END SELECT . Iread succeeded : I unreadable sequence length . = 0 . I I Iread I I I I I I failed : unreadable sequence length INCR 1 ; IF unreadable sequence length )= 30 THEN errors top ("30 unlesb&re Bloecke bintereinander") ELSE error stop (read error, "Lesefehler (Archiv)") Fr. IEND PROC get external block; I putexternalblock. . . . . . . .. PROC put external block (DATASPACE CONST ds, INT CONST page, INT CONST block nr): INT VAR error; wri te block (ds, page, write normal, block nr, error) SELECT error OF CASE 0: CASE 1: error stop ("Schreiben unmoegl1ch (Archiv)") CASE 2: error stop ("Schreibfehler (Archiv)") CASE 3: error stop ("Archiv-Ueberlauf") OTHERWISE error stop ("?11 (Archiv)") END SELECT . IEND PROC put external block; basic archive 48/5 Zeile E LAN EUMEL 1.8 •••• 10.11.86 basic archive 267 268 269 270 271 272 273 274 readblock ................ IPROC read block (DATASPACE VAR ds, I INT CONST ds ~e no, I INT CONST block no, I INT VAR return code) I read block; I retry if read error. I I 275 276 277 readblock 278 279 280 281 282 283 284 retryifreaderror 285 286 287 288 289 290 291 resettoblock0iffifthtr Ireset to block 0 if fifth try: I IF retry = 5 I THEN block in (ds, ds ~e no, 0, I FI. I IEND PIIOC read block; I 292 293 294 295 296 297 298 299 Iread block: I block in (ds, ds ~e no, 0, block no, return code). I I Iretry if read error: I INT VAR retry; I FOR retry FROM 1 UPl'O 10 WHILE return code I reset to block 0 if fifth try; I read block I pm. 2 REP I I e, return code) wri teblock ............... IPROC write block (DATASPACE CONST ds, I INT CONST ds ~e no, I INT CONST mode, I INT CONST block no, I INT VAR return code): I wri te block; I retry if write error. I I 300 :301 :302 writeblock :303 :304 :305 :306 :307 retry1fwriteerror Iwrite block: I block out (ds, ds I ~e no, mode • 256, block no, return code) . I 308 :309 Iretry if write error: I INT VAR retry; I FOR retry FROM 1 UPl'O 10 WHILE return code I reset to block 0 i f fifth try; I wri te block I pm. I 2 REP I 310 311 312 313 314 315 316 317 318 resettoblock(;)ift'1fthtr Ireset to block (;) it' fifth try: I IF retry = 5 I THEN disable stop; I DATASPACE VAR dummy ds : = nllsp&Ce; I block 1n (dummy ds, 2, 0, 0, return code); I forget (dummy ds); I enable stop I FI. 48/6 basic archive I 48/6 Zeile E LAN EUMEL 1.8 •••• 10.11.86 basic archive lEND PROC write block; 319 320 I 321 322 323 324 325 326 327 328 size ....................• lINT PROG size (INT CaNST key) 329 330 331 332 archi veblocks ............ lINT PROG archive blocks : I size (0) IENDPROG archi ve blocks ; 333 334 335 336 337 338 339 340 341 342 343 344 345 346 searchda taspace .......... IPROG se'arch da taspace (INT VAR ds pages) I I I I I IENDPROG size ; I I I I disable stop ; I ds pages : = -1 lINT CaNST last block : = archive blocks I I WHILE block nr < last block REP I IF block is dataspace label I I I I I blockisdataspacelabel 358 359 lookatlabelblock 360 361 362 363 365 366 367 368 369 370 371 48/7 THEN ds pages : = pages counted LEAVE search dataspace FI; block nr INCR 1 UNTIL is error PER I I 347 348 349 350 351 352 353 354 355 356 357 364 INT VAR return code control (5, key, 0, return code) return code . block is dataspace label look at label block ; IF is error THEN IF error code = read error OR error code inconsistent THEN clear error FI ; FALSE ELSE count pages number of pages as label says pages counted FI . Ilook at label block: lINT CaNST I old block nr : = block nr ; I get label ; I block nr : = old block nr. I I countpages Icount pages : INT VAR I pages counted : = 0 I ini t next page ; I next page ; I WHILE NOT no further page REP pages counted INCR 1 ; I next page I I basic archive 48/7 Zelle E LAN EUMEL 1.8 **** 1e.11.86 basic archive PER . 372 37:5 374 375 376 377 378 numberofpagesaslabelsa I number of pages as label says IENDPROC search da taspace I formatarchive ............ IPROC format archive (INT CaNST format code) ~9 I 380 381 382 383 384 I I I 385 formatispossible 386 387 388 3ge 48/8 I I I IF format 1s possible THEN format ElSE errors top ("' format' ist hier nicht implement1ert") Fl. Iformat is possible; I INT VAR return code I control (l,e,e, return code) I bit (return code, 4) . I I 389 391 392 393 394 395 396 397 398 399 400 label.lab (dr size) . I format Iformat I control (7, format code, 13, return code) ; I IF return code ; 1 I THEN errorstop ("Formatieren unmoeglich") I ELIF return code ) 1 I THu'i errors top ("Schreibfehler (Archi v)·) I Fl. I IENDPROC format archive ; I IEND PACKET basic archive; basic archive 48/8 Zeile 1 ••- ELAN archivesingle EUMEL 1.8.*** I 2 I 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 archi ve single •••• (. Autor: ••••••••••-IPACKET archive single DEFINES + + 10.11.86 I I I I I I I I J . Liedtke· ) (. 8tand: 31.07.85 .) archive, release , save, fetch, erase, check , exists, I ALL , I clear , list, format: I I I I I ILET archive channel I mai n channe 1 31 1 I I I I I I read error 92 , max files = 200 , start of volume 1000 end of volume 1 file header 3 number of header blocks 2. quote dummy name dummy date 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 ~2 53 54 55 56 57 58 59 60 S49/1 HEADER STRUCT (TEXT name, date, INT type, TEXT password) ITEXT VAR archive name : = nn , write stamp I IREAL VAR last access time : = 0.0 ; I IBOOL VAR was already write access := FALSE I I IDATASPACE VAR header space . = nilspaca , ds : = nilspace IBOUND HEADER VAR header; I ITEXT VAR file name: = I ILET invalid • 0 , I read only 1 I valid 2 I ILET accept read errors I ignore read errors TRUE, FALSE; I I lINT VAR directory state := invalid I archi va single 849/1 Zeile E LAN EUMEL 1.8 -** 10.11.86 **** ITHESAURUS VAR directory , all names 61 62 63 64 65 66 67 68 69 70 71 lINT VAR dir index ; I lINT VAR archive size I lINT VAR end of volume block IROW max files INT VAR header block IROW max files TEXT VAR header date I I I 72 73 74 75 76 77 78 79 80 archive .................. IPROC archive (TEXT CONST name) 81 82 83 84 85 86 87 release .................. IPROC release (TASK CONST t) : 88 89 90 91 92 93 94 95 96 accessarchi ve ............ IPROC access archive : 97 98 99 archi ve single I I I I I I disable stop ; directory state .- invalid; archi va name : = name ; last access time : = clock (1) IENDPROC archive I I I directory state .- invalid I IENDPROC release; I I I I I I I I IF directory state = invalid THEN open archive ELIF last access more than two seconds ago THEN check volume name ; new open i f somebody changed medium I Fl. I I lastaccessmorethantwos Ilast access more than two seconds ago : I abs (clock (1) - last access time) , 2.0 I I 100 101 102 103 104 105 newopenifsomebodychang Inew open if somebody changed medium I IF header. date () write stamp I THEN directory state . - invalid I access archive I Fl. 106 107 10e 109 110 111 112 113 openarchive S49/2 I I lopen archive I directory state : = invalid I check volume name ; I write stamp : = header. date I was already write access : = FALSE I read directory ; I make directory valid if no read errors occurred . I archive single 849/2 Zeile E LAN EUMEL 1.8 **** 10.11.86 archive single 114 115 116 11 7 118 119 120 121 122 123 124 125 126 127 readdirectory 128 129 130 131 132 133 134 makedirectoryvalidifno Imake directory valid if no read errors occurred I IF directory state = invalid I THEN directory state : = valid I FI 135 136 137 138 139 140 141 I PER. I I I IENDPROC access archi ve I accessfile ............... IPROC access fi Ie (TEXT CONST name) I I I 154 155 156 157 158 159 160 161 162 163 164 165 166 167 S49/3 file name : = name dir index .- link (directory, file name) . I IENDPROC access file I I ~2 143 144 145 146 ~7 148 149 150 151 152 153 I read directory : I directory: = empty thesaurus I rewind; I get next header ; I WHILE header. type = file header REP I IF directory CONTAINS header. name I TIIEN rename (directory, header. name, dummy name) I FI; I insert (directory, header. name , dir index) ; I header block (dir index) : = end of volume block I header date (dir index) := header.date ; I get next header ; checkvolumename .......... IPROC check volume name I I I I I I I disable stop ; archive size : = archive blocks ; read volume header ; IF header. type () start of volume THEN simulate header (start of volume, "?????") ELIF header. name () archive name THEN errors top ("'Archiv heisst ""'" + header. name + """") I I FI. I readvolumeheader I I read volume header I rewind; I read header ; I IF is error I THEN clear error I simulate header (start of volume, "?????") I Fl. I IENDPROC check volume name I getnextheader ............ IFROC get next header I I I disable st~p ; skip da taspa.ce archi ve single 549/3 Zeile E LAN EUMEL 1.8 **** 10.11.85 archi ve single IF NOT is error THEN read header 168 169 170 FI; IF is error THEN clear error ; directory state .- read only search header 171 172 173 174 175 175 FI; end of volume block : = block number - number of header blocks . 177 178 179 searchheader 180 181 182 183 184 185 186 187 isheaderspace 188 Isearch header lINT VAR ds pages I search da taspace (ds pages) I IF ds pages ( 0 I THEN simula.te header (end of volume, "") I ELIF NOT is header space I THEN simulate header (file header, "????? " + text (bl?ck I number)) I FI. I I I is header space : I IF ds pages () 1 THEN FALSE ELSE remember position 189 190 read header ; IF read error occurred THEN clear error; back to old position; FALSE ELIF header format looks ok 191 192 193 194 195 196 197 198 199 200 THEN TRUE ELSE back to old position FI . readerroroccurred 201 202 203 204 205 headerformatlooksok 206 207 208 rememberposl tion 209 210 211 212 213 214 215 Z6 217 218 219 220 S49/4 FALSE FI Iread error occurred : I is error CAND error code I I Iheader forma. t looks ok : I read error . header. type = file header OR header. type end of volume . I I Iremember position lINT CONST old block nr : = block number . I backtooldposi tion I Iback I to old position : seek (old block nr) . I IENDPROC I I get next header fetch .................... IPROC fetch (TEXT CONST file name) I I I fetch (file name, archive) IENDPROC fetch I arch i ve single S49/4 Zeile 221 222 223 224 225 226 227 228 229 E LAN I I I I I I I 243 244 245 246 247 248 249 overwri tepermi tted Iget archive file: I last pa.ram (file name) ; I disable stop ; I continue (archive channe l) I fetch file (file name) ; I last access time : = clock (1) I continue (main channel) ; I IF NOT is error I THEN forget (file name, quiet) I copy (ds, file name) I FI; I forget (ds) I I loverwrite permi t ted : I say ("eigene datei """) I say (file name) ; I yes ("." ueberschreiben") I IENDPROC fetch ; I fetchfile ................ IPROC fetch file (TEXT CONST name) I I enable stop ; I access archive I access file (name) I IF no read error remarked I THEN disable stop ; I fetch ds (accept read errors) I IF read error occurred I THEN remark read error _ I 261 262 263 264 I I 265 266 267 noreaderrorremarked 268 readerroroccurred I I I TI; enable stop ELSE fetch ds (ignore read errors) Fl. Ino read error remarked: I pos (name, " mit Lesefehler") 0. I I 269 270 S49/5 enable stop; IF NOT (from = archive) THEN errors top ("Task gibt es nicht") ELIF NOT exists (file name) COR overwr1 te permitted THEN get archive file Fl. I I getarchi vefile 271 272 273 274 275 archive single 10.11.86 fetch .................... IPROC fetch (TEXT CONST file name, TASK CONST from) 2:30 231 232 233 2M 235 236 237 238 239 240 241 242 250 251 252 253 254 255 256 257 258 259 EUMEL 1.8 **** remarkreaderror Iread error occurred I is error AND error code read error . I I Iremark read error I dir index : = link (directory, file name) I REP I I file name CAT " mit Lesefehler" ; UNTIL NOT (directory CONTAINS file name) PER archi ve single S49/5 Zeile E LAN 280 281 284 285 286 287 288 289 10.11.86 archi ve single I IF LENGTH file name ( 100 I THEN rename (directory, dir index, file name) I Fl. I IENDPROC fetch file I 276 277 278 279 282 283 EUMEL 1.8 ***. fetchds .................. IPROC fetch ds (BOOL CONST error accept) I I enable stop I IF file name (> dummy name I THEN fetch from archive I ELSE error ("Name unzulaessig") I Fl. I 290 291 292 293 294 295 296 297 298 299 300 fetchfromarchi ve 301 302 303 positiontofile 304 305 306 307 fileindirectory I Ifetch from archive I IF file in directory I THEN position to file I forget (ds) ; I ds : = nilspace ; I read (ds, 30000, error accept) ; I ELIF directory state = read only I THEN error ("gibt es nicht (oder Lesefehler)") I ELSE error ("gibt es nicht") I Fl. I I I posi tion to file : I seek (header block (dir index) + number of header blocks) . I I Ifile in directory: I IENDPROC fetch ds ; I dir index> 0 . 308 309 310 311 312 M3 erase .................... IPROG erase : I I erase (last param) 314 315 316 317 318 319 erase .................... IPROC erase (TEXT CONST file name) 320 321 322 323 324 325 326 erase .................... IPROC erase (TEXT CONST file name, TASK CONST dest) S49/6 I IENDPROC erase I I I erase (file name, archive) I IENDPROC erase I I I I I I I = archive THEN disable stop continue (archive channel) ; erase on archive (file name) last access time := clock (1) ; IF dest a.rchive single 649/6 Zeile E LAN 1. 8 EUMEL **** 327 328 I 329 FI , 'ENDPROC erase , , 348 349 350 351 352 3~3 354 355 356 357 358 359 360 361 362 363 364 365 ~ 367 archi ve single continue (main channel) ELSE errors top ("Task gibt es nicht") , 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 10. 11. 86 eraseonarchi ve ........... , PROC erase on archive (TEXT CONST file name) , , enable stop ; , access archive , access file (file name) ; , continue (main channel) ; , IF NOT file in directory , THEN putline ("gibt es nicht") ' L E A V E erase on archive , ELIF NOT yes (""""+file name+ ftM " loeschen") , THEN LEAVE erase on archive 'Fl; I continue (archive channel) , erase archive entry . , , fileindirectory 'file in directory: dir index ) 0 . , 'ENDPROG erase on archive , erasearchi veentry ........ , PROG erase archive entry : , , IF directory state = read only , THEN errors top ("' save' /'erase' wegen Lesefehler verboten") , ELSE update write stamp if first write access; ' e r a s e archl ve 'Fl. , , updatewritestampiffirs ,update write stamp if first write access , IF NOT war. already write access , THEN rewind ; ' w r i t e stamp := text (clock (i), 13, 1) ; , w r i t e header (archive name, write stamp, start of volume) ' w a s already write access . - TRUE , Fl. , , 368 369 370 371 372 373 374 375 erasearchive 'erase archive : , IF file in directory , THEN IF is last file of archive ' T H E N cut off all erased files ' E L S E rename to dummy 'FI , Fl. , 376 fileindirectory 'file in directory 377 S49/7 , dir index ) 0 . , archive single S49/7 Zene 318- E LAN isl&stfileofarchi ve 379 38e 1.8 .." .." EUMEL cutoffallerasedfi les lis last file of archive I I 381 382 383 archi ve single 10.11.86 dir index. highest entry (directory) . cut off all erased files : directory state : = invalid REP delete (directory, dir index) dir index DECR 1 UNTIL dir index = 0 COR name (directory, dlr index) <> dummy name 384 385 PER ; behind last valid file ; wri te end of volume ; directory state := valid 386 387 388 389 390 391 392 393 behindlastvalidfile 394 395 396 397 398 399 renametodummy Ibehind last valid file : I seek (header block (dir index + 1)) I end of volume block := block number I I 400 401 402 403 404 405 406 407 408 409 tofileheader 415 416 Ito file header: I seek (header block (dir index)) I IENDPROC erase archive entry ; I 410 411 412 413 414 rename to dummy : directory state . - invalid to file header read header ; to file header header. name : = dummy name header.date : = dummy date write (header space) ; rename (directory, file name. dummy name) header date (dir index) : = dummy date ; directory state := valid. save ..................... IPROC I I save : save (last param) I IENDPROC I save ; 417 418 419 420 421 422 save _.................... IPROC save (TEXT CONST file name) 423 424 425 426 427 428 save ..................... IPROC save (TEXT CONST file name. TASK CONST to) S49/8 I I save (file name, archive) I IENDPROC I save I I I I I IF to = archive THEN disable stop continue (archive channel) ; save to archive (file name) ; archive single 849/8 Zeile E LAN 429 430 431 1 1 1 4~ 10.11.86 •••• archive single last access time : = clock (1) ; continue (main channel) ELSE errorstop ("Task gibt es nicht") n. 1 4~ 434 435 436 437 438 439 440 441 442 443 444 EUMEL 1.8 •••• 1 1 ENDPROC save 1 savetoarchi ve ............ 1PROC save to archive (TEXT CONST file name) 1 1 1 1 1 1 1 1 «5 enable stop ; access archive access file (file name) continue (main channel) IF file in directory THEN IF NOT yes ("ftft" +file name+"ftft ueberschreiben") THEN LEAVE save to archive n 1 446 447 448 449 450 451 452 453 454 455 456 457 1 1 1 1 1 1 1 1 1 1 1 FI; continue (archive channel) access archive ; access file (file name) ; erase archive entry ; IF file name = dummy name THEN error ("Name unzulaessig") ELIF file too large OR highest entry (directory) max files THEN error ("kann nicht geschrieben werden (Archiv vall)") ELSE write new file Fl. )= 1 1 458 459 fileindirectory 460 461 462 filetoolarge Ifile in directory dir index) 0 . 1 1 1file too 1 end of large : volume block + ds pages (ds) + 5 ) archive size 1 1 1write 463 464 465 466 467 468 469 470 471 472 473 474 wri tenewfile new file : seek (end of volume block) disable stop ; wri te file (file name. old (file name» IF is error THEN seek (end of volume block) ELSE insert (directory. file name. dir index) remember begin of header block ; remember date FI ; wri te end of volume . 475 476 477 rememberbeglnofheaderb Iremember begin of header block: 1 header block (dir index) : = end of volume block . 478 479 480 rememberdate 1 1 481 Iremember date header date (dir index) := date . 1 1ENDPROC save to archive ; 482 1 549/9 1 archive single 549/9 Zeile 483 484 485 486 487 488 489 490 491 82 493 494 495 496 497 498 E LAN EUMEL 1. 8 -** 10.11.86 archive single writefile ................ IPROC write file (TEXT CaNST file na.me, DATASPACE CONST ds) I I eMble stop ; I wr1 te I write I IENDPROC I header (file lI&DIe, date, file header) (ds) write file wri teendofvolume ......... I PROC write end of volume I I I I I disable stop ; end of volume block : = block number ; write header ("", "", end of volume) I ENDPROC write end of volume ; I 499 500 501 502 503 504 505 506 507 508 509 510 511 512 writeheader .............. I PROC write header (TEXT CaNST name, date, INT CaNST header type) 513 514 515 516 517 518 M9 520 521 re& ' ' ' ' THEN IF NOT yes (wa.rcbiv W"w+header.name+ WW " loescben") THEN LEAVE c lea.r archi ve FI ELSE IF NOT yes ("a.rchi v initialisieren W) THEN LEAVE clea.r archive FI FI ; continue (archive channel) 710 711 712 713 714 715 716 717 718 719 720 721 722 IENDPROC clea.r archive I format ................... IPROC format (INT CONST form&t code, TASK CONST dest) 723 I 724 725 I I I I I I I I I I I I 726 727 728 729 730 731 732 733 734 735 I 736 737 738 739 I I 740 741 742 743 744 745 S49/14 a.rchive single ask for erase all ; directory state := invalid 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 10.11.86 I IF dest = a.rchi ve TIlEN IF yes (WW7 WFor01&tieren ueberschreibt alles! Richtlge Diskette elngelegt W) THEN disable stop ; continue (a.rchi ve channel) , form&t a.rchive (form&t code) directory state : = invalid ; rewind ; write header ( a.rchive name, text (clock (1),13,1) ,sta.rt of volume) wri te end of volume ; continue (main channel) FI ELSE errcrstop ("Task gibt es nicht") Fl. IENDPROC format I form&t ................... IPROC format (TASK CONST dest) I I format (0, dest) I IENDPROC format ; I a.rchive single 849/14 Zelle 746 747 748 749 750 751 752 849/15 E LAN error EUMEL 1.8 _.. 10.11.86 a.rchi ve single .................... IPROC error (TEXT CONST error msg) : I I errorstop (---- + file name + n_ I IENDPROC error ; I + error msg) IENDPACKET archive single archi V8 single 849/15 Zeile 1 2 3 4 5 6 7 8 9 19 11 12 13 14 15 16 17 18 19 2Cil 21 22 23 E LAN EUMEL 1.8 _.. I I I I I I I I I I I I I ans 1 cursor, b&ucirate, bits, cursor logic , elbi t cursor , enter incode enter outcode , flow, 1nput buffer size link , new configurat10n , new type , ysize: I ILET max d type nr I device table I ack = 9 ; I IBOUND 31 32 33 34 35 36 37 38 t 5, (.. maximum number of act1 ve dev1ce tables .. ) 32889, I 27 29 22.94.86 ------------------- .. ) ( .. Autor: D.Heinrichs .. : I I I I 3Cil konfigurieren 1(" ------------------- VERSION 4 konfigur1eren --"--IPACKET konfigurieren DEFINES 24 25 26 28 19.11.86 lINT VAR next outstring, I next 1nstr1ng; I I I I STRUCT (ALIGN space, umsetzcodetabelle .. ) ROW 128 INT ou tcodes , ROW 64 INT outstrings, ROW 64 INT instrings) VAR x; ( .. I I IROW max dtype nr DATASPACE VAR device code table; I ITHESAURUS VAR dtypes I I 39 49 41 42 43 44 45 46 47 48 49 59 51 newconf1gura tion ......... IPROC new configuration : 52 53 54 55 56 57 blockout ................. IPROC block out (DATASPACE CONST ds, INT CONST page, code): I INT VAR err; I block out (ds,page,9,code,err); I announce error (err) IEND PROC block out; 52/1 I I I I I I I I I d type s : = empty the saurus INT VAR i ; insert (dtypes, "psi", i) ; insert (dtypes, "transparent", i) ; FOR i FROM 1 UPI'O max d type nr REP forge t (dev i ce code table (i» PER. IENDPROC new conf1guration I I I konfigurieren 52/1 Zeile E LAN EUMEL 1. 8 ...... 10.11. B6 konfigurieren 58 59 60 61 62 63 64 65 66 67 announceerror ............ IPROC announce error (INT CONST err): I SELECT err OF I CASE 0: I CASE 1: errors top ("unbekanntes Terminalltomma.ndo") I CASE 2: errorstop ("Nummer der Terminal-Typ-Tabelle falsch") I CASE 3: errorstop ("falsche Terminalnummer") I OTHERWISE errorstop ("blackout: unzula.essiger Ka.na.l") I ENDSELECT IEND PROC announce error; 68 69 70 71 flow ..................... IPROC flow (INT CONST nr, INT CONST dtype): I control (6, dtype, nr) IEND PROC flow; 72 73 74 75 ysize .................... IPROC ysize (INT CONST channel ,new size, INT VAR old size) I control (11, channel, new size, old size) IENDPROC ysize 76 77 78 79 80 inputbuffersize .......... IPROC input bu1"fer size (INT CONST nr,size): I INT VAR err; I control (2,nr,size,err) IEND PROC input buffer size; 81 82 83 baudrate ................. IPROC baudrate (INT CONST nr, rate) I control (8, rate, nr) IENDPROC baudra te B4 I I I I I 85 B6 87 88 bits ..................... IPROC bits (INT CONST channel, number, parity) I bits (channel, number-l + a..parity) IENDPROC b1 ts ; 89 90 91 92 bits ..................... IPROC bits (INT CONST channel, key) I control (9, key, channel) IENDPROC bi ts 93 94 95 96 97 98 99 control .................. IPROC control (INT CONST function, key, channel) ~ 101 102 103 104 52/2 I I I lINT VAR err ; I IF key ) -128 AND key < 127 I THEN control (function, channel, key, err) I ELIF key = -128 I THEN control (function, channel, -maxint-1, err) I IT I IENDPROC control I I konfigurieren 52/2 Zelle E LAN 1.8 **** EUMEL 10.11.86 konfigurieren 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 nelltype .................. IPROC nell type (TEXT CONST dtype): I x: = nell (dtype); I type (old (dtype), device ta.ble); I next outstring : = 4; I next instring : = 0; I INT VAR i; I (* Defaults, dami t trmpret den cursor mi tfuehrt: *) I FOR i FROM 1 UPl'O 6 REP I enter outcode (i, i ) I PER; I enter outcode (8,8); I enter outcode (10,10); I enter outcode (13,13); I enter outcode (14,126); I enter outcode (15,126); IEND PROC nell type; I 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 activatedtype ............ IINT PROC activate dtype (TEXT CONST dtype): I I INT VAR i := link (dtypes, dtype); I IF (exists (dtype) CAND type (old (dtype)) = device ta.ble) I THEN IF i <= 0 I THEN insert (dtypes, dtype, i); I FI; I forget(device code ta.ble (1-2)); I device code ta.ble (1-2) :a old (dtype) I FI; I IF i ) max dtype nr +2 (* 5 neue Typen erLaubt *) I THEN delete (dtypes,i); I error stop ("Anzahl Term1naltypen ) "+text (i));0 I ELIFi<=0 I THEN error stop ("Unbekannter Term1naltyp" + dtype); 0 I ELSE i I I 138 139 140 141 Flo lEND PROC activate dtype; I 142 143 144 145 146 147 148 149 150 151 152 153 154 155 link.................... PROC link (INT CONST nr, TEXT CONST dtype): 156 157 158 159 160 enteroutcode ............. IPROC enter outcode (INT CONST eumel code, ziel code): 52/3 konfigurieren INT VAR 1st nr := activate dtype (dtype)-3; IF 1st nr < 0 THEN 1st nr INCR 256 (. fuer std term1nal und std device *) ELSE blockout (device code ta.ble(lst nr+1), 2, 1st nr); fI; INT VAR err : = 0; control (l,nr,lst nr,err) announce error(err) lEND I I I I I I PROC link; IF ziel code < 128 THEN simple entry (eumel code, z1el code) ELSE enter outcode (eumel code, e, code (z1el code)) 52/3 Zeile E LAN I 161 162 163 164 165 166 167 168 169 170 171 172 173 174 H5 176 177 1.8 **** EUMEL 10.11.86 konfigurieren Fl. I IENDPROC enter outcode I simpleentry .............. IPROC simple entry (INT CONST eumel code, ziel code) I I INT CONST position : = eumel code DIV 2 +1, I teil : = eumel code - 2*posi tion + 2; I TEXT VAR h : =" "; I replace (h,l,out word); I replace (h,l+teil,code (zlel code»; lout word :. (h ISUB 1). I outword I lout word: x.outcodes (position). I IEND PROC simple entry ; I 190 191 192 193 enteroutcode ............. IPROC enter outcode (INT CONST eumel code, wartez9it, TEXT CONST sequenz): I I INT VAR i; I simple entry (eumel code, next outstring + 128); I enter part (x.outstrings, next outstring, wartezeit); I FOR i FROM 1 UPTO length (sequenz) REP I enter part (x. outstrings , next outstring + i, code I (sequenzSUB1) ) I PER; I next outstring INCR length ( sequenzl+2; I abschluss. I I I abschluss a.bschluss: I enter part (x.outstrings, next outstring-l, 0) I lEND PROC enter outcode; I 194 195 196 197 enteroutcode ............. IPROC enter outcode (INT CONST eumelcode, TEXT CONST wert): I enter outcode (eumelcode,code(wert» IEND PROC enter outcode; I 198 199 200 201 enterpart ................ IPROC enter part (ROW 64 INT VAR a,INT CONST index, wert): I INT CONST position := index DIV 2 +1, I teil := index - 2*position + 2; I IF position ) 64 THEN errorstop ("Ueberl&uf der I Termin<ypt&belle") FI; I TEXT VAR h :=" "; I replace (h,l,out word); I repl&ce (h,l+teil,code (wert»; I out word := (h ISUB 1). 178 179 180 181 182 183 184 185 186 187 188 189 202 203 ~4 205 206 207 208 209 52/4 I I outword lout word: & (position). lEND PROC enter part; I konfigurieren ~2/4 Zeile EUMEL E LAN 1.6 •••• 10.11.66 konfigurieren 219 211 212 213 214 215 216 217 enterincode. . . . . . . . . . . . .. PROC enter incode (INT CONST elan code, TEXT CaNST sequenz): IF elan code ) 254 OR elan code ( 0 THEN errors top ("kein Eingabecode") ELSE INT VAH i; enter part (x. instrings, next instring, elan code); FOR i FROM 1 UPTO length (sequenz) REP enter part (x.instrings, next instring + i, code ( sequenzSUBi) ) PER; 216 219 next instring INCH length (sequenzl+2; 220 221 222 FI 223 IEND PROG enter incode; 224 I 225 226 227 226 229 230 cursor logic .............. lpROG cursor logic (INT CaNST dist, TEXT CONST pre, mid, post): 231 232 233 234 235 236 anslcursor ............... IPROG ansi cursor (TEXT CONST pre, mid, post): 237 236 239 cursor logic 2413 241 242 243 244 245 246 247 248 249 250 251 252 253 52/5 I I cursor logic (dist,255,pre,mid,post) I IEND PROG cursor logic; I I I cursor logic (13, 1, pre, mid, post) I lEND PROG ansi cursor; I ...... 00 00 00 00 IPROC cursor logic (INT CONST dist, modus, TEXT CONST pre, mid, post) I I I I I I I enter enter enter enter enter part (x.outstrings,2,dist); part (x.outstrings,3,dist); part (x.outstrings,e,modus); part (x.outstr1ngs,1,modus); outcode (6,0,pre+''''E)''y''+m1d+''''E)''x''+post+'''''e'''') lEND PROC cursor logic; I elbitcursor .............. IPROG elbit cursor: I cursor logic (0, ""27"" , "" • "") ; I enter part (x.outstrings,e,2); I enter part (x.outstrings,1,255); lEND PROC elb1t cursor; I IENDPACKET konf1gurieren; konfigurieren 52/5 Zeile 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 S53/1 E LAN 1.8 EUMEL •••• configurator single 19.11.86 1(. ------------------- VERSION 11 configuratorsi ngle ....... IPACKET configurator single DEFINES I I I I I 10.06.86 ------------------- .) configura te , exec conf1gurat1on • setup: ILET baucirates = ""1"50"2"75"3"110"4"134.5"5"150"6"300"7"see 1"8"1200"9"1800"10"2490"11 "3690"12"4800"13"72e0 1"14 "9690"15"192e0"16"38490"17"", I pari ties ""0"no"1 "odd"2"even"3"" , bits per char ""9"1"1"2"2"3"3"4"4"5"5"6"6"7"7"8"8"" I I stopbits ""9"1"1"1.5"2"2"3"" • I flow modes ""0"ohne Protokoll"1"XON/XOIT"2"RTS/CTS 1"3""4""5"XON/XOIT - ausgabeseitig"6"RTS/CTS - ausgabese1tig"7""8" 1"9"XON/XOIT - e1ngabeseitig"19"RTS/CTS - e1ngabese1t1g"11"" , I I I I I I I I I I I I I I I I I I I I I I I I ok esc cr right "j" , psi transparent "psi" , "transparent" std std std std ""27"" ""13"" rate = 14 , .22, bits flow = e , 16 , inbuffer size device table ed1t terminal configuration channel III&X CONF = • 15 , 32 STRUCT (TEXT dev type, INT balld, bits par stop, flow control, inbuffer size) ; IBOUND ROW III&X ed1 t term1nal CONF VAH conf I lINT VAH channel no I ITEXT VAH prelude last feature, answer I I I shardpermits ............. IBOOL PROC shard permits (INT CONST code, key) I I INT VAH reply ; I IF key) -128 THEN control (code, I ELSE control (code, I I FI ; I reply = 9 . I channel no, key, reply) channel no, -1II&X1nt-l, reply) IENDPROC shard permi ts I configurator s1ngle S53/1 Zeile 59 60 61 62 63 64 65 E LAN EUMEL 1.8 **** 10.11.86 **** configurator single askuser .................. IPROC ask user (TEXT CONST feature, question) I I I 1 1 last feature : = feature put question ; skip pre typed chars get valid answer . 1 1 66 67 68 69 70 71 72 73 74 75 76 77 putquestion 1 clearline skippretypedchars 81 82 83 84 85 86 87 getvalidanswer 88 98 105 + 106 107 108 109 110 S53/2 I 1skip pre typed chars 1 REP UNTIL incharety "" PER • I I 1get valid answer : REP inchar (answer) 1 UNTIL pes ("jJyYnN"27"·, answer) ) 0 PER I IF answer) ·"31·· 1 TIlEN out (answer) 1 FI; lout (or) ; 1 normalize answer 1 1 1 89 90 99 100 101 102 103 104 1 1clear line : lout (cr) ; 1 79 TIMESOUT " " lout (cr) . 1 78 79 80 91 92 93 94 95 96 97 1put question 1 clear line lout (prelude) lout (feature) lout (question) ; lout (" (j/n) ") . normalizeanswer 1 1normalize answer 1 IF pes ("jJyY", 1 I : answer) ) 0 TIlEN answer . - ok Fl. 1 IENDPROC ask user 1 yes •.•••.••..•••••...•••• IBOOL PROC yes (TEXT CONST question) 1 1 ask user (.", question) ; 1 answer = ok 1 1ENDPROC yes 1 ohosekey ................. 1PROC chose key (INT VAH old key, INT CONST max key, TEXT CONST key 1 string, 1 key entity, BOOL PROC (INT CONST) shard permits): I IF shard permits at least one standard key THEN try all keys 1 FI. 1 1 oonfigurator single S53/2 E LAN Zeile EUMEL 1.8 •••• configurator single 10.11.86 I 111 I 112 113 114 115 116 117 118 119 120 sha.rdpermi tsatleastone Ishard perm! ts at least one standard key I INT VAR key ; I FOR key FROM 0 UPTO max key REP I IF shard permi ts (key) I THEN LEAVE shard permits at least one standard key Wlrn TRUE I FI I PER; I FALSE 121 122 123 124 125 126 127 tryalIkeys 128 129 130 131· 132 133 134 135 136 137 exa.minethiskey 138 139 140 keyvalue I I 142 143 keypos 145 146 nextkeypos 147 chosethlskey 149 150 151 nextkey 155 156 157 S53/3 this key : IF shard permi ts (key) CAND key value () "" TIlEN ask user (key value, key enti ty) IF answer • ok THEN chose this key ELIF answer = esc THEN key :. -129 FI Fl. I I I I I Ikey value I IF key ). 0 I THEN subtext (key I ELSE text (key) I Fl. I I Ikey pos I string, key pos + 1, next key pos - 1) pos (key string, code (key)) . Inext key pos pos (key string, code (key+l)) Ichose this key I remember calibration I old key :. key ; I LEAVE chose key I I Inext I I I 154 158 159 160 161 152 163 Iexamine I I 148 152 153 I I I I I I I 141 144 Itry all keys I key: = old key I REP I examine this key I next key I PER. I I I remembercalibration key IF key ( max key THEN key INCR 1 ELSE key := 0 Fl. Iremember calibration I prelude CAT last feature I prelude CAT ", " . I IENDPROC I chose key ; configurator single 853/3 Zelle E LAN EUMEL 1.8 *.** configurator single 10.11.86 164 165 166 167 168 169 ra teok •.................. IBOOL PROC rate ok (INT CONST key) 170 171 172 173 174 175 176 bits ok ................... IBOOl PROC bi ts ok (INT CONST key) 177 178 179 180 181 182 183 I I shard permits (8, key) I IENDPROC rate ok I I I I I IF key ( 0 THEN shard permits (9, key) ELSE some standard combination ok I Fl. I I somestandardcombinatio Isome standard combination ok I INT VAH combined : = key ; I REP I IF shard permits (9, combined) I THEN LEAVE bits ok WITH TRUE I FI; combined INCR 8 UNTIL combined , 127 PER FALSE 184 I I 185 186 187 188 I I IENDPROC I bi ts ok 189 190 191 192 193 194 195 196 197 pari tyok ...............•. IBOOl PROC pari ty ok (INT CONST key) : 198 199 200 201 202 stopbitsok ............... IBOOl PROC stopbits ok (INT CONST key) : ~3 204 205 206 207 I I I I I INT VAH combined : = key,= 0 AND (shard shard shard 8 * key permits permits permits IENDPROC parity ok I I I key,= 0 AND shard permits (9, 32 key + 8 * parity + data bits) IENDPROC stopbi ts ok ; I flowmodeok ............... IBOOl PROC flow mode ok (INT CONST key) I I shard permi ts (6, key) I ~9 211 I I I 212 213 214 215 lINT VAR operators channel , I data bits I pari ty , I stop ; 553/4 * I IENDPROC flow mode ok ; zs (9, combined) OR (9, combined + 32) OR (9, combined + 64) I ~8 210 + data bits I configurator single S~3/4 Zeile E LAN 217 218 Z9 220 221 222 223 224 225 226 227 configurate .............. 1PROC configurate : I I IT. I I ~ ini tializeconfigura tio I ini tialize configuration ; I FOR channel no FROM 1 UPI'O max edit terminal REP I conf (channel no) ; = I CONF; (transparent, std rate, std bits, std flow, std inbuffer I size) I PER; I conf (l).dev type ;= psi. I I showalldevicetypes 260 261 262 263 264 265 266 267 268 553/5 setup this channel FI; channe 1 no INCR 1 UNTIL channel no ) 15 PER ; prelude; = "" ; IF yes ("Koennen unbenutzte Geraetetypen geloescht werden") THEN forget unused device tables FI. accessconfigurationtab laccess configuration table; I IF exists ("configuration") I THEN conf ;= old ("configuration") I ELSE conf ;= new ("configuration") I ini tial1ze configuration 244 252 253 254 255 256 257 258 259 REP IF channel hardware exists THEN try thi schanne 1 ; I I I 237 + I I I I I I 236 249 250 251 new configuration access configuration table show all device types channel no ;= 1 ; I 232 233 234 235 247 248 I I I I I I I 231 245 configurator single ITEXT VAR table name, dummy 229 230 246 10.11.86 I I 228 238 239 240 241 242 EUMEL 1.8 •••• Ishow all device types I show prelude ; I begin li st ; I get lis t entry (table name, dummy) I WHILE table name <) "" REP I IF dataspace is device table I THEN show table name I FI; I get list entry (table name, dummy) I PER; I line (2) . I I showpre lude Ishow pre lude I line (30) ; I outtext (psi, 1, 20) ; I outtext (transparent, 1, 20) . I configurator single 553/:5 Zeile E LAN EUMEL 1.8..... 10.11.86 configurator single 269 270 271 dat&spaceisdevicet&ble Idat&space is device table I type (old (t&ble name)) = device table . 272 273 274 showt&blename I I I show table name : I outtext (t&ble name, 1, 20) . I I 275 276 277 278 279 280 re1 re2 trythischannel Itry this channel : pre lude : = "K&Il&l " ; I ask user ("", text (channel no)) I IF answer • ok I THEN prelude CAT text (channel no) + ": " ; I get configuration from user (cont (channel no)) I 283 I I I I li~ Fl. 284 re5 re6 287 288 re9 290 291 292 293 294 295 296 297 298 299 300 channelh&rdwareexists 301 302 303 getchanneltypefromshar Iget channel type from shard I control (1, 0, 0, channel type) 304 305 inoutm&sk 306 307 308 309 310 311 W 313 314 315 forgetunuseddevicet&bl Iforget unused device tables : I begin list ; I get list entry (t&ble name, dummy) ; I WHILE table name < > "" REP I IF type (old (t&ble name)) = device table I THEN forget if unused I TI; I get list entry (t&ble name, dummy) I PER. 316 317 318 319 320 321 322 323 forgetifunused 853/6 Ichannel hardware exists: I operators channel := channel I INT VAR channel type ; I disable stop ; I continue (channel no) ; I IF is error I THEN IF error message • "kein Kanal" I THEN channel type : = 0 I ELSE channel type : = inout mask I FI I ELSE get channel type from shard I FI; I c lear error ; I disable stop ; I continue operators channel ; I (channel type AND inout mask) <> 0 . I I I I linout mask 3. I I I I I forget if unused : I FOR channe 1 no FROM 1 UPl'O III&K edi t termi 11&1 REP I IF cont (channel no). dev type : table n&me I THEN LEAVE forget if unused I FI I PER; I forget (t&ble n&me, quiet) . I configurator single 853/6 Zeile 324 325 326 327 328 329 **** ELAN setupthischannel continueoperatorschann Icontinue operators channel: I continue (operators channel) I IF is error I THEN clear error ; I LEAVE configurate I FI; I enable stop . 338 I I 350 351 352 353 354 configurator single Isetup this channel: I operators channel : = channel ; I disable stop ; I continue (configuration channel) I set up channel (channel no. conf (channel no)) I continue operators channel . 339 340 341 342 343 344 345 346 347 348 349 10.11.86 I I 330 331 332 333 334 335 336 337 EUMEL 1.8 **** IENDPROC configura te getconfigurationfromus ... IPROC get configuration from user (CONF VAR conf) I I I I getdevicetype get get get get get I I I I I Iget device type ; baud rate ; bits and pari ty and stopbi ts protocol ; buffer size . device type begin list ; table name : = conf. dev type IF NOT is valid device type THEN next device type ~ IT; 356 357 358 359 360 361 362 363 REP IF NOT (table n&me = transparent AND channel no = 1) THEN ask user ("". table n&me) ; IF answer = ok COR was esc followed by type table name THEN IF is valid device type THEN remember device type ; LEAVE get device type ELSE out (""7" unbekannter Typ"); pause (20) FI FI FI ; next device type ~ 365 366 367 368 369 37@ 371 :372 373 374 375 376 377 378 S53/7 PER . wasescfollowedbytypeta Iwas esc followed by type table name I IF answer = esc I THEN 9 TlMESOUT right ; I put ("Typ:") ; I edi tget (table name) I TRUE I ELSE F~E I Fl. I configurator single S53/7 Zeile 379 380 381 E LAN isvaliddevicetype 382 383 rememberdevicetype 384 385 386 387 388 389 390 391 392 nextdevicetype EUMEL 1.8 10.11.86 configurator single I is valid device type : I table name = psi OR table name = transparent OR I (exists (table name) CAND type (old (table name» • device table) I I Iremember device type : I prelude CAT table name I conf . dev type : = table name I prelude CAT" " I I Inext device type : I IF table name = psi I THEN table name : = transparent I ELSE IF table name = transparent I THEN begin list ~ I 394 395 396 I 397 398 399 400 **** I I I IT; search next device type space IT. searchnextdevicetypesp Isearch next device type space : I REP I I + I get list entry (table name, dummy) UNTIL table name "" COR type (old (table name» = device table 401 402 403 404 I I PER; IF table name = "" THEN table name : = ps i Fl. 405 getba.udrate 406 416 417 418 419 420 getbi tsandparityandsto Iget bits and parity and stopbi ts : data bits : = conf. bi ts par stop MOD 8 pari ty : = (conf. bi ts par stop DIV 8) MOD 4 stop := (conf.bits par stop DIV 32) MOD 4 ; chose key (data bits, 7, bits per char, " Bits", PROO bits ok) ; IF data bits)= 0 THEN chose key (parity, 2, parities, " parity", PROO parity ok) chose key (stop, 2, stopbits, " Stopbi ts", PROO stopbi ts ok) ; conf.bits par stop := data bits + 8 * parity + 32 * stop ELSE conf. bits par stop : = data bits FI . getprotocol 421 422 423 424 425 426 427 428 429 S53/8 Iget ba.udr&te I chose key (conf.baud, 16, ba.udrates, " Baud", PROC rate ok) . I I 407 408 409 410 411 412 413 414 415 I I I getbuffersize get protocol : I chose key (conf. flow control, 10, flow modes, I " " , PROC flow mode ok) I I Iget buffer size : I IF dev type is transparent I THEN chose buffer size I ELSE conf. inbuffer size : = std inbuffer size I Fl. I configurator single S53/8 EUMEL Ze1le E LAN 430 devtypeistransparent 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 1.8 chosebuffersize Ichose buffer size: REP I IF conf. inbuffer size = 16 CAND yes ("normaler Puffer") I THEN LEAVE chose buffer size I FI; I conf. inbuffer size : = 512 I IF yes ("grosser Puffer") I THEN LEAVE chose buffer size I FI; I conf .1nbuffer size . - 16 I PER. I I IENDPROC get configuration from user I execconfiguration ........ IPROC exec conf1guration I I 451 452 I 457 458 459 setup .................... IPROC setup : I I I I I I I 461 462 I 463 I conf:= old ("configuration") , continue (configuration channel) FOR channel no FROM 1 UPl'O max ed1 t term1nal REP set up channel (channel no, conf (channel no» PER; continue (operators channel) IENDPROC set up ; setupchannel ............. IPROC set up channel (INT CONST channel no, CONF CONST cont) 465 I 466 467 468 469 470 471 472 H3 474 475 I I I I I S53/9 setup IENDPROC exec configurat10n 460 464 configura tor single I I I 456 10.11.86 Idev type is transparent : I conf . dev type • "transparent" 450 453 454 455 **- link (channel no, baudrate (channel bits (channel no, flow (channel no, 1nput buffer size conf.dev type) ; no, conf.baud) ; conf.bits par stop) conf.flow control) ; (channel no, conf.1nbuffer s1ze) I IENDPROC setup channel; I IENDPACKET conf1gurator single I conf1gurator s1ngle S53/9
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.6 Linearized : No Create Date : 2014:05:04 19:19:01+02:00 Creator : Adobe Acrobat 11.0.6 Modify Date : 2014:07:21 21:21:08-07:00 Title : XMP Toolkit : Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:56:37 Metadata Date : 2014:07:21 21:21:08-07:00 Creator Tool : Adobe Acrobat 11.0.6 Format : application/pdf Document ID : uuid:e6823391-443c-4b42-8631-6decf2b59ca7 Instance ID : uuid:fa940781-5250-644e-95da-3f1961b8137e Producer : Adobe Acrobat 9.55 Paper Capture Plug-in Page Layout : SinglePage Page Count : 356EXIF Metadata provided by EXIF.tools