LnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!)/^dkz6>CHAINSTUTRANSCENREALMODEPRIMS2 PRIMS2 SOSIO DIRSTUFFDIRSTUFF bsǾ #"III.PCL.3Au' )TOOLS.LIB494,/FIND.FILES.CODE :)FIND.FILES.LIB:/+PAGING.TEXT3d:a8*PAGING.LIB:4READ.ME.FIRST >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@Lg9g&':./3Copyright Apple Computer, Inc., 1983 - Ira L. Ruben  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ USES {$U FLOATLIB/REALMODES.CODE} REALMODES; FUNCTION SIN(X:REAL):REAL; FUNCTION COS(X:REAL):REAL; FUNCTION EXP(X:REAL):REAL; FUNCTION ATAN(X:REAL):REAL; FUNCTION LN(X:REAL):REAL; FUNCTION LOG(X:REAL):REAL;  IMPLEMENTATION E Vb < 0ݪPܪP0š YY0PYǠYPF D ۮ   ڪPXP šEצ:š  >#צ*צ:á >š{-NVWf-N@ȡQ-Pצ:-á:ײPN? XP ??زP>پ/ˡ צ/P?8??زP>? pp~*0< 0ݪPܪP0š YY0PYǠYPF D ۮ   ڪPXP šEצ:š  >#צ*צ:á >š{-NVWf-NتPRš+R+PP4تPRšG+R+PGP4GRšزGRPزGPR0ȡپ á* š*۾١:/˄ /P /áadditions} &PROCEDURE stop_exec; #IMPLEMENTATION X E te stringlength must be even or else change code} &PROCEDURE setchain {tytle: string} ; {$p} )BEGIN {setchain} ,IF length(tytle)>sizeof(chainfile)-2 THEN /chainfile := copy(tytle, 1, sizeocval(VAR val: string); &{Pascal 1.1 additions for application support} &FUNCTION set_prefix(new_prefix: string): boolean; &PROCEDURE get_prefix(VAR current_prefix: string); &PROCEDURE get_pathname(VAR pathname: string); &{Pascal 2.0 additions} &PROCEDURE stop_exec; #IMPLEMENTATION N E &PROCEDURE getcval(VAR val: string); &{Pascal 1.1 additions for application support} &FUNCTION set_prefix(new_prefix: string): boolean; &PROCEDURE get_prefix(VAR current_prefix: string); &PROCEDURE get_pathname(VAR pathname: string); &{Pascal 2.0 צNot a block devicePצSegment request deniedPצSegment table fullPצInvalid segment numberPצSegment not foundPئInsufficient heap spaceתPצ?No files were selected from directory or the directory is emptyPئ%Pathname does nfoundתPئFile not foundתPئDirectory is fullתPצIncompatible file formatPצEnd of file would be exceededPئPosition out of rangeתPצAccess not allowedPצ File is busyPצNot a SOS volumePצDuplicate volume errorPVV.VVVVצ.V šڹئDevice name not foundתPצResource not availablePצ I/O errorPئDevice is write-protectedתPצInvalid pathname syntaxPئPath not foundתPئVolume not &PROCEDURE setchain(tytle: string); &PROCEDURE setcval(val: string); 1073 lines compiled in 2.30 minutes. . 7.088.225.226.227.228.251.252.253.ǾV ɡ(VVצ00VV.VGdɡ'VV0ETFLOATLIB/TRANSCEND.TEXT*:>twt{+w LPot{ DEVO/FLOATLIBtJJ|rXt{JJXt{X //d- ^ -ECommand: E(dit, R(un, F(ile, C(omp, L(ink, X(ecute, A(ssem,G9 9 آ9 9آ99آ9 9آ99آ9 9آ99n ب9 9999990 /9 9 >ߡڑ9!,ب"! .ء1ٹ#($$% &'( .ٹ)'*#+,-. jء1ٹ/(0$1 234 eal): boolean; function isNaN(x: real): boolean; function integral(x: real): boolean; function unordered(x, y: real): boolean; function infinity: real; function maxreal: real; function minnorm: real; '^'^function minreal: real; function makeNaN(signal: boolean): real; function copysign(x, y: real): real; function logb(x: real): real; function scalb(x: real; n: integer): real; function nextafter(x, y: real): real; Implementation E unction finite(x: real): boolean; function isNaN(x: real): boolean; function integral(x: real): boolean; function unordered(x, y: real): boolean; function infinity: real; function maxreal: real; function minnorm: real; '^'^thalt(e: xcpn; b: boolean); function gethalt(e: xcpn): boolean; procedure setround(x: rmode); function getround: rmode; procedure setclos(x: closure); function getclos: closure; procedure setdnorm(x: denorm); function getdnorm: denorm; function finite(x: re list to the front n.j. 7/26/82}  function sqrt(x: real): real; function rem(x, y: real): real;  procedure savenv(var e: numenv); procedure restenv(e: numenv); procedure setxcpn(e: xcpn; b: boolean); function getxcpn(e: xcpn): boolean; procedure se type numenv = array[0..2] of integer; rmode = (rnear, rpos, rneg, rzero); closure = (proj, affine); denorm = (warning, normalizing); xcpn = (invop, underfl, overfl, div0, inxact, cvtovfl);  {these function definitions have been moved from the end of th  ??ܳ1? ?=~@:?ܳ^  9   9 á   9q99 á  H9/9á  9 A     >[hhhhhhhhHHHHHH`(6> Fh&jF ????2 ?  ??ܳ1? ?=~@:?ܳ^  9   9 á   9q99 á  H9/? ?> ??    >9ܑ95?.????2 ??L=[?9  J 9 9$ ? ?8 ?? ġ,@ነ 9 9/9 á   9 ?Br99B 9?;ܳ1?ܳ^; S>9߳I@߳}:#{9L.6ZO$<=*      < ?  &.ٹ5'6#789: jع;<=>* á?@ áABDDE *Dá HB  6GCF D Ná(EF I!  F) \0 0  2)22)*`%Р0 % 2)8`%0Ԡ0 ffff쩀%A0 4)4074)@E0iii2)8`2)`$%ʥjŐ8Lti i&&&eeP 3b88 E50V&&jfHHHHHH`*$Pߠ0 2)HHHH l%L0 HHHH2)L2)4)@:4hhhhHHHHHH`$hhhhhhHHHHHH`"hhhhhhhhhh&&8ffff8e080 HHHH`HHThhhhhhhhhh8&&&HiHHH`8hhhhhhhhhhhh**HHHH`8hhhhhhhhhhhh&ffHHHHHH`>hhhhhhhhhhhh&&jfHHHHHH`BhhhhhhhjhHjjHHHHH`*hhhhhhHHHHHH`"hh5)`hhhhhhH5)@HHH`,hhhhhhH50HHH`*hhhhhhhhhhH&*HHH`.hhhhhhhhhhH**)HHH`0hhhhhhhhhh*J2)ʢ2) HHHH`4`@4` 4`4`hhhhhh404)@ 4) HHHH`:5)`5 @`5 ``2)ߑ`hhhhhhhh0)YU0)HD0)730)&"0)ʢ0) HHHH`hhhhhhhh2)YU2)HD2)732)&"0)ߑ`2 `2 `2 `2 `2 `2 `2)`2)`2)`2)`2) 0 2) l` 0 2) l` 0 2) l` 0 2)  l` 0)`0)`0)`0)`0)`H`"hhhhhh3HHHH`"hhhhhh1HHHH`"hh4hhHH`hh2hhHH`hh0hhHH`0 2) l` 0 2) l`RM M"MfOM1S Q "-!ǀ@ hhhhhh5HHHÄNM-ܡܑP  š  <R  ȡ  $H ZS.KL"M(N (OM/   NMz fNMNt   \ < J K$L92hhhhhhhhhhhh&*8f$3C$&&jHjHHHHH`8ߥץ0ϊLIHHHHhhhhhhhhh hFfff8 @| e e e e Ffff Ffff  e e e e &&&8 LAFfff Ffff  e eee e e e e &&&e eeeLH  )right_arrow = 146; {2nd right arrow char} )up_arrow = 147; {up arrow char for "more above"} )down_arrow = 148; {down arrow char for "more below"} )up1 = 149; {1st third of "more" for "more above"er for window frames} )bot_right = 143; {bottom right corner for window frames} )bar = 144; {vertical bars on window frames} )dash = 145; {1st char of the right arrow} n} )right_side = 139; {right side bar/dash intersection} )top_left = 140; {top left corner for window frames} )top_right = 141; {top right corner for window frames} )bot_left = 142; {bottom left corng} )err_d_arrow = 135; {down arrow used in error msg} )err_l_arrow = 136; {left arrow used in error msg} )err_r_arrow = 137; {right arrow used in error msg} )left_side = 138; {left side bar/dash intersectio)f_char = 3; {}  f_code = 4; {}  )maxstr = 132; {max length of a "strng"}  ){Special font characters defined by define_new_font} )err_u_arrow = 134; {up arrow used in error ms /BEGIN {with cursor at end of line we can support lines longer 6than the viewport width} /cp := length(line)+1; /x0 := x0-length(line); /WHILE x0<0 DO 2BEGIN {[g+]} 2x0 := max_x+x0+1; y0 := y0-1; 2END; {[g-]}  END ,ELSE {if cursor)f_ascii = 2; {} ine := line; ,inserting := false; ,maxstr1 := maxstr+1; ,get_viewport_limit(max_x, max_y); ,getxy(x0, y0); ,highest_y := y0; , ,first_time := true; ,erase_setting := NOT curs_at_eol; ,IF curs_at_eol THENn = 12; {max number of open files allowed}  )ioread = 0; {read mode for a file} )iowrite = 1; {write mode for a file}  )f_avail = 0; {file types} )f_text = 1; {}   &{$p---------------------------------------------------------* '| PRIMS2 - String Version of Primitives - Updated 08/28/83 | '*----------------------------------------------------------*}  &USES sosio, chainstuff;  &CONST {[j=13/40]} )max_ope X 8>*9SGEMPTYHEA\YINPUTFIBBOUTPUTFIBbYSYSTERM BxYSWAPFIB BYDKVID rkTHEDATE +DEBUGINFYSTATE ^>PL ``]VO)&%  XMLI#x&T|( l r  & < R | $ < T l ,Rx4X|$N x>z \ x8  Lb HH`hhhhh*68jh*vHH` `hh00 2)hh ljH*vjHHHHH`Vvvv`666``8`yyyy`8  L     SL   JL 0 S LL 5ӥ L 5Ll  E  6ELI  SEU 0   &&&%e   e e e e  FJH HHHHH`4)@ 4  0 2)hh l` ^hhhhhh x x   88 e   } )up2 = 150; {2nd third of "more" for "more above"} )up3 = 151; {3rd third of "more" for "more above"} )down1 = 152; {1st third of "more" for "more below"} )down2 = 153; {2nd third of "more" for "more below"} )down3 = 154; {3rd third of "more" for "more below"} # &TYPE {$p} )filedesc = integer; {file descriptors - NOT SOS ref num}  )strng = string[140]; {string )have_error: boolean; {true==>and error was detected} ) )cons_bufr: ^cons_buffer; {ptr to big console buffer} )cons_len: integer; {number of bytes in "cons_bufr"} ) )open_tbl: ARRAY [1..max_open] OF fct; {File Control Ta , a_dc3 { 19 } , )a_dc4 { 20 } , a_nak { 21 } , a_syn { 22 } , a_etb { 23 } , a_can { 24 } , )a_em { 25 } , a_sub { 26 } , a_esc { 27 } , a_fs { 28 } , a_gs { 29 } , )a_rs { 30 } , a_us { 31 } , a_sp { 32 } : char; ) stx { 02 } , a_etx { 03 } , a_eot { 04 } , )a_enq { 05 } , a_ack { 06 } , a_bel { 07 } , a_bsp { 08 } , a_ht { 09 } , )a_lf { 10 } , a_vt { 11 } , a_ff { 12 } , a_cr { 13 } , a_so { 14 } , )a_si { 15 } , a_dle { 16 } , a_dc1 { 17 } , a_dc2 { 18 }char} )tab: char; {$09 tab character} )newline: char; {$0D new line character} )escape: char; {'\' special char trigger}  ){Ascii codes $00 to $32} {[j=0/0,f-]} )a_nul { 00 } , a_soh { 01 } , a_)valid_chars: setofchars; {valid read_keyboard chars} ) ){Universal Character Constants} )endstr: char; {$00 end of string char} )endfile: char; {$03 end of file char} )backspace: char; {$08 backspace at '*' as *system.library.} )err_bell_sw: boolean; {true==>let write_error ring the bell} )dot_text_code: boolean; {true==>add .text/.code if required} )codef_setup: boolean; {true==>setting up a codefile} ) x/y set by mustgetarg which are Hused by mustopen and mustcreate} H )sel_menu_x, sel_menu_y: integer; {selector menu x/y coordinates} )sel_menu_len: integer; {nbr of names shown in menu at any time} ) )lib_sw: boolean; {true==>trerefix} )exec_prefix: string; {executing program prefix}  )must_prefix: strng; {"$" prefix for mustopen and mustcreate} )must_suffix: strng; {"$" suffix for mustopen and mustcreate} )must_x, must_y: integer; {screen)stdout: filedesc; {standard output file descriptor}  )console: integer; {.CONSOLE SOS I/O ref nbr} )cons_d_num: integer; {device number for console}  )curr_prefix: string; {current Pascal system filename p setofchar; {command options} )ret_to_shell: boolean; {true==>return to shell}  shell_name: string; {shell name (default *shell/shell.code)}  )stdin: filedesc; {standard input file descriptor} PACKED ARRAY [0..2048] OF char; {big buffer for screen} ) )setofchar = SET OF char; {a parameter type to some Primitives} & &VAR {[j=15/40]} {$p} )nargs: integer; {total number of arguments} )options: ;buffer: bufr_ptr; ;bufr_cp: 0..1025; ;bufr_size: 0..1024; ;end_of_file: boolean; 8END; & )io_blk_ptr = ^io_blk; {pointer to standard I/O blocks} ) )io_blk = PACKED ARRAY [0..511] OF 0..255; {a standard I/O block} ) )cons_buffer =8RECORD {File Control Table} ;ref_nbr: integer; ;ft: f_avail..f_code; ;ct: (c_console, c_printer, c_silent, c_other); ;mode: ioread..iowrite; ;filename: strng; ;curr_line: strng; ;line_len: integer; ;line_cp: integer; ;pvt_bufr: boolean; format}  )bufr_ptr = ^io_buffer; {I/O buffer pointers}  )io_buffer = PACKED ARRAY [0..1025] OF char; {I/O buffers with 2 Ynulls at 1024-5}  )f_entry_bufr = PACKED ARRAY [0..38] OF 0..255; {file entry buffers} ) )fct = bles} @{$p-----------* A| Primitives | A*------------*} A &PROCEDURE str(n: integer; VAR s: string); & &PROCEDURE trim_blanks(leading: boolean; VAR s: strng; trailing: boolean); & &PROCEDURE get_td(VAR s: string); & &FUNCTION open_directory(dir_name: strng; bufr: io_blk_ptr): integer; & &PROCEDURE close_directory; & &FUNCTION next_dir_entry(VAR file_entry: f_entry_bufr): boolean; & &FUNCTION dev_or_vol(name: strng): boolean; & &PROCEDURE setup_filename(VAR name: strng; VAR ftype: integئתPġّڞڿ'  áۡڞ-> `š2ڡ  šńۑ D:#//   : ::ed, rc: integer): boolean; & &PROCEDURE get_options(valid_options: setofchar; options_file: strng; VAR delim: char; curs_at_eol: boolean); & &PROCEDURE getxy(VAR x, y: integer); & &PROCEDURE get_viewport_limit(VAR x, y: integer); & &FUNCTION dEDURE p_message(s: strng; fd: filedesc); & &FUNCTION open_odometer(name: string; x, y: integer): integer; & &PROCEDURE display_odometer(od: integer); & &PROCEDURE set_odometer(n, od: integer); & &PROCEDURE close_odometer(od: integer); & AR c: char): char; & &PROCEDURE putc(c: char); & &PROCEDURE putstr(s: strng; fd: filedesc); & &PROCEDURE putline(VAR s: strng; fd: filedesc); & &PROCEDURE get_sos_error(sos_rc: integer; VAR msg: strng); & &PROCEDURE p_error(msg: strng); & &PROCtline(VAR s: strng; fd: filedesc): boolean; & &PROCEDURE closef(fd: filedesc); & &PROCEDURE remove(name: strng); & &FUNCTION set_echo(on_or_off: boolean; fd: filedesc): boolean; & &FUNCTION have_input(fd: filedesc): boolean; & &FUNCTION getc(V:VAR eoff: boolean); & &PROCEDURE flush_buffer(fd: filedesc); & &PROCEDURE put_out_line(fd: filedesc; VAR line: strng; len: integer); & &FUNCTION getcf(VAR c: char; fd: filedesc): char; & &PROCEDURE putcf(c: char; fd: filedesc); & &FUNCTION geer); & &FUNCTION openf(VAR name: strng; mode: integer; bufr: bufr_ptr): filedesc; & &FUNCTION createf(VAR name: strng; mode: integer; bufr: bufr_ptr): filedesc; & &PROCEDURE next_page(fd: filedesc; bufr: bufr_ptr; VAR size: integer; Z۪M OL: LwOO˄aN'L:LG'ML:L+'ڝ'#'۝'$'ܝ''''ġ ':'٭$'ɡ'á%'ٝ': &'ޝ'ڝ'޾ˡ''š''ڝ'ݞ'ޝ'ۂ'ޝ''ݝ'ݝ'š'ˡ ڪKKš-K/ˡ$./ÍKKK/ KPצQ   Ȅ2ʀ'_r'ʀQ˄ʀˍʀ':QʀDŽšʀDŽʀʀ'=ʀ'\áL'? ':QʀáLʀILˡCR̀ƀʀnjƀצ: ǎƀRƀ.ƀ'? ':QLáʕڢڣڢKڣٿڢڣٝ'=ٝ'9Í ڢKڣR'c̀ʀʀġʀá''? ':Qʀʀʀ:ʀá"ʀ'_ʀ ʀá>ʀʀʀ'_ʀʀ ʀO؂ܕġROOč <OOO۞O ٪ە؞š,OO'OOO OOݕOO؞ޡOO؂Oá OO<ٝ':ˡB'cv'cKKšKá*KšKKڝ'_ KKKK: K;LLKnjL: ǎLLצ.L 'cOOá   *Oؾ'=ÄOQˍ ؝'Uš'? ':'_áVLˡ=OONnjO: ǎOOצ.O'? ':  'cܣܣܢܣ'_á<ܣܣܢܢ ܣܢ۝':ܢܣL :  :á⢀á>⢀ˡ*⣀''''⣀ޑ  'cNNá''? ':N:pNáV'Q˄NˍN':DŽšDŽ'=DŽ'\á'_ 9:;<=O>?^:#@ 00 00 00A@'c!>=š'c : ᓡ E˄ RˡÂÏá :  áá:sá:Kצ.CONSOLE8 '? :'? :ǀ'=:áˡ-''''ݑ9   NSOLEׯ9צ .SILENTYPE.PRINTERׯۚᢀᢀڟˡᢀ0ᢀ'á ''''ᢀښᣀ'_ᣀ'_ᢀᢀᢀ ō, B==š'cDE'5̀ƀ5ƀҦ.TEXTƀҪ5Lš?̀ƀ5ƁR;ƁRƀҦ..ƀҪ5OQSx|~ 'c ˡ ܪá nj צ.Ǎ .CO55.5/˄5#˄&5̀ƀҧ'@Pƀ5ƀҪ55߾.á'(''5ɡ ƀתƀ5ƀƀҪ'(V''Nƀ.TEXTׯ 5ƀ.CODE׷'5̀ƀ5ƀҦ.CODEƀҪM''Dƀ.TEXT׷ƀצ.COƀҦ QƀҪá@55̀ƀҧ'@Pƀ5ƀҪ5 5/á5š~5 ˡ(5/5̀ƀצ/ƀ5ƀҪL55̀ƀצ.ƀ5ƀҪ555 :5/& 55'(š5 Ą.0ܝ'ڝ'ŕȡ ڂ 5 ܳ ƀǀǓ ƀǀš ƀ :š\55 ˡ,5̀ƀ Pƀצ/Qƀ5ƀҪ5̀ƀ Pƀצ QƀҪ5̀ƀ P  ߿5̀ƀnjƀҦ ǍƀҪ5%á'55̀ƀҧ'iPƀ5ƀҪ:55*áV5á%5̀ƀҦ#4:ƀ5ƀҪ"5̀ƀצ#4ƀ5ƀҪ5#áƀ  ʀʀ'=ʀʀ ʀʀʀ'OʀÄYʀʀ š š'DŽšDŽʀʀ%šDŽšDŽʀʀʀߚʀʀʀˍۍʀʀ? ?Lˡ0DŽɡ(š#ނDŽšDŽ ޞނj( ?'cݣL ݢ?Lá ݢ>''á ȡ'c ˡ}áFࣀš'= :<+ác++Ǜ ̀ʀȡ+'?+:!#š"#"'Wáp š[  'W$B  Ǜ 'W'W 'XLjd šO@  A$e (if any)-'&nCw$DŽ$#%ؓ"ء* ɡ #Ä! ٝ'D'`5  '`ٝ'R á '`.%a%&Ǜǀ&< +צ5 (or CTRL-D) and (or CTRL-F) delete charactersL..I (or E or CTRL-E) for . . mode%.AAצ3D (or CTRL-Y) deletes from cursor to end of line, 3AצCTRL-X deletes whole lineLAצ'ESCAPE restores original lin08@š0 ؂؏0A$ ġ% 'W%@A0bB$replaceת insertת'&'&צ and move cursor, 'ڣ,ڢڣ1'ڣ-Bڣ-š#ڢڣ/ ڢڣ0 ڢڣ1'ڣ-ڢڣ/ ڢڣ0 ڢڣ1 ' ؤ3ۢ'Nۣۢ* '>ۣۢ*:< '''?:*! ؂š ؕ022ۿ2ڿ2 /020202*010ō  Z "' ؤ3'ڢ+ڣ+ڢ,dڣ,dڢ- ڢ.ڣ- ڢڣ2'ڣ.ڣ+š5ڢڣ/'ڣ+ڢڣ0'ڣ,ڢڣ1'ڣ-uڣ,š,ڢڣ/ ڢڣ0KJKȡJJJ'= 6ܪP10' 032200012ɡOšOɡš//JšJ//JšJ/2+2,2-2.2//202/212022212/2/ 2mptyئ%Pathname does not specify a directoryתZ0mP<&u_C+bVVצ SOS error VV_f Jت'X'M'N9R٪Juplicate volume errorצNot a block deviceצSegment request deniedצSegment table fullצInvalid segment numberצSegment not foundئInsufficient heap spaceתצ?No files were selected from directory or the directory is et foundתئVolume not foundתئFile not foundתئDirectory is fullתצIncompatible file formatצEnd of file would be exceededئPosition out of rangeתצAccess not allowedצ File is busyצNot a SOS volumeצDVGdɡ'VV0VV.VVVVצ.V šڹئDevice name not foundתצResource not availableצ I/O errorئDevice is write-protectedתצInvalid pathname syntaxئPath no'cۣš'=ۣۣۢ'=ۣڿN צ8016.037.039.043.064.068.069.070.073.074.076.077.078.080. VV ǖVצ(082.087.088.225.226.227.228.251.252.253.ǾV ɡ(VVצ00VV.SCAPE to terminate.ם'R'DK-K'Dá9L ''cá'"'cˡ'?:6ڝ'<؝'=٪JKJKȡJJJ 0ˡ :á::ࣀ''''ࣀ'  تJ JˡI:IL̀ƀצCannot remove ƀǚƀ̀ƀLnjƀ.Ǎƀ .Press RETURN to continue, E0Ǜ'W0'W 'Xá$U ɡ=     Ǜ'W 'XV DŽš%Line is too long!צצ-) š      Ǖ`$  ȡ4@A$ Ǜ0 'X$  K$B$@AǛ0á0ġB\$H ƀצ.ǍƀaYSSɡ ƀתƀƀSƀƀ.CODE׷!̀ƀnjƀ.ǍƀSS/S RRSˡ,ƀSRƀƀSRRƀ.ˡ צܪ ܪצjHJL,(1٪$á1/á̀ƀnjƀƀ$á]/צ:Ä!̀ƀnjƀ/Ǎƀ̀ƀnjƀƀܦ׷ צč*צ=/Í 5&1Q '''()Qá!̀ƀǾ̀ƀnjƀƀ$ ̀ƀnjƀƀġ^áU۪USSá UצBS/US RRSá Uת#UUƀSRƀU/Uצצ^ˍצ/Ä̀ƀUnjƀƀ8`J.۝'ō:''ݾ'9ˡܧ'ݾ-T//GMMnjM ǍM۾ ܏۾0* `0 ߪצ*%Í5$Ä&<ƀFƀF]FFʁ;'&'X))'2ʁ9Ɓ<ʁ8ʁ2 Ɓ<ʁ7ʁ6F'>Ɓ3Ɓ4:́:!؝'D 'X.E* f-'`<#''''+''?':)'&'2Lʁ2''ʁ2'ʁ5''ʁ5'ʁ;>''''+''?'Ɓ4:́:)ʁ2ʁ5,́9Ɓ7Ɓ6#Ɓ<'ʁ2Ɓ<R Ɓ<''M'́8Ɓ<ʁ8ʁ2'NƁ<ʁ8ʁ2'́9''& 'X; 9*(39<82 <8<99pFƀƀ].%́;ʁ;'`'?Ɓ:Ɓ4:́:ƀ׷ƀ׷]׷׷́5ƀ́2ƀʁ2šƀ́2]ʁ2š]́2ʁ2š́2ʁ2LšLZ'?:))*nj)66ȡ Ǒ)Ǎ)*ǎ)66ȡ Ǒ)Ǐ)))*66ȡ'U)ǐ)*66ȡ'U)ǐ)''?:,Td,ئ׷`2š2':'!'a 'ɡ'߭V&'bš'>'a'b:'b*'تII'bš''a'bI'bI'b<('bġ''a'bؿ'b'b())))*)*)*)+ |DǏ Dǐ DǑDǒ ? DǓ"UDǔU"DǕ6***"D'?:ǖF)))&DǗ3HxpDǘ6***"DǙF)))&Dǚ3HxpD'?:T %''ߝ'á/'?':'?'.'Z'?':'F'a'b'':,' dž*IDLJI*DLjDlj  DNJnjnjnjnjnjnjnjDNjnjnjnjǏnjnjnjnjDnj| DǍ D'?:ǎ)+-/1357V&("'?:$##O#$ؓؿ$E࿶EEEEEEEE0D''ߝ'š&%(ɡ''&%' 'X#" DŽ$Ą%צLine is too long!צצ-$K @  AǛ0'V?#צ š    $B'?&:!#%'ˡ'T 'XǛ}$á תwˡ'Tؓ"ء   ǯǿC#"')'!/צM̀ƀ Argument ƀMǕƀ is missing.ǡƀ צ.Press RETURN to continue, ESCAPE to terminate.ם'R'DL-L'Dá9ئתh'Xצڡ'!' 59;'!' #؝'R'DL"L'Dá9l ,2ڪƀާ'ƀ'٪'!' ƀƀ19 NNȡNPׯ'!Ʉf'X'Mצ: P.'N9́%Ɓ%צ Cannot open SnELName File Type Blocks Modified Time Created Time Length תPL Lnnھ/ánڞ'M'Nn ?'n  Un ɡType = תProDos=תn ooo(o^ ڕڞ-' -   ת  R Z J ڕڞ:0 ڕڞxM)٢(ء'N)'R)>MڟɄM'U)ښڟˡMښ'S)5@Ná'U)M.Oá'T)M.P    ʁ:á ʀݸʀݚʀݸ H)*)))) LˡǘǙǚ'# '"LǑǑǑ'# '"LˡǘǙǚ'# '" LǑǑǑ'# '" L|K ) Ǒ)ǒ) ) )ء'ƀʀˡ &HƁ&Ɓ&̀ƀʀܿƁ&ƀʀܞƁ&á%ƀ́:Ɓ:ƀnjƁ:/ǍƁ:IJ(4ɡ &Hƀʀ́:ʁ:ƀߪʁ: Ɓ&Ɓ&ʁ: Ɓ&ʁ:Ɓ&ʁ:Ɓ&!ʁ:ʁ:ʁ:NɡNݕN bG۶šL0Iڶš!ܶڕ:Jƀ۪Lڪ٪L̀̀ƀ''/ƀ%ƀ́:Ɓ:ƀnjƁ:צ.ǍƁ:؍N ܑ/ ܑá۪ۧ'@'@)á צN݂ݑN݂ڦת٦תئתá&Gܾ/á!NNnjNצ/ǍN&Gܑ/ ܑˡN݂ݑNšNNצ=šNZ'Rá'%*ۦ*SYSTEM.LIBRARY.תצTSƀ\1&5VUWWšW.áWWƁWƁTS#RQ$SQátxX5á ۧ'@''NNnjN.nue, ESCAPE to terminate.'R'D[-['Dá&5́ƁnjƁƁxǝƁW''fW/ˡ^Wɡ \ת\ƁWƁ\.TEXT׷\.CODE׷!́ƁnjƁצ.ǍƁVUWWšW=áWǍƁVU'UZƀ'\'٪Z'RˡƁ1۪''!́ƁnjƁ.ǍƁצTSƀ\1&5''PƁxPO6Ɓ1OˡOƀ́ƁƀnjƁ.ǍƁ צ.Press RETURN to contiړVUTƁ')Y Y'UZ')G'9۝'D'R'U'TZ"')ƁZ'Dá&5צ=š'UZZ'UZ'TÍ/Íj!́ƁnjƁצ/ǍƁ́ƁnjƁ=te.'R'DO-O'Dá9'!' 59Nš'!' ݧ''19'!Ne0f 4ުġ ׷ VU#VUצ=šY2/á&ÝƁnjƁ=ǍƁY NNȡNPׯ'!Ʉf'X'Mצ: P.'N9́%Ɓ%צCannot create Ɓ%ǚƁ%́sƁsPnjƁsצ.ǍƁs צ.Press RETURN to continue, ESCAPE to terminaƁ%ǘƁ%́rƁrPnjƁrצ.ǍƁr צ.Press RETURN to continue, ESCAPE to terminate.'R'DO-O'Dá9'!' 59Nš'!' ݧ''19'!Nc0d 3ڪƀާ'ƀ'٪'!' ƀƀ19۪n #ڕڞn%Rn/Sn5Rn?SnǀnIڕڞI:nnJ'&'&E -'&Q `ƀG'#9ŝ'#ɍ9'#'"ŝ'"ɍ'"'$ɡ'$'"'$š '"'$`ƀ Hȡ!á ᑚ&6'$š'$ #Ɓ9Z'?Ɓ9:%!&6'#'"'#'"+''?Ɓg:),)'#'"*()*NJ) ̂ʂȡ Ǒ) Nj)ϭL_ ,]٪צEnter option letters׷4 (type צ ? for help): \[#ƀתƀ')aeźeʁȡBe deddeá'?:'X) *'U)`á'?:'X) 'S)'T)` L+''?;:'? :[N+*V $zF  bbצ and move up and downצ-ޡo more informatiońhƁh for the " Ɓh Ɓh" optionƁhצ-&]# Z'? : L+''?;:), ,+ *)*)'S) a'`^''>:!'` á'Rߝ'RÝ'`.))) _ˡǕǖǗ5 _ ǑǑǑ5 _ˡǘǙǚ5_ ǑǑǑ5_L^'bš'٢'a'b'b'b'R)>`ڟɄڮ`'U)ښڟˡڮ`ښ-8a.'ál  آצNmm'U)Yġ 'T)V [nánnmm'T)Y ˡiá]ڟ˶m˄-ٶnánnmm'T)Yġ 'U)V \)*)) ) )ء'M)'bš'ۢ'a'b'b'bء'N)'R)YڟɄY'U)ښڟˡYښ'S)5@Zmánnmm'U)Y ˡjá]ڟ˶n˄-ٶmánn} vo}v o v o v o v o  V'b š''a'b 'b 'b.XˡXvXˡ}XoX.W˄) )ۢڳ ڶ Ǒ)ǒ[*\ٶ)ض^č))+ FU[ Ǔ[ Ǖ ǖ Ǘ }}}}}ǘ}Ǚ}ǚ}}} } } ǔKKIkI"ˍfKFšKFKKKKáJ JJlI ák JkJjlKš(KKK)šK)KKKK KKlkLLáLJlJJlT)\irectory infoƁ$-á˄ʂ Ʉ+ߞ߂ ̂ƂnjƂ/ǍƂ!jAl 6تJ)JKKKá  ʁ #Ɓצfrom the list.Ɓƀ-'#'"'#'"+''?Ɓg:&'?Ɓ9:( U "$qqǕáQ[ and move up and downצ selects, unselects gives dá'ˡ ˄  á0 #'S) ̂ʂġ 'U) M*MƁ̂ƂƂ is no longerƂ#ƀ selected.ת#ƁƁ š1ƀ̂ƂƁ#Ƃצ $ƂƀGƂ#elected Ƃ#Ɓá!Ɓ̂ƂƁ#Ƃצ $Ƃ#'` KM''> :! '` á'Rޝ'RÝ'`.޹á'?:'X) MOá'?:'X) MP*)*)'S)ʂN'`ȡáCƁ$Select only one fileת#ƁOnly one file may be selectedת#Ɓ6Ɓ$̂ƂצSelect max of ƂƁ6Ƃצ filesƂ#Ɓ̂ƂצOnly ƂƁ6 Ƃ files may be see')ƀ'R'Dǯǿe"')ƀe'Dá9eǯǿצ̀  ̀ʀȡʀá$Ɓ*No help file exists.תƀ TƁ*́ƁצFile ƁǑƁʀƀƀ́ƁƀnjƁ.ǍƁצHelp file not available, sorry.Ɓ*ƀצ.Press RETURN to continue, ESCAPE to terminate.'R'De-e'Dá9ee'RǯǿZƀ́ZʁȡBƀZddd dd ˡ ؼdZZe'Rá &7f nm '?';''<9'('''`'&''%''?''!9'#'"'$') XhZh[hhhhhuhno^alȑk)t\n]ok[HZH`pb.CONSOLExma>a<Íc'\a]]\\d'\'9]]c}''֝'a'֝''֝''e/b''a<á'<eצSTDIN: 3'<'=eצSTDOUT: 4'=''@'٦תR&(>8.'š'&'?ġ]]a'9á''*SHELL/SHELL.CODEתP']'9ˡ'] á]]']'9ˡ'''֝']]\dc'] ˧']'9˄']aa'>ç']'9˄@]]']aaná '\'=atá '\'< '\ad '^'צ' '7ڡNParameter(s): 'צ''R'Da"a'Dá^^'9'̀ƀ'njƀ^Ǒƀa'צ']aa''a ''a,',,,צ.CONSOLEP '<'<STDINc '='=STDOUTc,'>*:*צ odometersc'ZZfb۪b'']''@'٦ת^^^'9^^'9^'9''צtaWPfile Sosfile Type = 13Type = 14DirectoryתP,-,-ȡ ,', ,,6RPS Data RPS IndexAFDiscardAFModel AFReptFMTScreenLibתP,-,-ȡ ,', ,,'...JanFebMarAprMayJunJulAugSepOctNovDecתP, -,-ȡ+/'i+ ,,+á+:'i+ ,,+á 'i'@P 'i+,'?ɡ 'D'?':'ǀ''HUnknown Badfile Codefile Textfile AsciifileDatafile Binary Fontfile תP,-,-ȡ ,', ,,HFotofile BasicprogBasicda'R'=\'>''R''U ' ''0'1'2'3'4'5'6'7'8' 9' 0,-,-ȡ' ,3,,, -,-ȡ'c,,,''@'i'i++á 'i'@PBّ .'NRc'_'^']'\'['Z'Y'X'W 'V 'U 'T 'S 'R'Q'P'O'N'M'L'K'J'I'H'G'F'E'D'C'B'A'@ '?'_'9'\':'W';'V'eZ_:`!'`ee á'Ree'RÝ'`e.egddij́́klƁqƁqƁq\Ɓq[Ɓq Ɓq?ƁqZƀʀHZá3'>Ɓq_:`ƁqáƁq Ɓq? ƁqƁq ƀTZZʀƁqƁq?'>Ɓq_:`jápf!\['X'MצInvalid options file fokmk፴vwȑ୳୴`~}lec`^[XWTGD'h*h+hh/0h-h,+H*H`20'$"J'hhhhifi+e,eii\i/dਊ L\Zi/bਊ LZXi/`ਊ LXVi/^ਊ LVXZ\^਩ `਩ b਩ d਩ -.;T>:HH`z0ean; Function SOS_Set_B_Mark ( RefNumb, Base, BlockNumb : Integer; Var RetCode ) :: Boolean; Function SOS_Set_B_EOF ( RefNumb, Base, BlockNumb : Integer; Var RetCode ) 8: Boolean; Function SOS_Get_Mark ( RefNumb : Integer; Var Low, Hi, RetCode ) : Boor; Var RetCode ) : Boolean; Function SOS_Flush ( RefNumb : Integer; Var RetCode ) : Boolean; Function SOS_Get_B_Mark ( RefNumb : Integer; Var BlockNumb, RetCode ) :: Boolean; Function SOS_Get_B_EOF ( RefNumb : Integer; Var BlockNumb, RetCode ) 9: Bool Function SOS_Write ( RefNumb : Integer; Var OutputBuf; NumbBytes : Integer; 7Var RetCode ) : Boolean; Function SOS_S_Write ( RefNumb : Integer; Var OutputBuf; OffSet, 9NumbBytes : Integer; Var RetCode ) : Boolean; Function SOS_Close ( RefNumb : Integemb : Integer; Var InputBuf; BytesReq : Integer; 6Var BytesRead, RetCode ) : Boolean; Function SOS_S_Read ( RefNumb : Integer; Var InputBuf; OffSet, 8BytesReq :Integer; Var BytesRead, RetCode ) : Boolean; Integer; Var RetCode ) 9: Boolean; Function SOS_Open ( Var Path; ReqType, Pages : Integer; Var SysBuf, RefNumb, 6RetCode ) : Boolean; Function SOS_New_Line ( RefNumb, Flag : Integer; NewCh : Char; Var RetCode ) 7: Boolean; Function SOS_Read ( RefNue, FileList; ListLeng : Integer; :Var RetCode ) : Boolean; Function SOS_Volume ( Var DevName, VolName, TotalBlks, FreeBlks, RetCode ) 5: Boolean; Function SOS_Set_Prefix ( Var Prefix, RetCode ) : Boolean; Function SOS_Get_Prefix ( Var Prefix; Length : Function SOS_Destroy ( Var Pathname, RetCode ) : Boolean; Function SOS_Rename ( Var OldPath, NewPath, RetCode ) : Boolean; Function SOS_Set_Info ( Var Pathname, FileList; ListLeng : Integer; :Var Retcode) : Boolean; Function SOS_Get_Info ( Var Pathnam81Compiler [A3/1.1]tion in source): t_Info ( Var Pathname, FileListINTRINSI' Integ; :Var RetCode );'')xPxxINTEGER xx,REAL &J~ceCHAR \n SOS_D_Info ( DevNo : Integer; Var DevName, DevList, RetCode ) 5: Boolean; {$ENDC} {$IFC SOS_File_IO} Function SOS_Create ( Var Pathname; FileID, AuxID, Storage, EOFBlk : Integer; 8Var RetCode ) : Boolean; C Copyright 19D_Status ( DevNumb, StatusCode : Integer; 9Var StatusList, RetCode ) : Boolean; Function SOS_D_Control ( DevNumb, ControlCode : Integer; :Var ControlList, RetCode ) : Boolean; Function SOS_Get_D_Num ( Var DevName, DevNumb, RetCode ) : Boolean; Functio { Set to TRUE to compile SOS calls for: } {$SETC SOS_File_IO := TRUE} {$SETC SOS_Device_IO := TRUE} {$SETC SOS_Utility_IO := TRUE} {$SETC SOS_Memory_Mgt := TRUE} {$SETC SOS_Plus_IO := TRUE} {$IFC SOS_Device_IO} Function SOS_MJC><99j%hhhhhh    eȄ HH`T% ,r>^.#x$<"6%j%%%&*&n((&(:??DFG"H\HSZ\Ph P*f/1237 8n88;<<<<*=Z==$@F@p@HIJIdJ6@7 :;(;@;n;;;<<>>>BGrGGHI2JJN.OdOxOOOOPQT:HH`,z012345678901234567890MJC><99j'hhhhhh    eȄ HH`T'^ >^ P*`p#4$!$&%Z%%d&%&(f(&(x9@>>D*FFFQ0Y[Phn (*.,013066lean; Function SOS_Get_EOF ( RefNumb : Integer; Var Low, Hi, RetCode ) : Boolean; Function SOS_Set_Mark ( RefNumb, Base, Low, Hi : Integer; Var RetCode ) 7: Boolean; Function SOS_Set_EOF ( RefNumb, Base, Low, Hi : Integer; Var RetCode ) 6: Boolean; Function SOS_Set_Lev ( Level : Integer; Var RetCode : Integer ) : Boolean; Function SOS_Get_Lev ( Var Level : Integer ) : Boolean; {$ENDC} {$IFC SOS_Utility_IO} Function SOS_S_Fence ( Priority : Integer ) : Boolean; Function SOS_G_Fence ( Var Priorȑ)H(H`A:7431.*(' hh(h)hhhhЍL h(h)hhhhύ1hhhhhhh\h[`[ x]_ȑ^`)H(H`M;7421.+$! th(h)hhhhэL_ h(h)hhhh΍5hhh[ xȑ)H(H`"@h(h)hhhhύ&hhhhh\h[[ xm]m^^m_j^jȑ)H(H`MA=;:2/.,) th(h)hhhhэNL7 h(h)hhhh΍7hhh _h*`^ah]hh\h[[ xh(h)hhhhhhh_h`hhh\h^][[ xȑ)H(H`86.*'$"!^h(h)hhhhhhh_h`hhheheL :h(h)hhhhhhh\h[[ xȑ)H(H`"@h(h)hhhhhhh\h[hh^hh]hh\h[[ xȑ)H(H`,)&" Nh(h)hhhhhhhhh_h`hh^]h\h[[ xaȑb)H(H`B@742.,+(! rh(h)hhhhhhhhh_h`hhheheLj @Lh(h)hhhhhhh^hhh]\[[ xȑ)H(H`0&# Rh(h)hhhhhhhhhhe]dhcha[t_u`hbhhh\[ x^ȑ)H(H`SROMIHGFEDB8652h(h)hhhhhȑ)H(H`QA10-*'%$lh(h)hhhhhhhhhhhhhh_]^\[[ xb`ȑca)H(H`A@=:7541.'$ h(h)hhhhhhhh]\[[ xȑ)H(H`%"hh]\[[ xȑ)H(H`%"Lh(h)hhhhhhhhhh_]^\[[ xȑ)H(H`-,)&#! ^ÍL č>h(h)hhhhhhh`hhhhh_]^\[[ xh\h^`]_ a[[ xȑ)H(H`8430-*'%$ lh(h)hhhhhhh fh*geh]hdhhbhchah`r^s_hh\[[ xȑ)H(H`]ZWVUSPNLHGFED;865h(h)hhhhhhYL) 5h(h)hhhhhhhh^_h]hh\h[[ xȑ)H(H`G0-+($"!`h(h)hhhhhhhhhh[\][ x^ȑ)H(H`+(%#"Zh(h)hhhhhhhhhh ) : Boolean; Function SOS_G_Seg_Info ( SegNumb : Integer; Var FiveInts ) : Boolean; Function SOS_G_Seg_Numb ( SegAddr : Integer; Var SegNumb, RetCode ) : Boolean; Function SOS_Rel_Seg ( SegNumb : Integer; Var RetCode ) : Boolean; {$ENDC} {$IFC SOS_Plus_IO} Function Up_Load ( Var Char_Set ) : Boolean; Function At_Sign ( Var Object ) : Integer; {$ENDC} Implementation E Integer; Var FiveInts ) : Boolean; Function SOS_Change_Seg ( SegNumb, ChgMode : Integer; Var Pages, =RetCode ) : Boolean; Function SOS_G_Seg_Info ( SegNumb : Integer; Var FiveInts ) : Boolean; Function SOS_G_Seg_Numb ( SegAddr : Integer; Var SegNumb, RetCode ) : Boolean; Function SOS_Rel_Seg ( SegNumb : Integer; Var RetCode ) : Boolean; {$ENDC} ory_Mgt} Function SOS_Request_Seg ( Base, Limit, SegId : Integer; Var SegNumb, =RetCode ) : Boolean; Function SOS_Find_Seg ( SrchMode, SegId : Integer; Var FiveInts ) : Boolean; Function SOS_Change_Seg ( SegNumb, ChgMode : Integer; Var Pages, =RetCodeity : Integer ) : Boolean; Function SOS_Set_Time ( Var Time ) : Boolean; Function SOS_Get_Time ( Var Time ) : Boolean; Function SOS_Get_Analog ( Mode : Integer; Var Value, RetCode ) : Boolean; Function SOS_Terminate : Boolean; {$ENDC} {$IFC SOS_Mem`hah^h_h]hh\h[[ xȑ)H(H`?97531.*(' fh(h)hhhhЍ L h(h)hhhhhhh\h[[ xȑ)H(H`"@h(h)hhhhhh[[ x\ȑ)H(H`>h(h)hhhhh\h[`[ x)H(H`2h(h)hhhhhh[a[ x\ȑ)H(H`>h(h)hhhhhhii[\]b[ x)H(H`Lh(h)hhhhhhii[\]c[ x)H&FUNCTION expand_filename(prompt: string; VAR x, y: integer; @VAR fname, prefix, suffix: string): boolean; & &FUNCTION open_directory(dir_name: string; bufr: dir_bufr_ptr): integer; & &PROCEDURE close_directory; & &FUNCTION next_dir_entry(VAR fir(line1, line2, line3, line4: string; setting up a codefile} )dot_text_code: boolean; {true==>add .text/.code if required} )error_is_up: boolean; {true==>an windowed error is displayed} )err_bell_sw: boolean; {true==>let write_er} )error_is_up: boolean; {true==>an windowed error is displayed} )err_bell_sw: boolean; {true==>let write_error ring the bell} )lib_sw: boolean; {special switch for "libmap" and "library"} )esc_to_stop: char; {esefix: string; {current Pascal-system filename prefix} )exec_prefix: string; {executing program prefix} )prev_prefix: string; {"$" global prefix} )prev_suffix: string; {"$" global suffix} .text/.code if requirede to some routines} )dir_bufr_ptr = ^dir_bufr; {pointer to directory I/O buffers} )dir_bufr = PACKED ARRAY [0..511] OF 0..255; {a standard dir buffer} & f_entry_bufr = PACKED ARRAY [0..38] OF 0..255; {file entry buffers} & &VAR )curr_pr # &{$p--------------------------------------------------------* '| DirStuff - Directory Processing Unit - Updated 09/20/83 | '*---------------------------------------------------------*} &TYPE {[j=15/40]} )setofchar = SET OF char; {a param typ:.oolean; Function SOS_G_Seg_Info ( SegNumb : Integer; Var FiveInts ) : Boolean; Function SOS_G_Seg_Numb ( SegAddr : Integer; Var SegNumb, RetCode ) : Boolean; Function SOS_Rel_Seg ( SegNumb : Integer; Var RetCode ) : Boolean; {$ENDC} H` Dh(h)hhhh)H(H`Copyright 1981,1982,1983 Apple Computer, Inc.2347h*h+HH+H*H`&&&&v~.T4JPVz :@* : 8 R  x]L( )H(H`40-+*!Vh(h)hhhhhhhhh\h][D[ x^ȑ)H(H`,*'%$Th(h)hhhhhhh\h[E[ xȑ)H(H`"@h(h)hhhhhh  x)H(hh]hh\h[e^ȱ_A[ x^L8 )H(H`DA=:7310' lh(h)hhhhhhhhh]hh\h_^[B[ x^ȑ_)H(H`<93/,*)& jh(h)hhhhhhh\h[dC[ x(H`Rh(h)hhhhhhhhh\h[d[ xȑ⨪])H(H`0,*)Veh(h)hhhhhhhhh`hh^h_h\h][@[ xaȑ)H(H`:7531.,+& hh(h)hhhhhle_entry: f_entry_bufr): boolean; & &PROCEDURE read_keyboard(VAR line: string; max_len: integer; >delimiters: setofchar; VAR delim: char; >curs_at_eol: boolean); > &FUNCTION prompt_for_filename(prompt: string; VAR x, y: integer; DVAR fname: string; curs_at_eol: boolean): boolean; &FUNCTION search_directory(VAR name: string; VAR selections: bytestream; AVAR max_selected, rc: integer): boolean; # PROCEDURE get_pas_error(iorslt: integer; VAR msg: string); & &PROCEDURE get_sos_error(sos_rc: iǀš ƀ š\66 ˡ,6̀ƀ PƀӦ/Qƀ6ƀӪ6̀ƀ PƀӦ QƀӪ6̀ƀ Pƀצ QƀӪá@66̀ƀӧ/Pƀ6ƀӪ6 6/á6š}6 ˡ(6/6̀ƀ6ƀӪ:66*áV6á%6̀ƀӦ#4:ƀ6ƀӪ"6̀ƀצ#4ƀ6ƀӪ6#áƀ  6 Ą.0ܝ/ڝ/ŕȡ ڂ 6 ܳ ƀǀǓ ƀVVP_f J š%۾/ˡ./Í/ @צQ   Ȅ2  ߿6̀ƀPƀӦ QƀӪ6%á'66̀ƀӧ/*PumberPצSegment not foundPئInsufficient heap spaceתPצ?No files were selected from directory or the directory is emptyPئ%Pathname does not specify a directoryתPZ0mP<&u_C+bVVצ SOS error le would be exceededPئPosition out of rangeתPצAccess not allowedPצ File is busyPצNot a SOS volumePצDuplicate volume errorPצNot a block devicePצSegment request deniedPצSegment table fullPצInvalid segment nndתPצResource not availablePצ I/O errorPئDevice is write-protectedתPצInvalid pathname syntaxPئPath not foundתPئVolume not foundתPئFile not foundתPئDirectory is fullתPצIncompatible file formatPצEnd of fi76.077.078.080. VV ǖVצ(082.087.088.225.226.227.228.251.252.253.ǾV ɡ(VVצ00VV.VGdɡ'VV0VV.VVVVצ.V šڹئDevice name not fouئ File is busyתPئ&Volume format neither SOS nor Apple ][תP}ئDuplicate volume errorתP_ئNot a block deviceתPE&8" ~P3 bF33P3T3PJ ( צ8016.037.039.043.064.068.069.070.073.074.0te-protect errorPئ(Too many files open for system to handleתPئDevice is not availableתPצPath not foundPצVolume not foundPצFile not foundPצDirectory is fullPئ Attempt to read past end of fileתPئAccess not allowedתP33.3333צ.3 šڹئIllegal pathnameתPئNo room on deviceתPצUnit is not on linePئ#No such file in specified directoryתPצDuplicate pathnamePצFile is already openPצWriئתPġّڞڿ0 áۡڞ-8Zš2ڡ  šńۑ D  צ907.08.09.10.11.12.16.19.36.68.69.70.73.76.78.80.82.87.88.P ɡ'330nteger; VAR msg: string); & &PROCEDURE init_dirstuff; & #IMPLEMENTATION 4{$p----------------------------------* 5| Declarations hidden from the user | 5*-----------------------------------*} &CONST {[j=14/40]} X E & &PROCEDURE get_sos_error(sos_rc: integer; VAR msg: string); & &PROCEDURE init_dirstuff; & #IMPLEMENTATION 4{$p----------------------------------* 5| Declarations hidden from the user | 5*-----------------------------------*} &CONST {[j=14/40]} ƀӦ/ƀ6ƀӪK66̀ƀӦ.ƀ6ƀӪ666 6/.66/š6š6ƀƀצEXEC//  6.6/˄6#˄Ⓞ&6̀ƀӧ/Pƀ6ƀӪ66߾.á//6ɡ ƀצƀ6ƀƀӪ/Y/ⓄNƀ.TEXTׯ 6ƀ.CODE׷'6̀ƀ6ƀӦ.CODEƀӪM/Dƀ.TEXT׷ƀצ.CODE'6̀ƀ6ƀӦ.TEXTƀӪ6Lš?̀ƀ6ƁS;؏0.'#ġ! /!-.,! Z/'replaceת insertת//צ and move cursor, צ5 (or CTRL-D) and (or CTRL-F) delete charactersLƀ̀/¡؝// //ƀQ* t/</ܝ/ޝ/۝/*&//(&%/J#؂""š#ؕ,","8-"š,#؂"/ʀƀR ƀǝ//Ŀ/̀ƀʀʀ/ſƀʀʀ/̀// /ƀƀ,h,?,,ʀá//((&.ʀƀʀʀ ƀʀʀc/ƀƀ//ƀʀ//ƀƀ̀ƀצh׷?׷׷̀ƀ̀hʀšh̀?ʀš?̀ʀš̀ʀLšL̀Lʀ/ܝ/ʀ/ʀ/ޝ/ʀ/ʀá>/ܝ/ޝ/۝/*&//ƀ̀(ʀʀ+̀ƀƀƂ66ȡ/(ǐ()66ȡ/(ǐ(&/,Td+ئ׷^šá )'1Ƕ Ƕn,ƀPhP?PP"̀//+/+/T<'/ġ&//ؿ//((((()()()(*Z/(()nj(66ȡ Ǒ(Ǎ()ǎ(66ȡ Ǒ(Ǐ((()ǖF)))&#Ǘ3Hxp#ǘ6***"#ǙF)))&#ǚ3Hxp#/T "//֝/á//////؞!/ /ɡ/֭V%/š////*&تP++/š&#lj  #NJnjnjnjnjnjnjnj#NjnjnjnjǏnjnjnjnj#nj| #Ǎ #/ǎ |#Ǐ #ǐ #Ǒ#ǒ ? #Ǔ"U#ǔU"#Ǖ6***"#/̶ؿ$$࿶$$$$$$$$0#//֝/š."(ɡ//."/؞ /./Z///F///// dž*I#LJI*#Lj" /ɡ/á$/Н/ . /՝/ѝ/վˡ/'š'/ѝ/ݞ/՝/҂/՝//ԝ/ԝ/š/ˡ /$O!ؓbP.ˡ ۦתPܪP ܪPڦתP,.0XT۪P /1..u11˄_0/..F//.. +/ѝ/#/ҝ/$/ӝ///h/ġ //Э׷ צč*צ=/Í  .3/|/!3ábbPb.QbPTL55ɡ _צ_b5b_צ.CODEbbPb.QbP55/5 445ˡ(b54bPb544 445á 6תP!66b54bP6/6צPצ^ˍצ/Äbb6PbǠbP2$á+/ábbPbǠbP$áO/צ:ÄbbPbצ/QbPbbPbǠbPܦƁSƀӦ..ƀӪP6POQS ߪP צ*%Í/$Ä bbPbǠbP$bbPbǠbPġ^á6۪P655á 6צP@5/65..I (or E or CTRL-E) for . . mode%.AAצ3D (or CTRL-Y) deletes from cursor to end of line, 3AצCTRL-X deletes whole lineLAצ'ESCAPE restores original line (if any)/n0/)/ZZ'ɡPšP!(ؓ%ء*#ɡ#! ! Ä/¡/ٝ/5  /ٝ/ǚ á //(i(ƀǛǀƀ ƀƀácˡǘǙǚ/ / 6ǑǑǑ/ / 6|5 ( Ǒ(ǒ( ( (ء/(٢'ء/(/(>7ڟɄ7/(ښڟˡ7ښ/(5@8á/(7.9ƀʀ̀ʀ¢ƀʀ¢ ƀƀʀ¢ ƀʀ¢ƀʀ¢ƀ!ʀ¢ʀŸʀ¢=ʀ¢>á ʀ>=ʀʀ=  2()(((( 6ˡǘǙǚ/ /6ǑǑǑ/ /6R:4W۪P.ڪP٪P.̀̀ƀ/(WẀƀWPƀצ.QƀªPWʀˡ .2>=ƀ ƀ̀ƀʀƀƀʀƀá!ƀ̀ƀƀPƀצ/QƀªP34(@ɡ .2á00P0צ/Q0P.1ܑ/ ܑˡ0݂ݑ0Pš00Pצ=š00Pɡ0ݕ0P^1š.R03š!6543!53árl  áۧ/P/00P0.Q0Pܑ/ ܑá#۪Pۧ/P//ܾ/á)á צP0݂ݑ0P݂ڦתP٦תPئתPá.1ܾ/Ɓצ.QƁP8799š9=á9=/á/*ۦ*SYSTEM.LIBRARY.תP/Sׯ/|ׯ#mתZ?צZ65m?;צ65ۧ/S/|;;. 8799š9.á99Ɓ9Ɓˡ1ƀ́ƁƀZƁצ.[Ɓ צ.Press RETURN to continue, ESCAPE to terminate.ם/Ǘ/>>/á. ́ƁPƁƀaƁP9/b9/ˡZ9ɡ ?תZ?Ɓ9ƁZ?.TEXT׷?.CODE׷́ƁP=w=/=/Í/Í^́ƁPƁ/QƁṔƁPƁצ=QƁP87/==/ˡƀ۪Z/́ƁPƁ.QƁPm/SZ?/|Zצ65m?. /2ƀ21 ƀɪP1787 צ=š<./á"<́ƁPƁ=QƁP<ړ876Ɓ/< @(( ުPġ ׷ 8ƹǛu'á תPZPˡ/ؓ%ء # #ǯǿ0&%//&%#'Ą%Line is too long!צצ'CǛ,!  /'##G'>'-.Ǜ, á!,ġ  ! /T'B#! ˡ/!  /! / /á'M#ɡ7#####Ǜ/ /S#š%Line is too long!צצ'#š ## ###ǕX'###ȡ.-.' ƀƀǛ ̀ʀȡƀ/ƀ$!  š %&%/ád#šQ##/':##Ǜ#// /LjZ#šG-##.',Ǜ/,á/(7.:    ^ ڕڞ-/ -   ת  < Z J ڕڞ:0 ڕڞx=nELName File Type Blocks Modified Time Created Time Length תPL Lnnھ/ánڞ/Ŀ/ſn;;ȑ)H(H`SROMIHGFEDB8652/h(h)hhhhhhhhh;h;hh;;h;h;; ;;ȑ;)H(H`B@742.,+(! r/h(h)hhhhhhh;h;hhh;h;;;; ;ȑ)H(H`;; ;ȑ)H(H`8430-*'%$ l/č>h(h)hhhhhhh;hhhhh;;;;;; ;ȑ)H(H`QA10-*'%$l/h(h)hhhhhhhhhh;;;h;h;;;;;;h;hhh;; /5h(h)hhhhhhhh;;h;hh;h;; ;ȑ)H(H`G0-+($"!`/h(h)hhhhhhhhhh;;;; ;;ȑ)H(H`+(%#"Z/h(h)hhhhhhhhhhh;h;;;; ;//ȡ ڏ/ڂ '...JanFebMarAprMayJunJulAugSepOctNovDecתP //ȡڏ////////Ч/S/P/|תP9//// s0 ;8L 8  AsciifileDatafile Binary Fontfile תP//ȡ ڏ/ڤ HFotofile BasicprogBasicdataWPfile Sosfile Type = 13Type = 14DirectoryתP//ȡ ڏ/ڂ 6RPS Data RPS IndexAFDiscardAFModel AFReptFMTScreenLibתPš[/"//////Q/P/پ/ˡ////P//Q/P/*ΪP/*>/*š[/*"/*/////*Q/P/*پ/ˡ/*///*P//Q/P?HUnknown Badfile Codefile Textfilê?Ƃ?PƂ?/QƂ?P/ƀ!nFq , //// / / / / /////ö,/ / /.CONSOLEתP/#/??/P/>/ٹ( V "$rrǕá;[ and move up and downצ selects, unselects gives directory infoƀá~˄ʂ> Ʉ+ߞ߂ ̀̂?Ƃ?Ƃ?צ is no longerƂ?#ƀצ selected.#ƀƀ š1ƀ̂?Ƃ?ƀ#Ƃ? $Ƃ?ƀGƂ?#ƀ #ƀfrom the list.ƀƀ////*&/Ɓ%/ƀ޹á//( 79á//( 7:á&ˡ ˄  á0 /( ̂?ʂ?ġ /( 7)7ƀ̂?Ƃ?צSelect max of Ƃ?ƀƂ?צ filesƂ?#ƀ̂?Ƃ?צOnly Ƃ?ƀ Ƃ? files may be selected Ƃ?#ƀá!ƀ̂?Ƃ?ƀ#Ƃ?צ $Ƃ?#/ 57&/ /¡ // á/ޝ/Ý////*&/Ɓ(+(//)'()NJ( ̂?ʂ?ȡ Ǒ( Nj()()(/(ʂ>8/ȡáCƀʦSelect only one fileת#ƀOnly one file may be selectedת#ƀ//E /; Bk1/9ŝ/ɍ9//ŝ/ɍ//ɡ///š //Bk 2ȡ!á ᑚ. /š/ ƀZ/ƀ"!. / ƀ// ?/n  Un ɡType = תProDos=תn ooo(on #ڕڞn%ੁ: & & &&9R&!oExecution interrupted&9צ&4D FindFiles /// (Ver צ1.3) - &&8K'cë  PP_ &#Oצ.Ǎ_ צ.Press RETURN to continue, ESCAPE to terminate.'D'R&-ޝ'Dá&9צ&5&9á/F '!צ.CONSOLEListing to what file? ק'!' &5&9צ*.CONSOLEתצ'!' &5_'U٦ׯ٦#4:ת& 'Uޝ'Rˡ&5&9& צ;__.TEXTׯ&__nj_צ.Ǎ_&ݿˡ&__nj_ry? &#٦#4:ת& ')')G'9ٝ'D'R'U'T&"ޝ'Dá&9')&=š'U_ޝ'Uޝ'TÍ/ÍH&__nj_/Ǎ___nj_צ=Ǎ ``ȡ+޾ ޾ צצ=š``ɡ`ޕ`D #Start search from which directo"Look for what filename (pattern)? &# ')צ')G'9'D'R&"ߝ'Dá&9') &ׯ =You must enter a filename.צצ&-׷_ FINDFILE INFOs .(ZERRHOLDEDueFT^FONTHOLDzalCONSOLE 8쁾CONSDNUM΁CONSBUFRCONSLEN ^RdH65H: Lx,-F--05$$`,F.= DOWN1 XDOWN2 lDOWN3 FTEXT PhFASCII FCHAR FCODE CONSBUFF; CONSWTGD/h*h+hh/0h-h,+H*H`20'$"J/hhhhhh    eȄ HH`T/T>*.!f###'t'\(|((()4)++),P==@. צ.Press RETURN to continue, ESCAPE to terminate.'D'R&-ڝ'DááצThere is 1 matchP<& There are צ matchesP&Pצ in T^ filecPˡPsQPPצ.QPpJš, JšKJ4 ت ˡ* '>ੁI:KJJ š JJ {$q-,r-,v-}  {[n+,r+,x+]}  {*---------------------------------------------------------------------*  | O^T]LIBRARY FILES: %tools.lib $$ njƁ:צ/ǍƁ:ƀƁ:ƀ&NOOˡƀ́:Ɓ:njƁ:/ǍƁ:OƁ:.Ɓ:ƀ&IƀƀIáƀ wIP&́:Ɓ:PnjƁ:.ǍƁ: .Press RETURN to continue, ESCAPE to terminate.ם'D'RL&-L'DáOGOƁ%!p X:& š '='=&'=& š'=&&&'::'&h$rzl>rN. 4 Ɓ:צ/ǍƁ: M Gߩ & ƀ́:Ɓ:njƁ:צ/ǍƁ:ƀƁ:ƀ&NOOˡƀ́:Ɓ:njƁ:/ǍƁ:OƁ:.Ɓ:ƀ&IƀƀIáƀ wIP&́:Ɓ:PnjƁ:.ǍƁ: .Press RETURN to continue, ESCAPE to terminate.ם'D'R  ܭ  ت Ɓ% NƁ&&Kީ &Ɓ&JƀJƁ&ƀJƁ&áUOHÓ:ʁ:ƀʁ:GNáONMGOOMƀ́:Ɓ:ƀnjƁ:צ/ǍƁ: M Gߩ & ƀ́:Ɓ:ƥJ JJJ '>ੁI:K  ܩܩš&#'MPress SPACE to continue.'NnNÍݳ 'X'Rݝ'Rá |  | <<< Paging >>> |  | |  | Paging routines to simulate random access to a large virtual memory |  | |  | General Version |  | |  >real_virt: virt_rng; {corresponding virtual page} >written: boolean; {page modified in real memory} >lock_ctr: lock_rng; {page lock status} ;END;  )virt_tbl_fmt = ARRAY [virt_rng] OF ;RECORD {virtual-to-real table} .max_p_open; {range of open file nbrs}  )real_tbl_fmt = ARRAY [real_rng] OF ;RECORD {real-to-virtual table} >last_used: integer; {"time" this page was used} )real_rng = 0..max_real_page; {range of real memory page nbrs} )virt_rng = 0..max_virt_page; {range of virtual page nbrs}  )lock_rng = 0..max_locks; {range of valid locks} )open_rng = 0.ogical block 0} )blksize = 512; {size of one disk block} )blks_per_page = 1; {page_size DIV blksize}  &TYPE {[j=13/40]} )max_real_addr = 7679; {total bytes in real memory} )max_p_open = 2; {max nbr of open backing-stores} )max_locks = 255; {max nbr of locks per page} )block0 = 25; {l  &CONST {[j=14/40]} )version = 2; {file format version number} )max_real_page = 14; {total nbr of real memory pages} unlock_page(f: integer; real_ptr: real_mem_ptr): boolean;  &FUNCTION real_addr(f: integer; VAR virt_addr: virt_mem_ptr; 9VAR real_ptr: real_mem_ptr; setpw, 9lock_page: boolean): boolean;  #IMPLEMENTATION {$p} em_ptr);  &PROCEDURE vmark(f: integer; p: virt_mem_ptr);  &PROCEDURE vrelease(f: integer; p: virt_mem_ptr);  &PROCEDURE setpw(f: integer; real_ptr: real_mem_ptr);  &FUNCTION lock_page(f: integer; real_ptr: real_mem_ptr): boolean;  &FUNCTION &FUNCTION create_backing(fname, plot_fname: strng; >assumepw: boolean): integer;  &FUNCTION open_backing(fname, plot_fname: strng): integer;  &PROCEDURE close_backing(f: integer; keep: boolean);  &PROCEDURE vnew(f, amount: integer; VAR p: virt_mze; 8END;  &VAR {[j=0/40]} )nill: virt_mem_ptr; {value of virtual "NIL"}  ){[j=0/0]}  )real_mem_ptr = integer; {real memory addresses}  )virt_mem_ptr = 8RECORD {format of a virtual memory address} ;page: -1..max_virt_page; {-1 is for "nill"} ;offset: -1..page_si {$p} )page_size = 512; {assumed page size} )max_virt_page = 499; {max pages on backing store}  &TYPE {[j=13/40]}  *---------------------------------------------------------------------*}   UNIT paging;  #INTRINSIC CODE 32 DATA 33;  #INTERFACE  &USES {$u pascal.system/pas.lib} sosio, +{$u tools.lib} chainstuff, prims2;  &CONST {[j=14/40]} | Ira L. Ruben |  | 02/07/83 |  | | >virt_real: real_rng; {corresponding real page} >allocated: boolean; {true==>page exists on disk} >in_memory: boolean; {true==>in real memory} ;END; ){$p}  )real_mem_fmt = PACKED ARRAY [0..max_real_addr] OF char; {real memory}  )p_fct_ptr = ^p_fct; {pointers to FCT's}  )p_fct = 8RECORD {File Control Table} ;real_memory: real_mem_fmt; {pag&FUNCTION create_backing {fname, plot_fname: strng; assumepw: boolean): integer} ;  )VAR ,rc, fd, f: integer; ,dummy: boolean; ,virt_page: virt_rng; ,real_page: real_rng;  )BEGIN {create_backing} {[o=110]} &{$p--------------------------------------------------------------------* '| create_backing - create a backing store file and make ready for use | '*---------------------------------------------------------------------*}  en_tbl[f]); 5END; 2f_alloc := f; 2END; ,UNTIL found OR (f>max_p_open);  ,IF NOT found THEN /BEGIN /writeln('Too many open backingstore files'); /writeln('to open ', fname); /END; )END; {f_alloc} IL THEN 2f := f+1 /ELSE 2BEGIN 2found := true; 2IF p_close_tbl[f]<>NIL THEN 5p_open_tbl[f] := p_close_tbl[f] 2ELSE 5BEGIN 5IF memavailN &{$p--------------------------------------------------------------* '| f_alloc - allocate an available slot for a backing store file | '*---------------------------------------------------------------*}  there is some kind of error. & &PROCEDURE halt(parting_word: strng);  )BEGIN {halt} ,close_backing(0, true); ,writeln; ,writeln(chr(7), chr(18), parting_word, chr(17)); ) end_cmd; )END; {halt} &*) -------------------------* '| halt - close all files and die with a parting word | '*----------------------------------------------------*}  &(*Commented out. You could use this if you don't want boolean functions (which return when)plot_line: strng; {plot lines} )init_line: strng; {plot line initialization}  ){[j=0/0]} &{$p--------------------------pen/close tbls} )p_fct_size: integer; {byte size of an FCT} )i: integer; {used in initialization} bl: virt_tbl_fmt; {virt-to-real table} ;plot_fd: filedesc; {plot file descriptor} 8END;  &VAR {[j=12/40]} )p_open_tbl, p_close_tbl: ARRAY [1..max_p_open] OF p_fct_ptr; {oe to replace} ;virt_used: virt_rng; {highest page ever used} ;use_count: integer; {pseudo "timer"} ;assume_setpw: boolean; {true==>always write pages} ;real_tbl: real_tbl_fmt; {real-to-virt table} ;virt_t;ref_nbr: integer; {paging SOS ref nbr} ;p_fd: filedesc; {paging file descriptor} ;free_page: virt_rng; {next free page for "vnew"} ;free_offset: 0..blksize; {next free offset} ;page_into: real_rng; {next paging space-must be 1st} ;p_fct_id: PACKED ARRAY [1..6] OF char; {FCT id} ;p_fct_id1, p_fct_id2: integer; {-1,ver 2ndary FCT id [check} ;ver: integer; {file format version number} ,create_backing := 0; ,fd := mustcreate(fname, iowrite, NIL, 'Paging file: '); ,f := f_alloc(fname, fd); ,IF f<=0 THEN /BEGIN /closef(fd); /remove(fname); /END ,ELSE /WITH p_open_tbl[f]^ DO 2BEGIN 2p_fct_id := 'Paging'; 2p_fct_id1 := -1; 2p_fct_id2 := 0; 2ver := version; 2p_fd := fd; 2ref_nbr := open_tbl[fd].ref_nbr; 2free_page := 0; 2free_offset := 0; 2page_into := max_real_page; 2virt_used := 0; 2use_count := 0; 2assume_setpw := assumepw; 2IF plot_fnCopen_tbl[p_fd].filename, ' (SOS error ', rc, C')') 8ELSE IF NOT sos_write(ref_nbr, p_open_tbl[f]^, Nsizeof(p_fct), rc) THEN ;writeln('Cannot checkpoint ', Copen_tbl[p_fd].filename, C' (SOS write error ', rc, ')') 8ELSE IF NOT sos_flush(ref_nbr, rcWITH p_open_tbl[f]^ DO 5BEGIN 5IF plot_fd>0 THEN closef(plot_fd);  5IF keep THEN 8BEGIN {keeping file} 8IF NOT sos_set_b_mark(ref_nbr, 0, 0, rc) THEN ;writeln('Cannot set to block 0 on ', ng;  )BEGIN {close_backing} ,IF f=0 THEN /BEGIN /first := 1; /last := max_p_open; /END ,ELSE /BEGIN /first := f; /last := f; /END;  ,FOR f := first TO last DO /IF p_open_tbl[f]<>NIL THEN 2close a backing store file (remove if its temporary) | '*----------------------------------------------------------------------*}  &PROCEDURE close_backing {f: integer; keep: boolean} ;  )VAR ,first, last, rc: integer; ,dummy: boolean; ,name: str2open_backing := f; 2END; {WITH} )END; {open_backing} &{$p---------------------------------------------------------------------* '| close_backing - e.'); 5ok := false; 5END;  2IF NOT ok THEN 5BEGIN 5release(heap); 5p_open_tbl[f] := NIL; 5closef(fd); 5f := 0; 5END 2ELSE IF plot_fname='' THEN 5plot_fd := -1 2ELSE 5plot_fd := mustcreate(plot_fname, iowrite, NIL, K'Plot file: ');  5BEGIN 5writeln(fname, ' is not a backing-store file'); 5ok := false; 5END 2ELSE IF ver>version THEN 5writeln('Warning - old version of paging package!') 2ELSE IF ver'Paging') OR (p_fct_id1<>-1) OR :(p_fct_id2<>0) THEN ,mark(heap); ,f := f_alloc(fname, fd); ,IF f<=0 THEN /closef(fd) ,ELSE /WITH p_open_tbl[f]^ DO 2BEGIN 2p_fct_id := 'xxxxxx'; {invalidate id's for short read} 2p_fct_id1 := 0; 2p_fct_id2 := -1; 2p_fd := fd; 2ref_nbr := open_tbl[fd].ref_nlot_fname: strng} ;  )VAR ,rc, fd, f, size: integer; ,dummy, ok: boolean; ,heap: ^integer;  )BEGIN {open_backing} ,open_backing := 0; ,fd := mustopen(fname, iowrite, NIL, 'Paging file: '); &{$p-----------------------------------------------------------* '| open_backing - open an already existing backing store file | '*------------------------------------------------------------*}  &FUNCTION open_backing {fname, p ;END 8ELSE ;BEGIN ;allocated := false; ;in_memory := false; ;END;  2create_backing := f; 2END; {WITH} )END; {create_backing} {[o=80]} 8lock_ctr := 0; 8END; 2real_tbl[max_real_page].last_used := maxint;  2FOR virt_page := 0 TO max_virt_page DO 5WITH virt_tbl[virt_page] DO 8IF virt_page=max_locks THEN 5BEGIN 5writeln; 5writeln(chr(7), chr(18), 'Lock error on ', =open_tbl[p_fd].filename, chr(17)); 5lock_page := false; 5END 2ELSE 5BEGIN 5lock_ctr := lock_ctr+1; 5lock_page := true; 5END; )END; {lock_page} ON lock_page {f: integer; real_ptr: real_mem_ptr): boolean} ;  )BEGIN {lock_page} ,WITH p_open_tbl[f]^ DO /WITH real_tbl[(real_ptr-ord(p_open_tbl[f])) DIV page_size] DO e; )END; {setpw} {[o=80]}  &{*---------------------------------------* '| lock_page - "nail" a page into memory | '*---------------------------------------*}  &FUNCTIPROCEDURE setpw {f: integer; real_ptr: real_mem_ptr)} ;  )BEGIN {setpw} {[o=110]} ,WITH p_open_tbl[f]^ DO real_tbl[(real_ptr-ord(p_open_tbl[f])) DIV page_size].written := tru)END; {vrelease} &{$p--------------------------------------------* '| setpw - indicate a page has been written to | '*---------------------------------------------*}  & ,WITH p_open_tbl[f]^, p DO /BEGIN {[g+]} /free_page := page; free_offset := offset; /END; {[g-]} -----------------------------------* '| vrelease - reset free memory pointer used by vnew | '*---------------------------------------------------*}  &PROCEDURE vrelease {f: integer; p: virt_mem_ptr} ;  )BEGIN {vrelease} /page := free_page; offset := free_offset; /END; {[g-]} )END; {vmark}  &{*----------------'*---------------------------------------------------------*}  &PROCEDURE vmark {f: integer; p: virt_mem_ptr} ;  )BEGIN {vmark} ,WITH p_open_tbl[f]^, p DO /BEGIN {[g+]} 5END; 2END; )END; {vnew}  &{$p--------------------------------------------------------* '| vmark - return current free memory pointer used by vnew | t_offset>page_size THEN 5BEGIN 5free_page := free_page+1; 5free_offset := 0; 5next_offset := amount; 5END;  2IF free_page>max_virt_page THEN 5p := nill 2ELSE 5BEGIN 5p.page := free_page; 5p.offset := free_offset; 5free_offset := next_offset; p_open_tbl[f]^ DO /IF amount>page_size THEN 2BEGIN 2writeln; 2writeln(chr(7), chr(18), 'Attempt to allocate more than ', :'a page on ', open_tbl[p_fd].filename, chr(17)); 2p := nill; 2END /ELSE 2BEGIN 2next_offset := free_offset+amount; 2IF nex'*---------------------------------------------------------------*}  &PROCEDURE vnew {f, amount: integer; VAR p: virt_mem_ptr} ;  )VAR ,next_offset: integer;  )BEGIN {vnew} ,WITH &{$p--------------------------------------------------------------* '| vnew - allocate "amount" virtual memory without crossing page |  &{*-----------------------------------------* '| unlock_page - unlock a nailed down page | '*-----------------------------------------*}  &FUNCTION unlock_page {f: integer; real_ptr: real_mem_ptr): boolean} ;  )BEGIN {unlock_page} ,WITH p_open_tbl[f]^ DO /WITH real_tbl[(real_ptr-ord(p_open_tbl[f])) DIV page_size] DO 2IF lock_ctr<=0 THEN 5BEGIN 5writeln; 5writeln(ch=open_tbl[p_fd].filename, chr(18)); 5real_addr := false; 5exit(real_addr); 5END;  2{If monitoring of the paging behavior is specified, then do 3it now. Plot virtual pages in the real memory, the page 3being paged in, and the page selected to be pa >lowest := last_used; page_into := i; >END; {[g-]} 2IF lowest=maxint THEN 5BEGIN 5writeln; 5writeln(chr(7), chr(18), 'All pages are locked up on ', ge.}  2lowest := maxint; {we better find one!} 2FOR i := 0 TO max_real_page DO 5WITH real_tbl[i] DO 8IF lowest>last_used THEN ;IF lock_ctr=0 THEN >BEGIN {[g+]} END; {page_in}  2real_page := page_into; {this is where the page is put}  2{Find the least active real page in the real_tbl. It will 3become the page to be used the next time real_addr needs 3a pa2IF NOT sos_s_read(ref_nbr, real_memory, page_into*page_size, Dpage_size, i, rc) THEN 5BEGIN 5str(rc, s); 5writeln; 5writeln(chr(7), chr(18), 'Read error (', s, ') on ', =open_tbl[p_fd].filename, chr(17)); 5real_addr := false; 5exit(real_addr); 5virt_page*blks_per_page)+ Hblock0, rc) THEN 5BEGIN 5str(rc, s); 5writeln; 5writeln(chr(7), chr(18), 'Set mark error (', s, ') on ', =open_tbl[p_fd].filename, chr(17)); 5real_addr := false; 5exit(real_addr); 5END; _page].virt_real /ELSE 2BEGIN {page is not in the real memory} 2{page_in(page_into,virt_page); (coded in-line for efficiency) 2 Read a page from the backing store into real memory} 2IF NOT sos_set_b_mark(ref_nbr, 0, (fd].filename, chr(17)); 8real_addr := false; 8exit(real_addr); 8END; 5END; 2virt_tbl[virt_page].allocated := true; 2END; {allocate}  /IF virt_tbl[virt_page].in_memory THEN 2real_page := virt_tbl[virt2WHILE virt_used<=virt_page DO 5BEGIN 5virt_used := virt_used+1; 5IF NOT sos_set_b_eof(ref_nbr, 0, (virt_used*blks_per_page)+ Jblock0, rc) THEN 8BEGIN 8str(rc, s); 8writeln; 8writeln(chr(7), chr(18), 'Allocation error (', s, @') on ', open_tbl[p_ ,WITH p_open_tbl[f]^ DO /BEGIN /virt_page := virt_addr.page; /IF NOT virt_tbl[virt_page].allocated THEN 2BEGIN {allocate(virt_page); (coded in-line for efficiency) 9Allocate new pages on the backing store file} f necessary so 0that pointer will always point at the proper place. Note, proc 0calls are avoided here where possible to make this routine as 0efficient (time-wise, certainly not coding practices wise) as 0possible.} VAR real_ptr: :real_mem_ptr; setpw, lock_page: boolean): boolean} ;  )VAR ,virt_page: virt_rng; ,real_page: real_rng; ,i: real_rng; ,rc, lowest: integer; ,dummy: boolean; ,s: string[5];  )BEGIN {real_addr - page in page of the backing store i&{$p---------------------------------------------------* '| real_addr - convert "virt_addr" into a "real_addr" | '*----------------------------------------------------*}  &FUNCTION real_addr {f: integer; VAR virt_addr: virt_mem_ptr;r(7), chr(18), 'Unlock error on ', =open_tbl[p_fd].filename, chr(17)); 5unlock_page := false; 5END 2ELSE 5BEGIN 5lock_ctr := lock_ctr-1; 5unlock_page := true; 5END; )END; {unlock_page} ged out.}  2IF plot_fd>0 THEN 5BEGIN {plot virtual memory behavior} 5plot_line := init_line; 5IF virt_page<=73 THEN plot_line[virt_page+7] := 'p'; 5FOR i := 0 TO 73 DO 8WITH virt_tbl[i] DO ;IF in_memory THEN >IF real_tbl[virt_real].lock_ctr=0 THEN Aplot_line[i+7] := 'v' >ELSE Aplot_line[i+7] := 'l'; 5i := real_tbl[page_into].real_virt; 5IF i<=73 THEN plot_line[i+7] := 'g'; 5str(use_count, s); 5moveleft(s[1], plot_line[6-length(s)], length(s)); 5putline(plot_lin, PAGING PAGING D; &init_line := concat('00000 0 1 2 3', :' 4 5 6 7 '); #END {paging} .  #BEGIN {initialization} {$p} &p_fct_size := sizeof(p_fct) DIV 2; &nill.page := -1; &nill.offset := -1; &FOR i := 1 TO max_p_open DO )BEGIN )p_open_tbl[i] := NIL; )p_close_tbl[i] := NIL; )ENctr+1; 8lock_page := true; 8END; 2END;  /real_ptr := ord(p_open_tbl[f])+real_page*page_size+ ;virt_addr.offset; /END; {WITH} )END; {real_addr} 2IF NOT written THEN written := setpw;  2IF lock_page THEN 5IF lock_ctr>=max_locks THEN 8BEGIN 8writeln; 8writeln(chr(7), chr(18), 'Lock error on ', @open_tbl[p_fd].filename, chr(17)); 8lock_page := false; 8END 5ELSE 8BEGIN 8lock_ctr := lock_ht" page 0may not necessarily be the one elected to be paged out.}  /real_addr := true; /use_count := use_count+1; /IF use_count=maxint THEN usecount := 0; /WITH real_tbl[real_page] DO 2BEGIN 2last_used := use_count;   /{Increment the pseudo "timer" use_count. Don't let it reach 0maxint because of the way the search for the "oldest" page 0is done above. Page replacement may act funny for a while 0around the time we reset the timer, i.e., the "rigriteln; 8writeln(chr(7), chr(18), 'Write error (', s, ') on ', @open_tbl[p_fd].filename, chr(17)); 8real_addr := false; 8exit(real_addr); 8END; {page_out} 5END; 2END; {paging in the required page} 8writeln(chr(7), chr(18), 'Set mark error (', s, ') on ', @open_tbl[p_fd].filename, chr(17)); 8real_addr := false; 8exit(real_addr); 8END; 5IF NOT sos_s_write(ref_nbr, real_memory, page_into* Hpage_size, page_size, rc) THEN 8BEGIN 8str(rc, s); 8wne for efficiency) Write the real memory page 6(page_into) to the backing store file} 5BEGIN 5IF NOT sos_set_b_mark(ref_nbr, 0, K(real_tbl[page_into].real_virt* Kblks_per_page)+block0, rc) THEN 8BEGIN 8str(rc, s); 8writeln; d in from the backing 3store, then it must now be rewritten back to the backing 3store.}  2IF real_tbl[page_into].written THEN 5{page_out(page_into, real_tbl[page_into].real_virt); 5 (coded in-liin_memory := false; 2real_tbl[real_page].real_virt := virt_page; 2real_tbl[real_page].written := assume_setpw; 2real_tbl[page_into].last_used := maxint;  2{If the page selected to be paged out has been modified 3since the last time it itself was rea3the real memory and that the page that was previously not 3in has now been read in.}  2virt_tbl[virt_page].virt_real := real_page; 2virt_tbl[virt_page].in_memory := true; 2virt_tbl[real_tbl[page_into].real_virt].e, plot_fd); 5END; {plotting}  2{Given the page selected to be paged out, we can now update 3the paging tables to reflect that that page is no longer in  !ˍʀˍAL is not a backing-store filèʀš>(Warning - old version of paging package!aʀɡWFile format has changed since Lצ was made.̀ʀʀ ̀ʀȡʀ&!ʀ̀ʀxxxxxxʀʀʀʀʀ'cʀʀƀ:̀ʀ!ʀN*ƀƀ:̀ʀJ Read error (ʀ ) on LʀPaging׷ ʀt file: &4̀̀ʀʀȡ4ʀʀ̀ʀʀʀʀښʀʀ̀ʀ̀̀ʀʀȡDʀJʀ̀ʀɡʀʀʀʀʀʀʀ̀ʀW. L۪ڪL Paging file: &3̀ƀ L  Mܪ۪M Paging file: &4̀Mʀ ̀ʀȡ ʀ&M&!ʀ̀ʀPagingʀʀʀʀʀʀ'cʀʀʀ ʀ ʀ ʀ ʀ ښׯ ʀ&ʀ& Plo!ˡ~!ˡ!!W(!ɡBצ Insufficiant memory for FCT for  !'ōݓZ Too many open backingstore filesto open em_ptr);  &PROCEDURE vmark(f: integer; p: virt_mem_ptr);  &PROCEDURE vrelease(f: integer; p: virt_mem_ptr);  &PROCEDURE setpw(f: integer; real_ptr: real_mem_ptr);  &FUNCTION lock_page(f: integer; real_ptr: real_mem_ptr): boolean;  &FUNCTION unlock_page(f: integer; real_ptr: real_mem_ptr): boolean;  &FUNCTION real_addr(f: integer; VAR virt_addr: virt_mem_ptr; 9VAR real_ptr: real_mem_ptr; setpw, 9lock_page: boolean): boolean;  #IMPLEMENTATION E w(f, amount: integer; VAR p: virt_mem_ptr);  &PROCEDURE vmark(f: integer; p: virt_mem_ptr);  &PROCEDURE vrelease(f: integer; p: virt_mem_ptr);  &PROCEDURE setpw(f: integer; real_ptr: real_mem_ptr);  &FUNCTION lock_page(f: integer; real_ptr: real_mem_ptr): boolean;  &FUNCTION &FUNCTION create_backing(fname, plot_fname: strng; >assumepw: boolean): integer;  &FUNCTION open_backing(fname, plot_fname: strng): integer;  &PROCEDURE close_backing(f: integer; keep: boolean);  &PROCEDURE vnew(f, amount: integer; VAR p: virt_m  ){[j=0/0]}  '^'^)N^PN^NINTEGER NREAL  TCHAR 2 a virtual memory address} ;page: -1..max_virt_page; {-1 is for "nill"} ;offset: -1..page_size; 8END;  &VAR {[j=0/40]} )nill: virt_mem_ptr; {value of virtual "NIL"}99; {max pages on backing store}  &TYPE {[j=13/40]} )real_mem_ptr = integer; {real memory addresses}  )virt_mem_ptr = 8RECORD {format of  &USES {$u pascal.system/pas.lib} sosio, +{$u tools.lib} chainstuff, prims2;  &CONST {[j=14/40]} {$p} )page_size = 512; {assumed page size} )max_virt_page = 4ƀ!!ʀʀ&̀2צ ʀ&ʀ&צ Plot file: &4ʀ_a, áNNȡ!ˡ!OO&šO&&ءO:tCannot set to block 0 on 'cO (SOS error  )O!N*:sצCannot checkpoint 'cO (SOS write error  )hO:YצSOS flush error ( Pascal manuals. Call for your free set. On Side One: TOOLS.LIB; FIND.FILES.CODE; FIND.FILES.LIB; PAGING.TEXT; PAGING.LIB On Side Two: LIB.KRUN.CODE; CLEARSEG.CODE; SORT.DIR.CODE WAP /// SIG PUBLIC DOMAIN LIBRARY PDS NAME: Pascal Toolkit #2/#3 DISK ID#: 3PCL-03 BOOTABLE?: Nonbootable DESCRIPTION: Pascal Toolkit disks 2 and 3. Requires 3PCL-01 and knowledge of Pascal to operate. The /// SIG has many copies of the !!Pצ%00000 0 1 2 3%צ, 4 5 6 7 QR v"r ,  'c    á  ۚڡ|ġfצLock error on 'c ܧ!ft5z Z N*!!!!!ȡ"!!!!!   :& Write error () on 'c    á  ! &&JߤJߤJ ߚ     :&צSet mark error () on 'cAll pages are locked up on 'c &š! !PIȡ! p Iȡ7J!á ! v! l   Iȡ! g &!    :& Read error (צ) on 'c   ȡ+šá    áu) on 'c JߤJߤ Jߤ  :&צSet mark error () on 'cUnlock error on 'cܣ ݢ !Jߤ ȡ    :&Allocation error (צ,!ܢڧ!ġeLock error on 'cܣ ݢ !ܢڧ!ȡg page on 'cܣا!Iܣ قšܢܣܢ ܣšا!ܣآܣ ܢ ۚL ب!ܣܣ $ب!ܢښܢ ۚ$!ڢا!) on 'cOO&K'cOPPPáQQnjQצ.ǍQO&&  Zf*4!šAttempt to allocate more than  a