Dec 092017
 
Nice PD library of TC-callable menu, window and data input routines.
File TCU_31.ZIP from The Programmer’s Corner in
Category C Source Code
Nice PD library of TC-callable menu, window and data input routines.
File Name File Size Zip Size Zip Type
AA-READ.ME! 6822 2610 deflated
BUTTON.C 2213 887 deflated
BUTTON.CUF 354 219 deflated
BUTTON.EXE 46361 29794 deflated
DEMO.C 11038 2939 deflated
DEMO.EXE 50157 31477 deflated
FCOMP.DOC 25235 6873 deflated
FCOMP.EXE 45765 28546 deflated
FSHOW.EXE 49657 31790 deflated
PULLDOWN.C 7054 1315 deflated
PULLDOWN.CUF 629 304 deflated
PULLDOWN.EXE 47389 30169 deflated
SAMPLE.CUF 2525 713 deflated
SELECT.C 1513 587 deflated
SELECT.EXE 45143 29153 deflated
TCU.DOC 71684 16226 deflated
TCU.H 21522 3890 deflated
TCU_C.LIB 51712 19572 deflated
TCU_CPP.LIB 1536 528 deflated
TCU_H.LIB 52736 20520 deflated
TCU_L.LIB 53248 20117 deflated
TCU_M.LIB 47104 19258 deflated
TCU_S.LIB 45568 18744 deflated
WINDOWS.C 1815 596 deflated
WINDOWS.EXE 13667 8789 deflated

Download File TCU_31.ZIP Here

Contents of the FCOMP.DOC file



Turbo-C Utilities - Forms Compiler, V3.1
========================================


Foreword
--------

Suggestions, comments and complaints (hopefully not the latter!) will be
accepted electronically to:

Karl Keyte
European Space Operations Centre
Robert-Bosch Strasse 5
D-6100 Darmstadt
West Germany

Voice : +(49) 6151 902041 (Business)
+(49) 6150 2499 (Private)
e-Mail : [email protected]
Bix : kkeyte




Disclaimer
----------

No responsibility taken for anything which may result from using the forms
compiler. If anything unusual _does_ result, I'd be interested to know!


Operation
---------

Function : The forms compiler is used to convert a form source file into
either an internal format object file or a real relocatable
object file which may be linked with your application. The
former offers flexibility in that the form specification
may be changed without recompiling or linking the application
and the resulting executable size is likely to be smaller as
it does not contain the form body itself. An internal format
object file (default extension .CFO) is loaded with the
service 'load_form'. Relocatable object units allow an
application to be completely standalone, embodying any forms
which it requires in the executable image. The disadvantage
is that if the form is changed, the application must be
relinked with the new form object. The applications are also
larger as the body of the form takes part of the image. The
service 'load_image_form' is used to load a form which has
been linked as an object into the application. 'unload_form'
is used to free the form (and hence memory) regardless of the
type of object chosen.

The forms compiler does a thorough parsing and error reporting
of the source form. If an error is detected no object form is
generated. See 'Return Value' in the TCU users guide under
'load_form' for further information.


Syntax : fcomp [Object-filename]

Extensions default to .CUF for the source file, .CFO for an
internal format object file and .OBJ for a relocatable object
file.

Options are:

/keep
Instructs the compiler to keep the intermediate .CFO
file when a relocatable object file (.OBJ) is being
generated. If the option '/nokeep' is used when only
an internal format object (.CFO) file is being generated,
it will be deleted, forcing the compiler to perform only
a syntax check of the form specification.

/loadname=PUBLIC_NAME
Tells the compiler to produce a relocatable object file
with the specified public symbol name. This name is
used in the application program to reference the form.
The '/object' option is automatically forced when this
option is specified. All loadnames are CASE SENSITIVE!


/memory
Display memory load statistics about the form. This
displays two values: the first is the number of bytes of
memory required after issuing a 'load_form' or a
'load_image_form' service call; the second the number of
bytes required while the form is actually displayed on
the screen. Note that the amount of actual dynamic memory
required is the same with both services.

/object
Directs the compiler to produce a relocatable object file
(.OBJ) rather than an internal format object file (.CFO).
If the '/keep' option is specified together with the
'/object' option, both types of object will be generated.

/verbose
Displays information about the fields within the form as
it is being compiled.


