SecureUser
VERBatim - V86
Advanced Revelation Initialisation Sequence (Overview) by Mike Pope
Base Conversions
QTIPS - Using @Upper.Case and @Lower.Case with Foreign Languages
@ATTACK - @Lower.Case
@ATTACK - @Upper.Case
Sorting out Collation Sequences by Mike Pope
Merge Processor
QTIPS - Using INIT.VIEW with Printers
@ATTACK - @PDisk.On
Merge Processor
VERBatim - V6
QTIPS - /MERGE/
QTIPS - Merge Shortcuts
Reader's Clinic - Page Marks in Windows
QTIPS - Command Line Options
QTIPS - Invalid Code and Command
QTIPS - Code/Command Help
Utility Diskette # 4
Merge Processor
Window or Not ?
Vroom - Window Processing
QTIPS - Window Symbol Tables
VROOM - Window Processing II
@ATTACK - @HW
Uncommon Knowledge - WC_Reset%
Reader's Clinic - Related Windows
Window or Not?
Reader's Clinic - Scribe Replace Processes in Window
Soft Windows
QTIPS - Window Bug and Debugging Window Bug
Overlapping Windows And Window Menus
QTIPS - New Catalyst Option
QTIPS - Collectors on the fly
QTIPS - Blank Menus in Windows
QTIPS - Moving Objects the EASY way.
Utility Diskette # 4
QTIPS - Suppressing Initial Form Feed
QTIPS - Using RTP29 In Place of V6
RTP Series - RTP42
RTP Series - RTP51
Reader's Clinic - AREV Runtime
@ATTACK - @PDisk.On
Advanced Revelation Initialisation Sequence (Overview) by Mike Pope
AREV Comes to Czechoslovakia Les Palenik, Cosmotron Systems
Form.List.S
QTIPS - Aesthetically Improving RLIST Reports
QTIPS - Form Processor
QTIPS - Suppressing Initial Form Feed
QTIPS - Using RTP29 In Place of V6
QTIPS - Command Line Options
Customising the Status Line
QTIPS - FOR/NEXT variables
Gas Bar
@ATTACK - @Rn.Counter
QTIPS - Replacing GAS.BAR routine during PERFORM "SELECT"
QTIPS - Inconsistent @Variable Behaviour
Compiling 64K on a Shoestring by Blaise Wrenn (LexStat Systems Ltd)
Playing with Scan Codes
QTIPS - Compiling Protection Code
QTIPS - Invalid Code and Command
QTIPS - Code/Command Help
Compiling 64K on a Shoestring by Blaise Wrenn (LexStat Systems Ltd)
Reader's Clinic - Functions and Subroutines
Argument passing - Subroutines and Functions - Mike Pope
REVMEDIA Revisted
Vroom
RTP Series - RTP32
Utility Diskette # 3 - Part I
VERBatim - V16
Popups
Utility Diskette # 3 - Part I
Background Processing
Creating Your Own Background Processes
@ATTACK - @Index.Time
How Indexes Are Updated
Creating Your Own Background Processes
@ATTACK - @Last.Select.Process
Reader's Forum
QTIPS - Menu Item Pre-Processing
VERBatim - V126
Esc.To.Exit
Uncommon Knowledge - WC_WST_CHAR%
Version 3 Technical Highlights - Customising NewApplication Creation
How Indexes Are Updated
QTIPS - Unexpected/Unwanted Modification Of Record On Write
QTIPS - DOS File Names
DOS Interfacing (Part II)
VERBatim - V116
@ATTACK - @Pri.File
@ATTACK - @Rollout.File
File Variables
How Indexes Are Updated
Index Record Layouts
QTIPS - File Variable of File In SELECT Statement
QTIPS - Amending non-Attached Files
LINEAR HASH FILE STRUCTURES - Part 1
Index Flush
QTIPS - File Handle Structure
Utility Diskette # 4
Version 3 Technical Highlights - Customising NewApplication Creation
SecureUser
VERBatim - V25
@ATTACK - @Files.System
Advanced Revelation Initialisation Sequence (Overview) by Mike Pope
REVMEDIA Revisted
RTP Series - RTP42
VERBatim - V65
Argument passing - Subroutines and Functions - Mike Pope
Simple Security
QTIPS - Hiding Symbolic Source Code
Using One Dictionary With Multiple Tables - Aaron Kaplan - SoftMart Inc
Reader's Clinic - Screen Width
QTIPS - /MERGE/

RevMedia FKB

DocumentV1I5A4
TitleMerge Processor
KeywordsMERGE
PROCESSOR
MAKEMERGE
FONT
PRINTER
TextAs the sophistication of our user base grows so does the sophistication of
their demands A recent case in point was a client who had a twin bin feeder
on their laser printer and who wanted a MERGE document to print first page
on headed paper and then second page (and all subsequent pages) on
continuation paper

