소스 정보
- 저장소
- ahay/src
- 최근 소스 활동
- 2026년 6월 5일 21:20
- 감지된 SKILL.md 언어
- 영어
- 스타
- 339
- 포크
- 188
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/ahay/src --skill authoring-sf-programs-f77명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Use when writing an end-to-end Madagascar processing flow for a named geophysical task (NMO, migration, well-tie, denoising, dataset fetch, etc.) — teaches how to discover the right recipe in book/ and adapt it.
Use when composing a Madagascar data-processing pipeline from existing sf* programs — includes discovery, parameter conventions, and piping patterns.
Use when writing or modifying an SConstruct file that drives a Madagascar data-processing flow (Flow/Plot/Result/Fetch/Command).
SOC 직업 분류 기준
SKILL.md 표시 중
| name | authoring-sf-programs-f77 |
| description | Use when authoring a Madagascar sf* main program in Fortran 77. |
Use this skill for Madagascar processing programs in Fortran 77 fixed-format
(file extension .f, program named M<Name>.f). Typical scenarios: maintaining
legacy fixed-format code, porting existing F77 algorithms, or working with
research groups that standardize on gfortran -std=legacy or ifort.
F77 vs F90 key differences:
| Aspect | F77 | F90 |
|---|---|---|
| Source format | Fixed-format; code starts at column 7 | Free-format |
| Continuation | Any non-space/zero char in column 6 | & at end of line |
| File extension | M<name>.f | M<name>.f90 |
| Comments | C or * in column 1 | ! anywhere |
| Loops | do 10 i=1,n … 10 continue | do i=1,n … end do |
For shared conventions (SConstruct rules, self-doc headers, naming) see skills/authoring-sf-programs/.
Minimal F77 program derived from api/f77/Testfile.f and api/f77/test/clip.f.
Columns 1-6 are reserved; statement body starts at column 7; continuation
marker goes in column 6.
C Mclip.f -- clip float data to +/- clip
program Clipit
implicit none
integer*8 in, out
integer*8 sf_input, sf_output, sf_leftsize
logical sf_getfloat, sf_histint
integer n1, n2, i1, i2
real clip, trace(1000)
call sf_init()
in = sf_input("in")
out = sf_output("out")
if (.not. sf_histint(in,"n1",n1))
& call sf_error("No n1= in input")
if (.not. sf_getfloat("clip",clip))
& call sf_error("Need clip=")
n2 = sf_leftsize(in,1)
do 10 i2=1, n2
call sf_floatread(trace, n1, in)
do 20 i1=1, n1
if (trace(i1) .gt. clip) trace(i1) = clip
if (trace(i1) .lt. -clip) trace(i1) = -clip
20 continue
call sf_floatwrite(trace, n1, out)
10 continue
stop
end
Column layout reminder:
123456789...
C comment (C in col 1)
statement (col 7+)
&continuation (col 6)
10 label (cols 1-5)
All calls go through the librsff wrapper (fortran.c + cfortran.h).
Functions returning a value must be declared with the appropriate Fortran type.
Init and file handles — declare file handles as integer*8:
| Call | Returns | Purpose |
|---|---|---|
call sf_init() | — | Initialize Madagascar (must be first) |
sf_input("in") | integer*8 | Open named input RSF file |
sf_output("out") | integer*8 | Open named output RSF file |
call sf_fileclose(f) | — | Close file handle |
call sf_close() | — | Finalize I/O |
History reads — declare as logical; .false. means key absent:
| Call | Purpose |
|---|---|
sf_histint(f,"n1",i) | Read integer header key |
sf_histfloat(f,"d1",x) | Read float header key |
sf_histbool(f,"key",b) | Read logical header key |
sf_histstring(f,"label") | Read string (function returning character*) |
History writes (call subroutines, no return value):
| Call | Purpose |
|---|---|
call sf_putint(f,"n2",i) | Write integer to output header |
call sf_putfloat(f,"d2",x) | Write float |
call sf_putstring(f,"label",str) | Write string |
Command-line param reads — declare as logical; .true. if key found:
| Call | Purpose |
|---|---|
sf_getint("niter",i) | Read integer param |
sf_getfloat("clip",x) | Read float param |
sf_getfloats("d",xv,n) | Read n floats |
sf_getbool("verb",b) | Read yes/no param |
sf_getstring("tag") | Read string (function) |
Data I/O (call subroutines):
| Call | Purpose |
|---|---|
call sf_floatread(buf, n, f) | Read n floats from f |
call sf_floatwrite(buf, n, f) | Write n floats to f |
call sf_intread(buf, n, f) | Read n integers |
call sf_intwrite(buf, n, f) | Write n integers |
call sf_complexread(buf, n, f) | Read n complex values |
call sf_complexwrite(buf, n, f) | Write n complex values |
Utility:
| Call | Returns | Purpose |
|---|---|---|
sf_leftsize(f, dim) | integer*8 | Elements past dimension dim |
sf_gettype(f) | integer | Data type code (3 = float) |
call sf_error("msg") | — | Print and abort |
call sf_warning("msg") | — | Print, continue |
The F77 API builds only when f77 appears in the SCons API list
(api/f77/SConstruct):
env.get('F77'); sets -DGFORTRAN or
-DINTEL_COMPILER accordingly.fortran.c (with cfortran.h) into fortran.o.librsff.a (static library) and installs to lib/.librsff and core librsf.Typical user SConstruct snippet:
env.Append(LIBS=['rsff', 'rsf'])
env.Program('sfclip', ['Mclip.f'])
# For strict fixed-format:
env.Replace(F77FLAGS='-std=legacy -ffixed-form')
cfortran.h handles name-mangling: gfortran (single underscore) vs
f2c-style (double underscore) via compile-time defines.
Files in /Users/jgoai/m8r/src/api/f77/:
| File | Description |
|---|---|
fortran.c | C wrapper; FCALLSC* macros expose every sf_* function to F77 |
cfortran.h | Third-party (Burkhard Burow/DESY) Fortran↔C name-mangling header |
Testfile.f | Smoke-test: open in/out, read 100-float traces, write them back |
Testgetpar.f | Exercises all param-read calls (sf_getint, sf_getfloat, etc.) |
SConstruct | Builds librsff.a, installs to lib/, compiles test programs |
test/clip.f | Complete real program: float clipping with header inspection |
test/SConstruct | SCons build for the test/ example programs |
General Madagascar conventions (self-documentation strings, parameter help,
SCons Program builder, installation targets) are in:
F77-specific reminders:
sf_input, sf_output, sf_leftsize, sf_filesize as integer*8
— file handles and offsets are 64-bit on modern systems.sf_getint, sf_histfloat, …) as logical
to test them in if (.not. …) guards.implicit none — F77 implicit typing silently maps i-n to integer
and the rest to real, hiding declaration bugs.