open-insight/SYSPROG/STPROC/OIPI_TESTPATTERN.txt
2024-03-25 15:17:34 -07:00

479 lines
14 KiB
Plaintext

subroutine OIPI_TESTPATTERN(bShowHeader, whichPrinter, whichPages, outputTo)
/*
OIPI TestPattern
This is an example program on how to use the OpenInsight Printer Interface.
*/
If Assigned(bShowHeader) Else bShowHeader = ""
If Assigned(whichPrinter) Else whichPrinter = ""
If Assigned(whichPages) Else whichPages = ""
If Assigned(outputTo) Else outputTo = ""
declare function Set_Printer, Get_Printer, RGB,Set_Property
declare function Msg, GET_PROPERTY
$insert OIPRINT_EQUATES
$Insert Ps_oipi_common
$Insert RTI_Postscript_Common
Equ Portrait$ To 0
Equ Landscape$ To 1
* print Setup Equate
Equ Print_Style$ To 1
Equ Print_Zoom$ To 2
Equ Print_ToPrinter$ To 0
Equ Display_PrintSetup$ To 1
Equ Preview_Normal$ To 2
Equ Print_Mazimized$ To 3
Equ Display_AllButtons$ To 0
Equ Hide_PrintButton$ To 1
Equ Hide_PrintSetupButton$ To 2
Equ Hide_AllButtons$ To 3
* Create the fonts for the OIPI report
* 14 point Arial font
Font1 = "Arial":@FM:14
* 14 point Times New Roman
Font2 = "Times New Roman":@FM:14
HeaderType = ""
FooterType = ""
HeaderText = ""
FooterText = ""
boxText = ""
If whichPages = "" Then whichpages = "1-3"
If bShowHeader = "CLICK" Then
* this came from the form - get all the required details from there
whichPrinterText = Get_Property(@Window:".CBO_PRINTER", "DEFPROP")
headerType = Get_Property(@Window:".CBO_HEADER", "DEFPROP")
footerType = Get_Property(@Window:".CBO_FOOTER", "DEFPROP")
boxText = Get_Property(@Window:".CBO_BOX_TEXT", "DEFPROP")
doPageLines = Get_Property(@Window:".CHK_PAGE_LINES", "DEFPROP")
numLines = Get_Property(@Window:".TXT_NO_LINES", "TEXT")
doPageMisc = Get_Property(@Window:".CHK_PAGE_MISC", "DEFPROP")
doPageXY = Get_Property(@Window:".CHK_PAGE_TEXTXY", "DEFPROP")
doPageSkipping = Get_Property(@Window:".CHK_PAGE_SKIPPING", "DEFPROP")
Begin Case
Case Index(whichPrinterText, "VSPRINTER1", 1)
whichPrinter = "1"
Case Index(whichPrinterText, "VSPRINTER2", 1)
whichPrinter = "2"
Case 1
whichPrinter = ""
End Case
Begin Case
Case indexc(headerType, "single", 1)
HeaderText = "The Header Text"
Case indexc(headerType, "multi", 1)
HeaderText = @VM:"'F'":@FM:"'DL'":@VM:@VM:"Page 'P'":@FM
Case indexc(headerType, "extra", 1)
HeaderText = @VM:"'F'":@FM:"'DL'":@VM:@VM:"Page 'P'":@FM:"Another line":@FM:"And Another":@FM:"Final Header":@FM
End Case
Begin Case
Case indexc(footerType, "single", 1)
FooterText = "The Footer Text"
Case indexc(footerType, "multi", 1)
FooterText = @VM:"'F'":@FM:"'DL'":@VM:@VM:"Page 'P'":@FM
End Case
whichPages = ""
delim = ""
If doPageMisc = "1" Then
whichPages = "1"
delim = ","
End
If doPageSkipping = "1" Then
whichPages := delim:"2"
delim = ","
End
If doPageXY = "1" Then
whichPages := delim:"3"
delim = ","
end
End
call set_vsprinter(whichPrinter) ;* either set the override, or clear it if whichPrinter not specified
* Start the OIPI report with the INIT message
FileName = "OIPI_TestPattern"
PrintTitle = "OIPI Test..."
PreviewTitle = "OIPI Print Preview"
deviceSetup = ""
Margins = .5:@FM:1:@FM:.5:@FM:1 ;* half inch margins On the sides, one inch margins On the top
Orientation = Portrait$
PrintSetup = ""
PrintSetup<Print_Style$, 2> = Display_AllButtons$
PrintSetup<2> = -1 ;* Set initial zoom to PageWidth
PrintSetup<3> = 5 ;* Set the Print Preview position at 5% from top and left
PrintSetup<4> = 5
PrintSetup<5> = 95
PrintSetup<6> = 95
If outputTo <> "" Then
If outputTo[1,1] = "!" Then
deviceSetup<1,2> = 1
End
deviceSetup<1,1> = outputTo
PrintSetup<Print_Style$, 1> = Print_ToPrinter$
End Else
PrintSetup<Print_Style$, 1> = Preview_normal$
end
VAL = Set_Printer("INIT", FileName, PrintTitle:@FM:PreviewTitle, Margins, Orientation, PrintSetup, deviceSetup)
if VAL < 0 then
* Always check the return value of the INIT message for error
ErrorMsg = "Fatal error with the INIT message:":VAL
goto fatalExit
end
* Set the font for all of the headers and footers
if Set_Printer("FONTHEADFOOT", "Arial":@FM:14:@FM:"L":@fm:1) < 0 then
ErrorMsg = "Error with the FONTHEADFOOT message"
goto fatalExit
end
*
X=0
Y=0
If headerText = "" And footerText = "" then
Begin Case
Case bShowHeader = "1"
* Print a simple one line header
HeaderText = "The Header Text"
Case bShowHeader = "2"
* Print the header with the file name centered on the first line and
* the Long format of the date left justified and the page number right justified
* on the second line.
HeaderText = @VM:"'F'":@FM:"'DL'":@VM:@VM:"Page 'P'":@FM:"Another line":@FM:"And Another":@FM:"Final Header":@FM
Case bShowHeader = "3"
FooterText = @VM:"This is a footer"
Case bShowHeader = "4"
HeaderText = "The Header Text"
FooterText = @VM:"This is a footer"
Case bShowHeader = "5"
HeaderText = @VM:"'F'":@FM:"'DL'":@VM:@VM:"Page 'P'":@FM
FooterText = @VM:"This is a footer"
End Case
End
If headerText <> "" Then
x = Set_Printer("HEADER", HeaderText)
If x < 0 then
ErrorMsg = "Error with the HEADER message"
goto fatalExit
End
End
If footerText <> "" Then
Y = Set_Printer("FOOTER", FooterText)
If y < 0 then
ErrorMsg = "Error with the FOOTER message"
goto fatalExit
End
End
If whichPages = "-1" Then
doPageLines = 1
NumLines = 300
boxText = "No"
End
If boxText _nec "no" Then
If Indexc(boxText, "all", 1) Then
* show on all pages
showOnAllPages = ""
End Else
* on first page only
showOnAllPages = 0
end
textstring = 'Text in a box':@fm:'More text in a box'
stat = Set_Printer("TEXTBOX", textstring, 1:@fm:1:@fm:1:@fm:1,"", showOnAllPages)
end
If doPageLines Then
If Not(Num(numLines)) Or numLines = "" Or NumLines < 0 Then
numLines = 300
end
For each.row = 1 To numlines
call Set_Printer("TEXT", "here at row ":each.row)
Next each.row
End
call Set_Printer("POS", 0:@FM:0)
num.sections = dcount(whichPages, ",")
For each.section = 1 To num.sections
this.section = Field(whichPages, ",", each.section)
beginPage = Field(this.section, "-", 1)
endPage = Field(this.section, "-", 2)
If endPage = "" Then endPage = beginPage
If Num(beginPage) And beginPage <> "" And Num(endPage) And endPage <> "" Then
If beginPage < 0 Then beginPage = 0
If endPage > 3 Then endPage = 3
For each.pg = beginPage To endPage
If each.pg <> 0 then
On each.pg Gosub doPage1, doPage2, doPage3
end
Next each.pg
End
Next each.section
Goto doTerm
doPage1:
if Set_Printer("FONT", Font1) < 0 then
ErrorMsg = "Error with the FONT message"
goto fatalExit
End
For each.row = 1 To 5
call Set_Printer("TEXT", "Arial 14 row ":each.row)
call Set_Printer("TEXT", @upper.Case:@lower.Case)
Next each.row
For each.row = 1 To 5
call Set_Printer("TEXT",".")
Next each.row
if Set_Printer("FONT", Font2) < 0 then
ErrorMsg = "Error with the FONT message"
goto fatalExit
End
For each.row = 1 To 5
call Set_Printer("TEXT", "Times Roman 14 row ":each.row)
call Set_Printer("TEXT", @upper.Case:@lower.Case)
Next each.row
Stat = Set_Printer('CALCTEXT',@Upper.Case)
AA = Get_Printer('CALCTEXT')
call Set_Printer("TEXT","CALCTEXT returns *":AA<1>:"x":AA<2>:"*")
CALL Set_Printer("POS", 2:@FM:6)
* Print pyramid
if Set_Printer("LINESTYLE", PS_NULL) < 0 then
ErrorMsg = "Error with the LINESTYLE message"
goto fatalExit
end
pos = Get_Printer("POS")
y = pos<2>
offset = 0
for c = 0 to 128 step 12.8
if Set_Printer("FILLSTYLE", BS_SOLID:@FM:RGB(0, 0, 128 + c)) < 0 then
ErrorMsg = "Error with the FILLSTYLE message"
goto fatalExit
end
R = 1+offset:@FM:y+offset:@FM:3-offset:@FM:y-offset+2
if Set_Printer("RECT", 1+offset:@FM:y+offset:@FM:3-offset:@FM:y-offset+2, 0) < 0 then
ErrorMsg = "Error with the RECT message"
goto fatalExit
end
offset = offset + 0.05
next c
for c = 0 to 128 step 12.8
if Set_Printer("FILLSTYLE", BS_SOLID:@FM:RGB(c, c, 255)) < 0 then
ErrorMsg = "Error with the FILLSTYLE message"
goto fatalExit
end
if Set_Printer("RECT", 1+offset:@FM:pos<2>+offset:@FM:3-offset:@FM:pos<2>+2-offset, 0) < 0 then
ErrorMsg = "Error with the RECT message"
goto fatalExit
end
offset = offset + 0.05
next c
if Set_Printer("LINESTYLE", PS_SOLID:@FM:1:@FM:RGB(0, 0, 0)) < 0 then
ErrorMsg = "Error with the LINESTYLE message"
goto fatalExit
end
if Set_Printer("FILLSTYLE", BS_HOLLOW) < 0 then
ErrorMsg = "Error with the FILLSTYLE message"
goto fatalExit
end
if Set_Printer("RECT", 1:@FM:pos<2>:@FM:3:@FM:pos<2>+2, 0) < 0 then
ErrorMsg = "Error with the RECT message"
goto fatalExit
end
if Set_Printer("LINE", 1:@FM:pos<2>:@FM:3:@FM:pos<2>+2, 0) < 0 then
ErrorMsg = "Error with the LINE message"
goto fatalExit
end
if Set_Printer("LINE", 3:@FM:pos<2>:@FM:1:@FM:pos<2>+2, 0) < 0 then
ErrorMsg = "Error with the LINE message"
goto fatalExit
end
* print 3D button
text = "3D Button"
if Set_Printer("FILLSTYLE", BS_SOLID:@FM:RGB(128, 128, 128)) < 0 then
ErrorMsg = "Error with the FILLSTYLE message"
goto fatalExit
end
if Set_Printer("FONT", "Arial":@FM:14) < 0 then
ErrorMsg = "Error with the FONT message"
goto fatalExit
end
if Set_Printer("CALCTEXT", text) < 0 then
ErrorMsg = "Error with the CALCTEXT message"
goto fatalExit
end
size = Get_Printer("CALCTEXT")
width = size<1>
height = size<2>
poly = ""
poly<1> = 3.5+width+.4:@VM:y
poly<2> = 3.5+width+.4:@VM:y+height+.4
poly<3> = 3.5:@VM:y+height+.4
poly<4> = 3.5+.1:@VM:y+height+.3
poly<5> = 3.5+width+.3:@VM:y+height+.3
poly<6> = 3.5+width+.3:@VM:y+.1
if Set_Printer("POLYGON", poly, 0) < 0 then
goto fatalExit
end
xxx = get_printer("font")
if Set_Printer("FILLSTYLE", BS_HOLLOW) < 0 then
ErrorMsg = "Error with the FILLSTYLE message"
goto fatalExit
end
xxx = get_printer("font")
if Set_Printer("RECT", 3.5:@FM:y:@FM:3.5+width+.4:@FM:y+height+.4, 0) < 0 then
ErrorMsg = "Error with the RECT message"
goto fatalExit
end
xxx = get_printer("font")
if Set_Printer("FILLSTYLE", BS_SOLID:@FM:RGB(192, 192, 192)) < 0 then
ErrorMsg = "Error with the FILLSTYLE message"
goto fatalExit
end
if Set_Printer("RECT", 3.5+.1:@FM:y+.1:@FM:3.5+width+.3:@FM:y+height+.3, 0) < 0 then
ErrorMsg = "Error with the RECT message"
goto fatalExit
end
xxx = get_printer("font")
if Set_Printer("TEXTXY", text, 3.7:@FM:y+.2, "", 0) < 0 then
ErrorMsg = "Error with the TEXTXY message"
goto fatalExit
end
call Set_Printer("PAGEBREAK")
Return
doPage2:
text = " * OIPI uses the newest VSPRINT or .NET control for the print engine.":@FM
text := " * OIPI was rewritten in Basic+ from Microsoft Visual Basic.":@FM
text := " * The ADDTABLE message was added to improve the quality of tables. This message should be used to replace all TABLE and TEXTCOL messages.":@FM
text := " * The Print Preview window can be scrolled with the mouse and all pages are viewable as soon as they are printed.":@FM
text := " * The IMIT message can be used to change the size of the paper without using the Printer Setup dialog box.":@FM
text := " * The CALCBMP and CALCTABLE messages were added.":@FM
text := " * The title of the Print Preview window can be customized.":@FM
x = Set_Printer("TEXT", "Text via 'Text' call: ":@FM:text)
p1 = Get_Printer("POS")
call Set_Printer("TEXT", "Position after 'Text': ":P1<1>:",":P1<2>)
For x = 1 To 3
call Set_Printer("TEXT", ".")
Next x
p1 = Get_Printer("POS")
call Set_Printer("TEXT", "Position after dots: ":P1<1>:",":P1<2>)
/*
x = Set_Printer("ADDTABLE", "9000":@FM, "", "Text via 'Addtable' call: ":@FM:text, "", "", "", TB_NONE)
p1 = Get_Printer("POS")
call Set_Printer("TEXT", "Position after 'AddTable' call: ":P1<1>:",":P1<2>)
header = "Year":@VM:"XYZ Co. Sales ($Mill)":@VM:"ABC Co. Sales ($Mill)":@FM
table = ""
for i = 0 to 6
table<i+1,1> = 2010+i
table<i+1,2> = 3.5+(i-1)*10
table<i+1,3> = 3.5+(i-1)*50+7
next i
if Set_Printer("FONT", "Arial":@FM:10:@FM:"L":@FM:1) < 0 then goto fatalExit
ColumnFormat = "_^770":@VM:"_>1080":@VM:"_>1080":@FM
if Set_Printer("ADDTABLE", ColumnFormat, header, table, RGB(0, 222, 0), "", "", TB_BOX_COLUMNS) < 0 then goto fatalExit
if Set_Printer("CALCTABLE", ColumnFormat:header:table) < 0 then goto fatalExit
size = Get_Printer("CALCTABLE")
call Set_Printer("TEXT", "Calctable returns *":size<1>:"x":size<2>:"*")
*/
For j=1 To 50
call Set_Printer("TEXT", "skipping...")
Next j
*CALL Set_Printer("PAGEBREAK")
Return
doPage3:
startX = 0
startY = 0
endX = 7
endY = 10
For Y = startY To endY step .5
For X = startX To endX step .5
If x<>int(x) Or y<>int(y) Then
if Set_Printer("TEXTXY", "*", X:@FM:Y, "Arial":@FM:10, 0) < 0 then
ErrorMsg = "Error with the TEXTXY message"
goto fatalExit
End
End else
if Set_Printer("TEXTXY", "(":X:",":y:")", X:@FM:Y, "Arial":@FM:10, 0) < 0 then
ErrorMsg = "Error with the TEXTXY message"
goto fatalExit
End
end
Next X
Next Y
Return
doTerm:
* End the report and tell the OIPI to completely shut down after the print preview is closed.
x = Set_Printer("TERM", 1)
return
* jump here if any Set_Printer returns a value < 0
fatalExit:
x = msg("", ErrorMsg)
x = Set_Printer("TERM", 1)
return