Output : The forms compiler outputs an error list if errors were
detected. If no errors were detected, an object file is
generated.


Source Format
-------------

The CUF file defines the structure, size and attributes of the form and its
fields. It comprises lines which identify form elements. Blank lines may be
used to increase clarity and comments may be added. Comments must start with
the '!' character. All characters following the comment identifier will be
ignored.

Lines may be continued on more than one file line by placing the '&' symbol
at the end of a source line. This takes the following line as part of the
same logical line.

The following elements may be used to define the form. Spaces are not
significant, though each element must use only one line which may be up to 255
characters long:

SIZE = ,

The width and height include a perimeter box, meaning that
they specify the absolute size of the form as it will
appear. If any field positioning element contradicts the
specified form size, the form will not load.

TYPE =

The linestyle is SINGLE,DOUBLE or BLANK to define whether
the form should appear in a single or double lined perimeter
box, or surrounded only by blank spaces.

COLOUR = /

This definition defines the colour of the form text and
background. The background colours are:

Black, Blue, Green, Cyan, Red, Magenta, Brown,
LightGray

The foreground colours include the above and in addition:

DarkGray, LightBlue, LightGreen, LightCyan, LightRed,
LightMagenta, Yellow, White

INPUT = /

These colours are used for input field areas. The colours
are as above.

TCOLOUR = /

These colours are used for the form title string (if one is
used). The colours are as above.