This obviously involved swapping printer bins WITH the appropriate escape
sequence USING a <> and a <> command (Just in case you hadn't
noticed pressing F10 when in the MAKEMERGE window gives you the MERGE menu
and allows you to configure your printer etc ) The only problem WITH this
approach was that issuing a swap bin command to the laser printer caused a
form feed This in itself was not a problem but AREV was not aware that a
page throw had occurred and thus continued printing until it reached the end
of its logical page and then performed a form feed itself Thus if we were
printing an 80 line document WITH a page length of 60 lines and we swapped
bins AFTER 40 lines AREV printed a further 20 lines on the next page and
then form fed to print the final 20 lines on the third page

This was really inconvenient What was required was a <> command
to RESET the line counter to 0 without printing a CHAR(12) Without access
to source I can only suggest this as a possible enhancement so short
term I developed a solution to work around this problem

In the OBJECT code for MERGE is contained a literal about "to process" By
experimenting I discovered that if you put a subroutine name preceded with
an @ sign into the PRINTER field on the MERGE document (NB @Routine name NOT
@S Routine name@) the partially formatted document is sent to your routine
NOT to the printer The subroutine is passed two parameters the id of the
record and the formatted text All of the printer control COMMANDS are left
in<> <> <> etc but all paragraph formatting has been
done We only need to process this data and ignore the form feeds applying
our own page control logic In fact this has much wider application We
could do ANYTHING WITH the output write it DIRECT to a WP file create a
fax file for pickup by JT Fax anything

In addition to the information passed DIRECTLY to the subroutine we also
need access to an area of system LABELLED common called MERGE This labelled
common area has 26 parameters (I E COMMON / MERGE / A B C D E F G H I J K
L M N O P Q R S T U V W X Y Z) which are as follows (where ??? is a variable
of unknown usage)

A Data File Name
B Dictionary File Variable
C ???
D Special Text Data File Name
E Top Margin
F Left Margin
G Page Width (Left Margin + Right Margin)
H Page Height (Top Margin + Bottom Margin)
I DEFAULT FORMAT (Coded 0 = Noformat ! = Left 2 = filled)
J Heading
K Footing
L Formatted text identical to second parameter passed
M P ???
Q %FIELDS% of Data File
R File VARIABLE of Special Text Data File
S T ???
U Field MARK delimited list of command OPTIONS << >> <>
etc
V Field mark delimited list of printer control codes <>
<> etc
W Special Merge Fields MRG DATE MRG TIME etc
X <>
Y <>
Z <>

Thus our bin change logic could look something like (assuming HP DESKJET
printer and bin changes in <> and <> and WITH apologies for
tersity of code)

SUBROUTINE PRINT MERGE(ID TEXT)
COMMON /MERGE/ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
EQU PRN$ TO "HP DESKJET"
EQU PAGE LEN$ TO 60
PRIN CODES = XLATE("MRG PRINTER CONFIG"'PRN$ "" "X")
* Get control codes for bin changes
CODE = "<>" ; GOSUB GET CODES ; BIN1 = CODES
CODE = "<>" ; GOSUB GET CODES ; BIN2 = CODES
CTR = COUNT(TEXT @FM) + (TEXT#"")
FIRST PASS = 1 ; PRINTER ON ; PRINT BIN1 ; LINE CTR= 0
FOR LINE = 1 TO CTR
CL =TEXT ; NO MORE CHANGES = 0
LOOP UNTIL NO MORE CHANGES DO
QX = INDEX(CL "<<" 1)
IF QX THEN
CODE = CL[QX "F>>"] : ">>" ; S COL2 = COL2()
IF CODE = "<>" THEN CODE = "" ELSE
GOSUB GET CODES
END
CL = CL[1 QX 1] : CODE : CL[S COL2+1 9999]
END ELSE NO MORE CHANGES = 1
REPEAT
PRINT CL ; LINE CTR += 1
IF LINE CTR = PAGE LEN$ THEN
IF FIRST PASS THEN
PRINT BIN2 ; FIRST PASS = 0
END ELSE PRINT CHAR(12)
LINE CTR = 0 ; *Reset line count
END
NEXT
PRINT CHAR(12) ; PRINTER OFF
RETURN

GET CODES:
LOCATE CODE IN V USING @FM SETTING POS THEN
CODES = ""
NEW CTR = COUNT(PRIN CODES " ") + 1
FOR BX = 1 TO NEW CTR
CODES :=CHAR(FIELD(PRIN CODES " " BX))
NEXT
END
RETURN


(Volume 1 Issue 5 Pages 4 9)
[revmedia/copyrigh.htm]

Page last modified: 30/01/03