home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1993-06-19 | 11.2 KB | 489 lines |
- ' ----------------------------------
- '
- ' AMOS Compiler tiny - Shell
- ' V 2.00
- '
- ' By Francois LIONET
- ' & Jean-Baptiste BOLCATO
- '
- ' (c) 1993 Europress Software Ltd.
- '
- ' ----------------------------------
-
- Set Accessory
- Resource Bank 16
-
- Global PATH$,DPATH$,PRAM$,CNAME$,FACC,ER$
- Global FLAG$,TEMP_SRCE$,TEMP_DEST$
- Global SCR,SCX,SCY,SCSX,SCSY,DY,SOP
-
- ' screens opening speed
- SOP=20
-
- ' screens definitions
- ADAT=Leek(Dreg(3))
- If ADAT Then SCSX=Deek(ADAT) : SCX=Deek(ADAT+4) : SCY=Deek(ADAT+6)+16
- If SCSX<640 Then SCSX=640 : SCX=128 : SCY=68
- SCSY=64
- Auto View Off
- _OPEN_FREE_SCREEN[SCSX,SCSY] : SCR=Param
- _INIT_WORK
-
- ' open screen
- Screen Show SCR : Auto View On
- For Y=1 To SCSY Step SOP
- Screen Display SCR,SCX,SCY,,Y
- Wait Vbl
- Next
- Screen Display SCR,,SCY,,SCSY : Wait Vbl
-
- ' An accessory?
- If Prg Under<>1
- _WARN[Resource$(8)] : _QUIT
- End If
-
- For S=0 To 7 : If S<>SCR : Trap Screen Close S : End If : Next
-
- ' several paths
- DPATH$=Resource$(0)
- PRAM$="RAM:AMOS_Compiler_Temp/"
-
- ' load default config
- C$="AMOSPro_Compiler_Config"
- CNAME$=PRAM$+C$
- _CONFIG_LOAD[CNAME$]
- If Param
- CNAME$=Dir$+C$
- _CONFIG_LOAD[CNAME$]
- If Param
- CNAME$=Dir$+"s/"+C$
- _CONFIG_LOAD[CNAME$]
- If Param
- CNAME$="S:"+C$
- _CONFIG_LOAD[CNAME$]
- If Param
- CNAME$=Fsel$(Dir$+"**","",Resource$(73),Resource$(74))
- _CONFIG_LOAD[CNAME$]
- If Param
- ER$=Resource$(75)
- _GEST_ERR2
- Edit
- End If
- End If
- End If
- End If
- End If
-
- ' extract shell preferences
- _CONFIG_GET[72]
- FLAG$=Param$
- If Len(FLAG$)<43
- ER$=Resource$(77) : _GEST_ERR2
- End If
-
- ' Load APCmp program
- If Not Extension_5_00AE
- _INFO[Resource$(25)]
- Repeat
- Trap Extension_5_0098 DPATH$+"APCmp"
- If Errtrap
- _WAIT[10]
- _NOINFO
- _WARN[Resource$(80)]
- F$=Fsel$("","",Resource$(82))
- If Exist(Dir$+"APCmp")
- DPATH$=Dir$
- Else
- ER$=Resource$(81) : _GEST_ERR2
- End If
- Else
- _NOINFO
- End If
- Until Extension_5_00AE
- End If
-
- ' go ram & save dpath$, cname$
- If Exist(PRAM$+"AMOSPro_Compiler_Config")
- DPATH$=PRAM$
- Open In 1,PRAM$+"Compiler_Origin"
- Trap Input #1,PATH$
- Trap Input #1,CNAME$
- Close
- End If
-
- ' Copy Libs into ram-disc?
- _GETFLAG[24]
- If Param
- If Exist("Ram:")
- If DPATH$<>PRAM$
- _COPY_RAMLIBS[DPATH$,PRAM$]
- If Param
- PATH$=DPATH$
- Open Out 1,PRAM$+"Compiler_Origin"
- Print #1,PATH$
- Print #1,CNAME$
- Close
- DPATH$=PRAM$
- End If
- End If
- End If
- End If
-
- _CONFIG_GET[9] : TEMP_SRCE$=Param$
- _CONFIG_GET[10] : TEMP_DEST$=Param$
-
- X=Free
- _COMPILE
- _QUIT
-
- Procedure _CONFIG_GET[N]
- Shared _CONFBK,CONFL
- A=Start(_CONFBK)+8+1
- If N>0
- For C=1 To N
- L=Peek(A) : If L=255 : Pop Proc[""] : End If
- Add A,L+2
- Next
- End If
- L=Peek(A)
- End Proc[Peek$(A+1,L)]
- Procedure _CONFIG_LOAD[F$]
- Shared _CONFBK,_CONFL
- If Not Exist(F$) : Pop Proc[1] : End If
- Trap Open In 1,F$ : If Errtrap : Pop Proc[2] : End If
- _CONFL=Lof(1) : Close
- For B=65000 To 0 Step -1 : Exit If Length(B)=0 and Length(B+1)=0 : Next B
- _CONFBK=B
- Trap Reserve As Work B,1024*6 : If Errtrap : Pop Proc[3] : End If
- Trap Bload F$,Start(B) : If Errtrap : Erase B : Pop Proc[2] : End If
- If Peek$(Start(B),4)<>"CCt1" : Erase B : Pop Proc[4] : End If
- End Proc[0]
- Procedure _COMPILE
- Shared _CONFBK
- COMP_STP=100
- On Error Proc _GEST_ERR
- Resume Label _FINISH_COMPILE
- Timer=0 : _INFO[Resource$(9)]
- S$=TEMP_SRCE$
- Call Editor Equ("AEd_SaveAsName"),0,S$ : A$=Param$
- Repeat : Until Timer>50 : _NOINFO
- If A$<>"" : _WARN[A$] : _QUIT : End If
- Ask Editor Equ("AEdAsk_ProgramName") : SS$=Param$
- If SS$="" : SS$="Unnamed.AMOS" : End If
- D$=TEMP_DEST$ : DD$=SS$ : F=0
- For C=Len(DD$) To 1 Step -1
- A$=Mid$(DD$,C,1)
- Exit If(A$="/") or(A$=":")
- If A$="." : DD$=Left$(DD$,C-1)+"_C"+Mid$(DD$,C) : F=1 : Exit : End If
- Next
- If F=0 : DD$=DD$+"_C.AMOS" : End If
- Call Editor Equ("AEd_CloseName"),1,DD$
- C$="TYPE=3 "
- _GETFLAG[4] : If Param=0 : C$=C$+"NO" : End If : C$=C$+"ERR "
- _GETFLAG[14] : If Param=0 : C$=C$+"NO" : End If : C$=C$+"LONG "
- _GETFLAG[5] : If Param=0 : C$=C$+"NO" : End If : C$=C$+"DEF "
- _GETFLAG[6] : If Param=0 : C$=C$+"NO" : End If : C$=C$+"WB "
- C$=C$+'TEMP="Ram:" '
- C$=C$+'LIBS="'+DPATH$+'" '
- _GETFLAG[24]
-
- ' Go for it now!!!
- Extension_5_006E "Step",COMP_STP
- Extension_5_006E "Conf",Start(_CONFBK)
- Dialog Open 2,1
- Vdialog$(2,0)=Resource$(14)+Resource$(15)+"..."
- D=Dialog Run(2,10)
- Set Slider 2,2,2,0,4,4,4,0
- HSX1=(SCSX-600)/2+24+14 : HSY1=(SCSY-50)/2+18
- HSX2=(SCSX+600)/2-24-15 : HSY2=(SCSY-50)/2+32
-
- ' start compilation
- E$=""
- Clear Key
- A$="Gaga" : MAGIC=Leek(Varptr(A$))
- COM$='FROM "'+S$+'" TO "'+D$+'" '+C$
- Timer=0
- Extension_5_006E COM$,MAGIC
- STATUS=Param
- COMP_ERR$= Extension_5_0078
-
- ' Compilation main loop
- While STATUS
- Hslider HSX1,HSY1 To HSX2,HSY2,COMP_STP,0,STATUS
- K$=Inkey$
- Exit If K$=Chr$(27)
- Multi Wait
- Extension_5_006E "Cont",MAGIC
- STATUS=Param
- Wend
-
- ' result (user break, error or success)
- COMP_ERR$= Extension_5_0078
- SIZE= Extension_5_00BE
- NBINST= Extension_5_00BE
- If K$=Chr$(27)
- COMP_ERR$=Resource$(111)
- Extension_5_006E "Stop",MAGIC
- SIZE=0 : NBINST=0
- End If
-
- ' erase temporary file
- Trap Kill TEMP_SRCE$
-
- ' result report
- Trap Dialog Close 2
- _END_COMPILE[SIZE,NBINST,Timer,SS$,COMP_ERR$]
- If COMP_ERR$=""
- Call Editor Equ("AEd_OpenLoad"),1,D$
- Trap Kill D$
- If Param$="" : Call Editor Equ("AEd_Rename"),0,DD$ : End If
- Else
- If SIZE<0
- Call Editor Equ("AEd_GotoLine"),NBINST
- Call Editor Equ("AEd_StartLine")
- End If
- End If
- _FINISH_COMPILE:
- Trap Screen Show 9
- Screen Show SCR
- Clear Key
- End Proc
- Procedure _COPY_RAMLIBS[S$,D$]
- Dim F$(64)
- Trap Dialog Freeze 1
- Dialog Open 2,1
- Vdialog$(2,0)=Resource$(40)
- Trap D=Dialog Run(2,15)
- If Errtrap=0
- Set Slider 2,2,2,0,4,4,4,0
- SX=336
- HSX1=(SCSX-SX)/2+32+2 : HSY1=(SCSY-50)/2+26
- HSX2=(SCSX+SX)/2-32-19 : HSY2=(SCSY-50)/2+35
- Hslider HSX1,HSY1 To HSX2,HSY2,10,0,0
- End If
- F$(0)="AMOSPro.Lib"
- F$(1)="Compiler.Lib"
- F$(2)="Def_Compiled.info"
- F$(3)="AMOSPro_Default_Resource.Abk"
- F$(4)="AMOSPro_Editor_Resource.Abk"
- F$(5)="Header_AMOS.AMOS"
- F$(6)="Header_CLI.Lib"
- F$(7)="Header_Backstart.Lib"
- F$(8)="AMOSPro_Editor_Config"
- NCOP=8
- _GETFLAG[37]
- If Param
- Inc NCOP
- F$(NCOP)="AMOSPro_CompilerA_Resource.Abk"
- End If
- R=-16
- Repeat
- If Resource$(R)<>""
- Inc NCOP
- A$=Resource$(R)
- S=Instr(A$," ") : If S : A$=Left$(A$,S-1) : End If
- F$(NCOP)=A$
- End If
- Dec R
- Until R<-26
- Set Dir ,""
- Trap Open In 1,DPATH$+F$(0)
- If Errtrap
- _NOINFO
- _WARN[F$(I)+Resource$(41)]
- _WARN[Resource$(42)]
- Goto _NORAM
- End If
- Close 1
- For I=0 To NCOP
- If Exist(S$+F$(I))
- Trap Open In 1,S$+F$(I)
- Trap TL=TL+Lof(1)
- Trap Close 1
- End If
- Next I
- If Chip Free+Fast Free<TL+100*1024
- _NOINFO
- _WARN[Resource$(43)]
- Goto _NORAM
- End If
- Trap Mkdir Left$(D$,Len(D$)+(Right$(D$,1)="/"))
- For I=0 To NCOP
- A$=S$+F$(I) : B$=D$+F$(I)
- If Not Exist(B$)
- _FCOPY[A$,B$]
- End If
- If HSX1 : Hslider HSX1,HSY1 To HSX2,HSY2,NCOP,0,I : End If
- Next I
- _FCOPY[CNAME$,D$+"AMOSPro_Compiler_config"]
- F=-1
- _NORAM:
- _NOINFO
- Set Dir ,".info/*.info/*.*.info"
- End Proc[F]
- Procedure _DEL_RAMLIBS[S$]
- On Error Goto _ERR
- Dim F$(64)
- Set Dir 32,""
- If Upper$(Left$(S$,4))="RAM:"
- _INFO[Resource$(44)]
- _WAIT[10]
- A$=Dir First$(S$+"**")
- I=0
- While A$<>""
- F$(N)=Left$(A$,32)-" " : Inc N
- A$=Dir Next$
- Wend
- If N>0
- For I=0 To N-1
- Trap Kill S$+F$(I)
- Next I
- End If
- Trap Kill S$
- _END: _NOINFO : Pop Proc
- End If
- _ERR: Resume _END
- End Proc
- Procedure _END_COMPILE[SZ,NBI,T,D$,E$]
- Dialog Open 2,1
- Vdialog(2,0)=Max(400,Len(E$)*8+24)
- Vdialog(2,1)=48
- If E$=""
- Vdialog$(2,3)=Resource$(110)
- T=T/50 : M=T/60 : S=T mod 60
- Vdialog$(2,4)=Resource$(121)+" "+Str$(SZ)+" "+Resource$(12)+" -"+Str$(NBI)+" "+Resource$(122)
- A$=Resource$(120)+" "
- If M>0 : A$=A$+Str$(M)+" minutes," : End If
- A$=A$+Str$(S)+" seconds."
- Vdialog$(2,5)=A$
- Else
- Vdialog$(2,3)=Resource$(112)
- Vdialog$(2,4)=D$
- Vdialog$(2,5)=E$
- End If
- ' bell warning!
- _GETFLAG[36]
- If Param : Play 3,70,0 : End If
- D=Dialog Run(2,12)
- _WAIT[250]
- Dialog Close 2
- End Proc[D]
- Procedure _FCOPY[S$,D$]
- On Error Goto _ERR
- Open In 1,S$
- Open Out 2,D$
- LF=Lof(1)
- Do
- Exit If P>=LF
- L=Min(1024,LF-P)
- A$=Input$(1,L)
- Print #2,A$;
- Add P,L
- Loop
- Close
- Pop Proc[0]
- _ERR: Resume _ER2
- _ER2: Trap Kill D$ : Close : Pop Proc[-1]
- End Proc
- Procedure _GEST_ERR
- _WARN[Err$(Errn)]
- Resume Label
- End Proc
- Procedure _GEST_ERR2
- For I=0 To 7 : Trap Screen Close I : Next I
- Auto View On
- Screen Open 0,640,24,2,Hires
- Screen Display 0,,100,,
- Palette 0,$FFF : Curs Off
- If Errn=0
- A$=ER$
- Else
- A$=Err$(Errn)
- End If
- Centre ">> "+A$+" <<"
- Print : Print : Centre "Press any key"
- Wait Key
- Screen Close 0
- Edit
- End Proc
- Procedure _GETFLAG[N]
- End Proc[Asc(Mid$(FLAG$,N,1))-48]
- Procedure _INFO[A$]
- Trap Dialog Freeze 1
- Dialog Open 2,1
- Vdialog$(2,0)=A$
- Trap D=Dialog Run(2,14)
- End Proc[Errtrap]
- Procedure _INIT_WORK
- Trap Dialog Close 1
- Trap Dialog Open 1,1,10,1024*10
- If Errtrap=0
- D=Dialog Run(1,0)
- Else
- _GEST_ERR2
- End If
- End Proc[Errtrap]
- Procedure _NOINFO
- Trap Dialog Close 2
- Trap Dialog Unfreeze 1
- End Proc
- Procedure _OPEN_FREE_SCREEN[SX,SY]
- For S=0 To 7
- Trap Screen S
- If Errtrap
- Trap Resource Screen Open S,SX,SY,0
- If Errtrap : Pop Proc[-1] : End If
- Screen Hide S
- Cls 0 : Paper 0 : Pen 0 : Flash Off
- Wait Vbl
- Pop Proc[S]
- End If
- Next
- End Proc[-1]
- Procedure _WAIT[T]
- For I=1 To T
- Multi Wait
- Exit If Mouse Key
- Next I
- Repeat
- Multi Wait
- Until Mouse Key=0
- End Proc
- Procedure _WARN[A$]
- L=Len(A$)*8
- Dialog Open 3,1
- Vdialog$(3,0)=A$
- Trap D=Dialog Run(3,13)
- If Errtrap=0
- _WAIT[200]
- Trap Dialog Close 3
- Else
- Trap Dialog Close 3
- Pop Proc[65535]
- End If
- End Proc[(D=2)]
- Procedure _QUIT
- _GETFLAG[26] : If Param=0 : Extension_5_00A0 : End If
- If DPATH$=PRAM$
- _GETFLAG[25]
- If Param=0
- _DEL_RAMLIBS[PRAM$]
- End If
- End If
- Trap Dialog Close
- Trap Screen SCR
- If Errtrap=0
- For Y=1 To SCSY Step SOP
- Screen Offset SCR,,Y
- Screen Display SCR,,,,SCSY-Y
- Wait Vbl
- Next
- Screen Close SCR
- End If
- Trap Close
- For I=2 To 15 : Trap Erase I : Next I
- Trap Erase 65000
- Trap Kill TEMP_SRCE$
- Trap Kill TEMP_DEST$
- Edit
- End Proc