// S L O T T E S T // errors -- // //SlotTest() // Exercise the Slot hardware, together with a small number of test // patterns from memory only //SlotPatterns() // Build several patterns on the disk that can be printed. // get "PressInternals.df" get "PressParams.df" // outgoing procedures external [ SlotTest SlotPatterns ] // outgoing statics //external // [ // ] //static // [ // ] // incoming procedures external [ //PRESS DblShift FSGetX DPzero //PRESSML DoubleAdd //WINDOWS WindowInit WindowGetPosition WindowSetPosition WindowWrite WindowWriteBlock WindowClose FileWritePage //OS MoveBlock; SetBlock; Zero //CURSOR CursorChar CursorDigit CursorToggle ] // incoming statics external [ BitsFile nBitsPerScan nScanLines portrait ] // internal statics static [ line; buff; scanLineLength ] // File-wide structure and manifest declarations. // Procedures let SlotTest() be [ // TypeForm("Testing Slot!*n") ] and SlotPatterns() be [ CursorChar($C) let pages=vec 8*(size PageG/16) let page=pages scanLineLength=(nBitsPerScan+31)/32 scanLineLength=scanLineLength*2 let bufferLength=scanLineLength*16 let mainBuffer=FSGetX(bufferLength+40) //Slop for MoveBlock's below let recordsPerBuffer=(bufferLength+1023)/1024 let diskRecord=1 for pn=1 to 8 do [ CursorDigit() let op=selecton pn into [ case 1: Grid1 case 2: Grid2 case 3: Grid3 case 4: Vruler case 5: Hruler case 6: Dots case 7: Black case 8: White ] Zero(page, (size PageG/16)) page>>PageG.BitPage=diskRecord //Write in the scan lines: for i=0 to nScanLines-1 do [ if (i rem 16) eq 0 then Zero(mainBuffer, bufferLength) line=i buff=mainBuffer+(i rem 16)*scanLineLength op() if (i rem 16) eq 15 % i eq nScanLines-1 then [ CursorToggle(0) FileWritePage(BitsFile,diskRecord, mainBuffer,recordsPerBuffer) diskRecord=diskRecord+recordsPerBuffer ] ] page>>PageG.FirstBand=0 page>>PageG.LastBand=(nScanLines+15)/16-1 page>>PageG.BitMargin=0 page>>PageG.BitWc=scanLineLength page>>PageG.PageNumber=pn page=page+(size PageG/16) ] let bw=WindowInit(BitsFile) WindowWrite(bw, 8) WindowWrite(bw, size PageG/16) WindowWrite(bw, (portrait? 3,8)) WindowWriteBlock(bw, pages, 8*(size PageG/16)) WindowClose(bw) ] //All pattern generators assume three statics: // line= number of scan-line on which we are: 0,1,2,... // buff= pointer to scan-line buffer // scanLineLength= number of words in scan-line buffer and Grid1() be // 1/8 inch [ let wrds = vec 3; Zero(wrds,3); wrds!0 = #170000 if RemRange(48, 0, 3) then SetBlock(wrds,-1,3) for wrd = 0 to scanLineLength by 3 do MoveBlock(buff+wrd,wrds,3) if not wrds!1 then buff!(scanLineLength-1)=#17 ] and Grid2() be // 1/4 inch [ let wrds = vec 6; Zero(wrds,6); wrds!0 = #170000 if RemRange(96, 0, 3) then SetBlock(wrds,-1,6) for wrd = 0 to scanLineLength by 6 do MoveBlock(buff+wrd,wrds,6) if not wrds!1 then buff!(scanLineLength-1)=#17 ] and Grid3() be // 1/4 inch, in from edge [ if line ls 16 then return let wrds = vec 6; Zero(wrds,6); wrds!0 = #170000 if RemRange(96, 16, 19) then SetBlock(wrds,-1,6) for wrd = 6 to scanLineLength-6 by 6 do MoveBlock(buff+wrd,wrds,6) if not wrds!1 then buff!(scanLineLength-1-6)=#17 ] and Vruler() be [ let pattern = table [ #177700; #600; #3; #140000; #600; #17 #170000; #600; #3; #140000; #600; #77 #176000; #600; #3; #140000; #600; #17 #170000; #600; #3; #140000; #600; #1777 ] let black = vec 24; SetBlock(black,-1,24) let ptr = (RemRange(384, 0, 3))? black,pattern for wrd = 0 to scanLineLength by 24 do MoveBlock(buff+wrd,ptr,24) ] and Hruler() be [ let pattern = table [ #177700; #600; #3; #140000; #600; #17 #170000; #600; #3; #140000; #600; #77 #176000; #600; #3; #140000; #600; #17 #170000; #600; #3; #140000; #600; #1777 ] let black = vec 24; SetBlock(black,-1,24) let white = vec 24; Zero(white,24) let position = line rem 384 let ptr = ((pattern!(position rshift 4))&(#100000 rshift (position & #17))) eq 0? white,black for wrd = 0 to scanLineLength by 24 do MoveBlock(buff+wrd,ptr,24) ] and Dots() be [ let pattern = table [ #177700; #600; #3; #140000; #600; #17 #170000; #600; #3; #140000; #600; #77 #176000; #600; #3; #140000; #600; #17 #170000; #600; #3; #140000; #600; #1777 ] let white = vec 24; Zero(white,24) let position = line rem 384 let ptr = ((pattern!(position rshift 4))&(#100000 rshift (position & #17))) eq 0? white,pattern for wrd = 0 to scanLineLength by 24 do MoveBlock(buff+wrd,ptr,24) ] and White() be [ Zero(buff,scanLineLength) ] and Black() be [ SetBlock(buff,-1,scanLineLength) ] and RemRange(modulus, fNum, lNum) = valof [ let j=line rem modulus if fNum le j & j le lNum then resultis true resultis false ]