function Test_PrintSetup(Instruction, p1, p2, p3)
#pragma precomp SRP_PreCompiler

******************************************************************************
*
* This program is proprietary and is not to be used by or disclosed
* to others, nor is it to be copied without written permission from
* Revelation Technologies, Inc.
*
* Product    :  OpenInsight Works
*
* History    :  (date, initials, notes)
*   01/23/96  cp   Updating for Hoffa/3.1
*   02/22/96  cp   Added help
*
******************************************************************************

declare function   Get_Property, SRP_Get_Printers, Test_PrintSetup
declare subroutine Set_Property, SendMessage, Dialog_Box, Start_Window
declare subroutine WritePrivateProfileString, DefPrtr, SetupP
declare subroutine GetPrivateProfileSection, GetPrivateProfileString
declare subroutine Utility

$insert Logical
$insert PrintSetup_Equates

equ DLG_NAME$         to  "TEST_PRINTSETUP"
equ INI_FILE$         to  "win.ini": \00\
equ PRN_SECTION$      to  "devices": \00\
equ DFT_SECTION$      to  "windows": \00\
equ DFT_KEY$          to  "device" : \00\
equ WM_WININICHANGE$  to  26
equ HWND_BROADCAST$   to  65535
equ MAX_SIZE$         to  4096


if assigned(Instruction) then
  if len(Instruction) and num(Instruction) else
    Instruction = 1
  end
end else
  Instruction = 1
end

Ret = ""
if Instruction then
  on Instruction gosub Setup, Get, Set, Create, SetDefault, Options, Help, SelChange, Setup
end
return Ret


*******************************
* open the printer setup window
*******************************
Setup:
  Parent = @window
  Exists = Get_Property(Parent, "HANDLE")
  if len(Parent) and Exists then
    Frame = Get_Property(Parent, "MDIFRAME")
    if len(Frame) then
      Parent = Frame
    end
    Dialog_Box(DLG_NAME$, Parent)
  end else
    Start_Window(DLG_NAME$)
  end
return


**************************
* get the list of printers
**************************
Get:
* get list of installed printer types
  Models = str(\00\, MAX_SIZE$)
  GetPrivateProfileSection(PRN_SECTION$, 0, \00\, Models, len(Models), INI_FILE$)
  convert \0020\ to \2000\ in Models
  Models = trimb(Models)
  convert \0020\ to \20FE\ in Models
* get the list of installed printers
  cModels  = count(Models, @fm) + (Models # "")
  Printers = ""
  for iModel = 1 to cModels
    Printer = str(\00\, MAX_SIZE$) 
    GetPrivateProfileString(PRN_SECTION$, Models<iModel>: \00\, \00\, Printer, len(Printer), INI_FILE$)
    Printer   = Printer [1,\00\]
    cPrinters = count(Printer, ",")
    for iPrinter = 1 to cPrinters
      Printers<-1> = Models<iModel>: ",": field(Printer, ",", 1): ",": field(Printer, ",", iPrinter + 1)
    next iPrinter
  next iModel

* get the default printer
  Default = str(\00\, MAX_SIZE$) 
  GetPrivateProfileString(DFT_SECTION$, DFT_KEY$, \00\, Default, len(Default), INI_FILE$)
  Default = Default [1, \00\]

*debug
*  dPrinters = SRP_Get_Printers('Local')
*  cPrinters = SRP_Get_Printers('Connect')
*  bPrinters = SRP_Get_Printers('Connect')
*  aPrinters = SRP_Get_Printers('Connect')
*    
*  List = ''
*  Current = ''
*  Printers = dPrinters:@FM:cPrinters:@FM:bPrinters:@FM:aPrinters
  
  Ret = count(Printers, @fm) + (Printers # "")
*  Default = SRP_Get_Printers('Default')  
    transfer Models   to p1
    transfer Printers to p2
    transfer Default  to p3
return


*************************
* set the default printer
*************************
Set:
  if assigned(p1) then
    Current = p1
    WritePrivateProfileString(DFT_SECTION$, DFT_KEY$, Current: \00\, INI_FILE$)
    SendMessage(HWND_BROADCAST$, WM_WININICHANGE$, 0, 0)
    Ret = TRUE$
  end else
    Ret = FALSE$
  end
return


*********************
* window create event
*********************
Create:
 * get list of printers and the current (ie. default) printer
  dPrinters = SRP_Get_Printers('Local')
  cPrinters = SRP_Get_Printers('Connect')
  List = ''
  Current = ''
  //cPrinters = PrintSetup(PRN_GET$, "", List, Current)
  //Printers  = List
  Printers = cPrinters
  for i = 1 to cPrinters
    List<i> = field(List<i>, ",", 1): " on ": field(List<i>, ",", 3)
  next i

 * highlight current printer in printer list
  if len(Current) then
    locate Current in Printers using @fm setting Pos then
      Current = List<Pos>
    end else
      Pos = ""
    end
  end else
    Pos = ""
  end

  Ctrls = @window: ".LB_PRINTER": @rm: @window: ".LB_PRINTER": @rm: @window: ".ST_DEFAULT": @rm: @window: ".CB_OPTIONS": @rm: @window    : @rm: @window
  Props = "LIST"                : @rm: "SELPOS"              : @rm: "TEXT"                : @rm: "ENABLED"             : @rm: "@PRINTERS": @rm: "VISIBLE"
  Vals  = List                  : @rm: Pos                   : @rm: Current               : @rm: (Pos > 0)             : @rm: Printers   : @rm: TRUE$
  
  Set_Property(Ctrls, Props, Vals)
return


****************************
* user chose default printer
****************************
SetDefault:
  Ctrls    = @window: ".LB_PRINTER": @rm: @window: ".LB_PRINTER": @rm: @window
  Props    = "TEXT"                : @rm: "SELPOS"              : @rm: "@PRINTERS"
  Vals     = Get_Property(Ctrls, Props)
  Current  = field(Vals, @rm, 1)
  Pos      = field(Vals, @rm, 2)
  Printers = field(Vals, @rm, 3)

  if PrintSetup(PRN_SET$, Printers<Pos>) then
    Set_Property(@window: ".ST_DEFAULT", "TEXT", Current)
    Set_Property(@window: ".CB_OPTIONS", "ENABLED", TRUE$)
  end
return


*******************************
* printer configuration options
*******************************
Options:
  hWnd = Get_Property(@window, "HANDLE")
  Set_Property("SYSTEM", "BLOCK_EVENTS", TRUE$)
  SetupP(hWnd)
  Set_Property("SYSTEM", "BLOCK_EVENTS", FALSE$)
return


***************************
* call help for print setup
***************************
Help:
  Utility("RUNHELP", "OINSIGHT.HLP", @window: @fm: 1: @fm: 9010)
return


********************************
* user changes highlight in list
********************************
SelChange:
  Ctrls    = @window: ".LB_PRINTER": @rm: @window: ".ST_DEFAULT"
  Props    = "TEXT"                : @rm: "TEXT"
  Vals     = Get_Property(Ctrls, Props)
  Printer  = field(Vals, @rm, 1)
  Current  = field(Vals, @rm, 2)

  Set_Property(@window: ".CB_OPTIONS", "ENABLED", Printer = Current)
return

