home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ST-Computer Leser 2002 January
/
STC_CD_01_2002.iso
/
GAMES
/
DGEM
/
DGEM_DEV
/
DGEMDEV
/
DMAKE
/
MAKEFILE.GFA
(
.txt
)
< prev
next >
Wrap
GFA-BASIC Atari
|
2001-12-10
|
3KB
|
141 lines
RESERVE 512000
'
line_max&=2000
column_max&=32
'
DIM line$(line_max&)
LET nb_line%=0
'
DIM column_type&(column_max&)
DIM column_length&(column_max&)
LET column_number&=0
LET structure_length&=0
LET structure_number&=0
'
LET output$=""
'
ordre$=CHAR{ADD(BASEPAGE,128)}
ordre$=MID$(ordre$,2,ASC(ordre$))
ordre$=ordre$+CHR$(0)
IF @s_exist(ordre$)
OPEN "i",#1,ordre$
RECALL #1,line$(),-1,nb_line%
CLOSE #1
ELSE
~FORM_ALERT(1,"[1]["+ordre$+" not found.][Cancel]")
QUIT
ENDIF
'
output$=@find$("FILENAME")
IF INSTR(output$,":\")=0
output$=LEFT$(ordre$,RINSTR(ordre$,"\"))+output$
ENDIF
'
separator$=@find$("SEPARATOR")
'
FOR i&=0 TO PRED(column_max&)
column_type$=UPPER$(@find$("COLUMN"+STR$(SUCC(i&))))
IF column_type$="INT"
column_length&(i&)=2
column_type&(i&)=1
INC column_number&
ELSE IF column_type$="LONG"
column_length&(i&)=4
column_type&(i&)=2
INC column_number&
ELSE IF LEFT$(column_type$,4)="CHAR"
column_length&(i&)=VAL(MID$(column_type$,6))
INC column_length&(i&) ! for the final nullbyte
IF ODD(column_length&(i&)) ! respect parity to avoid call on odd pointer
INC column_length&(i&)
ENDIF
column_type&(i&)=3
INC column_number&
ENDIF
EXIT IF LEN(column_type$)=0
ADD structure_length&,column_length&(i&)
NEXT i&
'
adr%=GEMDOS(72,L:MUL(nb_line%,structure_length&))
IF adr%>0
structure_number&=0
FOR i&=0 TO PRED(nb_line%)
'
a$=LEFT$(TRIM$(line$(i&)))
IF LEN(a$)>0 AND a$<>"@" AND a$<>"#"
a$=line$(i&)
IF INSTR(a$,"#")>0
a$=TRIM$(LEFT$(a$,PRED(INSTR(a$,"#"))))
ENDIF
ptr%=ADD(adr%,MUL(structure_length&,structure_number&))
FOR j&=0 TO PRED(column_number&)
pos&=INSTR(a$,separator$)
'
column_value$=LEFT$(a$,PRED(pos&))
SELECT column_type&(j&)
CASE 1
INT{ptr%}=VAL(column_value$)
CASE 2
LONG{ptr%}=VAL(column_value$)
CASE 3
IF SUCC(LEN(column_value$))>column_length&(j&)
~FORM_ALERT(1,"[1][CHAR overflow at line "+STR$(i&)+".][Cancel]")
ELSE
CHAR{ptr%}=STRING$(PRED(column_length&(j&)),CHR$(0))
CHAR{ptr%}=column_value$
ENDIF
ENDSELECT
'
ADD ptr%,column_length&(j&)
a$=MID$(a$,SUCC(pos&))
NEXT j&
INC structure_number&
ENDIF
'
NEXT i&
'
IF structure_number&>0
OPEN "o",#1,output$
BPUT #1,adr%,MUL(structure_number&,structure_length&)
CLOSE #1
ENDIF
'
~GEMDOS(73,L:adr%)
~FORM_ALERT(1,"[1][ Work completed on "+STR$(structure_number&)+" records. ][ Okay ]")
ELSE
~FORM_ALERT(1,"[1][Not enough memory.][Cancel]")
ENDIF
QUIT 0
'
> FUNCTION find$(str$)
LOCAL tmp&,tmp$,str_len&,line&
str$="@"+str$+"="
str_len&=LEN(str$)
tmp&=MIN(100,PRED(nb_line%))
FOR line&=0 TO tmp&
IF LEFT$(line$(line&),str_len&)=str$
tmp$=MID$(line$(line&),SUCC(str_len&))
IF INSTR(tmp$,"#")>0
RETURN TRIM$(LEFT$(tmp$,PRED(INSTR(tmp$,"#"))))
ELSE
RETURN TRIM$(tmp$)
ENDIF
ENDIF
NEXT line&
RETURN ""
ENDFUNC
> FUNCTION s_exist(exist_name$)
LOCAL existe&
IF LEN(exist_name$)=0 OR exist_name$=c0$
RETURN FALSE
ELSE
existe&=GEMDOS(61,L:V:exist_name$,W:0)
IF existe&>0
~GEMDOS(62,W:existe&)
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ENDIF
ENDFUNC