home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1992-02-05 | 15.6 KB | 650 lines |
- ' Commune V0.01 By Andrew Welsh, Dec 91, Jan 92
- ' SysOp Answer Machine Release 1
- ' Phone Answer Routine By Chris Mackenzie, 1991
- '
- ' F1 - Set Up modem manually
- ' F2 - Change Palette
- ' F10 - Exit
- '
- ' Next Release should see added functions, like a micro host program
- ' with limited file and msg capacity .. + better handling of strings
- ' Release of v0.02 sometime in '92 (Depending on uni workload)
- '
- ' Some Procedures are irrelevent to this release .. Ignore them !!
- '
- Global DATE$,TIME$,NAME$,PASSWORD$,OK,FMAX,PASS,WIN,BNAME$,SYSNAME$
- Global HBAUD$,BAUD$
- Global PALNAME$
- PALNAME$="BBS/Pal_Palette.DF"
- COMM$=Chr$(27)+Chr$(27)+Chr$(27)+"ath0"+Chr$(13)
- Screen Open 0,640,260,8,Hires : Flash Off
- If Exist(PALNAME$)
- PAL_LOAD[PALNAME$]
- End If
- Get Palette 0
- Change Mouse 4
- MOUSE_COLOURS_[$BBB,$CCC,$DDD]
- Curs Off : Cls 0 : Paper 0
- Wind Open 1,0,0,79,8,2
- Wind Save
- Border 2,0,2
- T$=" Commune V0.01 - (C) 1991, Def Pixel Software "
- Title Top T$
- Pen 3
- Locate 0,1 : Centre "SysOp Answer Machine Release 1"
- Pen 2
- Wind Open 2,0,65,79,23,1
- Border 2,0,2
- T$="F10 to Exit"
- Title Bottom T$
- Wind Save
- '
- ' All Config (File/msg/general) routines will go here !!
- _DATE$
- If Exist("BBS/Log.DF")
- Append 1,"BBS/Log.DF"
- Else
- Open Out 1,"BBS/Log.DF"
- End If
- Print #1," "
- Print #1,"--- Commune Session Started ---"
- Print #1,DATE$,TIME$
- Close 1
- _L0AD_CONFIG
- '
- WIN=1
- Wind Open 3,180,25,39,19,2
- Curs Off
- Border 1,0,2
- Cdown
- Pen 3
- X$=Border$("Commune V0.01",2)
- Centre X$ : Cdown : Cdown : Cdown
- Pen 2
- Centre "(C) 1991, Def Pixel Software" : Cdown
- Cdown : Centre "Written by" : Cdown
- Cdown : Centre "Andrew Welsh" : Cdown
- Cdown : Centre "Using AMOS v1.32" : Cdown
- Cdown : Centre "Thanks to Chris Mackenzie" : Cdown
- Cdown : Centre "For the Answer Routine" : Cdown
- Repeat
- Inc T
- Until Mouse Key=1 or T=19000
- Wind Close
- Window 2
- WIN=0
- Wind Save
- Proc _DATE$
- Every 1000 Proc _DATE$
- On Error Proc _WHAT
- Resume Label MON
- '
- ' Monitor Modem and Answer Phone
- MON:
- _PHONE
- Procedure _PHONE
- ' Phone Answer Routine
- INIT:
- ' First I'll Open a SHARED Serial Channel Like So......
- Print "Setting Up Modem ..."
- Serial Open 0,0,True,False,False : Serial Speed 0,2400 : Serial Bits 0,8,1
- Serial Parity 0,-1
- Serial Send 0,"atz"+Chr$(13)
- Wait 50
- Serial Send 0,"atv0"+Chr$(13)
- Wait 50
- Serial Send 0,"atm0"+Chr$(13)
- Wait 50
- Serial Send 0,"ats0=1"+Chr$(13)
- Wait 50
- Print "Awaiting Call ..."+Chr$(13)
- ' FRED
- '
- ' Then After We Get a Connect Message We'll Open Another Channel
- ' At The Callers Speed.......
- Do
- A$=Inkey$ : S=Scancode
- Exit If S=89
- IN$=Serial Input$(0)
- If IN$="0" Then Print "OK"
- If IN$="1" Then CON300
- If IN$="2" Then Print "RING" : Print
- If IN$="3" Then Print "NO CARRIER"
- If IN$="4" Then Print "ERROR"
- If IN$="5" Then CON1200
- If IN$="10" Then CON2400
- If S=80 Then M0DEMST
- If S=81
- CHANGERGB[0,0,0,2,3]
- End If
- Loop
- Print "Exiting .. Commune !"
- Serial Send 0,"ats0=0"+Chr$(13)
- Wait 50
- Serial Close 0
- Wait 50
- Wind Close
- Wait Vbl
- Wind Close
- Screen Close 0
- If Exist("BBS/Log.DF")
- Append 1,"BBS/Log.DF"
- Else
- Open Out 1,"BBS/Log.DF"
- End If
- Print #1," "
- Print #1,"--- Commune Answer Machine ---"
- Print #1,"--- Session End ---"
- Print #1,DATE$,TIME$
- Close 1
- End
- '
- End Proc
- '
- ' Swap Serial Channels and Jump to Main BBS
- Procedure CON300
- Serial Open 1,0,True,False,False : Serial Speed 1,300 : Serial Bits 1,8,1
- Serial Parity 1,-1 : Serial Close 0 : BAUD$="300"
- Print "Connected at 300 Baud !" : BBS
- End Proc
- Procedure CON1200
- Serial Open 1,0,True,False,False : Serial Speed 1,1200 : Serial Bits 1,8,1
- Serial Parity 1,-1 : Serial Close 0 : BAUD$="1200"
- Print "Connected at 1200 Baud !" :
- Serial Send 1,"Commune v0.01 - SysOp Answer Machine Release 1" : CHK[1]
- Serial Send 1,"(C) 1991 - Andrew Welsh" : CHK[1]
- BBS
- End Proc
- Procedure CON2400
- Serial Open 1,0,True,False,False : Serial Speed 1,2400 : Serial Bits 1,8,1
- Serial Parity 1,-1 : Serial Close 0 : BAUD$="2400"
- Print "Connected at 2400 Baud !" :
- Serial Send 1,"Commune v0.01 - SysOp Answer Machine Release 1" : CHK[1]
- Serial Send 1,"(C) 1991 - Andrew Welsh"+Chr$(13)+Chr$(13) : CHK[1]
- BBS
- End Proc
- '
- ' Main Routine of BBS - From here you go to other Procs for Diff
- ' Menus etc.
- Procedure BBS
- TMP$=Chr$(12)+Chr$(13)+Chr$(10) : Serial Send 1,TMP$ : CHK[1]
- TMP$="You Have Connected at "+BAUD$ : Serial Send 1,TMP$ : CHK[1]
- TMP$="Welcome to "+BNAME$+" ..." : Serial Send 1,TMP$ : CHK[1]
- Rem We Will Now Break out into a SIMPLE ASCII Terminal.....
- TITLE
- _NAME_PW
- _LOG_CALL
- Serial Send 1,"HANG UP PLEASE !"+Chr$(13)
- Serial Send 1,"+++"+Chr$(13)
- Serial Send 1,"ath0"+Chr$(13)
- ' Serial Send 1,"Simple Teminal - Sysop Is In !!" : CHK[1]
- ' TERMINAL:
- ' Do
- ' A$=Inkey$ : S=Scancode
- ' Exit If S=89
- ' IN$=Serial Input$(1)
- ' If IN$<>"" Then Print IN$;
- ' A$=Inkey$ : If A$<>"" Then Serial Send 1,A$
- ' CHK[1]
- ' Loop
- End Proc
- '
- ' CHK Checks to See If The Data is Finshed Being Sent
- ' The Paramater CH is The Serial CHANNEL Number....
- Procedure CHK[CH]
- L:
- CHK=Serial Check(CH) : If CHK=0 Then Goto L
- End Proc
- ' Get Time & Date from System
- Procedure _DATE$
- '
- ' Call DOS DateStamp function
- T$=Space$(12)
- Dreg(1)=Varptr(T$)
- RIEN=Doscall(-192)
- NJ=Leek(Varptr(T$))
- '
- ' Find this year's first day
- A=1978 : JOUR=7
- Do
- BIS=0 : If(A and 3)=0 : BIS=1 : End If
- Exit If NJ-365-BIS<0
- Add JOUR,1+BIS : If JOUR>7 : Add JOUR,-7 : End If
- Add NJ,-365-BIS
- Inc A
- Loop
- '
- ' Find month
- M=1
- Do
- Read N
- Exit If NJ-N<0
- Add NJ,-N : Inc M
- Loop
- Inc NJ
- '
- ' Fabrique la chaine
- J$=Mid$(Str$(NJ),2) : If Len(J$)<2 : J$="0"+J$ : End If
- M$=Mid$(Str$(M),2) : If Len(M$)<2 : M$="0"+M$ : End If
- A$=Mid$(Str$(A),2)
- DATE$=J$+"-"+M$+"-"+A$
- '
- ' Length of each month
- Data 31,28+BIS,31,30,31,30,31,31,30,31,30,31
- '
- '
- ' Call DOS function
- T$=Space$(12)
- Dreg(1)=Varptr(T$)
- RIEN=Doscall(-192)
- MN=Leek(Varptr(T$)+4)
- SEC=Leek(Varptr(T$)+8)
- '
- ' Minutes calculation
- H=MN/60 : H$=Mid$(Str$(H),2) : If Len(H$)<2 : H$="0"+H$ : End If
- M=MN mod 60 : M$=Mid$(Str$(M),2) : If Len(M$)<2 : M$="0"+M$ : End If
- '
- ' Seconds calculation
- S=SEC/50 : S$=Mid$(Str$(S),2) : If Len(S$)<2 : S$="0"+S$ : End If
- '
- ' Final string
- TIME$=H$+":"+M$+":"+S$
- '
- Window 1
- Home
- Locate 8,4
- Print " "
- Locate 8,4
- Print "Chip Free";Chip Free,"Fast Free";Fast Free,DATE$,TIME$
- If WIN=0
- Window 2
- Else
- Window 3
- End If
- Every On
- End Proc
- Procedure TITLE
- Open In 1,"BBS/Title"
- Set Input 10,-1
- Do
- Input #1,N$
- ' Print N$
- Serial Send 1,N$
- CHK[1]
- N=Eof(1)
- Exit If N=-1
- Loop
- Close 1
- End Proc
- ' Manual Modem Set-Up
- Procedure M0DEMST
- WIN=1
- Wind Open 3,0,182,79,9,2
- Title Top "Press F1 to Exit"
- Do
- A$=Inkey$ : S=Scancode
- Exit If S=80
- If A$<>""
- Serial Send 0,A$
- Wait Len(A$)
- End If
- R=Serial Get(0)
- If R=13 : Print : End If
- If R>31 : Print Chr$(R); : End If
- Loop
- Wind Close
- WIN=0
- Window 2
- End Proc
- ' Useless Error Msg
- Procedure _WHAT
- Print "ERROR !! ERROR !!"
- Wait 100
- Resume Label
- End Proc
- '
- Procedure _NAME_PW
- Serial Send 1,Chr$(12)+"Enter Name : "
- Do
- IN$=Serial Input$(1)
- If IN$<>"" Then Print IN$;
- If IN$="" Then Exit
- NAME$=NAME$+IN$
- Loop
- ' This Will search for user name and then password once I release
- ' a Full BBS Version !!
- End Proc
- Procedure _L0AD_CONFIG
- '
- Print "Loading Config File ..."
- Open In 1,"BBS/Config.DF"
- Set Input 10,-1
- COUNT=0
- Do
- Input #1,N$
- If COUNT=0
- SYSNAME$=N$
- End If
- If COUNT=1
- BNAME$=N$
- End If
- If COUNT=2
- HBAUD$=N$
- End If
- N=Eof(1)
- Exit If N=-1
- Inc COUNT
- Loop
- Close 1
- End Proc
- Procedure _LOG_CALL
- If Exist("BBS/Log.DF")
- Append 1,"BBS/Log.DF"
- Else
- Open Out 1,"BBS/Log.DF"
- End If
- ' More to be Added
- Print #1,"---"
- Print #1,NAME$+" at "+BAUD$
- Print #1,DATE$
- Close 1
- End Proc
- Procedure CHAT_TERMINAL
- TMP$="SysOp Breaking In .." : Serial Send 1,TMP$ : CHK[1]
- Do
- A$=Inkey$ : S=Scancode
- Exit If S=80
- IN$=Serial Input$(1)
- If IN$<>"" Then Print IN$;
- A$=Inkey$ : If A$<>"" Then Serial Send 1,A$
- CHK[1]
- Loop
- MAIN_MENU
- End Proc
- Procedure MAIN_MENU
- MEN:
- If FLAG$="1"
- Open In 1,"BBS/Title"
- Set Input 10,-1
- Do
- Input #1,N$
- Print N$
- Serial Send 1,N$
- CHK[1]
- N=Eof(1)
- Exit If N=-1
- Loop
- Close 1
- End If
- Do
- A$=Inkey$ : S=Scancode
- If S=80 Then CHAT_TERMINAL
- IN$=Serial Input$(1)
- ' If IN$<>"" Then Print IN$;
- 'If IN$="g" Then BYE_BYE
- 'If IN$="b" Then BULLS
- 'If IN$="f" Then FILE_MENU
- If IN$="p" Then PAGE
- Loop
- End Proc
- Procedure PAGE
- TMP$="Calling SysOp - Wait a Sec " : Serial Send 1,TMP$ : CHK[1]
- Window 1
- Home
- Print NAME$+" Paged Sysop ..."
- Window 2
- Flash 0,"(000,7)(FFF,1)"
- Repeat
- Wait 10
- Inc N
- Until N=10
- TMP$="SysOp is not around at the 'mo" : Serial Send 1,TMP$ : CHK[1]
- MAIN_MENU
- End Proc
- '
- Procedure MOUSE_COLOURS_[A,B,C]
- Colour 19,A
- Colour 18,B
- Colour 17,C
- End Proc
- '--------------- Colour changer routines --------------
- '
- Procedure CHANGERGB[X,Y,SCRN,C1,C2]
- '
- ' Palette changer.
- '
- ' X,Y - Coords of top left corner. (Will auto centre
- ' if coord is zero)
- ' SCRN - The screen to put requester on.
- ' C1,C2 - C1 - Body colour, C2 - The other colour.
- '
- Shared X1,Y1,X2,Y2,YO,OK,CANCEL,DRAG,SP,LP
- Dim RGB(31)
- '
- SC=Screen
- Screen SCRN
- Set Font 0 : Rem Select default font
- Reserve Zone Screen Colour+10
- ' ---
- W=204 : H=103 : NCOLS=Screen Colour
- ' --- Centre requester if X or Y are zero
- If X=0 Then X=Screen Width/2-W/2
- If Y=0 Then Y=Screen Height/2-H/2
- RGBINIT[X,Y,W,H,NCOLS]
- Get Block 1,X1,Y1-YO,W+4,H+4+YO
- ' --- Draw the requester ---
- Ink 0,0
- Bar X1+3,Y1+3-YO To X1+W+3,Y1+H+3
- Ink C1,C2
- Bar X1,Y1-YO To X2,Y2
- Ink C2,C1
- Box X1+1,Y1+1-YO To X2-1,Y2-1
- Ink C2,C1
- ' --- slider bars
- For A=0 To 2
- Bar X1+7+A*20,Y1+3 To X1+23+A*20,Y2-3
- Next
- ' --- Tic marks
- For A=0 To 16
- Draw X1+4,Y1+3+A*6 To X1+66,Y1+3+A*6
- Next
- ' --- palette
- For A=0 To Min(32,NCOLS)-1
- Ink A,A : XX=A mod 8 : YY=A/8
- Bar X1+XX*16+72,Y1+YY*16+4 To X1+XX*16+87,Y1+YY*16+20
- RGB(A)=Colour(A)
- Next
- Ink C2,C1
- Box X1+71,Y1+3 To X1+88+16*XX,Y1+21+16*YY
- ' --- OK CANCEL buttons
- Box X1+72,Y1+87 To X1+132,Y1+97
- Text X1+78,Y1+95,"Cancel"
- '
- Box X1+72,Y1+57 To X1+132,Y1+67
- Text X1+78,Y1+65,"Load"
- '
- Box X1+144,Y1+87 To X1+194,Y1+97
- Text X1+157,Y1+95,"O.K"
- '
- Box X1+144,Y1+57 To X1+194,Y1+67
- Text X1+157,Y1+65,"Save"
- '--- Selected colour
- SELCOL=0 : Rem default to colour 0
- Ink SELCOL
- Bar X1+187,Y1+75 To X1+193,Y1+84
- Ink C2
- Box X1+186,Y1+74 To X1+194,Y1+85
- ' --- Drag bar
- Ink C2
- Bar X1+4,Y1-YO+4 To X2-4,Y1
- '------------------------------------------
- ' --- draw RGB buttons
- SFADERS[SELCOL,X1,Y1,C1,C2]
- ' --- main loop
- CHANGING_COLOURS=True
- While CHANGING_COLOURS
- While Mouse Key=0
- Wend
- YM=Y Screen(Y Mouse)-Y1+3 : Z=Mouse Zone
- If Z>0 and Z<4
- ' --- sliders moving
- CFADERS[SELCOL,Z-1,YM]
- SFADERS[SELCOL,X1,Y1,C1,C2]
- End If
- If Z>3 and Z<3+NCOLS+1
- ' --- colour selected
- SELCOL=Z-4
- Ink SELCOL
- Bar X1+187,Y1+75 To X1+193,Y1+84
- SFADERS[SELCOL,X1,Y1,C1,C2]
- Ink SELCOL
- End If
- If Z=CANCEL
- ' --- Cancel
- CHANGING_COLOURS=False
- Clear Key
- End If
- If Z=LP
- ' --- Load Palette
- PAL_LOAD[PALNAME$]
- End If
- If Z=SP
- ' --- Load Palette
- PAL_SAVE[PALNAME$]
- End If
- If Z=OK
- ' --- Ok
- A=0
- Repeat
- Colour A,RGB(A) : SPCOL[A,RGB(A)]
- Inc A
- Until A>=Min(32,NCOLS)
- CHANGING_COLOURS=False
- End If
- If Z=DRAG
- ' --- Drag bar
- WIDTH=W+4 : HEIGHT=H+3+YO
- ' --- Get req image
- Get Block 2,X1,Y1-YO,WIDTH,HEIGHT+1
- MX=X Screen(X Mouse) : MY=Y Screen(Y Mouse)
- MXO=MX-X1 : MYO=MY-Y1+YO
- Gr Writing 2 : Rem XOR
- Limit Mouse X Hard(MXO),Y Hard(MYO) To X Hard(Screen Width-(WIDTH-MXO)),Y Hard(Screen Height-(HEIGHT-MYO)-1)
- While Mouse Key=1
- Box MX-MXO,MY-MYO To MX-MXO+WIDTH,MY-MYO+HEIGHT
- OLDX=MX : OLDY=MY
- While OLDX=X Screen(X Mouse) and OLDY=Y Screen(Y Mouse) : Wend
- MX=X Screen(X Mouse) : MY=Y Screen(Y Mouse)
- Box OLDX-MXO,OLDY-MYO To OLDX-MXO+WIDTH,OLDY-MYO+HEIGHT
- Wend
- Limit Mouse X Hard(0),Y Hard(0) To X Hard(Screen Width),Y Hard(Screen Height)
- Gr Writing 1
- ' --- Restore bg at old location
- Put Block 1
- ' --- Save bg at new location
- Get Block 1,MX-MXO,MY-MYO,WIDTH,HEIGHT+1
- ' --- Put Req at new location
- Put Block 2,MX-MXO,MY-MYO
- Del Block 2
- ' --- Re-calc var's & zones ---
- X=MX-MXO : Y=MY-MYO+YO
- RGBINIT[X,Y,W,H,NCOLS]
- End If
- Wend
- Put Block 1
- Screen SC
- Del Block 1
- End Proc
- '
- Procedure RGBINIT[X,Y,W,H,NCOLS]
- ' Calc main vbls & set zones.
- ' Has to be done twice, hence the proc.
- Shared X1,Y1,X2,Y2,YO,OK,CANCEL,DRAG,SP,LP
- X1=X : X2=X1+W : Y1=Y : Y2=Y1+H : YO=6
- Z=1
- For A=0 To 2
- Set Zone Z,X1+7+A*20,Y1+3 To X1+23+A*20,Y2-3 : Inc Z
- Next
- For A=0 To Min(32,NCOLS)-1
- Ink A,A : XX=A mod 8 : YY=A/8
- Set Zone Z,X1+XX*16+72,Y1+YY*16+4 To X1+XX*16+87,Y1+YY*16+20 : Inc Z
- Next
- Set Zone Z,X1+72,Y1+87 To X1+132,Y1+97 : OK=Z : Inc Z
- Set Zone Z,X1+72,Y1+57 To X1+132,Y1+67 : LP=Z : Inc Z
- Set Zone Z,X1+146,Y1+87 To X1+194,Y1+97 : CANCEL=Z : Inc Z
- Set Zone Z,X1+146,Y1+57 To X1+194,Y1+67 : SP=Z : Inc Z
- '
- '
- Set Zone Z,X1+4,Y1-YO+4 To X2-4,Y1 : DRAG=Z
- End Proc
- '
- Procedure CFADERS[S,F,YM]
- Dim R(2)
- ' --- get RGB components of selected colour
- C=Colour(S)
- R(0)=C/256
- R(1)=(C/16) mod 16
- R(2)=C mod 16
- ' --- amplitude of slider (0..15)
- V=Max(0,Min(15,15-(YM-7)/6))
- ' --- set RGB's value
- R(F)=V
- ' --- set selected colour
- Colour S,(R(0)*256+R(1)*16+R(2))
- ' ---
- SPCOL[S,Colour(S)]
- End Proc
- '
- Procedure SFADERS[S,X1,Y1,C1,C2]
- Shared RGBO
- Dim R(2)
- '
- C=RGBO
- R(0)=C/256
- R(1)=(C/16) mod 16
- R(2)=C mod 16
- ' --- Erase slider button
- Ink C2,C2
- For A=0 To 2
- V=(15-R(A))*6+4
- Bar X1+9+20*A,Y1+V To X1+20+20*A,Y1+V+5
- Next
- ' --- set new colour value
- C=Colour(S)
- RGBO=C
- R(0)=C/256
- R(1)=(C/16) mod 16
- R(2)=C mod 16
- ' --- print the colour value in hex
- Ink C2,C1
- Gr Writing 1
- Text X1+72,Y1+82,"Col"+Right$(" "+Str$(S),2)+" Val:$"+Right$("000"+Mid$(Hex$(RGBO),2),3)
- Ink C1,C1
- ' --- draw new slider button
- For A=0 To 2
- Ink C1,C1
- V=(15-R(A))*6+4
- Box X1+9+20*A,Y1+V To X1+20+20*A,Y1+V+5
- Ink S
- Bar X1+10+20*A,Y1+V+1 To X1+19+20*A,Y1+V+4
- Next
- End Proc
- '
- Procedure SPCOL[A,B]
- If Length(1)>0
- Doke Start(1)+2+8*Length(1)+2*A,B
- End If
- End Proc
- Procedure PAL_SAVE[PALNAME$]
- TEMP=Screen
- Screen SCR
- Bsave PALNAME$,Screen Base+98 To Screen Base+162
- End Proc
- '
- Procedure PAL_LOAD[PALNAME$]
- TEMP=Screen
- Screen SCR
- Bload PALNAME$,Screen Base+98
- Get Palette 0
- Screen TEMP
- End Proc