`L i=L\Ʃx ? N'i  ͭЅ?0ȱ Ѕ?iȱi lԠԠ͠ԠϠŠͮŠ SYSTEM.APPLE   L$JN^GETDOS GETDOS.TEXTvg GETDOS.CODEvg CHQ.TEXT51 2>,3GETDOS.CODEvgZ@ aavaea@ @ ava `ZZ@bBbBb̘`nMFil bvbbvbh~ ~ ~ .bv0b(&꽌ɪɖ'*&%&,E'зЮ꽌ɪФ`+*xH&x'8*7Ixix&&  ') + &п x) ++`FG8`0($ p,&") (jJJ>L+ "?I>  N `  ` x V Nx .x- z `V0^*^*>` aI꽌ɪVɭ&Y&&Y& 꽌ɪ\8`&PROGRAM GETDOS;   {********************************************************************** !* * !* Program to convert DOS 3.3 text files to Pascal format files * !* John B. Matth5; (HEADER=11; (BLANKS=' '; {25 Blanks} (  VAR NAME: STRING[30]; (FILETYPE: BYTE; (LIMIT, SECTORCOUNT, ENTRY: INTEGER; (LIST: PACKED ARRAY[1..80,0..1] OF BYTE; ( (BEGIN ( {Read catalog from track 17; sectors 15-1} 0UNITREAD(SOURCEUNIT,BUF,512,BLOCK); 8CASE MAP[SEC].HALF OF @FIRST: MOVELEFT(BUF[0],TEXT[PTR],PAGE); @SECOND: MOVELEFT(BUF[PAGE],TEXT[PTR],PAGE) 8END; {CASES of MAP} 0PTR:=PTR+PAGE (END; {READSEC} (  PROCEDURE READSOURCE;   CONST BYTESPERENTRY=38PRINTAT(16,' accepts, exits, restarts '); 8READ(KEYBOARD,CH); 8OK:=EOLN(KEYBOARD); 8IF CH IN ['E','e',CHR(27)] THEN EXIT(PROGRAM); 0UNTIL OK (END; {GETNAMES} (  PROCEDURE READSEC;  (BEGIN ( BLOCK:=(TRAK*8)+MAP[SEC].BLOCK; ESTFILE:='SYSTERM:'; @3: DESTFILE:='NOT AVAILABLE'; @4,5: DESTFILE:=CONCAT('#',DEST,':',DESTFILE); @6: DESTFILE:='PRINTER:'; @7,8,9,10,11,12: DESTFILE:='NOT IMPLEMENTED' 8END; {CASES of DESTUNIT} 8PRINTAT(14,CONCAT('Destination file: ',DESTFILE)); 1-6): '); 8READLN(DESTUNIT); 8PRINTAT(12,'Source file name: '); 8READLN(SOURCEFILE); 8DESTFILE:=SOURCEFILE; 8STR(DESTUNIT,DEST); 8IF POS('.',SOURCEFILE)=0 THEN DESTFILE:=CONCAT(SOURCEFILE,'.TEXT'); 8CASE DESTUNIT OF @1: DESTFILE:='CONSOLE:'; @2: D,' *** GETDOS *** By John Matthews, M.D.');  PRINTAT(5,'Units: 1. Console: 4. Drive #4'); 8PRINTAT(6,' 5. Drive #5 6. Printer:'); 8PRINTAT(8,'Source Unit (4-5): '); 8READLN(SOURCEUNIT); 8PRINTAT(10,'Destination Unit ( PROCEDURE PRINTAT(Y: INTEGER; S: STRING);   BEGIN 0GOTOXY(0,Y); 0WRITE(CHR(CLEAREOL),S) (END; (  PROCEDURE GETNAMES;   VAR OK: BOOLEAN;  DEST: STRING; ( (BEGIN 0DRIVES:=[4,5]; 0REPEAT 8WRITE(CHR(CLEARSCREEN)); 8PRINTAT(2SECOND; 0MAP[11].BLOCK:=2; MAP[11].HALF:=FIRST; 0MAP[12].BLOCK:=1; MAP[12].HALF:=SECOND; 0MAP[13].BLOCK:=1; MAP[13].HALF:=FIRST; 0MAP[14].BLOCK:=0; MAP[14].HALF:=SECOND; 0MAP[15].BLOCK:=7; MAP[15].HALF:=SECOND (END; {INITIALIZE} ( =5; MAP[4].HALF:=SECOND; 0MAP[5].BLOCK:=5; MAP[5].HALF:=FIRST; 0MAP[6].BLOCK:=4; MAP[6].HALF:=SECOND; 0MAP[7].BLOCK:=4; MAP[7].HALF:=FIRST; 0MAP[8].BLOCK:=3; MAP[8].HALF:=SECOND; 0MAP[9].BLOCK:=3; MAP[9].HALF:=FIRST; 0MAP[10].BLOCK:=2; MAP[10].HALF:=ock to read from} ({a given track and which half to use as the sector.} ( (BEGIN 0MAP[0].BLOCK:=0; MAP[0].HALF:=FIRST; 0MAP[1].BLOCK:=7; MAP[1].HALF:=FIRST; 0MAP[2].BLOCK:=6; MAP[2].HALF:=SECOND; 0MAP[3].BLOCK:=6; MAP[3].HALF:=FIRST; 0MAP[4].BLOCK:(PTR: INTEGER; {Pointer to text array.} (DONE, FOUND: BOOLEAN; (CH: CHAR; (F: FILE OF CHAR; {For use with CONSOLE: or PRINTER:} (DISKFILE: UNTYPEDFILE; {For use with BLOCKWRITE} (  PROCEDURE INITIALIZE; ({For each of the 16 sectors specify which bl..15] OF SECTOR; (BUF: PACKED ARRAY[0..511] OF BYTE; (TEXT: PACKED ARRAY[0..MAX] OF BYTE; (SOURCEFILE, DESTFILE: STRING; (SOURCEUNIT, DESTUNIT: UNITS; (DRIVES: SET OF UNITS; (BLOCK, TRAK, SEC, BLOCKCOUNT, I: INTEGER; mum EDITOR can load.}  PAGE=256; {DOS sectors are 256 bytes long.} (CLEAREOL=29; (CLEARSCREEN=12; (  TYPE BYTE=0..255; (UNITS=1..12; (UNTYPEDFILE=FILE; (SECTOR=RECORD 0BLOCK:0..7; 0HALF:(FIRST, SECOND) . END; /  VAR MAP: PACKED ARRAY[0ews, M.D. BYTE, April 1982, p. 447 * !* * !**********************************************************************}   CONST MAX=18432; {36 blocks of 512 bytes is maxi0PRINTAT(18,'Reading catalog...'); 0TRAK:=17; PTR:=0; {Start at beginning of TEXT} 0FOR SEC:=15 DOWNTO 1 DO READSEC; 0{Find sourcefile entry} 0LIMIT:=PTR-1; 0PTR:=HEADER; 0ENTRY:=0; 0SOURCEFILE:=CONCAT(SOURCEFILE,' '); {Make name unique} 0REPEAT 8NAME:=COPY(BLANKS,1,LENGTH(SOURCEFILE)); 0 ENTRY:=ENTRY+1; 0 FOR I:=1 TO LENGTH(SOURCEFILE) DO 8 NAME[I]:=CHR(TEXT[PTR+I+2]-128); 0 FOUND:=NAME=SOURCEFILE; 0 IF NOT FOUND THEN {increment PTR} 0 BEGIN 8    B@*t GETDOS IN ['N','n']; (UNTIL DONE  END. {MAIN} EDEST}   BEGIN {MAIN PROGRAM} (INITIALIZE {sector/block map}; (REPEAT 0GETNAMES {and locations of files}; 0READSOURCE {in DOS format}; 0IF FOUND THEN WRITEDEST; 0WRITELN; 0WRITELN; 0WRITE('Another file? (Y/N) '); 0READ(KEYBOARD,CH); 0DONE:=CH (BEGIN ( PRINTAT(18,CONCAT('Writing to ',DESTFILE,'...')); 0REWRITE(F,DESTFILE); 0WRITELN(F); 0REPEAT 8NEXTBYTE:=TEXT[PTR+1]; 8CH:=CHR(TEXT[PTR]-128); 8WRITE(F,CH); 8PTR:=PTR+1; 0UNTIL NEXTBYTE=0; 0CLOSE(F,LOCK) (END; {ELSE}  END; {WRITng to ',DESTFILE,'...')); 0REWRITE(DISKFILE,DESTFILE); 0I:=BLOCKWRITE(DISKFILE,BUF,1,0); {Text file header} 0I:=BLOCKWRITE(DISKFILE,BUF,1,1); {Text file header} 0I:=BLOCKWRITE(DISKFILE,TEXT[0],BLOCKCOUNT,2); 0CLOSE(DISKFILE,LOCK) (END {THEN} (ELSE (READ(KEYBOARD,CH); (IF DESTUNIT IN DRIVES THEN (BEGIN 0PRINTAT(18,'One moment please...'); 0FILLCHAR(BUF[0],512,CHR(0)); 0FOR I:=0 TO BLOCKCOUNT*512 DO {convert to positive ASCII} 8IF TEXT[I]>127 THEN TEXT[I]:=TEXT[I]-128; 0PRINTAT(18,CONCAT('Writi 0FOR I:=1 TO SECTORCOUNT DO 0BEGIN 0 TRAK:=LIST[I,0]; 8SEC:=LIST[I,1]; 8READSEC 0END; (END; {READSOURCE} (  PROCEDURE WRITEDEST;   VAR NEXTBYTE: BYTE;   BEGIN (PTR:=0; (PRINTAT(18,CONCAT('Put ',DESTFILE,' on line; press ')); 8PTR:=PTR+1 0END; 0{Finally, null the TEXT buffer and read the data} 0IF ODD(SECTORCOUNT) THEN BLOCKCOUNT:=(SECTORCOUNT+1) DIV 2 0ELSE BLOCKCOUNT:=SECTORCOUNT DIV 2; 0FILLCHAR(TEXT[0],BLOCKCOUNT*512,CHR(0)); 0PRINTAT(18,'Reading file...'); 0PTR:=0;8PRINTAT(18,'Not a TEXT file...'); 8EXIT(READSOURCE) 0END; 0{Read the track/sector list} 0PTR:=0; 0READSEC; 0PTR:=12; {List starts at byte 12} 0FOR I:=1 TO SECTORCOUNT DO 0BEGIN 8LIST[I,0]:=TEXT[PTR]; 8PTR:=PTR+1; 8LIST[I,1]:=TEXT[PTR]; ]; {Location of track/sector list} 0FILETYPE:=TEXT[PTR+2]; {0 if unlocked TEXT: 128 if locked TEXTT} 0SECTORCOUNT:=TEXT[PTR+33]-1; {Minus for the track/sector list} 0IF (FILETYPE<>0) AND (FILETYPE<>128) OR (SECTORCOUNT>72) THEN 0BEGIN 8FOUND:=FALSE;  IF (ENTRY MOD 7)=0 THEN PTR:=PTR+HEADER; 8 PTR:=PTR+BYTESPERENTRY 0 END; 0UNTIL FOUND OR (PTR>LIMIT); 0IF {still} NOT FOUND THEN 0BEGIN 8PRINTAT(18,'File not found...'); 8EXIT(READSOURCE) 0END; 0TRAK:=TEXT[PTR]; 0SEC:=TEXT[PTR+1       تPR(0x צ& *** GETDOS *** By John Matthews, M.D.צ Units: 1. Console: 4. Drive #4צ 5. Drive #5 6. Printer:צSource Unit (4-5): w  צDestination Unit (1-6): v  Source file name: MP$MPvP צ.Má!11 11 OLD BAL 275.840001 0 SAL18NOV 811.4 1 357 -16 1 F27NOV -320 1 SAL2DEC 851.45 1 352 -44.3 1 STAX -.48 0 FTAX -2.2 0 F11DEC -400 1 F11DEC -563.88 1 358 -75 1 352 -44.3 1 SAL21NOV 811.4 1 357 -16 1 358 -75 1 SAL5DEC 851.45 1 SAL19DEC 1304.7 0 F27NOV -3yצ Writing to $[...^$#~H#~Hǀ~~á򥥂NdlצAnother file? (Y/N) @@ M$bǀyyצ Writing to $[...^$#y#y#Hzyצ Writing to $[...^$#~H#~Hǀ~~á򥥂NdlצAnother fvxצOne moment please...# yzyȡ;#yHš!#yH#yHǀyyצ Writing to $[...^$#y#y#Hz~H~~yy zz#Hz Reading file...~yeyeȡ4yP|yP{yy?@~צPut $Tצ on line; press i~~ōצFile not found...#~H|#~H{#~H#~!Hǀ˄Hō צNot a TEXT file...~ ~yeyeȡ^yP#~H~~yP#Reading catalog...|~{e{eġ {{~ ~MeeMPeצ QePצ eMeyMeyeȡ'y#~yHǀyyMá~ ~~#$b+' accepts, exits, restarts   ء |{}w#}{6##~H(##~H >&~~$++MP+.TEXTU+Pv$CONSOLE:תP$SYSTERM:תP$ NOT AVAILABLEתP}$++#+Q+:R+$Ǣ+PJ$PRINTER:תP8$NOT IMPLEMENTEDתP km<,.0246++צDestination file: +20 1 F11DEC -400 1 F11DEC -563.88 1 XXX 0 0 XXX 0 0 (PTR: INTEGER; {Pointer to text array.} (DONE, FOUND: BOOLEAN; (CH: CHAR; (F: FILE OF CHAR; {For use with CONSOLE: or PRINTER:} (DISKFILE: UNTYPEDFILE; {For use with BLOCKWRITE} (  PROCEDURE INITIALIZE; ({For each of the 16 sectors specify which bl]; {Location of track/sector list} 0FILETYPE:=TEXT[PTR+2]; {0 if unlocked TEXT: 128 if locked TEXTT} 0SECTORCOUNT:=TEXT[PTR+33]-1; {Minus for the track/sector list} 0IF (FILETYPE<>0) AND (FILETYPE<>128) OR (SECTORCOUNT>72) THEN 0BEGIN 8FOUND:=FALSE;  IF (ENTRY MOD 7)=0 THEN PTR:=PTR+HEADER; 8 PTR:=PTR+BYTESPERENTRY 0 END; 0UNTIL FOUND OR (PTR>LIMIT); 0IF {still} NOT FOUND THEN 0BEGIN 8PRINTAT(18,'File not found...'); 8EXIT(READSOURCE) 0END; 0TRAK:=TEXT[PTR]; 0SEC:=TEXT[PTR+18NAME:=COPY(BLANKS,1,LENGTH(SOURCEFILE)); 0 ENTRY:=ENTRY+1; 0 FOR I:=1 TO LENGTH(SOURCEFILE) DO 8 NAME[I]:=CHR(TEXT[PTR+I+2]-128); 0 FOUND:=NAME=SOURCEFILE; 0 IF NOT FOUND THEN {increment PTR} 0 BEGIN 8 0PRINTAT(18,'Reading catalog...'); 0TRAK:=17; PTR:=0; {Start at beginning of TEXT} 0FOR SEC:=15 DOWNTO 1 DO READSEC; 0{Find sourcefile entry} 0LIMIT:=PTR-1; 0PTR:=HEADER; 0ENTRY:=0; 0SOURCEFILE:=CONCAT(SOURCEFILE,' '); {Make name unique} 0REPEAT 5; (HEADER=11; (BLANKS=' '; {25 Blanks} (  VAR NAME: STRING[30]; (FILETYPE: BYTE; (LIMIT, SECTORCOUNT, ENTRY: INTEGER; (LIST: PACKED ARRAY[1..80,0..1] OF BYTE; ( (BEGIN ( {Read catalog from track 17; sectors 15-1} 0UNITREAD(SOURCEUNIT,BUF,512,BLOCK); 8CASE MAP[SEC].HALF OF @FIRST: MOVELEFT(BUF[0],TEXT[PTR],PAGE); @SECOND: MOVELEFT(BUF[PAGE],TEXT[PTR],PAGE) 8END; {CASES of MAP} 0PTR:=PTR+PAGE (END; {READSEC} (  PROCEDURE READSOURCE;   CONST BYTESPERENTRY=38PRINTAT(16,' accepts, exits, restarts '); 8READ(KEYBOARD,CH); 8OK:=EOLN(KEYBOARD); 8IF CH IN ['E','e',CHR(27)] THEN EXIT(PROGRAM); 0UNTIL OK (END; {GETNAMES} (  PROCEDURE READSEC;  (BEGIN ( BLOCK:=(TRAK*8)+MAP[SEC].BLOCK; ESTFILE:='SYSTERM:'; @3: DESTFILE:='NOT AVAILABLE'; @4,5: DESTFILE:=CONCAT('#',DEST,':',DESTFILE); @6: DESTFILE:='PRINTER:'; @7,8,9,10,11,12: DESTFILE:='NOT IMPLEMENTED' 8END; {CASES of DESTUNIT} 8PRINTAT(14,CONCAT('Destination file: ',DESTFILE)); 1-6): '); 8READLN(DESTUNIT); 8PRINTAT(12,'Source file name: '); 8READLN(SOURCEFILE); 8DESTFILE:=SOURCEFILE; 8STR(DESTUNIT,DEST); 8IF POS('.',SOURCEFILE)=0 THEN DESTFILE:=CONCAT(SOURCEFILE,'.TEXT'); 8CASE DESTUNIT OF @1: DESTFILE:='CONSOLE:'; @2: D,' *** GETDOS *** By John Matthews, M.D.');  PRINTAT(5,'Units: 1. Console: 4. Drive #4'); 8PRINTAT(6,' 5. Drive #5 6. Printer:'); 8PRINTAT(8,'Source Unit (4-5): '); 8READLN(SOURCEUNIT); 8PRINTAT(10,'Destination Unit ( PROCEDURE PRINTAT(Y: INTEGER; S: STRING);   BEGIN 0GOTOXY(0,Y); 0WRITE(CHR(CLEAREOL),S) (END; (  PROCEDURE GETNAMES;   VAR OK: BOOLEAN;  DEST: STRING; ( (BEGIN 0DRIVES:=[4,5]; 0REPEAT 8WRITE(CHR(CLEARSCREEN)); 8PRINTAT(2SECOND; 0MAP[11].BLOCK:=2; MAP[11].HALF:=FIRST; 0MAP[12].BLOCK:=1; MAP[12].HALF:=SECOND; 0MAP[13].BLOCK:=1; MAP[13].HALF:=FIRST; 0MAP[14].BLOCK:=0; MAP[14].HALF:=SECOND; 0MAP[15].BLOCK:=7; MAP[15].HALF:=SECOND (END; {INITIALIZE} ( =5; MAP[4].HALF:=SECOND; 0MAP[5].BLOCK:=5; MAP[5].HALF:=FIRST; 0MAP[6].BLOCK:=4; MAP[6].HALF:=SECOND; 0MAP[7].BLOCK:=4; MAP[7].HALF:=FIRST; 0MAP[8].BLOCK:=3; MAP[8].HALF:=SECOND; 0MAP[9].BLOCK:=3; MAP[9].HALF:=FIRST; 0MAP[10].BLOCK:=2; MAP[10].HALF:=ock to read from} ({a given track and which half to use as the sector.} ( (BEGIN 0MAP[0].BLOCK:=0; MAP[0].HALF:=FIRST; 0MAP[1].BLOCK:=7; MAP[1].HALF:=FIRST; 0MAP[2].BLOCK:=6; MAP[2].HALF:=SECOND; 0MAP[3].BLOCK:=6; MAP[3].HALF:=FIRST; 0MAP[4].BLOCK:8PRINTAT(18,'Not a TEXT file...'); 8EXIT(READSOURCE) 0END; 0{Read the track/sector list} 0PTR:=0; 0READSEC; 0PTR:=12; {List starts at byte 12} 0FOR I:=1 TO SECTORCOUNT DO 0BEGIN 8LIST[I,0]:=TEXT[PTR]; 8PTR:=PTR+1; 8LIST[I,1]:=TEXT[PTR]; 8PTR:=PTR+1 0END; 0{Finally, null the TEXT buffer and read the data} 0IF ODD(SECTORCOUNT) THEN BLOCKCOUNT:=(SECTORCOUNT+1) DIV 2 0ELSE BLOCKCOUNT:=SECTORCOUNT DIV 2; 0FILLCHAR(TEXT[0],BLOCKCOUNT*512,CHR(0)); 0PRINTAT(18,'Reading file...'); 0PTR:=0;$b+' accepts, exits, restarts   ء |{}w#}{6##~H(##~H >&~~$++MP+.TEXTU+Pv$CONSOLE:תP$SYSTERM:תP$ NOT AVAILABLEתP}$++#+Q+:R+$Ǣ+PJ$PRINTER:תP8$NOT IMPLEMENTEDתP km<,.0246++צDestination file: +.D.צ Units: 1. Console: 4. Drive #4צ 5. Drive #5 6. Printer:צSource Unit (4-5): w  צDestination Unit (1-6): v  Source file name: MP$MPvP צ.Má!       تPR(0x צ& *** GETDOS *** By John Matthews, M   B@*t GETDOS IN ['N','n']; (UNTIL DONE  END. {MAIN} EDEST}   BEGIN {MAIN PROGRAM} (INITIALIZE {sector/block map}; (REPEAT 0GETNAMES {and locations of files}; 0READSOURCE {in DOS format}; 0IF FOUND THEN WRITEDEST; 0WRITELN; 0WRITELN; 0WRITE('Another file? (Y/N) '); 0READ(KEYBOARD,CH); 0DONE:=CH (BEGIN ( PRINTAT(18,CONCAT('Writing to ',DESTFILE,'...')); 0REWRITE(F,DESTFILE); 0WRITELN(F); 0REPEAT 8NEXTBYTE:=TEXT[PTR+1]; 8CH:=CHR(TEXT[PTR]-128); 8WRITE(F,CH); 8PTR:=PTR+1; 0UNTIL NEXTBYTE=0; 0CLOSE(F,LOCK) (END; {ELSE}  END; {WRITng to ',DESTFILE,'...')); 0REWRITE(DISKFILE,DESTFILE); 0I:=BLOCKWRITE(DISKFILE,BUF,1,0); {Text file header} 0I:=BLOCKWRITE(DISKFILE,BUF,1,1); {Text file header} 0I:=BLOCKWRITE(DISKFILE,TEXT[0],BLOCKCOUNT,2); 0CLOSE(DISKFILE,LOCK) (END {THEN} (ELSE (READ(KEYBOARD,CH); (IF DESTUNIT IN DRIVES THEN (BEGIN 0PRINTAT(18,'One moment please...'); 0FILLCHAR(BUF[0],512,CHR(0)); 0FOR I:=0 TO BLOCKCOUNT*512 DO {convert to positive ASCII} 8IF TEXT[I]>127 THEN TEXT[I]:=TEXT[I]-128; 0PRINTAT(18,CONCAT('Writi 0FOR I:=1 TO SECTORCOUNT DO 0BEGIN 0 TRAK:=LIST[I,0]; 8SEC:=LIST[I,1]; 8READSEC 0END; (END; {READSOURCE} (  PROCEDURE WRITEDEST;   VAR NEXTBYTE: BYTE;   BEGIN (PTR:=0; (PRINTAT(18,CONCAT('Put ',DESTFILE,' on line; press ')); Reading catalog...|~{e{eġ {{~ ~MeeMPeצ QePצ eMeyMeyeȡ'y#~yHǀyyMá~ ~~#~~ōצFile not found...#~H|#~H{#~H#~!Hǀ˄Hō צNot a TEXT file...~ ~yeyeȡ^yP#~H~~yP#yצ Writing to $[...^$#~H#~Hǀ~~á򥥂NdlצAnother file? (Y/N) @@ M$bǀyyצ Writing to $[...^$#y#y#Hzyצ Writing to $[...^$#~H#~Hǀ~~á򥥂NdlצAnother fvxצOne moment please...# yzyȡ;#yHš!#yH#yHǀyyצ Writing to $[...^$#y#y#Hz~H~~yy zz#Hz Reading file...~yeyeȡ4yP|yP{yy?@~צPut $Tצ on line; press i