LnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!) pgmname DSKWIND.MAING ****************************************************************H * DISK WINDOW module - DSKWIND.MAIN 03/23/84 * G * (c) D A DataSystems 1984 *G * with " *MENU.MAKER s }8>+DSKWIND.WKS U:R}0DISKNAME.DAT|$%SEG.T ~j8Ÿ/ USER.MANUAL7jlSERIALNO.DATlIII.DAD.051325Bu' ,DSKWIND.MAIN #BR! +DSKWIND.INV, "!,DSKWIND.HELP5 y"!HELLO -+DISK.WINDOW B RR+REQUEST.INV >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@Ltime" alteration, by Robert Howe. v 2.07b 12/06/88 *F * NOTE: I don't like "beeps", so I changed them to REM *F * statements. You can change them back if you like -- they *F * are at lines 6201 and 6291.  #$%&'()*NOPQRSw #wnum and write ww$ to itqWNUM>6rsvp=:shp=3t:ww(wnum,1),ww(wnum,2)ww(wnum,3),ww(wnum,4)z21);01);clear.view$;ww$21);13);7:ww(wmain,1),ww(wmain,2)ww(wmain,3),ww(wmain,4)=svp:=shp#__________posline:my.vpos= code%=0( xi=startlinestartline+linecount-1 xi>323560 my.VPOS>163560 xj=(xi-1)*16 mapit(@sv%(xj),@ll$,%code%) line$(xi),5)=ll$+ LINE$(XI);:=+1:=1:my.vpos=my.vpos+1 xi 6p__________ clear windoid=1 or 0 dvalid=0 tstdec$=""dvalid=1: tsti=1tstdec$)( dc="0123456789",TSTdec$,TSTI,1))% dc=03395 * TSTI / dVALID=1C ] -------- display linecount lines from sv%() starting at startline with vpos at vposline =0:=vid hex number return xvalid=1 or 0 xvalid=0 tsthex$=""xvalid=1: tsti=1tsthex$)4 hx="0123456789ABCDEFabcdef",TSTHEX$,TSTI,1)) HX=03295 TSTI XVALID=1 - test if tstdec$ is valid decimal number return dvaline errorZ^ ww$="OOPS -- Error in command. Hit RETURN, then reenter, or H for help.":wnum=4:6000 h any$ 2010 @ -------------- XLATE LCASE$ LOWERCASE TO UCASE$ UPPER CASE& UCASE$=LCASE$0 UPCASE(@UCASE$){ ) test if tsthex$ is val(i-1)+1)` ---- done parsing  cmd$="QT":900 errrtn=0 cmdmap11000,12000,12000,13000,14000,14000,14000,15000,10500,10600,12995,16000,17000,18000,19000,23000,23000,25000,26000,43000 errrtn=12900 2010 R 2990T ----- command l9005>cmdmap=cmdmap$,q,2)):delims=delims$,q,2))Cdelims=02400:q=1Hi=1delims3Jdlm(i)=cmdline$,delimchar$,q):dlm(i)=02900Lq=dlm(i)+1=Ni>1parm$(i-1)=cmdline$,dlm(i-1)+1,dlm(i)-dlm(i-1)-1)R%Tparm$(i-1)=cmdline$,dlm6600ZWW$="Enter command (delimit with commas), then . H or ? for Help":wnum=4:60005 6500:ww$="Command : ":wout$=lstcmd$:wnum=6:6200cmdline$=win$lstcmd$=cmdline$* LCASE$=CMDLINE$,2):3100:cmd$=ucase$ 9q=okcmds$,cmd$):q=02$(1,i): INITS FOR EACH ITERATIONopenfile7400BLOCK$="0000"lstcmd$=" " device%=1 66008ww$="START with an XD or XF command...":wnum=4:6000E MAIN ---------------------------------------------------------- $="RB CA CX DD VT VM VB WB RN RP QT UN SB XF XD SA SX H ? SD SR "MCMDMAP$="01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 18 19 20 "MDELIMS$="01 02 02 03 00 00 00 00 00 00 00 00 01 01 01 04 04 00 00 03 04 "clear.view$;i=115:help=" "#i=132:line$(i)=LLL$,72):I;i=132:hx$(i)=(I-1)*16),3):line$(i),1)=hx$(i):ill$=LLL$,68)LLENGTH%=512Qdelimchar$=",":lstcmd$=" "Mokcmdsted -- Do you want to exit DISK WINDOW ///+ ?" 6400yn$="YES"950250testing$="YES"):clear.view$;:::".D1/MENU.MAKER" : DUMMY  INIT)LINE$(32),sv%(512),hx$(32),jic%(512)target%(100),h$(15)` LLL$ *F **************************************************************** Zœ400001000: INITIALLIZE $1500: inits for each iteration,2060: MAIN  end openfile7400: **** 1.25clear.view$; 6600C::" QUIT selec any key to continue#wnum=5:ww$=7)+" ====> ":60001wnum=6:ww$=" Press ANY KEY to CONTINUE":6000 anykey$ 660038 79 line used to be only -- PRINT BELL$, but removed!:svp=:shp=3<:ww(wnum,1),ww(wnum,2)ww(wnum,3),ww(wnum,4)B21);01);Lclear.view$;QWW$;" ";wout$;*Swout$<>""xi=1wout$)+1:8);: U45000 V"";ŝ);{W=13win$=wout$:6240: this allows the use of the keypress to be a return, which then defaults to the prior command.X=27win\+testhex$=parm$(1):3200f+xvalid=0errrtn=1:h+CLEAR.VIEW$k+block$=parm$(1)p+block%=BLOCK$))+ REENTER HERE FOR RN & RP+jic.flag=1:exp.flag=1+8200: read device or file+rd.errerrrtn=1:+last.block%=block%:errrtn=09$,ww: STANDARD EXIT POINT... closes #10,etc then return) ------- RN READ NEXT  )CLEAR.VIEW$;+)BLOCK%=BLOCK%+1:BLOCK$=BLOCK%):11150h) ------- RP READ PREV m)CLEAR.VIEW$;+r)BLOCK%=BLOCK%-1:BLOCK$=BLOCK%):11150* ---------- RB read block3testing$="YES" j'10000o't' SPACE BAR LOOP~'.'ww$="Press ANY KEY to RESUME":wnum=4:6000 'ANYKEY$:'ww$="Press SPACE BAR to pause, Q to quit":wnum=4:6000'' ON ERR GOTO 10220'' ON ERR GOTO 40000 'FFF=>'33100e Block":wnum=4:6000:6100: ecode%=0Q ww$=" Error "+ecode%)+" writing block "+block$+" on "+media$:wnum=4:6000) block%=last.block%-1:block$=block%) 6100:wr.err=1 ' ON KBD'$'=32101008'=81=11310200B'=1:{ cmpBL(@SV%(0))v openfilewritany(%refnum%,@sv%(0),@reqcnt%,%block%,@ecode%):ecode%=WRITEBL(%DEVICE%,@SV%(0),%LENGTH%,%BLOCK%) EXPBL(@SV%(0)) ecode%=117768315g ecode%=11008ww$="Device "+media$+" is WRITE PROTECTED...cannot Writ7768260:ۻecode%<>08290H exp.flagEXPBL(@jic%(0))N Qb ww$=" Error "+ecode%)+" reading block "+block$+" on "+media$:wnum=4:6000'd block%=last.block%:block$=block%)f 6100:rd.err=1g l WRITE n wr.err=0v BLOCK%08290! exp.flagEXPBL(@SV%(0))& reqcnt%<>512440000 last.block%=block%8 jic.flag=0? reqcnt%=512wD openfilereadany(%refnum%,@jic%(0),@reqcnt%,%block%,@ecode%):ecode%=READBL(%DEVICE%,@jic%(0),%LENGTH%,%BLOCK%))F ecode%=11ss any key":wnum=4:6000 aany$  READ rd.err=0$ BLOCK%0e$="Error "+ecode%)+" CLOSING the file "+path$:7500openfile=0B!L error handler for 7000-74990`ww$=e$+" ... pre:6470;<yn$="YES"yn$="yes"yn$="Yes"yn$="YES":6470:6410F_dblock$=block%) nww$="===> "+block$+LIT$,1)xwnum=5:6000 ww$=" ":wnum=46:6000::$openfi(@path$,@refnum%,@ecode%)Fecode%<>0e$="Error "+ecode%)+" "ENDendEnd",win$)<>0win$="END":6395 6310 ___________ get YES or NO6 ww$="Enter YES or NO ":wnum=4:6000wnum=5:ww$=arrow$:6000$wnum=6:ww$=" ":WOUT$="YES":6200:2yn$=win$:yn$="no"yn$="NO"yn$="No"yn$="NO"g to time loop. May not work;delete if not ___________ get GO or ENDKww$="Type GO to continue or END to quit now ":wnum=4:6000wnum=5:ww$=arrow$:6000wnum=6:ww$=" ":62000"GOgoGo,win$)<>0 then win$="GO":goto 6395-$=wout$ewin$=" "62750jwin$,1)=" "win$=win$,win$)-1):6250-ora=win$,21)):ra>1win$=win$,ra-1)21);13);7:ww(wmain,1),ww(wmain,2)ww(wmain,3),ww(wmain,4)=svp:=shp: PRINT bell$ I: pops to avoid returnin$=ŝ)::cmdline$="VT":2075::: this allows the use of the keypress to be an escape,which then allows an exit from the help routine.Y"";subwin$Zwin$=ŝ)+subwin$E\ 6232 to 34 allows the keypress to be part of the command (win$)`win$=""win$="Block "+block$+" successfully read":wnum=4:6000,CMD$="VT":14000). CA & CX change ascii and change hex+.OFFSET$=PARM$(1):TESTHEX$=OFFSET$:3200.XVALID=112025c.WW$="Invalid HEX OFFSET specified...must be between 000-1FF":wnum=4:6000:6100:errrtn=1:12995:.offset%=offset$)):(offset<0)(offset>511)12020:/CMD$="CA"12500D/ ----- CX change hexI/xj=1:xx=parm$(2))/2%K/xx<>xx)errrtn=1:: *** 1.25N/xi=offset%offset%+xx-1S/xi>51112130(X/sv%(xi)=parm$(2hhHHHH l5m6m6  ЙW5X6X6 ` 5`MD32KA;6hWhXhhhQlhRm e Nb YMH YhLSꈭTXHWH`g##6 >?Bi{Ci|) |=! "LL{@?>8(O\ F9 >{i 5|i6) 6|8 L5{ hhhh0 hWhXXL `L5 !"GA3/1.01:7SY CONTROL do commandX>ww$="Processing UNDO command...restoring old contents of block "+block$:wnum=4:6000">WW$="PLEASE WAIT":WNUM=6:6000%>xi=0reqcnt%:sv%(xi)=jic%(xi):>cmd$="VT":14000hB SB set blockBtesthex$=parm$(1):3200Bxvalid=0errrtn=ing "+lit$+" of block "+block$:wnum=4:6000 73500:: ---- handle WB!`;8300: write device or file j;wr.errerrrtn=1:~;last.block%=block%:errrtn=0<;ww$="Block "+block$+" successfully written":wnum=4:6000{>%> ------ UD -------- Un%3block%=block%-1 53310066)6 VT & VM & VB view top middle bottom+7cmd$="VT"lit$="top Half":startline=1)7cmd$="VM"lit$="middle":startline=9/(7cmd$="VB"lit$="bottom Half":startline=17F7linecount=16:vposline=1;x7ww$="Display read+T3rd.errblock%=finblk%:errrtn=1:13300h3"Dumping block ";block%)-j3TENOPEN#10;"Dumping block ";block%) 3code%=03xi=132:xj=(xi-1)*16 3mapit(@sv%(xj),@ll$,%code%)-3q$=hx$(Xi)+" "+LL$:q$:TENOPEN#10;q$3xi 3block2 DD dump to destination233000: handle parms 1-33 parms all ok to hereI3ww$="Dumping blocks "+stblk$+" to "+finblk$+" to "+dest$:wnum=6:6000 310190 "310000$3clear.view$@3block%=stblk%finblk%E3exp.flag=1:jic.flag=0J38200:6)+(XI-1)/16)(x2lit$,1)="t"startline<1712950(z2lit$,1)="b"startline>16129509|2lit$,1)="m"(startline>8)(startline<25)129502 not displayable 212995;2vposline=startline-16*(lit$,1)="b")-8*(lit$,1)="m") 235002),(xj*2-1),2))) ]/xj=xj+1b/xi /129000 ----- CA change ascii0xj=1:xx=parm$(2))0xi=offset%offset%+xx-10xi>511125300sv%(xi)=parm$(2),xj,1)) 0xj=xj+10xiB1 d2 outDn2startline=offset%/16)+1:linecount=1-OFFSET%/1ca` hhh5h66HH :5HHH) @  hhh g5ȱg6ȱg@ ɀL g eegghI8e556l6m `  hUhVh8 ㅊ eh֭VHUHk`HFB>;:9853/&" NL64Ch5h6h3lh4m 0/L6H5H`g8640'%76,V^dKA;6hWhXhhhQlhRm e Nb YMH YhLSꈭTXHWH`g="Type the number of the help screen you want... to exit":wnum=4:6000:6500:ww$="==> ":wout$="1":wnum=6:6200bscrn$=win$:scrn=scrn$)bscrn$)=27b: IF scrn$="" THEN RETURN bclear.view$;bi=115:help$(scrn,i):8c6600:61b\q$="Hit in block "+block%)+" at offset "+loc%):q$:TENOPEN#10;q$l\index%=loc%+1 q\23630 \ no hit\ -------------------------\i%\33100: post-process dest$]] a do HELPbclear.view$; bi=115:help$(0,i):~pbww$[clear.view$[i%=stblk%finblk% [block%=i%[exp.flag=0:jic.flag=0[8200: read'[rd.erri%=finblk%:errrtn=1:23700 \65000\ ----- do search here ----D\loc%=0:index%=0.N\search(@sv%(0),@target%(0),%index%,@loc%)S\loc%<023690LaddonnZj=1maxiExZcmd$="SX"i%=parm$(4),(j*2-1),2))):i%=parm$(4),j,1))Ztarget%(j)=i%Zj[ parms all ok to here`[ww$="Searching blocks "+stblk$+" to "+finblk$+" for "+target$:wnum=6:6000:tenopen#10;w$ [10190 [10000Z ---- massage parm$(4)maxi)errrtn=1:ZZtarget%(0)=maxi+:wnum=4:6000:6100:$Jmedia$="Device "+dname$:minblk=0@Jww$=pgmname$+" >>> Currently viewing : "+media$:wnum=1:6000JN1Ncmdline$="RB,0":2075: set up a rb,0 command-Y SA and SX (Search Ascii and Search heX)Y33000: handle parms 1-3 openfile<>07400:openfile=0: close old FILE'VJlcase$=parm$(1):3100:DNAME$=UCASE$`JLNAME$=DNAME$))+DNAME$jJX%=GETDNUM(@LNAME$)8tJRESULT$=X%):ERRTN$=RESULT$,2):DNUM$=RESULT$,2)RJERRTN$="00"DEVICE%=DNUM$)):ww$="Device NOT found"th$=ucase$Fe$="":7100Fe$<>""Fopenfile=refnum%!Fmedia$="File "+path$:minblk=0@Fww$=pgmname$+" >>> Currently viewing : "+media$:wnum=1:6000F.J93Jcmdline$="RB,0":2075: process the rb,0 command now 8J XD EXAMINE DRIVE ---- 3BJ1:17995 B6600Bblock$=parm$(1)Bblock%=BLOCK$))<0Cww$="Current Block number reset to "+block$:wnum=4:6000 C6500KFPF XF EXAMINE FILE ----- 3ZFopenfile<>07400:openfile=0: close old one dFreqcnt%=512&nFlcase$=parm$(1):3100:paFILWRITE FILWRITEGETRFNM RTRFNM ERROR ^ROR DOARRAY OARRAY  ERROR ?BUFPNT NT DEVINFO DEVINFO MOVESTR FILREAD FILREAD BUF :4 GETRFNM BUFPNT OJNT ERROR ROR DOARRAY e=TPARMSERROR uROR BUFPNT BMOVESTR REQNUM UUM BLDSTRN DSTRN BUF pia RETURN RETADR  GETPARMSFREQNUM BUF "CONTROL CONTROL RETURN RETADR GETPARMS TPARMSERROR ROR STATUS STATUS BLDSTRN ,BUF |F GETPARMSca` hhh5h66HH :5HHH) @  hhh g5ȱg6ȱg@ ɀL g eegghI8e556l6m `  hUhVh8 ㅊ eh֭VHUHk`HFB00c(ccmdline$="VT":2075: process the VTee SD... search for dirs ecmdline$=cmdline$+",004E0EF"ecmdline$,1)="SR"ni*si2075: process the SS,... command now4 pre-process for range commands (DD,SA,SX, etc)3 handles parms 1-3 (startblk, finblk and dest)$stblk$=parm$(1):finblk$=parm$(2)&lcase$=parm$(3):3100:dest$=ucase$*testhex$=stblk$:3200:xvalid=033800+testhex$=finblk$:3200:xvalid=033800Q STBLK%=STBLK$)):FINBLK%=FINBLK$)):stblk$=stblk%):finblk$=665556666 5̛ ȏ수 HH`ꈘȑ쭘HH` `3./0,%0!1//+ ,05ȭ-5Ȍ0/,%0Ȍ/1`+)JJJJ ,) -` ii0`+0 ..5Ȍ.`|tsonbWS(Bhhhhhhh5hhhhHHHH`JHB@><:86410/-(&pL 5hhhhhhh5h66 HHHH`=42Rh#h$h%h&h'h(h)h*L2 D E [$H#H``566 HH`{rpnlIFEB?32-*&$L hhhh) JJJ ܊HH`zxvtVSQPMED?<'%hhhhhhhhhhhLhh hhhhhhhhhhh h  HH HH`_JHB@><:86410/-(&L hhhh)i ꊈ눌 ح+-./0123GA3/1.0A READBL M>q$="Searching blocks "+stblk$+" to "+finblk$+" with parms : "+searchparm$@q$:tenopen#10;q$ H10190 R10000Xexp.flag=1:jic.flag=0'\ handle searchparm$ in 43100-43199"fsrch.loc=searchparm$,1,3))"hsrch.min=searchparm$,4,2)) Number ";^"program terminating"h6600:6100r9000 ____________ other specific error handlers SR2 --- format is startblock,finblock,dest,parm --- 33000: handle parms 1-3searchparm$=parm$(4)clear.view$________ generic on error handler BERC=!E=255TESTING$="YES":۷Jclear.view$;rL(=25)(=32)(=37)"VERIFY THAT DISKETTE IS INSERTED & DRIVE DOOR CLOSED and/or VOLUME ON-LINE":6100:O#06T"Unexpected Error Number ";;" in Line for range commands ... closes destM`TENOPEN#10:TENOPEN=0:jjic.flag=1:exp.flag=1:8200:6500: reread it and showtEww$="Block number is not valid hex value...re-enter":wnum=4:6000 6100˄̄TENOPEN#10:TENOPEN=0τ)@___finblk%)$ TENOPEN=0:dest$,1)="*"33095 œ33050#10,dest$:TENOPEN=1 œ4000033095: onward  œ40000]ww$="Unable to open "+dest$+" for output...any key":wnum=4:6000:any$:tenopen=0::33995GK5L post-processFhOhPhhhRhSRUTQ舘PHOH` ȑPHOH`VTPNMLJF;9%# vh!h"hhh%h&hhhhh#h$L6#(% +'6#/3ȱ2.5ȭ4ꈘȑ"H!H`수"H!H`ihgec`_ZVTOKA?42h!h"hhh%h&hhhhh#h$L4#(% +'*#/3ȱ2.ȑ"H!H`수"H!H`blk,dest(*),aaaa... Search for Hex value list SX,startblk,finblk,dest(*),xxxx... Search posn for value Range SR,startblk,finblk,dest(*),ppllhh Search for Directory blks SD,startblk,finblk,dest(*) * Volume directory header Format : CX,loc,xxxx... Read Next RN | Read Previous RP Quit QT | Undo UN Dump to Destination DD,startblk,finblk,dest(*) Search for Ascii string SA,startblk,fin File XF,filename Read Block RB,bb | Write Block WB Set Block SB,bb | View Middle VM View Top VT | View Bottom VB Change Ascii CA,loc,aaaa... | Change Hex 46789:; after all commmands eXamine Device XD,devicename | eXamine8 pages here 15 data lines followed by one spacer Help Screens Available are :: 1. Command Summary 2. Volume Header Layout 3. Subdirectory Header Format 4. File Entry Format 5. File TyGETDNUM MAPIT MAPIT OPENFI OPENFI CLOSFI CLOSFI READANY READANY  WRITANY WRITANY  UPCASE UPCASE  SEARCH SEARCH  WRITEBL WRITEBL RETURN $ PARAM0 M0 PARAM1 RAM1 PARAM2 DEVNUM   LENGTH TH DUMMY Y GETDNUM READBL READBL BLOCK RETURN PARAM0  PARAM1  PARAM2 DEVNUM  LENGTH DUMMY EXPBL EXPBL CMPBL CMPBL BLOCK K Z"j8 NJH=;0.hhh5h6HH6 5{a 5(`:Lyhhhhhhhhhhx)w ȱ /eȭe / !wL !mwiөȑL8wȭHH``,x0`a{8 `Cusrqpmjfca^[T!|ztrq]\[YWTSNJH=;0.hhh5h6HH6 5{a 5(`:Lyhhhhhhh: Length (bytes) Contents Position (hex) 1 Storage type/Name length 04 15 Filename 05-13 8 Reserved 14-1B 4 Creation date 1C-1F 1 Version 20 1 Min. version 21 1 Access 22 1 Entry len 08 Screen Image (Fotofile) 09 Basic program 0A Basic datafile 0B Word processor file 0C SOSfile (e.g. KERNEL,INTERP,DRIVER) * Directory File Format: Storage Type Field 0 inactive file entry VOLUME NAME (/DISKNAME) OR DEVICE NAME (.Dx)"P12);::"80C";a$;:Zb$="CHANGING DISKS"$d=23:=0::"80C";b$;::12).n=12:=20:"MAKE A NEW MENU FOR DISK: ";N$xN$)<2110=N$ :210 I=1L(A$(I),A$))200B$0 WAP /// SIG MENU.MAKER PROGRAM (v. 6.2) =".D1"210: Coldstart (320: Warmstart &*X=11000: TEXT SLOW-DOWN LOOP ,X.1 CHANGE DISK SUBROUTINE23œ202:2200<RFa$=" YOU MAY SELECT YOUR DISK BY /23/84 rev 11/30/88 v 2.07b *I * (c) Copyright 1983,1984 D A Datasystems *H * modified by Robert Howe for a "time" display *H *  pgm name DISK.WINDOWserialno$="WAP /// SIG"VERSION$="2.07b"testing$="NO "I ******************************************************************I * TOOLS TIMES THREE - Disk Window III (INIT MODULE) *I * 03 02 Pascal Codefile 03 Pascal Textfile 04 Pascal Asciifile or Basic TEXT 10-BF SOS reserved 05 Pascal Datafile C0-CF ProDOS files 06 General Binary file 07 Fontfile on date 21-24 2 Header pointer 25-26 * File Type Byte Values 00 Typeless 0D,0E SOS reserved 01 Badblock 0F Directory file Creation date 18-1B 2 Version/Min Version 1C/1D 1 Access 1E 2 Aux type 1F-20 4 Modificati01-0F 1 Filetype 10 2 Key block pointer 11-12 2 Blocks used 13-14 3 EOF 15-17 4 Parent entry number/length 29/2A * FILE ENTRY Format :: Length (bytes) Contents Offset (hex) 1 Storage type/Name length 00 15 Filename 22 1 Entry length 23 1 Entries per block 24 2 File count 25-26 2 Parent pointer 27-28 2 d 14-1B 4 Creation date 1C-1F 1 Version 20 1 Min. version 21 1 Access 29-2A * Subdirectory header Format :: Length (bytes) Contents Position (hex) 1 Storage type/Name length 04 15 Filename 05-13 8 Reservegth 23 1 Entries per block 24 2 File count 25-26 2 Bit map pointer 27-28 2 Total blocks ... e.g. deleted 1 seedling file - one block only 2 sapling file - one key block 3 tree file -key block tree D subdirectory file entry E subdirectory header F volume directory header * File Access Attribute Field : (Bit status: 1=true, 0=false) Bit # Contents 7 Destroy enable 6 Rename enable 5 Needs Backup 4 Reserved 3 Reserved 2 Reserved 1CLOSED":30100:7:clear.view$A<:"Unexpected System ERROR number ";;" at line number ";;#Z:"Program Terminating"::900ȯ:clear.view$;ү:"The Disk you are using is NOT A VALID MASTER DISK."-ܯ:"The Master Disk is copy protected..."opyprotection",u:"Press Any key to continue ";:any$:@ ON ERROR TO HERE#E=255TESTING$="YES"900:۷)G=7FFF=:FCNT=FCNT+1:FCNT<5:JO:clear.view$\T=25=32=37"VERIFY THAT DISKETTE IS INSERTED AND DRIVE DOOR IS SKWIND.HELP"-#9;help.pages$:help.pages=help.pages$)-i=0help.pages: 0 is table of contents j=116#9;help$(i,j)ji#9/ deleted termination sequence for serial # ---- deleted1 ---- deleted sequence was "c:60086: DRAW FRAME0^WW(1,1),WW(1,2)WW(1,3),WW(1,4):TTL$=SP70$cTTL$,1)=SERIALNO$hTTL$,22)=EXPPGMNAME$mTTL$,66)="v-"+VERSION$6r"72C";TTL$;::WW(3,1),WW(3,2)WW(3,3),WW(3,4))help$(10,16): possible 10 pages max#9,".D1/D******" dims _______________________ INITS invoke1$50000: INIT MISC VARS60000: SET FRAME VALUES INVOKE2$Cwmain=3: main window number...DUMMY WINDOW#2 FOR 6000'S COMPAT400'$, --------- INITS AFTER FLASH-ON@:LS 200 FOR INITx300}CLEAR.VIEW$;".D1/dskwind.main" : DUMMYA ***********************************************************8 ** I N I T I A L L I Z E - called from 61000A ************************************************************* œ40000Lpgmname$="DISK WINDOW ///":EXPPGMNAME$="D I S K W I N D O W / / / +"#invoke1$=".D1/REQUEST.INV"(invoke2$=".D1/DSKWIND.INV"<Dd ------------ M A I N H E R E ------------------------------*n61000: FLASH-ON...CALne 61007 too if you don't have a clock in your *H * Apple /// and are not using the revised version with the *H * time display in the upper left corner. *H ********************************************************** *H * NOTE: you may need to revise lines 35, 40, and 150 to show *H * the pathnames of the files invoked and chained in order to *H * have DISK WINDOW /// + run properly. Oh, you might want *H * to delete li=CDEFGHIJKLM 10-15 Minute 0..60 16-17 Unused 18-1C Hour 0..24 1D-1F Unused * Write enable 0 Read enable * Date/Time Field Format (32 bits) Bit # Contents Value Range 00-04 Day 0..31 05-08 Month 0..12 09-0F Year 0..99 1:"Copies of it will not function properly."C:"If you did not obtain a Backup Disk with your order please">"return the Software Resistration Card that you recieved"4:" or contact D A Datasystems."+ h: dummyP INIT MISC VARSHOM$=12)%SAVE.VIEW$=01):REST.VIEW$=04)BELL$=07).CLEAR.VIEW$=28):CLEAR.TO.END.VIEW$=29)spaceline$=" "s20Nsv%(j)=flag$,i,1))Xibj>=512i=j+1512 sv%(i)=0i!ȯ: ---- TIME DISPLAY ----- ?ɯ48000: this stops time program and returns to main progү ---- initialize the timeӯ,hour$=П,2)6minute$=ҟ,4,2)----------------------- 512441"jsrch.max=searchparm$,6,2))block%=stblk%finblk%8200: read +rd.errblock%=finblk%:errrtn=1:439006500:hit=0"sv%(srch.loc)srch.max43599 hit=1O >P --------------------------------Z\1+I*1,1+I80-I*1,23-I^Q=0I/2=I/2):۵`Q=1I/2=I/2):۴b:J=10001::dJ=11500:: z: DUMMYDUMMYDUMMY z: DUMMY5C";"Entered into the Public Domain, 3/88"::"45C";"Modified for a Clock Display"::"45C";"by Robert Howe, November 1988";:61028PRQ=0:I=200-1:61020@TI=14:::"49C";"Please wait for Initialization";:200VXI/2=I/2):);: RESTORE WRAP,SCROLL,ETCH:JQ=1:I=0201:61020)LI=10:"56C";exppgmname$;:61028yNI=17::::"45C";"D A Datasystems"::"45C";"Tools Times Three"::"45C";"(c) Copyright 1983,1984";:61028OI=19::::::"40,24%21);01);: WRAP & SCROLL OFF*=0:=0:SIDELINE$:=79:=0:SIDELINE$(=0:=0:TOPLINE$:=24:=0:BOTLINE$=20:=0:MIDLINE$=3:=0:MIDLINE$=22:=0:MIDLINE$=22:=16:VERT$! VPOS=5:HPOS=57:PRINT LVERT$+21);13CKLINE$=CLOCK$:I=15:CLOCKLINE$=CLOCKLINE$+CLOCKLINE$::CLOCKLINE$=" "+CLOCKLINE$,50)?VERT$=SIDE$+SIDE$+SIDE$:VERT$,1)=TOPBRK$:VERT$,9)=BOTBRK$CLVERT$=SIDELINE$,1,54):LVERT$,1)=TOPBRK$:LVERT$,54)=BOTBRK$ DRAW FRAME1,18PRITE$BBOTLINE$=TOPLINE$:BOTLINE$,1)=BOTLEFT$:BOTLINE$,79)=BOTRITE$BMIDLINE$=TOPLINE$:MIDLINE$,1)=LEFTBRK$:MIDLINE$,79)=RITEBRK$#CURSLEFT$=08):CURSDOWN$=10)LSIDE$=LEFTRITE$+CURSLEFT$+CURSDOWN$:I=124:SIDELINE$=SIDELINE$+SIDE$:`CLO00LCLOCK$=138)) 138,112,076,066,065,001,002,012,112)RCLOCK$=139):CLOCK$=LCLOCK$+RCLOCK$) 139,003,012,016,032,033,018,012,003 SET VARIABLES HEREUTOPLINE$=TOPLEFT$:I=177:TOPLINE$=TOPLINE$+TOPBOT$::TOPLINE$=TOPLINE$+TO0,127,000,000LEFTBRK$=134)) 134,034,034,098,002,002,098,034,034RITEBRK$=135)) 135,034,034,035,032,032,035,034,034 4TOPBRK$=136)) 136,000,000,127,000,000,099,034,034BOTBRK$=137)) 137,034,034,099,000,000,127,000,00,000,063,032,032,035,034,034tBOTLEFT$=130))v 130,034,034,098,002,002,126,000,000xBOTRITE$=131))z 131,034,034,035,032,032,063,000,000|LEFTRITE$=132))~ 132,034,034,034,034,034,034,034,034TOPBOT$=133)) 133,000,000,127,000,0003,23,14,23 18,23,77,23?ſ` MAKE.FRAME.NEW dJ=12XfCC:BUFF$=CC):I=09*CC-1:CH:BUFF$=BUFF$+CH):I:CONTROL(%17,@BUFF$)".CONSOLE"hJj 8lTOPLEFT$=128))n 128,000,000,126,002,002,098,034,034pTOPRITE$=129))r 129,00p70$=spaceline$,1,70)"inv.vid$=18):norm.vid$=17)%|Ćwindow.count:ww(window.count,4)āi1=1window.count āJ1=14Ćww(i1,j1)ĂJ1ĂI1 6 CC RR CC RR 03,02,77,02 01,01,01,01 03,04,77,19 03,21,77,21 @second$=џ,2)Jprthour$=hour$Tprtminute$=minute$^prtsecond$=second$hnewhour$=hour$&m:2,220,2:" " r ---- end of initialization ---- set AMPM-newhour$)<12AMPM$=" AM":AMPM$=" PM" -----end setting AMPM ----- set to 12 hour clockBnewhour$)>12prthour$=newhour$)-12):prthour$=newhour$!prthour$)=0prthour$="12"/ prthour$)<10prthour$=" "+prthour$,1) ----- end of 12 hour XY ---- print initial time$(i),1)=hx$(i):ill$=LLL$,68)LLENGTH%=512Qdelimchar$=",":lstcmd$=" "Lokcmds$="RB CA CX DD VT VM VB WB RN RP QT UN SB XF XD SA SX H ? SD SR"LCMDMAP$="01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 18 19 20"LDELIMS$="01 02 02 0to allow time)LINE$(32),sv%(512),hx$(32),jic%(512)target%(100),h$(15)` LLL$=" "#i=132:line$(i)=LLL$,72):I;i=132:hx$(i)=(I-1)*16),3):lineclear.view$; 6600B::" QUIT selected -- Do you want to exit DISK WINDOW ///+?" 6400yn$="YES"950250testing$="YES":clear.view$;:: : DUMMY  INITCKBDSET%=0: this is to allow resetting of ON KBD TVWXYZ[\]^_`abcdefghijklmnopqr version 2.06 03/20/87 *F **************************************************************** Zœ400001000: INITIALLIZE $1500: inits for each iteration,2060: MAIN  end openfile7400: **** 1.25 pgmname DSKWIND.MAING ****************************************************************G * DISK WINDOW module - DSKWIND.MAIN 03/23/84 * F * (c) D A DataSystems 1984 *F * (wnum,2)ww(wnum,3),ww(wnum,4)21);01);clear.view$;WW$;" ";wout$;* wout$<>""xi=1wout$)+1:8);: 6230ond$0.45601: ------ loops back to get a new time8 L ------ prints just secondsM=9Vprtsecond$;[second$=prtsecond$.`45601: ---- loops back to get a new time2 here is the exit to the time display routine仱3:ww(wnum,1),ww$;Qhour$=newhour$:minute$=prtminute$:second$=prtsecond$: update comparison time045601: ----- loops back to get a new time + ------ print just minutes and seconds=6prtminute$;":"prtsecond$;$minute$=prtminute$)second$=prtsec to above)-newhour$)<12AMPM$=" AM":AMPM$=" PM"Bnewhour$)>12prthour$=newhour$)-12):prthour$=newhour$!prthour$)=0prthour$="12"/prthour$)<10prthour$=" "+prthour$,1)=32prthour$;":";prtminute$;":";prtsecond$;AMPMst from the hour)`newhour$<>hour$45800:ۻprtminute$<>minute$45850:ۻprtsecond$<>second$45900:ۺ45601L ----- if no changes, the statement above loops back to get a new timeH ----- print entire time all over again (steps identical=32Ʊprthour$;":";prtminute$;":";prtsecond$;AMPM$;б ----- get comparison time!newhour$=П,2)*prtminute$=ҟ,4,2)4prtsecond$=џ,2)>r ----- determine what to print (although seconds change most often, we need to begin the te3 00 00 00 00 00 00 00 00 01 01 01 04 04 00 00 03 04"clear.view$;i=115:help$(1,i):+: this returns to line 200, I believe INITS FOR EACH ITERATIONopenfile7400BLOCK$="0000"lstcmd$=" " device%=1 66008ww$="START with an XD or XF command...":wnum=4:6000' this return goes back to line 250E MAIN ---------------------------------------------------------- 6600QWW$="Enter command selection...delimit with commas...then ":wnum=4:60005 de%)+" OPENING the file "+path$:7500refnum%=0 œ7412closfi(%refnum%,@ecode%) œ40000Fecode%<>0e$="Error "+ecode%)+" CLOSING the file "+path$:7500openfile=0B!L error handler for 7000-74990`ww$=e$+" block%) nww$="===> "+block$+LIT$,1)xwnum=5:6000 ww$=" ":wnum=46:6000::] line 6600 is called at line 1735. it GOSUBS to 6000 3 times, then returns to line 1735$openfi(@path$,@refnum%,@ecode%)Fecode%<>0e$="Error "+ecoO6 ww$="Enter YES or NO ":wnum=4:6000wnum=5:ww$=arrow$:6000$wnum=6:ww$=" ":WOUT$="YES":6200:2yn$=win$:yn$="no"yn$="NO"yn$="No"yn$="NO":6470;<yn$="YES"yn$="yes"yn$="Yes"yn$="YES":6470:6410F_dblock$=="Type GO to continue or END to quit now ":wnum=4:6000wnum=5:ww$=arrow$:6000wnum=6:ww$=" ":62000"GOgoGo,win$)<>0 then win$="GO":goto 6395-"ENDendEnd",win$)<>0win$="END":6395 6310 ___________ get YES or N:ww(wmain,1),ww(wmain,2)ww(wmain,3),ww(wmain,4)=svp:=shp"at RETURN":anykey$x: used to be RETURN, but time loop acted up and "returned" to loop now we'll try to pop out of the time routine ___________ get GO or ENDKww$ next";:anykey$ U44500V"getting input" X" ";win$["just got win$";`win$=""win$=wout$ewin$=" "62750jwin$,1)=" "win$=win$,win$)-1):6250-ora=win$,21)):ra>1win$=win$,ra-1)21);13);"now at 6280";7 -- PRINT BELL$, but removed!:svp=:shp=5;bell$:anykey$:"ww=";ww;" wnum=";wnum;:anykey$3<:ww(wnum,1),ww(wnum,2)ww(wnum,3),ww(wnum,4)B21);01);Lclear.view$;QWW$;" ";wout$;*Swout$<>""xi=1wout$)+1:8);:T"loop is13);7:ww(wmain,1),ww(wmain,2)ww(wmain,3),ww(wmain,4)=svp:=shp#__________ any key to continue#wnum=5:ww$=7)+" ====> ":60001wnum=6:ww$=" Press ANY KEY to CONTINUE":6000 anykey$ 660038 79 line used to be onlyc$,TSTI,1))% dc=03395 * TSTI / dVALID=1C    6p__________ clear window #wnum and write ww$ to itqWNUM>6rsvp=:shp=3t:ww(wnum,1),ww(wnum,2)ww(wnum,3),ww(wnum,4)z21);01);clear.view$;ww$21);)4 hx="0123456789ABCDEFabcdef",TSTHEX$,TSTI,1)) HX=03295 TSTI XVALID=1 - test if tstdec$ is valid decimal number return dvalid=1 or 0 dvalid=0 tstdec$=""dvalid=1: tsti=1tstdec$)( dc="0123456789",TSTde h any$ 2010 @ -------------- XLATE LCASE$ LOWERCASE TO UCASE$ UPPER CASE& UCASE$=LCASE$0 UPCASE(@UCASE$){ ) test if tsthex$ is valid hex number return xvalid=1 or 0 xvalid=0 tsthex$=""xvalid=1: tsti=1tsthex$00,14000,14000,14000,15000,10500,10600,12995,16000,17000,18000,19000,23000,23000,25000,26000,43000 errrtn=12900 2010 R 2990T ----- command line errorZ^ ww$="OOPS -- Error in command. Hit RETURN, then reenter, or H for help.":wnum=4:6000dlm(i)=cmdline$,delimchar$,q):dlm(i)=02900Lq=dlm(i)+1=Ni>1parm$(i-1)=cmdline$,dlm(i-1)+1,dlm(i)-dlm(i-1)-1)R%Tparm$(i-1)=cmdline$,dlm(i-1)+1)` ---- done parsing  cmd$="QT":900 errrtn=0 cmdmap11000,12000,12000,1306500:ww$="Command : ":wout$=lstcmd$:wnum=6:6200cmdline$=win$lstcmd$=cmdline$* LCASE$=CMDLINE$,2):3100:cmd$=ucase$ 9q=okcmds$,cmd$):q=029005>cmdmap=cmdmap$,q,2)):delims=delims$,q,2))Cdelims=02400:q=1Hi=1delims3J... press any key":wnum=4:6000  READ rd.err=0$ BLOCK%08290! exp.flagEXPBL(@SV%(0))& reqcnt%<>512440000 last.block%=block%8 jic.flag=0? reqcnt%=512wD openfilereadany(%refnum%,@jic%(0),@reqcnt%,%block%,@ecode%):ecode%=READBL(%DEVICE%,@jic%(0),%LENGTH%,%BLOCK%))F ecode%=11776 VT & VM & VB view top middle bottom+7cmd$="VT"lit$="top Half":startline=1)7cmd$="VM"lit$="middle":startline=9/(7cmd$="VB"lit$="bottom Half":startline=17F7linecount=16:vposline=1;x7ww$="Displaying "+lit$+" of block "+block$:wnum=4:600013300h3"Dumping block ";block%)-j3TENOPEN#10;"Dumping block ";block%) 3code%=03xi=132:xj=(xi-1)*16 3mapit(@sv%(xj),@ll$,%code%)-3q$=hx$(Xi)+" "+LL$:q$:TENOPEN#10;q$3xi 3block%3block%=block%-1 53310066)lk$+" to "+finblk$+" to "+dest$:wnum=6:6000 310190 "310000E#3KBDSET%=10000: this show where old ONKBD points if later cleared$3clear.view$@3block%=stblk%finblk%E3exp.flag=1:jic.flag=0J38200: read+T3rd.errblock%=finblk%:errrtn=1:"(startline>8)(startline<25)129502 not displayable 212995;2vposline=startline-16*(lit$,1)="b")-8*(lit$,1)="m") 2350022 DD dump to destination233000: handle parms 1-33 parms all ok to hereI3ww$="Dumping blocks "+stbfset%+xx-10xi>511125300sv%(xi)=parm$(2),xj,1)) 0xj=xj+10xiB1 d2 outDn2startline=offset%/16)+1:linecount=1-OFFSET%/16)+(XI-1)/16)(x2lit$,1)="t"startline<1712950(z2lit$,1)="b"startline>16129509|2lit$,1)="mchange hexI/xj=1:xx=parm$(2))/2%K/xx<>xx)errrtn=1:: *** 1.25N/xi=offset%offset%+xx-1S/xi>51112130(X/sv%(xi)=parm$(2),(xj*2-1),2))) ]/xj=xj+1b/xi /129000 ----- CA change ascii0xj=1:xx=parm$(2))0xi=offset%of+.OFFSET$=PARM$(1):TESTHEX$=OFFSET$:3200.XVALID=112025c.WW$="Invalid HEX OFFSET specified...must be between 000-1FF":wnum=4:6000:6100:errrtn=1:12995:.offset%=offset$)):(offset<0)(offset>511)12020:/CMD$="CA"12500D/ ----- CX + REENTER HERE FOR RN & RP+jic.flag=1:exp.flag=1+8200: read device or file+rd.errerrrtn=1:+last.block%=block%:errrtn=09$,ww$="Block "+block$+" successfully read":wnum=4:6000,CMD$="VT":14000). CA & CX change ascii and change hex%+1:BLOCK$=BLOCK%):11150h) ------- RP READ PREV m)CLEAR.VIEW$;+r)BLOCK%=BLOCK%-1:BLOCK$=BLOCK%):11150* ---------- RB read block\+testhex$=parm$(1):3200f+xvalid=0errrtn=1:h+CLEAR.VIEW$k+block$=parm$(1)p+block%=BLOCK$))'ANYKEY$:'ww$="Press SPACE BAR to pause, Q to quit":wnum=4:6000'' ON ERR GOTO 10220'' ON ERR GOTO 40000 'FFF=>'33100: STANDARD EXIT POINT... closes #10,etc then return) ------- RN READ NEXT  )CLEAR.VIEW$;+)BLOCK%=BLOCK0200B'=3testing$="YES"Ee'KBDSET%=10000: this show where old ONKBD points if later cleared j'10000Eo'KBDSET%=10000: this show where old ONKBD points if later clearedt' SPACE BAR LOOP~'.'ww$="Press ANY KEY to RESUME":wnum=4:6000 Block":wnum=4:6000:6100: ecode%=0Q ww$=" Error "+ecode%)+" writing block "+block$+" on "+media$:wnum=4:6000) block%=last.block%-1:block$=block%) 6100:wr.err=1 ' ON KBD 'KBDSET%=0'$'=32101008'=81=1131{ cmpBL(@SV%(0))v openfilewritany(%refnum%,@sv%(0),@reqcnt%,%block%,@ecode%):ecode%=WRITEBL(%DEVICE%,@SV%(0),%LENGTH%,%BLOCK%) EXPBL(@SV%(0)) ecode%=117768315g ecode%=11008ww$="Device "+media$+" is WRITE PROTECTED...cannot Write 68260:ۻecode%<>08290H exp.flagEXPBL(@jic%(0))N Qb ww$=" Error "+ecode%)+" reading block "+block$+" on "+media$:wnum=4:6000'd block%=last.block%:block$=block%)f 6100:rd.err=1g l WRITE n wr.err=0v BLOCK%%> ------ UD -------- Undo commandX>ww$="Processing UNDO command...restoring old contents of block "+block$:wnum=4:6000">WW$="PLEASE WAIT":WNUM=6:6000%>xi=0reqcnt%:sv%(xi)=jic%(xi):>cmd$="VT":14000hB SB set blockBtesthex$=parm$(1):3200Bxvalid=0errrtn=1:17995 B6600Bblock$=parm$(1)Bblo generic on error handler BERC=!E=255TESTING$="YES":۷Jclear.view$;rL(=25)(=32)(=37)"VERIFY THAT DISKETTE IS INSERTED & DRIVE DOOR CLOSED and/or VOLUME ON-LINE":6100:O#06T"Unexpected Error Number ";;" in Line Number ge commands ... closes destM`TENOPEN#10:TENOPEN=0:jjic.flag=1:exp.flag=1:8200:6500: reread it and showtEww$="Block number is not valid hex value...re-enter":wnum=4:6000 6100˄̄TENOPEN#10:TENOPEN=0τ)@___________%)$ TENOPEN=0:dest$,1)="*"33095 œ33050#10,dest$:TENOPEN=1 œ4000033095: onward  œ40000]ww$="Unable to open "+dest$+" for output...any key":wnum=4:6000:any$:tenopen=0::33995GK5L post-process for ran, finblk and dest)$stblk$=parm$(1):finblk$=parm$(2)&lcase$=parm$(3):3100:dest$=ucase$*testhex$=stblk$:3200:xvalid=033800+testhex$=finblk$:3200:xvalid=033800Q STBLK%=STBLK$)):FINBLK%=FINBLK$)):stblk$=stblk%):finblk$=finblk(ccmdline$="VT":2075: process the VTee SD... search for dirs ecmdline$=cmdline$+",004E0EF"ecmdline$,1)="SR"ni*si2075: process the SS,... command now4 pre-process for range commands (DD,SA,SX, etc)3 handles parms 1-3 (startblk115:help$(0,i):~pbww$="Type the number of the help screen you want... to exit":wnum=4:6000:6500:ww$="==> ":wout$="1":wnum=6:6200bscrn$=win$:scrn=scrn$)bscrn$=""bclear.view$;bi=115:help$(scrn,i):8c6600:6100c@loc%)S\loc%<023690Lb\q$="Hit in block "+block%)+" at offset "+loc%):q$:TENOPEN#10;q$l\index%=loc%+1 q\23630 \ no hit\ -------------------------\i%\33100: post-process dest$]] a do HELPbclear.view$; bi=D points if later cleared[clear.view$[i%=stblk%finblk% [block%=i%[exp.flag=0:jic.flag=0[8200: read'[rd.erri%=finblk%:errrtn=1:23700 \65000\ ----- do search here ----D\loc%=0:index%=0.N\search(@sv%(0),@target%(0),%index%,parm$(4),(j*2-1),2))):i%=parm$(4),j,1))Ztarget%(j)=i%Zj[ parms all ok to here`[ww$="Searching blocks "+stblk$+" to "+finblk$+" for "+target$:wnum=6:6000:tenopen#10;w$ [10190 [10000E[KBDSET%=10000: this show where old ONKB(4),1)="^"parm$(4)=parm$(4),2):addon=128:addon=0: handle ^ flag for nocase'CZtarget$=parm$(4):target$=""23800FZmaxi=parm$(4))6HZcmd$="SX"maxi=maxi/2:maxi<>maxi)errrtn=1:ZZtarget%(0)=maxi+addonnZj=1maxiExZcmd$="SX"i%=name$:minblk=0@Jww$=pgmname$+" >>> Currently viewing : "+media$:wnum=1:6000JN1Ncmdline$="RB,0":2075: set up a rb,0 command-Y SA and SX (Search Ascii and Search heX)Y33000: handle parms 1-3 Z ---- massage parm$(4)>> Currently viewing : "+media$:wnum=1:6000F.J93Jcmdline$="RB,0":2075: process the rb,0 command now 8J XD EXAMINE DRIVE ---- 3BJopenfile<>07400:openfile=0: close old Fck%=BLOCK$))<0Cww$="Current Block number reset to "+block$:wnum=4:6000 C6500KFPF XF EXAMINE FILE ----- 3ZFopenfile<>07400:openfile=0: close old one dFreqcnt%=512&nFlcase$=parm$(1):3100:path$=ucase$Fe$="":7100Fe$<>""F";^"program terminating"h6600:6100r9000 ____________ other specific error handlers SR2 --- format is startblock,finblock,dest,parm --- 33000: handle parms 1-3searchparm$=parm$(4)clear.view$M>q$="Searching blocks "+stblk$+" to "+finblk$+" with parms : "+searchparm$@q$:tenopen#10;q$ H10190 R10000EUKBDSET%=10000: this show where old ONKBD points if later clearedXexp.flag=1:jic.flag=0'\ handle searchparm$ in 43100-43199"fsrchB$(I);v:520: 500THPOS=4:I/2=I/2)I=I-1I=IBOTM THPOS=44:I/2<>I/2)I=I+1I2=-1:I=I-2:IBOTM<30THPOS=44I=IBOTM/2)*2:=+IBOTM/2)-1:CA)"PRINT.ALL": OA+P 3HA=(81+UCA)A=(81+LCA):::: OA+Q Quits 3IA=(83+LCA)A=(83+UCA)"PRINT.SHOW": OA+S 2JA=(68+LCA)A=(68+UCA)/Screen.Savers/HELLON=THPOS:B$(I);XA<8A>11540bA-7640,660,690,720l:=THPOS:ٺ1600 =Q:WW=0A=:A=21A=9&oldprefix$=40A=31410: Control C "aborts" program to Basic(:A=13770: Return Selects a file *DA=27:50: Escape to change disks/FA=324000: back out one directory level 3GA=(80+UCA)A=(80+L"BASIC 0":150A$="TEXT 0":150A$="CAT 0":150A$="FONT 0":150A$="FOTO 0":150A$(L),"BLOCKS")510*=27:=19:"FREE MEMORY AVAILABLE: ";=7:=20:"80C";A$(L);$:=5:THPOS=4:I=1:IBOTM=J-1:620Q=:=26:=21:sic; +Q Quits."r12);::"80C";a$;:+w#9,"DISKNAME.DAT":#9;DISKNAME$:#9|d$=DISKNAME$$=23:=0::"80C";d$;::12)201M=3:=14:"This /// SIG Disk is \^ 19";Р,2)", Washington Apple `, Ltd."=4:B$(1)="":B$(2)=""A$=16,B) THEN 240 #1, d$="":=10:"80C";d$ ž#1300I=0"I=I+1:#1;A$(I):290,#1 6L=I-1@j=1:same=0 J:SEG=0 Tœ2030^CT<1CT=1cCT>13000Zha$="{,|,~,}; selects; to new disk; J/2)=4:=+1:ۙ=44B$(J);:J=J+1I:1,180,22:2,280,21:2,2380,23:8A$(1000),B$(1000),C%(511),C$(20),name$(20):=10:=0UCA=128:LCA=UCA+32CT=15 IF PREFIX$= PREFIX$+MID$(B$(I),>tuvwxyz{10000 毺6230EOF here <<<"Di=1flag$)Fj=reqcnt%+iIj>51244120Nsv%(j)=flag$,i,1))Xibj>=512i=j+1512 sv%(i)=0iԭ٭"starting loop":anykey$ ޭ45000"here we are" 44520ȯүkbdset%=06230 ܯx43599 hit=1O >P ------------------------------------------------------- srch.ma0=+IBOTM/2-.5):I=IBOTM:I/2=I/2)I=I-1 œ2120B=B$(I),16)," ")-1 B$(I),"BASIC 0")850B$(I),"TEXT 0")890 B$(I),"CAT 0")1140*B$(I),"FONT 0")18504B$(I),"FOTO 0")1930>B$(I),"PASTXT 0")2070H540R\A$="RUNNING "+B$(I),16,B)f"79C";A$;:=0pB$(I),16,B) z::SEG=1".D1/SEG.T"t=+B$(I),16,B) yCT=CT+1~240:=24:=0:"@ ..... "DATE.TIME.LINE" ....JM=Ҡ,4,2))BTM1630,1640,1650,30C$="N"C$="n"1160;:=23:=0::"79C";"PRESS ANY KEY TO HALT LISTING": $1020.202 8::Z=1B::=23:=0::"79C";"WOULD YOU LIKE A PRINTED COPY?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"1170*C$="N"C$="n"}79C";"PRESS ANY KEY TO HALT LISTING"::202 1020#2,B$(I),16,B)ž#242:::1160Z=1#2;A$:"78A";A$Z=Z+1:Z>1842:::Z=1980*:=23:=0::"79C";"CONTINUE...?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"10 MENU.MAKER TEXT MODULESEG=0"MENU.MAKER"890&*X=11000: TEXT SLOW-DOWN LOOP ,X.1,180,22:2,280,21:2,2380,23:z:A$="LISTING "+B$(I),16,B)$=01:=0::"80C";A$;::12)>=23:=0::"DISK WINDOW ///+ BY DARYL ANDERSON a$,1)="/"5060:s=s-1 5030=a$240 MENU.MAKER 6.2 * Thanks to C.M.Davidson for his help!el; G$:::320H: Error Routine 202:U=11:"79C";"BAD PATH ERROR (NO DISK IN DISK DRIVE OR DESIRED FILE NOT FOUND.)"X=11000:X:::210Z a$="{,|,~,}; selects; back 1 lev 1600 &:WW=1:0 :SEG=1;".D1/S EG.F" SEG=1".D1/SEG.G"diskname$=3802  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T READ PASCAL TEXT FILES."04=10:"M$="NOVEMBER":1750M$="DECEMBER":1750826);"-";M$;" ";Ѡ,2));", ";"19";Р,2);" ";/П,2))=>13П,2))-12;џ,6);:1780$П,2))=0"12";џ,6);:ٟ;$П,2))=>12" PM-":" AM-" 1830WW=1530 =26:=211660,1670,1680,1690,1700,1710,1720,1730,1740^M$="JANUARY":1750hM$="FEBRUARY":1750rM$="MARCH":1750|M$="APRIL":1750M$="MAY":1750M$="JUNE":1750M$="JULY":1750M$="AUGUST":1750M$="SEPTEMBER":1750M$="OCTOBER":1750".D1/MENU.MAKER",220 d$="" A$="PRINTING "+B$(I),16,B)=01:=0::"80C";A$;:#3,B$(I),16,B)Z=1#3;b$:"78A";b$Z=Z+1:Z=18:1290 1260 #4,B$(I),16,B)#5,".PRINTER"+ž#4#5;12):::".D1/MENU.MAKER",220(204::"79A";""; 2D=1:F=1 <#4;a$ FD=D+1 P#5;a$ZD=60#5;12)dD=60D=1nF=F+1::d$;::Y=1100:Y x13402  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T R Lueff .!'$ iߪ$ 0 _H8eAfi\h$ P8 (L$ 0p ;<<ccb? @c@ube.a{bb,\(eb cc`eb`u ]LLi ]u ]Lui0 8 6,,% п zlm0}5}} kk} kklm Lz[ 80@ 6 2` { 㔠kH) ˎjhJJJJ ˎjL` 0:i`L^ u ` n-UUU`i` p`5665i`$0BP?iH i ]hLrv  mlmkljkij8ihn`L4{$0DpA ͍ nHi80 @L|u @u h `&m&l&k&j`L8{ 2 {L$0pLȔ ˌˢULi ]Ѕ ) }L`i i@Li$i0 p  `ui` L` u eLd5665`iɀ*iH i ] @8 i tutt tj hn` t` q0UN0U 0U$` ?p^|be ^b @ebbu|beiee^^iL\56^fbe55f5f6e}LɊe6u5u }`6ʈ`v`jip`  ?  ue }~ u 6 0 ъ}`  ъu ] iIii i)LɊ` i 0 3 0 0 `Hhth`^Qb ^^ 䊠bb `}i~ei^~0] e 䊠e^`}`566i5`_cf_cfi^eub` ^qbep`L^ 8b^e` Ίp`INLXZWX ߔ GGH HlHmHmH Qmhmhmhlh hk8j7k8LG t e77888 z57 yLy8I77JJ8 88`@iu +-ELƉ)  | .' "5 1  p)6mh6mhxhyhy y x Qȱx7ȱx88 Ƃ t7e7888ł75 78ߠȘH nyxy zhL "sHHHH u %{H , %{,H su yu 5shh 1 lhhXhXhWWȱW7ȱW8 eLji` HihJi(`  5s$L ɺ d$P i ]pi$ȱLlɻƟ l 柰ީ Lkhh uLi %{ u %{! d %{  u %{"!!!" 6 6 ۇ! ۇ 6 6 ۇ" ۇ 6!L`d8L6h suh5lhʥnH tiHɁ%} ~, hɁĠ {hLt` vy{| g|S}dpL}Qz}c0~~D:~L̑56gh6hegehh `iɂ8` `H Jh(L`H逨h` Hh8 Hɀjh i {     8᠄L}͠L  3٠ 3Ѡ J͠LĠ { ɠz }~  { {Π {nH {n0 I tΠ {h tӠL O K ]] n L~HL}IڢIڢ-(h#5ᆥ](Iڢ66ɂ66`8;)q4X>Vt~w/z*|cYX ~uƀ1r }iP  iɈ J~ i8Huiiu { t {h /~` O] } ]L} LoȘ戅 }iȅ {do`Abi$nFn)U`y`'d  ZuL`| ]z% uH Mh{ H S} } 1hJ inIn`L1 HHHHH u hL0shh6h6h555% 郢5566 郠` ye55EAD PASCAL TEXT FILES."04=10:"78C";"ANY KEY RETURNS TO THE MENU."!>G$:::".D1/MENU.MAKER",320cA[8饰 a{8`8\e@@He? 3^@@?hbbb0 ea ȑbc8L @@h5h656H mHlHkHjHiHl5 8eeghh^__` HHH H sh hhhn0iɐ ML {LW\i FHHHHH hhhHHlm ,҄ suhh)>=>hgh<<;[a{gggegȱgehh LK ,L^  8` ^LВ hhL=6 $P 訽5-:/ UUhhh{hzh}h| w Zp 0|8pJ LXLLӟG $p0`pog nkڥrok8o,koLjAaCcoJ nko5 nkk nLʟ S L? nL֟ HG56H6H k l ٥z{{ Bl}hhh ;в| |膆  ,;' Lޝ w Z pLNL2n`|H}HzH{HHH ɶ# {hH u  5s su,; Lu  5s$ zrL qiLpnH hɀ8(*iU.YCBULěJAktbgIȌp q8  r s8 JJ` !UvUUU ^"( M F566 y}z{6{L% #z{{"} GLuL^ lHHcJcmi J_mjmjJ_AgBhBh ]^A_B_B`L^ JEI L r Bkgelge8Å c  uLRNO rAKНTJVP Q8 DDFR S8 DiFEC CD)XDmXDǩ|`LvH wwhA?B@7B@87F8f7877878L^7 8*JA5gB6B68 h圍h?H@H@HI?J@J@ hbh@h@h?gAhBhBJJ8 J圍J7d8eBaLv`ijBfi jL^`Ib^J88 ii UŦLXUU HHHHL̷ +hh LP iL +hlhkhn jhimhHN8 Lu`LȓJ1CUDVDVU Lŧ 0 7U L`uUU{U||LK: / cyUUȹUUȥ Uл yu U` hh U LuL  (L[ Uީ  @Y%(&:$LX Vu 2 iHn %jHkHlHK Vu ʍ ِlHmH5 Vu {iH ꎥHH楩e ) ,LuLK eՅ7Ui8U #  785U6VLǕU7e778ҥU^V_bcF_hcCgDhebbc ]^__`U8傅UV` uUȱU` L^ uUUƜ0ƛ ̘WqeWȱWqei W` u8UUWȥVUX`UeUV` UO / +'L U)łiV VL LB 8U 7ȱ7 UU ЯUVULU7V8 i L LS U qUU qUH85h688V77U U 5qUWȥ6qUX7qWWȥ8qWW ٥IiV) V LOU7VV 4YgXg8UXg5VYg665VgWg 4 4VgWgWgJi XgWgZgVg 485壍XgVg6复YgWg 4 c uUUHVH ̘U7WUV8XVV8 ̘Wb7ȥXɂ逅c7 5ef fbe  7U8VLh88h7UV^^`H"h{||kjkȱ{ "ie{||  Ք{|56|6 y&5L^i8IjJkJk ܆lmm'&`L^fCDDEFUVFVX L4  uVgWgXgYg8WHHHH lL d L s HHH mu shhh5ȱ6ȱLȓ65 h5H6 dHHHȱȱ6H6H5H u =к shhh Luhhhh` U/mZlmYZ wjHkkiLL^ȥ5^H^h Lel5emȆ6п  Le^e__ iLڏe *& eee`  ě ww8A?pB@B@ ܆onL8jkL ufȩ8 ufLLа,L^  u  h s su= uXHXH L56ۥ 8ee L^?be^@ce@c __^_ ]__^;<<6 $Phihi^Ȋ^6gȑgʆ5a g5ȑgȥg <^^^__ɂ逅____<;إy6 hlhm^Ȋ^Lyh  (`|||}z,A[ :808Ш`,1@`y Gy`LޝHq1$u tAvʘtDթ 3q(~th`pvquts~y ffp$pp8j/;XAx=|8ez{{ Іghh "o `Lޝ x  wwghhoؠKkqvj 8LV`$uZuukvN kGv@  vvyLSj 3L8 ,V-uukv kv@vvyLLޝj 3 8 A80멀uukeqqtt$uA)*Ң֢t ?L B$uЫkЦuuj 3ysLġ,Vk Lm 2LˮL ꎅWXX` $` ,`HȘe`{ai|a|h - ;mLڮF 7 ; ` u op  4 t d sd LiLdʆ `! `Ȣ` :  `$ nL^u=g8i>hj>h ki=5j>6k6> hb 5b b$% kLi B  uLl$%`8f 7 ; ` u ` LuLeopL 0xH $0_ ih8fH`aai uhH2 {h JJJJf m ` :t osWgUg`Lvo`n}pm aa`dyopd8isŠt`dyoopd8ip`J uv`&&&8孪孪宐橈`! @ ; wwA?B@B @=g>h>h b=i>j>k V b LLLv ]gYg mZg8 n ]gvkUgl)@7gg0u(> ѨƬƫHH ^hohp` ]g0U`ȹU`VgVg 4LhsgN ǩ ? Og#X ggjgF=sg7N^g LsXggYgZg ? Og T L̬)Nl ^lEN)`L0s h  o d ɃɄ d`" lJJJJsg u ǩ LjLu RLN @uWgkjg tgg )llhgsigt hgigtggCighgȌWgXgUgVg ? Og"ighgH lhWUiUgiUVgL 5s zWH hW 5UWW nW` hL , u s Ր mqlr l)# u 0 ? OgLLv ``L ,Nku X ul)F UgH`UgVg 1gg Ngg 4NhHUg hUgl  Lv` H o h8L ± kLvUg 4 vkUgk L4 |u %{ʊ0  ekUg`L ({HIJh*Ug) H 4hVgL ({ъ) Ug)LLW= ɀ6"2豼U : , OgL ǩUgHVgH u ɩUgWgVgXghVghUgL4,fg ǩfWggXgYgL4 ǩL4 ({ n^8fl)I)I `op Ll L ({ nl)v rHqhLCLvkUg 4Ug jg wqr` hple Computer 1980, 1981  B n ꧠWgVg 4Lc gg` B Sb n Lc cLˍVgUWgYgXg=89U>:>:iU`9mU:mU: J &IHJh=>>UXgUYg9VgWg`L^ O aFL6_, ?U`Lv 6A ff# gf\ʐ 6 2nL 6 6 ff˻fдf`ffff \UgH chLLv`șfЂfffffffޭfffffffffнɯfз˩fб`  Apple Business BASIC v1.1 - (C) Apȥ xGƁ8 LQii0$iti8ti 8偅w恤wvwuJ-$n0+G0)GGwL 00`U 0r)`rqqLf $uyG-++ $n-G` kiekiiIif`ri8r` 0#U 0Ui)U`hGթ $u$n 0GЫ-Gv)' $G uJ-$n0+G $G0)GG(sȢ8傅䂐$u a0 xGL`$uAG)EGȩ+$i-Gȥf8 i y LH 0Gh 0GG5H6H6yLne ҥ GAX"+-&$.ECR/#Z*! DBA0 k$JJJJ) ݙUթU`yiɀjjn*8miɝ d L q$uLۤ$)JJ8偅8傪 ȥ f$i0Ł!y0GLĤLQ~䁰< a0$H ,Gl$uhuuj 3 ?XkkNuuj 3k 4%v. ݠ J #  f`u Bvphh` Lޝjk ,hh`Sj9-k L9j ekekk|z)ekk |j[   Lޝ`j 9kkj"j"k u`I !li)id`   r $ <,8 r  5si$ z656$0 p n %jjF$0ݢ0 liʽ`L , l)% `ٜL ` |u %{ Lʊ0 o `Ug c gg cggL0sUgfɯfH chLv ov1 kffff LLvLefU L_H ݳhUUE UU`BLOCKS FREE: BLOCKS USED: TOTAL BLOCKS: ±`LvupHoHp  (hiXghiYg ?0,>!SHOLES 1!1!2@23#3#4$4$5%5%6^67&7&8*8*9(9(0)0)-_-=+=+\|QWERTYUI OP[{]}`~`~ASDFGHJ K L ;:;:'"'"ZXCVBNM ,<,<.>.>/?/?d0hp00000>" <"<"""<< <"""<"><$""< """"  "" 6***""""""""""<""< :< $"""2,"""""**6"""""< >>8  8>> ""*:<"">""""""""""""">>><2"<""">""" ""  ">"6**"""""&*2""""""""""""*,"" "" ">""""""""""""""**6"""""""> >>> 7  3  5  >>< (&20 *, **>> "2*&" " >>  ">> "8""> """"""< SOS DRVR"STANDARD )((8*,;((*,((+)((9/(p((>3  =9 :9 .(+( 8#8# %3(8 ((,+)(%.4$)?((,(103 HH `DONN DENMAN STRIKES! H o h8L  kLvUQ 2 vkUQk L2 |_ %eʊ0  ekUQ`L{ (eHIJh*UQ) H 2hVQL} (eъ) UQ)LLW= ɀ6"2豼? : ^g ag_gbg`gcgLLLu_g`g  u s Րml0L`g_g`Vubhb]lk{aap8y^věyynyBOgՐihm?lK;mm0j̷5:?4ӍCHH CD\hh Hh`L)i   IC DATA WPTEXTSYSTEMRESERVRESERVCAT kUgo 1$'XgdYgVgUWg ? OgL8`L:LUUU) UJnU UJJJJ /UU`H hmUUUUUU`0U`UU :UUL ǩ u ɋ 0#agUpUoUn ˌUUUU ȹUUUʈ00U%U$U [UU. ['U&U( UU7 `st?9}Ust5 ewx! es8wtx euuLUUNKNWNBAD PASCODPASTXTTEXT PASDTABINARYFONT FOTO BASru HH` TakTu+ 1U)UU(U)U UU [VU#U ȹU Uuu`@nU TYPE BLKS NAME MODIFIED TIME CREATED TIME EOF U)!U)*UU)UUU mUmUUiVg` Ȳ ? OgXMLv$0% qr Ȳ 4qrqL `LeUsg La jg 3 Ugk 2nkUg ݳU nL@L 2nLRluvjghgsigtogwpgx`F UUqLOg qrL^op `VgWgsXgtYgkUg` ? OgLvVPgTQggRgfTg`EAd3] L^3]L^fWggXg Yg`agbgcg^WggXgYgdgegL4opqrst SVgDL8H\0`(d  $,($  , .CONSOLE a (C) 1980 by Apple Computer Inc.O  OOEJLf ((((PPPPBTVSPLH   5Aʘ ;H:H` (# (I// 0`)I<0 ^)WL)6L5 I`6 `7 I`8 I`9A)I@L" ֦ڱΑ0Б֤ P L׭,Y0 JfiΥiώJe΅Хiю_ * $p̑бʑΈ0 Б̱ΑʈeمΐeمА`萿 " `ʝA`f(,:<>@BDFHJZbmt{` * $P_/`'ʤ˅΄ϥ̤ͅЄ * $̑бʑΈ0Ƞ P L" $)טɀIim]ٮ_8ذ `$0"8,YJک@ׅפ؈۩MLp,Y08*Ȅ * ,YJ}΅н(I I $0;P̑бʑΈ,YJՐ̑ʈ0 Ցʭ̈`萠,QJ,R,S,T,V " `,[,Y JI`I`[,Y J)`)`\m_],YJ}ʅ̽(I I `[M,Y0JՐ̑ʈ`Jհ0`Ցʭ̏Ȑ`\m_[ * P `L" 8,YJf׮_$P`% (L5, `é ĩ `Y) jYZNZ~ZO,Y0'^^^]]8^][[```__8`_\\b)ba)a b 04 )ߍY) J,P(`hh% ( ΍ ύ逅Ñ`` " ( ĩÍĩϭ & &υΠÑΈΝ + ҰةeÅÐн,,P,`,$ ( $  x) (,`ÙJ`ÙE`)S`)T`)U`)V`)W`)X`MY0ȱ͏ ȱ͐L" ()^ JJ* I `x|x|,,P-X + ΝL  `,0 x) `, HH`L5L  d     HEJ lO  zh) `(" ( (ÈE  z`)QȱÍR`)P`Ɂ" (`Hh) L L L [LM LM ,0L5 HH`! (56O[agm x `(" ((èDÈ`QȭR`P```JÈ`EÈ`S`T`U`V`W`X`[ȭ\` `YȭȭéL͐\L" ,XL \\L" ,CL [\L" [,)LL L YL Z)ߍZ`Z Z`aL bL )Z) ZL   x) `(, LL͏[`͐\L" Yo}"+9GPYo ` Xb[m][\m_\]_^`L ]m[]_m\_[\L [m]^\m_`L bXL Z Z`Z)Z`,@`[, [L[`[͏[`,s[L\RLґȥӑ,P0 h0  z`,0L5 ҅ӥĥŰ+,0p J L Lz )"Ơ̏ HH` MH,Y [J h̰ [h,L`  ;2,X-P" a{)X LnX0$0%,V ҥ #L$0T,WOKT0P;ҥ,W #LA\   8҅¥Ӆé҅L,T ,U H,T p  He҅Ґhe…å逅h,Q h̰ʩ8,)΂ ̓`,T H h J `T!   J(P J J `,0L5,P0H0 ԥ f0)ĭX)X҅x  (ĥŐL ,PHȊ©L,T`{ ~I)_ J) ) )) ,0E EJ%O J(,@`[,S`,XP"[YJ H) +̰ H) +ʭP!$,169>AILORU[aknqw~ $27?DGKPSX`{ (+2;X[^chm%=BEHKPX]aehorw{!$',/47:>ADGJMRUX\_behknsv|  !$'*-27;@EILORUX[`chknsv~1BBl^`h[,($ ( h ))lfg % (*+,("-#.$/&1)%)?0'`,(0LHEąĩEŅ,/'+?8fPF 8f* 2*H UhX U'COPYRIGHT 1981 APPLE COMPUTERMICHAEL JOSEPH DHUEY NHMH` (# (B  $+147:>ADGLQ\o} 38;>CS`sz #&*2<?B2.PRINTER AZZ?ACFNWaehmpx $@QVZ_diw|  +069AFMRW]bgjmr #(+036DGPSdgjmp{~8` Y[՝ԝϝН  `F`aHc h d f eb``F d bb`̠`̠`  , p ` ` `e bb ̠%`?*13579;=TT(`…ʍLÅˍMPNW)QI)Qi P`)QW`xH) PQn8 h(` p= 1 Z5%Lf bb Ѥ `U `F8`]^F0 ^ g x (`U8  6LxHT ʍRʍSh)ɄJJn8Tx,X ʠʠ ,X0,T0ʬTʠRʠS( <LT UTUVVmTʥi,WɁ)˭Qi ɠ)QP`xF,X ʝY 8 Yi % Lҭ"] ! LL 9_L )'LD- Z)Aa)H LtL< L0LxxVU,X0 L8 (I 6Lt)T ʪi)ITn  <V=ߠF,X0g8 b bϩ - (]Y L  Aҩ] = ,Z- `)4a)X-qȑ @L L0L 9_L )8'$դԦ OˍMNK` `H <h (L­MíNLIJ  Xөхυ L"%H (FI  ) (j` `È` ȑ`! (`JI|L_L$[`[`*J%Khh`դ8eԅԥi ՄԐhh, (iIlhIkgj`ȑȥJI  өXѩ H (O_Z o O?ͩdfe̍ƅԥDžծF)D\ \ ' (   "m` 2H1H` (& ( ( (k^##D0C O F̍mAA?@  "   `(~36qwL APPLE /// SOS Profile Driver (C) Copyright 1981, Apple Computer Inc.R|.PROFILE&(C) APPLE COMPUTER INC. 1981A `mI "L). 3 8 D o w z   , 7 > K ` e h      & ) 0 3 6 < A H M P S X \ _ b e j o t w z   $ ' , / 6 = N S X ` t (-1:C\aeqw "$&(*,.024HQW]ciq|           & + . 1 4 7 : = @ F K N T W Z o w |     $ +`0`)0)0 X*4,2*,10M.-- x0 0`0֤F`,(0LH  ,-! (`í-ȑí.ȑí/ȑí0ȑí1ȑ``)M#-"ȩȩȭ*ȩ`,(0LH  HL*,0))`Í-ȱÍ.ȱÍ/x0)0)? 00XȱÍ1``(LH*00fg `;?MOQSUWY[]`fjnx},49?HMRV\_dx}'38; HELLO =".D1""DISK.WINDOW"[aeu "%*2NVY^adgjorw|KP0 ")(`JN{%*-LQ\r{~  #(-2=AJLNPXdmsy !+?MSho kk0 qroqYLG,h,VLGj)`L5,jL",TP TcL,UUTdLXXL"lp,W0k,bPZ,[0\[cLZnoln _L `L aXl ) ` ) `x,V\ `ÍRȱÍS`l031e-Y x V(Y H`j) )g kkL)` kkLi ),b-cWLidWuoeQ,T0L@TEPd>gZ[M,h,oe$YHV ))Ro}`\" (\ÈȌk`RȭS` l  o `ȩ`,Q0L HH`LE9Uc,T U H,U0x])] olXYmnpqVWkj^)  ]] ^ ) (`\" ( o,i0prH 8fofo7,T0*,V- x) V()LU Hh,RSLCpȥȑ`,Q0LmEąĩEŅ Hm`l HL 8fol,Q0L KHJH`! (Q HH` (# (#+Q`,Q$ ()PJK . "]RSiTUWZ[ Q`% (QLl  )JK `,Q0LpEąĩEŅ|# ```FJ "%/27@EHRU\ain #03@INQ_dos|~\r.RS232 c "߄P(C) Apple Computer Inc. 1981L(eʅ8ʅİLp )` ) `)DNNLSOPRnPO  % &$N) `,M0L }H|H`! (```,M0L HH`LwO NPQ #) "# (Zg] >M")"#)  #`,M$ ()LFG O M`% (MLOFG `,M0L& (,M0L7 Đ`ʥ逅8nOQRnʐQxOeʍOH )  hHMRUZekqv{ .SPRINTER A"(C) 1980 by Apple Computer Inc.H HH` ( D I S K W I N D O W / / / Disk Block Editor Utility for the Apple /// USER GUIDE D A DataSystems - 1984 under Apple Business Basic and is supplied as a boot disk. The program(s) run automatically if booted directly. If you are already running Basic, you can run the program by inserting the Disk Window /// diskette and RUNning either -1- Disk Window /// D A DataSystems RUNNING THE PROGRAM(s) Disk Window /// runsed structures, Disk Window /// can be quite useful in allowing simple debugging and patching of file data which is ultimately, itself, stored as disk-block data. * * * on the disk, the file-type byte in a file directory entry, and the boot code in block 0, for instance. Although its power lies in its granting you the ability to access and change disk data outside of the normal file-bas alter any location on any Apple /// disk storage device. Using Disk Window /// you can access those parts of the disk which are normally reserved solely for Operating System access. These include the 'bitmap' mapping available sectors D A DataSystems Description Disk Window /// is a collection of Basic and Assembler language programs which function together to allow you to directly access and D A DataSystems 229 Ravenwood Ave Rochester, NY 14619 716-328-3661 Disk Window /// ery effort has been made to ascertain correct performance of Disk Window ///, we cannot guarantee that it is bug free. WE WILL MAKE EVERY REASONABLE EFFORT to assist you with any problems or questions that may arise. asystems. Disk Window /// is provided in an FULLY COPYABLE format to the PURCHASER ONLY. Unlimited copies of the software may be made for use on a SINGLE COMPUTER ONLY. Multiple system usage must be applied for. Although even comes back to where it left off), we heretofore and whomsoever request that you please go now and read the last page of this document. ... thanks. The Disk Window /// software supplied to you is Copyrighted 1984 by D A Dat Well our learned counsel plans to contact Mr. Faust soon, but in the meantime he suggests that we toe the line. Borrowing from a programming technique known as the Subroutine (wherein the program goes and does something th We have a pet peeve with software documentation that welcomes you with an intimidating and litiginous statement which, if you do try to read it, makes Faust's arrangement with the devil sound positively cozy. the HELLO program or the DISK.WINDOW program. This preliminary program performs system initialization and then proceeds to the main functional program. WHAT TO DO FIRST Familiarize yourself with the contents of these notes. Recognize the inherent risks associated with using the powerful tool you now own. DISK WINDOW /// is, by dint of being such a powerful tool, also an EXTREMELY DANGEROUS TOOL. Its a trivial exer D A DataSystems Notes on HEX or Hexadecimal Numbers All numeric representations in DW/// are in base sixteen or 'hexadecimal' notation where each byte (with values rangin// diskette. Standard Apple /// floppies can hold 140K of data in 280 blocks, the Profile Hard Disk allows for up to 9728 blocks (hex'2600). -3- Disk Window /// ccess to standard floppies .D1 through .D4 and the .Profiule hard disk. For less standard devices you should use the System Configuration Program (SCP) on your System Utilities Diskette toi alter the SOS.DRIVER file on your DW/plication, Disk Window /// requires that the driver for the device to be accessed reside in the SOS.DRIVER file on the boot diskette that you use. The driver file supplied on the bootable Disk Window /// diskette is configured for aurrently viewable 256 bytes; the entire 512 are read in and available to you. Since this entire system bottlenecks at the level of the device driver, you are probably not surprised to learn that, like every other Apple /// apf the 'block'. Since limitations of display size preclude presentation of more than 256 bytes in the more readable format that is used, we make reference to Top, Middle, and Bottom of blocks. These terms simply identify the co the more familiar file structures - paths, files and directories. But ultimately SOS accesses the pieces of a file via block specifications to the device drivers. Disk Window /// allows you to view and alter disk data at the level o are physically located on the disk, each successive block is accessed simply by SOS as a sequentially higher block number, starting at zero. Of course SOS takes care of organizing these blocks for YOU, the application, intivers to handle the dirty work of tracks, sectors and interleaving factors, SOS can always request and expect disk data from a device's driver in a standardized format - 512 byte chunks labelled 'blocks'; and regardless of where theystore data in a variety of different physical formats, one feature of the Apple /// operating system (SOS) is that all devices are accessed through small manufactured supplied programs called "Device Drivers". By allowing the dr Disk Window /// D A DataSystems Notes on DISK BLOCKs and DEVICES Although different types of disk storage media, and those of different manufacturers, may actually e UNdo command. Familiarize yourself with all available SOS and system internals documentation. Contact your dealer to obtain the "SOS Reference Manuals". -2- you start to work it over with DW///. TEST OUT and PRACTICE all operations on extra diskettes before going after real live data. THINK TWICE, then once more BEFORE EVERY WRITE BLOCK command you issue. Practice thcise to render a diskette unbootable or turn an entire Profile subdirectory into meaningless nonsense... Familiarize yourself with all available SOS and systems internals documentation. Be certain everything is BACKED UP before g from 0 to 255 decimal) is represented by two digits from the set 0...9,A,B,C,D,E,F. this represents all possible byte valuyes as 00-FF. In addition to allowing a more compact and uniform display, this notation is most typical of other system internal representations and is relatively standard for 'low level' progframming functions similar to DW///. To give on example, SOS files maintain a special non-data block called the 'keyblock' which itse Write current Block to device WB QT Quit QT *** Note that the parts of the command, if there are more than one, are separated by the comma character always. *** Al Undo restore post-read contents of block UN VT View 'Top' half of block (bytes 0-255) VT VB View Bottom half of block (bytes 256-511) VB VM View Middle of block (bytes 128-383) VM WB Read Block nnnn from device RB,nnnn RN Read Next block RN RP Read Previous block RP SB Set Current Block Number to nnnn SB,nnnn UN Change Hex - at offset fff in block CX,fff,xxyy... replace with hex values xx,yy,... DD Dump to Destination - dump blocks bbbb to DD,bbbb,cccc,dd cccc to device or file dd RB y the device. Device viewing commands are : Command Function Syntax CA Change Ascii - at offset fff in block CA,fff,abc... replace with ascii values abc... CX -be-viewed disk. Be very careful when you go to your .profile or other hard disk. All followup commands will access this device. To change to another device exit to the rerun prompt via the QT command then rerun and re-specifmary The first command you will be prompted for is a specification for the device to be viewed. The default is .D1. You may remove the DW/// diskette from the built in drive at this point to allow use of the device for the tory block (#2) of a floppy disk with volume name /DADATA. -4- Disk Window /// D A DataSystems Disk Window /// Command Sum.......... 020 00 00 C3 27 0D 15 00 06 00 18 01 2A 53 4F 53 2E ...'.......*SOS. 030 4B 45 52 4E 45 4C 00 00 00 00 00 0C 08 00 2C 00 KERNEL........,. which, by the way, represents the first 64 bytes of the first directo row. If no standard ascii equivalent exists, a period "." is substituted. For example : 000 00 00 03 00 F6 44 41 44 41 54 41 00 00 00 00 00 .....DADATA..... 010 00 00 00 00 75 00 00 00 00 00 00 00 00 00 00 00 ....u. the offset of the start of the row in the block ranging from 000-1F0 xx xx... represent sixteen consecutive bytes of hex data aaaa... represent the ascii equivalents, IF ANY, of the sixteen bytes of data in thesixteen bytes of block data in standard hex and ascii equivalents as follows : fff xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx aaaaaaaaaaaaaaa fff xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx aaaaaaaaaaaaaaa fff is informational messages. Note that the lower left window with the =====> pointer also logs the current block number and position code (T M or B for Top, Middle or Bottom) e.g. ====> 01C3T. The main window displays sixteen rows of lf stores, in a two byte hex format, the block numbers of all the data blocks associated with the file. Disk Window /// Display Format The lower 'windows' of the display are used for command entry and l command lines are terminated by pressing . Prior to that press, you may edit and alter the command line using left and right cursor keys. *** A typical command sequence,after specifying a device, would be a Read Block, followed by View and Change commands, followed by a Write. *** Your most recent command is available as default for next command simply be pressing return. This is handy using the Read Next (RN) and Read Previous (RP) commands repetit D A DataSystems READING BLOCK DATA - the RB and RN and RP commands RB - This command Reads the specified block from the already established device and makes it available for changing and he 'printing' format expands. NOTE the allowance for 'NULL' device QUICK-SCAN VIEWING USING * as the destspec. -7- Disk Window /// (0-8 here). notes during the Dump you may hit the space bar to pause then any key to continue or type Q to quit back to viewing command entry level. Don't try to dump one whole disk to another since t (.Dn assumed specified) to a file on the .profile/misc subdirectory called "fulldisk.dump" - DD,0,8,* a special case which dumps to a null device allowing you to quickly view a sequence of blocks or file examples DD,2,1A,.printer which will print blocks 2 thru 1A - DD,000,118,.profile/misc/fulldisk.dump which will dump all 280 (decimal) blocks of a the floppy device or file of your choosing and to the screen. format DD,ssss,ffff,destspec ssss is starting block number (hex) ffff is final block number destspec is specification of output device -6- Disk Window /// D A DataSystems PRINTING ONE OR MORE BLOCKS & DUMPING TO DISK - the DD command DD - Dump to Destination. Prints the specified blocks to a characters). notes No delimiters between successive hex bytes. Offest value, and any other number spec for that matter can be simplified (i.e. 4 instead of 004) fff is block offset xxyy is hex byte substitution data example CA,4,F6444154455354 which would change our volume name to /DATEST (not /DATESTC since the F6 byte specifies a name length of 6 areful with upper/lower case... directory entries changed to lower case cannot be accessed by SOS. CX Change Hex allows changed value to be specified as full byte data format CA,fff,xxyyxxyy... T which, for the sample block above, would change bytes 18-1B (hex) to the characters TEST writing the altered block to disk would have the effect of changing the volume name to /DATESTC notes Be ccii allows you to specify the new values directly as an ASCII text string of characters. format CA,fff,aaaaaaa... fff is block offset aaaaaa...is ascii substitution data example CA,018,TES and CX commands. Only the contents of the currently viewed block may be changed. These two commands change the viewed contents; the Write Block (WB) command actually places the altered block data on the disk. CA - Change Asively. -5- Disk Window /// D A DataSystems Disk Window /// Command Detail CHANGING THE CONTENTS OF A BLOCK - the CA viewing. It also forces a View Top command to immediately display the first 256 bytes of the block. format RB,bbbb bbbb is a hex specification of the block number to be read example RB,F7 reads block F7 (hex... 247 decimal) RN - This command, with no parameters (format is simply RN), will read the next successive block from the device and display the first 256 bytes of it. RP - This ataSystems VIEWING THE CONTENTS OF THE CURRENT BLOCK - the VT & VB & VM commands VT - These commands will allow you to view different pieces of VB the 512 byte current block. Top, Bottom and Middle 256 VM which is that your next Read command renders any preceeding Writes Un-reversable. -10- Disk Window /// D A Den WB to re-write the restored block. notes UNdo works because the Read commands actually execute double reads of the specified block and the second copy is set aside. This points to a limitation of UNe that you altered the wrong block or device. You might re-read the block and restore the values in locations 0-5, if you remember what they were. Instead simply enter UN, wait a few seconds for the restore, th write (WB) command to reset the block to the restored values. format UN examples After the following sequence of commands ... RB,6 CX,0,FF0810141AFF WB you realiz significant changes to a block and written that block back to disk by mistake. This command will restore the block FOR VIEWING ONLY, back to its state when it was last read. Note that you must still execute a -9- Disk Window /// D A DataSystems RECOVERING FROM ACCIDENTAL WRITES - the UN (undo) command UN - Occassionally you will find that you have made ppropriate file keyblock which specifies the actual blocks used by the file. Notes Set Block does not alter Data. Only the value of the Current Block. accomplishes this ... RB,9F (may need to repeat to get good read) SB,10E WB In addition to this change you will have to find and alter the disk bitmap (block 6) and the a this. Format SB Examples Because of occasional verify errors on block 159 of your diskette, you wish to move the contents of that block to unused block 270. The following command sequence ew disk location. Since the Write command only writes the current block, we need a means of changing the current block number without altering the data block contents... the Set Block (SB) command accomplishes SB - Although normal read operations either explicitly specify the block number, or implicitly alter it (RN,RP), there may be times when you which to move the contents of the current data block to a nreventing use of the UNdo command. -8- Disk Window /// D A DataSystems SETTING THE Current Block Value - The SB command command, with no parameters (format is simply RP), will read the previous block from the device and display the first 256 bytes of it. notes Executing any Read command 'locks in' any preceeding Write p byte segments respectively. format VT or VM or VB example VM will display 256 bytes of current block from offsets 080-18F notes The VM command is included as a convenience to bypass splitting of viewable data near the bottom of 'Top' and the top of 'Bottom'. Using VT and VB in succession will show the entire contents of the block. ed by the file data. In this case these are 000C, 003C-0042, 00EE-00F0, and 00FE-0102. Good time for a scratchpad...this is not a Macintosh. Now you can go ahead and view the raw file data. Try to steer clear of block 6 on f00 0C 3C 3D 3E 3F 40 41 42 EE EF F0 FE FF 00 01 02 .<=>?@AB........ command...VB 100 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 01 ................ These byte pairs, 256 apart specify, in a keyblock, the actual blocks occupin two bytes for the keyblock pointer in reversed hi-byte/lo-byte format. In our example far above then keyblock for the SOS.KERNEL file is block 0008. Reading block 8 we might find the following : command...VT 0s to get the feel for DW///. Look at blocks 2 thru 5 which contain the volume catalog and match the ascii data values to your experience with catalogs. Count off 15 bytes for file name then note the one-byte file type value thedetailed in these manuals. If you need a challenge, you can work without them (we did ?!) but be prepared for some pretty serious disasters. Make a copy of a floppy and go to work on it. First, stick with Read and View commandf the Apple /// SOS Reference Manual vols. 1 & 2 from your dealer. They're a bit pricey but worth it. After all, the disk data you will be 'windowing' is all file data or SOS file housekeeping information, the structures of which are -12- Disk Window /// D A DataSystems Suggestions for Use First and foremost we reiterate our suggestion that you pick up a copy o is simply QT), will return you to a prompt to rerun the program. Responding in the affirmative will allow you to re-specify a device to be viewed then re-enter the command mode. Notice that the Write Block command takes no parameters. Only the current block is written. ENDING A SESSION WITH A SPECIFIC DEVICE - the QT (quit) command QT - This command, with no parameters (formatobnoxious series of "Are You Sure" type messages since, in our experience, ignoring these just becomes part of S.O.P. anyways... but we'll say it again here : ARE YOU SURE (Y/N) ? er in your head to countdown from ten each time you type WB and take the time to review changes made, current device and the situation in general... then press return. We have not implemented an but this is where you plug that typo right into the middle of your boot code or disk directory. Don't let the existence of the UN command lull you into a false sense of security. Set a little tim, regardless of its contents. format WB notes This is the DANGER ZONE. . This is the only part of this whole system that actually alters your diskette or hard disk. This may not be where you make your typo, -11- Disk Window /// D A DataSystems WRITING an ALTERED BLOCK TO DISK - the WB command WB - This command will write the current block back to the deviceloppies since it usually contains the "bitmap" which maps the space allocation of the entire diskette... on profile this extends into blocks 7 & 8. After you are comfortable with Read and View. Find some harmless data or text file and practice the two forms of the Change command. Then go ahead and take the plunge, Write an altered block to disk... but immediately Undo it. Practice this one. This type of access is a heady thing, go ahead and enjoy i0242 AY NOT APPLY TO YOU. THIS WARRANTY PROVIDES YOU WITH SPECIFIC LEGAL RIGHTS. THERE MAY BE OTHER RIGHTS THAT YOU MAY HAVE WHICH VARY FROM STATE TO STATE. -15- ES, EITHER EXPRESS OR IMPLIED, REGARDING THE ENCLOSED COMPUTER SOFTWARE PACKAGE, ITS MERCHANTABILITY OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. THE EXCLUSION OF IMPLIED WARRANTIES IS NOT PERMITTED IN SOME STATES. THE ABOVE EXCLUSION Mchive purposes) or into memory unless as part of the execution of Disk Window ///. When Disk Window /// has completed execution Apple software shall not be used by any other program. APPLE COMPUTER, INC. MAKES NO WARRANTIPLE BUSINESS BASIC are copyrighted programs of Apple Computer, Inc. licensed to D A Datasystems to distribute for use only in combination with Disk Window ///. Apple Software shall not be copied onto another diskette (except for ar * * * Since Apple Computer has been extremely generous in licensing software allowing us to sell this as a more convenient 'boot disk' we ask that you note the following as well. APPLE SOS and AP or exclusion may not apply to you. D A DATASYSTEMS reserves the right to make improvements in the product described in this manual at any time and without notice. The word Apple is a registered trademark of Apple Computer. A DATASYSTEMS has been advised of the possibility of such damages. Some states do not allow the exclusion or limitation of implied warranties or liability for incidental or consequential damages, so the above limitation cing, repair, or correction and any incidental or consequential damages. In no event will D A DATASYSTEMS be liable for direct, indirect, incidental, or consequential damages resulting from any defect in the software, even if Dto its quality and performance is with the buyer. Should the programs prove defective following their purchase, the buyer (and not D A DATASYSTEMS, its distributors or retailers) assumes the entire cost of all necessary serviespect to this manual or with respect to the software described in this manual, its quality, performance, merchantability, or fitness for any particular purpose. D A DATASYSTEMS software is sold or licensed "as is". The entire risk as -14- Disk Window /// D A DataSystems DISCLAIMER OF ALL WARRANTIES AND LIABILITIES D A DATASYSTEMS makes no warranties, either express or implied, with rt but go -13- Disk Window /// D A DataSystems ahead slowly.