TITLE = ""<br /><br /> Defines the title to be used in the form. The default is for<br /> no title.<br /><br /> TEXT = @<x>,<y>; [<colour-definition>;] "<body of text>"<br /><br /> Defines a fixed text string to be displayed in the form.<br /> 'x' and 'y' specify the coordinates of the start of the<br /> text relative to the top-left corner of the INNER form.<br /> The INNER form is defined as the usable part of the form,<br /> i.e. that area which excludes the perimeter box.<br /><br /> COLOUR = <foreground>/<background><br /><br /> Sets the field colour to the new colour instead of the<br /> default set with the main 'COLOUR=' keyword.<br /><br /><br /> FIELD = @<x>,<y> [;NAME=<name>] ;<field-type> [;<attributes>]<br /><br /> Defines an input field area on the form. 'x' and 'y' are as<br /> for the TEXT operator. 'NAME=...' allows an optional name to<br /> be given to a field for use with 'get_field_id' and may be<br /> up to 8 characters in length. Case is not significant.<br /> 'field-type' must be specified is one of the following:<br /><br /> String Numeric Date Logical Choice<br /><br /> Each type may (and in the case of string, numeric and<br /> choice types, must) take modifiers which are enclosed in<br /> brackets. The following are valid modifiers:<br /><br /> String (NN) : Where NN represents the length of<br /> the field.<br /><br /> Numeric (NN) : Integer field, length NN<br /> Numeric (NN,D) : Floating point field, NN long with<br /> D decimal places.<br /><br /> Date : Date field<br /> Date (DayFirst) : Date has day number first (default)<br /> Date (MonthFirst) : Date has month number first<br /><br /> Logical : Logical field<br /> Logical (YesNo) : Use Yes/No mnemonics<br /> Logical (TrueFalse) : Use True/False mnemonics<br /> Logical (OnOff) : Use On/Off mnemonics<br /> Logical (Full) : Use full mnemonic, not just single<br /> letter. The 'Full' keyword may be<br /> used with one of the other options<br /> as in 'Logical (OnOff, Full)'<br /><br /> Choice (NN) = "<list>" : Where NN represents the length of<br /> the field. List represents the<br /> list of choices using the '|'<br /> character as a separator.<br /> E.G. Choice(6)="One|Two|Three"<br /><br /> Button = "<name>" : Where <name> represents the name<br /> displayed for the button in the<br /> form. <br /><br /> Attributes relate to field initial values, ranges and string<br /> templates. The following are valid attributes:<br /><br /> Range (<minimum>,<maximum>)<br /><br /> Valid only for Numeric and Date fields. If either the<br /> minimum or maximum (but not both!) are omitted, there<br /> will be no check at this end of the range. The specified<br /> values must be of the type of the field. For date<br /> ranges, the keywords 'Yesterday', 'Today' and 'Tomorrow'<br /> are valid, as in:<br /><br /> Field = @3,3; Date (MonthFirst); Range (,Today)<br /><br /><br /> Value=<value><br /><br /> Sets an initial value for the field. This is valid for<br /> all types, and the specified value must be of the type<br /> of the declared field. String values must be enclosed<br /> in quotes. If a range is specified, it must be first,<br /> and the value must be within the specified range. For<br /> Choice types the value is an integer specifying the<br /> ordinal choice number, i.e. 3 represents the third<br /> item in the choice list.<br /><br /> Template=<template-string><br /><br /> Sets a template for a string field. A template defines<br /> the valid characters at the corresponding positions in<br /> the string. The following template characters are valid:<br /><br /> 'a' : Allows alphanumeric characters only<br /> 'A' : As 'a', but forces alphabetic characters to<br /> uppercase.<br /> '!' : Allow any character, but force alphabetic<br /> characters to uppercase.<br /> '#' : Allow only numeric characters and '.' and '-'<br /><br /> Any other character allows any input character<br /> in the string.<br /><br /> Character deletion and insertion may not be performed in<br /> a portion of a string field where a template applies.<br /> This means that a template of "!!!!" will not allow the<br /> insertion or deletion of characters in the first 4<br /> positions. If the input field is larger that the template<br /> insertion and deletion may be performed in the positions<br /> after the template length.<br /><br /> The template string must be enclosed in quotes.<br /><br /> Colour = <foreground>/<background><br /><br /> Sets the field colour to the new colour instead of the<br /> default set with the 'INPUT=' keyword.<br /><br /> NoEnter<br /><br /> Sets the field as read-only by disabling the edit<br /> cursor entering the field. May be changed with the<br /> 'set_field_mode' function.<br /><br /> REPEAT = <repeat_count><br /> ENDREPEAT<br /><br /> The REPEAT/ENDREPEAT statements allow repetition of a block<br /> of form declarations. This is particularly useful for tables<br /> and other structures which require repeated fields and/or<br /> text. The first entry following the REPEAT is used to<br /> determine the starting row of the repetitions. Rows are<br /> incremented automatically by 1 implying that all repeated<br /><br /><br /> fields must be on the same line. If the fields require names,<br /> the symbol '##' may be inserted into the name. This will be<br /> replaced with the repetition number during compilation. The<br /> following is an example repeat section:<br /><br /> REPEAT = 10<br /> TEXT = @10,5; "Entry :"<br /> FIELD = @18,5; Name=ENTRY_##; Numeric(2)<br /> ENDREPEAT<br /><br /> This extract would produce ten fixed text fields and ten<br /> numeric input fields named ENTRY_01 to ENTRY_10.<br /><br /> Repeat clauses may not be nested, and each REPEAT must have<br /> a corresponding ENDREPEAT.<br /><br /><br />Error Report<br />------------<br /><br />The following is a complete list of compile-time errors and a description of<br />the meaning.<br /><br /><br />Message: '=' sign expected<br /><br />Meaning: Each identifier in the CUF form is followed by a '=' sign according<br /> to the syntax described in the above section.<br /><br /><br />Message: Bad or missing button select text<br /><br />Meaning: The button select text was either not present or not enclosed in<br /> quotes.<br /><br /><br />Message: Bad or missing choice field length<br /><br />Meaning: The length of a choice field was not specified or specified<br /> incorrectly.<br /><br /><br />Message: Bad or missing choice selectors in choice type declaration<br /><br />Meaning: A choice type does not contain a valid list of selectors, or the<br /> selector string is incorrectly delimited, i.e. not quoted.<br /><br /><br />Message: Bad or missing numeric field length<br /><br />Meaning: A numeric field must have its length specified. A line in the<br /> source file violated this rule.<br /><br /><br />Message: Bad or missing repetition count in REPEAT statement<br /><br />Meaning: A REPEAT clause was specified with an invalid or missing repetition<br /> count.<br /><br /><br />Message: Bad or missing string field length<br /><br />Meaning: All string fields must specify a length. A line in the source file<br /> violated this rule.<br /><br /><br />Message: Bad or missing text literal in TEXT specification<br /><br />Meaning: A TEXT specification requires a screen location and a text literal<br /> (in quotes). A line in the source file was found to be missing the<br /> literal, or the literal was invalid.<br /><br /><br />Message: Choice type option is too large for specified field size<br /><br />Meaning: A choice selector item is longer than the specified field size for<br /> the field.<br /><br /><br />Message: COLOUR or INPUT identifier not specified before FIELD or TEXT<br /><br />Meaning: The colours must be specified fully before the first FIELD or TEXT<br /> keyword.<br /><br />Message: ENDREPEAT without REPEAT<br /><br />Meaning: An ENDREPEAT statement was encountered when no REPEAT block was<br /> active.<br /><br />Message: Error opening form CUF file for Input<br /><br />Meaning: The CUF file could not be opened. This normally indicates that the<br /> specified file does not exist, though it could indicate a problem<br /> with the media.<br /><br /><br />Message: Field name already defined<br /><br />Meaning: A field name has already been given to the field. A second<br /> definition is not permitted.<br /><br /><br />Message: Field name is already defined for another field<br /><br />Meaning: Another field has already been defined with the name field name.<br /> A field name is 1-8 characters, case insensitive.<br /><br /><br />Message: Field name too long (>8 characters)<br /><br />Meaning: A field name may be from 1 to 8 characters in length.<br /><br />Message: Field position (@x,y) not first specifier in declaration<br /><br />Meaning: The location of a field in a form must be the first specification<br /> in the source line after the FIELD= or TEXT= keywords.<br /><br /><br />Message: Field size is too large for choice type field<br /><br />Meaning: The specified field size is too large for a choice type, i.e.<br /> more than 20 characters.<br /><br /><br />Message: Field type not specified<br /><br />Meaning: All FIELD operation lines must contain a specification of the type<br /> of the field.<br /><br /><br />Message: Field value specified in VALUE lies outside valid user range<br /><br />Meaning: An initial value (if present) must be valid according to the user<br /> specified range.<br /><br /><br />Message: Field would lie outside form area<br /><br />Meaning: The positioning and length of the field would cause at least part<br /> of the field to lie outside the form area.<br /><br /><br />Message: Form title string too large for form width<br /><br />Meaning: The form title string is too large for the width specification<br /> made with the SIZE keyword. It may be a maximum of 6 characters<br /> less than the form width.<br /><br /><br />Message: Illegal syntax in range parameter(s)<br /><br />Meaning: Syntax error in RANGE specification. See description of CUF source<br /> format above.<br /><br /><br />Message: Invalid date constant specified in VALUE declaration<br /><br />Meaning: The date constant specified in the VALUE section is invalid. Check<br /> date keywords such as 'DayFirst' and 'MonthFirst'.<br /><br /><br />Message: Invalid date specified in range<br /><br />Meaning: The date constant specified in the RANGE section is invalid. Check<br /> date keywords such as 'DayFirst' and 'MonthFirst'.<br /><br /><br />Message: Invalid form type in TYPE specifier<br /><br />Meaning: Form type may be SINGLE or DOUBLE. An invalid type was specified.<br /><br /><br />Message: Invalid integer specified in VALUE declaration<br /><br />Meaning: The integer specified for a VALUE is invalid. Check against the<br /> specified field length, remembering possible negative values.<br /><br /><br />Message: Invalid logical constant specified in VALUE declaration<br /><br />Meaning: A logical value is invalid. Check that the value specification<br /> matches with the logical mode. For example, a value of TRUE may<br /> not be assigned to a logical field of type YESNO.<br /><br /><br />Message: Invalid string syntax for specification of form title<br /><br />Meaning: The string specified for the form title is of an invalid length or<br /> is not enclosed in quotes.<br /><br /><br />Message: Invalid VALUE for choice item or out of range of choices<br /><br />Meaning: The initial VALUE specified for a choice type is invalid. It was<br /> either incorrectly specified or is out of range for the number of<br /> selectors available.<br /><br /><br />Message: Maximum range specification too large for field<br /><br />Meaning: The maximum value in the RANGE specification is too large for the<br /> field size.<br /><br /><br />Message: Maximum range value is smaller than minimum<br /><br />Meaning: The maximum value in the RANGE specification is smaller that the<br /> minimum value.<br /><br /><br /><br />Message: Minimum range specification too large for field<br /><br />Meaning: The minimum value in the RANGE specification is too large for the<br /> field size.<br /><br /><br />Message: Minimum range specification too small for field<br /><br />Meaning: The minimum value in the RANGE specification is too small for the<br /> field size.<br /><br /><br />Message: Missing COLOUR or INPUT specification<br /><br />Meaning: The COLOUR and/or INPUT specifications were found to be missing and<br /> the defaults could not be located.<br /><br /><br />Message: Missing field position specifier<br /><br />Meaning: The field position specifier (@X,Y) is not present. This must<br /> follow the FIELD and TEXT keywords directly.<br /><br /><br />Message: Missing form size (SIZE) specification<br /><br />Meaning: A size specification must be present in every form. It is missing<br /> from this form definition.<br /><br /><br />Message: Missing or illegal colour in colour specification<br /><br />Meaning: A colour specification for COLOUR or INPUT is invalid. Either no<br /> colours have been specified, or those which are given are invalid.<br /><br /><br />Message: Missing or illegal colour in field colour specification<br /><br />Meaning: A colour specification in a field definition is invalid. Either no<br /> colours have been specified, or those which are given are invalid.<br /><br /><br />Message: Missing parameter(s)<br /><br />Meaning: General syntax error indicated that expected parameters are not<br /> specified. Check the syntax.<br /><br /><br />Message: Missing value in VALUE specification<br /><br />Meaning: A VALUE specification must contain an initial value.<br /><br /><br />Message: No more space for choice strings<br /><br />Meaning: Too many or too large choice selectors have been specified. They<br /> must be reduced or abbreviated.<br /><br /><br />Message: No range specified with RANGE<br /><br />Meaning: A RANGE specification must contain one or both of minimum and<br /> maximum values. A comma must separate them, even if one is not<br /> specified.<br /><br /><br />Message: Not string field type in attempt to declare TEMPLATE<br /><br />Meaning: The TEMPLATE keyword has been used for a field of a type other than<br /> String. This is invalid.<br /><br /><br />Message: Out of memory<br /><br />Meaning: Insufficient memory was available to compile the form.<br /><br /><br />Message: Range not permitted for specified field type<br /><br />Meaning: Ranges have no meaning for String or Logical fields.<br /><br /><br />Message: Redefinition of field range<br /><br />Meaning: The RANGE keyword was used more than once for a single field.<br /><br /><br />Message: Redefinition of field type<br /><br />Meaning: The field type has been specified more than once for a single<br /> field.<br /><br /><br />Message: REPEAT blocks may not be nested<br /><br />Meaning: A REPEAT statement was encountered inside an already active REPEAT<br /> block, i.e. no ENDREPEAT had been met.<br /><br /><br />Message: REPEAT without ENDREPEAT<br /><br />Meaning: A REPEAT statement had no matching ENDREPEAT statement when the<br /> end of file was reached.<br /><br /><br />Message: Repetition count in REPEAT is out of range<br /><br /><br />Meaning: The repetition count specified in the REPEAT statement was either<br /> 0 or too large.<br /><br /><br />Message: SIZE specification must appear before first FIELD or TEXT<br /><br />Meaning: The form SIZE keyword must appear before any active FIELD or TEXT<br /> items.<br /><br /><br />Message: String literal longer than field length<br /><br />Meaning: A string literal value may not exceed the field size in length.<br /><br /><br />Message: String literal not in quotes<br /><br />Meaning: All string literals must be enclosed in quotes (", NOT ')<br /><br /><br />Message: Syntax error in ENDREPEAT statement<br /><br />Meaning: The ENDREPEAT statement was followed by some unexpected text.<br /><br /><br />Message: Syntax error in field option specification<br /><br />Meaning: A field option must be enclosed in parentheses and conform to the<br /> syntax outlined in the previous section.<br /><br /><br />Message: Too many fields in form<br /><br />Meaning: Too many fields have been specified in the form - Each TEXT and<br /> each FIELD counts as a field to the compiler. Reduce the number,<br /> possibly by combining TEXT items which will on the same screen row.<br /><br /><br />Message: Too many parameters specified<br /><br />Meaning: Too many parameters were specified for an element. Check the<br /> syntax.<br /><br /><br />Message: Unrecognised CUF identifier<br /><br />Meaning: An invalid CUF file identifier was encountered, i.e. not one of<br /> BUTTON, CHOICE, COLOUR, DATE, FIELD, INPUT, LOGICAL, NAME, NOENTER,<br /> NUMERIC, TCOLOUR, TEXT, TITLE, TYPE, RANGE, SIZE, STRING, TEMPLATE,<br /> VALUE, '@'.<br /><br /><br />Message: VALUE specified for button type field<br /><br />Meaning: A VALUE clause is invalid for button type fields.<br /></div></div><br><br> <div id='jp-relatedposts' class='jp-relatedposts' > <h3 class="jp-relatedposts-headline"><em>Related</em></h3> </div> </div><!--/entry --> </div><!-- .entry-container --> <footer class="post-footer postdata fix"> </footer><!-- .post-footer --> <div class='postdata line'> <span class='line-date'><span class='icon'> </span>December 9, 2017</span> <span class="comments"><span class="icon"> </span><a href="#respond">Add comments</a></span> </div> <section id="comments"> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">Leave a Reply <small><a rel="nofollow" id="cancel-comment-reply-link" href="/list/C/TCU_31.ZIP/INFO/#respond" style="display:none;">Cancel reply</a></small> </h3> <form id="commentform" class="comment-form"> <iframe title="Comment Form" src="https://jetpack.wordpress.com/jetpack-comment/?blogid=30175801&postid=4298&comment_registration=0&require_name_email=1&stc_enabled=1&stb_enabled=1&show_avatars=1&avatar_default=mystery&greeting=Leave+a+Reply&greeting_reply=Leave+a+Reply+to+%25s&color_scheme=light&lang=en_US&jetpack_version=6.6.1&show_cookie_consent=10&has_cookie_consent=0&sig=d0ff9053e5ee9e273dfc7c395d5f31970aa8ec5c#parent=https%3A%2F%2Fwww.pcorner.com%2Flist%2FC%2FTCU_31.ZIP%2FINFO%2F" style="width:100%; height: 430px; border:0;" name="jetpack_remote_comment" class="jetpack_remote_comment" id="jetpack_remote_comment" sandbox="allow-same-origin allow-top-navigation allow-scripts allow-forms allow-popups"></iframe> <!--[if !IE]><!--> <script> document.addEventListener('DOMContentLoaded', function () { var commentForms = document.getElementsByClassName('jetpack_remote_comment'); for (var i = 0; i < commentForms.length; i++) { commentForms[i].allowTransparency = false; commentForms[i].scrolling = 'no'; } }); </script> <!--<![endif]--> </form> </div> <input type="hidden" name="comment_parent" id="comment_parent" value="" /> </section> <!-- #comments --> </article><!--/post --> <nav class='post-nav fix'> <table> <tr> <td class='previous'><a href="https://www.pcorner.com/list/UNP/FIXSCG.ZIP/INFO/" rel="prev"><span class="icon"> </span> UNP – FIXSCG.ZIP</a></td> <td class='next'><a href="https://www.pcorner.com/list/UNP/DB3UNP.ZIP/INFO/" rel="next"><span class="icon"> </span> UNP – DB3UNP.ZIP</a></td> </tr> </table> </nav> </div><!-- content --> </div><!-- main col --> <div id='sidebar-shell-1' class='sidebar-shell sidebar-shell-right'> <div class="dbx-group right boxed warea" id="sidebar"> <!--widget start --><aside id="paypal_donations-2" class="dbx-box suf-widget widget_paypal_donations"><div class="dbx-content"><h3 class="dbx-handle plain">Donate</h3><p>Please help defray the cost of running this free service.</p> <!-- Begin PayPal Donations by https://www.tipsandtricks-hq.com/paypal-donations-widgets-plugin --> <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <div class="paypal-donations"> <input type="hidden" name="cmd" value="_donations" /> <input type="hidden" name="bn" value="TipsandTricks_SP" /> <input type="hidden" name="business" value="gjsmith66@pcorner.com" /> <input type="hidden" name="rm" value="0" /> <input type="hidden" name="currency_code" value="USD" /> <input type="image" style="cursor: pointer;" src="https://www.paypal.com/en_US/i/btn/btn_donate_LG.gif" name="submit" alt="PayPal - The safer, easier way to pay online." /> <img alt="" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1" /> </div> </form> <!-- End PayPal Donations --></div></aside><!--widget end --><!--widget start --><aside id="text-7" class="dbx-box suf-widget widget_text"><div class="dbx-content"> <div class="textwidget"><script type="text/javascript"> amzn_assoc_placement = "adunit0"; amzn_assoc_enable_interest_ads = "true"; amzn_assoc_tracking_id = "zca-20"; amzn_assoc_ad_mode = "auto"; amzn_assoc_ad_type = "smart"; amzn_assoc_marketplace = "amazon"; amzn_assoc_region = "US"; amzn_assoc_linkid = "ea8faac85a6c9ee94ab5174bccaeb487"; amzn_assoc_emphasize_categories = "13900871"; amzn_assoc_fallback_mode = {"type":"search","value":"DOS Windows"}; amzn_assoc_default_category = "All"; </script> <script src="//z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US"></script> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:inline-block;width:160px;height:600px" data-ad-client="ca-pub-8001169946558833" data-ad-slot="3404908173"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div></aside><!--widget end --></div><!--/sidebar --> </div> </div><!-- /container --> </div><!--/wrapper --> <footer> <div id='page-footer'> <div class='col-control'> <div id="cred"> <table> <tr> <td class="cred-left">© 2018 <a href='http://www.pcorner.com'>The Programmer's Corner</a> by Personalized Computer Systems </td> <td class="cred-center"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:inline-block;width:728px;height:90px" data-ad-client="ca-pub-8001169946558833" data-ad-slot="6568049104"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </td> <td class="cred-right"></td> </tr> </table> </div> </div> </div> </footer> <!-- 95 queries, 11MB in 0.308 seconds. --> <!-- location footer --> <script type='text/javascript'> //<![CDATA[ jQuery(document).ready(function($) { $('html').MagicLiquidizerTable({ whichelement: 'table', breakpoint: '780', headerSelector: 'thead td, thead th, tr th', bodyRowSelector: 'tbody tr, tr', table: '1' }) }) //]]> </script> <!-- tracker added by Ultimate Google Analytics plugin v1.6.0: http://www.oratransplant.nl/uga --> <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> var pageTracker = _gat._getTracker("UA-10500370-7"); pageTracker._initData(); pageTracker._trackPageview(); </script> <div style="display:none"> </div> <script type='text/javascript' src='https://www.pcorner.com/wp-includes/js/comment-reply.min.js?ver=4.9.8'></script> <script type='text/javascript' src='https://www.pcorner.com/wp-includes/js/jquery/ui/core.min.js?ver=1.11.4'></script> <script type='text/javascript' src='https://www.pcorner.com/wp-includes/js/jquery/ui/datepicker.min.js?ver=1.11.4'></script> <script type='text/javascript'> jQuery(document).ready(function(jQuery){jQuery.datepicker.setDefaults({"closeText":"Close","currentText":"Today","monthNames":["January","February","March","April","May","June","July","August","September","October","November","December"],"monthNamesShort":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"nextText":"Next","prevText":"Previous","dayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dayNamesShort":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dayNamesMin":["S","M","T","W","T","F","S"],"dateFormat":"MM d, yy","firstDay":1,"isRTL":false});}); </script> <script type='text/javascript' src='https://www.pcorner.com/wp-includes/js/jquery/ui/widget.min.js?ver=1.11.4'></script> <script type='text/javascript' src='https://www.pcorner.com/wp-includes/js/jquery/ui/progressbar.min.js?ver=1.11.4'></script> <script type='text/javascript' src='https://s0.wp.com/wp-content/js/devicepx-jetpack.js?ver=201846'></script> <script type='text/javascript' src='https://www.pcorner.com/wp-includes/js/jquery/ui/mouse.min.js?ver=1.11.4'></script> <script type='text/javascript' src='https://www.pcorner.com/wp-includes/js/jquery/ui/sortable.min.js?ver=1.11.4'></script> <script type='text/javascript' src='https://secure.gravatar.com/js/gprofiles.js?ver=2018Novaa'></script> <script type='text/javascript'> /* <![CDATA[ */ var WPGroHo = {"my_hash":""}; /* ]]> */ </script> <script type='text/javascript' src='https://www.pcorner.com/wp-content/plugins/jetpack/modules/wpgroho.js?ver=4.9.8'></script> <script type='text/javascript' src='https://www.pcorner.com/wp-content/plugins/jetpack/_inc/build/likes/queuehandler.min.js?ver=6.6.1'></script> <script type='text/javascript' src='https://www.pcorner.com/wp-includes/js/wp-embed.min.js?ver=4.9.8'></script> <script async="async" type='text/javascript' src='https://www.pcorner.com/wp-content/plugins/akismet/_inc/form.js?ver=4.0.8'></script> <!--[if IE]> <script type="text/javascript"> if ( 0 === window.location.hash.indexOf( '#comment-' ) ) { // window.location.reload() doesn't respect the Hash in IE window.location.hash = window.location.hash; } </script> <![endif]--> <script type="text/javascript"> (function () { var comm_par_el = document.getElementById( 'comment_parent' ), comm_par = ( comm_par_el && comm_par_el.value ) ? comm_par_el.value : '', frame = document.getElementById( 'jetpack_remote_comment' ), tellFrameNewParent; tellFrameNewParent = function () { if ( comm_par ) { frame.src = "https://jetpack.wordpress.com/jetpack-comment/?blogid=30175801&postid=4298&comment_registration=0&require_name_email=1&stc_enabled=1&stb_enabled=1&show_avatars=1&avatar_default=mystery&greeting=Leave+a+Reply&greeting_reply=Leave+a+Reply+to+%25s&color_scheme=light&lang=en_US&jetpack_version=6.6.1&show_cookie_consent=10&has_cookie_consent=0&sig=d0ff9053e5ee9e273dfc7c395d5f31970aa8ec5c#parent=https%3A%2F%2Fwww.pcorner.com%2Flist%2FC%2FTCU_31.ZIP%2FINFO%2F" + '&replytocom=' + parseInt( comm_par, 10 ).toString(); } else { frame.src = "https://jetpack.wordpress.com/jetpack-comment/?blogid=30175801&postid=4298&comment_registration=0&require_name_email=1&stc_enabled=1&stb_enabled=1&show_avatars=1&avatar_default=mystery&greeting=Leave+a+Reply&greeting_reply=Leave+a+Reply+to+%25s&color_scheme=light&lang=en_US&jetpack_version=6.6.1&show_cookie_consent=10&has_cookie_consent=0&sig=d0ff9053e5ee9e273dfc7c395d5f31970aa8ec5c#parent=https%3A%2F%2Fwww.pcorner.com%2Flist%2FC%2FTCU_31.ZIP%2FINFO%2F"; } }; if ( 'undefined' !== typeof addComment ) { addComment._Jetpack_moveForm = addComment.moveForm; addComment.moveForm = function ( commId, parentId, respondId, postId ) { var returnValue = addComment._Jetpack_moveForm( commId, parentId, respondId, postId ), cancelClick, cancel; if ( false === returnValue ) { cancel = document.getElementById( 'cancel-comment-reply-link' ); cancelClick = cancel.onclick; cancel.onclick = function () { var cancelReturn = cancelClick.call( this ); if ( false !== cancelReturn ) { return cancelReturn; } if ( ! comm_par ) { return cancelReturn; } comm_par = 0; tellFrameNewParent(); return cancelReturn; }; } if ( comm_par == parentId ) { return returnValue; } comm_par = parentId; tellFrameNewParent(); return returnValue; }; } // Do the post message bit after the dom has loaded. document.addEventListener( 'DOMContentLoaded', function () { var iframe_url = "https:\/\/jetpack.wordpress.com"; if ( window.postMessage ) { if ( document.addEventListener ) { window.addEventListener( 'message', function ( event ) { var origin = event.origin.replace( /^http:\/\//i, 'https://' ); if ( iframe_url.replace( /^http:\/\//i, 'https://' ) !== origin ) { return; } jQuery( frame ).height( event.data ); }); } else if ( document.attachEvent ) { window.attachEvent( 'message', function ( event ) { var origin = event.origin.replace( /^http:\/\//i, 'https://' ); if ( iframe_url.replace( /^http:\/\//i, 'https://' ) !== origin ) { return; } jQuery( frame ).height( event.data ); }); } } }) })(); </script> <script type='text/javascript' src='https://stats.wp.com/e-201846.js' async='async' defer='defer'></script> <script type='text/javascript'> _stq = window._stq || []; _stq.push([ 'view', {v:'ext',j:'1:6.6.1',blog:'30175801',post:'4298',tz:'0',srv:'www.pcorner.com'} ]); _stq.push([ 'clickTrackerInit', '30175801', '4298' ]); </script> </body> </html> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>