home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #3 / NN_1993_3.iso / spool / comp / database / informix / 3041 < prev    next >
Encoding:
Internet Message Format  |  1993-01-23  |  48.8 KB

  1. Path: sparky!uunet!cs.utexas.edu!swrinde!emory!emory!not-for-mail
  2. From: obelix.informix.com!johnl@emory.mathcs.emory.edu (Jonathan Leffler)
  3. Newsgroups: comp.databases.informix
  4. Subject: I4GL Modifications: Part 1 of 3
  5. Date: 22 Jan 1993 23:18:09 -0500
  6. Organization: Mailing List Gateway
  7. Lines: 963
  8. Sender: walt@mathcs.emory.edu
  9. Distribution: world
  10. Message-ID: <1jqgu1INN8di@emory.mathcs.emory.edu>
  11. Reply-To: obelix.informix.com!johnl@emory.mathcs.emory.edu (Jonathan Leffler)
  12. NNTP-Posting-Host: emory.mathcs.emory.edu
  13. X-Informix-List-ID: <list.1813>
  14.  
  15. :    "@(#)shar2.c    2.3 92/11/05"
  16. #!/bin/sh
  17. # shar:    Shell Archiver (v1.22)
  18. #
  19. #    This is a shell archive.
  20. #    Remove everything above this line and run sh on the resulting file
  21. #    If this archive is complete, you will see this message at the end
  22. #    "All files extracted"
  23. #
  24. #    Created: Fri Jan 22 19:12:20 1993 by jl at JLSS
  25. #
  26. # This is part 1 of a multipart archive                                    
  27. # do not concatenate these parts, unpack them in order with /bin/sh        
  28. #    Files archived in this archive:
  29. #      i4glmods
  30. #
  31. if test -r s2_seq_.tmp
  32. then echo "Must unpack archives in sequence!"
  33.      next=`cat s2_seq_.tmp`; echo "Please unpack part $next next"
  34.      exit 1; fi
  35. echo "x - i4glmods"
  36. sed 's/^X//' << 'SHAR_EOF' > i4glmods &&
  37. X
  38. X          *********************************************
  39. X          ** SUGGESTED MODIFICATIONS TO INFORMIX-4GL **
  40. X          *********************************************
  41. X
  42. XDisclaimer:
  43. X    Despite the fact that I work for Informix Software in the UK, this list
  44. X    of suggestions does not have any more substance than you care to give
  45. X    it by materialising it on your screen, or by placing it on paper.  It
  46. X    must not be taken as any sort of indication of an official stance by
  47. X    Informix Software.
  48. X
  49. XMost of the suggestions in this list have been collated from the recent
  50. Xdiscussions on comp.databases.informix and the mailing list run by Walt
  51. XHultgen (walt@rmy.emory.edu); a few have been collected from other sources.
  52. XI claim no credit for the basic requirements stated below, though the
  53. Xstatement below is mainly in my own words.  If people desparately want to
  54. Xclaim the idea, please send me an abbreviated version of this document with
  55. Xthe ideas to which you lay claim suitably annotated.  I will try to include
  56. Xyour claims in any future version of the document.  Bear in mind that more
  57. Xthan one person may have made the same suggestion -- in fact, that is
  58. Xgenerally the case.
  59. X
  60. XThis is a long document.  To try and help make it manageable, it is split
  61. Xinto several sections.  The first section is the preamble you're reading
  62. Xnow.  The second section is a brief statement of the features -- one line
  63. Xindicating what is required for each feature.  The items in this section
  64. Xare rated for plausibility with a letter in the set A-F with A good and F
  65. Xbad.  An A-rated idea generally fits closely with the existing language,
  66. Xshould be easy to implement, and would be widely used.  An F-rated idea
  67. Xprobably does violence to the spirit of the existing language, would be
  68. Xhard to implement, and might not be widely used.  This scale is completely
  69. Xsubjective.  The third section expands on each of the ideas in the second
  70. Xsection.  Sometimes it proposes chunk of language syntax; this should be
  71. Xtaken as a suggestion, and you should consider sending in a revised
  72. Xversion.  Whenever you do this, please bear in mind the requirements for
  73. Xbackwards compatability -- this will frequently disallow what would
  74. Xotherwise be desirable syntax.
  75. X
  76. XNotation: I4GL refers to both Informix-4GL and Informix-4GL RDS.  R4GL
  77. Xmeans I4GL-RDS, and C4GL means (compiled) I4GL when a distinction is
  78. Xnecessary.  ID means Informix-4GL Interactive Debuggger, but no suggestions
  79. Xhave been received concerning that.  ISQL means Informix-SQL but does not
  80. Xfigure prominently in the discussion.  The database engines are OnLine and
  81. XSE; all of the features discussed here are applicable regardless of which
  82. Xengine the application uses.  A 4GL facility is a high-level, possibly
  83. Xnon-procedural, construct which is typically to do with screen or database
  84. Xhandling.  A 3GL facility is normally analogous to the features found in an
  85. Xordinary programming language such as C, C++ or Ada.  CDI refers to the
  86. Xnewsgroup comp.databases.informix and the mailing list.
  87. X
  88. XUnderlying assumption: it is assumed that any program which compiles and
  89. Xruns correctly under C4GL should also compile and run correctly under R4GL,
  90. Xand vice versa.
  91. X
  92. XWHAT SHOULD YOU DO WITH THIS MESSAGE?
  93. X
  94. X1: Save it.
  95. X
  96. X2: Read it.  Contemplate it.  Contemplate your navel.  Let me know if you
  97. X   find your navel helpful.
  98. X
  99. X3: If you disagree with one (or more) of the ideas in this document, send
  100. X   me a message with clear identification of the idea to which you are
  101. X   referring (they all have a number -- see below), and why you think it is
  102. X   all wrong, and what should be done to fix it.
  103. X
  104. X4: If your favourite idea is languishing in Class D or E or F, then you
  105. X   probably haven't made it sufficiently clear what you are asking for.
  106. X   Please send revised details to me.
  107. X
  108. X5: If you think something is missing, put together a proposal along the
  109. X   same lines as this document, and send it to me.
  110. X
  111. X6: Since it is intended to be a discussion document, please also send your
  112. X   idea to the comp.databases.informix for general consideration.  I will
  113. X   be pleased to receive non-broadcast mail, but this is for general
  114. X   discussion and as more people consider them, the ideas gradually get
  115. X   improved.  In this case, the more minds applied, the better.
  116. X
  117. X----------------------------------------------------------------------
  118. X
  119. XBRIEF STATEMENT OF IMPROVEMENTS
  120. X
  121. XA quick count shows about 120 requests.  These have been grouped into
  122. Xseveral subsets, and each request has been given a number of the form
  123. XI4GL-axx where "a" is a letter indicating which subset the request has been
  124. Xgrouped with, and "xx" is a 2-digit number to identify the request in the
  125. Xsubset.  The number of a request does not reflect its status in any way.
  126. X
  127. X    Engines             I4GL-Exx
  128. X    Tools               I4GL-Txx
  129. X    3GL                 I4GL-Lxx
  130. X    SQL                 I4GL-Sxx
  131. X    Reports             I4GL-Rxx
  132. X    Menus               I4GL-Mxx
  133. X    PROMPT              I4GL-Pxx
  134. X    Forms               I4GL-Fxx
  135. X    Windows             I4GL-Wxx
  136. X    INPUT               I4GL-Ixx
  137. X    DISPLAY ARRAY       I4GL-Dxx
  138. X    INPUT ARRAY         I4GL-Axx
  139. X    CONSTRUCT           I4GL-Cxx
  140. X    Picklists           I4GL-Kxx
  141. X
  142. XENGINES
  143. X
  144. XThese requests are really requests for changes in the database engines
  145. X(OnLine and SE), rather than the tools (I4GL, ISQL), even though they arise
  146. Xout this I4GL discussion.  The list of requests here could be substantially
  147. Xextended if it were not that the focus of the discussion is I4GL.
  148. X
  149. XI4GL-E01: Control who can create databases in an OnLine system.
  150. XI4GL-E02: support for multiple databases with the same name under Online.
  151. XI4GL-E03: Name of SET EXPLAIN log file set by environment variable.
  152. XI4GL-E04: Ability to discover name of current database.
  153. XI4GL-E05: Addition of comments columns to certain system tables.
  154. XI4GL-E06: Systables should record time when table was last modified.
  155. X
  156. XTOOLS
  157. X
  158. XThese requests relate to the tools provided with I4GL.  It does not address
  159. Xthe tools which should be provided with the engines.
  160. X
  161. XI4GL-T01: Library support for R4GL.
  162. XI4GL-T02: Upgrade UPSCOL.
  163. XI4GL-T03: Programmers environment consistent between C4GL and R4GL.
  164. XI4GL-T04: Programmers environment aware of forms and message files.
  165. XI4GL-T05: Programmers environment upgraded.
  166. X
  167. X3GL FEATURES
  168. X
  169. XThese requests relate to basic programming features which are more related
  170. Xto standard 3GL languages than the 4GL features of I4GL.
  171. X
  172. XI4GL-L01: Fix error -4518 properly.
  173. XI4GL-L02: General dynamic arrays.
  174. XI4GL-L03: Passing arrays by reference.
  175. XI4GL-L04: Remove size limits on strings passed to/from functions.
  176. XI4GL-L05: Proper user-defined types (especially record types).
  177. XI4GL-L06: Initialised data.
  178. XI4GL-L07: Record comparison.
  179. XI4GL-L08: Record assignment when records contain blobs.
  180. XI4GL-L09: Remove petty syntax restrictions.
  181. XI4GL-L10: Get key stroke (fgl_getkey).
  182. XI4GL-L11: Locale support for MONEY.
  183. XI4GL-L12: 8-bit characters.
  184. XI4GL-L13: Unicode support.
  185. XI4GL-L14: Multi-currency support.
  186. XI4GL-L15: Multiple globals files in a single module.
  187. XI4GL-L16: Conditional compilation and preprocessor support.
  188. XI4GL-L17: Access to __FILE__, __LINE__, __FUNCTION__.
  189. XI4GL-L18: Functions to get components of datetime or interval in integer.
  190. XI4GL-L19: USER, TIME, TODAY, CURRENT should be usable everywhere.
  191. XI4GL-L20: Explanation of interaction between TZ and DATETIME.
  192. XI4GL-L21: Private functions and variables.
  193. XI4GL-L22: Error return from STARTLOG if failed to open log file.
  194. XI4GL-L23: Better recording of errors in error log (especially user-id).
  195. XI4GL-L24: Bottom tested loop: REPEAT <statements> UNTIL <condition>
  196. XI4GL-L25: Loop-and-a-half: DO <stmts> WHILE <condition> <stmts> END DO
  197. XI4GL-L26: Allow use of DATE type as index of FOR loop.
  198. XI4GL-L27: Dynamic key mappings.
  199. XI4GL-L28: Cursors, windows, forms, attributes, key name variables.
  200. XI4GL-L29: User-defined symbolic constants.
  201. XI4GL-L30: Provide full object-orientated support.
  202. XI4GL-L31: Treat adjacent strings as a single string (as in ANSI C).
  203. XI4GL-L32: Allow defaults to be declared explicitly as well as implicitly.
  204. XI4GL-L33: Provide an ELSIF (or ELIF) keyword.
  205. XI4GL-L34: Format control for exponential notation decimal numbers.
  206. XI4GL-L35: Call functions by name.
  207. X
  208. XSQL FEATURES
  209. X
  210. XThese requests relate to modifications in the way SQL statements would be
  211. Xtreated.
  212. X
  213. XI4GL-S01: FOREACH c_cursor USING variablelist-1 INTO variablelist-2.
  214. XI4GL-S02: Support for recursive algorithms with cursors.
  215. XI4GL-S03: INPUT CURSOR and DISPLAY CURSOR.
  216. XI4GL-S04: CREATE TEMP TABLE LIKE.
  217. XI4GL-S05: UPDATE BY NAME.
  218. XI4GL-S06: Mismatch between compile-time typing and run-time typing.
  219. X
  220. XREPORTS
  221. X
  222. XThese requests relate to reports.  There are some overlaps with some of the
  223. Xother sections.
  224. X
  225. XI4GL-R01: Dynamically configure size of report.
  226. XI4GL-R02: Handle multiple word-wrapped fields on one PRINT line of report.
  227. XI4GL-R03: Report with output to a 4GL window with scrolling capability.
  228. XI4GL-R04: Multiple concurrent invocations of a single report.
  229. XI4GL-R05: Control over trailing blank lines and trailing blanks on lines.
  230. X
  231. XMENUS
  232. X
  233. XI4GL-M01: Vertical menus.
  234. X
  235. XPROMPT
  236. X
  237. XI4GL-P01: PROMPT should include EXIT PROMPT and CONTINUE PROMPT
  238. XI4GL-P02: PROMPT should include BEFORE PROMPT and AFTER PROMPT
  239. XI4GL-P03: PROMPT should provide validation of data.
  240. XI4GL-P04: PROMPT "Password: " FOR passwd WITHOUT ECHO.
  241. X
  242. XFORMS
  243. X
  244. XThese requests relate to forms.  There is considerable overlap with the
  245. Xfollowing sections.
  246. X
  247. XI4GL-F01: Built-in support for multi-screen forms.
  248. XI4GL-F02: Support for word-wrapped fields in screen arrays.
  249. XI4GL-F03: Eliminate the need for [|] markers in forms.
  250. XI4GL-F04: Vastly improved PICTURE attribute handling.
  251. XI4GL-F05: Horizontally scrolling char fields.
  252. XI4GL-F06: 2-dimensional screen arrays.
  253. XI4GL-F07: Control row-major or column-major ordering for matrixes of fields.
  254. XI4GL-F08: Dynamically hide screen fields (in forms) completely.
  255. XI4GL-F09: Alternative control of NEXT FIELD NEXT, NEXT FIELD PREVIOUS.
  256. XI4GL-F10: Specify "NEXT FIELD fieldname" outside scope of INPUT {ARRAY}.
  257. XI4GL-F11: Get size of current form.
  258. XI4GL-F12: Get name of current form.
  259. XI4GL-F13: Get size of screen array.
  260. XI4GL-F14: Get field names of screen record or screen array.
  261. XI4GL-F15: Document support for screen dumps
  262. XI4GL-F16: Ability to distinguish between a blank and a null field.
  263. XI4GL-F17: DISPLAY FORM should set display attributes of fields.
  264. X
  265. XWINDOWS
  266. X
  267. XThese requests relate to windows.  There is considerable overlap with the
  268. Xother sections.
  269. X
  270. XI4GL-W01: MENU/PROMPT/COMMENT/ERROR LINE OFF in windows.
  271. XI4GL-W02: Get size of current window.
  272. XI4GL-W03: Get name of current window.
  273. XI4GL-W04: Allow for seamless joins between bordered windows on screen.
  274. X
  275. XINPUT
  276. X
  277. XThese requests relate to the INPUT statement.  There is considerable
  278. Xoverlap with the DISPLAY ARRAY and INPUT ARRAY sections.
  279. X
  280. XI4GL-I01: Dynamic control of display attributes for individual fields.
  281. XI4GL-I02: Dynamic control of NOENTRY/ENTRY/REQUIRED for individual fields.
  282. XI4GL-I03: Simpler switch from INPUT to INPUT ARRAY in master/detail screens.
  283. XI4GL-I04: The help facility should appear in defined window.
  284. XI4GL-I05: Determine the current value of any OPTION and reuse the value.
  285. XI4GL-I06: Add field_changed() function
  286. X
  287. XDISPLAY ARRAY
  288. X
  289. XThese requests relate to the DISPLAY ARRAY statement.  There is considerable
  290. Xoverlap with the INPUT and INPUT ARRAY sections.
  291. X
  292. XI4GL-D01: Dynamic control of display attributes for individual fields.
  293. XI4GL-D02: Positioning of first active row in program array.
  294. XI4GL-D03: Positioning of first active row in screen array.
  295. XI4GL-D04: Positioning of current active row in program array.
  296. XI4GL-D05: Positioning of current active row in screen array.
  297. XI4GL-D06: HELP clause for DISPLAY ARRAY.
  298. XI4GL-D07: BEFORE DISPLAY, AFTER DISPLAY clauses.
  299. XI4GL-D08: BEFORE ROW and AFTER ROW clauses.
  300. XI4GL-D09: Move faster than row/page at a time through an array.
  301. XI4GL-D10: Current row highlighted automatically.
  302. XI4GL-D11: Display a subset of the elements in a program array.
  303. X
  304. XINPUT ARRAY
  305. X
  306. XThese requests relate to the INPUT ARRAY statement.  There is considerable
  307. Xoverlap with the INPUT and DISPLAY ARRAY sections.
  308. X
  309. XI4GL-A01: Ability to have current row highlighted automatically.
  310. XI4GL-A02: Dynamic control of display attributes for individual fields.
  311. XI4GL-A03: Dynamic control of NOENTRY/ENTRY/REQUIRED for individual fields.
  312. XI4GL-A04: Positioning of first active row in program array.
  313. XI4GL-A05: Positioning of first active row in screen array.
  314. XI4GL-A06: Positioning of current active row in program array.
  315. XI4GL-A07: Positioning of current active row in screen array.
  316. XI4GL-A08: Enable/disable INSERT and DELETE key.
  317. XI4GL-A09: Dynamic control of effective size of program array.
  318. XI4GL-A10: Program-controlled INSERT and DELETE operations.
  319. XI4GL-A11: Program override of user's INSERT and DELETE operations.
  320. XI4GL-A12: Move faster than row/page at a time through an array.
  321. XI4GL-A13: Display a subset of the elements in a program array.
  322. XI4GL-A14: Duplicate suppression during input.
  323. XI4GL-A15: Allow cursor out of all-blank row.
  324. XI4GL-A16: Better control of rows changed during INPUT ARRAY WITHOUT DEFAULTS.
  325. X
  326. XCONSTRUCT
  327. X
  328. XI4GL-C01: Re-instate AUTONEXT in CONSTRUCT.
  329. XI4GL-C02: Fix get_fldbuf so it returns and restores all of a condition.
  330. X
  331. XPICKLISTS
  332. X
  333. XPicklists are related to, but different from, DISPLAY ARRAY statements.
  334. X
  335. XI4GL-K01: Provide picklists.
  336. X
  337. X----------------------------------------------------------------------
  338. X
  339. XEquivalent features:
  340. X
  341. XSome of the requests are equivalent to each other.  They are either
  342. Xdirectly equivalent because they are verbatim copies of a request which
  343. Xalso appears in another context, or they are indirectly equivalent because
  344. Xwhen one of the group is implemented, the other should be implemented at
  345. Xthe same time.  This list is not necessarily complete.
  346. X
  347. XSet 1: I4GL-A02 I4GL-D01 I4GL-I01
  348. XSet 2: I4GL-A03 I4GL-I02
  349. XSet 3: I4GL-A04 I4GL-A05 I4GL-A06 I4GL-A07 I4GL-D02 I4GL-D03 I4GL-D04 I4GL-D05
  350. XSet 4: I4GL-A12 I4GL-D09
  351. XSet 5: I4GL-A13 I4GL-D11
  352. XSet 6: I4GL-L02 I4GL-L03
  353. XSet 7: I4GL-L11 I4GL-L14
  354. XSet 8: I4GL-L12 I4GL-L13
  355. X
  356. XPlausibility ratings:
  357. X
  358. XClass A: I4GL-A04 I4GL-A05 I4GL-A06 I4GL-A07 I4GL-A08 I4GL-A09 I4GL-A10
  359. X         I4GL-A11 I4GL-A13 I4GL-C02 I4GL-D02 I4GL-D03 I4GL-D04 I4GL-D05 I4GL-D10
  360. X         I4GL-D11 I4GL-E03 I4GL-F02 I4GL-F13 I4GL-F15 I4GL-L01 I4GL-L03
  361. X         I4GL-L06 I4GL-L09 I4GL-L10 I4GL-L15 I4GL-L19 I4GL-L20 I4GL-L26
  362. X         I4GL-L29 I4GL-L31 I4GL-L33 I4GL-P01 I4GL-P02 I4GL-P03 I4GL-P04
  363. X         I4GL-R01 I4GL-R02 I4GL-S01 I4GL-T03 I4GL-T04 I4GL-W01
  364. XClass B: I4GL-A01 I4GL-A02 I4GL-A03 I4GL-D01 I4GL-D06 I4GL-D07 I4GL-D08
  365. X         I4GL-E04 I4GL-E05 I4GL-E06 I4GL-F04 I4GL-F09 I4GL-F10 I4GL-I01
  366. X         I4GL-I02 I4GL-K01 I4GL-L04 I4GL-L05 I4GL-L07 I4GL-L18 I4GL-L21
  367. X         I4GL-L22 I4GL-L23 I4GL-L24 I4GL-L30 I4GL-L32 I4GL-S02 I4GL-T01
  368. X         I4GL-T02 I4GL-W02 I4GL-W03
  369. XClass C: I4GL-A12 I4GL-A15 I4GL-E01 I4GL-F01 I4GL-F05 I4GL-F07 I4GL-F08
  370. X         I4GL-F17 I4GL-I05 I4GL-I06 I4GL-L02 I4GL-L11 I4GL-L12 I4GL-L13
  371. X         I4GL-L14 I4GL-L16 I4GL-L17 I4GL-L25 I4GL-L27 I4GL-L28 I4GL-L34
  372. X         I4GL-R05 I4GL-T04 I4GL-W04
  373. XClass D: I4GL-A14 I4GL-E02 I4GL-F03 I4GL-I04 I4GL-L08 I4GL-R03 I4GL-L35
  374. XClass E: I4GL-D09 I4GL-F11 I4GL-F12 I4GL-F14 I4GL-M01 I4GL-S03 I4GL-S04
  375. X         I4GL-S05 I4GL-S04
  376. XClass F: I4GL-A16 I4GL-C01 I4GL-F06 I4GL-I03 I4GL-R04 I4GL-S06 I4GL-F16
  377. X
  378. X----------------------------------------------------------------------
  379. X
  380. X                    *************************
  381. X                    ** DETAILED DISCUSSION **
  382. X                    *************************
  383. X
  384. XENGINES
  385. X
  386. XI4GL-E01:
  387. X    At the moment, anybody can create their own database in an OnLine
  388. X    system, and can use arbitrary amounts of disk space for their tables by
  389. X    specifying suitable initial extent sizes.  Informix OnLine system
  390. X    administrators should be able to control who can create databases in an
  391. X    OnLine system.  This is so they can ensure that that valuable disk
  392. X    resources are not consumed.  The control should extend to allowing an
  393. X    individual to create tables in some DBspaces.  Similar control should
  394. X    be available for blobspaces (and optical partitions).  The default
  395. X    control should be as lax as it is now to allow for backwards
  396. X    compatability.
  397. X
  398. X    I4GL-E01 was rated in class C because although it is quite important,
  399. X    it is not easy to see how the permissions would be properly controlled.
  400. X
  401. XI4GL-E02:
  402. X    With SE, it is possible to have multiple databases all with the same
  403. X    name but located in different directories.  The same suite of programs
  404. X    can be used to manipulate any of the databases simply by setting the
  405. X    DBPATH environment variable.  This setup is particularly common for
  406. X    accounting systems where there are multiple legal companies run by one
  407. X    parent company on one computer system.  With OnLine, you can only have
  408. X    one database with a given name in any one instance of OnLine.  The
  409. X    direct analogue of the SE scenario would be to have multiple OnLine
  410. X    systems, each with a different tbconfig file.  However, the resources
  411. X    required for this are very large.  It is ludicrous to think of using
  412. X    ths technique for a 20-company machine!  The only available alternative
  413. X    is to modify the programs so that they take a database name either as a
  414. X    parameter or from an environment variable and open the correct
  415. X    database.  This leaves a minor problem when compiling I4GL programs --
  416. X    a database is needed for the non-procedural database statement.  Unless
  417. X    the MAIN program is compiled in a file without a non-procedural
  418. X    database statement in it, some database will be opened automatically on
  419. X    startup and then closed before the correct database is opened after
  420. X    all.
  421. X
  422. X    I4GL-E02 was rated in class D because there is neither an easy solution
  423. X    nor any urgent need to implement one.
  424. X
  425. XI4GL-E03:
  426. X    At the moment, the output from SET EXPLAIN ON goes into a file with a
  427. X    fixed name "sqexplain.out".  If several users are debugging in the same
  428. X    directory at once, the traces of their programs gets interleaved,
  429. X    making it unnecessarily difficult to track what was happening.  The
  430. X    simplest improvement would be to allow the name of the SET EXPLAIN log
  431. X    file to be set by an environment variable.  It would be helpful if it
  432. X    each entry was given a timestamp and a user name as well.
  433. X
  434. X    I4GL-E03 was rated in class A because there is an easy solution and it
  435. X    is needed.
  436. X
  437. XI4GL-E04:
  438. X    It is not possible to determine the name of the current database by
  439. X    making enquiries from within the program.  With OnLine, it would not be
  440. X    very difficult to provide a dummy entry in Systables which defined the
  441. X    name of the database (like the version entry and the MODE ANSI entry).
  442. X    This would be more difficult to do satisfactorily in SE because the
  443. X    database can be renamed by simply moving the database directory.  If
  444. X    the operating system supports symbolic links, then the database can
  445. X    actually be known by multiple different names simultaneously!  However,
  446. X    when the database was created, the name could be entered, and if a
  447. X    RENAME DATABASE command was provided (the subject of a completely
  448. X    separate FR), it would update the entry in Systables.
  449. X
  450. X    I4GL-E04 was rated in class B because there is a fairly easy solution
  451. X    though it involves another minor modification to the semantics of the
  452. X    system catalogue.
  453. X
  454. XI4GL-E05:
  455. X    It should be possible to record in the system catalogue the reason why
  456. X    a table, column or index exists by adding a comment.  DB2 supports this
  457. X    via the COMMENT command.  Informix could support it by adding a
  458. X    comments column to certain system tables.  The minimum set includes
  459. X    Systables, Syscolumns, Sysindexes.  You can argue whether Systriggers
  460. X    and Sysconstraints need extra comments, since the decoded constraint
  461. X    and trigger is usually reasonably clear.  Sysprocedures already has a
  462. X    sort of comment facility, but it should be made uniform with the
  463. X    facilities for the other comments.  Maybe it should be handled by a
  464. X    Syscomments table which has a serial column as primary key, and the
  465. X    other tables can store a cross-reference to an entry in the Syscomments
  466. X    table.  This has the merit of avoiding VARCHAR fields in the main
  467. X    system catalogue, and also of avoiding a frequently unused, long CHAR
  468. X    column in the catalogues.
  469. X
  470. X    I4GL-E05 was rated in class B because there is a fairly easy solution
  471. X    though it involves another minor modification to the semantics of the
  472. X    system catalogue.
  473. X
  474. XI4GL-E06:
  475. X    The column Systables.Created records the date when the table was
  476. X    created or last altered.  It would be helpful if Systables recorded the
  477. X    time when it was changed as well as the date, so that it would be
  478. X    possible to tell whether software needs to be recompiled because of a
  479. X    change in a table since it was last compiled.  If the software was last
  480. X    compiled on the same day as the table was modified, it is not possible
  481. X    to tell whether it was compiled before or after the change.  The
  482. X    timestamp could either be a DATETIME (self-consistent) or a Unix
  483. X    timestamp (an INTEGER quantity) and more readily comparable with the
  484. X    timestamps on a file.
  485. X
  486. X    I4GL-E06 was reated in class B because it would be easy to do and
  487. X    useful.
  488. X
  489. X----------------------------------------------------------------------
  490. X
  491. XTOOLS
  492. X
  493. XI4GL-T01:
  494. X    C4GL can make use of the libraries provided by the C compiling system
  495. X    on the machine where development takes place.  Libraries are
  496. X    fundamental to good working practices on a large project (or on
  497. X    multiple projects) as they allow code to be reused.  R4GL code cannot
  498. X    be placed in libraries because there is no linker facility which
  499. X    understands libraries.  This should be provided.
  500. X
  501. X    There are several design considerations to take into account.  For
  502. X    example, should the library containing the R4GL object files have the
  503. X    same structure as the system archive or should it be proprietary to
  504. X    Informix?  If it uses the system archive command, then all the
  505. X    different archive formats have to be understood (and there are at least
  506. X    4 possible formats to consider).  However, if the system archive format
  507. X    is used, the system MAKE program could then also be used to maintain
  508. X    the archives since it would understand the archive format too.  If a
  509. X    custom Informix format was provided, then Informix would also need to
  510. X    provide a version of MAKE which would understand both the Informix
  511. X    archive format and the system archive format.  So, it seems clear that
  512. X    the system archive format should be used.
  513. X
  514. X    Using the system archive means the Infomrix will have to write a
  515. X    program analogous to RANLIB.  RANLIB periodically made its way into and
  516. X    out of AT&T Unix, and is still a feature of BSD Unix.  RANLIB adds an
  517. X    archive file to the front of the archive which identifies the symbols
  518. X    defined in the archive, and the offset within the archive of the
  519. X    archive file header for the object file defining the symbol.  It is
  520. X    reasonable to require that any given archive either contains R4GL
  521. X    object files or C4GL (and C, ...) object files and not a mixture of the
  522. X    two.  If this is not done, then both RANLIB and the Informix equivalent
  523. X    program will try to place their symbol file at the start of the
  524. X    archive, and each of them would break down after the other had been run
  525. X    (unless some very careful design was used to ensure that this was not a
  526. X    problem!).  Additionally, both programs would have to be run on the
  527. X    archive within a short enough space of time for both of them to
  528. X    consider that their symbol tables were fully up to date.  That probably
  529. X    means during the same second, which is not feasible in general.
  530. X
  531. X    The symbol file is used by the linker to determine what files are to be
  532. X    selected from the library.  The linker program should emulate the
  533. X    standard C loader command, taking options to indicate the output file,
  534. X    the object files to be linked unconditionally, and the libraries to be
  535. X    searched for other undefined symbols.  Note that, unlike the loader for
  536. X    a C program, the R4GL linker cannot complain about undefined symbols (by
  537. X    default) because many of them are defined by the interpreter itself,
  538. X    including some user-defined symbols (and such gems as STATUS, SQLCA).
  539. X
  540. X    I4GL-T01 was rated in class B because the need for such support is
  541. X    urgent, and because the technology required to support it is not
  542. X    singularly complex.
  543. X
  544. XI4GL-T02:
  545. X    Version 4.00 of UPSCOL displayed tables with the owner of the table as
  546. X    a prefix if you did not own the table.  Version 4.10 of UPSCOL ignores
  547. X    the owner of the table.  However, since you can have two tables with
  548. X    the same name but different owners in a mode ANSI database, this is not
  549. X    a complete solution to the problem.  Actually, UPSCOL 4.10.UC3 doesn't
  550. X    work on a mode ANSI database at all -- it can't even create the
  551. X    validation and attribute tables.  UPSCOL needs serious attention,
  552. X    because it is potentially a very useful program, but it remains
  553. X    seriously flawed.  It would also be nice if you could use it to add
  554. X    comments about the purpose of tables and columns in the absence of
  555. X    I4GL-E05.
  556. X
  557. X    I4GL-T02 was rated in class B because the basic technology already
  558. X    exists but is not really usable because UPSCOL was never properly
  559. X    upgraded from version 1.10.03X.
  560. X
  561. XI4GL-T03:
  562. X    With version 4.00 of R4GL, somebody made an important improvement to
  563. X    the R4GL programmers environment so that you could specify the globals
  564. X    files which were used by a program.  This is very necessary if you are
  565. X    going to use the facilities of Syspgm4gl, but the addition was only
  566. X    half thought about.  You cannot specify that a given source file uses a
  567. X    particular globals file.  And the same change was not made to the C4GL
  568. X    programmers environment.  This means that you cannot use Syspgm4gl to
  569. X    compile the same program under both R4GL and C4GL and get working
  570. X    executables out of both programs!  And you can't create two separate
  571. X    program entries with the program in the same directory because the
  572. X    extension for the executable is not stored in the database.  Ugghh!
  573. X
  574. X    I4GL-T03 was rated in class A because the incompatability between the
  575. X    two versions is unforgivable.
  576. X
  577. XI4GL-T04:
  578. X    Neither programmers environment is aware of forms or message files, but
  579. X    a complete program does depend on having both of those available.  The
  580. X    programmers environment should be upgraded to support these.  While the
  581. X    Syspgm4gl system is being upgraded, it should support version control
  582. X    software (preferably both SCCS and RCS).
  583. X
  584. X    I4GL-T04 was rated in class A because the existing facility is fine as
  585. X    far as it goes, but it doesn't really help on big projects.
  586. X
  587. XI4GL-T05:
  588. X    Since there can only be one Syspgm4gl database in an OnLine system,
  589. X    neither programmers environment really supports working on multiple
  590. X    projects.  For example, the pathnames typically have to be hard-coded
  591. X    and absolute; this makes creating a private version of the program
  592. X    under a different directory into a major exercise as there is no
  593. X    facility for duplicating a program.  Likewise, moving a project around
  594. X    is a pain too, but in reality, people develop software on MachineA at
  595. X    their office and install the software on MachineB at the customers
  596. X    site, and the location of the two sets of software is seldom in the
  597. X    same place, so if the customer is going to take over the maintenance of
  598. X    the software, all sorts of changes have to be made.  To fix this
  599. X    requires a major analysis of the database and the way it is likely to
  600. X    be used.
  601. X
  602. X    There are other problems with the database too.  For example, there is
  603. X    no table which identifies programs.  Programs are identified by a
  604. X    composite key consisting of the program name (10 bytes) and the program
  605. X    path (40 bytes); this 50-byte key is used throughout the rest of the
  606. X    database.  A program table should be created which has a serial column
  607. X    that is used in the other tables to identify the program.
  608. X
  609. X    Maybe it would be better if instead of upgrading the development
  610. X    environment (beyond making the C4GL and R4GL versions compatible), the
  611. X    effort was spent on providing sets of rules for use with MAKE and
  612. X    guidelines on how to use that instead.
  613. X
  614. X    I4GL-T05 was rated in class C because the existing facility is fine as
  615. X    far as it goes, but it doesn't really help with multiple projects when
  616. X    there can only be one program database in a given OnLine system.
  617. X
  618. X----------------------------------------------------------------------
  619. X
  620. X3GL
  621. X
  622. XI4GL-L01:
  623. X    This is one of a couple of bug fixes which are called out explicitly.
  624. X    Error -4518 is "Out of temporary string space" or words to that effect.
  625. X    This happens because (a) when strings are returned from a function,
  626. X    they are limited to no more than 512 bytes each, (b) each returned
  627. X    string is copied into the temporary string space, (c) the temporary
  628. X    string space is not all released after every function returns, and (d)
  629. X    the system only allows for up to 10 chunks of memory, each no more than
  630. X    512 bytes long.  This makes it fairly easy to write code which runs out
  631. X    of temporary string space, especially in 4.10 R4GL (which broke working
  632. X    4.00 C4GL code!).  This problem must be completely resolved by the next
  633. X    release of I4GL.
  634. X
  635. X    I4GL-L01 was rated in class A because it is a bug which breaks previously
  636. X    working code.
  637. X
  638. XI4GL-L02:
  639. X    There are languages (though neither C nor C++ are among them) which
  640. X    allow arrays to be sized dynamically.  That means, in particular, that
  641. X    you can call a function with an integer argument N, and the value of N
  642. X    will be used to declare local arrays of dimension N.  There are a few
  643. X    occasions when this would be useful in I4GL.
  644. X
  645. X    There are other languages (including C and C++) which allow you to
  646. X    allocate new arrays dynamically.  To supply this facility in I4GL would
  647. X    require some modifications to the language to supply some support for
  648. X    pointer types as it is very difficult to supply the functionality
  649. X    without using pointers.
  650. X
  651. X    I4GL-L02 was rated in class C because it would be very useful but does
  652. X    not fit easily into the current model of I4GL.
  653. X
  654. XI4GL-L03:
  655. X    Arrays should be made into first class variables; you should be able to
  656. X    pass (by reference) arrays into functions.  Not being able to do this
  657. X    makes it very difficult to write some sorts of code.  In particular,
  658. X    library functions cannot work on user supplied arrays, so things like
  659. X    generic sorting routines (even for one type of record) simply cannot be
  660. X    written in I4GL.
  661. X
  662. X    One of the biggest manually produced source files (as opposed produced
  663. X    by a code generator) I've seen was a single file because it operated on
  664. X    a single array.  Because of the limitations on the number of globals
  665. X    files in a single module (I4GL-L15), another globals file could not be
  666. X    used to hide the information properly.  So a single file was the only
  667. X    solution, but it was ugly!
  668. X
  669. X    I4GL-L03 was rated in class A because it would make a lot of programs very
  670. X    much easier to code.
  671. X
  672. XI4GL-L04:
  673. X    At the moment, there is a limit of 512 bytes on the size of the string
  674. X    which can be passed into a function, or returned from a function.
  675. X    Strictly, this is partly a documentation issue, because you can
  676. X    actually pass an arbitrarily large character string into a function.
  677. X    But, as discussed under I4GL-L01, you cannot pass arbitrarily large
  678. X    strings back from a function.  This is a considerable nuisance when the
  679. X    program needs a function to build an arbitrarily complex query and return
  680. X    the query string back again, and in other circumstances too.  This problem
  681. X    could be alleviated by passing a large character string into a function by
  682. X    reference (so the called function could write directly on the space where
  683. X    the calling function wants the answer, instead of having to copy it on to
  684. X    the temporary string space stack and then copying it back off again).
  685. X
  686. X    I4GL-L04 was rated in class B because it would make a lot of programs a
  687. X    lot easier to write.
  688. X
  689. XI4GL-L05:
  690. X    I4GL does not provide support for renaming types.  This means that if
  691. X    you ever have to build a record out spare parts, and you need both an
  692. X    array of this type and a few single record variables, you have to be
  693. X    very careful about how you edit either the declaration of the array or
  694. X    the declaration of the singel variables.  The only reliable way of
  695. X    defining a record of the required type is to define a special view in the
  696. X    database which contains no data but which has the correct structure
  697. X    type, and then to define variables as shown below.  This is doubly true
  698. X    if the definitions are actually in two separate source files.
  699. X
  700. X        DEFINE
  701. X            arr1        ARRAY[30] OF RECORD LIKE Special_view.*,
  702. X            var1        LIKE Special_view.*,
  703. X            var2        LIKE Special_view.*
  704. X
  705. X    I4GL should provide a full scale type defining mechanism.  There are
  706. X    enough languages to choose from when you do this (Pascal, C, Algol,
  707. X    Ada, C++, ...) and it would certainly be nice to have some of the
  708. X    object-orientated features of C++ added at the same time (I4GL-L30).
  709. X
  710. X    I4GL-L05 was rated in class B because it would make a lot of programs
  711. X    very much easier to write.
  712. X
  713. XI4GL-L06:
  714. X    Most languages (including, for pity's sake, BASIC) manage to provide a
  715. X    way of initializing variables without writing out screens full of
  716. X    assignment statements which take up space in both the source and the
  717. X    object files, not to mention in the main memory of the machine, and
  718. X    which take time to execute when a better defined language would provide
  719. X    the initialisation essentially for free.  Both local variables and
  720. X    external variables should be initializable.
  721. X
  722. X    I4GL-L06 was rated in class A because it would make a lot of programs
  723. X    so much easier to write and maintain.
  724. X
  725. XI4GL-L07:
  726. X    Record assignments are supported (though see I4GL-L08); it would be
  727. X    useful to be able to compare two records.  Doing the job properly
  728. X    manually is a pain, especially if you have to worry about nulls.  Some
  729. X    language support for this is long overdue.
  730. X
  731. X    I4GL-L07 was rated in class B because it is relatively hard to do
  732. X    properly, even though it would make many programs easier to write and
  733. X    maintain.
  734. X
  735. XI4GL-L08:
  736. X    There are a variety of restrictions on what can be done with records
  737. X    containing blobs.  One of the most irritating is that you cannot do
  738. X    record assignment when a record contains blobs.  To get around this, it
  739. X    is customary to make the record holding blobs as small as possible so
  740. X    that when an assignment is made, the manual copying of the other
  741. X    components is either unnecessary or as limited as possible.  It is not
  742. X    clear what the correct semantics of copying blobs should be, especially
  743. X    if the blobs are large, which is one of the main reasons why it is not
  744. X    supported.
  745. X
  746. X    I4GL-L08 was rated in class D because it is hard to define a sensible
  747. X    set of semantics for the operator.
  748. X
  749. XI4GL-L09:
  750. X    I4GL should allow any expression to be used anywhere.  In C, you don't
  751. X    have to worry about whether you can use the result of a function call
  752. X    added to a subscripted variable as the index into an array -- of course
  753. X    you can.  Unfortunately, there are all sorts of petty restrictions on
  754. X    what sorts of expression can be used where in I4GL.  You cannot use a
  755. X    subscripted variable as a subscript: array[pointer_array[i]] is not
  756. X    allowed.  You cannot use the result of a function call in a DISPLAY
  757. X    statement: DISPLAY function_call() is not allowed.  There is inadequate
  758. X    distinction between the comma as a string concatenation operator and as
  759. X    a list separator.  (It should be better when I4GL supports the "||"
  760. X    string concatenation operator which is part of Version 5.00 SQL.)
  761. X    There are places where you can use a literal but not a variable; one of
  762. X    the irritating ones is that the numbers indicating that the substring
  763. X    to be returned in a SELECT statement cannot be variables (not even "?"
  764. X    place markers) -- they have to be written directly into the text of the
  765. X    SQL statement.
  766. X
  767. X    I4GL-L09 was rated in class A because it is such a nuisance having to
  768. X    remember where which particular forms of expression are permissible.
  769. X
  770. XI4GL-L10:
  771. X    I4GL version 4.10 provided two useful functions, fgl_lastkey() and
  772. X    fgl_keyval() which help a lot with identifying what on earth is going
  773. X    on.  However, when one wants to provide a vertical menu (amongst other
  774. X    occasions), it would be very helpful to be able to get a single
  775. X    character at a time.  However, PROMPT FOR CHAR is no help because it
  776. X    moves the cursor around the screen unpleasantly.  Using INPUT on a
  777. X    single character AUTONEXT field is no help because fgl_lastkey()
  778. X    returns the value 2018 which stands for AUTONEXT.  The existing DISPLAY
  779. X    ARRAY is not flexible enough to do the required job (and probably
  780. X    shouldn't be made to do it, though the upgraded version described below
  781. X    would make life a lot easier than the current version does).  So, I4GL
  782. X    should provide a bolt-hole function fgl_getkey() which reads a
  783. X    character and whose result can be interpreted using fgl_keyval().
  784. X
  785. X    I4GL-L10 was rated in class A because it is trivial to provide it and
  786. X    would make life so much easier for writing programs.
  787. X
  788. XI4GL-L11:
  789. X    ANSI C defines routines setlocale() and localeconv() which provide
  790. X    tremendously detailed information about how money values (in
  791. X    particular) should be formatted for a particular locale.  There is not,
  792. X    regrettably, any standard routine which formats a numeric quantity
  793. X    using those rules, though there is a de facto standard in "The Standard
  794. X    C Library" by P J Plauger.  However, I4GL is used in many international
  795. X    locations, and should should be able to provide a mechanism for
  796. X    handling formatting according to locale.  See also I4GL-L14.
  797. X
  798. X    I4GL-L11 was rated in class C because it can be provided by diligent I4GL
  799. X    programmers, but it takes considerable effort.
  800. X
  801. XI4GL-L12:
  802. X    One request in CDI was specifically for 8-bit character support,
  803. X    especially in ISQL forms, which has been translated to I4GL for the
  804. X    purposes of this exercise, though it is desirable that ISQL forms (and
  805. X    reports) should give the same support.  This is presumably to enable
  806. X    8-bit characters to be entered at a terminal and displayed, and stored
  807. X    in the database and retrieved, and so on.  See also I4GL-L13.
  808. X
  809. X    I4GL-L12 was rated in class C because it is something which is likely
  810. X    to happen anyway as the engines develop support for national languages
  811. X    and so on.  It is possible that I4GL-L12 should really be rated
  812. X    in class A.
  813. X
  814. XI4GL-L13:
  815. X    The new 16-bit Unicode character set (and possibly the 32-bit character
  816. X    set, whatever it is called) should ideally be supported.  However, it
  817. X    is far from clear what this really means, so some research is required
  818. X    before this can be implemented.
  819. X
  820. X    I4GL-L13 was rated in class C because it is not clear what it entails.
  821. X    Maybe it should really be rated in class D or E.
  822. X
  823. XI4GL-L14:
  824. X    I4GL provides the environment variable DBMONEY, but there is no provision
  825. X    in the language for handling multiple currencies.  Maybe the best way of
  826. X    handling this is via the locale mechanism of I4GL-L11, or maybe some other
  827. X    mechanism is appropriate.  Some sort of support is necessary.
  828. X
  829. X    I4GL-L14 was rated in class C because it is something which can be coded
  830. X    around, but it would be better if there was some proper support for it.
  831. X
  832. XI4GL-L15:
  833. X    At the moment, any source file can only contain one statement of the
  834. X    form: GLOBALS "file.4gl".  This always was a remarkably silly
  835. X    restriction as there is next door to no cost in allowing zero or more
  836. X    such statements compared with the cost of allowing zero or one such
  837. X    statements.  The processing for the second and subsequent such
  838. X    statements is identical to the processing for the first.  And being
  839. X    able to have multiple globals files would allow far better control over
  840. X    the scope of globals, since each globals file would only define closely
  841. X    related variables, and each source file which needed to use those
  842. X    variables would only know about the variables it really needed to know
  843. X    about.  In general, it would vastly improve the quality of the software
  844. X    which could be produced.  (See also I4GL-L16, I4GL-L17.)
  845. X
  846. X    I4GL-L15 was rated in class A because it is trivial to implement and
  847. X    would make an improvement out of all proportion to the difficulty of
  848. X    implementation.
  849. X
  850. XI4GL-L16:
  851. X    I4GL sorely lacks any facility analogous to the C preprocessor.  The
  852. X    language should provide support for including header files which
  853. X    contain definitions of types (I4GL-L05) and constants (I4GL-L29), or
  854. X    conditional compilation.
  855. X
  856. X    The C preprocessor is not really appropriate for use because its
  857. X    comment conventions are different from I4GL (which already has 3
  858. X    comment conventions, so a fourth, C compatible one is not a good idea),
  859. X    and because it use an I4GL comment convention to indicate the
  860. X    statements of interest to itself.  Additionally, I4GL does not provide
  861. X    support for identifying the line number in the original source file, so
  862. X    the error message relating to line 3254 in the preprocessed source may
  863. X    easily actually refer to line 456 in the unpreprocessed file
  864. X    (I4GL-L17).
  865. X
  866. X    An equivalent phase should be provided by the I4GL compilers, with
  867. X    similar facilities.
  868. X
  869. X    I4GL-L16 was rated in class C because it would take a certain amount of
  870. X    implementation, but it would be very helpful.
  871. X
  872. XI4GL-L17:
  873. X    The WHENEVER ERROR CALL function facility is not very helpful because
  874. X    it is not possible to pass any information to the function, and that
  875. X    includes any indication of where the error occurred.  Admittedly, the
  876. X    error is logged if you have an error log open (but see I4GL-L22,
  877. X    I4GL-L23), and it is difficult to write the error handling code so it
  878. X    reacts sensibly to the location, but then calling an error logging
  879. X    function is not all that helpful because you probably have to set some
  880. X    module or global variable to indicate that an error occurred, and then
  881. X    check as if you had used WHENEVER ERROR CONTINUE, and since you can't
  882. X    tell where the error occurred, you cannot log you error messages any
  883. X    better.  It would be helpful if a function called by WHENEVER ERROR
  884. X    CALL was at least given the line number and file name (corresponding to
  885. X    __LINE__ and __FILE__ in the C preprocessor) of the statement which
  886. X    triggered the error, and the function name (__FUNCTION__?) would often
  887. X    be helpful (if only because function names change less often than line
  888. X    numbers in files, so different reactions could occur depending on which
  889. X    function triggered the error).  This could be done without change of
  890. X    syntax since the existing error handling functions would simply ignore
  891. X    the arguments which were provided, but new functions could use them
  892. X    immediately.
  893. X
  894. X    I4GL-L17 was rated in class C because it should be implemented as part
  895. X    of implementing I4GL-L16, and I4GL-L16 was rated as class C.
  896. X
  897. XI4GL-L18:
  898. X    There is not at present any mechanism for determining the hours part of
  899. X    an interval.  To do so, you have to convert the interval to just the
  900. X    hours part, format that into a string, and convert the string into an
  901. X    integer, which is a lot of unnecessary work.  Similar comments apply to
  902. X    all the other components of both interval and datetime values.  With
  903. X    intervals, it would also be helpful on occasion if there was a way of
  904. X    converting an interval of type DAY TO FRACTION into the total number of
  905. X    seconds, minutes, hours or days, where the result would be a decimal
  906. X    value with an appropriate precision and scale.  It is not clear whether
  907. X    corresponding functions can be defined sensibly for datetime values.
  908. X    These functions should also be made available to the ESQL languages.
  909. X
  910. X    I4GL-L18 was rated in class B because it should not be very hard to do
  911. X    and would improve the usabilty of datetime and interval types.
  912. X
  913. XI4GL-L19:
  914. X    Early versions of I4GL allowed magic words like USER, TIME, TODAY and
  915. X    CURRENT to be used in certain restricted contexts; TIME only in a
  916. X    report, USER in a SQL statement, TODAY and CURRENT in most places.
  917. X    Both USER and TIME should be usable anywhere.  The other word in this
  918. X    general category is SITENAME or DBSITENAME (synonyms); it is not clear
  919. X    whether this should be allowed outside an SQL statement, but there is
  920. X    no obvious reason why not, and it would provide uniform behaviour.
  921. X
  922. X    I4GL-L19 was rated in class A because it should be easy to fix.
  923. X
  924. XI4GL-L20:
  925. X    There is some interaction between the environment variable TZ and the
  926. X    DATETIME value, because the US developers will not have develpoed
  927. X    DATETIME working on GMT and here in GMT territory, the value of CURRENT
  928. X    is normally correct.  In 4.00, the interaction was not simple (it
  929. X    didn't seem to change when you changed TZ), but 5.00 seems to use TZ.
  930. X    This should be documented.
  931. X
  932. X    I4GL-L20 was rated in class A because it is a simple change to the
  933. X    documentation.
  934. X
  935. XI4GL-L21:
  936. X    C provides static functions so that a file can control its external
  937. X    interface.  I4GL does not, but it should.  While on the subject of
  938. X    private objects, I4GL could also usefully provide the equivalent of
  939. X    staic variables in C functions.
  940. X
  941. X    I4GL-L21 was rated in class B because it should be easy to implement.
  942. X
  943. XI4GL-L22:
  944. X    The function STARTLOG does not give any indication that it failed to
  945. X    open the error log file.  This means that when you go to use the log
  946. X    file, your program stops out of control with an error about cannot
  947. X    write to log file.  To fix this, an alternative function is required
  948. X    with a revised interface since trying to return a value where none is
  949. X    expected will cause trouble in R4GL even if C4GL will survive.  (See
  950. X    also I4GL-L23.)
  951. X
  952. X    I4GL-L22 was rated in class B because it is easy to fix.
  953. X
  954. XI4GL-L23:
  955. X    The standard logged error message looks like:
  956. X
  957. X        Date: 21/01/1993    Time: 15:57:41
  958. X        Program error at "rrr.4gl", line number 7.
  959. X        FORMS statement error number -1110.
  960. X        Form file not found
  961. X
  962. X    It would frequently be helpful if at the very least the user ID and
  963. X    possibly the terminal id and/or process id were also recorded, because
  964. X    it is usually the case that there are multiple users who are running
  965. X    the program at the same time, and it can be difficult to determine
  966. X    which user it was that had a particular problem.  Other information
  967. X    which would also be useful is the value of ARG_VAL(0), because
  968. X    sometimes different programs use a common log file.  A revised format
  969. X    could look like the example below.  The date has a timezone appended so
  970. X    that if a user in California is using a database in the UK by remotely
  971. X    logging into a machine in the UK, their local time is recorded (if they
  972. X    have bothered to set TZ).  It avoids the problem of the log file
  973. SHAR_EOF
  974. echo "End of part 1"
  975. echo "File i4glmods is continued in part 2"
  976. echo "2" > s2_seq_.tmp
  977. exit 0
  978.