z80 zsim8080zimplib lxcall iprint ipredef itest iprutilsiftest iform ifmt i 0?' 0?zÙ6% _0?·Â¾ Æ0?àÁL ­0?ÝÁ 0?øÅE 0?¨ÆÊ }0?Q·a*HR0?YY) H10?óúo. %begin %integer %fn stoi(%string(255) s) %integer i, n = 0 %for i = 1, 1, LENGTH(s) %cycle n = n*10+charno(s,i)-'0' %repeat %result = n %end %integer cur dest = 0 {vdu} %external %integer %fn %spec Proc ID (%routine X) %external %routine %spec Stop(%integer res) %external %integer %fn %spec Verbosity Required(%integer Handle) %external %integer %fn %spec ArgumentInit(%c %integer %name Handle, %string(255) keyString, %integer Input wanted, Output wanted, %string(255) Identification, %integer Help proc) %external %integer %fn %spec XGetPresence(%c %string(255) key, %integer Handle) %external %integer %fn %spec XGetCardinalArg(%c %string(255) key, %integer Index, %integer Handle) %external %integer %fn %spec XGetStringArg(%c %string(*) %name argument, %string(255) Key, %integer Index, handle) %external %integer %fn %spec XGetNumberOfValues(%c %string(255) Key, %integer handle) %integer c, y, x, i, j, string length, handle, result, width, count, verbosity level %string(255) file, header %external %integerfn %spec XOsByte(%integername y,c, %integer a,x,yin) %routine pch(%byte ch) *movb_ch,1 *svc_1 %end %routine oswrch(%byte ch); ! To vdu %if curdest # 0 %then pch(3) %and curdest = 0 pch(ch) post = post!16 %if post&16=0 %finish %else %if acc('Y') %start mcycles = mcycles+2 %and post = post!32 %if post&32=0 %finish %else %if acc('S') %start %if 16_36<=order<=16_37 %start mcycles = mcycle %else pr(1); pr(i) %finish %end %routine esc(%integer i) b(27); b(i) %end %routine litchar(%byte i) esc('I');b(1);b(i);esc('I');b(0) %end %routine pv(%integer minlev, %string(255) s) %integer i %if verbosity level < minlev %then %return %else i = i+1 %finish %finish %else %if pc %start mcycles = mcycles+2 %and post = post!128 %if post&128=0 %finish %else %if pres char=',' %start next char %else Comments") pv(0, " -Input file1,file2,...") pv(0, " -Serial/-Net/-Parallel override !Config value of printer type") pv(0, " -ff initial page throw") pv(0, "") pv(0, " Print looks at global variables USER$ID, USER$NAME, and USER$LOCATION") pv(0, " for informtion when printing banner headers.") pv(0, "") %end %const %integer buffsize = (46+2)*128+1024{spillage} %byte %array buffer(0:buffsize) %external %integer %fn %spec LoadFile(%string(255) File, %integer a, b) %predicate load fount(%string(255) file, %integer address, %integername fixed) %string(255) z fixed = 0 %if LoadFile(file, buffsize, address) >= 0 %then %start %if file -> z.(".pica") %then fixed=1 %true %finish %else %false %end %routine perform action(%string(255) s, p) %integer i, fixed %if s = "ignore" %start !-------------------------------------------------------------- %else %if s = "lowset" esc('5') ;! see esc % and fix!!!!!! %else %if %integer Help proc) %external %integer %fn %spec XGetPresence(%c %string(255) key, %integer Handle) %external %integer %fn %spec XGetCardinalArg(%c %string(255) key, %integer Index, %integer Handle) %external %integer %fn %spec XGetStringArg(------------------------------- %else %if s = "reset" ! esc('@') !-------------------------------------------------------------- %else %if s = "lit" esc('I');b(1);b(stoi(p));esc('I');b(0) %else %if s = "load" %if p = "std.pica" %then %sosity level %string(255) file, header %external %integerfn %spec XOsByte(%integername y,c, %integer a,x,yin) %routine pch(%byte ch) *movb_ch,1 *svc_1 %end %routine oswrch(%byte ch); ! To vdu %if curdest # 0 %then pch(3) %and curdest = 0 pch(ch) ('(') esc('%');b(1);b(0) esc('R');b(0) %if fixed=0 %then esc('p') %and b(1) esc('&');b(0);b(0);b(127) %for i = 0, 1, (46+2)*128-1 %cycle b(buffer(i)) %repeat pv(1, "Done.".snl) %else pv(0, "Error: %else pr(1); pr(i) %finish %end %routine esc(%integer i) b(27); b(i) %end %routine litchar(%byte i) esc('I');b(1);b(i);esc('I');b(0) %end %routine pv(%integer minlev, %string(255) s) %integer i %if verbosity level < minlev %then %return ---------- %else %if s = "sub" esc('S');b(1); ! Can't in NLQ mode - remember & restore! %else %if s = "cansub" esc('T') !-------------------------------------------------------------- %else %if s = "sup" esc('S');b(0) %else %if s = "cansup" esc('T') !-------------------------------------------------------------- %else %if s = "ps" esc('p');b(1) %else %if s = "fixed" esc('p');b(0) !-------------------------------------------------------------- %else %if global variables USER$ID, USER$NAME, and USER$LOCATION") pv(0, " for informtion when printing banner headers.") pv(0, "") %end %const %integer buffsize = (46+2)*128+1024{spillage} %byte %array buffer(0:buffsize) %external %integer %fn %spec LoadFile(--------------------------------------------------- %else %if s = "large" {expanded} esc('W');b(1) %else %if s = "canlarge" esc('W');b(0) !-------------------------------------------------------------- %else %if s = "lines" !---------------sh %else %false %end %routine perform action(%string(255) s, p) %integer i, fixed %if s = "ignore" %start !-------------------------------------------------------------- %else %if s = "lowset" esc('5') ;! see esc % and fix!!!!!! %else %if---------------------------- %else %if s = "emp" esc('E') %else %if s = "canemp" esc('F') !-------------------------------------------------------------- %else %if s = "double" esc('G') %else %if s = "candouble" esc('H') !--------------------------------------- %else %if s = "reset" ! esc('@') !-------------------------------------------------------------- %else %if s = "lit" esc('I');b(1);b(stoi(p));esc('I');b(0) %else %if s = "load" %if p = "std.pica" %then %s } !-------------------------------------------------------------- %else %if s = "paper" !-------------------------------------------------------------- %else %if s = "char" !-------------------------------------------------------------- %else %if s = "cr" b(13) !-------------------------------------------------------------- %else %if s = "comment" !-------------------------------------------------------------- %else pv(0,"Error: unknown command \".s."{}".snl) %finish !-------------------------------------------------------------- %end %routine Transfer(%integer files remaining) %string(255) s, p %string(255) %array com(0:16), par(0:16) %integer i, Y, C, tot = 0, col = 0, pending action = 0 %switch sw(0:255) %while %not end of input %cycle readsymbol(i) %if i = '}' %start %if pending action=0 %then %start b(i) pv(1, "Warning: \ missing on }".snl) %else perform action(com(pending action), par(pending action)) pending action = pendingse %if s = "cansup" esc('T') !-------------------------------------------------------------- %else %if s = "ps" esc('p');b(1) %else %if s = "fixed" esc('p');b(0) !-------------------------------------------------------------- %else %if t RAM fount perform action("highset", ""); -> done sw('+'): ! Select NLQ fount perform action("nlq", ""); -> done sw('-'): ! Select low quality fount perform action("pica", ""); -> done sw('<'): ! Swicth to ROM fount per--------------------------------------------------- %else %if s = "large" {expanded} esc('W');b(1) %else %if s = "canlarge" esc('W');b(0) !-------------------------------------------------------------- %else %if s = "lines" !--------------- s = "" %cycle s <- s.i %exit %if %not ('a' <= next symbol <= 'z') readsymbol(i) %repeat %if s = "lit" %or s = "load" %or s = "country" %or s = "paper" %c %or s = "char" %or s = "comment" %c %or s = "lines" %or s = "backspace" %c %then %start ! These all take short parameters %if next symbol='{' %start skipsymbol p = "" %cycle readsymbol(i) %exit %if i = '}' p <- p.i %repeat %finish %else p = "" Perform action(s, p) %else ! These all take either no parameters (optional {}) or a block ! or are unrecognised codes ! All the following commands DO take block parameters ! and set up modes - so stack command to unset modes %if s = "sub" %or s = "sup" %or s = "small" %or s = "large" %c %or s = "ul" %or s = "emp" %or s = "double" %then %start perform action(s, p) p = s; s = "can".s; ! Note that \ul with NO {} turns underlining on indefinitely! %if next symbol = '{' %then %start skipsymbol pending action = pending action + 1 com(pending action) = s; par(pending action) = --------------------------------------------- %end %routine Transfer(%integer files remaining) %string(255) s, p %string(255) %array com(0:16), par(0:16) %integer i, Y, C, tot = 0, col = 0, pending action = 0 %switch sw(0:255) %while %not end of input pending action + 1 com(pending action) = s; par(pending action) = p %finish %finish %finish %finish done: %repeat %if files remaining > 0 %start b(nl);b(nl) b('-') %for i = 0,1,79 b(nl);b(nl) %finish %else b(12) b(10) %end %routine initialise printer ! Don't do esc @ because it fucks up the forms!!! b(17) esc('!');b(0) esc('('); ! nlq esc('%');b(1);b(0) esc(':');b(0);b(0);b(0) {Copy high-res rom -> ram} esc('%');b(0);b(0) esc('P'); ! pica esc(':');b(0);b(0);b(0) {Copy low-res rom -> ram} esc('2'); {default 1/6" line spacing} esc('C');b(0);b(12) esc('N');b(2); esc('D');b(0) esc('B');b(0) esc('b');b(0) esc('/');b(0) esc('Q');b(80) esc('l');b(0) esc('I');b(0) esc('6') esc('R');b(0) esc('#') esc('s');b(0) esc('i');b(0) esc('U');b(0) %if XGetPresence("ff", handle) # 0 %then b(12) %if XGetPresence("NoPerfSkip", handle) # 0 %then %start esc('O') %finish %end %on %event 9 %start pv(0, "Printing abandoned - IO error (input file does not exist perhaps?") stop(event_extra) %finish result = ArgumentInit(%c handle, "INput=FROM=FILEs/?/A/E-lis ". %c "SERial/K/P/=0 NETwork=ECOnet/K/P/=0 PARallel/K/P/=0 ". %c "NOPERFSKIP/K/P/=0 ". %c "FF/K/P/=0", 0 , 0, "Canon/Kaga-Taxan formatting utility V1.0.0", Proc ID(Help)) %if result < 0 %then Stop(result) x = XOsByte(Y, C, 3, 0, 0) oswrch(2); curdest = 1 ;!--------------------- p.i %repeat %finish %else p = "" Perform action(s, p) %else ! These all take either no parameters (optional {}) or a block ! or are unrecognised codes ! All the following commands DO take block parametif XGetPresence("Parallel", handle) # 0 pv(1, "Selecting PARALLEL printer") %else pv(1, "Using default printer (from !Config)") %finish initialise printer count = XGetNumberOfValues("Input", handle) %for i = 1, 1, count %cycle strin"can".s; ! Note that \ul with NO {} turns underlining on indefinitely! %if next symbol = '{' %then %start skipsymbol pending action = pending action + 1 com(pending action) = s; par(pending action) = sfer(count-i) %repeat oswrch(3);!----------------------------------------------------- OFF %endofprogram pending action + 1 com(pending action) = s; par(pending action) = p %finish %finish %finish %finish done: %repeat %if files remaining > 0 %start b(nl);b(nl) b('-') %for i = 0,1,79 b(nl);b(nl) %finiser for KAGA/TAXAN (Canon) printer ! - uses facilities of printer only - no fancy ! justification or similar. Prepare files ! using VIEW or EDIT, and add print control to ! final proofed copy. In spite of the simplicity ! of this scheme, the results are remarkably good. ! The general form of a formatting command is ! \command{parameters} ! which may be abbreviated to ! \command ! when there are no parameters, and when the command is not ! direcc('6') esc('R');b(0) esc('#') esc('s');b(0) esc('i');b(0) esc('U');b(0) %if XGetPresence("ff", handle) # 0 %then b(12) %if XGetPresence("NoPerfSkip", handle) # 0 %then %start esc('O') %finish %end %on %event 9 %start pv(0, "Printparameters, such as \bold{This text ! is all in a bold fount}, or \ul{and this text is all underlined}. ! Most commands take no parameters at all, such as \date{}, or \theta{}. ! Commands which take groups effectively set a mode for the duration K/P/=0 ". %c "FF/K/P/=0", 0 , 0, "Canon/Kaga-Taxan formatting utility V1.0.0", Proc ID(Help)) %if result < 0 %then Stop(result) x = XOsByte(Y, C, 3, 0, 0) oswrch(2); curdest = 1 ;!---------------------r groups of commands and ! text nested ad nauseam. ! Most commands of this type can also be used without giving ! parameters of any kind, in which case the mode will be set until ! it is explicitly changed. ! \nlq For instance, all the texif XGetPresence("Parallel", handle) # 0 pv(1, "Selecting PARALLEL printer") %else pv(1, "Using default printer (from !Config)") %finish initialise printer count = XGetNumberOfValues("Input", handle) %for i = 1, 1, count %cycle strinsymbol may be included by quoting it with \ (i.e. '\}') ! Externals %external %integer %fn %spec Proc ID (%routine X) %external %integer %fn %spec XOsByte(%integername y,c, %integer a,x,yin) %external %integer %fn %spec LoadFile(%string(255) File, %integer a, b) %external %integer %fn %spec XArgumentInit(%c %string(255) keyString, %integer Input wanted, Output wanted, %string(255) Identification, %integer Help proc) %external %integer %fn %spec Verbosity Required(%integer Handle) %external %integer %fn %spec XGetNumberOfValues(%c %string(255) Key, %integer handle) %external %integer %fn %spec XGetPresence(%c %string(255) key, %integer Handle) %external %integer %fn %spec XGetNumberOfValues(%c %string(255) Key, %integer handle) ! Special IO system to force write to printer (no rawprinter: yet) %routine prepare vdu %integer X, Y, X X = XOsByte(Y, C, 3, 0, 0) %end %routine oswrch(%byte ch) *movb_ch,1 *svc_1 %end %routine vdu(%byte ch); ! To vdu %if curdest # 0 %then pch(3) %ae results are remarkably good. ! The general form of a formatting command is ! \command{parameters} ! which may be abbreviated to ! \command ! when there are no parameters, and when the command is not ! direc! Assume *FX 6,0 set... x = XOsByte(Y, C, 6, 255, 0) ;! so change printer ignore char when printer(1); printer(i); ! data to be printed is 0 x = XOsByte(Y, C, 6, 0, 0) %else printer(1); printer(i) %finish %end %routine esc(%iparameters, such as \bold{This text ! is all in a bold fount}, or \ul{and this text is all underlined}. ! Most commands take no parameters at all, such as \date{}, or \theta{}. ! Commands which take groups effectively set a mode for the duration cle; vdu(charno(s,i)); %repeat vdu(13);vdu(10) %end ! Command line decoding %routine Compiler bug fix(%string(255) %name file) %integer j %for j = string length, -1, 1 %cycle charno(file, j) = charno(file, j-1) %repeat length(file) = string length %end %routine Help pv(0, "") pv(0, " Form: formats files on Canon/Kaga-Taxan compatible printers") pv(0, "") pv(0, " Parameter Comments") pv(0, "") pv(0, " -Input file1,file2,... Main ource & macro include files") pv(0, " -ff initial page throw wanted") pv(0, " -noperfskip don't skip over perforation") pv(0, "") pv(0, " Print looks at global variables USER$ID, USER$NAME, and USER$LOCATION") pv(0, " for informtion when printing banner headers.") pv(0, "") %end handle = XArgumentInit(%c "INput=FROM=FILEs/?/A/E-lis ". %c "NOPERFSKIP/K/P/=0 ". %c "FF/K/P/=0", 0, 0, "Canon/Kaga-Taxan formatting utility V2.0.0", Proc ID(Help)) %external %routine %spec Stop(%integer res) %on %event 9 %start pv(0, "Formatting abandoned - file ".file." does not exist perhaps?") stop(event_extra) %finish count = XGetNumeger %fn %spec XGetNumberOfValues(%c %string(255) Key, %integer handle) %external %integer %fn %spec XGetPresence(%c %string(255) key, %integer Handle) %external %integer %fn %spec XGetNumberOfValues(%c %string(255) Key, %integer handle) ! Special IO system to force write to printer (no rawprinter: yet) %routine prepare vdu %integer X, Y, X X = XOsByte(Y, C, 3, 0, 0) %end %routine oswrch(%byte ch) *movb_ch,1 *svc_1 %end %routine vdu(%byte ch); ! To vdu %if curdest # 0 %then pch(3) %a trimmed exactly} %byte %array buffer(0:buffsize) %predicate load fount(%string(255) file, %string(255) %name fount, %integer address, %integername fixed) ! If the fount loaded was NOT proportionally spaced, then fixed is set to 1 ! (1 is true, 0 false) fixed = 0 %if LoadFile(file, buffsize, address) >= 0 %then %start %if file -> fount.(".pica") %then fixed=1 %true %finish %else %false %end ! State variables %constant %integer %c fixed = 0, proportional = 1, draft = 0, nlq = 1, pica = 0, elite = 1, bold = 1, double = 2, wide = 4, italic = 8, sub = 16, sup = 32 %string(255) fount = "std" %integer quality = draft, pitch = pica, style = 0, spacing = fixed ! Command stucture tables %const %integer Last command = 99 %string %array Command(1:Last command*2) = %c "std", "endfount", "fount", "endfount", { it off again later } "draft", "endres", { Changing the resolution from draft to nlq } "nlq", "endres", "pica", "endpitch", { Character pitch in chars/inch } "elite", "endpitch", "bold", "endstyle", { Type-faces available. Some founts can't } "double", "endstyle", { manage so may have to switch founts to } "narrow", "endstyle", { get required results ude files") pv(0, " -ff initial page throw wanted") pv(0, " -noperfskip don't skip over perforation") pv(0, "") pv(0, " Print looks at global variables USER$ID, USER$NAME, and USER$LOCATION") pv( "endstyle", { NLQ has special fount we can use } "overlay", "ignore", { Commands with string parameters } "backspace", "ignore", defchar { extract 1 char from fount and store somewhere } "char", "ignore", "tab", "ignora-Taxan formatting utility V2.0.0", Proc ID(Help)) %external %routine %spec Stop(%integer res) %on %event 9 %start pv(0, "Formatting abandoned - file ".file." does not exist perhaps?") stop(event_extra) %finish count = XGetNumard listing endlisting widelisting endwidelisting "0", "1", "+", "-", "<", ">", "^", ".", "(", ")", "[", "]", "*", "/", "@", "-", "%", {underline} "`", "'", "{", "}", " ", defmacro centre para indent footnote reference list paper lines country comment "endfount", "ignore", "endres", "ignore", "endpitch", "ignore", "endstyle", "ignore", "ignore" "ignore" ! The system has to cope with cases such as..._ ! \fount{outline}\nlq\pica ! \low\pica ! \std\pica ! ! \nlq\italic\pica ! \nlq\italic\elite ! \low\italic\elite %begin %external %string(255) %spec curfount %integer %fn stoi(%string(255) s) %integer i, n = 0 s -> (" ").s %while LENGTH(s)>0 %and CHARNO(s,1) = ' ' %if CHARNO(s,1) = '''' %start %result = CHARNO(s,2) %finish %for i = 1, 1, LENGTH(s) %cycle pica = 0, elite = 1, bold = 1, double = 2, wide = 4, italic = 8, sub = 16, sup = 32 %string(255) fount = "std" %integer quality = draft, pitch = pica, style = 0, spacing = fixed ! Command stucture tables %const %integer Last command = 99 %string %a %external %integer %fn %spec ArgumentInit(%c %integer %name Handle, %string(255) keyString, %integer Input wanted, Output wanted, %string(255) Identification, %integer Help proc) %external %integer %fn %spec XGetPresence(%c %string(255) key, { Character pitch in chars/inch } "elite", "endpitch", "bold", "endstyle", { Type-faces available. Some founts can't } "double", "endstyle", { manage so may have to switch founts to } "narrow", "endstyle", { get required results ) %external %integer %fn %spec XGetNumberOfValues(%c %string(255) Key, %integer handle) %integer c, y, x, i, j, string length, handle, result, width, count %external %integer %spec verbosity level %string(255) file, header %external %routine %spe "endstyle", { NLQ has special fount we can use } "overlay", "ignore", { Commands with string parameters } "backspace", "ignore", defchar { extract 1 char from fount and store somewhere } "char", "ignore", "tab", "ignorCanon/Kaga-Taxan compatible printers") pv(0, "") pv(0, " Parameter Comments") pv(0, " -Input file1,file2,...") pv(0, " -Serial/-Net/-Parallel override !Config value of printer type") pv(0, " -ff initial page throw") pv(0, "") pv(0, " Print looks at global variables USER$ID, USER$NAME, and USER$LOCATION") pv(0, " for informtion when printing banner headers.") pv(0, "") %end %external %routine %spec cache fount(%string(255) p)ent "endfount", "ignore", "endres", "ignore", "endpitch", "ignore", "endstyle", "ignore", "ignore" "ignore" ! The system has to cope with cases such as..._ ! \fount{outline}\nlq\pica ! \low\pica ! \std\pica ! ! \nlq\italic\pica ! \nstring(255) lows, highs %if s = "ignore" %start !-------------------------------------------------------------- %else %if s = "gentab" gentab !-------------------------------------------------------------- %else %if s = "lowset" esc('5') %begin %external %string(255) %spec curfount %integer %fn stoi(%string(255) s) %integer i, n = 0 s -> (" ").s %while LENGTH(s)>0 %and CHARNO(s,1) = ' ' %if CHARNO(s,1) = '''' %start %result = CHARNO(s,2) %finish %for i = 1, 1, LENGTH(s) %cycle(1);b(0) !-------------------------------------------------------------- %else %if s = "reset" ! esc('@') !-------------------------------------------------------------- %else %if s = "lit" esc('I');b(1);b(stoi(p));esc('I');b(0) %else %if %external %integer %fn %spec ArgumentInit(%c %integer %name Handle, %string(255) keyString, %integer Input wanted, Output wanted, %string(255) Identification, %integer Help proc) %external %integer %fn %spec XGetPresence(%c %string(255) key, ----------------------------- %else %if s = "sub" esc('S');b(1); ! Can't in NLQ mode - remember & restore! %else %if s = "cansub" esc('T') !-------------------------------------------------------------- %else %if s = "sup" esc('S');b(0) %else %if s = "cansup" esc('T') !-------------------------------------------------------------- %else %if s = "ps" esc('p');b(1) %else %if s = "fixed" esc('p');b(0) !-------------------------------------------------------------- %else %if s = "nlq" esc('(') %else %if s = "pica" esc('P') %else %if s = "elite" esc('M') !-------------------------------------------------------------- %else %if s = "small" {condensed} b(15) %else %if s = "cansmall" b(18) !-------------------------------------------------------------- %else %if s = "large" {expanded} esc('W');b(1) %else %if s = "canlarge" esc('W');b(0) !-------------------------------------------------------------- %else %if s = "lines" !-------------------------------------------------------------- %else %if s = "backspace" !-------------------------------------------------------------- %else %if s = "ul" esc('-');b(1) %else %if s = "canul" esc('-');b(0) !-------------------------------------------------------------- %else %if s = "emp" esc('E') %else %if s = "canemp" esc('F') !-------------------------------------------------------------- %else %if s = "double" esc('G') %else %if s = "candouble" string(255) lows, highs %if s = "ignore" %start !-------------------------------------------------------------- %else %if s = "gentab" gentab !-------------------------------------------------------------- %else %if s = "lowset" esc('5') Need to remember??? } !-------------------------------------------------------------- %else %if s = "paper" !-------------------------------------------------------------- %else %if s = "char" !-------------------------------------------------------------- %else %if s = "cr" b(13) !-------------------------------------------------------------- %else %if s = "comment" !-------------------------------------------------------------- %else pv(0,"Error: unknown command \".s."{}".snl) %finish !-------------------------------------------------------------- %end %routine Transfer(%integer files remaining) %string(255) s, p %string(255) %array com(0:16), par(0:16) %integer i, Y, C, tot = 0, col = 0, pending action = 0 %switch sw(0:255) %while %not end of input %cycle readsymbol(i) %if i = '}' %start %if pending action=0 %then %start b(i) pv(1, "Warning: \ missing on }".snl) %else perform action(com(pending action), par(pending action)) pending action = pending action - 1 ! Turn off any modes set using \mode{ text group } %finish %else %if i # '\' %then b(i) %else readsymbol(i) -> sw(i) sw('0'): ! Select ROM fount perform action("lowset", ""); -> done ----- %else %if s = "nlq" esc('(') %else %if s = "pica" esc('P') %else %if s = "elite" esc('M') !-------------------------------------------------------------- %else %if s = "small" {condensed} b(15) %else %if s = "cansmall" ROM fount perform action("romfount", ""); -> done sw('>'): ! Switch to RAM fount perform action("ramfount", ""); -> done sw('\'): sw('{'): sw('}'): sw(' '): b(i); -> done sw(NL): -> done { ignore \s on end of line, ignore newline tos" !-------------------------------------------------------------- %else %if s = "backspace" !-------------------------------------------------------------- %else %if s = "ul" esc('-');b(1) %else %if s = "canul" esc('-');b(0) !--------------- %or s = "char" %or s = "comment" %c %or s = "lines" %or s = "backspace" %c %then %start ! These all take short parameters %if next symbol='{' %start skipsymbol p = "" %cycle readsymbol(i) %exit %if i = '}' p <- p.i %repeat %finish %else p = "" Perform action(s, p) %else ! These all take either no parameters (optional {}) or a block ! or are unrecognised codes ! All the following commands DO take block parameters ! and set up modes - so stack command to unset modes %if s = "sub" %or s = "sup" %or s = "small" %or s = "large" %c %or s = "ul" %or s = "emp" %or s = "double" %then %start perform action(s, p) p = s; s = "can".s; ! Note that \ul with NO {} turns underlining on indefinitely! %if next symbol = '{' %then %start skipsymbol pending action = pending action + 1 !-------------------------------------------------------------- %end %routine Transfer(%integer files remaining) %string(255) s, p %string(255) %array com(0:16), par(0:16) %integer i, Y, C, tot = 0, col = 0, pending action = 0 %switch sw(0:255) %while skipsymbol pending action = pending action + 1 com(pending action) = s; par(pending action) = p %finish %finish %finish %finish done: %repeat %if files remaining > 0 %start b(nl);b(nl) ng action = pending action - 1 ! Turn off any modes set using \mode{ text group } %finish %else %if i # '\' %then b(i) %else readsymbol(i) -> sw(i) sw('0'): ! Select ROM fount perform action("lowset", ""); -> done urfount,v1)) %for v1=1,1,length(curfount) b(10) %for v1= 1, 1, 3 %for row = 0, 1, 31 %cycle b(10) %for col = 0, 32, 256-32 %cycle v1 = row+col; b(32) %for v2=0,1,col//4 v2=col+row; b(v2//100+'0') v2=v2-(v2//100*100ROM fount perform action("romfount", ""); -> done sw('>'): ! Switch to RAM fount perform action("ramfount", ""); -> done sw('\'): sw('{'): sw('}'): sw(' '): b(i); -> done sw(NL): -> done { ignore \s on end of line, ignore newline tora) %finish result = ArgumentInit(%c handle, "INput=FROM=FILEs/?/A/E-lis ". %c "SERial/K/P/=0 NETwork=ECOnet/K/P/=0 PARallel/K/P/=0 ". %c "NOPERFSKIP/K/P/=0 ". %c "FF/K/P/=0", 0 , 0, "Canon/Kaga-Taxan formatting utility V1.0.0", Proc ID(Help)) %if result < 0 %then Stop(result) %external %routine %spec start printer; start printer verbosity level = Verbosity Required(handle) %if XGetPresence("Serial", handle) # 0 %then %start %exit %if i = '}' p <- p.i %repeat %finish %else p = "" Perform action(s, p) %else ! These all take either no parameters (optional {}) or a block ! or are unrecognised codes !om !Config)") %finish initialise printer %if XGetPresence("ff", handle) # 0 %then b(12) %if XGetPresence("NoPerfSkip", handle) # 0 %then %start esc('O') %finish count = XGetNumberOfValues("Input", handle) %for i = 1, 1, count %cycle perform action(s, p) p = s; s = "can".s; ! Note that \ul with NO {} turns underlining on indefinitely! %if next symbol = '{' %then %start skipsymbol pending action = pending action + 1 Transfer(count-i) %repeat %external %routine %spec stop printer; stop printer %endofprogram skipsymbol pending action = pending action + 1 com(pending action) = s; par(pending action) = p %finish %finish %finish %finish done: %repeat %if files remaining > 0 %start b(nl);b(nl) = char record length * fount size + 1024 { spillage } %external %byte %array buffer(0:buffsize) %predicate load fount(%string(255) file, %integer address) %external %integer %fn %spec LoadFile(%string(255) File, %integer a, b) %if LoadFile(file, buffsize, address) >= 0 %then %start curfount = file %true %finish %else %false %end %external %integerfn %spec XOsByte(%integername y,c, %integer a,x,yin) %routine pch(%byte ch) *movb_ch,1 *svc_1 %end %external %integer cur dest = 0 %routine oswrch(%byte ch); ! To vdu %if curdest # 0 %then pch(3) %and curdest = 0 pch(ch) %end %external %integer verbosity level %external %routine pv(%integer minlev, %string(255) s) %integer i %if verbosity level < minlev %then %return %for i = 1, 1, length(s) %cycle; oswrch(charno(s,i)); %repeat; oswrch(13);oswrch(10) %end %external %routine start printer %integer y, c, x = XOsByte(Y, C, 3, 0, 0) oswrch(2); curdest = 1 ;!------------------------------------- ON %end %external %routine stop printen formatting utility V1.0.0", Proc ID(Help)) %if result < 0 %then Stop(result) %external %routine %spec start printer; start printer verbosity level = Verbosity Required(handle) %if XGetPresence("Serial", handle) # 0 %then %start x = XOsByte(Y, C, 6, 255, 0) pr(1); pr(i) x = XOsByte(Y, C, 6, 0, 0) %else pr(1); pr(i) %finish %end %external %routine esc(%integer i) b(27); b(i) %end %routine send char(%integer index) %integer i b(buffer(index*char record leom !Config)") %finish initialise printer %if XGetPresence("ff", handle) # 0 %then b(12) %if XGetPresence("NoPerfSkip", handle) # 0 %then %start esc('O') %finish count = XGetNumberOfValues("Input", handle) %for i = 1, 1, count %cycle eger char esc('&');b(0);b(low);b(high) %for char = low, 1, high %cycle send char(char) %repeat %end %external %routine litchar(%byte i) %const %integer %c usa=0,fr=1,ger=2,uk=3,den=4,swe=5,it=6,sp=7,jap=8 %const %byte %array lang(0:31) = %c it,it,it,it,it,it,uk,sp, sp,sp,sp,swe,sp,swe,it,fr, fr,ger,den,den,den,den,sp,swe, ger,swe,swe,swe,swe,swe,fr,jap %const %byte %integer %array trtab(0:31)=%c '{','}','`','|','~','[','#','[',']','\','|','$','#',']','{','\', ']','~','[','{','\','|','{','[','\','^','{','|','~','@','{','\' i = 255 %if i = 127 %if i >= 32 %start esc('6');esc('I');b(1);b(i);esc('I');b(0) %else !select language esc('R');b(lang(i)) b(trtab(i)) esc('R');b(0) !reselect language USA %finish %end %external %routine initialise printer ! Don't do esc @ because it fucks up the forms!!! b(17) esc('!');b(0) esc('('); ! nlq esc('%');b(1);b(0) esc(':');b(0);b(0);b(0) {Copy high-res rom -> ram} esc('%');b(0);b(0) esc('P'); ! pica esc(':');b(0);b(0);b(0) {Copy low-res rom -> ram} esc('2'); {default 1/6" line spacing} esc('C');b(0);b(12) esc('N');b(2); esc('D');b(0) esc('B');b(0) esc('b');b(0) esc('/');b(0) esc('Q');b(80) esc('l');b(0) esc('I');b(0) esc('6') esoswrch(%byte ch); ! To vdu %if curdest # 0 %then pch(3) %and curdest = 0 pch(ch) %end %external %integer verbosity level %external %routine pv(%integer minlev, %string(255) s) %integer i %if verbosity level < minlev %then %return %for i = 1, 1, ln 32016 - NO I/O! %if p = "std.pica" %then %start { fast load } esc('(') esc('%');b(1);b(0) esc('R');b(0) esc(':');b(0);b(0);b(127) %else %if load fount("adfs::0.$.founts.".p, addr(buffer(0))) esc('P');b(32);b(8); ! Force output out to allow change within line esc('(') esc('%');b(1);b(0) esc('R');b(0) %unless p -> base fount.(".pica") %then esc('p') %and b(1) %else ! Copy std fount to ram as emergency measure! esc('(') esc('%');b(1);b(0) esc('R');b(0) esc(':');b(0);b(0);b(127) %finish %end %external %routine def char(%integer from index, to index) esc('&');b(0);b(to index);b(to index) send char(from index) %end %endoffile %begin %external %integer %fn %spec Proc ID (%routine X) %external %routine %spec Stop(%integer res) %external %integer %fn %spec Verbosity Required(%integer Handle) %external %integer %fn %spec ArgumentInit(%c %integer %name Handle, %string(255) keyString, %integer Input wanted, Output wanted, %string(255) Identification, %integer Help proc) %external %integer %fn %spec XGetPresence(%c %string(255) key, %integer Handle) %external %integer %fn %spec XGetCardinalArg(%c %string(255) key, %integer Index, %integer Handle) %external %integer %fn %spec XGetStringArg(%c %string(*) %name argument, %string(255) Key, %integer Index, handle) %external %integer %fn %spec XGetNumberOfValues(%c %string(255) Key, %integer h|','{','[','\','^','{','|','~','@','{','\' i = 255 %if i = 127 %if i >= 32 %start esc('6');esc('I');b(1);b(i);esc('I');b(0) %else !select language esc('R');b(lang(i)) b(trtab(i)) esc('R');b(0) !reselect language USA %finish Comments") p(" -Input file1,file2,...") p(" -Output printer: by default") p(" -NLQ Letter quality") p(" -Narrow/-Wide") p(" -Width number Normally 80 (Narrowsc(':');b(0);b(0);b(0) {Copy low-res rom -> ram} esc('2'); {default 1/6" line spacing} esc('C');b(0);b(12) esc('N');b(2); esc('D');b(0) esc('B');b(0) esc('b');b(0) esc('/');b(0) esc('Q');b(80) esc('l');b(0) esc('I');b(0) esc('6') esfor informtion when printing banner headers.") p("") %end %routine p(%string(255) s) PrintString(s); Newline %end %routine pv(%integer minlev, %string(255) s) %if verbosity level < minlev %then %return PrintString(s); Newline %end %routine b(%inn 32016 - NO I/O! %if p = "std.pica" %then %start { fast load } esc('(') esc('%');b(1);b(0) esc('R');b(0) esc(':');b(0);b(0);b(127) %else %if load fount("adfs::0.$.founts.".p, addr(buffer(0))) esc('P');b(32);b(8); ! Force outp= ArgumentInit(%c handle, "INput=FROM=FILEs/?/A/E-lis ". %c "OUTput=TO=ON=AT/1/K[rawvdu:] ".%c "SERial/K/P/=0 NETwork=ECOnet/K/P/=0 PARallel/K/P/=0 ". %c "NOPERFSKIP/K/P/=0 ". %c "FF/K/P/=0", 0 , 0, "Epson print utility V1.0.0", Proc ID(Help)) %if result < 0 %then Stop(result) verbosity level = Verbosity Required(handle) %if XGetPresence("Serial", handle) # 0 %then %start pv(1, "Selecting SERIAL printer") %else %if XGetPresenc%begin %external %integer %fn %spec Proc ID (%routine X) %external %routine %spec Stop(%integer res) %external %integer %fn %spec Verbosity Required(%integer Handle) %external %integer %fn %spec ArgumentInit(%c %integer %name Handle, %string(255) e, "Output", 1, handle) %for j = string length, -1, 1 %cycle charno(file, j) = charno(file, j-1) %repeat length(file) = string length Open Binary Output(1, file) %routine vdu(%byte ch) %if ch=255 %start i = XOsByte(Y, C, 6, 0, 0) *movb_ch,, %integer Index, %integer Handle) %external %integer %fn %spec XGetStringArg(%c %string(*) %name argument, %string(255) Key, %integer Index, handle) %external %integer %fn %spec XGetNumberOfValues(%c %string(255) Key, %integer h %repeat i = XOSByte(Y, C, 3, 4, 0) close output %endofprogram Comments") p(" -Input file1,file2,...") p(" -Output printer: by default") p(" -NLQ Letter quality") p(" -Narrow/-Wide") p(" -Width number Normally 80 (Narrow%prim( 5)%shortmapspec Short(%integer A) %prim( 6)%bytemapspec Byteinteger(%integer A) %prim( 6)%bytemapspec Byte(%integer A) %prim( 7)%realmapspec Real(%integer A) %prim( 8)%longrealmapspec Longreal(%integer A) %prim( 9)%record(*)%mapspec Record(%integer A) %prim(11)%integerfnspec Rem(%integer A, B) %prim(10)%longrealfnspec Float(%longreal R) %prim(12)%bytemapspec Length(%string(255) S) %prim(13)%bytemapspec Charno(%string(*)%name S, %integer N) %prim(14)%string(1)%fnspec Snl %prim(15)%string(1)%fnspec Tostring(%integer N) %prim(16)%integerfnspec Sizeof(%name N) %prim(17)%integerfnspec Typeof(%name N) %prim(18)%integerfnspec Intpt(%longreal R) %prim(19)%integerfnspec Int(%longreal R) %prim(20)%integerfnspec ADDR(%name N) %prim(21)%integerfnspec Trunc(%longreal R) %prim(22)%integerfnspec Round(%longreal R) %prim(23)%routinespec Read(%name N) %prim(24)%routinespec Printstring(%string(255) S) %prim(25)%routinespec Printsymbol(%integer N) %prim(26)%routinespec Skipsymbol %prim(27)%routinespec Newline %prim(28)n print utility V1.0.0", Proc ID(Help)) %if result < 0 %then Stop(result) verbosity level = Verbosity Required(handle) %if XGetPresence("Serial", handle) # 0 %then %start pv(1, "Selecting SERIAL printer") %else %if XGetPresenc Select Output %alias "IMP_SELECT_OUTPUT"(%integer N) %externalroutinespec Prompt %alias "IMP_PROMPT"(%string(15) S) %externalroutinespec OpenInput %alias "IMP_OPEN_INPUT"(%integer S,%string(63)F) %externalroutinespec OpenOutput %alias "IMP_OPEN_OUTPUT"(%ie, "Output", 1, handle) %for j = string length, -1, 1 %cycle charno(file, j) = charno(file, j-1) %repeat length(file) = string length Open Binary Output(1, file) %routine vdu(%byte ch) %if ch=255 %start i = XOsByte(Y, C, 6, 0, 0) *movb_ch, ( %integer S, %string(63) F ) %externalintegerfnspec In Stream %alias "IMP_IN_STREAM" %externalintegerfnspec Out Stream %alias "IMP_OUT_STREAM" %externalintegerfnspec Input Stream %alias "IMP_IN_STREAM" %externalintegerfnspec Output Stream %alias "IMP_OUT_STREAM" %externalroutinespec Reset Input %alias "IMP_RESET_INPUT" %externalroutinespec Close Input %alias "IMP_CLOSE_INPUT" %externalroutinespec Close Output %alias "IMP_CLOSE_OUTPUT" %externalpredicatespec EndOfInput %alias "IMP_END_OF_INPUT" %recordformat Eventfm(%integer Event, Sub, Extra, Ra, Fp, Mod, %string(127) Message) %externalrecord(Eventfm)%spec Event %alias "IMP_EVENT" %constrecord(*)%name Nil == 0 %externalrecord(*)%mapspec New %alias "IMP_NEW"(%name N) %externalroutinespec Dispose %alias "IMP_DISPOSE" ( %name N ) %external %string(255) %fn %spec Sub String %alias "IMP_SUB_STRING" ( - %string(255) S, %integer F,T) %external %string(255) %fn %spec In File Name %alias "IMP_IN_FILE_NAME" %external %string(255) %fn %spec Out File Name %alias "IMP_OUT_FILE_NAME" %external %integer %fn %spec Out Type %alias "IMP_OUT_TYPE" %external %string(9) %fn %spec Date %alias "IMP_DATE" %external %stritring(%integer N) %prim(16)%integerfnspec Sizeof(%name N) %prim(17)%integerfnspec Typeof(%name N) %prim(18)%integerfnspec Intpt(%longreal R) %prim(19)%integerfnspec Int(%longreal R) %prim(20)%integerfnspec ADDR(%name N) %prim(21)%integerfnspec Trunc(%longreal R) %prim(22)%integerfnspec Round(%longreal R) %prim(23)%routinespec Read(%name N) %prim(24)%routinespec Printstring(%string(255) S) %prim(25)%routinespec Printsymbol(%integer N) %prim(26)%routinespec Skipsymbol %prim(27)%routinespec Newline %prim(28)utine %spec Print Fl %alias "IMP_PRINT_FL" - ( %longreal R, %integer P,Q ) %external %string(255) %fn %spec Ftos %alias "IMP_F_TO_S" - ( %longreal R, %integer P,Q ) %external %long %real %fn %spec Frac Pt %alias "IMP_FRAC_PT" ( %long %real X ) %external %long %real %fn %spec SQRT %alias "MD_SQRT" ( %long %real X ) %endofperm %begin %external %integer %fn %spec Proc ID (%routine X) %external %routine %spec Stop(%integer res) %external %integer %fn %spec Verbosity Required(%integer Handle) %external %integer %fn %spec ArgumentInit(%c %integer %name Handle, %string(255) keyString, %integer Input wanted, Output wanted, %string(255) Identification, %integer Help proc) %external %integer %fn %spec XGetPresence(%c %string(255) key, %integer Handle) %external %integer %fn %spec XGetCardinalArg(%c %string(255) key, %integer Index, %integer Handle) %external %integer %fn %spec XGetStringArg(%c %string(*) %name argument, %string(255) Key, %integer Index, handle) %external %integer %fn %spec XGetNumberOfValues(%c %string(255) Key, %integer hOF_INPUT" %recordformat Eventfm(%integer Event, Sub, Extra, Ra, Fp, Mod, %string(127) Message) %externalrecord(Eventfm)%spec Event %alias "IMP_EVENT" %constrecord(*)%name Nil == 0 %externalrecord(*)%mapspec New %alias "IMP_NEW"(%name Comments") p(" -Input file1,file2,...") p(" -Output printer: by default") p(" -NLQ Letter quality") p(" -Narrow/-Wide") p(" -Width number Normally 80 (Narrowe Name %alias "IMP_IN_FILE_NAME" %external %string(255) %fn %spec Out File Name %alias "IMP_OUT_FILE_NAME" %external %integer %fn %spec Out Type %alias "IMP_OUT_TYPE" %external %string(9) %fn %spec Date %alias "IMP_DATE" %external %strifor informtion when printing banner headers.") p("") %end %routine p(%string(255) s) PrintString(s); Newline %end %routine pv(%integer minlev, %string(255) s) %if verbosity level < minlev %then %return PrintString(s); Newline %end %routine Transfer(%integer files remaining) %integer i, tot = 0, col = 0 select input(1) select output(1) %while %not end of input %cycle readsymbol(i); printsymbol(i) %if verbosity level > 2 %start tot = tot+1 %if tot=256 %then %start tot=0 select output(0); print symbol('.'); select output(1) col = col + 1; %if col=79 %then col = 0 %and newline %finish %finish %repeat %if verbosity level > 2 %start select output(0) %if col # 0 %then newline select output(1) %finish %if files remaining > 0 %start p("") p("--------------------------------------------------------------------") p("") %finish %else printsymbol(12) printsymbol(10) select output(0) select input(0) %end %routine%begin %external %integer %fn %spec Proc ID (%routine X) %external %routine %spec Stop(%integer res) %external %integer %fn %spec Verbosity Required(%integer Handle) %external %integer %fn %spec ArgumentInit(%c %integer %name Handle, %string(255) " pages} esc('P') {pica - low grade} %if XGetPresence("NoPerfSkip", handle) # 0 %then %start esc('O') %else esc('N');b(2) %finish %if width > 80 %start esc('M') esc('!');b(4) esc('S');b(1) esc('3');b(16) %else %if width , %integer Index, %integer Handle) %external %integer %fn %spec XGetStringArg(%c %string(*) %name argument, %string(255) Key, %integer Index, handle) %external %integer %fn %spec XGetNumberOfValues(%c %string(255) Key, %integer h stop(event_extra) %finish result = ArgumentInit(%c handle, "INput=FROM=FILEs/?/A/E-lis ". %c "OUTput=TO=ON=AT/1/K[printer:] ".%c "NArrowpaper=NORMal/K/P/=0 WIdepaper=CONdensed/K/P/=0 ". %c "WIDTH/1/C/K[80] ". %c Comments") p(" -Input file1,file2,...") p(" -Output printer: by default") p(" -NLQ Letter quality") p(" -Narrow/-Wide") p(" -Width number Normally 80 (Narrowty V1.0.0", Proc ID(Help)) %if result < 0 %then Stop(result) verbosity level = Verbosity Required(handle) %if XGetPresence("Serial", handle) # 0 %then %start pv(1, "Selecting SERIAL printer") %else %if XGetPresence("Network", handle) # 0 pv(1, "Selecting ECONET printer") %else %if XGetPresence("Parallel", handle) # 0 pv(1, "Selecting PARALLEL printer") %else pv(1, "Using default printer (from !Config)") %finish %if XGetPresence("Narrow", handle) # 0 %then %sfer(%integer files remaining) %integer i, tot = 0, col = 0 select input(1) select output(1) %while %not end of input %cycle readsymbol(i); printsymbol(i) %if verbosity level > 2 %start tot = tot+1 %if tot=256 %then %start le) pv(1, "Using ".itos(width,0)." characters per line") %else pv(1, "Normal width listing - 80 chars per line") width = 80 %finish %if XGetPresence("Header", handle) # 0 %then %start string length = XGetStringArg(header, "Header", 1,ect output(1) %finish %if files remaining > 0 %start p("") p("--------------------------------------------------------------------") p("") %finish %else printsymbol(12) printsymbol(10) select output(0) select input(0) %end %routine, "Output", 1, handle) %for j = string length, -1, 1 %cycle charno(file, j) = charno(file, j-1) %repeat length(file) = string length Open Output(1, file); select output(0) initialise printer count = XGetNumberOfValues("Input", handle) %if" pages} esc('P') {pica - low grade} %if XGetPresence("NoPerfSkip", handle) # 0 %then %start esc('O') %else esc('N');b(2) %finish %if width > 80 %start esc('M') esc('!');b(4) esc('S');b(1) esc('3');b(16) %else %if width j = string length, -1, 1 %cycle charno(file, j) = charno(file, j-1) %repeat length(file) = string length pv(1, "Printing ".file) open input(1, file); select input(0) Transfer(count-i) %repeat select output(1); close output %endofprogram %external %integer %fn Proc ID(%integer a, b) %result = b %end %endoffile PbE2 (SIA1:[IMPRTL.PANOS.SOURCE.IO]IOLIB.IMP;1 1985-02-01 12:13:14(SIA1:[IMPRTL.PANOS.SOURCE.IO]IOLIB.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_CONSOLE LATTICE_INITIALISE_HANDLERS IMP_EXISTS IMP_END_OF_INPUT IMP_SELECT_INPUT IMP_SELECT_OUTPUT IMP_UPPER_CASE IMP_TO_UPPER IMP_LOWER_CASE IMP_TO_LOWER IMP_OPEN_INPUT IMP_OPEN_STORE_IN IMP_OPEN_OUTPUT IMP_OPEN_BINARY_OUTPUT IMP_OPEN_STORE_OUT LKPUT LKGET IMP_BLOCK_READ IMP_BLOCK_WRITE IMP_BREAK_OUTPUT IMP_PRINT_STRING IMP_NEW_LINE È IMP_CHARS î IMP_SPACE IMP_DELETE_FILE IMP_CLOSE_INPUT IMP_ABANDON_INPUT IMP_CLOSE_OUTPUT IMP_ABANDON_OUTPUT IMP_IN_FILE_NAME IMP_OUT_FILE_NAME IMP_IN_STREle) pv(1, "Using ".itos(width,0)." characters per line") %else pv(1, "Normal width listing - 80 chars per line") width = 80 %finish %if XGetPresence("Header", handle) # 0 %then %start string length = XGetStringArg(header, "Header", 1, PROMPTTEXT IMP_CONDITION_HANDLER IMP_X_TO_S XBLOCKWRITE SBLOCKWRITE BLOCKREAD XWRITEBYTE FINDINPUT FINDOUTPUT CLOSESTREAM IMP_I_TO_S XSELECTINPUT XSELECTOUTPUT IMP_NEW IMP_DISPOSE IMP_SELECT_INPUT IMP_SELECT_OUTPUT XDELETEFILE IMP_CLOSE_INPUT IMP_OUT_FILE_NAME IMP_CLOSE_OUTPUT SETFILEOFFSET IMP_OPEN_INPUT XBYTESOUTSTANDING LATTICE_INITIALISE_HANDLERS IMP_OPEN_OUTPUT IMP_CONSOLE IMP_SIGNAL IMP_EVENT IMP_CUR_IN IMP_CURR_OUT ÿÿÿÿ ÿÿÿÿ §À¿° ]À¿¬çÁ¿°Î End of file reached 16_ çÅa" gÀaÎ Data: j ×u ô×Ñ0Ç{ µÎØÕ ´×Õ(çÕ ð0> ¾µWÐ %external %integer %fn Proc ID(%integer a, b) %result = b %end %endoffile gÀ]Î À|'¨ ÎØÅ¿ ¾ü|£ '¾xê ïÄx|£ Illegal IMP stream number :_¸×Å ç­?çÅA" gÀAÎ IMP_SELECT_OUTPUT IMP_UPPER_CASE IMP_TO_UPPER IMP_LOWER_CASE IMP_TO_LOWER IMP_OPEN_INPUT IMP_OPEN_STORE_IN IMP_OPEN_OUTPUT IMP_OPEN_BINARY_OUTPUT IMP_OPEN_STORE_OUT LKPUT LKGET IMP_BLOCK_READ IMP_BLOCK_W7 \À¾ø_0 6|ê1 À¾øÎXÀ¾ø ÇÁx¾ø gÀ¾ùÎ 6|ê% _ÎXp RÎXp _ÎXp k!G¡ À|z) _ºç­ §p(WÀ À|j*×Å|" v$t_ºç­ ×Åt" _À¾´'¨ §À¾¸gÀ¾´ çž´ç­ @çÅ¿ ¾W_ºç­ L_¸" ¾°'¨ À¾°gÀ¾´ WÀ¾°WòÒ4 _ºç­ L_¸" À|_W _À¾´'¨ §À¾¸gÀ¾´ »xçž´ç­ ¦ ¾¼_ºç­ L_¸" ¾°'¨ À¾°gÀ¾´ WÀ¾°WòÒ IMP_EVENT IMP_CUR_IN IMP_CURR_OUT ÿÿÿÿ ÿÿÿÿ §À¿° ÿÿÿÿ z,ß¸ç­ ¿ª_¹ç­ ¿¢ßºß» ßºç­ _¹_¹ ô×Ñ0Ç{ µÎØÕ ´×Õ(çÕ ð0> ¾µWÐ ÎXà~ ¤×Á|ÇÁx ×Ñ0Ô£ Zê¿ò @×Ñ0Ô£ ÎØÅ¿ ×Ñ,Î ºÂ×Ñ,WÑ gÀ]Î À|'¨ ÎØÅ¿ ¾ü|£ '¾xê ïÄx|£ Illegal IMP stream number :_¸×Å ç­?çÅA" gÀAÎ À|j)×Å ×Å|" ×Å|" @§À@g ÎØÅ@çÅA×Õ " ×Å|" ´gÀ@Î Control: Error: _»çÝ InputN RÎXp _ÎXp k!G¡ À|z) _ºç­ §p(WÀ \'Á¾ÝgØ gÀ]Î ÎØžÜ×%" Ñ,ÎØ`!ÅÐ ×Å|" '¾|ê GïÄ| $ *** Failed to wind down output: V'Á¾ýgØ ÎØžü×%" À|_W _À¾´'¨ §À¾¸gÀ¾´ »xçž´ç­ ¦ ¾¼_ºç­ L_¸" ¾°'¨ À¾°gÀ¾´ WÀ¾°WòÒ .PANOS.SOURCE.IO]IOLIB.IMP;1 PbE2 0SIA1:[IMPRTL.PANOS.SOURCE.DIAGNOSE]PANDIAG.IMP;1 1985-02-01 12:13:140SIA1:[IMPRTL.PANOS.SOURCE.DIAGNOSE]PANDIAG.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 LATTICE_DIAGNOSE ERRORFILE IMP_CONDITION_HA ÿÿÿÿ z,ß¸ç­ ¿ª_¹ç­ ¿¢ßºß» ßºç­ _¹_¹ ÿÿÿÿ ÿÿÿÿ ERROR: >¾üê4 >¾üÎ '®?¾øWÀ¾ø ×Á¾üÇÁ¾ô \À¾À_À¾¼'Æ@¾´Î Æ@¾° À¾°Ú À¾´×Á¾´Î À¾ÀÎ Çƾ¸¾À꿹ßÀ¾¼ À¾ÀÎ §Ä?¾Àê¿ gÀ¾ÁÎ not assigned invalid ordinal value ߸×Å Ç|×À ÃÀx'^ 꿶_¸ ÿçžù ¾øçžø" ×Õ|/Ô|Î False True V¿¼| ÎXP¾ §Q^¾ Ç|ê¿æ Fç­ ç­ Ð|ãUH" Ð|çU`" Ð|çU¾ Ð|ßP¿´ Ãg¨' Chr( _¸×Å _D×Ñ '®.D À`ÎXÁ` ÇÅD`_¸×Á ÿçŽ ƽ|| \_À¿´×Á ÃÁH'~ ÆT@C Æ@¿° ¦ÿÿÿ [ÎOÀP ¦ÿÿÀ Pê-Î ¾¿WÁ½ ¿¸'n P_À¿¼4¦ 3_À\×ÁP unassigned pointer À@çØ H}ïP Uê¾V ??? êq×ÁP not assigned êV_¸×ÅP" ¦ÿÿÿ = 16_ ×ÅP" ZWÁPÎ P_¸×ÅP" ¦ÿÿÿ = 16_ _º×ÅP" ÅPÿÿ (not assigned?) P_¸×ÅP" = »ê¿;WÀP ¿N'¨ unprintable real value ߻߸WÀP>ÛM ÿçŽ ÎXÀ¿ §Áe¿ ¾Ä§© unprintable real value ê¾vç­ ÁP¾Äu ÿçŽ ¾Tg¨" ×ÁPÎØ} ×Å çÁ½ ÎØŽ ×=×Å ×ÅPç ×Å ÃÅ¿¸ »àê¼ ×ÁPÎ ½ÐçÕ h×ÅP »$ê½ ½±×ÅP WÁPÎ ÅPÿÿ ×Å¿¸ÃÅ ×ÅP ºÝê½X×ÀP À¿¼Ú(§ ng¨( _»×ÅP" (disposed) Æ¿°@꼪§ 6HÎYq hê¼îßÇ¿¨_À¿¬g¨ À¿¨4¦ ÜßÀ¿¬ Á¿°Ê _¸×Å¿¨" h×Å¿¨ ¹Üê? ×Å¿¨ ×Å¿¸ÃÅ ×Å¿¨ ¿m×ÁHÇÁ½ ¿Xg¨ Qê»ö U5E% &6FVf HXuaqhex :Îϱ .xÎØáÝ ÈÇÁ| O}ïP YWÁxG¡ Event ߸׵ 6߸׵ (߸׵ Overflow Integer overflow Real overflow String overflow Division by zero Excess resource Not enough store Output exceeded Time exceeded Data error Symbol value _¸×Åt" in data Corrupt data Data transmission error Invalid arguments For loop cannot terminate Illegal exponent ߸×Åt" Array inside-out String inside-out À@çØ H}ïP Uê¾V ??? êq×ÁP not assigned êV_¸×ÅP" ¦ÿÿÿ =" does not exist ×߸×Åt" is not a character value Resolution fails Undefined value Unassigned variable Switch label ( Corr unprintable real value ߻߸WÀP>ÛM ÿçŽ ÎXÀ¿ §Áe¿ ¾Ä§© unprintable real value ê¾vç­ ÁP¾Äu ÿçŽ ggument for logarithm Significance lost x MOD _¸×Åt" is not permitted Missing case "!Negative argument for square root Disposing NIL poinÀP À¿¼Ú(§ ng¨( _»×ÅP" (disposed) Æ¿°@꼪§ 6HÎYq hê¼îßÇ¿¨_À¿¬g¨ À¿¨4¦ ÜßÀ¿¬ Á¿°Ê _¸×Å¿¨" ê½"g¨ Diagnostics being sent to ªß¸" " ¼ñç­ Executing tÎYX Ê¿òÎ CÁPCÁt YWÁxG¡ Event ߸׵ 6߸׵ (߸׵ Overflow called from line ߸×Ål" in Á\ÎØu ÿçž½ ¾¼çž¼" starting at line ߸×Åp" çÅ¿¼" module ÿçž½ Time exceeded Data error Symbol value _¸×Åt" in data Corrupt data 0SIA1:[IMPRTL.PANOS.SOURCE.DIAGNOSE]PANDIAG.IMP;1 PbE2 0SIA1:[IMPRTL.PANOS.SOURCE.DIAGNOSE]MINDIAG.IMP;1 1985-02-01 12:13:140SIA1:[IMPRTL.PANOS.SOURCE.DIAGNOSE]MINDIAG.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_DIAGNOSE IMP_CONDITION_HANDLER 0SIA1:[IMPRTL.PANOS.SOURCE.DIAGNOSE]MINDIAG.IMP;1 PbE2 /SIA1:[IMP" does not exist ×߸×Åt" is not a character value Resolution fails Undefined value Unassigned variable Switch label ( CorrLISE_IO LATTICE_TERMINATE_IO IMP_X_TO_S LATTICE_DIAGNOSE IMP_EVENT ----> Initialise ----> Sgument for logarithm Significance lost x MOD _¸×Åt" is not permitted Missing case "!Negative argument for square root Disposing NIL poiný'¨ gÀmÎ ----> Exception passed on çÅm" lçÁ¾ígØ gÀmÎ ÎØžì×=" ----> Diagnose ½"g¨ Diagnostics being sent to ªß¸" " ¼ñç­ Executing tÎYX Ê¿òÎ CÁPCÁt known handler type $ÎYx ×x|4  ÎÝx~Î\x êK4  ×x|4  ÎÝx~Î\x /SIA1:[IMPRTL.PANOS.SOURCE.DIAGNOSE]LLHAND.IMP;1 PbE2 .SIA1:[IMPRTL.PANOS.SOURCE.SYSTEM]CONNECT.IMP;1 1985-02-01 12:13:14.SIA1:[IMPRTL.PANOS.SOURCE.SYSTEM]CONNECT.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_DISCONNECT_FILE CONNECTFILE IMP_CONDITION_HANDLER IMP_OPEN_INPUT IMP_SELECT_INPUT IMP_IN_SIZE IMP_CLOSE_INPUT IMP_GET_SPACE IMP_NEW 7×Á| _ _( ×Á|ß ÎØÅ¿ ÿ§À¿ ÎØÀ¿ SE]MINDIAG.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_DIAGNOSE IMP_CONDITION_HANDLER 0SIA1:[IMPRTL.PANOS.SOURCE.DIAGNOSE]MINDIAG.IMP;1 PbE2 /SIA1:[IMPMPRTL.PANOS.SOURCE.DIAGNOSE]SIGNAL.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_SIGNAL IMP_EVENT IMP_CONDITION_HANDLER SIGNAL IMP_CONSOLE LISE_IO LATTICE_TERMINATE_IO IMP_X_TO_S LATTICE_DIAGNOSE IMP_EVENT ----> Initialise ----> Stice Logic IMP 9.12-2.27-2.4 B IMP_CLEAR IMP_GET_SPACE IMP_FREE_SPACE IMP_HEAP_STRING IMP_NEW IMP_DISPOSE IMP_CONDITION_HANDLER ALLOCATE IMP_GET_SPACE IMP_FREE_SPACE IMP_SIGNAL IMP_EVENT Heap failure -- ÎÏ9]'~ x_Àt'Ö ÀpÚ7 Æptz ÆptWÁhWÃp Ælh꿼#Æph꿵WÁx xê¿  Ád_` ×%çÅx" Cannot extend heap Heap Corrupt 3 ÎÏÁ| Heap Corrupt 4 À|£À Àp×Q >t×ÁtNãà Àp×Q pê¿eß ¾·×Å Extend heap logic error Nã{|| L.PANOS.SOURCE.SYSTEM]CONNECT.IMP;1 1985-02-01 12:13:14.SIA1:[IMPRTL.PANOS.SOURCE.SYSTEM]CONNECT.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_DISCONNECT_FILE CONNECTFILE IMP_CONDITION_HANDLER IMP_OPEN_INPUT IMP_SELECT_INPUT IMP_IN_SIZE IMP_CLOSE_INPUT IMP_GET_SPACE IMP_NEW 7×Á| _ _( ×Á|ß ÎØÅ¿ ÿ§À¿ ÎØÀ¿ 985-02-01 12:13:14+SIA1:[IMPRTL.PANOS.SOURCE.CORE]REALIO.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_F_TO_S IMP_R_TO_S è IMP_PRINT IMP_PRINT_FL IMP_CONDITION_HANDLER IMP_I_TO_S IMP_R_TO_S IMP_PRINT_STRING IMP_F_TO_S xßÀt¾4Æ ¾ ¦@$ Çtêj> ¾ ¦@$ Àtêj \À¾à _À > x_Àlê x¾ÄÅx ¿x'F l×Ål Áx¾°¡@$ ¾ ÆpxNãÅ ¾0 ?à Åx@$ ¾ ¦@$ \À¾à> ¾à>;Æxd À¾à§ d0ÎXÁ¾à 7žàÎ z0çÀ½ágÀ¾á§X §À¾àgÀ½àÎ À¾àÎ §Â.¾à !¾°¡@$ 6x>;6d À¾àg À¾àêH À¾àÎXÁ¾à §Å@¾à À¾àÎØÀ¾à §Ã-¾àê À¾àÎ §Â+¾à_¸NóÅlç­?çŽá" ½à§À`gÀ½àÎ À¾àÎ §Â0¾à À¾àÎXÀ¾à §Á0¾à'Á¾áÎ gÀaÎ X\À¿ _À > ¾øNãÅ ½@¾0 ?à Á¾øz À¾ôÚ >;ƾø¾è_¸×žèç­?çž©" ¾¨'Á¿ gÀ¾©Î z0'Á½©gÀ¿ gÀ½¨Î §Â.¿ À¾è¾ Á¾ø¾ ¾°¡@$ 6¾ø>;6¾è ¾è0Î Ælh꿼#Æph꿵WÁx xê¿  Ád_` ×%çÅx" Cannot extend heap Heap Corrupt 3 |CE.CORE]REALIO.IMP;1 PbE2 /SIA1:[IMPRTL.PANOS.SOURCE.PASCAL]PASCALIO.IMP;2 1985-02-01 12:13:14/SIA1:[IMPRTL.PANOS.SOURCE.PASCAL]PASCALIO.IMP;2 Lattice Logic IMP 9.12-2.27-2.4 PASCAL_INIT PASCAL_RESET PASCAL_REWRITE PASCAL_RESET_FIxtend heap logic error Nã{|| PASCAL_READR PASCAL_GET PASCAL_PUT PASCAL_WRITE PASCAL_PAGE P_JOUT PASCAL_CLOSE PASCAL_EOJ IMP_CONDITION_HANDLER IMP_I_TO_S IMP_GET_SPACE IMP_SELECT_INPUT IMP_CLOSE_INPUT IMP_SELECT_OUTPUT IMP_BREAK_OUTPUT IMP_CLOSE_OUTPUT IMP_CLEAR IMP_OPEN_INPUT IMP_OPEN_INPUT IMP_OPEN_OUTPUT IMP_OPEN_OUTPUT IMP_DELETE_FILE IMP_FREE_SPACE IMP_PROMPT ARGUMENTS DECODEINIT GETSTRINGARG PASCAL_RESET PASCAL_REWRITE IMP_IN_STREAM PASCAL_SELIN PASCAL_SAFETY PASCAL_READI IMP_PRINT_STRING IMP_CHARS IMP_R_TO_S IMP_F_TO_S ! IMP_SIGNAL IMP_EVENT IMP_CUR_IN ERRORFILE " IMP_CURR_OUT No free input streams No free ¾ ¾ ÆpxNãÅ ¾0 ?à Åx@$ ¾ ¦@$ \À¾à> ¾à>;Æxd À¾à§ d0ÎXÁ¾à 7žàÎ z0çÀ½ágÀ¾á§X §À¾àgÀ½àÎ À¾àÎ §Â.¾à !¾°¡@$ 6x>;6d 8çÁ¿±gÀ¿q§x X_À| (êmç WÑ(\h OçÅ¿© gÀ¿¨Î WÑ(WÓ$ Ñ(ßg dWÑ(Wà Á¾øz À¾ôÚ >;ƾø¾è_¸×žèç­?çž©" ¾¨'Á¿ gÀ¾©Î z0'Á½©gÀ¿ gÀ½¨Î §Â.¿ À¾è¾ Á¾ø¾ ¾°¡@$ 6¾ø>;6¾è ¾è0Î %ÎØm WÑ(ÎØm WÑ(Üh RÎØm WÑ(\h WÑ(T WÑ(Üh bWÑ(Üh Corrupt expiry addresses ¼­_À| GWÑ( çmCE.CORE]REALIO.IMP;1 PbE2 /SIA1:[IMPRTL.PANOS.SOURCE.PASCAL]PASCALIO.IMP;2 1985-02-01 12:13:14/SIA1:[IMPRTL.PANOS.SOURCE.PASCAL]PASCALIO.IMP;2 Lattice Logic IMP 9.12-2.27-2.4 PASCAL_INIT PASCAL_RESET PASCAL_REWRITE PASCAL_RESET_FI ¿XWÑ( ¿Fê3WÑ( Ö,tW° _Ð0'¨ §Ð4gÐ0 üÜÐ>ÜÐ -Terminal -Terminal ©_¸_¸" D'¾¿¼ê sïÄ¿¼§À@g -- .gÁ¾½gØ gÀAÎ §À@gÀ¾¼Î Reset on non-existent file RgÁ¾½gØ gÀAÎ ÎØž¼×- º£×Å »º×Å ¼hWÑ( ¿z߸×Å '¾|ê/ïÄ| IMP_BREAK_OUTPUT IMP_CLOSE_OUTPUT IMP_CLEAR IMP_OPEN_INPUT IMP_OPEN_INPUT IMP_OPEN_OUTPUT IMP_OPEN_OUTPUT IMP_DELETE_FILE IMP_FREE_SPACE IMP_PROMPT ARGUMENTS DECODEINIT GETSTRINGARG PASCAL_RESET PASC ߸×Å _¹×Å º`×Ð(ÜX INPUT ÎÅÆ¿ OUTPUT #ÎÄÆ¿ No free input streams No free A/K ߺçÝ ½ä꿸 ERROR/K[ERROR:] ÿçżÝ" ¼ÜÎØżÜçżÝ׎üç çŽè" ('internal error while decoding arguments ç­'çÝ Ö$½ä Û§À¾ ׎è߸ÎØž çŽðç­ ÿçÅ¿ ƽð¿ 8çÁ¿±gÀ¿q§x X_À| (êmç WÑ(\h OçÅ¿© gÀ¿¨Î WÑ(WÓ$ Ñ(ßg dWÑ(Wà TÃÿçµ Æ¼Ø| N#^|| ×Å|" N#V|| ×Å|" N#N||CÀ|× ×Å|" N#V|| ||×Å ×Å|" (WÐ( "!RESET required before read access ç­!çÝ µ1ÎØM (WÐ( %$REWRITE required before write access ç­$çÝ ´øÎØM $REW ¸0×Åt" EOLN invalid at EOF WÐ(Î ·¸WÐ( ¿Üê¿ô Ð,ÎX@ illegal number syntax _À|_Àx 'FPt Åxó334j ΣÀx£ ¿7ê¿» N#Æxx ×Õ|/Ô| ûÿÿÿ h_À@ Ð|ÎcðB¿ ÇBx¿ $×Ð| X\_ÀlWX`§H hWÐ|×ðJ¿ dÎó  ÀdÎ7  WdWÀlÎs  ×ÀlÎ÷  lê¿Ë×Ð| _\_¸ ê¿ð> ߸×Å _¹×Å º`×Ð(ÜX INPUT ÎÅÆ¿ OUTPUT #ÎÄÆ¿ '~PH ÆX\×ÅH -ßÀP ¾cê¿ j¾0Àh Æ¿t| |×Ñ( x×Á|ÎXx ¿í×Ñ(×} p_Àt_Àp_Àl Ê;_¸×Å ç­?çÅA" "! is not an acceptable field width 0çÁ¾ÁgÀA ÎØžÀ×= |×Á| |WÁhÎ ÀXçØ ¥}ïP Corrupt I/O program Á|×u Â|꿸 Á|×u Â|꿦 WÁhÎ WÁhÎ WÁhÎ uNãÅtWÁ|×m ç­?çž Â|WÑ,T£ ê¿Mç­ ç WÁ|Wh Â|×Ñ,Ô£ ê¿.×Á|¾ _Àt×ÅpNãÅt¾ÄÅPç­ ÿçŽ WÑ,T£ ê¾èWÁ|¾ ßÀt×Åt߸¾ÄÅPç­ ÿçŽ §À¾ÐgÀ½ §Äe¾ÌçžÐ" ×Ð,Ô¢ TrueFalse d_Âlê dßÂl'^ Æltz Ætlç­ ×ÅtãÅl" WÀdÎXH Çlê¿ë×Ñ,Ô£ ê¾,g¨ ×Ñ,Ô£ ¹xê¾ ×Á|×} Â|ê¾ Àhê½ø ï×Ñ,Ô£ >|×Å|çÅ| ± ×Á| |×Å|×Åx ÿÿÿ_¸ °Ø_¸" ß "! ß "!Σ0£(×2|Îc0Ï ¿ÞΣX _ "Ý µ1ÎØM (WÐ( %$REWRITE required before write access ç­$çÝ ´øÎØM $REW ¸0×Åt" IA1:[IMPRTL.PANOS.SOURCE.SYSTEM]PARAMS.IMP;1 1985-02-01 12:13:14-SIA1:[IMPRTL.PANOS.SOURCE.SYSTEM]PARAMS.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 PASCAL_PARAMS IMP_CONDITION_HANDLER ARGUMENTS IMP_CLOSE_INPUT IMP_SELECT_INPUT illegal number syntax _À|_Àx 'FPt Åxó334j ΣÀx£ ¿7ê¿» N#Æxx ×Õ|/Ô| ûÿÿÿ h_À@ ½øê*×Ñ|Ç{½ô½ð h×Ñ| y½ôÎØã~¿ _À|'¾xê,ïÄx Cannot access ×Ñ|ç}¿ ×Ñ|Ô£ ¿ ÎØ}¿ ßÀ|߸" ×Ñ|ÎØ{¿ ²'¾½ìê ïĽì Õêi_ºç­ D_¸" \@ ç ½ø`½øWÁ½ü Çl½ø equals (=) required following ׎ü" p ÎXq Çu½ø ƽè| Á¿|W0§À¿ Association for 'Á¾}gØ ÎØž|×%" ç­ ¿| " o_¸_¸" Á¿|W0§À¿ gp!Î @¿|ê¿W_ -SIA1:[IMPRTL.PANOS.SOURCE.SYSTEM]PARAMS.IMP;1 PbE2 *SIA1:[IMPRTL.PANOS.SOURCE.CORE]MATHS.IMP;1 1985-02-01 1 Â|꿦 WÁhÎ WÁhÎ WÁhÎ uNãÅtWÁ|×m ç­?çž Â|WÑ,T£ ê¿Mç­ ç WÁ|Wh Â|×Ñ,Ô£ ê¿.×Á|¾ _Àt×ÅpNãÅt¾ÄÅPç­ ÿçŽ WÑ,T£ ê¾èWÁ|¾ ßÀt×Åt߸¾ÄÅPç­ ÿçŽ §À¾ÐgÀ½ þNס ÿÿ«Á -DTû!ù? ÈÉm0_Ô? ¶¾ÄÅ |_¸¾ÄÅ ¡?ââ ¡?Úµ5 6h¾ 0¾ `_¿¾Ä Áp¾ Á`¾ X¾×Å|çÅ| ± ×Á| |×Å|×Åx ÿÿÿ_¸ °Ø_¸" ß "! ß "!Σ0£(×2|Îc0Ï ¿ÞΣX l¾°Ø Àl¾ Àd¾ T¾°Ø ß¾°ÀT¾ é¾0ÀT¾ ؾ0ÀT¾ ÁT¾° 6¿¼¾ Á\¾01¾ &¿¼> Á|¾°Ù 6¿¼> Á|¾0Ù ÿÿÿÿÿÿÏ?ßö³oäp|? ÜXo¤Rñ> ²QBq q¬? 8Þo ?@IA1:[IMPRTL.PANOS.SOURCE.SYSTEM]PARAMS.IMP;1 1985-02-01 12:13:14-SIA1:[IMPRTL.PANOS.SOURCE.SYSTEM]PARAMS.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 PASCAL_PARAMS IMP_CONDITION_HANDLER ARGUMENTS IMP_CLOSE_INPUT IMP_SELECT_INPUT ®â¾ @TUUUUUÅ¿° *¿cð$¥ã Ç>«À]KEæZ¾0Ôjh< Ü äj½ V>#6|> Æ|\4¦ À\¾°Ø ­¾´Á À\¾°Ø 6t¾´1> Át¾°1¾ À¾°0¾ °¾°0¾  ¾°0¾ ¾°0¾ ¾°0¾ p¾°0¾ `¾°0¾ P¾°0¾ Àt¾0 Ætt¾ M¾Ä5¾ÄÅ ªLXèz¶û?T °Ðõlç?VÍ Q¦`+Àʼ⹠4Àcj \?ý À½ ±ÙzÍê¿© D@¤m U@Ö£ð Õêi_ºç­ D_¸" \@ ç ½ø`½øWÁ½ü Çl½ø equals (=) required following ׎ü" ÆxxWÁlçùÝ Æxx¾ *SIA1:[IMPRTL.PANOS.SOURCE.CORE]MATHS.IMP;1 PbE2 *SIA1:[IMPRTL.PANOS.SOURCE.CORE]READI.IMP;1 1985-0 @¿|ê¿W_ -SIA1:[IMPRTL.PANOS.SOURCE.SYSTEM]PARAMS.IMP;1 PbE2 *SIA1:[IMPRTL.PANOS.SOURCE.CORE]MATHS.IMP;1 1985-02-01 1 pSlW° ¦ó334|ç© ÎãÁ|ã¡ >x_ÀtW° §N#Æthס ÎóÁh >|ÎãÁhã¡ >x_Àt_Àdê J ' pP`ê&§© _«Áp§q¿¿ _kÁp'nI`ê Æ`hÚ Æt|j Æt|Ê Æ`xz XWÁtÎcÁhcÁ` .tßÀdW þNס ÿÿ«Á -DTû!ù? ÈÉm0_Ô? ¶¾ÄÅ |_¸¾ÄÅ ¡?ââ ¡?Úµ5 6h¾ 0¾ `_¿¾Ä Áp¾ Á`¾ X¾TL.PANOS.SOURCE.CORE]READS.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_READ_S IMP_CONDITION_HANDLER IMP_SIGNAL IMP_CUR_IN êPÎØÁ¿ ÎXÁ¿ Çžü¿ j¿² *SIA1:[IMPRTL.PANOS.SOURCE.CORE]READS.IMP;1 PbE2 *SIA1:[IMPRTL.PANOS.SOURCE.CORE]READR.IMP;1 1985-02-01 12:13:14*SIA1:[IMPRTL.PANOS.SOURCE.CORE]READR.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_READ_R IMP_CONDITION_HANDLER IMP_READ_I IMP_SIGNAL IMP_CUR_IN ×Õ|/Ô| ûÿÿÿ >|ê) >|WÑ| ΣiX 6x'© Çox¿ $×Ñ| x\_ÀlWy`§i 6hê, 6hWÑ|×ñn¿ >dÎóiX ÁdÎ7iXN wdWÁlÎsqX ×ÀlÎ÷pXN×  lê¾°0¾ p¾°0¾ `¾°0¾ P¾°0¾ Àt¾0 Ætt¾ M¾Ä5¾ÄÅ ªLXèz¶û?T °Ðõlç?VÍ Q¦`+Àʼ⹠4Àcj \?ý À½ ±ÙzÍê¿© D@¤m U@Ö£ÅH ¶ßÇTê X_À`ßÀd_ÀT_À\ê J ' HPDê&ç© _ëÁHçy¿¿ _kÁH'nIDê ÆDXÚ! ÆT\×ÅD 9ßÀLW° i¾0Àh Æ¿t| ÆxxWÁlçùÝ Æxx¾ *SIA1:[IMPRTL.PANOS.SOURCE.CORE]MATHS.IMP;1 PbE2 *SIA1:[IMPRTL.PANOS.SOURCE.CORE]READI.IMP;1 1985-0AGNOSE]STACKCH.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 LL_STACK_CHECK LL_MINIMUM_FREE IMP_CONDITION_HANDLER IMP_SIGNAL CURRENTHEAPEND çÁ|ã± 0SIA1:[IMPRTL.PANOS.SOURCE.DIAGNOSE]STACKCH.IMP;1 PbE2 +SIA1:[IMPRTL.PANOS.SOURCE.CORE]SUBSTR.IMP;1 1985-02-01 12:13:14+SIA1:[IMPRTL.PANOS.SOURCE.CORE]SUBSTR.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_SUB_STRING IMP_CONDITION_HANDLER IMP_SIGNAL ¾ü×Á ãÁ GÁ¾üÊ À¾øz À¾üß .gÁ¿ +SIA1:[IMPRTL.PANOS.SOURCE.CORE]SUBSTR.IMP;1 PbE2 ,SIA1:[IMPRTL.PANOS.SOURCE.DRIVERS]STOI.IMP;1 1985-02-01 12:13:14,SIA1:[IMPRTL.PANOS.SOURCE.DRIVERS]STOI.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_S_TO_I IMP_CONDITION_HANDLER IMP_SIGNAL _À¾ð'® ¾ì_À¾ü_8Î >¾øê >¾øÎ À¾ô_ ßǾðê ßÀ¾ðê N#ƾü¾ì_À¾üê ¾ôP¾èê+§© _«Á¾ô-02-01 12:13:14*SIA1:[IMPRTL.PANOS.SOURCE.CORE]READR.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_READ_R IMP_CONDITION_HANDLER IMP_READ_I IMP_SIGNAL IMP_CUR_IN ×Õ|/Ô| ûÿÿÿ MP;1 1985-02-01 12:13:14)SIA1:[IMPRTL.PANOS.SOURCE.CORE]ITOS.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_I_TO_S É IMP_WRITE IMP_CONDITION_HANDLER IMP_I_TO_S IMP_PRINT_STRING ÿÿÿÿÿÿÿ Á'Æpx'Þ ò|ßÀt_Àp _ÀtN#Æ Çp×Á §©0£9WÁp ÇpWÁp §Å-pê ÇpWÁp §Å p §Å-pß'#Á ÇpWÁp §Å pêoN#Æp ÇpWÁp gàÅqÎ ç­?çÅA" @çÅ@" )SIA1:[IMPRTL.PANOS.SOURCE.CORE]ITOS.IMP;1 PbE2 )SIA1:[IMPRTL.PANOS.SOURCE.CORE]ITOX.IMP;1 1985-02-01 12:13:14)SIA1:[IMPRTL.PANOS.SOURCE.CORE]ITOX.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_X_TO_S IMP_PRINT_HEX IMP_CONDITION_HANDLER IMP_X_TO_S IMP_PRINT_STRING ÿÿÿÿÿÿÿ ¨'Ælx'Þ Ý|_Àl_8 z ' p7pê Çl×Ál ÇÇpl×ÁtÇ¡ Çl×Ál §Ç l rN#Æ Çl×Ál gàÇmÎ ÿçÅ¿ )SIA1:[IMPRTL.PANOS.SOURCE.CORE]ITOX.IMP;1 PbE2 -SIA1:[IMPRTL.PANOS.SOURCE.SYSTEM]FREEST.IMP;1 1985-02-01 12:13:14-SIA1:[IMPRTL.PANOS.SOURCE.SYSTEM]FREEST.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_FREE_STORE IMP_CONDITION_HANDLER LL___HEAP_BASE À|#° IMP_SUB_STRING IMP_CONDITION_HANDLER IMP_SIGNAL ¾ü×Á ãÁ GÁ¾üÊ À¾øz À¾üß .gÁ¿ MTIME IMP_CPU_TIME IMP_CONDITION_HANDLER DATE TIME STANDARDTIME HçÅxç­?çÅ¿¹" Æx¿¸ gÀ¿¹Î HçÅxç­?çÅ¿¹" Æx¿¸ gÀ¿¹Î HçÅxç­?çÅ¿¹" MP_CONDITION_HANDLER IMP_SIGNAL _À¾ð'® ¾ì_À¾ü_8Î >¾øê >¾øÎ À¾ô_ ßǾðê ßÀ¾ðê N#ƾü¾ì_À¾üê ¾ôP¾èê+§© _«Á¾ôL.PANOS.SOURCE.SYSTEM]LLTRANS.IMP;1 1985-02-01 12:13:14.SIA1:[IMPRTL.PANOS.SOURCE.SYSTEM]LLTRANS.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 LL_TRANSLATE IMP_CONDITION_HANDLER GETGLOBALSTRING MP;1 1985-02-01 12:13:14)SIA1:[IMPRTL.PANOS.SOURCE.CORE]ITOS.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_I_TO_S É IMP_WRITE IMP_CONDITION_HANDLER IMP_I_TO_S IMP_PRINT_STRING ÿNOS.SOURCE.MISC]UNIVDATA.IMP;3 Lattice Logic IMP 9.12-2.27-2.4 IMP___INT_FLAG -SIA1:[IMPRTL.PANOS.SOURCE.MISC]UNIVDATA.IMP;3 ! simulator for 8080/8085 machine instruction set %routine simulate(%integer PC) %integer opc %switch sw(0:255) %cycle opc = bfetch(PC) %if opc&2_1100 0000 = 2_0100 0000 %start ! 01XX XXXX 64..127 MOV d, s %continue %finish %else -> sw IMP_PRINT_HEX IMP_CONDITION_HANDLER IMP_X_TO_S IMP_PRINT_STRING ÿÿÿÿÿÿÿ ¨'Ælx'Þ Ý|_Àl_8 z ' p7pê Çl×Ál ÇÇpl×ÁtÇ¡ 010): ! ADC 2 sw(2_10001011): ! ADC 3 sw(2_10001100): ! ADC 4 sw(2_10001101): ! ADC 5 sw(2_10001110): ! ADC 6 sw(2_10001111): ! ADC 7 EA == bytereg(0); -> adc sw(16_8E): ! ADC M EA == mem adc: %continue {--------------------------------- ADD --------;1 1985-02-01 12:13:14-SIA1:[IMPRTL.PANOS.SOURCE.SYSTEM]FREEST.IMP;1 Lattice Logic IMP 9.12-2.27-2.4 IMP_FREE_STORE IMP_CONDITION_HANDLER LL___HEAP_BASE À|#° 6): ! ADD M EA == mem; -> add sw(16_C6): ! ADI EA == imm add: %continue {--------------------------------- AND ------------------------------------} sw(2_10100000): ! ANA 0 sw(2_10100001): ! ANA 1 sw(2_10100010): ! ANA 2 sw(2_10100011): ! ANA 3 sw(2_MTIME IMP_CPU_TIME IMP_CONDITION_HANDLER DATE TIME STANDARDTIME HçÅxç­?çÅ¿¹" Æx¿¸ gÀ¿¹Î HçÅxç­?çÅ¿¹" Æx¿¸ gÀ¿¹Î HçÅxç­?çÅ¿¹" ----------------------} sw(16_CD): ! CALL %continue sw(16_DC): ! CC %continue sw(16_FC): ! CM %continue sw(16_D4): ! CNC %continue sw(16_C4): ! CNZ %continue sw(16_F4): ! CP %continue sw(16_EC): ! CPE %continue sw(16_E4): ! CPO %continue sw(16_CC): ! CZ %continue {--------------------------------- CMA ------------------------------------} sw(16_2F): ! CMA %continue {--------------------------------- CMC ------------------------------------} sw(16_3F): ! CMC %continue {--------------------------------- CMP ------------------------------------} sw(2_10111000): ! CMP 0 %continue sw(2_10111001): ! CMP 1 %continue sw(2_10111010): ! CMP 2 %continue sw(2_10111011): ! CMP 3 %continue sw(2_10111100): ! CMP 4 %continue sw(2_10111101): ! CMP 5 %continue sw(2_10111110): ! CMP 6 %continue sw(2_10111111): ! CMP 7 %continue sw(16_BE): ! CMP M %continue sw(16_FE): ! CPI %continue {--------------------------------- DAA ------------------------------------} sw(16_27): ! DAA %continue {--------------------------------- DAD ------------------------------------} sw(2_00001001): ! DAD 0 %continue sw(2_00011001): ! DAD 1 %continue sw(2_00101001): ! DAD 2 %continue sw(2_00111001): ! DAD 3 %continue {--------------------------------- DEC ------------------------------------} sw(2_00000101): ! DCR 0 %continue sw(2_00001101): ! DCR 1 %continue sw(2_00010101): ! DCR 2 %continue sw(2_00011101): ! DCR 3 %continue sw(2_00100101): ! DCR 4 %continue sw(2_00101101): ! DCR 5 %continue sw(2_00110101): ! DCR 6 %continue sw(2_00111101): ! DCR 7 %continue sw(16_35): ! DCR M %continue sw(2_00001011): ! DCX 0 %continue sw(2_00011011): ! DCX 1 %continue sw(2_00101011): ! DCX 2 %continue sw(2_00111011): ! DCX 3 %continue {--------------------------------- DI ------------------------------------} sw(16_F3): ! DI %continue sw(16_FB): ! EI %continue {--------------------------------- ------------------------------------} sw(16_76): ! HLT %continue {--------------------------------- IN ------------------------------------} sw(16_DB): ! IN %continue sw(16_D3): ! OUT %continue {--------------------------------- INC ------------------------------------} sw(2_00000100): ! INR 0 %continue sw(2_00001100): ! INR 1 %continue sw(2_00010100): ! INR 2 %continue sw(2_00011100): ! INR 3 %continue sw(2_00100100): ! INR 4 %continue sw(2_00101100): ! INR 5 %continue sw(2_00110100): ! INR 6 %continue sw(2_00111100): ! INR 7 %continue sw(16_34): ! INR M %continue sw(2_00000011): ! INX 0 %continue sw(2_00010011): ! INX 1 %continue sw(2_00100011): ! INX 2 %continue sw(2_00110011): ! INX 3 %continue {--------------------------------- JMP ------------------------------------} sw(16_DA): ! JC %continue sw(16_FA): ! JM %continue sw(16_C3): ! JMP %continue sw(16_D2): ! JNC %continue sw(16_C2): ! JNZ %continue sw(16_F2): ! JP %continue sw(16_EA): ! JPE %continue sw(16_E2): ! JPO %continue sw(16_CA): ! JZ %continue sw(16_E9): ! PCHL %continue {--------------------------------- LD ------------------------------------} sw(16_3A): ! LDA %continue sw(2_00001010): ! LDAX 0 %continue sw(2_00011010): ! LDAX 1 %continue sw(16_2A): ! LHLD %continue sw(2_00000001): ! LXI 0 %continue sw(2_00010001): ! LXI CMP 5 %continue sw(2_10111110): ! CMP 6 %continue sw(2_10111111): ! CMP 7 %continue sw(16_BE): ! CMP M %continue sw(16_FE): ! CPI %continue {--------------------------------- DAA ------------------------------------} sw(16_27): ! DAA %continue): ! MOV M, 4 %continue sw(2_01110101): ! MOV M, 5 %continue sw(2_01110110): ! MOV M, 6 %continue sw(2_01110111): ! MOV M, 7 %continue sw(2_00000110): ! MVI 0 %continue sw(2_00001110): ! MVI 1 %continue sw(2_00010110): ! MVI 2 %continue sw(2_ DEC ------------------------------------} sw(2_00000101): ! DCR 0 %continue sw(2_00001101): ! DCR 1 %continue sw(2_00010101): ! DCR 2 %continue sw(2_00011101): ! DCR 3 %continue sw(2_00100101): ! DCR 4 %continue sw(2_00101101): ! DCR 5 %contin0 %continue sw(2_00010010): ! STAX 1 %continue {--------------------------------- NOP ------------------------------------} {--------------------------------- ------------------------------------} sw(0): ! NOP %continue {----------------------------------------------------- DI ------------------------------------} sw(16_F3): ! DI %continue sw(16_FB): ! EI %continue {--------------------------------- ------------------------------------} sw(16_76): ! HLT %continue {-----------------------%continue sw(2_10110110): ! ORA 6 %continue sw(2_10110111): ! ORA 7 %continue sw(16_B6): ! ORA M %continue sw(16_F6): ! ORI %continue {--------------------------------- POP ------------------------------------} sw(2_11000001): ! POP 0 %continue sw(2_00010100): ! INR 2 %continue sw(2_00011100): ! INR 3 %continue sw(2_00100100): ! INR 4 %continue sw(2_00101100): ! INR 5 %continue sw(2_00110100): ! INR 6 %continue sw(2_00111100): ! INR 7 %continue sw(16_34): ! INR M %continue sw(2_0--------------------------------- ROT ------------------------------------} sw(16_17): ! RAL %continue sw(16_1F): ! RAR %continue sw(16_0F): ! RRC %continue sw(16_07): ! RLC %continue {--------------------------------- RET -------------------------JM %continue sw(16_C3): ! JMP %continue sw(16_D2): ! JNC %continue sw(16_C2): ! JNZ %continue sw(16_F2): ! JP %continue sw(16_EA): ! JPE %continue sw(16_E2): ! JPO %continue sw(16_CA): ! JZ %continue sw(16_E9): ! PCHL %continue {---------Z %continue {--------------------------------- RIM ------------------------------------} sw(16_20): ! RIM %continue sw(16_30): ! SIM %continue {--------------------------------- RST ------------------------------------} sw(2_11000111): ! RST 0 scaled ? %continue sw(2_11001111): ! RST 1 %continue sw(2_11010111): ! RST 2 %continue sw(2_11011111): ! RST 3 %continue sw(2_11100111): ! RST 4 %continue sw(2_11101111): ! RST 5 %continue sw(2_11110111): ! RST 6 %continue sw(2_11111111): ! RST 7 %continue {--------------------------------- SBB ------------------------------------} sw(2_10011000): ! SBB 0 %continue sw(2_10011001): ! SBB 1 %continue sw(2_10011010): ! SBB 2 %continue sw(2_10011011): ! SBB 3 %continue sw(2_10011100): ! SBB 4 %continue sw(2_10011101): ! SBB 5 %continue sw(2_10011110): ! SBB 6 %continue sw(2_10011111): ! SBB 7 %continue sw(16_9E): ! SBB M %continue sw(16_DE): ! SBI %continue {--------------------------------- SHLD -----------------------------------0 %continue sw(2_00010010): ! STAX 1 %continue {--------------------------------- NOP ------------------------------------} {--------------------------------- ------------------------------------} sw(0): ! NOP %continue {------------------------------------------------ SUB ------------------------------------} sw(2_10010000): ! SUB 0 %continue sw(2_10010001): ! SUB 1 %continue sw(2_10010010): ! SUB 2 %continue sw(2_10010011): ! SUB 3 %continue sw(2_10010100): ! SUB 4 %continue sw(2_10010%continue sw(2_10110110): ! ORA 6 %continue sw(2_10110111): ! ORA 7 %continue sw(16_B6): ! ORA M %continue sw(16_F6): ! ORI %continue {--------------------------------- POP ------------------------------------} sw(2_11000001): ! POP 0 %continue s%continue {--------------------------------- XOR ------------------------------------} sw(2_10101000): ! XRA 0 %continue sw(2_10101001): ! XRA 1 %continue sw(2_10101010): ! XRA 2 %continue sw(2_10101011): ! XRA 3 %continue sw(2_10101100): ! XRA 4 --------------------------------- ROT ------------------------------------} sw(16_17): ! RAL %continue sw(16_1F): ! RAR %continue sw(16_0F): ! RRC %continue sw(16_07): ! RLC %continue {--------------------------------- RET -------------------------sw(16_E3): ! XTHL %continue %repeat %end %endoffile /12/01/82 CSEP=1,1;AREA=1,2;LISTON=1,3;LISTOFF=1,4 END=1,5;BLOCK=1,6;W=1,7;LOC=1,8;TEXT=1,9;VAR=1,10 ROM=0;RAM=1 B=8,0;C=8,1;D=8,2;E=8,3;H=8,4;L=8,5;A=8,7 BC=9,0;DE=9,1;HL=9,2;SP=9,3;IX=9,4;IY=9,5;AF=9,7 I=10,0;R=10,8 LD=2,16_8000 ADD=2,16_8180;ADC=2,16_8188;SUB=2,16_990;SBC=2,16_8198 AND=2,16_9A0;XOR=2,16_9A8;OR=2,16_9B0;CP=2,16_9B8 INC=2,16_104;DEC=2,16_105 EX=2,16_8200 EXX=16_D9 LDI=16_A0ED;LDIR=16_B0ED;LDD=16_A8ED;LDDR=16_B8ED CPI=16_A1ED;CPIR=16_B1ED;CPD=16_A9ED;CPDR=16_B9ED INI=16_A2ED;INIR=16_B2ED;IND=16_AAED;INDR=16_BAED OUTI=16_A3ED;OTIR=16_B3ED;OUTD=16_ABED;OTDR=16_BBED IN=2,16_8600;OUT=2,16_8601 RETI=16_4DED;RETN=16_45ED DAA=16_27 CPL=16_2F NEG=16_44ED CCF=16_3F SCF=16_37 RST=2,16_700 PUSH=2,16_800;POP=2,16_801 IM0=16_46ED;IM1=16_56ED;IM2=16_5EED;DI=16_F3;EI=16_FB NOP=0;HALT=16_76 RLCA=7;RRCA=16_F;RLA=16_17;RRA=16_1F RLC=2,16_300;RRC=2,16_308;RL=2,16_310;RR=2,16_318 SLA=2,16_320;SRA=2,16_328;SRL=2,16_338 RLD=16_6FED;RRD=16_67ED BIT=2,16_8440;RES=2,16_8480;SET=2,16_84C0 JR=2,16_C520;JP=2,16_C5C2;RET=2,16_45C0;CALL=2,16_C5C4 DJNZ=2,16_510 UNC=5,9 NZ=5,0;Z=5,8;NC=5,16_10;CY=5,16_18 PO=5,16_20;PE=5,16_28;P=5,16_30;N=5,16_38 åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå