emjej@uokvax.UUCP (05/23/84)
#N:uokvax:3500038:000:499 uokvax!emjej May 23 01:07:00 1984 The other day, I did a dump /d0/cmds/ident on a SSB Level II system, just for the heck of it. Since that will dump the various text strings that ident uses, and since ident is nice enough to tell what it thinks a module is based on the language nibble of the type/language byte in the module header, one can thus find out what kinds of modules ident knows about. To my surprise, I found C I-code Am I dreaming/suffering from not seeing what may have been a preceding BASI? James Jones
strick@gatech.UUCP (Henry A. Strickland) (05/29/84)
() Concerning the languages that OS9 understands in the module headers ... The following language values are defined in my system definitions file: * * Language values * Object equ 1 6809 object Icode equ 2 Basic09 I-code Pcode equ 3 Pascal P-code Ccode equ 4 C I-code CblCode equ 5 Cobol I-code FrtnCode equ 6 Fortran I-code My edition of 'ident' knows about all six of these. ( My C compiler generates assembly language, which eventually ends up begin a module of language type object. ) It's interesting that 'ident' knows about so many languages, but not very useful unless the 'shell' does, too. The shell contains a table of language values and the names of the appropriate interpreters. Dump your shell, and somewhere around byte $350 to $390 you should see the object generated by code something like this: table fcb sbtrn+icode fcs /RunB/ fcb prgrm+pcode fcs /PascalS/ fcb sbrtn+cblcode -- cobol, not c fcs /RunC/ fcb 0 Older versions of the shell may not have the 'sbtrn+' and 'prgrm+' terms in the 'fcb' lines. When the shell is ready execute (F$fork) a module, if the language value is not 'object', it looks in this table to find the name of the interpreter. The shell then executes the interpreter, passing your command line to the interpreter as parameter. It's rather strange Microware gave my shell the ability to understand a cobol module, but not fortran or C module (if such a thing exists). If you don't like the choices of languages in your shell, you can attempt to change them. Somehow edit the module ( I often write short basic09 procedures to open a file, seek a place in it, put one byte, & close it to do quick things like this ) and change the table. If you don't plan to use pascal or cobol, you have plenty of room to tamper. You can make the table shorter (terminate it with the zero) but not longer. The table is referenced by a LEAX <TABLE,PCR about 40 to 70 bytes later ( opcodes 308CNN ). If this was a 16-bit offset, you could add a new table to the end of the module, but it's an 8-bit offset, and it can't point that far. Before you can use your new shell, you have to give it a higher revision number in the header, and run it through the 'verify' command with the 'u' option. Then use attr to give it execute permission. Just in case you ever need to .... strick -- Henry Strickland The Clouds Project, School of ICS, Georgia Tech, Atlanta GA 30332 CSNet: Strick @ GATech ARPA: Strick.GATech @ CSNet-Relay uucp: ...!{akgua,allegra,rlgvax,sb1,unmvax,ulysses,ut-sally}!gatech!strick