105 lines
4.4 KiB
Tcsh
105 lines
4.4 KiB
Tcsh
|
#!/usr/local/bin/tcsh
|
||
|
#################################################################
|
||
|
# #
|
||
|
# Copyright 2001, 2010 Fidelity Information Services, Inc #
|
||
|
# #
|
||
|
# This source code contains the intellectual property #
|
||
|
# of its copyright holder(s), and is made available #
|
||
|
# under a license. If you do not know the terms of #
|
||
|
# the license, please stop and do not read further. #
|
||
|
# #
|
||
|
#################################################################
|
||
|
|
||
|
|
||
|
if ($# != 2) then
|
||
|
echo ""
|
||
|
echo " Usage: $0 <c-struct-name> <c-src-filename>"
|
||
|
echo ""
|
||
|
exit
|
||
|
endif
|
||
|
|
||
|
###############################################################################################################
|
||
|
#
|
||
|
# This block of demarcated code initializes the environment variables and aliases used by the offset program.
|
||
|
# If this program is used anywhere outside the Greystone development environment, care should be taken in doing the following.
|
||
|
#
|
||
|
# (a) This utility offset.csh needs the shell "tcsh" to exist in /usr/local/bin (a soft link would suffice too).
|
||
|
# (b) This utility also needs an accompanying awk script "offset.awk" to do primitive parsing of the C file.
|
||
|
# (c) The environment variable "gtm_src" should be set to point to the absolute pathname containing the C-source-file.
|
||
|
# (d) The environment variable "gtm_tools" should be set to point to the absolute pathname containing the "offset.awk" program.
|
||
|
# (e) The alias "gt_cc" should be set to the command for the C-compiler with appropriate flags (including #defines).
|
||
|
# (f) The alias "gt_ld" should be set to the command for the C-linker (cc or ld would do) with appropriate flags.
|
||
|
# (g) The environment variable "user" should be set to the appropriate user-name. Usually this is taken care of by the shell.
|
||
|
#
|
||
|
# Note that this utility creates temporary files for its processing in the form /tmp__${user}_offset_*
|
||
|
# It removes these files only in the case the offset determination was successful.
|
||
|
# Therefore care should be taken to avoid unintended proliferation of these temporary files in the system.
|
||
|
#
|
||
|
# Once the above changes have been done in place here, comment out the greystone-environment-specific-initialization below.
|
||
|
#
|
||
|
switch ($gtm_exe:t)
|
||
|
case "[bB]*":
|
||
|
alias gtcc "`alias gt_cc_bta`"
|
||
|
set gt_ld_options = "$gt_ld_options_bta"
|
||
|
breaksw
|
||
|
case "[dD]*":
|
||
|
alias gtcc "`alias gt_cc_dbg`"
|
||
|
set gt_ld_options = "$gt_ld_options_dbg"
|
||
|
breaksw
|
||
|
case "[pP]*":
|
||
|
alias gtcc "`alias gt_cc_pro`"
|
||
|
set gt_ld_options = "$gt_ld_options_pro"
|
||
|
breaksw
|
||
|
default:
|
||
|
echo "Environment Variable gtm_exe should point to either 'pro' or 'bta' or 'dbg' only. Exiting..."
|
||
|
exit -1
|
||
|
breaksw
|
||
|
endsw
|
||
|
|
||
|
alias gt_ld $gt_ld_linker $gt_ld_options -L$gtm_obj $gt_ld_extra_libs $gt_ld_sysrtns $gt_ld_syslibs
|
||
|
|
||
|
###############################################################################################################
|
||
|
|
||
|
set c_struct = $1
|
||
|
set srcfile = $2
|
||
|
|
||
|
set TMPFILE = /tmp/__${user}_offset_
|
||
|
|
||
|
if !(-e $gtm_src/$srcfile) then
|
||
|
echo "OFFSET-E-INVALIDSRCFILE : $gtm_src/$srcfile doesn't exist. Please give a valid c-source-file-name. Exiting..."
|
||
|
exit -1
|
||
|
endif
|
||
|
|
||
|
if !(-r $gtm_src/$srcfile) then
|
||
|
echo "OFFSET-E-SRCRDERR : Can't read $gtm_src/$srcfile for compiling. Please ensure read permissions before reissuing the command. Exiting..."
|
||
|
exit -1
|
||
|
endif
|
||
|
|
||
|
if ($srcfile:e != "c") then
|
||
|
echo "OFFSET-E-INVALIDCFILE : $srcfile doesn't have a .c extension. Please give a valid c-source-file-name. Exiting..."
|
||
|
exit -1
|
||
|
endif
|
||
|
|
||
|
(gtcc -E $gtm_src/$srcfile > ${TMPFILE}_$srcfile:r.lis) >& /dev/null
|
||
|
awk -v c_struct=${c_struct} -f $gtm_tools/offset.awk ${TMPFILE}_$srcfile:r.lis > ${TMPFILE}_$srcfile
|
||
|
gtcc ${TMPFILE}_$srcfile -o ${TMPFILE}_$srcfile.o >& /dev/null
|
||
|
|
||
|
if ($status != 0) then
|
||
|
echo "OFFSET-E-SRCSTRUCTMISMATCH : Very likely that the c-structure isn't used in the c-source-file-name. Please give a valid input."
|
||
|
echo " If you feel that the input is valid, please contact the author for assistance in debugging the offset utility (See ${TMPFILE}_$srcfile:r* for details)"
|
||
|
echo " Exiting..."
|
||
|
echo "-----------------------------------------------------------------------------------------"
|
||
|
echo "###### Below is the output from the compiler ########"
|
||
|
echo "-----------------------------------------------------------------------------------------"
|
||
|
gtcc ${TMPFILE}_$srcfile -o ${TMPFILE}_$srcfile.o
|
||
|
exit -1
|
||
|
endif
|
||
|
|
||
|
gt_ld ${TMPFILE}_$srcfile.o -o ${TMPFILE}_$srcfile:r.out >& /dev/null
|
||
|
|
||
|
${TMPFILE}_$srcfile:r.out
|
||
|
rm -f ${TMPFILE}_$srcfile:r.lis
|
||
|
rm -f ${TMPFILE}_$srcfile
|
||
|
rm -f ${TMPFILE}_$srcfile.o
|
||
|
rm -f ${TMPFILE}_$srcfile:r.out
|