// P R I N T // errors 1700 // //December 5, 1977: broken up into multiple files: // PrintSlot,PrintSlow,PrintDebug // // Procedures to accomplish the "printing" function // // PrintInit(firstTime) // Called at the beginning of the print run. // PrintClose(finalTime) // Called at the end of the print run. // Print(pg, last, firstAdr, lastAdr) // Called to print the page described by pg>>PageG. // //November 29, 1983 10:33 AM (Ramshaw): added second timeout // arg to PrintError, in case problem is one that is likely to fix itself. //March 26, 1981 4:29 PM: added test to see if anything to print on a page //be for calling PrintSlow when its TC200 Printer //April 19, 1979: added params to PrintInit to allow creation of // printing queue for Puffin get "PressInternals.df" get "PressParams.df" // outgoing procedures external [ PrintInit PrintClose PrintError Print ] // outgoing statics //external // [ // ] //static // [ // ] // incoming procedures external [ //Printing modules PDisplay //PrintDebug PSLOTDisplay //SlotDebug PSlow;VersatecRoutine;VersatecInit;VersatecClose HgRoutine;HgInit;HgClose //PrintDiablo PSlot;SLOTInit //PrintSlot POrbit;POrbitInit //PrintOrbit //PRESSML DoubleAdd Ugt //OS Zero MoveBlock Timer //PRESS PressError DblShift FSGet FSPut MulDiv //CURSOR CursorChar CursorDigit CursorToggle ] // incoming statics external [ Debug printerDevice printerForward nPrinterColors UserPageStart UserPageEnd ] // internal statics static [ //Debugging stuff printCall ] // File-wide structure and manifest declarations. manifest [ RTC = #430 ] // Procedures //Someday, may want to: // Set up a SwatContextProc to turn off the printer // if you fall into swat when it is running. This would be made simple // if ucode were changed to interpret at 0 in #720 as a reset reqest. // Then could: @#720=0; StartIO(4) //p is a pointer to pages structure //nPages is the number of defined pages let PrintInit(firstTime,p,nPages,nCopies) be [ printCall=PrintInit //%% CursorChar($P) CursorToggle(3) unless Debug then switchon printerDevice into [ case printerSlot: SLOTInit();endcase case printerVersatec: if firstTime then VersatecInit(); endcase case printerHg: if firstTime then HgInit();endcase case printerPuffin: POrbitInit(p,nPages,nCopies) endcase case printerDover: //endcase intentionally omitted case printerDurango: //endcase intentionally omitted case printerSequoia: //endcase intentionally omitted case printerPimlico: POrbitInit();endcase default: endcase ] printCall=PrintInit+1 //%% ] and PrintClose(finalTime) be [ printCall=PrintClose //%% if (finalTime ne 0)&(Debug eq 0) then switchon printerDevice into [ case printerVersatec: VersatecClose();endcase case printerHg: HgClose();endcase default: ] printCall=PrintClose+1 //%% ] and Print(pg, last, firstAdr, lastAdr) be [ printCall=Print //%% CursorDigit(pg>>PageG.PageNumber) CursorToggle(3) CursorToggle(2) //For several copies of same page let numBands=pg>>PageG.LastBand-pg>>PageG.FirstBand+1 if Debug then [ if numBands gr 0 then test printerDevice le printerDurango then PDisplay(pg) or PSLOTDisplay(pg) return ] switchon printerDevice into [ case printerSlot: PSlot(pg, numBands, last, firstAdr, lastAdr) endcase; case printerVersatec: PSlow(VersatecRoutine, pg) if numBands le 0 then return //Empty page endcase; case printerHg: if numBands le 0 then return //Empty page PSlow(HgRoutine, pg) endcase; case printerPuffin: if (not pg>>PageG.ColorUsed)& (nPrinterColors ne 3)& (pg>>PageG.ColorPass ne 0) then return case printerDover: case printerDurango: case printerSequoia: case printerPimlico: [ let nPagesAlreadyPrinted=0 let FailureCode=nil let stop=last% (printerForward?(pg>>PageG.PageNumber eq UserPageEnd), (pg>>PageG.PageNumber eq UserPageStart)) POrbit(pg,firstAdr,lastAdr,nPagesAlreadyPrinted,lv FailureCode,stop) endcase ] default: endcase ] printCall=Print+1 //%% ] and PrintError(code, ms; numargs n) be [ let cursor=vec 15 MoveBlock(cursor, #431, 16) if n ge 1 then [ CursorChar($K);CursorDigit(code)] let timeout = @RTC + ms/37 //Wait for return key to go down and up: until ((@#177036 ) eq 0) % ((n ge 2) & (@RTC ge timeout)) do loop while (@#177036 ) eq 0 do loop MoveBlock(#431, cursor, 16) ] (635)