LnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!)O^Ŭ}7III.PCL.8u' +SPMOVE.TEXTE7/,INSTRUCTIONSM77+SPMOVE.CODER/\73/COMP.PATCH.TEXT(7&/COMP.PATCH.CODE 7)-READ.ME.FIRST >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@L  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJK {ioread/iowrite } PATH: STRING; {filename } VAR B: BUFFER; {blockbuffer } BN: INTEGER; {blocknumber } VAR RC: INTEGER):HR(31)); READLN(RESPONSE); END; PROCEDURE STR2UPCASE(S: STRING; VAR T: STRING); VAR I: INTEGER; BEGIN T:=S; FOR I:=1 TO LENGTH(S) DO IF S[I] IN ['a'..'z'] THEN T[I]:=CHR( ORD(S[I]) - 32 ); END; FUNCTION BLOCKACCESS( IO: IOTYPE; VAR K: CHAR; BEGIN WRITE(MESSAGE, ' (Y/N): '); REPEAT WRITE(CHR(7)); READ(KEYBOARD,K); UNTIL K IN ['Y','y','N','n']; WRITELN(K); CONFIRM:=(K IN ['Y','y']); END; PROCEDURE PROMPTREAD(MESSAGE: STRING; VAR RESPONSE: STRING); BEGIN WRITE(MESSAGE,C {carriage return for err mess concats } PROCEDURE ABORT(MESSAGE: BIGSTRING); BEGIN {I-} WRITELN; WRITELN(MESSAGE); WRITELN('Exiting program...'); EXIT(PROGRAM); {$I+} END; FUNCTION CONFIRM(MESSAGE: STRING): BOOLEAN; BOOLEAN; RC, {return code from block access } $Comp_Type {compiler type } -: INTEGER; B: BUFFER; {file buffer } CRLF: STRING[1]; P to modify } SYSFILES {run time path to system files to modify} : STRING; USE_NONSTD, {use a non std prefix eg GRTPLN ? } USE_SUBDIR {use a subdirectory for system files? } : NEW_PPATH, {complete path to new system pascal } NEW_MPATH, {complete path to new system miscinfo } MISCPATH, {path to new miscinfo, w/o devicename } INTERPPATH, {run time path to SOS.INTERes, w/o devicename. } { ie: either "SYSTEM." or "SYS1.2/" } OLD_PPATH, {complete path to SYSTEM.PASCAL } OLD_MPATH, {complete path to SYSTEM.MISCINFO } YPE = (IOREAD, IOWRITE); {block read or block write} BIGSTRING= STRING[255]; VAR SYSDEV, {SOS device name for new system volume } SUBPFX, {First seven characters of path to } { system filr to handle Pascal 2.0 compiler ------------------------------------------------------------------------------} CONST TITLE ='SUPER P-MOVE [v. 1.1 by D.G.Wade 5/13/86]'; TYPE BUFFER = PACKED ARRAY [0..511] OF CHAR; {file block buffer} IOTPROGRAM SUPERPMOVE; {----------------------------------------------------------------------------- 5/21/85 by Daniel G. Wade Modifies Pascal System Files for use in a subdirectory. Valid for Apple /// Pascal version 1.2 Modified 5/13/86 by John E. Cisa BOOLEAN; {successful? } {error codes: 0: no error 1: can't open file 2: block read/write error 3: can't close file } VAR F: FILE; {$I-} PROCEDURE ERR(ERRNUM: INTEGER); BEGIN RC:=ERRNUM; BLOCKACCESS:=(ERRNUM=0); CLOSE(F); EXIT(BLOCKACCESS); ; NEXT; END; PROCEDURE PAGE5; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, ' *** DOCUMENTATION ***',CRLF, CRLF, ' The renamed files will list as follows:',CRLF, ' /PROFILE Size Modified Time ' Rename the files in the subdirectory, using the following',CRLF, ' scheme: SYSTEM.PASCAL ---> PASCAL',CRLF,CRLF, ' Do this for all system files in the subdirectory ',CRLF, ' except for SYSTEM.SYNTAX, which remains unchanged. ' )' It is your responsibility to copy MISCINFO to the specified location!' ); NEXT; END; PROCEDURE PAGE4; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, ' *** DOCUMENTATION ***',CRLF, CRLF,CRLF, ' Step 3.',CRLF,CRLF, you boot 1.2!',CRLF, ' You will have the option of choosing to keep *SYSTEM.MISCINFO',CRLF, ' in the root directory (recommended), or moving it to the subdirectory.', CRLF, lume or to a spare floppy. (So p-Move can find it!)',CRLF, ' Copy SYSTEM.FILER & SYSTEM.LIBRARY from your 1.1 system ',CRLF, ' into this subdirectory. ',CRLF, CRLF, ' Very Important: ',CRLF, ' SYSTEM.MISCINFO must be present when *** DOCUMENTATION ***',CRLF, CRLF, CRLF, ' Step 2.',CRLF,CRLF, ' From the Pascal 1.2 update disks, copy the system files ',CRLF, ' to the new subdirectory. Copy the SOS.INTERP file temporarily',CRLF, ' to the root vo' I suggest you call it "SYS1.2", although you can give it whatever name', CRLF,' you want, as long as it is exactly six characters in length.' ); NEXT; END; PROCEDURE PAGE3; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, ' ',CRLF, 'after a program written by John Jeppson for Pascal version 1.1. ',CRLF, CRLF,CRLF, 'INSTALLATION:',CRLF,CRLF, ' Step 1.',CRLF,CRLF, ' Create a new subdirectory in the root directory your system disk,',CRLF, eX(ecute: SPMOVE.CODE' ); NEXT; END; PROCEDURE PAGE2; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, ' *** DOCUMENTATION ***',CRLF, CRLF, CRLF, ' This program is an implementation for Apple /// Pascal version 1.2, make free space in root directory of system volume.',CRLF, CRLF, 'IMPLEMENTATION: Pascal language program to alter SOS.INTERP file ',CRLF, ' and Pascal system files.',CRLF, CRLF, 'SYSTEM VERSION: Apple /// Pascal 1.2 (only!)',CRLF, CRLF, 'USE:' *** DOCUMENTATION ***',CRLF, CRLF, CRLF, 'PROGRAM: SUPER P-MOVE', CRLF, CRLF, 'AUTHOR: Daniel G. Wade, written 5/27/85',CRLF, CRLF, 'PURPOSE: Patch Apple /// Pascal version 1.2 for use in subdirectory,', CRLF, ' toBOARD,K); IF (K=CHR(27)) THEN ABORT('User directed abort.'); IF EOLN(KEYBOARD) THEN BEGIN WRITELN; EXIT(INSTRUCTIONS); END; END; PROCEDURE PAGE1; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, 0 THEN ERR(3); RC:=0; BLOCKACCESS:=TRUE; {$I+} END; PROCEDURE INSTRUCTIONS; PROCEDURE NEXT; VAR K: CHAR; BEGIN GOTOXY(0,23); WRITE( 'Press to continue, to exit, to start program: ' ); READ(KEY END; BEGIN RESET(F,PATH); IF IORESULT <> 0 THEN ERR(1); CASE IO OF IOREAD: IF ( BLOCKREAD(F,B,1,BN) <> 1 ) THEN ERR(2); IOWRITE: IF ( BLOCKWRITE(F,B,1,BN) <> 1 ) THEN ERR(2); END; CLOSE(F); IF IORESULT <> File type Eof Phys',CRLF, ' SYS1.2 2 27-May-85 17:42 Directory 512 2',CRLF, ' PASCAL 100 24-Jan-84 10:35 Datafile 512 101',CRLF, ' EDITOR 61 24-Jan-84 11:08 Codefile 512 62',CRLF, ' SYSTEM.SYNTAX 12 24-Jan-84 0:00 Textfile 512 13',CRLF, ' ASSMBLER 51 24-Jan-84 11:46 Codefile 512 52',CRLF, ' OPCODES.interpreter file'); 2: ABORT('Error reading from interpreter file'); 3: ABORT('Error closing interpreter file'); END; {} {$R-} MOVELEFT(B[359],OLD_PPATH,32); IF LENGTH(OLD_PPATH) > 31 THEN ABORT('Interpreter filERPPATH; BEGIN PROMPTREAD('Enter complete pathname to interpreter file: ',INTERPPATH); WRITELN; WRITELN('Reading from interpreter:'); IF NOT BLOCKACCESS(IOREAD, INTERPPATH, B, 6, RC) THEN CASE RC OF 1: ABORT('Error opening WRITE(CRLF, CHR(18),' Files should be backed up before proceeding. ',CHR(17), CRLF); IF NOT CONFIRM('Continue with program?') THEN ABORT('User directed abort.'); WRITELN(CHR(28),TITLE); END; PROCEDURE GETPATHS; PROCEDURE GET_INT END; BEGIN PAGE1;PAGE2;PAGE3;PAGE4;PAGE5;PAGE6;PAGE7;WRITELN; END; PROCEDURE GREETING; BEGIN WRITE(CHR(28),TITLE,CRLF, ' For use with Apple /// Pascal 1.2 ONLY!!!',CRLF,CRLF); WHILE CONFIRM('Need instructions?') DO INSTRUCTIONS; These',CRLF, ' are SYSTEM.WRK.TEXT & SYSTEM.WRK.CODE, and SYSTEM.LST.TEXT',CRLF, CRLF,CRLF,CRLF, ' For more documentation, you`ll have to buy the disk.',CRLF, ' contact the Third Apple Users disk librarian for details ' ); NEXT;F, ' Additional Info:',CRLF, CRLF, ' You may want to use the FILER to alter the directory info of ',CRLF, ' PASCAL and SOS.INTERP to Codefile and Sosfile respectively. ',CRLF, CRLF, ' Certain files must still use the root directory. ' to a boot diskette with appropriate driver file, ',CRLF, ' and/or install in Catalyst main menu.' ); NEXT; END; PROCEDURE PAGE7; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, ' *** DOCUMENTATION ***',CRLF, CRL asked for the pathname to the interpreter file, respond with',CRLF, ' the complete path, eg.: ".PROFILE/SYS1.2/SOS.INTERP"',CRLF, ' Following successful completion, copy the modified SOS.INTERP file',CRLF, system device.', CRLF, ' Don`t be concerned if p-Move can`t find "SYSTEM.PASCAL", it only',CRLF, ' needs to work on the interpreter. ',CRLF, CRLF, ' Step 5.',CRLF, CRLF, ' Run SPMOVE.CODE and follow the prompts. When you are',CRLF, ' *** DOCUMENTATION ***',CRLF, CRLF, ' Step 4.',CRLF, CRLF, ' Run PMOVE.CODE (supplied with Pascal 1.1), and follow the',CRLF, ' instructions for that program exactly',CRLF, ' p-Move will modify the interpreter to assign a new ' SOS.INTERP 34 24-Jan-84 17:24 Datafile 512 35',CRLF, ' SYSTEM.MISCINFO 1 26-May-85 0:12 Datafile 512 1' ); NEXT; END; PROCEDURE PAGE6; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, ' ile 512 52',CRLF, ' LIBRARY 232 5-May-85 0:59 Codefile 512 233',CRLF, ' STARTUP 4 11-May-85 12:31 Codefile 512 5',CRLF, Jan-84 11:55 Codefile 512 31',CRLF, ' LIBRARY.CODE 9 24-Jan-84 11:58 Codefile 512 10',CRLF, ' LIBMAP.CODE 13 24-Jan-84 12:00 Codefile 512 14',CRLF, ' FILER 51 24-Sep-82 0:00 Codef6502 2 24-Jan-84 0:00 Datafile 512 3',CRLF, ' COMPILER 86 24-Jan-84 11:31 Codefile 512 87',CRLF, ' ERRORS.6502 7 24-Jan-84 0:00 Datafile 512 8',CRLF, ' LINKER 30 24-e inconsistant with program'); STR2UPCASE(OLD_PPATH,OLD_PPATH); IF POS('PASCAL',OLD_PPATH)=0 THEN ABORT('Interpreter file inconsistant with program'); {} MOVELEFT(B[394],OLD_MPATH,32); IF LENGTH(OLD_MPATH) > 31 THEN ABORT('Interpreter file inconsistant with program'); STR2UPCASE(OLD_MPATH,OLD_MPATH); IF POS('MISCINFO',OLD_MPATH)=0 THEN ABORT('Interpreter file inconsistant with program'); {} WRITELN(' Current path to system pascal is: ',dard path *SYSTEM.MISCINFO?') THEN MISCPATH:='SYSTEM.MISCINFO' ELSE MISCPATH:=CONCAT(SUBPFX,'MISCINFO'); END ELSE MISCPATH:='SYSTEM.MISCINFO'; NEW_MPATH:=CONCAT(SYSDEV,'/',MISCPATH); END; "PROCEDURE Get_Comp_Info; "VA WRITELN(' as many programs use it to set terminal parameters.'); WRITELN; WRITELN(' Enter Y to retain standard, or '); WRITELN(' enter N to use *',SUBPFX,'MISCINFO'); WRITELN; IF CONFIRM('Retain stan END; PROCEDURE GET_MISCPATH; BEGIN IF USE_NONSTD OR USE_SUBDIR THEN BEGIN WRITELN('----------------------------------------------------------'); WRITELN; WRITELN('System Miscinfo should generally remain standard, '); STR2UPCASE(SUBPFX,SUBPFX); SUBPFX:=CONCAT(SUBPFX,'.'); END ELSE BEGIN USE_NONSTD:=FALSE; SUBPFX:='SYSTEM.'; END; SYSFILES:=CONCAT(SYSDEV,'/',SUBPFX); NEW_PPATH:=CONCAT(SYSDEV,'/',SUBPFX,'PASCAL'); characters,'); WRITELN; PROMPTREAD('Enter prefixed name, RETURN for "SYSTEM" : ',SUBPFX); IF LENGTH(SUBPFX)=0 THEN SUBPFX:='SYSTEM'; IF LENGTH(SUBPFX)<>6 THEN ABORT('Bad namelength, MUST be 6 characters'); BEGIN USE_NONSTD:=TRUE; WRITELN('----------------------------------------------------------'); WRITELN; WRITELN('Enter prefixed name for system files, eg "SYSTEM" '); WRITELN(' name must be exactly seven (6) NEW_PPATH:=CONCAT(SYSDEV,'/',SUBPFX,'PASCAL'); END ELSE BEGIN USE_SUBDIR:=FALSE; SYSFILES:=CONCAT(SYSFILES,'.'); END; END; PROCEDURE GET_SYSNAME; BEGIN IF CONFIRM('Use non-standard SYSTEM name?') THENSUBPFX); IF NOT BLOCKACCESS(IOREAD,SYSFILES,B,0,RC) THEN ABORT(CONCAT(SYSFILES,' subdirectory not found')); {} SUBPFX:=CONCAT(SUBPFX,'/'); SYSFILES:=CONCAT(SYSFILES,'/'); subdirectory name, RETURN for "SYS1.2" : ',SUBPFX); IF LENGTH(SUBPFX)=0 THEN SUBPFX:='SYS1.2'; IF LENGTH(SUBPFX)<>6 THEN ABORT('Bad namelength, MUST be 6 characters'); {} STR2UPCASE(SUBPFX,SUBPFX); SYSFILES:=CONCAT(SYSDEV,'/', WRITELN('Enter subdirectory name for system files, eg "SYS1.2/" '); WRITELN(' Subdirectory must be exactly six (6) characters,'); WRITELN(' (Don`t enter the device name, just the subdirectory!)'); WRITELN; PROMPTREAD('Enter SYSFILES:=SYSDEV; END; PROCEDURE GET_SUBDIR; BEGIN IF CONFIRM('Modify system files for use in Subdirectory?') THEN BEGIN USE_SUBDIR:=TRUE; WRITELN('----------------------------------------------------------'); WRITELN; ('Bad device name'); IF NOT BLOCKACCESS(IOREAD, SYSDEV, B, 0, RC) THEN CASE RC OF 1: ABORT('Device not present or volume not on line'); 2: ABORT('Volume not on line or not blocked device'); 3: ABORT('Error...'); END; change it now! *) } SYSDEV:=COPY(OLD_PPATH,1,POS('/',OLD_PPATH)-1); STR2UPCASE(SYSDEV,SYSDEV); WRITELN('System device is: ',SYSDEV); WRITELN; IF (POS('/',SYSDEV)<>0) OR (POS(':',SYSDEV)<>0) THEN ABORTOLD_PPATH); WRITELN(' Current path to system miscinfo is: ',OLD_MPATH); WRITELN; {$R+} END; PROCEDURE GET_DEVNAME; BEGIN { (* haven't figured out how pmove modifies block 1 for sys device *) (* therefore don't let userR K : CHAR; "BEGIN $WRITELN('----------------------------------------------------------'); $WRITELN; $WRITELN('Which type(s) of compiler do you have ? Enter:'); $WRITELN(' 1) if you have the standard Pascal 1.2 compiler'); $WRITELN(' 2) if you have the Pascal 2.0 compiler'); $WRITELN(' 3) if you have both compilers and want both updated');WRITELN; $WRITELN ('NOTE - no matter which option you choose always be sure the'); $WRITELN (' Pascal 1.2 compiler is named CON ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 26. $0D0 Target: "#4:xxxxxxxASSMBLER" ')); S:=CONCAT('#4:',SUBPFX,'ASSMBLER');WRITELN(S); IF LENGTH(S)<>18 THEN ABORT('Error in construction of n) THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 26. $0D0 - string length error ')); {$R+} STR2UPCASE(S,S);WRITE(S:20,'---> '); IF (POS('ASSMBLER',S) <> 11) OR ( POS('#4:',S) <> 1 ) THE THEN ABORT(CONCAT('Error writing to ',NEW_PPATH)); END; PROCEDURE BLOCK26; PROCEDURE B26_ASSM; BEGIN FILLCHAR(S,SIZEOF(S),CHR(0)); MOVELEFT(B[208],S,19); {get "#4:SYSTEM.ASSMBLER" } {$R-} IF (LENGTH(S)<>18,MISCPATH);WRITELN(S); IF LENGTH(S) <> 16 THEN ABORT('Error in construction of new pathname'); MOVELEFT(S,B[180],17); {put new '*SYSTEM.MISCINFO'} {} IF NOT BLOCKACCESS(IOWRITE,NEW_PPATH,B,25,RC) STR2UPCASE(S,S); WRITE(S:20,'---> '); IF ( POS('*',S) <> 1 ) OR ( POS('MISCINFO',S) <> 9) THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 25. $0B4 Target: "*xxxxxxxMISCINFO"')); S:=CONCAT('*'EOF(S),CHR(0)); MOVELEFT(B[180],S,17); {get old '*SYSTEM.MISCINFO'} {$R-} IF LENGTH(S)<>16 THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 25. $0B4 - string length error')); {$R+} PROCEDURE MODIFY_PASCAL; VAR S: STRING; PROCEDURE BLOCK25; BEGIN WRITELN('Modifying PASCAL , block #25.'); IF NOT BLOCKACCESS(IOREAD,NEW_PPATH,B,25,RC) THEN ABORT(CONCAT('Error reading from ',NEW_PPATH)); {} FILLCHAR(S,SIZ359],32); MOVELEFT(NEW_MPATH,B[394],32); WRITELN(OLD_PPATH:20,'---> ',NEW_PPATH); WRITELN(OLD_MPATH:20,'---> ',NEW_MPATH); IF NOT BLOCKACCESS(IOWRITE,INTERPPATH,B,6,RC) THEN ABORT('Error writing to interpreter file'); END; --------------------------------------------------------'); END; PROCEDURE MODIFY_INTERP; BEGIN WRITELN('Modifying interpreter '); IF NOT BLOCKACCESS(IOREAD,INTERPPATH,B,6,RC) THEN ABORT('Error reading interpreter file'); MOVELEFT(NEW_PPATH,B[system files: ',SYSFILES,'='); WRITELN; WRITELN; IF NOT CONFIRM('Proceed to modify files?') THEN ABORT('User directed abort.'); UNITCLEAR(1); IF NOT CONFIRM('PLEASE RECONFIRM: Modify files?') THEN ABORT('User directed abort.'); WRITELN('- WRITELN('New System Parameters will be as follows:'); WRITELN; WRITELN(' System device: ',SYSDEV); WRITELN(' Pathname to system pascal: ',NEW_PPATH); WRITELN(' Pathname to system miscinfo: ',NEW_MPATH); WRITELN; WRITELN(' Current path to _SUBDIR; IF NOT USE_SUBDIR THEN GET_SYSNAME; GET_MISCPATH; "Get_Comp_Info; END; PROCEDURE SHOWSETTINGS; VAR S: STRING; BEGIN WRITELN('========================================================='); $WRITELN (' has succesfully completed.');WRITELN; $WRITE ('Compiler option (1,2 or 3) : '); $REPEAT WRITE (CHR(7)); READ (KEYBOARD,K);UNTIL K IN ['1','2','3']; $WRITELN (K);Comp_Type:=ORD(K)-48; "END; BEGIN GET_INTERPPATH; GET_DEVNAME; GETMPILER and the Pascal'); $WRITELN (' 2.0 compiler is named SYSTEM.COMPILER - if you''re sure'); $WRITELN (' you want the 2.0 compiler invoked from the command'); $WRITELN (' line, be sure to rename it to COMPILER when this program'); ew pathname'); MOVELEFT(S,B[208],19); {put "#4:SYSTEM.ASSMBLER" } END; PROCEDURE B26_COMP; BEGIN FILLCHAR(S,SIZEOF(S),CHR(0)); MOVELEFT(B[238],S,19); {get "#4:SYSTEM.COMPILER" } {$R-} IF LENGTH(S)<> 18 THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 26. $0EE - string length error')); {$R+} STR2UPCASE(S,S);WRITE(S:20,'---> '); IF (POS('COMPILER',S) <> 11) OR ( POS('#4:',S) <> 1 ) THEN consistent with program',CRLF, 'Block 27. $0D2 - string length error')); {$R+} STR2UPCASE(S,S);WRITE(S:20,'---> '); IF (POS('STARTUP',S) <> 9) OR ( POS('*',S) <> 1 ) THEN ABORT(CONCAT('PASCAL file inconsistent with proKACCESS(IOREAD,NEW_PPATH,B,27,RC) THEN ABORT(CONCAT('Error reading from ',NEW_PPATH)); {} FILLCHAR(S,SIZEOF(S),CHR(0)); MOVELEFT(B[210],S,16); {get "*SYSTEM.STARTUP" } {$R-} IF LENGTH(S)<>15 THEN ABORT(CONCAT('PASCAL file in B26_EDIT; B26_FILE; B26_LINK; {} IF NOT BLOCKACCESS(IOWRITE,NEW_PPATH,B,26,RC) THEN ABORT(CONCAT('Error writing to ',NEW_PPATH)); END; PROCEDURE BLOCK27; BEGIN WRITELN('Modifying PASCAL , block #27.'); IF NOT BLOC22],17); {put "#4:SYSTEM.LINKER" } END; BEGIN WRITELN('Modifying PASCAL , block #26.'); IF NOT BLOCKACCESS(IOREAD,NEW_PPATH,B,26,RC) THEN ABORT(CONCAT('Error reading from ',NEW_PPATH)); {} B26_ASSM; B26_COMP; file inconsistent with program',CRLF, 'Block 26. $142 Target: "#4:xxxxxxxLINKER" ')); S:=CONCAT('#4:',SUBPFX,'LINKER');WRITELN(S); IF LENGTH(S)<>16 THEN ABORT('Error in construction of new pathname'); MOVELEFT(S,B[3ASCAL file inconsistent with program',CRLF, 'Block 26. $142 - string length error ')); {$R+} STR2UPCASE(S,S);WRITE(S:20,'---> '); IF (POS('LINKER',S) <> 11) OR ( POS('#4:',S) <> 1 ) THEN ABORT(CONCAT('PASCAL MOVELEFT(S,B[296],16); {put "#4:SYSTEM.FILER" } END; PROCEDURE B26_LINK; BEGIN FILLCHAR(S,SIZEOF(S),CHR(0)); MOVELEFT(B[322],S,17); {get "#4:SYSTEM.LINKER" } {R-} IF LENGTH(S)<>16 THEN ABORT(CONCAT('PPASCAL file inconsistent with program',CRLF, 'Block 26. $128 Target: "#4:xxxxxxxFILER" ')); S:=CONCAT('#4:',SUBPFX,'FILER');WRITELN(S); IF LENGTH(S)<>15 THEN ABORT('Error in construction of new pathname'); CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 26. $128 - string length error')); {$R+} STR2UPCASE(S,S);WRITE(S:20,'---> '); IF (POS('FILER',S) <> 11) OR ( POS('#4:',S) <> 1 ) THEN ABORT(CONCAT('name'); MOVELEFT(S,B[268],17); {put "#4:SYSTEM.EDITOR" } END; PROCEDURE B26_FILE; BEGIN FILLCHAR(S,SIZEOF(S),CHR(0)); MOVELEFT(B[296],S,16); {get "#4:SYSTEM.FILER" } {$R-} IF LENGTH(S)<>15 THEN ABORT( ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 26. $10C Target: "#4:xxxxxxxEDITOR" ')); S:=CONCAT('#4:',SUBPFX,'EDITOR');WRITELN(S); IF LENGTH(S)<>16 THEN ABORT('Error in construction of new pathT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 26. $10C - string length error')); {$R+} STR2UPCASE(S,S);WRITE(S:20,'---> '); IF (POS('EDITOR',S) <> 11) OR ( POS('#4:',S) <> 1 ) THEN name'); MOVELEFT(S,B[238],19); {put "#4:SYSTEM.COMPILER" } END; PROCEDURE B26_EDIT; BEGIN FILLCHAR(S,SIZEOF(S),CHR(0)); MOVELEFT(B[268],S,17); {get "#4:SYSTEM.EDITOR" } {$R-} IF LENGTH(S)<>16 THEN ABOR ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 26. $0EE Target: "#4:xxxxxxxCOMPILER" ')); S:=CONCAT('#4:',SUBPFX,'COMPILER');WRITELN(S); IF LENGTH(S)<>18 THEN ABORT('Error in construction of new pathgram',CRLF, 'Block 27. $0D2 Target: "*xxxxxxxSTARTUP" ')); S:=CONCAT('*',SUBPFX,'STARTUP');WRITELN(S); IF LENGTH(S)<>15 THEN ABORT('Error in construction of new pathname'); MOVELEFT(S,B[210],16); {put "*SYSTEM.STARTUP" } {} FILLCHAR(S,SIZEOF(S),CHR(0)); MOVELEFT(B[242],S,17); {get "*SYSTEM.STARTUP." } {$R-} IF LENGTH(S)<>16 THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 27. $0F2 - string length error')); IF LENGTH(S)<>16 THEN ABORT('Error in construction of new pathname'); MOVELEFT(S,B[346],17); {put "*SYSTEM.LIBRARY." } {} IF NOT BLOCKACCESS(IOWRITE,NEW_PPATH,B,86,RC) THEN ABORT(CONCAT('Error writing to ',NEW_PPATH)); END; BEGIN '---> '); IF (POS('LIBRARY.',S) <> 9) OR ( POS('*',S) <> 1 ) THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 27. $124 Target: "*xxxxxxxLIBRARY." ')); S:=CONCAT('*',SUBPFX,'LIBRARY.'); WRITELN(S); MOVELEFT(B[346],S,17); {get "*SYSTEM.LIBRARY." } {$R-} IF LENGTH(S)<>16 THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 27. $124 - string length error')); {$R+} STR2UPCASE(S,S);WRITE(S:20,86; BEGIN WRITELN('Modifying PASCAL , block #86.'); IF NOT BLOCKACCESS(IOREAD,NEW_PPATH,B,86,RC) THEN ABORT(CONCAT('Error reading from ',NEW_PPATH)); {} FILLCHAR(S,SIZEOF(S),CHR(0)); H(S)<>16 THEN ABORT('Error in construction of new pathname'); MOVELEFT(S,B[276],17); {put "*SYSTEM.MISCINFO" } {} IF NOT BLOCKACCESS(IOWRITE,NEW_PPATH,B,43,RC) THEN ABORT(CONCAT('Error writing to ',NEW_PPATH)); END; PROCEDURE BLOCK'---> '); IF (POS('MISCINFO',S) <> 9) OR ( POS('*',S) <> 1 ) THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 27. $124 Target: "*xxxxxxxMISCINFO" ')); S:=CONCAT('*',MISCPATH);WRITELN(S); IF LENGT MOVELEFT(B[276],S,17); {get "*SYSTEM.MISCINFO" } {$R-} IF LENGTH(S)<>16 THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 27. $124 - string length error')); {$R+} STR2UPCASE(S,S);WRITE(S:20,EW_PPATH)); END; PROCEDURE BLOCK43; BEGIN WRITELN('Modifying PASCAL , block #43.'); IF NOT BLOCKACCESS(IOREAD,NEW_PPATH,B,43,RC) THEN ABORT(CONCAT('Error reading from ',NEW_PPATH)); {} FILLCHAR(S,SIZEOF(S),CHR(0)); FX,'LIBRARY');WRITELN(S); IF LENGTH(S)<>15 THEN ABORT('Error in construction of new pathname'); MOVELEFT(S,B[208],16); {put "*SYSTEM.LIBRARY" } {} IF NOT BLOCKACCESS(IOWRITE,NEW_PPATH,B,35,RC) THEN ABORT(CONCAT('Error reading from ',N STR2UPCASE(S,S);WRITE(S:20,'---> '); IF (POS('LIBRARY',S) <> 9) OR ( POS('*',S) <> 1 ) THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 27. $0D0 Target: "*xxxxxxxLIBRARY" ')); S:=CONCAT('*',SUBP FILLCHAR(S,SIZEOF(S),CHR(0)); MOVELEFT(B[208],S,16); {get "*SYSTEM.LIBRARY" } {$R-} IF LENGTH(S)<>15 THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 27. $0D0 -string length error')); {$R+}ding from ',NEW_PPATH)); END; PROCEDURE BLOCK35; BEGIN WRITELN('Modifying PASCAL , block #35.'); IF NOT BLOCKACCESS(IOREAD,NEW_PPATH,B,35,RC) THEN ABORT(CONCAT('Error reading from ',NEW_PPATH)); {} AT('*',SUBPFX,'STARTUP.');WRITELN(S); IF LENGTH(S)<>16 THEN ABORT('Error in construction of new pathname'); MOVELEFT(S,B[242],17); {put "*SYSTEM.STARTUP." } {} IF NOT BLOCKACCESS(IOWRITE,NEW_PPATH,B,27,RC) THEN ABORT(CONCAT('Error rea {$R+} STR2UPCASE(S,S);WRITE(S:20,'---> '); IF (POS('STARTUP.',S) <> 9) OR ( POS('*',S) <> 1 ) THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 27. $0F2 Target: "*xxxxxxxSTARTUP." ')); S:=CONC BLOCK25; BLOCK26; BLOCK27; BLOCK35; BLOCK43; BLOCK86; WRITELN('PASCAL modified successfully'); END; PROCEDURE MODIFY_COMPILER; VAR PATHNAME,S: STRING; " "PROCEDURE Update_Compiler_Block (Name : STRING; Block,Offset : INTEGER); "VAR sBlock,sOffset : STRING; "BEGIN $STR(Block,sBlock); $STR(Offset,sOffset); $WRITELN('Modifying ',Name,' block ',Block,'.'); $IF NOT BLOCKACCESS(IOREAD,PATHNAME,B,Block,RC) THEN &ABORT(CONCAT('Error reading from ',PATHNAME)); ${} $FILLCHAR(S,SNAME:=CONCAT(SYSFILES,'FILER'); IF NOT BLOCKACCESS(IOREAD,PATHNAME,B,50,RC) THEN ABORT(CONCAT('Error reading from ',PATHNAME)); {} FILLCHAR(S,SIZEOF(S),CHR(0)); MOVELEFT(B[308],S,17); {get "*SYSTEM.MISCINFO" } {$R-} IF LENGTH(S)<>16 THEN (S,B[422],16); {put "*SYSTEM.LIBRARY" } {} IF NOT BLOCKACCESS(IOWRITE,PATHNAME,B,6,RC) THEN ABORT(CONCAT('Error writing to ',PATHNAME)); END; PROCEDURE MODIFY_FILER; VAR PATHNAME,S: STRING; BEGIN WRITELN('Modifying FILER , block #50.'); PATH ABORT(CONCAT('LINKER file inconsistent with program',CRLF, 'Block 6. $1A6 Target: "*xxxxxxxLIBRARY" ')); S:=CONCAT('*',SUBPFX,'LIBRARY'); WRITELN(S); IF LENGTH(S)<>15 THEN ABORT('Error in construction of new pathname'); MOVELEFT-} IF LENGTH(S)<>15 THEN ABORT(CONCAT('LINKER file inconsistent with program',CRLF, 'Block 6. $1A6 - string length error')); {$R+} STR2UPCASE(S,S);WRITE(S:20,'---> '); IF (POS('LIBRARY',S) <> 9) OR ( POS('*',S) <> 1 ) THEN g LINKER, block 6.'); PATHNAME:=CONCAT(SYSFILES,'LINKER'); IF NOT BLOCKACCESS(IOREAD,PATHNAME,B,6,RC) THEN ABORT(CONCAT('Error reading from ',PATHNAME)); {} FILLCHAR(S,SIZEOF(S),CHR(0)); MOVELEFT(B[422],S,16); {get "*SYSTEM.LIBRARY" } {$Rname'); MOVELEFT(S,B[266],24); {put "PASCAL2:SYSTEM.COMPILER"} {} IF NOT BLOCKACCESS(IOWRITE,PATHNAME,B,48,RC) THEN ABORT(CONCAT('Error writing to ',PATHNAME)); END; PROCEDURE MODIFY_LINKER; VAR PATHNAME,S: STRING; BEGIN WRITELN('Modifyin ABORT(CONCAT('ASSMBLER file inconsistent with program',CRLF, 'Block 48. $10A Target: "PASCAL2:xxxxxxxCOMPILER"')); S:=CONCAT('PASCAL2:',SUBPFX,'COMPILER'); WRITELN(S); IF LENGTH(S)<>23 THEN ABORT('Error in construction of new pathT(CONCAT('ASSMBLER file inconsistent with program',CRLF, 'Block 48. $10A - string length error ')); {$R+} STR2UPCASE(S,S);WRITE(S,'---> '); IF (POS('COMPILER',S) <> 16) OR ( POS('PASCAL2:',S) <> 1 ) THEN ILES,'ASSMBLER'); IF NOT BLOCKACCESS(IOREAD,PATHNAME,B,48,RC) THEN ABORT(CONCAT('Error reading from ',PATHNAME)); {} FILLCHAR(S,SIZEOF(S),CHR(0)); MOVELEFT(B[266],S,24); {get "PASCAL2:SYSTEM.COMPILER"} {$R-} IF LENGTH(S)<>23 THEN ABOR',75,384); &Update_Compiler_Block ('SYSTEM.COMPILER',100,472); &Update_Compiler_Block ('SYSTEM.COMPILER',174,346); $END; END; PROCEDURE MODIFY_ASSMBLER; VAR PATHNAME,S: STRING; BEGIN WRITELN('Modifying ASSMBLER, block 48. '); PATHNAME:=CONCAT(SYSF"IF Comp_Type IN [1,3] THEN $BEGIN &PATHNAME:=CONCAT(SYSFILES,'COMPILER'); &Update_Compiler_Block ('COMPILER',30,166); $END; IF Comp_Type IN [2,3] THEN $BEGIN &PATHNAME:=CONCAT(SYSFILES,'SYSTEM.COMPILER'); &Update_Compiler_Block ('SYSTEM.COMPILERF LENGTH(S)<>15 THEN ABORT('Error in construction of new pathname'); $MOVELEFT(S[1],B[Offset+1],15); {put "*SYSTEM.LIBRARY" } ${} $IF NOT BLOCKACCESS(IOWRITE,PATHNAME,B,Block,RC) THEN &ABORT(CONCAT('Error writing to ',PATHNAME)); "END;  BEGIN ,S);WRITE(S:20,'---> '); $IF (POS('LIBRARY',S) <> 9) OR (POS('*',S) <> 1) THEN &ABORT(CONCAT(Name,' file inconsistent with program',CRLF, 3'Block ',sBlock,'. ',sOffset,' Target: "*xxxxxxxLIBRARY" ')); $S:=CONCAT('*',SUBPFX,'LIBRARY'); WRITELN(S); $IIZEOF(S),CHR(0)); $MOVELEFT(B[Offset],S,16); {get "*SYSTEM.LIBRARY" } ${$R-} $IF NOT(LENGTH(S) IN [15,16]) THEN &ABORT(CONCAT(Name,' file inconsistent with program',CRLF, 3'Block ',sBlock,'. ',sOffset,' -string length error')); ${$R+} $STR2UPCASE(S ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 50. $134 - string length error')); {$R+} STR2UPCASE(S,S);WRITE(S:20,'---> '); IF (POS('MISCINFO',S) <> 9) OR ( POS('*',S) <> 1 ) THEN ABORT(CONCAT('PASCAL file inconsistent with program',CRLF, 'Block 50. $134 - string length error ')); S:=CONCAT('*',MISCPATH);WRITELN(S); IF LENGTH(S)<>16 THEN ABORT('Error in construction of new pathname'); MOVELEFT(S,B[308],17)to the sub-directory. Once done, the root directory files can be deleted. The program is self documented, with help screens. To run from the 1.2 PASCAL commend line, type X, then /SUPER.PMOVE.CODE, and then followry of your hard disk volume. SUPER PMOVE will 'patch' the SOS.INTERPreter to look to a new sub-directory named by you (I strongly suggest the name of SYS1.2 [i.e., /SYS1.2]), then transfer the root directory SYSTEM files hat need root directory space. The program assumes that you have already upgraded your system to Pascal 1.2, and used its PMOVE program to place the Pascal SOS.INTERPreter's SYSTEM file presumptions from .D1 to the root directoLNOPILER, etc.) from the crowded root directory of a hard disk volume (50 files maximum) to an uncrowded sub-directory file (2nd level only!) on that volume. This action gives you more room in the root directory for other programs t WAP /// SIG 3PCL.08 Updated 1/21/94 SUPER PMOVE - by Dan Wade A sub-directory patch for PASCAL 1.2. The purpose of super PMOVE is simple- To move the Apple /// Pascal SYSTEM files (SYSTEM.PASCAL, SYSTEM.FILER, SYSTEM.COMP MODIFY_ASSMBLER; MODIFY_LINKER; MODIFY_FILER; ABORT('Modifications successful'); END. MISCPATH),CHR(0)); FILLCHAR(INTERPPATH,SIZEOF(INTERPPATH),CHR(0)); FILLCHAR(SYSFILES,SIZEOF(SYSFILES),CHR(0)); CRLF:=' '; CRLF[1]:=CHR(13); GREETING; GETPATHS; SHOWSETTINGS; MODIFY_INTERP; MODIFY_PASCAL; MODIFY_COMPILER; ,CHR(0)); FILLCHAR(OLD_PPATH,SIZEOF(OLD_PPATH),CHR(0)); FILLCHAR(OLD_MPATH,SIZEOF(OLD_MPATH),CHR(0)); FILLCHAR(NEW_PPATH,SIZEOF(NEW_PPATH),CHR(0)); FILLCHAR(NEW_MPATH,SIZEOF(NEW_MPATH),CHR(0)); FILLCHAR(MISCPATH,SIZEOF(; {put "*SYSTEM.MISCINFO" } {} IF NOT BLOCKACCESS(IOWRITE,PATHNAME,B,50,RC) THEN ABORT(CONCAT('Error writing to ',PATHNAME)); END; BEGIN {initialize null strings} FILLCHAR(SYSDEV,SIZEOF(SYSDEV),CHR(0)); FILLCHAR(SUBPFX,SIZEOF(SUBPFX) the instructions. SUPER PMOVE DOES NOT WORK WITH PASCAL 1.1!! You can SERIOUSLY damage your PASCAL 1.1 program files by trying this. Frank W. Moore 02/26/86 11/14/88 New addition to this system now allows you to include the Pascal 2.0 compiler in your Pascal 1.2 sub-directory, a boon if you mainly use the 2.0 compiler. Also included is a special patch program that will set up the Pascal 2.0 so that USES declarations will look to rectory your system disk,xצK I suggest you call it "SYS1.2", although you can give it whatever namexA you want, as long as it is exactly six characters in length.  +SUPER PAafter a program written by John Jeppson for Pascal version 1.1. xxxצ INSTALLATION:xx Step 1.xxצF Create a new subdirectory in the root diE [v. 1.1 by D.G.Wade 5/13/86]xxצ1 *** DOCUMENTATION ***xxxF This program is an implementation for Apple /// Pascal version 1.2, xfile x" and Pascal system files.xx.SYSTEM VERSION: Apple /// Pascal 1.2 (only!)xxUSE: eX(ecute: SPMOVE.CODE & +SUPER P-MOVצEPURPOSE: Patch Apple /// Pascal version 1.2 for use in subdirectory,x@ to make free space in root directory of system volume.xxBIMPLEMENTATION: Pascal language program to alter SOS.INTERP xxצ1 *** DOCUMENTATION ***xxxPROGRAM: SUPER P-MOVExx)AUTHOR: Daniel G. Wade, written 5/27/85xx1 צHPress to continue, to exit, to start program: áצUser directed abort.  +SUPER P-MOVE [v. 1.1 by D.G.Wade 5/13/86]R4٪PP,-,-ȡ1, ,, ,,;V Vؚø1ݪP1ƂW1"ˡ޹*1ˡ!1ˡ 21"ˡتExiting program...RڪP (Y/N): --@@--ZT٪PPQSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@ddXSUPERPMO the present prefix of the Pascal system instead of the Pascal root library, which makes things a lot easier when compiling programs. Frank W. Moore -MOVE [v. 1.1 by D.G.Wade 5/13/86]xxצ1 *** DOCUMENTATION ***xxx Step 2.xxצA From the Pascal 1.2 update disks, copy the system files xD to the new subdirectory. Copy the SOS.INTERP file temporarilyxH to the root volume or to a spare floppy. (So p-Move can find it!)x> Copy SYSTEM.FILF p-Move will modify the interpreter to assign a new system device.xE Don`t be concerned if p-Move can`t find "SYSTEM.PASCAL", it onlyxצ( needs to work on the interpreter. xx *** DOCUMENTATION ***xx Step 4.xxצC Run PMOVE.CODE (supplied with Pascal 1.1), and follow thex* instructions for that program exactlyxDatafile 512 35xF SYSTEM.MISCINFO 1 26-May-85 0:12 Datafile 512 1 ,+SUPER P-MOVE [v. 1.1 by D.G.Wade 5/13/86]xxצ1 xF LIBRARY 232 5-May-85 0:59 Codefile 512 233xF STARTUP 4 11-May-85 12:31 Codefile 512 5xF SOS.INTERP 34 24-Jan-84 17:24 LIBRARY.CODE 9 24-Jan-84 11:58 Codefile 512 10xF LIBMAP.CODE 13 24-Jan-84 12:00 Codefile 512 14xF FILER 51 24-Sep-82 0:00 Codefile 512 524-Jan-84 11:31 Codefile 512 87xF ERRORS.6502 7 24-Jan-84 0:00 Datafile 512 8xF LINKER 30 24-Jan-84 11:55 Codefile 512 31xF 512 13xF ASSMBLER 51 24-Jan-84 11:46 Codefile 512 52xF OPCODES.6502 2 24-Jan-84 0:00 Datafile 512 3xF COMPILER 86 2F PASCAL 100 24-Jan-84 10:35 Datafile 512 101xF EDITOR 61 24-Jan-84 11:08 Codefile 512 62xF SYSTEM.SYNTAX 12 24-Jan-84 0:00 Textfile * The renamed files will list as follows:xF /PROFILE Size Modified Time File type Eof PhysxF SYS1.2 2 27-May-85 17:42 Directory 512 2x: except for SYSTEM.SYNTAX, which remains unchanged.  , +SUPER P-MOVE [v. 1.1 by D.G.Wade 5/13/86]xxצ1 *** DOCUMENTATION ***xxxצB Rename the files in the subdirectory, using the followingxצ( scheme: SYSTEM.PASCAL ---> PASCALxxצ7 Do this for all system files in the subdirectory xpecified location! 8 +SUPER P-MOVE [v. 1.1 by D.G.Wade 5/13/86]xxצ1 *** DOCUMENTATION ***xxx Step 3.xC You will have the option of choosing to keep *SYSTEM.MISCINFOxצL in the root directory (recommended), or moving it to the subdirectory.xצK It is your responsibility to copy MISCINFO to the sER & SYSTEM.LIBRARY from your 1.1 system x into this subdirectory. xxצ Very Important: x< SYSTEM.MISCINFO must be present when you boot 1.2!xצ Step 5.xx? Run SPMOVE.CODE and follow the prompts. When you arexצA asked for the pathname to the interpreter file, respond withx9 the complete path, eg.: ".PROFILE/SYS1.2/SOS.INTERP"xצG Following successful completion, copy the modified SOS.INTERP filex6 to a boot diskette with appropriate driver file, x* and/or install in Catabe exactly seven (6) characters,+Enter prefixed name, RETURN for "SYSTEM" : ץ""á"צSYSTEMP"ˡ)צ$Bad namelength, MUST be 6 characters""""Pצ.QPu"SYSTEM.תPKP/Pצ.QP!צUse non-standard SYSTEM name?u:----------------------------------------------------------2Enter prefixed name for system files, eg "SYSTEM" - name must h, MUST be 6 characters""KP/Q"ǡPxw/Pצ subdirectory not foundg""P/QPPצ/QPKP/Q"ǡצPASCALǧPt3 Subdirectory must be exactly six (6) characters,צ8 (Don`t enter the device name, just the subdirectory!)/Enter subdirectory name, RETURN for "SYS1.2" : ץ""á"צSYS1.2P"ˡ)צ$Bad namelengt tGKPR4צ,Modify system files for use in Subdirectory?tצ:----------------------------------------------------------צ7Enter subdirectory name for system files, eg "SYS1.2/" PKKSystem device is: Kצ/Kצ:KˍBad device nameKxwwmצ(Device not present or volume not on lineK(Volume not on line or not blocked deviceצError...ХצMISCINFOá/*Interpreter file inconsistant with program$ Current path to system pascal is: & Current path to system miscinfo is: K/ץlosing interpreter file {X0xg š/צ*Interpreter file inconsistant with programPASCALץá/צ*Interpreter file inconsistant with programxNJ š/*Interpreter file inconsistant with programe 5/13/86]  צ-Enter complete pathname to interpreter file: ,Reading from interpreter:,xwwtError opening interpreter file\צ#Error reading from interpreter file2צError cxצNeed instructions?xצ. Files should be backed up before proceeding. xContinue with program?User directed abort.+SUPER P-MOVE [v. 1.1 by D.G.Wad contact the Third Apple Users disk librarian for details  , +SUPER P-MOVE [v. 1.1 by D.G.Wade 5/13/86]xצ+ For use with Apple /// Pascal 1.2 ONLY!!!x directory. Thesexצ? are SYSTEM.WRK.TEXT & SYSTEM.WRK.CODE, and SYSTEM.LST.TEXTxxxx> For more documentation, you`ll have to buy the disk.xD xG You may want to use the FILER to alter the directory info of xצA PASCAL and SOS.INTERP to Codefile and Sosfile respectively. xxA Certain files must still use the rootlyst main menu. +SUPER P-MOVE [v. 1.1 by D.G.Wade 5/13/86]xxצ1 *** DOCUMENTATION ***xx Additional Info:xQ"ǡPKP/Q"ǡצPASCALǧPv 0utצ:----------------------------------------------------------צ2System Miscinfo should generally remain standard, צ5 as many programs use it to set terminal parameters.! Enter Y to retain standard, or צ# enter N to use *"MISCINFOצ&Retain standard path *Sצ---> צCOMPILER ˦#4:ײˍt%PASCAL file inconsistent with program%x&צ-Block 26. $0EE Target: "#4:xxxxxxxCOMPILER" Sצ#4:"SCOMPILER[Pˡ*%Eˡ*%Error in construction of new pathnamex\R xˡlצ%PASCAL file inconsistent with program%x&%Block 26. $0EE - string length errorKKצ---> צASSMBLER ˦#4:ײˍt%PASCAL file inconsistent with program%x&צ-Block 26. $0D0 Target: "#4:xxxxxxxASSMBLER" Sצ#4:"SASSMBLER[Pn construction of new pathnamexǴxw*Error writing to adrR xˡlצ%PASCAL file inconsistent with program%x&%Block 26. $0D0 - string length error צ---> צ*צMISCINFO ˍq%PASCAL file inconsistent with program%x&צ*Block 25. $0B4 Target: "*xxxxxxxMISCINFO"P*UQPˡ*צ%Error i"Modifying PASCAL , block #25.xw,צError reading from cR xǴˡk%PASCAL file inconsistent with program%x&צ$Block 25. $0B4 - string length errorJ϶,xw#Error reading interpreter filexg ~xNJ צ---> ---> ~,xw&!Error writing to interpreter fileProceed to modify files?User directed abort.& PLEASE RECONFIRM: Modify files?User directed abort.9---------------------------------------------------------RvModifying interpreter tem device: Kצ Pathname to system pascal:  Pathname to system miscinfo: ~ Current path to system files: =س0v>t9=========================================================צ)New System Parameters will be as follows: Sys you want the 2.0 compiler invoked from the commandצ? line, be sure to rename it to COMPILER when this program! has succesfully completed.צCompiler option (1,2 or 3) : צ;NOTE - no matter which option you choose always be sure the; Pascal 1.2 compiler is named COMPILER and the Pascalצ= 2.0 compiler is named SYSTEM.COMPILER - if you're sure9 e(s) of compiler do you have ? Enter:צ1 1) if you have the standard Pascal 1.2 compiler( 2) if you have the Pascal 2.0 compiler5 3) if you have both compilers and want both updatedYSTEM.MISCINFO?USYSTEM.MISCINFOתP#U"PMISCINFOXPUצSYSTEM.MISCINFOP~KPצ/QUǡP><:----------------------------------------------------------/Which typrror in construction of new pathnamex\R x ˡkצ%PASCAL file inconsistent with program%x&$Block 26. $10C - string length errorJ---> EDITORײ צ#4:ˍrצ%PASCAL file inconsistent with program%x&+Block 26. $10C Target: "#4:xxxxxxxEDITOR" Q#4:"SצEDITORYPˡ*צ%Error in construction of new pathx&צ+Block 27. $124 Target: "*xxxxxxxMISCINFO" Qצ*UQPˡ*%Error in construction of new pathnamexx+w*צError writing to adt%ˡk%PASCAL file inconsistent with program%x&צ$Block 27. $124 - string length errorJצ---> צMISCINFO ˦*ײˍr%PASCAL file inconsistent with program%rror in construction of new pathnamexx#w,צError reading from cd$Modifying PASCAL , block #43.x+w,צError reading from cR x---> LIBRARYײ ˦*ײˍq%PASCAL file inconsistent with program%x&צ*Block 27. $0D0 Target: "*xxxxxxxLIBRARY" P*"QצLIBRARYXPˡ*%EModifying PASCAL , block #35.x#w,צError reading from cR xˡj%PASCAL file inconsistent with program%x&צ#Block 27. $0D0 -string length errorI $0F2 Target: "*xxxxxxxSTARTUP." Q*"QצSTARTUP.YPˡ*צ%Error in construction of new pathnamexxw,Error reading from cdV#ˡkצ%PASCAL file inconsistent with program%x&$Block 27. $0F2 - string length errorJ---> STARTUP.ײ צ*ˍrצ%PASCAL file inconsistent with program%x&+Block 27.onsistent with program%x&*Block 27. $0D2 Target: "*xxxxxxxSTARTUP" Pצ*"QSTARTUPXPˡ*צ%Error in construction of new pathnamexR xcR xˡk%PASCAL file inconsistent with program%x&צ$Block 27. $0D2 - string length errorJצ---> צSTARTUP צ*ˍqצ%PASCAL file inc6.xw,צError reading from c !"xw*צError writing to adModifying PASCAL , block #27.xw,צError reading from rogram%x&צ,Block 26. $142 Target: "#4:xxxxxxxLINKER" R#4:"SצLINKERYPˡ*צ%Error in construction of new pathnamexBZ"Modifying PASCAL , block #2R xBˡlצ%PASCAL file inconsistent with program%x&%Block 26. $142 - string length error Kצ---> צLINKER ˦#4:ײˍs%PASCAL file inconsistent with p%PASCAL file inconsistent with program%x&צ+Block 26. $128 Target: "#4:xxxxxxxFILER" Qצ#4:"SFILERXPˡ*צ%Error in construction of new pathnamex(Z!namex Z R x(ˡkצ%PASCAL file inconsistent with program%x&$Block 26. $128 - string length errorJ---> FILERײ ˦#4:ײˍrModifying PASCAL , block #86.xVw,צError reading from cR xZˡk%PASCAL file inconsistent with program%x&צ$Block 27. $124 - string length errorJצ---> צLIBRARY. ˦*ײˍr%PASCAL file inconsistent with program%x&צ+Block 27. $124 Target: "*xxxxxxxLIBRARY." Qצ*"QLIBRARY.YPˡ  . n "@" "` ,%T&(,.14R5(89"=AH&KdOjRU9V@VVDW~W XV+sistent with program%Sx&Sצ%Block 50. $134 - string length error KSSS*SUQSPˡ*צ%Error in construction of new pathnamex4*x2w)SSError writing to S*aS|+KR "R R R R ~R UR ,R R x x ')*+Modifications successfulSצ---> צMISCINFO צ*ˍlSS%PASCAL file inconsistent with program%Sx&Sצ%Block 50. $134 - string length error KSSS*SUQSPˡ*צ%Error in constrILER , block #50.*SSPSFILERUSP*x2w+SSError reading from S*cSR x4ˡkSSצ%PASCAL file inconsistent with program%Sx&S$Block 50. $134 - string length errorJA6 Target: "*xxxxxxxLIBRARY" OSSSצ*S"QSLIBRARYXSPˡ*צ%Error in construction of new pathnamexǦ*xw)SSError writing to S*aS*Modifying FˡjSS%LINKER file inconsistent with program%Sx&Sצ#Block 6. $1A6 - string length errorISצ---> צLIBRARY ˦*ˍpSSצ%LINKER file inconsistent with program%Sx&S)Block 6. $1namex *x0w)SSError writing to S*aS)Modifying LINKER, block 6.*SSPSLINKERVSP*xw+SSצError reading from S*cSR xǦASCAL2:ˍzSSצ'ASSMBLER file inconsistent with program'Sx(S1Block 48. $10A Target: "PASCAL2:xxxxxxxCOMPILER"YSSSצPASCAL2:S"XSצCOMPILER`SPˡ*צ%Error in construction of new pathx0w+SSצError reading from S*cSR x ˡnSS'ASSMBLER file inconsistent with program'Sx(Sצ%Block 48. $10A - string length error MSצ---> צCOMPILERצPOMPILERXSPצCOMPILERǦ(v s*SSPSצSYSTEM.COMPILER_SPצSYSTEM.COMPILERKǀ(צSYSTEM.COMPILERd(צSYSTEM.COMPILERǮZ('Modifying ASSMBLER, block 48. *SSPSASSMBLERXSP*BRARY" צ*"QLIBRARYXPˡ*צ%Error in construction of new pathnamex*x٥w*צError writing to *a (v 3*SSPSC- -string length errorצ---> צLIBRARY צ*ˍPצ file inconsistent with programoxpBlock vVצ. - Target: "*xxxxxxxLI block  .*x٥w,צError reading from *cR xPצ file inconsistent with programoxpBlock vVצ. *%Error in construction of new pathnamexZxVw*צError writing to ad&#$%&PASCAL modified successfullyRDڪPVP -P צ Modifying uction of new pathnamex4*x2w)SSError writing to S*aS|+KR "R R R R ~R UR ,R R x x ')*+Modifications successfulX  F ^ŬB!*New_String := s; *EXIT (Input); (END; & &IF NOT EOLN(KEYBOARD) THEN (IF (ORD(c) IN [32..126]) AND (LENGTH(New_String) < Field) THEN *BEGIN ,New_String := CONCAT(New_String,s); ,IF Position = 0 THEN .Prompt (Inverse,x,y,COPY(Blank_Line,1,LENGTH(Cion < Field THEN *Prompt (Inverse,x+Position,y,Cursor); & &REPEAT &UNTIL Key_Pressed; & &READ(KEYBOARD,c); &s[1] := c; & &IF (ORD(c) IN [1..31,128..255]) AND (LENGTH(New_String)=0) THEN (BEGIN *Prompt (Normal,x,y,Current_String); n := 0; $New_String := ''; $s := ' '; $Cursor := '*'; $Space := ' '; $ $Current_String := CONCAT(Current_String,COPY(Blank_Line,1,Field-LENGTH(Current_String))); $ $Prompt (Inverse,x,y,Current_String); $ $REPEAT &IF Position <> 0 THEN (IF Positing : Str255; VAR New_String : Str255); " "CONST $Blank_Line = ' '; $ "VAR $c : CHAR; $s, $Cursor, $Space : Str255; $Position : INTEGER; " "BEGIN $Positio*s[i] := CHR(ORD(s[i])-32); "END; "FUNCTION Key_Pressed : BOOLEAN; "VAR KeyStrokes : 0..255; "BEGIN $KeyStrokes := 0; $UNITSTATUS (1,KeyStrokes,20); $Key_Pressed := KeyStrokes <> 0; "END; " "PROCEDURE Input (Field,x,y : INTEGER; Current_Str "PROCEDURE Get_Screen_String (Length,x,y : INTEGER; VAR s : BYTESTREAM); EXTERNAL; " " " "PROCEDURE Upper_Case (VAR s : Str255); "VAR i : INTEGER; "BEGIN $IF LENGTH(s) <> 0 THEN &FOR i := 1 TO LENGTH(s) DO (IF ORD(s[i]) IN [97..122] THEN isplay_Types = (Normal,Inverse,Flashing,No_Display); "Block_Array = PACKED ARRAY [1..512] OF CHAR; " VAR "s,t : Str255; "Valid_Name : BOOLEAN; " " " "PROCEDURE Prompt (Display : Display_Types; Column,Row : INTEGER; s : Str255); EXTERNAL; "ISTORY ==================== "MODIFIED BY DATE DESCRIPTION ------------- -------- ----------- John E. Cisar 05/13/86 Initial program written. }  CONST "CS = 28; "CL = 30; "Bell = 7; "  TYPE "Str255 = STRING[255]; "D PROGRAM Compiler_Patch;  { DESCRIPTION =========== This program was designed to be used on Pascal systems that have been moved into a sub-directory via the Pascal 1.2 Directory Patch available from TAU and Apple /// Magazine. ! !MODIFICATION Hurrent_String))); ,Position := Position + 1; ,Prompt (Inverse,x+Position-1,y,s); *END (ELSE *IF (ORD(c) = 8) AND (LENGTH(New_String) > 0) THEN ,BEGIN .IF Position <> 0 THEN 0IF Position < Field THEN 2Prompt (Inverse,x+Position,y,Space); .Position := Position-1; .Prompt (Inverse,x+Position,y,Space); .DELETE (New_String,LENGTH(New_String),1); .IF LENGTH(New_String) = 0 THEN 0Prompt (Inverse,x,y,Current_String); ,END; $UNTIL EOLN(KEYBOARD); $ $Prompt (Normal,x,y,Current_String); $ $IF LENGT(i := BLOCKWRITE (System_Compiler,Block,1,174); (IF i <> 1 THEN *BEGIN ,WRITE (CHR(Bell)); ,Prompt (Inverse,1,22,'CAN''T UPDATE COMPILER'); ,CLOSE (System_Compiler,NORMAL); ,EXIT (PROGRAM); *END (ELSE *Prompt (Normal,1,18,'Updated block 174'); &Array,s,16); $ $IF (POS('LIBRARY',s) = 9) AND (POS('*',s) = 1) THEN &BEGIN (s := CONCAT('*',Pascal_Sub_Directory,'/LIBRARY'); (WHILE LENGTH(s) < 15 DO *s := CONCAT(s,' '); (MOVELEFT (s[1],Block[348],15); 4); $IF i <> 1 THEN &BEGIN (WRITE (CHR(Bell)); (Prompt (Inverse,1,22,'CAN''T READ COMPILER - FILE PROTECTED?'); (CLOSE (System_Compiler,NORMAL); (EXIT (PROGRAM); &END; & $s_Array[0] := CHR(15); $MOVELEFT (Block[348],s_Array[1],15); $MOVELEFT (s_END $ELSE &BEGIN (WRITE (CHR(Bell)); (Prompt (Inverse,1,22,'ILLEGAL COMPILER TYPE - MUST BE 2.0'); (CLOSE (System_Compiler,NORMAL); (EXIT (PROGRAM); &END; " ${ ******** B L O C K 1 7 4 ******** } $ $i := BLOCKREAD (System_Compiler,Block,1,17(i := BLOCKWRITE (System_Compiler,Block,1,100); (IF i <> 1 THEN *BEGIN ,WRITE (CHR(Bell)); ,Prompt (Inverse,1,22,'CAN''T UPDATE COMPILER'); ,CLOSE (System_Compiler,NORMAL); ,EXIT (PROGRAM); *END (ELSE *Prompt (Normal,1,17,'Updated block 100'); &ray,s,16); $ $IF (POS('LIBRARY',s) = 9) AND (POS('*',s) = 1) THEN &BEGIN (s := CONCAT('*',Pascal_Sub_Directory,'/LIBRARY'); (WHILE LENGTH(s) < 15 DO *s := CONCAT(s,' '); (MOVELEFT (s[1],Block[474],15); ; $IF i <> 1 THEN &BEGIN (WRITE (CHR(Bell)); (Prompt (Inverse,1,22,'CAN''T READ COMPILER - FILE PROTECTED?'); (CLOSE (System_Compiler,NORMAL); (EXIT (PROGRAM); &END; & $s_Array[0] := CHR(15); $MOVELEFT (Block[474],s_Array[1],15); $MOVELEFT (s_ArD $ELSE &BEGIN (WRITE (CHR(Bell)); (Prompt (Inverse,1,22,'ILLEGAL COMPILER TYPE - MUST BE 2.0'); (CLOSE (System_Compiler,NORMAL); (EXIT (PROGRAM); &END; " ${ ******** B L O C K 1 0 0 ******** } $ $i := BLOCKREAD (System_Compiler,Block,1,100)(i := BLOCKWRITE (System_Compiler,Block,1,75); (IF i <> 1 THEN *BEGIN ,WRITE (CHR(Bell)); ,Prompt (Inverse,1,22,'CAN''T UPDATE COMPILER'); ,CLOSE (System_Compiler,NORMAL); ,EXIT (PROGRAM); *END (ELSE *Prompt (Normal,1,16,'Updated block 75'); &EN,s_Array[1],15); $MOVELEFT (s_Array,s,16); $ $IF (POS('LIBRARY',s) = 9) AND (POS('*',s) = 1) THEN &BEGIN (s := CONCAT('*',Pascal_Sub_Directory,'/LIBRARY'); (WHILE LENGTH(s) < 15 DO *s := CONCAT(s,' '); (MOVELEFT (s[1],Block[386],15); READ (System_Compiler,Block,1,75); $IF i <> 1 THEN &BEGIN (WRITE (CHR(Bell)); (Prompt (Inverse,1,22,'CAN''T READ COMPILER - FILE PROTECTED?'); (CLOSE (System_Compiler,NORMAL); (EXIT (PROGRAM); &END; & $s_Array[0] := CHR(15); $MOVELEFT (Block[386]l_Sub_Directory,'/COMPILER')); ${$I+} $IF IORESULT <> 0 THEN &BEGIN (WRITE (CHR(Bell)); (Prompt (Inverse,1,22,'ILLEGAL SUB-DIRECTORY OR COMPILER NOT PRESENT'); (EXIT (Change_Compiler); &END; $ ${ ******** B L O C K 7 5 ******** } $ $i := BLOCK"VAR System_Compiler : FILE; &Block : Block_Array; &s : Str255; &s_Array : PACKED ARRAY [0..255] OF CHAR; &i : INTEGER; "BEGIN $Change_Compiler := FALSE; ${$I-} $RESET (System_Compiler,CONCAT('*',PascaH(New_String) > 0 THEN &BEGIN (s := New_String; (s := CONCAT(New_String,COPY(Blank_Line,1,Field-LENGTH(New_String))); (Prompt (Normal,x,y,s); &END; "END; "FUNCTION Change_Compiler (Pascal_Sub_Directory : Str255) : BOOLEAN; END $ELSE &BEGIN (WRITE (CHR(Bell)); (Prompt (Inverse,1,22,'ILLEGAL COMPILER TYPE - MUST BE 2.0'); (CLOSE (System_Compiler,NORMAL); (EXIT (PROGRAM); &END; " $CLOSE (System_Compiler,NORMAL); $ $Change_Compiler := TRUE; "END; " " "  BEGIN { Compiler_Patch } "WRITE (CHR(CS)); "Prompt (Inverse,1,1,'PASCAL 2.0 COMPILER PATCH'); "Prompt (Normal,69,1,'Version 1.0'); "Prompt (Normal,1,2,'by John E. Cisar Copyright 1986 All Rights Reserved'); "Prompt (Normal,1,3,'==ˡ8ȡ+ٛ ٛٛ 3 J ٪̂צƁ Ɓ*ƀ ̂ƂƂP ƂCOMPILER ler.');  END. l)); *Prompt (Inverse,1,22,' ILLEGAL NAME RE-ENTER '); (END &ELSE (IF ORD(t[1]) IN [32..127] THEN *BEGIN ,Upper_Case (t); ,IF Change_Compiler(t) THEN .Valid_Name := TRUE *END; "UNTIL Valid_Name; " "Prompt (Normal,1,22,'Succesfully updated compi$GOTOXY (0,21); $WRITE (CHR(CL)); & $IF ORD(t[1]) = 27 THEN &BEGIN (WRITE (CHR(Bell)); (Prompt (Inverse,1,22,'*** USER ABORTED ***'); (EXIT (PROGRAM); &END $ELSE &IF (LENGTH(t) <> 6) OR NOT(ORD(t[1]) IN [32..127]) THEN & BEGIN *WRITE (CHR(Belname of PASCAL sub-directory [ ]'); "Prompt (Normal,1,21,'==============================================================================='); " "Valid_Name := FALSE; "s := 'SYS1.2'; "REPEAT $Input (6,37,15,s,t); $IF t = '' THEN &t := s; oved system library when a USES declaration '); "Prompt (Normal,6,12,' is used. The compiler is assumed to be named COMPILER.'); "Prompt (Normal,6,13,'-------------------------------------------------------------------'); "Prompt (Normal,1,15,'Enter ystem has been '); "Prompt (Normal,6,9,' p-moved to a sub-directory via the PASCAL 1.2 Directory Patch. '); "Prompt (Normal,6,10,' When completed, this compiler patch will enable PASCAL programs '); "Prompt (Normal,6,11,' to read from the p-m"Prompt (Normal,6,6,' This compiler patch is only meant to be used on the PASCAL 2.0 '); "Prompt (Normal,6,7,' compiler. It should not be used on any other PASCAL compiler. '); "Prompt (Normal,6,8,' This patch should only be used if the PASCAL s============================================================================='); "Prompt (Normal,6,5,'-------------------------------------------------------------------'); "Prompt (Inverse,35,5,'WARNING'); ƂƂʂˡʂɡ ʂƁƀƁʀʀǀÄƁ ʀɄ̂ƂƂƁƂʂáfצP ƂƂʂ̂ʂƁQʀńDʂˡʂɡ ʂƀʂ̂ʂƀá šƁتƁ̂ƂƂצP    ˥HH`O jifeda`]\WVSRONM!L (Phhhhhhhhhh%& Lke eLk e e%hhhhhhhhhh%& Ln e eLn ee%3fee m m m m Lfee m  m e e  m m L)` `  á,צ*** USER ABORTED ***y˥+ ILLEGAL NAME RE-ENTER +צSuccesfully updated compiler.>L(PC-------------------------------------------------------------------צ+Enter name of PASCAL sub-directory [ ]O===============================================================================צSYS1.2%ׯthe PASCAL 1.2 Directory Patch.  D When completed, this compiler patch will enable PASCAL programs  C to read from the p-moved system library when a USES declaration  צ9 is used. The compiler is assumed to be named COMPILER. his compiler patch is only meant to be used on the PASCAL 2.0 צC compiler. It should not be used on any other PASCAL compiler. C This patch should only be used if the PASCAL system has been  צC p-moved to a sub-directory via Cisar Copyright 1986 All Rights ReservedצO===============================================================================C-------------------------------------------------------------------#צWARNINGC TCAN'T UPDATE COMPILERƀUpdated block 174Bצ#ILLEGAL COMPILER TYPE - MUST BE 2.0ƀƀƀW ;N V׶PASCAL 2.0 COMPILER PATCHEצ Version 1.0Oby John E. Ƅ*Ƃ\Ƅ*Ƅ*ƃLIBRARYƃ æ*ƃÄƃ̄Ƅצ*ƄƄצ/LIBRARYƄƃɡ'ƃ̄ƄƃƄ ƄƃƂ\ƀƂǮ̄ʄˡ6̄ʄˡ6CAN'T UPDATE COMPILERƀUpdated block 100Bצ#ILLEGAL COMPILER TYPE - MUST BE 2.0ƀƀƂǮ̄ʄˡD%CAN'T READ COMPILER - FILE PROTECTED?ƀMPILER - FILE PROTECTED?ƀƄ*ƂƄ*Ƅ*ƃLIBRARYƃ æ*ƃÄƃ̄Ƅצ*ƄƄצ/LIBRARYƄƃɡ'ƃ̄ƄƃƄ ƄƃƂƀƂdƄƃƂǂƀƂK̄ʄˡ6צCAN'T UPDATE COMPILERƀצUpdated block 75Bצ#ILLEGAL COMPILER TYPE - MUST BE 2.0ƀƀƂd̄ʄˡD%CAN'T READ COʄˡDצ%CAN'T READ COMPILER - FILE PROTECTED?ƀƄ*ƂǂƄ*Ƅ*ƃצLIBRARYƃ צ*ƃÄƃ̄Ƅ*ƄƄ/LIBRARYƄƃɡ'ƃ̄ƄƃƄצ  ƂƂƂƁ,V ڪƀƂƀ̄Ƅ*ƄƄ /COMPILERƄ"ˡCצ-ILLEGAL SUB-DIRECTORY OR COMPILER NOT PRESENTƀƂK3fee m m m m Lfee m m e e  m m   ߥHH`'|wb]RGF;:X< h /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// SIG, Washington Apple Pi 12022 Parklawn Drive Rockville, MD. 20852 (301)-984-030EM files to the sub-directory. Once done, the root directory files can be deleted. The program is self documented, with help screens. Side Two has a p-Code Disassembler - which creates Op-Codes from Pascal code files. Not Self-Booting. s from .D1 to the root directory of your hard disk volume. SUPER PMOVE will 'patch' the SOS.INTERPreter to look to a new sub-directory named by you (I strongly suggest the name of SYS1.2 [i.e., /SYS1.2]), then transfer the root directory SYSTs you more room in the root directory for other programs that need root directory space. The program assumes that you have already upgraded your system to Pascal 1.2, and used its PMOVE program to place the Pascal SOS.INTERPreter's SYSTEM file presumptione- To move the Apple /// Pascal SYSTEM files (SYSTEM.PASCAL, SYSTEM.FILER, SYSTEM.COMPILER, etc.) from the crowded root directory of a hard disk volume (50 files maximum) to an uncrowded sub-directory file (2nd level only!) on that volume. This action give0 WAP /// SIG PUBLIC DOMAIN LIBRARY PDS NAME: Wade's Pascal Patch/PCode Disassembler DISK ID#: 3PCL-08 BOOTABLE? Nonbootable DESCRIPTION: Side One has Dan Wade's Pascal Patch program: *Now Version 2.0! The purpose of super PMOVE is simplO^Ŭ}BOOLEAN; RC, {return code from block access } $Comp_Type {compiler type } -: INTEGER; B: BUFFER; {file buffer } CRLF: STRING[1]; P to modify } SYSFILES {run time path to system files to modify} : STRING; USE_NONSTD, {use a non std prefix eg GRTPLN ? } USE_SUBDIR {use a subdirectory for system files? } : NEW_PPATH, {complete path to new system pascal } NEW_MPATH, {complete path to new system miscinfo } MISCPATH, {path to new miscinfo, w/o devicename } INTERPPATH, {run time path to SOS.INTERes, w/o devicename. } { ie: either "SYSTEM." or "SYS1.2/" } OLD_PPATH, {complete path to SYSTEM.PASCAL } OLD_MPATH, {complete path to SYSTEM.MISCINFO } YPE = (IOREAD, IOWRITE); {block read or block write} BIGSTRING= STRING[255]; VAR SYSDEV, {SOS device name for new system volume } SUBPFX, {First seven characters of path to } { system filr to handle Pascal 2.0 compiler ------------------------------------------------------------------------------} CONST TITLE ='SUPER P-MOVE [v. 1.1 by D.G.Wade 5/13/86]'; TYPE BUFFER = PACKED ARRAY [0..511] OF CHAR; {file block buffer} IOTPROGRAM SUPERPMOVE; {----------------------------------------------------------------------------- 5/21/85 by Daniel G. Wade Modifies Pascal System Files for use in a subdirectory. Valid for Apple /// Pascal version 1.2 Modified 5/13/86 by John E. Cisa O^Ŭ} {carriage return for err mess concats } PROCEDURE ABORT(MESSAGE: BIGSTRING); BEGIN {I-} WRITELN; WRITELN(MESSAGE); WRITELN('Exiting program...'); EXIT(PROGRAM); {$I+} END; FUNCTION CONFIRM(MESSAGE: STRING): BOOLEAN; VAR K: CHAR; BEGIN WRITE(MESSAGE, ' (Y/N): '); REPEAT WRITE(CHR(7)); READ(KEYBOARD,K); UNTIL K IN ['Y','y','N','n']; WRITELN(K); CONFIRM:=(K IN ['Y','y']); END; PROCEDURE PROMPTREAD(MESSAGE: STRING; VAR RESPONSE: STRING); BEGIN WRITE(MESSAGE,Clume or to a spare floppy. (So p-Move can find it!)',CRLF, ' Copy SYSTEM.FILER & SYSTEM.LIBRARY from your 1.1 system ',CRLF, ' into this subdirectory. ',CRLF, CRLF, ' Very Important: ',CRLF, ' SYSTEM.MISCINFO must be present when *** DOCUMENTATION ***',CRLF, CRLF, CRLF, ' Step 2.',CRLF,CRLF, ' From the Pascal 1.2 update disks, copy the system files ',CRLF, ' to the new subdirectory. Copy the SOS.INTERP file temporarily',CRLF, ' to the root vo' I suggest you call it "SYS1.2", although you can give it whatever name', CRLF,' you want, as long as it is exactly six characters in length.' ); NEXT; END; PROCEDURE PAGE3; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, ' ',CRLF, 'after a program written by John Jeppson for Pascal version 1.1. ',CRLF, CRLF,CRLF, 'INSTALLATION:',CRLF,CRLF, ' Step 1.',CRLF,CRLF, ' Create a new subdirectory in the root directory your system disk,',CRLF, eX(ecute: SPMOVE.CODE' ); NEXT; END; PROCEDURE PAGE2; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, ' *** DOCUMENTATION ***',CRLF, CRLF, CRLF, ' This program is an implementation for Apple /// Pascal version 1.2, make free space in root directory of system volume.',CRLF, CRLF, 'IMPLEMENTATION: Pascal language program to alter SOS.INTERP file ',CRLF, ' and Pascal system files.',CRLF, CRLF, 'SYSTEM VERSION: Apple /// Pascal 1.2 (only!)',CRLF, CRLF, 'USE:' *** DOCUMENTATION ***',CRLF, CRLF, CRLF, 'PROGRAM: SUPER P-MOVE', CRLF, CRLF, 'AUTHOR: Daniel G. Wade, written 5/27/85',CRLF, CRLF, 'PURPOSE: Patch Apple /// Pascal version 1.2 for use in subdirectory,', CRLF, ' toBOARD,K); IF (K=CHR(27)) THEN ABORT('User directed abort.'); IF EOLN(KEYBOARD) THEN BEGIN WRITELN; EXIT(INSTRUCTIONS); END; END; PROCEDURE PAGE1; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, 0 THEN ERR(3); RC:=0; BLOCKACCESS:=TRUE; {$I+} END; PROCEDURE INSTRUCTIONS; PROCEDURE NEXT; VAR K: CHAR; BEGIN GOTOXY(0,23); WRITE( 'Press to continue, to exit, to start program: ' ); READ(KEY END; BEGIN RESET(F,PATH); IF IORESULT <> 0 THEN ERR(1); CASE IO OF IOREAD: IF ( BLOCKREAD(F,B,1,BN) <> 1 ) THEN ERR(2); IOWRITE: IF ( BLOCKWRITE(F,B,1,BN) <> 1 ) THEN ERR(2); END; CLOSE(F); IF IORESULT <> PROCEDURE ERR(ERRNUM: INTEGER); BEGIN RC:=ERRNUM; BLOCKACCESS:=(ERRNUM=0); CLOSE(F); EXIT(BLOCKACCESS); BOOLEAN; {successful? } {error codes: 0: no error 1: can't open file 2: block read/write error 3: can't close file } VAR F: FILE; {$I-} {ioread/iowrite } PATH: STRING; {filename } VAR B: BUFFER; {blockbuffer } BN: INTEGER; {blocknumber } VAR RC: INTEGER):HR(31)); READLN(RESPONSE); END; PROCEDURE STR2UPCASE(S: STRING; VAR T: STRING); VAR I: INTEGER; BEGIN T:=S; FOR I:=1 TO LENGTH(S) DO IF S[I] IN ['a'..'z'] THEN T[I]:=CHR( ORD(S[I]) - 32 ); END; FUNCTION BLOCKACCESS( IO: IOTYPE; you boot 1.2!',CRLF, ' You will have the option of choosing to keep *SYSTEM.MISCINFO',CRLF, ' in the root directory (recommended), or moving it to the subdirectory.', CRLF, ' It is your responsibility to copy MISCINFO to the specified location!' ); NEXT; END; PROCEDURE PAGE4; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, ' *** DOCUMENTATION ***',CRLF, CRLF,CRLF, ' Step 3.',CRLF,CRLF, These',CRLF, ' are SYSTEM.WRK.TEXT & SYSTEM.WRK.CODE, and SYSTEM.LST.TEXT',CRLF, CRLF,CRLF,CRLF, ' For more documentation, you`ll have to buy the disk.',CRLF, ' contact the Third Apple Users disk librarian for details ' ); NEXT;F, ' Additional Info:',CRLF, CRLF, ' You may want to use the FILER to alter the directory info of ',CRLF, ' PASCAL and SOS.INTERP to Codefile and Sosfile respectively. ',CRLF, CRLF, ' Certain files must still use the root directory. ' to a boot diskette with appropriate driver file, ',CRLF, ' and/or install in Catalyst main menu.' ); NEXT; END; PROCEDURE PAGE7; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, ' *** DOCUMENTATION ***',CRLF, CRL asked for the pathname to the interpreter file, respond with',CRLF, ' the complete path, eg.: ".PROFILE/SYS1.2/SOS.INTERP"',CRLF, ' Following successful completion, copy the modified SOS.INTERP file',CRLF, system device.', CRLF, ' Don`t be concerned if p-Move can`t find "SYSTEM.PASCAL", it only',CRLF, ' needs to work on the interpreter. ',CRLF, CRLF, ' Step 5.',CRLF, CRLF, ' Run SPMOVE.CODE and follow the prompts. When you are',CRLF, ' *** DOCUMENTATION ***',CRLF, CRLF, ' Step 4.',CRLF, CRLF, ' Run PMOVE.CODE (supplied with Pascal 1.1), and follow the',CRLF, ' instructions for that program exactly',CRLF, ' p-Move will modify the interpreter to assign a new ' SOS.INTERP 34 24-Jan-84 17:24 Datafile 512 35',CRLF, ' SYSTEM.MISCINFO 1 26-May-85 0:12 Datafile 512 1' ); NEXT; END; PROCEDURE PAGE6; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, ' ile 512 52',CRLF, ' LIBRARY 232 5-May-85 0:59 Codefile 512 233',CRLF, ' STARTUP 4 11-May-85 12:31 Codefile 512 5',CRLF, Jan-84 11:55 Codefile 512 31',CRLF, ' LIBRARY.CODE 9 24-Jan-84 11:58 Codefile 512 10',CRLF, ' LIBMAP.CODE 13 24-Jan-84 12:00 Codefile 512 14',CRLF, ' FILER 51 24-Sep-82 0:00 Codef6502 2 24-Jan-84 0:00 Datafile 512 3',CRLF, ' COMPILER 86 24-Jan-84 11:31 Codefile 512 87',CRLF, ' ERRORS.6502 7 24-Jan-84 0:00 Datafile 512 8',CRLF, ' LINKER 30 24-' EDITOR 61 24-Jan-84 11:08 Codefile 512 62',CRLF, ' SYSTEM.SYNTAX 12 24-Jan-84 0:00 Textfile 512 13',CRLF, ' ASSMBLER 51 24-Jan-84 11:46 Codefile 512 52',CRLF, ' OPCODES.File type Eof Phys',CRLF, ' SYS1.2 2 27-May-85 17:42 Directory 512 2',CRLF, ' PASCAL 100 24-Jan-84 10:35 Datafile 512 101',CRLF, ; NEXT; END; PROCEDURE PAGE5; BEGIN WRITE(CHR(28), TITLE, CRLF,CRLF, ' *** DOCUMENTATION ***',CRLF, CRLF, ' The renamed files will list as follows:',CRLF, ' /PROFILE Size Modified Time ' Rename the files in the subdirectory, using the following',CRLF, ' scheme: SYSTEM.PASCAL ---> PASCAL',CRLF,CRLF, ' Do this for all system files in the subdirectory ',CRLF, ' except for SYSTEM.SYNTAX, which remains unchanged. ' ) END; BEGIN PAGE1;PAGE2;PAGE3;PAGE4;PAGE5;PAGE6;PAGE7;WRITELN; END; PROCEDURE GREETING; BEGIN WRITE(CHR(28),TITLE,CRLF, ' For use with Apple /// Pascal 1.2 ONLY!!!',CRLF,CRLF); WHILE CONFIRM('Need instructions?') DO INSTRUCTIONS;