devexpress asp.net pdf viewer : Delete pages from pdf online software application cloud windows winforms web page class apple_iigs_technical_notes_80-912-part695

Apple II
GS
#82:  Controlling the Control Manager
1 of 1
Apple II
Technical Notes
Developer Technical Support
®
Apple II
GS
#82: Controlling the Control Manager
Revised by: Matt Deatherage
November 1990
Written by: Dave Lyons
May 1990
This Technical Note describes an anomaly in the NewControl2 call in System Software 5.0.2
and provides a solution.
Changes since May 1990:  Noted that System Software 5.0.3 fixes this anomaly.
This Note formerly advised of a problem with NewControl2—the current port was not set
before adding the controls, which gave unpredictable results.  System Software 5.0.3 and later fix
this problem.
Delete pages from pdf online - software application cloud:C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use C# Code to Extract PDF Pages, Copy Pages from One PDF File and Paste into Others
www.rasteredge.com
Delete pages from pdf online - software application cloud:VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Detailed VB.NET Guide for Extracting Pages from Microsoft PDF Doc
www.rasteredge.com
Apple II
GS
#83:  Resource Manager Stuff 
1 of 6
Apple II
Technical Notes
Developer Technical Support
®
Apple II
GS
#83: Resource Manager Stuff
Revised by: Matt “Even less of a middle name” Deatherage
May 1992
Written by:
Dave Lyons
May 1990
This Technical Note answers your miscellaneous Resource Manager questions.
Changes since December 1991:  Added several notes pertaining to System Software 6.0 and a
note about making Resource Manager calls from a resource converter.  Added new  discussion
about how “changed” is really a resource attribute.
UniqueResourceID
In System Software 5.0.4 and earlier, calling UniqueResourceID with an IDRange value of
$FFFF does not work reliably.  It sometimes returns a system-range ID ($07FFxxxx) if there are
already system-range resources of the specified type present in the current search path.
If you are using a development utility that generates resource IDs  using UniqueResourceID,
check the results to make sure no system-range resource IDs  are being used  by accident.  This
problem is fixed in System Software 6.0.
What SetCurResourceFile Does
SetCurResourceFile is documented in Chapter 45 of  the Apple II
GS
Toolbox Reference,
Volume 3 (see especially “Resource File Search Sequence” near the beginning of the chapter).
This explanation might make you think SetCurResourceFile rearranges the search path, but it
does  not;  instead,  it  just  makes  searches  start  at  a  different  place  in  the  path.
SetCurResourceFile is useful for controlling what  resource  files  are  searched, not  for
changing the search order.
How the Toolbox Uses Resources as Templates
The toolbox uses several types of resources as templates for creating other objects.   Examples
include  rControlList, rControlTemplate, and rWindParam1.   The  toolbox
automatically releases these resources from memory as soon as it is through with them, so there is
no need to create your template resources  with special purge levels in  an  effort to  free more
memory.  It is not a problem.
software application cloud:VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
Easy to delete PDF page in .NET WinForms application and ASPX webpage. Enable specified pages deleting from PDF in Visual Basic .NET class.
www.rasteredge.com
software application cloud:C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
able to delete PDF page in both Visual C# .NET WinForms and ASP.NET WebForms project. Free online C# class source code for deleting specified PDF pages in .NET
www.rasteredge.com
Apple II Technical Notes
Apple II
GS
2 of 6
#83:  Resource Manager Stuff
Using Resources From Window Update Routines
In System Software 6.0 and earlier there is no special code to set the current resource application
when the system calls an application window update routine (See Apple II
GS
Technical Note #71
for notes on NDAs and the current resource application).
To avoid a situation where a window update routine  cannot  get  needed  resources,  obey  the
following rules:
1. Application window update routines must either (a)  assume  that  the  resource
application has the same value it had when the window was created, or (b) save, set,
and restore the  current resource  application, using  GetCurResourceApp and
SetCurResourceApp.
2. NDAs that start the Resource Manager must not call application window update
routines, and they must not cause application window update routines to be called
(for example, if an NDA calls TaskMaster to handle a modal dialog or movable
modal dialog, the tmUpdate bit in wmTaskMask must be off).
CurResourceApp in InfoDefProcs and Custom Windows
The current resource application has no guaranteed value when an information bar  definition
procedure or custom window definition procedure gets control.  These must always save, set, and
restore  the  current  resource  application  using  GetCurResourceApp and
SetCurResourceApp.
StartUpTools Opens Resource Forks Read-Only
When StartUpTools opens your application’s resource fork, by default it opens it with read-
only access.   If your application needs  to  make  changes to  the  resources on  disk  in  System
Software 5.0.4 and earlier, you need to close the fork and reopen it with read and write access.  To
close it,  use GetCurResourceFile and CloseResourceFile; to reopen it,  use
LGetPathname2 and OpenResourceFile.
Note: You must update the resFileID field in the StartStop record if you close and
reopen your resource fork.  CloseResourceFile disposes the handles of  any
resources  in  memory  from  the  file  you’re  closing,  so  you  must  call
DetachResource on any resources  you need to  keep.    (If  you  pass  an
rToolSTartup resource to  StartUpTools, the system detaches it  for  you
automatically.)
In System Software 6.0 and later, setting bit 3 ($0008) of the startStopRefDesc tells the Tool
Locator  to open  your  resource  fork  with  all  allowed permissions  instead  of  with  just  read
permission.
software application cloud:C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
C# view PDF online, C# convert PDF to tiff, C# read PDF, C# convert PDF to text, C# extract PDF pages, C# comment annotate PDF, C# delete PDF pages, C# convert
www.rasteredge.com
software application cloud:C# PDF Page Insert Library: insert pages into PDF file in C#.net
document files by C# code, how to rotate PDF document page, how to delete PDF page using C# .NET, how to reorganize PDF document pages and how
www.rasteredge.com
Developer Technical Support
May 1992
Apple II
GS
#83:  Resource Manager Stuff
3 of 6
Calling StartUpTools From a Shell Application (File Type $B5, EXE)
In System Software 5.0.4 and earlier, StartUpTools tries  to  open  the  current application’s
resource fork.  It determines the pathname of the “current  application” by  examining prefix 9:
and making a GET_NAME GS/OS call, but do not assume it will always construct the pathname this
way.  If you call StartUpTools from a shell application and expect it to open your EXE file’s
resource fork, you will be disappointed.
If GS/OS has launched your application, life is  good—usually, though, a shell has loaded your
shell application directly, so GET_NAME returns the name of the shell instead of the name of your
application file.
To open your shell file’s resource fork, call ResourceStartUp, get the pathname by calling
LGetPathname2 on your user  ID,  and  pass  the  pathname  to  OpenResourceFile.
StartUpTools uses this strategy all the time in System Software 6.0 and later, meaning you
don’t have to.
What’s NIL in a Resource Map?
The resource maps for open resource files are kept in memory, and the structure is defined in
chapter 45 of Apple II
GS
Toolbox Reference, Volume 3.
The resHandle field of  a resource reference record (ResRefRec) is defined as “Handle  of
resource in memory.  A NIL value indicates that the resource has not been loaded into memory.”
In this case, NIL means that the middle two bytes of the four-byte field are zero.  In other words, a
NIL entry in the resource map may have a non-zero value in the low-order byte.
LoadResource and SetResLoad(FALSE)
When you call LoadResource on a locked or fixed resource and SetResLoad is set to FALSE,
you may get Memory Manager error $0204 (lockErr), because the Resource Manager tries to
allocate a locked or fixed zero-length handle, which the Memory Manager does not permit.
Adjusting the Search Depth
If you wish to add some resource files to the beginning of a resource search path and adjust the
depth  so  that  the  end  point  of  the  search  is  unchanged,  it’s  tempting  to  use
SetResourceFileDepth(0) to get the current depth, add one, and set this new depth with
SetResourceFileDepth.
The problem is that the search depth is often -1 ($FFFF),  meaning “search  until the end of  the
chain.”  If you add your adjustment to -1, you do not usually get the intended effect.  A solution is
just to check for $FFFF and not adjust the depth in that case.
CurResourceApp after ResourceShutDown
After a ResourceShutDown call, the current resource application is always  $401E.    (The
Resource Manager starts itself up at boot time with its own memory ID, $401E.  Do not ever call
ResourceShutDown while the current resource application is $401E.)
software application cloud:VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
add and insert one or multiple pages to existing adobe PDF document in VB.NET. Ability to create a blank PDF page with related by using following online VB.NET
www.rasteredge.com
software application cloud:C# HTML5 PDF Viewer SDK to view PDF document online in C#.NET
C# view PDF online, C# convert PDF to tiff, C# read PDF, C# convert PDF to text, C# extract PDF pages, C# comment annotate PDF, C# delete PDF pages, C# convert
www.rasteredge.com
Apple II Technical Notes
Apple II
GS
4 of 6
#83:  Resource Manager Stuff
Restoring the CurResourceApp
If you need to  start  up  and  shut  down  the Resource Manager  without disturbing the current
resource  application,  call  GetCurResourceApp before ResourceStartUp, and  call
SetCurResourceApp to restore the old value after ResourceShutDown.
It does not help to call GetCurResourceApp after ResourceStartUp, since the application
just started up is always the current resource application.
Shell programs  which start  the Resource Manager need to  call SetCurResourceApp after
regaining control from a subprogram (for example, an EXE file) which may have started and shut
down the Resource Manager, leaving the current resource application set to $401E instead of  the
shell’s ID.
Shell programs that do not start the Resource Manager have nothing to worry about.  In this case
the  current  resource  application  is  normally  $401E,  so  when  a  subprogram  calls
ResourceShutDown life is still wonderful.
What Information is Kept For Each Resource Application?
When you switch resource applications with SetCurResourceApp, that takes care of all the
application-specific information the Resource Manager has.
There  is  no  need  to  separately  preserve  the  current  resource  file,  the  search  depth,  the
SetResourceLoad setting, or any application resource converters that are logged in.  All of this
information is already recorded separately for each resource application.
“Changed” is a Resource Attribute
This seems obvious when first reading the documentation, but it has a consequence that isn’t  so
obvious.
If  you  mark  a  resource  as  changed  with  MarkResourceChanged and  later  use
SetResourceAttr to change that resource’s attributes, you must include resChanged in the
attributes you specify or the Resource Manager does not still know the resource has changed.
This means you can undo a MarkResourceChanged call, but it also means you need to preserve
the resChanged bit across SetResourceAttr calls if you don’t want to accidentally achieve
the same effect.
The Resource Manager clears the resChanged attribute when a resource is written to disk; the
attribute indicates the data in memory is more recent than what’s on disk.  Normally, adding a
resource with AddResource sets this bit because the resource isn’t actually written to disk until
the resource file is updated.
However, if AddResource has to make the file longer (by extending the EOF), it  writes the
resource  to  disk  immediately.   This  means  that  in  some  cases,  a  resource  added  with
AddResource will be properly added but the resChanged attribute will not be set.  Don’t  be
confused if this happens to you.
software application cloud:VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
RasterEdge. PRODUCTS: ONLINE DEMOS: Online HTML5 Document Viewer; Online XDoc.PDF C# File: Split PDF; C# Page: Insert PDF pages; C# Page: Delete PDF pages;
www.rasteredge.com
software application cloud:VB.NET PDF - Convert PDF Online with VB.NET HTML5 PDF Viewer
C# view PDF online, C# convert PDF to tiff, C# read PDF, C# convert PDF to text, C# extract PDF pages, C# comment annotate PDF, C# delete PDF pages, C# convert
www.rasteredge.com
Developer Technical Support
May 1992
Apple II
GS
#83:  Resource Manager Stuff
5 of 6
Making Resource Manager Calls From Resource Converters
Don’t.   This would be a  first-class example of  reentrancy, and  the  Resource  Manager  is  not
reentrant in any class.
Who Owns Handles Passed to AddResource?
When you pass a handle to AddResource, the Resource Manager is responsible for the handle
unless AddResource returns an error.  Once you call AddResource, the handle belongs to the
Resource Manager and you must treat it like you would the handle to any other resource.
Named Resource Bugs in System Software 6.0
The new-for-6.0 Resource Manager function RMFindNamedResource compares the resource
name you requested to named resources incorrectly.  The comparison algorithm doesn’t compare
the lengths of the strings before starting to compare the characters.  This means, for example, that if
you request  a  resource  named “Raymond”  and  the  Resource  Manager  encounters  a  named
resource named “Raymond” first, it will return the resource named “Raymond”  instead.  This
anomaly also affects the HyperCard II
GS
named-resource XCMD callback functions, even though
they don’t use the Resource Manager’s named-resource calls.
This anomaly also affects RMLoadNamedResource, which calls RMFindNamedResource.
Debugging Information
The following information is provided for  your  convenience during  program development.   It
allows you to check exactly what user IDs are using the Resource Manager, what files are in their
search paths, and what resource converters are logged in.
Do not depend on this information in your program; it is subject to change in future versions of the
Resource Manager.
All the Resource Manager’s data structures are rooted in the Resource Manager tool set’s  Work
Area Pointer (WAP).  To get the Resource Manager’s WAP, call GetWAP (in the Tool Locator)
with userOrSystem = $0000 and tsNum = $001E.
The WAP value is a handle to the Resource Manager’s block of global data.   Several interesting
areas in this block are listed below.
+$0A2
curApp
Word
Offset  into  the  globals  block  of  the  current  resource
application’s Application Record.
+$2B0
sysFile
Long
Handle of system file map, or NIL if none.
+$2B4
sysConvertList Long
Handle of system converter list, or NIL if none.
+$2B8
appList
20*n  bytes List of Application Records (20 bytes each).
Each Application Record has this format:
+000
appFlag
Word
0=entry available, 1=entry used, $FFFF = end of array.
+002
appID
Word
User ID of application.
+004
appFiles
Long
Handle of application’s first resource map, NIL=none.
+008
appCur
Long
Handle of application’s current resource map, NIL=none.
+012
appConverters Long
Handle of application’s converter list, NIL=none.
+016
appReadFlag
Word
1=read resources, 0=don’t read (SetResourceLoad).
software application cloud:VB.NET PDF - Annotate PDF Online with VB.NET HTML5 PDF Viewer
VB.NET PDF - Annotate PDF Online with VB.NET HTML5 PDF Viewer. Explanation about transparency. VB.NET HTML5 PDF Viewer: Annotate PDF Online. This
www.rasteredge.com
software application cloud:C# HTML5 PDF Viewer SDK to convert and export PDF document to
C# view PDF online, C# convert PDF to tiff, C# read PDF, C# convert PDF to text, C# extract PDF pages, C# comment annotate PDF, C# delete PDF pages, C# convert
www.rasteredge.com
Apple II Technical Notes
Apple II
GS
6 of 6
#83:  Resource Manager Stuff
+018
appFileDepth
Word
Number of files to search in this path.
Converter lists have this format:
+000
n
Word 
Number of entries in the table (entries can be unused).
+002 
theConverters 6*n  bytes List of converter entries (6 bytes each).
Each Converter entry has this format:
+000
resType
Word
Resource type for this converter ($0000 for unused entry).
+002
convAddress
Long
Address of resource converter.
The format for a  resource map  is described  starting  on  page 45-17  of  Apple  II
GS
Toolbox
Reference, Volume 3.
Remember, don’t depend on this information in your application; use it during debugging, and use
it to write debugging utilities.
Further Reference
• Apple II
GS
Toolbox Reference, Volume 3
• Apple II
GS
Technical Note #71, DA Tips and Techniques
Apple II
GS
#84:  TaskMaster Madness
1 of 5
Apple II
Technical Notes
Developer Technical Support
®
Apple II
GS
#84: TaskMaster Madness
Written by: C.K. Haun <TR>
July 1990
This Technical Note discusses the enhancements made to TaskMaster in System Software
5.0.
TaskMaster  has  been  expanded  to handle extended  control actions  and  give  you more
information about events in System Software 5.0.   This Note discusses some features of the
expanded TaskMaster and TaskMasterDA, and how you can best exploit the new features
in your applications.
Stop Making It So Difficult
Developers  just  want  to  work  too  hard.   You  get  a  neat  new  thing  like  the  expanded
TaskMaster, and you still want to do all the work yourself.  The new TaskMaster does
nearly everything for you, as long as you treat it correctly.
What  this  means  is  you  do  not  have  to call FindControl, TrackControl, TEIdle,
LEKey, handle keystrokes for controls, keep track of click counts, or any of the other mundane
event management tasks unless you specifically want to perform actions that TaskMaster does
not perform.   For the standard controls and situations this means that you do not have to do
anything.
The magic keys to this life of freedom and ease are the five newly defined taskMask flag bits,
labeled in the interfaces as tmContentControls, tmControlKey, tmControlMenu,
tmMultiClick and tmIdleEvents.  This Note looks at what the new bits do for you, but
first a word of warning.
Warning:
If you set any of these new bits, TaskMaster assumes you are using the
new extended task record.   This means that you cannot just go into an
older  program  and  set  these  bits  and  expect  your  program  to  work
successfully.  You also must allocate the additional space for the extended
portion of the task record.  If you do not, TaskMaster puts task data in
areas that you do not expect, and Bad Things happen.
Apple II Technical Notes
2 of 5
#84:  TaskMaster Madness
Bits ’o This, Bits ’o That
Click Bits
tmMultiClick tells TaskMaster to keep the new “click information” fields in the extended
task record updated.  This allows you to have TaskMaster keep track of multiclick events; the
wmClickCount field is one, two or three depending on whether the last action was a single,
double, or triple click.   In fact, if you can click your mouse button fast enough, you can time
quadruple clicks, sextuple clicks, or as high as you want, although anything over triple-clicking
is nearly impossible for users to consistently manage.  wmClickCount just gets incremented
by one when the click falls within the double time interval.  wmLastClickTick is updated
with the system tick value at last click.   wmLastClickPt  contains the location of the last
mouse click.   TaskMaster calls GetDblTime  internally to determine  the correct time
intervals for these values.
Idle Bits
tmIdleEvents tells TaskMaster to call the idle routines for controls that need idle events,
like TextEdit controls and LineEdit controls.   This also means that only the active control is
blinking a cursor, since TaskMaster is working with the target bits of the extended control
records to keep track of which TextEdit or LineEdit control is active and switching the target
control in response to mouse clicks and Tab keypresses.  This is also the area where you tell
TaskMaster how to  highlight  your  window controls.   Using  the  Control  Manager  calls
MakeNextCtlTarget and MakeThisCtlTarget allows you to specify which LineEdit or
TextEdit control is active.  You can use these calls to highlight input errors the user has made.
For example, if someone has entered text in a LineEdit control that requires a number, you can
alert the user if he enters non-numeric characters with an Alert or AlertWindow call.  You
can  then  direct  the  user  to  the  LineEdit  control  that  contains  the  bad  entry  by  calling
MakeThisCtlTarget with the handle of that LineEdit control.  This deactivates any other
target control and moves the insertion point to the LineEdit control that needs the correction.
Contentious Bits
tmContentControls, tmControlMenu  and tmControlKey  bits  are  the  real
workhorses of the expanded TaskMaster.
When the tmContentControls  and  tmControlMenu  bits are set, TaskMaster
handles the mouse activity side of events—tracking, highlighting or popping-up the selected
control.  If the control is a radio button, check box, pop-up menu or list control, TaskMaster
also performs the correct action for the click, either setting the control value, scrolling the list,
setting  the  pop-up  menu  to  the  selected  item,  and  so  on.   TaskMaster  then  returns  a
taskCode of wInControl ($21).  The control handle is stored in wmTaskData2, the part
code of the part selected in wmTaskData3 and the control ID is in wmTaskData4.  For many
of the controls in your windows your application needs to take no further actions, TaskMaster
has set the control values.  When the user closes the window or clicks on a button that causes an
action, you can then read the values of all the controls you care about at that point and do what
you need to do, instead of keeping track as the user manipulates controls.
Developer Technical Support
July 1990
Apple II
GS
#84:  TaskMaster Madness
3 of 5
The last new bit, tmControlKey, works with the tmControlMenu bit to handle key events
for your extended controls.
When  a  key  event  occurs,  TaskMaster  sends  the  event  to  the  internal  routine
TaskMasterKey.  TaskMasterKey first looks at the tmMenuKey bit (which has been in
TaskMaster since the Window Manager was implemented).  If it is set, then TaskMaster
tries to handle the event as a menu event, calling MenuKey for the current menu bar.
Note: This also means that any key equivalents in your main menu bar (across the top of
the desktop) take precedence over key equivalents in your window controls.
If this fails (or that bit is not set) and tmControlKey is set, then TaskMasterKey polls the
controls in the currently open window for any controls that would like this keystroke, either for
controls with a keyEquivalent field or a pop-up menu control with key equivalents for menu
items.  If it finds a control that wants the key event, it is handled very much like a mouse event.
The  action  for  the  control  is  performed  (checking  a  check  box,  for  example)  and  the
wmTaskData  fields  are filled  as they  would be for  a mouse click, and an event code  of
wInControl ($21) is returned. If a key event did occur, you can differentiate it from a mouse
event by looking at the wmWhat field of the taskRecord.   Even though a wInControl
event code was passed back by TaskMaster, the wmWhat field is either $0001 or $0003, the
former for a mouse down event and the latter if a keystroke stimulated the wInControl event.
Even More Bits
All these new features rely very heavily on the changes made to the Control Manager in System
Software 5.0.  Many of the TaskMaster features, keystrokes, target controls, and so on only
work if you have  the moreFlags bits set correctly in your control definitions.   If you are
having difficulty with new TaskMaster features, check your control definitions against the
information in the Control Manager chapter of Volume 3 of the Apple II
GS
Toolbox Reference
and Apple II
GS
Technical Note #81, Extended Control Ecstasy.
Don’t Get Goofy
There are some dangers in these new features, of course.  By allowing built-in key equivalencies
for  almost  all  the  controls  that  can  exist  in  a  window,  it  may  be  tempting  to  define  key
equivalents for everything, and create weird and unusual key combinations for your controls.
Please  remember the Human  Interface  Guidelines  (specifically  Human  Interface  Note  #8,
Keyboard  Equivalents)  and  keep  your  use  of  keystroke  equivalents  to  a  minimum.
Multimodifier keystrokes  (Command-Option-Shift,  for  example)  do not  enhance  the  user’s
experience and can be very confusing.
NDAs Can Have Fun Too
Documents you may be interested
Documents you may be interested