home *** CD-ROM | disk | FTP | other *** search
- VB BOOK - Utility to print ASCII text files to LaserJet Series II, IIp or III
- in booklet format.
-
- Based on the program, PC BOOK, by Jay Munro, Copyright 1990 PC Magazine -
- Ziff Davis - Jay Munro. Original Copyright still applicable (as far as I'm
- concerned).
-
- Originally written by Jay Munro and converted to Visual Basic by Dennis Scott
- on 1 September 1991.
-
- Documentation adapted from original PCBOOK.DOC file:
- ----------------------------------------------------
-
- Purpose:
-
- VB BOOK prints README and similar ASCII files in booklet format on an HP
- LaserJet II, IIp, or III printer. Uses two-sided printing in landscape mode,
- with Line Printer font so that four standard pages of 80 characters per line,
- 66 lines per page are printed on each sheet without formatting changes.
-
- Remarks:
-
- The filename can designate any ASCII text file in which each line is
- terminated with a Carriage Return/Line Feed combination. Page Feed characters
- can be added to force breaks in addition to those implicit in the 60-line
- (68-line if a header is used) page length.
-
- The original switches in PC Book have been replaced with Windows Checkboxes.
- Any or all of the Checkboxes can be used to create a one-line header that
- prints the filename, page number, and date, on all but blank pages. The Wrap
- Checkbox causes lines exceeding 80 characters to wrap; by default such lines
- are wrapped.
-
- Output can now be directed to LPT1, LPT2, COM1, COM2, or File. Noted that
- you must set the proper parameters for your port before printing to a COM
- port. If File is selected, you will be prompted to enter an output filename.
-
- VB BOOK sequences the page printing so that all side-one pages are printed in
- one pass. The sheets are then put back in the LaserJet paper tray and all
- side-two pages are printed. The finished booklet can then be created with a
- single fold. When using the normal (top) LaserJet output bin the pass-one
- sheets should be reinserted in the paper tray without any relative change
- in orientation. If rear output from the printer is used, the sheets must be
- turned over as a group before reinsertion.
-
- Requirements:
-
- VB Book requires Windows 3. The Visual Basic Run Time file, VBRUN100.DLL,
- must be in the path (recommend putting it in your Windows directory).
- Modifications will require Microsoft Visual Basic Version 1.0. Both the
- executable and the source files for VB Book are provided.
-
- Comments to QuickBASIC programmers:
-
- The conversion of PC Book from QuickBASIC to Visual Basic (VB) was undertaken
- as an exercise in converting original QuickBASIC (QB) source code into VB code.
- It was surprisingly easy!
-
- The hardest part was deciding HOW the screens (forms in VB) should look.
- Actually designing the forms is very easy. Once the forms were designed, I
- just used "load text" to get the original QB code into the main form. VB does
- almost everything automatically. For example, all SUBs are automatically
- created and the old code placed in them.
-
- Some things will need to be changed, of course. Any input from the user
- (QBs Input, Line Input, and Inkey commands) needs to converted to "InputBox$"
- functions. Similarly, the "print" statements (with corresponding Locate's)
- were converted to "MsgBox" functions or a form created to place them onto.
- The QB code that performed initialization was placed in the main form's
- Form_Load procedure. All Declare's were removed. Most of the above changes
- were accomplished by pressing F5 (run) and letting VB tell me what it didn't
- like. I just used the ol' cut & paste to put things in the right place.
-
- I then defined what should happen when each of the controls on the forms were
- activated (usually clicked) and wrote the code into those areas. Putting the
- drive, directory, and file selection boxes on the screen and activating them
- is phenomenally easy!
-
- The overall concepts of VB are a little difficult to comprehend at first but
- then it clicks and it all becomes quite simple. I would highly recommend that
- you take the tutorial before doing anything. If you don't, you will not
- comprehend what's going on and will probably get disgusted and quit.
-
- This conversion took about a day to do because of having to learn VB. If I
- had to do it again I could probably complete it in an hour or less. Please
- note that the code has not been "cleaned up" - some debugging code may still
- be there.
-
- Recommended additions:
-
- Want some practice with VB? Why not add: A screen preview of output while
- printing (or before printing or instead of printing) and status display of
- percent completed.
-
- If anyone adds this capability or changes the code in some other way, please
- be kind enough to send me a copy.
-
- Please send comments or suggestions to:
-
- Dennis Scott
- CompuDirect
- 9102 Ocean Gate
- San Antonio, TX 78242
- (512)623-6856
-
- Disclaimer:
-
- The standard disclaimer applies: Use this program at you own risk. Myself,
- and the original Copyright holder, will not be held responsible for anything!
-
- The Source Code:
- ----------------
-
- The following is a complete listing of the VB source code, included here for
- those to see that do not yet own VB. For those that do own VB, the forms and
- code are also included in the archive. Just place all files in their own
- directory then open the VBBOOK project. Note that almost all of the following
- code was originally PC Book code - very little had to be added for VB.
-
- The Global form (VBBOOK.BAS):
- -----------------------------
- Type Flags 'Misc flag variables
- CurDate As Integer
- DoHeader As Integer
- FileTitle As Integer
- LineLen As Integer
- LineWrap As Integer
- PgNumber As Integer
- End Type
-
- 'The VBBOOK.FRM form: (used for the first little box that goes away in 5 sec's.)
- '--------------------
- '(No code in this form. Just displays a message for 5 secs)
-
- 'The VBBOUT.FRM form:
- '--------------------
- '(No code in this form. It's a blank, full-page form used to cover up the
- 'desktop. There should be a better way to do this!)
-
- 'The Main module, VBBINP.FRM: (This is where all the selections are done.)
- '----------------------------
- 'Declarations section:
- 'Note that Dim Shared is not really needed but VB done it during the automatic
- 'conversion from QuickBasic code so I left it that way.
- Dim Shared ESC$, FF$, LF$, filename$, OUTFILE$, NL$
- Dim Shared page%, num$, tune%
- Dim Shared PC As Flags
- Dim lastchange As Integer
-
- Const fileboxclick = 0, dirsboxclick = 1 'Used by file selection routine
- Const true = -1, false = 0
-
- 'Now the Subs start:
- Static Sub BuildArray (ptrarray&(), pgcount%)
- MaxLines% = 66 'Maximum number of lines
- Offset& = 1 'Start of file (seek point)
- Open filename$ For Binary Access Read As #1 Len = 1 'Open file to check
- TotalSize& = LOF(1) 'Get LEN of file so we don't read too far
- FileLeft& = TotalSize& 'Setup a counter to show whats left
- 'FRE is not supported by VB. Just set it to 64K
- MemAvail& = 65536 'FRE(FileName$) - 2048 'Check available string memory
- If MemAvail& < 2048 Then Error 14 'Force out of memory error
- SixteenK% = 16384
-
- If TotalSize& > SixteenK% Then 'Set a buffer size
- If MemAvail& > SixteenK% Then 'If the file is larger than 16K
- BufAvail& = SixteenK% 'Set it to 16k
- Else
- BufAvail& = MemAvail&
- End If
- Else
- If TotalSize& < MemAvail& Then 'Otherwise set it to file size
- BufAvail& = TotalSize&
- End If
- BuffSize% = BufAvail&
- End If
-
- pgcount% = 1 'Initialize page count
- ptrarray&(pgcount%) = 1 'First pointer is always 1
- LnCount% = 0 'Initialize line count
-
- GetPage: 'Read the file
-
- If FileLeft& < BufAvail& Then 'Check amount left to read
- Buffer$ = Space$(FileLeft&) 'If less than our buffer, use lessor
- Else
- Buffer$ = Space$(BufAvail&) 'Otherwise use full buffer size
- End If
-
- Get #1, Offset&, Buffer$ 'Read in a buffers worth
- stptr% = 1 'Pointer into buffer$
- LastLine% = 0 'remember last position
-
- PageCheck:
- TempLn% = InStr(stptr%, Buffer$, LF$) 'Position of next linefeed
- temppg% = InStr(stptr%, Buffer$, FF$) 'Position of next pagefeeds
-
- If temppg% Then 'If there was a page feed
- If temppg% < TempLn% Or TempLn% = 0 Then ' was it before our linefeed?
- pgcount% = pgcount% + 1 ' yes then bump page count
- ptrarray&(pgcount%) = Offset& + temppg% ' set next array element
- stptr% = temppg% + 1 ' set instr pointer
- LnCount% = 0 ' reset linecount
- If stptr% < Len(Buffer$) Then GoTo PageCheck 'and loop back for more
- End If
- End If
-
- If TempLn% Then 'Linefeed
- If PC.LineWrap Then 'If Line Wrap, check length
- If TempLn% - stptr% > PC.LineLen Then 'Greater than 80?
- Do 'check for line wrap
- LnCount% = LnCount% + 1 'increment line
- If LnCount% = MaxLines% Then
- GoTo PageBreak '> 66 lines
- End If
- stptr% = stptr% + PC.LineLen
- Loop While TempLn% - stptr% > PC.LineLen
- End If
- End If
- LnCount% = LnCount% + 1 'Increment page count
-
- PageBreak:
- If LnCount% = MaxLines% Then
- pgcount% = pgcount% + 1
- If pgcount% > 512 Then
- msg$ = "Too may pages - printing only 512."
- MsgBox msg$, 0, "Notice"
- GoTo EndBuild
- End If
- ptrarray&(pgcount%) = Offset& + TempLn% 'point to next in point in file
- LnCount% = 0
- End If
-
- stptr% = TempLn% + 1 'point ahead 1 byte for next scan
- If stptr% <= Len(Buffer$) Then
- GoTo PageCheck 'keep checking
- End If
- End If
-
- Offset& = Offset& + Len(Buffer$) 'Pointer into file (tally)
- stptr% = 1 'Reset Buffer pointer
- FileLeft& = TotalSize& - Offset& 'Calculate how much is left
- If Offset& < TotalSize& Then GoTo GetPage 'If more text in file, keep going
-
- EndBuild:
- ptrarray&(pgcount% + 1) = TotalSize& 'Set last pointer to end of file
-
- Close #1 'Close input file
- End Sub 'End of BuildArray Sub
-
- Sub Label1_load ()
- 'This section is not used at this time
- Print String$(80, 61)
- Print "PCBook - PC Magazine Booklet Printing Utility"
- Print "Copyright 1990 PC Magazine Ziff Davis Jay Munro"
- Print
- Print "Converted to Visual Basic by Dennis Scott"
- Print String$(80, 61)
- End Sub
-
- Static Sub DoMacro (num$)
- Print #2, ESC$; "&f"; num$; "y2X"; 'execute the macro
- End Sub
-
- Static Sub EndMacro (num$)
- Print #2, ESC$; "&f"; num$; "y1X"; 'Send end of macro command
- Print #2, ESC$; "&f"; num$; "y9X"; 'Make it temporary (10 to be permanent)
- End Sub
-
- Static Sub Header (page%)
- hdr$ = Space$(PC.LineLen) 'Create a string to print
-
- If PC.FileTitle Then 'Print the filename
- Mid$(hdr$, 40 - Len(filename$) \ 2) = UCase$(filename$)
- End If
-
- If PC.PgNumber Then 'Print the current page
- PTemp$ = "Page" + Str$(page%)
- If page% Mod 2 Then
- Mid$(hdr$, PC.LineLen - Len(PTemp$)) = PTemp$ 'odd page, right side
- Else
- Mid$(hdr$, 1) = PTemp$ 'even page, left side
- End If
- End If
-
- If PC.CurDate Then 'Print the current date
- If page% Mod 2 Then
- Mid$(hdr$, 1) = Date$ 'even page, left side
- Else
- Mid$(hdr$, PC.LineLen - Len(Date$)) = Date$ 'odd page, right side
- End If
- End If
- Print #2, hdr$ 'Print the Header
- Print #2, ' and skip a line for readability
-
- End Sub
-
- Static Sub LJLocate (X%, Y%) 'Laser Jet cursor locate
- Temp$ = ESC$ + "&a" + LTrim$(Str$(Y%)) + "r" + LTrim$(Str$(X%)) + "C"
- Print #2, Temp$;
- End Sub
-
- Static Sub printlogo () 'Banner logo (About VB Box!)
- msg$ = " VB Book" + NL$
- msg$ = msg$ + " Converted to Visual Basic" + NL$
- msg$ = msg$ + " by Dennis Scott." + NL$
- msg$ = msg$ + NL$
- msg$ = msg$ + "Send Comments/Suggestions to:" + NL$
- msg$ = msg$ + " CompuDirect" + NL$
- msg$ = msg$ + " 9102 Ocean Gate" + NL$
- msg$ = msg$ + " San Antonio, TX" + NL$
- msg$ = msg$ + " (512)623-6856" + NL$
- MsgBox msg$, 0, "About VB Book"
- End Sub
-
- Sub PrintSetup () 'Send codes to prepare printer
- Print #2, ESC$; "E"; 'Reset laserjet (simple isn't it!)
- Print #2, ESC$; "&l1o5.45C"; 'Select lineprinter font"
- Print #2, ESC$; "(s0p16.66H"; ' and pitch
- Print #2, ESC$; "&l0L"; 'Turn off page feed at 66 lines
-
- If PC.LineWrap Then 'Wrap lines > 80 chars
- Print #2, ESC$; "&s0C";
- End If
-
- Print #2, ESC$; "&l2E"; 'Top margin 2 lines
-
- Call StartMacro("1") 'Left side macro
- Print #2, ESC$; "9"; 'Reset left - right margins
- Print #2, ESC$; "&a0l80M"; 'set left margin 0, right 80
- Call EndMacro("1")
-
- Call StartMacro("2") 'Right side macro
- Print #2, ESC$; "9"; 'Reset left - right margins
- Print #2, ESC$; "&a95l175M"; 'set left margin 95, right 175
- Call EndMacro("2")
-
- End Sub
-
- Static Sub StartMacro (num$)
- Print #2, ESC$; "&f"; num$; "Y"; 'Macro will have an id of Num$
- Print #2, ESC$; "&f0X"; 'Start the macro now
- End Sub
-
- Sub Form_Click ()
- 'If user clicks anywhere on the form, call the about box
- Call printlogo
- End Sub
-
- 'This is the main code - everything is actually called from here and this
- 'is where most of the VB changes are located
- Sub go_click ()
-
- 'VB Code for Drive, Directory, and File selections
- If index >= 3 Then End
- If lastchange = dirsboxclick Then
- dir1.path = dir1.list(dir1.listindex)
- Else
- If file1.filename <> "" Then
- ChDrive drive1.drive
- ChDir file1.path
- filename$ = file1.filename
- Else
- msg$ = "Sorry! You must first select a file."
- abort% = MsgBox(msg$, 49, "No application chosen.")
- If abort% = 2 Then 'cancel button
- End
- End If
- End If
- End If
- lastchange = fileboxclick
-
- ReDim ptrarray&(513) 'total number of pages (512)
- On Error GoTo ErrorDept 'Error trapping
-
- 'Ensure that we have a file name (user may have clicked DoIt without
- 'entering a filename)
-
- GetName:
- If Len(filename$) = 0 Then
- If tune% Then Beep
- msg$ = "Enter a file name to print: "
- Title$ = "Filename" ' Set title.
- Default$ = ""
- NewName$ = InputBox$(msg$, Title$, Default$) ' Get user input.
- If Len(NewName$) = 0 Then ' Check if valid.
- msg$ = "You did not input a valid Filename." + NL$
- msg$ = msg$ + "Click on OK to End Program"
- MsgBox msg$, 0, Title$ ' Display message.
- GoTo OutHere
- End If
- End If
-
- 'Build index array for pages in FileName$
- 'Have not converted status display
- 'Print
- 'Print "Reading file "; filename$
- Call BuildArray(ptrarray&(), page%) 'Built pointer array
-
- 'Figure number of pages needed
- If page% Mod 4 Then 'Even multiples of 4 only
- page% = page% + (4 - page% Mod 4) ' correct for less
- End If
-
- 'Have not converted status display
- 'Print
- 'Print "You will print "; Page% \ 4; "sheets" 'Report total number of pages
- 'Print
-
- 'JustCount% is set to false always due to status section not being
- 'converted to VB
- If JustCount% Then
- Print "Press any key to continue, or ESC to cancel printing"
- GoSub KeyIn
- End If
-
- Open OUTFILE$ For Output As #2 'Open printer or output file
- Call PrintSetup 'Set up printer
-
- 'Page parsing variables
- LeftSide% = page%
- RightSide% = 1
- FirstPass% = -1
-
- Open filename$ For Binary As #1 'Open the input file
- 'Have not converted status display
- 'Print "Printing Side 1 to "; outfile$; 'Track what is going on
-
- 'Start of print routine
-
- DoPass:
- Bookmark% = (page% \ 4) 'Flag for halfway through
- If Bookmark% = 0 Then Bookmark% = 1 'Force 1 if too small
-
- 'Read text and send to printer or file
- Do 'Print the right side of the page first
- If ptrarray&(RightSide% + 1) = 0 Then 'If blank, then skip it
- GoTo NextPage
- End If
- Call DoMacro("2") 'Start on right side
- LJLocate 95, 0 'Home the cursor
-
- If PC.DoHeader Then Call Header(RightSide%) 'Header if needed
- Buffer$ = Space$(ptrarray&(RightSide% + 1) - ptrarray&(RightSide%))
-
- Get #1, ptrarray&(RightSide%), Buffer$ 'Read in a page
-
- If InStr(Buffer$, FF$) Then 'If the last character is a PF
- Print #2, Left$(Buffer$, InStr(Buffer$, FF$) - 1); 'print only text
- Else
- Print #2, Buffer$; 'Otherwise print full line
- End If
-
- NextPage:
- If ptrarray&(LeftSide% + 1) = 0 Then 'Don't print blank pages
- GoTo NextPage1
- End If
- Call DoMacro("1") 'Reset margins for left side
- LJLocate 0, 0 'Home the cursor
- If PC.DoHeader Then Call Header(LeftSide%) 'Header if needed
- Buffer$ = Space$(ptrarray&(LeftSide% + 1) - ptrarray&(LeftSide%)) 'Setup buffer for input
- If LeftSide% = 0 Then 'If pointing at blank page, skip
- GoTo NextPage1
- End If
- Get #1, ptrarray&(LeftSide%), Buffer$ 'Read in a page
-
- If InStr(Buffer$, FF$) Then 'if the last character is a PF
- Print #2, Left$(Buffer$, InStr(Buffer$, FF$) - 1); 'print only text
- Else 'print only text
- Print #2, Buffer$; 'otherwise print all
- End If
-
- NextPage1:
- Print #2, FF$; 'Page feed
- LeftSide% = LeftSide% - 2 'Calculate next page in series
- RightSide% = RightSide% + 2
- Bookmark% = Bookmark% - 1 'Track our progress
-
- Loop Until Bookmark% = 0 'Print pages until halfway through
-
- 'Pause between sides to allow for paper reinsertion
- If FirstPass% Then 'If side one, prompt and get 2nd side
- msg$ = "First Pass has been Completed." + NL$
- msg$ = msg$ + "Insert paper back in tray and Click OK"
- If tune% Then Beep
-
- WaitKey: 'Press any key to continue loop
- MsgBox msg$, 0, "Waiting"
- FirstPass% = 0 'Flag for second pass
- 'Have not converted status display
- 'msg$ = "Printing Side 2 to " + outfile$
- 'Print msg$ 'Report on progress
- GoTo DoPass
- End If 'End of first pass
-
- 'Printing is done now
- msg$ = "Printing completed."
- If tune% Then Beep
- MsgBox msg$, 64, "Done"
-
- PrtReset:
- Print #2, ESC$; "E"; 'Reset laserjet
-
- OutHere:
- Close 'Close all files
- End 'Thats all for now
-
- 'Error handler. Converted to VB errors.
- ErrorDept:
- Beep
- msg$ = "*** Error ***" + NL$
- Select Case Err
- Case 482
- msg$ = msg$ + "Printer error."
- Case 68
- msg$ = msg$ + "Device is unavailable."
- Case 71
- msg$ = msg$ + "Insert a disk in the drive and close the door."
- Case 57
- msg$ = msg$ + "Device Input/Output Error (Check Printer!)."
- Case 61
- msg$ = msg$ + "Disk is full."
- Case 64, 52
- msg$ = msg$ + "That filename is illegal."
- Case 76
- msg$ = msg$ + "That path doesn't exist."
- Case 54
- msg$ = msg$ + "Can't open your file for that type of access."
- Case 55
- msg$ = msg$ + "This file is already open."
- Case 62
- msg$ = msg$ + "This file has a nonstandard end-of-file marker" + NL$
- msg$ = msg$ + "or an attempt was made to read beyond the end-" + NL$
- msg$ = msg$ + "of-file marker."
- Case Else
- msg$ = msg$ + "Error number " + Str$(Err)
- End Select
- GoSub AWayOut
- Resume
-
- AWayOut:
- abort% = MsgBox(msg$, 17, "ERROR")
-
- KeyIn:
- If abort% = 2 Then 'If user presses Cancel, Exit
- Close
- End
- End If
- Return
-
- 'End of main module
- End Sub
-
- Sub Dir1_Change ()
- file1.path = dir1.path
- file1.SetFocus
- End Sub
-
- Sub Dir1_Click ()
- lastchange = dirsboxclick
- End Sub
-
- Sub File1_Click ()
- 'use the following line to put filename in frame
- 'if using a frame:
- 'inname.caption = "Load " + file1.filename
- lastchange = fileboxclick
- End Sub
-
- Sub File1_DblClick ()
- 'Allow the user to double-click on an input file and start printing
- Call go_click
- End Sub
-
- 'CLKx Subs are the Check Boxes for selecting whether to use speaker, etc
- Sub clk1_Click ()
- 'Toggle on/off
- If PC.FileTitle = 0 Then
- PC.FileTitle = -1
- PC.DoHeader = -1
- Else
- PC.FileTitle = 0
- 'Still have to do the Header if clk2 or clk3 buttons are checked
- If (clk2.value = -1) Or (clk3.value = -1) Then
- PC.DoHeader = -1
- Else
- PC.DoHeader = 0
- End If
- End If
- End Sub
-
- Sub clk2_Click ()
- 'Toggle on/off
- If PC.CurDate = 0 Then
- PC.CurDate = -1
- PC.DoHeader = -1
- Else
- PC.CurDate = 0
- 'Still have to do the Header if clk1 or clk3 buttons are checked
- If (clk1.value = -1) Or (clk3.value = -1) Then
- PC.DoHeader = -1
- Else
- PC.DoHeader = 0
- End If
- End If
- End Sub
-
- Sub clk3_Click ()
- 'Toggle on/off
- If PC.PgNumber = 0 Then
- PC.PgNumber = -1
- PC.DoHeader = -1
- Else
- PC.PgNumber = 0
- 'Still have to do the Header if clk1 or clk2 buttons are checked
- If (clk1.value = -1) Or (clk2.value = -1) Then
- PC.DoHeader = -1
- Else
- PC.DoHeader = 0
- End If
- End If
- End Sub
-
- Sub clk4_Click ()
- 'Toggle on/off
- tune% = Not tune%
- End Sub
-
- Sub clk5_Click ()
- 'Toggle on/off
- PC.LineWrap = Not PC.LineWrap
- End Sub
-
- Sub Drive1_Change ()
- dir1.path = drive1.drive
- End Sub
-
- Sub Cancel_Click ()
- 'If user clicks on the Cancel button then ...
- Close
- End
- End Sub
-
- 'This Sub is ran when the VBBINP.FRM is loaded (ie, Showed)
- Sub Form_Load ()
- 'Put the options in the output port/filename Combobox
- comboutname.AddItem "LPT1"
- comboutname.AddItem "LPT2"
- comboutname.AddItem "COM1"
- comboutname.AddItem "COM2"
- comboutname.AddItem "file"
- comboutname.text = comboutname.list(0) 'default to LPT1
- OUTFILE$ = "LPT1"
- 'set default check-box values
- tune% = -1
- PC.FileTitle = -1
- PC.DoHeader = -1
- PC.CurDate = -1
- PC.PgNumber = -1
- PC.LineWrap = -1
- 'set some variables
- ESC$ = Chr$(27) 'Standard ESC code
- FF$ = Chr$(12) 'Page Feed
- LF$ = Chr$(10) 'Line Feed
- NL$ = Chr$(13) + Chr$(10) 'CR and LF (New Line)
- JustCount% = 0 'Not allowing "just counting"
- PC.LineLen = 80 'Maximum length of line
- End Sub
-
- 'User clicks on the Combobox
- Sub comboutname_Click ()
- 'Select where to send the output
- Select Case comboutname.text
- Case "LPT1"
- OUTFILE$ = "LPT1"
- Case "LPT2"
- OUTFILE$ = "LPT2"
- Case "COM1"
- OUTFILE$ = "COM1"
- Case "COM2"
- OUTFILE$ = "COM2"
- Case "file"
- If file1.filename = "" Then 'If no input filename is selected
- comboutname.text = "LPT1" ' default back to LPT1
- OUTFILE$ = "LPT1"
- msg$ = "You must select an input filename first!"
- MsgBox msg$, 32
- file1.SetFocus 'set focus to file list box
- Exit Sub
- End If
-
- 'Now make up a default output filename with same
- 'name and PRN as the extension
- OUTFILE$ = UCase$(Left$(file1.filename, InStr(file1.filename, ".")) + "PRN")
-
- msg$ = "WAIT" + NL$ + "Enter filename to print to:"
- OUTFILE$ = InputBox$(msg$, "Output File Name", OUTFILE$) 'Get a filename
- If OUTFILE$ <> "" Then
- comboutname.text = UCase$(OUTFILE$) 'put filename in combo box
- go.SetFocus
- Else
- 'Insist on a filename
- comboutname.text = "LPT1"
- OUTFILE$ = "LPT1"
- file1.SetFocus 'set focus to file list box
- End If
- End Select
- End Sub
-
- Sub Picture1_Click ()
- Call printlogo 'Show the "about" box
- End Sub
-
-