DOS\pHQ(OB,xCOpNhJg,@)n&A"C( N @*h">(&/0<@2<N)@g~ l2< 'p Q$HC2< Q4<z9909EEvraRCBQ6<rarCBQ6<ra\CBQ6<raFSCBQ A ,"(H@0XHH@0XHHA0XHHA0,|?.?.-|=|-J=|Bn"lA~(rpg8 fr@` f@`$I&M@ p(QRA`<<=| 9g0.g=| Q-|=_=_-lBn,_Jg l0<@2<N"N,xNbPL,xCfd|oNJg @ hpNupNuJEf8`x0@@0@H@0000Nutopaz.fontgraphics.library" f" ,x,8 Where Amiga Memories Live On AMIGA DB  https://amigadb.net --- YOUR PORTAL TO AMIGA HISTORY --- ! Press mouse to boot !p@aivateGadget(gads[GDST_STRINGE],mywin,NIL) CASE "i","I"; showInfo() CASE "o","O" SELECT cycle CASE 0;trackdiskToDOS() DEFAULT StringF(temps,'A=\s\nB=\s\nC=\s\nD=\s\nE=\s',stringa,stringb,stringc,stringd,stringe) RtEZRequestA(temps,'_Ok',0,0,[RTEZ_REQTITLE,'OK Check...',RT_UNDERSCORE,"_",NIL]) ENDSELECT CASE "f","F"; updateFunction(gads) CASE "n","N"; IF cycle=6 THEN nyi() CASE "q","Q"; checkQuit() CASE "/","?"; RtEZRequ{estA('Written using Amiga E v3.1i','_Ok',0,0,[RTEZ_REQTITLE,'Language Info...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) CASE "0"; RtEZRequestA('Invalid length!','_Ok',0,0,[RTEZ_REQTITLE,'Problem...',RT_UNDERSCORE,"_",NIL]) CASE "1"; RtEZRequestA('Unable to allocate memory -\nforce allocation?','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Problem...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL]) CASE "2"; RtEZRequestA('Device name\ninvalid!','_R vOk',0,0,[RTEZ_REQTITLE,'Problem...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) CASE "3"; RtEZRequestA('Buffer value must\nbe positive!','_Ok',0,0,[RTEZ_REQTITLE,'Problem...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) CASE "4"; RtEZRequestA('Invalid start\nmemory address!','_Ok',0,0,[RTEZ_REQTITLE,'Problem...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) CASE "5"; RtEZRequestA('Invalid end\nmemory address!','_Ok',0,0,[RTEZ_REQTITLE,'Problem...',,SRTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) CASE "6"; RtEZRequestA('Format tracks 000-000 -\nplease confirm...','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Request...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL]) CASE "7"; RtEZRequestA('Format entire disk quickly -\nplease confirm...','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Request...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL]) CASE "8"; RtEZRequestA('Case sensitive?','tے_Yes|_No',0,0,[RTEZ_REQTITLE,'Request...',RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL]) CASE "9"; RtEZRequestA('I need more\ninformation!','_Ok',0,0,[RTEZ_REQTITLE,'Problem...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) CASE "h","H"; RtEZRequestA('* Bootblock = 0-1024\n* Entire disk = 901120\n* Offset for exe = 32\n* Offset and length\n must devide by 512','_Ok',0,0,[RTEZ_REQTITLE,'Help...',RT_UNDERSCORE,"_",NIL]) ENDSELECT ENDPROC PROC trackdiskToDOS() DEF b3YXuffer=NIL vala:=Val(stringa,NIL) valb:=Val(stringb,NIL) MidStr(stringe,stringd,2,1) vald:=Val(stringe,NIL) UpperStr(stringd) IF Not(StrCmp(stringd,'DF0:',ALL)) AND Not(StrCmp(stringd,'DF1:',ALL)) AND Not(StrCmp(stringd,'DF2:',ALL)) AND Not(StrCmp(stringd,'DF3:',ALL)) RtEZRequestA('Invalid drive','_Ok',0,0,[RTEZ_REQTITLE,'Error...',RT_UNDERSCORE,"_",NIL]) ELSE buffer:=New(valb) openTrackdisk() MOVE.L 4,A6 LEA dvcbadr(PC),A1 LEA newport(PC _),A0 MOVE.L A0,14(A1) MOVE.W #3,$1c(A1) LEA buffer,A0 MOVE.L A0,$28(A1) LEA valb,A0 MOVE.L A0,$24(A1) LEA vala,A0 MOVE.L A0,$2c(A1) JSR -$1c8(A6) ->DoIO(A1)exec LEA dvcbadr(PC),A1 MOVE.W #9,$1c(A1) MOVE.L #0,$24(A1) JSR -$1c8(A6) ->DoIO(A1)exec closeTrackdisk() WriteF('a=\d,b=\d,c=\s,d=\d\n',vala,valb,stringc,vald) ENDIF ENDPROC PROC showInfo() IF RtEZRequestA(info,'_Mo *re|_Ok',0,0,[RTEZ_REQTITLE,'Info...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=1 THEN showAbout() ENDPROC PROC showStatus(text) PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,text,NIL]:intuitext,15,121) ENDPROC PROC showAbout() RtEZRequestA('TrackDOS ][\nWritten by Zebedee/Area 51\n\nBased on the great util\nTrackDOS by Nic Wilson\n\n1997 An Area 51 Production','_Ok',0,0,[RTEZ_REQTITLE,'About...',RTEZ_FLAGS,EZREQF_CENTER RwTEXT,RT_UNDERSCORE,"_",NIL]) ENDPROC PROC nyi() RtEZRequestA('This routine hasn''t\nyet been written!','Oh _Fuck!',0,0,[RTEZ_REQTITLE,'Problem...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ENDPROC PROC createAllGadgets(glistptr:PTR TO LONG,vi,gads:PTR TO LONG) DEF gad,ng:PTR TO newgadget gad:=CreateContext(glistptr) ng:=[89,14,188,14,'_Function:',topaz80,GDCY_FUNC,NIL,vi,0]:newgadget gads[GDCY_FUNC]:=(gad:=CreateGadgetA(CYCLE_KIND,gad,ng,  êt [GTCY_LABELS,['Trackdisk to DOS','DOS to Trackdisk', 'Memory to DOS','DOS to Memory', 'Trackdisk to Memory','Memory to Trackdisk', 'Format Tracks','String Search',NIL], GTCY_ACTIVE,0,GT_UNDERSCORE,"_",NIL])) ng.leftedge := 14 ng.topedge := 105 ng.width := 46 ng.height := 12 ng.gadgettext := '_Ok' ng.gadgetid := GDBT_OK gads[GDBT_OK]:=(gad:=CreateGad RcgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 120 ng.gadgettext := '_Info' ng.gadgetid := GDBT_INFO gads[GDBT_INFO]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 227 ng.gadgettext := 'I_nit' ng.gadgetid := GDBT_INIT gads[GDBT_INIT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.topedge := 31 ng.leftedge := 165 ng.height := 14 ng.width := 108 ng.gadgettext := ' [}'= :' ng.gadgetid := GDST_STRINGA gads[GDST_STRINGA]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng, [GTST_STRING,'',GTST_MAXCHARS,255,GT_UNDERSCORE,"_",NIL])) ng.topedge := 45 ng.gadgetid := GDST_STRINGB gads[GDST_STRINGB]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng, [GTST_STRING,'',GTST_MAXCHARS,255,GT_UNDERSCORE,"_",NIL])) ng.topedge := 59 ng.width := 92 ng.gadgetid := GDST_STRINGC gads[GDST_STRINGC]:=(gad:=\ͶCreateGadgetA(STRING_KIND,gad,ng, [GTST_STRING,'',GTST_MAXCHARS,255,GT_UNDERSCORE,"_",NIL])) ng.topedge := 73 ng.gadgetid := GDST_STRINGD gads[GDST_STRINGD]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng, [GTST_STRING,'',GTST_MAXCHARS,255,GT_UNDERSCORE,"_",NIL])) ng.topedge := 87 ng.width := 108 ng.gadgetid := GDST_STRINGE gads[GDST_STRINGE]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng, [GTST_STRING,'',GTST_MAX(CHARS,255,GT_UNDERSCORE,"_",NIL])) ng.leftedge := 257 ng.topedge := 59 ng.width := 16 ng.gadgettext := '?' ng.gadgetid := GDBT_FREQC gads[GDBT_FREQC]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.topedge := 73 ng.gadgetid := GDBT_FREQD gads[GDBT_FREQD]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ENDPROC PROC checkQuit() IF (RtEZRequestA('Are you sure?','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Quit...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=1) THEN wanted:=FALSE ENDPROC PROC processWindowEvents(mywin:PTR TO window,vi,gads:PTR TO LONG) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad WHILE wanted Wait(Shl(1,mywin.userport.sigbit)) WHILE wanted AND (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress imsgClass:=imsg.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_MOUSEMOVE; ha NndleGadgetEvent(gad,vi,gads) CASE IDCMP_GADGETUP; handleGadgetEvent(gad,vi,gads) CASE IDCMP_VANILLAKEY; handleVanillaKey(imsgCode,vi,gads) CASE IDCMP_CLOSEWINDOW;checkQuit() ENDSELECT ENDWHILE ENDWHILE ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO screen,glist=NIL,vi,topborder,gads[11]:ARRAY OF LONG topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,[NIL])! topborder:=mysc.wbortop+mysc.font.ysize+1 createAllGadgets({glist},vi,gads) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'TrackDOS ][', WA_SCREENTITLE,'Parkbench Screen (PREVIEW COPY - NOT FOR DISTRIBUTION)', WA_GADGETS, glist, WA_AUTOADJUST, TRUE, WA_LEFT, 176, WA_TOP, 60, WA_WIDTH, 287, WA_MINWIDTH, 50, WA_HEIGHT, "e 136, WA_MINHEIGHT, 50, WA_SMARTREFRESH, TRUE, WA_RMBTRAP, TRUE, WA_ACTIVATE, TRUE, WA_CLOSEGADGET,TRUE, WA_DEPTHGADGET, TRUE, WA_DRAGBAR, TRUE, WA_IDCMP,IDCMP_REFRESHWINDOW OR BUTTONIDCMP OR IDCMP_CLOSEWINDOW OR IDCMP_VANILLAKEY, WA_PUBSCREEN,mysc,NIL]) Gt_RefreshWindow(mywin,NIL) DrawBevelBoxA(mywin.rport,6,12,275,121,[GT_VISUALINFO,vi,NIL]) -> Main #e DrawBevelBoxA(mywin.rport,10,29,267,74,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) -> Around str gads DrawBevelBoxA(mywin.rport,10,103,267,16,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) -> Around btn gads DrawBevelBoxA(mywin.rport,10,119,267,12,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) -> Around status showFunction('Disk Read Offset ','Disk Read Length ','Save Path/File ','Read From Device ','N/A ') OffGadget(gads[GDBT_INIT],mywin,NIL) OffGadget(gads[GDBT_FR$,VEQD],mywin,NIL) OffGadget(gads[GDST_STRINGE],mywin,NIL) StrCopy(info,'Values can be in decimal or hex.\nIf using hex precede value with $\nFor full disk, set offset to -1') showStatus('Version 1.00, released ??-???-97') IF wbmessage THEN RtEZRequestA('Welcome to TrackDOS ][','_Howdy!',0,0,[RTEZ_REQTITLE,'',RT_UNDERSCORE,"_",NIL]) processWindowEvents(mywin,vi,gads) EXCEPT DO IF mywin THEN CloseWindow(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THE%aZN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC badKickstart() DEF handle IF handle:=Open('CON:0/11/640/80/TrackDOS ][ Error:/CLOSE',NEWFILE) Fputs(handle,'This program requires Kickstart 2 or better\n') Delay(100) Close(handle) ELSE WriteF('This program requires Kickstart 2 or better\n') ENDIF ENDPROC PROC checkValidDrives() IF NIL=(diskbase:=OpenResource('disk.resource')) Raise(ERR_RSC) ELSE FOR ids:=0 TO 3 & unit[ids]:=getUnitID(ids) -> IF unit[ids]=0 THEN RtEZRequestA('Drive unit \d detected\nas valid device','_Ok',0,[ids],[RTEZ_REQTITLE,'Warning...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ENDFOR ENDIF ENDPROC PROC getFilename() HANDLE DEF fr:PTR TO filerequester fr:=AllocAslRequest(ASL_FILEREQUEST,[ASL_HAIL,'Get Filename',ASL_HEIGHT,200, ASL_WIDTH,320,ASL_LEFTEDGE,0,ASL_TOPEDGE,0,ASL_OKTEXT,'Use', ASL_CANCELT'pEXT,'Cancel',ASL_FILE,fname,ASL_DIR,fpath,NIL]) IF AslRequest(fr,NIL) fname:=fr.file fpath:=fr.drawer ELSE fname:=FALSE fpath:=FALSE ENDIF EXCEPT IF fr THEN FreeAslRequest(fr) SELECT exception CASE ERR_ASL; programError('Couldn''t allocate ASL request') ENDSELECT ReThrow() ENDPROC PROC openTrackdisk() MOVE.L 4,A6 SUB.L A1,A1 JSR -$126(A6) -> FindTask(A1)exec MOVE.L D0,taskid LEA newport(PC),A1 JSR -$162(A6) (y -> AddPort(A1)exec LEA dvcbadr(PC),A1 MOVEQ.L #0,D0 MOVEQ.L #0,D1 LEA tdname(PC),A0 JSR -$1bc(A6) -> OpenDevice(A0,D0/A1,D1)exec ENDPROC D0 PROC closeTrackdisk() MOVE.L 4,A6 LEA newport(PC),A1 JSR -$168(A6) -> RemPort(A1)exec LEA dvcbadr(PC),A1 JSR -$1c2(A6) -> CloseDevice(A1)exec ENDPROC PROC programError(text) EasyRequestArgs(0,[20,0,'Fatal Error...',text,'Ok'],0,0) ENDPROC PROC mai)³n() HANDLE KickVersion(37) IF gadtoolsbase:=OpenLibrary('gadtools.library',37) IF reqtoolsbase:=OpenLibrary('reqtools.library',37) IF aslbase:=OpenLibrary('asl.library',37) checkValidDrives() gadtoolsWindow() ELSE programError('Unable to open asl.library v37') ENDIF ELSE programError('Unable to open reqtools.library v37') ENDIF ELSE programError('Unable to open gadtools.library v37') ENDIF EXCEPT DO IF aslbase *STHEN CloseLibrary(aslbase) IF reqtoolsbase THEN CloseLibrary(reqtoolsbase) IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) SELECT exception CASE ERR_FONT; programError('Unable to open topaz.font size 8') CASE ERR_GAD; programError('Unable to create all gadgets') CASE ERR_KICK; badKickstart() CASE ERR_PUB; programError('Unable to lock default public screen') CASE ERR_VIS; programError('Unable to obtain visual info') CASE ERR_WIN; programError('Unable +bCto open the window') CASE ERR_RSC; programError('Unable to open disk.resource') ENDSELECT ENDPROC vers: CHAR '$VER: TrackDOS ][ (??-???-97)',0 newport: LONG 0,0,0,0 tdname: CHAR 'trackdisk.device',0 dvcbadr: LONG 0,0,0,0,0,0,0,0R]E%: !DiskFont.ep6[W-> Example of how to use a disk based font using diskfont.library MODULE 'diskfont','graphics/text' DEF font80 PROC main() DEF font=NIL IF diskfontbase:=OpenLibrary('diskfont.library',37) font80:=['periodic.font',8,0,0]:textattr IF font:=OpenDiskFont(font80) WriteF('The new font has been opened ok, but you need to open a\n') WriteF('window or something similar to be able to use it!\n') ELSE WriteF('ERROR: Couldn''t open periodic.font size 8\n') uS ENDIF CloseLibrary(diskfontbase) ELSE WriteF('ERROR: Couldn''t open diskfont.library\n') ENDIF ENDPROC  !z䱷:9876543210/.-,+*)('&%$#"!0E%: PO8Menu.ep " %/***************************************\ ** PO8Menu v1.00 (Phreaking Only Menu) ** ** By Zebedee/Carnage^TFL (02-Jan-97) ** ** ** ** Not yet completed but it works! ** \***************************************/ MODULE 'gadtools','exec/ports','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','graphics/text', 'graphics/rastport','tools/pt','tools/file','class/sctext' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ER #.ZR_KICK,ERR_LIB,ERR_PUB,ERR_VIS,ERR_WIN RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_LIB IF OpenLibrary()=NIL, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL ENUM GAD_SLIDER,GAD_PASSWORD,GAD_READ,GAD_HELP,GAD_CREDITS,GAD_MUSIC, GAD_MUSINFO CONST SLIDER_MAX=34 DEF topaz80,mywin=NIL:PTR TO window,temps[255]:STRING,ctr:PTR TO LON $G, article=1:PTR TO LONG,music=TRUE,pass=FALSE,module,silent=FALSE, title[255]:STRING,wanted=TRUE PROC handleGadgetEvent(win,gad:PTR TO gadget,code,slevel:PTR TO LONG,my_gads:PTR TO LONG) DEF id id:=gad.gadgetid SELECT id CASE GAD_SLIDER slevel[]:=code article:=code CASE GAD_PASSWORD StrCopy(temps,gad.specialinfo::stringinfo.buffer) IF StrCmp(temps,'Unique',ALL) THEN pass:=TRUE ELSE pass:=FALSE /* pass:=TRUE -> EasyRequestA % g_rgs(0,[20,0,'Notice','Password is correct','Ok'],0,0) ELSE pass:=FALSE -> EasyRequestArgs(0,[20,0,'Notice','Password is incorrect','Ok'],0,0) ENDIF*/ IF StrCmp(temps,'xTRa',ALL) THEN EasyRequestArgs(0,[20,0,'Extra Information','Zebedee woz ''ere!','Ok'],0,0) StrCopy(temps,'') Gt_SetGadgetAttrsA(my_gads[GAD_PASSWORD],win,NIL,[GTST_STRING,temps,NIL]) CASE GAD_READ readArticle() CASE GAD_HELP showHelp() CASE GAD_CREDIT &S showCredits() CASE GAD_MUSIC IF music THEN music:=FALSE ELSE music:=TRUE IF Not(music) AND Not(silent) THEN pt_stop() IF music AND Not(silent) THEN pt_play(module) IF silent THEN centreText('! MUSIC NOT AVAILABLE !',1,212) CASE GAD_MUSINFO EasyRequestArgs(0,[20,0,'Music','Module: Forever Tonight\nPlayer: ProTracker','Ok'],0,0) ENDSELECT ENDPROC PROC handleVanillaKey(win,code,slevel:PTR TO LONG,my_gads:PTR TO LONG) SELECT "w" OF code  'j" CASE "a" slevel[]:=Min(slevel[]+1,SLIDER_MAX) article:=slevel[] Gt_SetGadgetAttrsA(my_gads[GAD_SLIDER],win,NIL,[GTSL_LEVEL,slevel[],NIL]) CASE "A" slevel[]:=Max(slevel[]-1,1) article:=slevel[] Gt_SetGadgetAttrsA(my_gads[GAD_SLIDER],win,NIL,[GTSL_LEVEL,slevel[],NIL]) CASE "f","F" slevel[]:=1 Gt_SetGadgetAttrsA(my_gads[GAD_SLIDER],win,NIL,[GTSL_LEVEL,slevel[],NIL]) CASE "l","L" slevel[]:=55 Gt_SetGadgetAttrsA(m (7 @y_gads[GAD_SLIDER],win,NIL,[GTSL_LEVEL,slevel[],NIL]) CASE "p","P" ActivateGadget(my_gads[GAD_PASSWORD],win,NIL) CASE "h","H" showHelp() CASE "c","C" showCredits() CASE "r","R" readArticle() ENDSELECT ENDPROC PROC showHelp() EasyRequestArgs(0,[20,0,'Help','Not yet available!','Ok'],0,0) ENDPROC PROC showCredits() StrCopy(temps,'Programming : Zebedee/CRN\n') StrAdd(temps,'Music module: Thrust/CRN') EasyRequestArgs(0,[20,0,'Credits',t )X-emps,'Ok'],0,0) ENDPROC PROC createAllGadgets(glistptr:PTR TO LONG,vi,slevel,my_gads:PTR TO LONG) DEF gad,ng:PTR TO newgadget gad:=CreateContext(glistptr) ng:=[109,225,123,12,'_Article: ',topaz80,GAD_SLIDER,0,vi,0]:newgadget my_gads[GAD_SLIDER]:=(gad:=CreateGadgetA(SLIDER_KIND,gad,ng, [GTSL_MIN, 1, GTSL_MAX, SLIDER_MAX, GTSL_LEVEL, slevel,  * GTSL_LEVELFORMAT, '\z\d[2]', GTSL_MAXLEVELLEN, 2, GT_UNDERSCORE, "_",NIL])) ng.leftedge := 474 ng.topedge := 224 ng.height := 14 ng.width := 68 ng.gadgettext := '_Password:' ng.gadgetid := GAD_PASSWORD my_gads[GAD_PASSWORD]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng, [GTST_STRING, '',  +3 GTST_MAXCHARS, 6, GT_UNDERSCORE, "_",NIL])) ng.leftedge := 232 ng.topedge := 225 ng.width := 43 ng.height := 12 ng.gadgettext := '_Read' ng.gadgetid := GAD_READ gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 281 ng.topedge := 221 ng.width := 42 ng.height := 20 ng.gadgettext := '_Help' ng.gadgetid := GAD_HELP gad:=CreateGadgetA(BUTTON_KIND,gad,n ,qg,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 323 ng.width := 66 ng.height := 20 ng.gadgettext := '_Credits' ng.gadgetid := GAD_CREDITS gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 554 ng.topedge := 225 ng.gadgettext := 'Music' ng.gadgetid := GAD_MUSIC ng.flags := 2 gad:=CreateGadgetA(CHECKBOX_KIND,gad,ng,[GT_UNDERSCORE,"_",GTCB_CHECKED,TRUE,NIL]) ng.leftedge := 548 ng.topedge := 221 ng.width  -% := 84 ng.height := 20 ng.gadgettext := '' ng.gadgetid := GAD_MUSINFO gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ENDPROC gad PROC process_window_events(mywin:PTR TO window,slevel:PTR TO LONG,my_gads:PTR TO LONG) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad REPEAT Wait(Shl(1,mywin.userport.sigbit)) WHILE wanted AND (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress imsgClass:=imsg.class imsgCode:=imsg.code  .a] Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_GADGETDOWN handleGadgetEvent(mywin,gad,imsgCode,slevel,my_gads) CASE IDCMP_MOUSEMOVE handleGadgetEvent(mywin,gad,imsgCode,slevel,my_gads) CASE IDCMP_GADGETUP handleGadgetEvent(mywin,gad,imsgCode,slevel,my_gads) CASE IDCMP_VANILLAKEY handleVanillaKey(mywin,imsgCode,slevel,my_gads) CASE IDCMP_CLOSEWINDOW IF EasyRequestArgs(0,[20,0,'Quit','Are you sure ?','Yes|No /u'],0,0)=1 THEN wanted:=FALSE CASE IDCMP_REFRESHWINDOW Gt_BeginRefresh(mywin) Gt_EndRefresh(mywin,TRUE) ENDSELECT ENDWHILE UNTIL Not(wanted) ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO screen,glist=NIL,my_gads[4]:ARRAY OF LONG,vi,slevel=1,topborder,l topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,[NIL]) topborder:=mysc.wbortop+mysc.font.ysize+1 create 0/1CAllGadgets({glist},vi,slevel,my_gads) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'Phreaking Only 8 Menu', WA_SCREENTITLE,'CARNAGE - Always where you never expect us to be!', WA_GADGETS, glist, WA_AUTOADJUST, TRUE, WA_WIDTH, 640, WA_MINWIDTH, 50, WA_HEIGHT, 245, WA_MINHEIGHT, 50, WA_DRAGBAR, TRUE, WA_DEPTHGADGET, TRUE,  1cY WA_ACTIVATE, TRUE, WA_CLOSEGADGET, TRUE, WA_RMBTRAP, TRUE, WA_SMARTREFRESH, TRUE, WA_IDCMP, IDCMP_CLOSEWINDOW OR IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR SLIDERIDCMP OR STRINGIDCMP OR BUTTONIDCMP, WA_PUBSCREEN,mysc, NIL]) Gt_RefreshWindow(mywin,NIL) -> DrawBevelBoxA(mywin.rport,008,211,626,010,[GT_ 2k VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) DrawBevelBoxA(mywin.rport,008,221,273,020,[GT_VISUALINFO,vi,NIL]) DrawBevelBoxA(mywin.rport,389,221,159,020,[GT_VISUALINFO,vi,NIL]) DrawBevelBoxA(mywin.rport,548,221,084,020,[GT_VISUALINFO,vi,NIL]) shadowText('From Carnage...',7,13) shadowText('Cellular Phones...',7,90) shadowText('Cellular Phones (Cont.)',318,13) ctr:=1 FOR topborder:=23 TO 200 STEP 11 IF (ctr<>6) AND (ctr<>7) DrawBevelBoxA(mywin.rport,8,topborder,24,1 3gK1,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) -> DrawBevelBoxA(mywin.rport,32,topborder,287,11,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) StringF(temps,'\z\d[2]',ctr) normalText(temps,1,12,topborder+2) ENDIF INC ctr ENDFOR FOR topborder:=23 TO 200 STEP 11 DrawBevelBoxA(mywin.rport,319,topborder,24,11,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) -> DrawBevelBoxA(mywin.rport,343,topborder,287,11,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) StringF(tem 4&ps,'\z\d[2]',ctr) normalText(temps,1,323,topborder+2) INC ctr ENDFOR normalText('Information',1,36,25) normalText('Disclaimer',1,36,36) normalText('Greets from Kei',1,36,47) normalText('Greets from Zebedee',1,36,58) normalText('Extra Information',1,36,69) normalText('05',2,12,69) centreText('! PLEASE WAIT - LOADING MUSIC MODULE !',1,212) IF FileLength('shed:temp/modules/olivia')>0 module,l:=readfile('PO8:Music',0,2) centreText('CLEAR: LOADING MUSIC M 5JODULE ',0,212) pt_play(module) ELSE EasyRequestArgs(0,[20,0,'Error','Not enough memory for music!','Ok'],0,0) centreText('CLEAR: LOADING MUSIC MODULE ',0,212) silent:=TRUE ENDIF EasyRequestArgs(0,[20,0,'Greetings Kei...','The password is "Unique" and yes, it\nis case sensitive. Type the PW in\n& you can view article 05. Type it in\nwrong and article 05 is disabled!\n\nDecrunch+SpiCode not yet added!','Ok'],0,0) process_window_events(mywin 6;k,{slevel},my_gads) EXCEPT DO IF Not(silent) pt_stop() freefile(module) ENDIF IF mywin THEN CloseWindow(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC shadowText(text,x,y) PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,text,NIL]:intuitext,x+2,y+1) PrintIText(mywin.rport,[2,0,RP_JAM1,0,0,['topaz.font',8,0,0]:textattr,text,NIL]:intuitext 7e,x,y) ENDPROC PROC normalText(text,color,x,y) PrintIText(mywin.rport,[color,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,text,NIL]:intuitext,x,y) ENDPROC PROC centreText(text,color,y) DEF x:PTR TO LONG x:=320-((StrLen(text)*8)/2) PrintIText(mywin.rport,[color,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,text,NIL]:intuitext,x,y) ENDPROC PROC readArticle() DEF m,l,n,list,sc=NIL:PTR TO scrolltext IF (article<>6) AND (article<>7) IF (article=5) AND Not(pass) EasyRe 8gDŽ0questArgs(0,[20,0,'Error','I need the password!','Ok'],0,0) ELSE StringF(title,'Article \z\d[2]',article) StringF(temps,'PO8:Articles/Article.\z\d[2]',article) SELECT article CASE 1; StrCopy(title,'Information') CASE 2; StrCopy(title,'Disclaimer') CASE 3; StrCopy(title,'Greets from Kei') CASE 4; StrCopy(title,'Greets from Zebedee') CASE 5; StrCopy(title,'Extra Information') ENDSELECT IF FileLength(temps)>0  9 centreText(' ! LOADING ARTICLE ! ',1,212) m,l:=readfile(temps) list:=stringsinfile(m,l,n:=countstrings(m,l)) NEW sc.settext(list,100) StringF(temps,'Reading `\s''',title) sc.open(temps,0,11,640,245) WHILE sc.handle()=FALSE DO Wait(-1) END sc centreText('CLEAR: Loading File',0,212) ELSE EasyRequestArgs(0,[20,0,'Error','Unable to find article \z\d[2]!','Ok'],0,[article]) ENDIF ENDIF ELSE  :ο EasyRequestArgs(0,[20,0,'Error','Article \z\d[2] doesn''t exist!','Ok'],0,[article]) ENDIF ENDPROC PROC error(text) EasyRequestArgs(0,[20,0,'Fatal Error...',text,'Ok'],0,0) ENDPROC PROC main() HANDLE KickVersion(37) gadtoolsbase:=OpenLibrary('gadtools.library',37) gadtoolsWindow() EXCEPT DO IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) SELECT exception CASE ERR_FONT; error('Failed to open Topaz 80') CASE ERR_GAD; error('createAllGadgets() failed') CASE ERR_K P ICK; WriteF('Error: Requires V37\n') CASE ERR_LIB; error('Requires V37 gadtools.library') CASE ERR_PUB; error('Couldn''t lock default public screen') CASE ERR_VIS; error('GetVisualInfoA() failed') CASE ERR_WIN; error('OpenWindow() failed') ENDSELECT ENDPROC version: CHAR '$VER: Phreaking Only 8 Menu v1.00 (02-Jan-97)',0;2<mlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<^E%: TheRetreat.ep;=wR/********************************************************\ ** The Retreat Fan Club Mailing List ** ! PLEASE ! ** ** By Zebedee/Area 51 (06-JUL-97) ** DO NOT ** ** Written using Amiga E v3.1i registered ** DISTRIBUTE ** \********************************************************/ OPT PREPROCESS ->#define debug MODULE 'gadtools','exec/ports','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','graphics/rastport', 'reqtools','l;>zibraries/reqtools','asl','libraries/asl','workbench/startup' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_LIB,ERR_PUB,ERR_VIS,ERR_WIN, ERR_ASL,ERR_SCR RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_ASL IF AllocAslRequest()=NIL, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL, ERR_SCR IF OpenScreenTagList()=NIL ENUM GDST_SUR;?w\NAME,GDST_FORENAME,GDST_ADDRL1,GDST_ADDRL2,GDST_ADDRL3, GDST_ADDRL4,GDST_ADDRL5,GDST_POSTCODE,GDMX_SEX,GDST_DOB,GDST_PHONE, GDST_FAX,GDST_EMAIL,GDST_NUMBER,GDST_AGENT,GDST_JOINED,GDST_EXPIRES, GDBT_OPEN,GDBT_SAVE,GDBT_FIRST,GDBT_PREVIOUS,GDBT_NEXT,GDBT_LAST, GDBT_DELETE,GDBT_UNDELETE,GDBT_SEARCH,GDBT_ABOUT,GDBT_QUIT,GDSL_LOCATE, GDCY_TITLE CONST MAX=100 DEF topaz80,mywin=NIL:PTR TO window,wanted=TRUE,ffull[255]:STRING, recnum=0:PTR TO LONG,sex[MAX]:ARRA;@ӹ Y OF LONG,maxrec=0:PTR TO LONG, surnameptr[MAX]:ARRAY OF LONG,forenameptr[MAX]:ARRAY OF LONG,addrl1ptr[MAX]:ARRAY OF LONG, addrl2ptr[MAX]:ARRAY OF LONG,addrl3ptr[MAX]:ARRAY OF LONG,addrl4ptr[MAX]:ARRAY OF LONG, addrl5ptr[MAX]:ARRAY OF LONG,postcodeptr[MAX]:ARRAY OF LONG,fpath[255]:STRING, temps[255]:STRING,title:PTR TO LONG,fname[255]:STRING,myscr=NIL:PTR TO screen, surnamestr:PTR TO LONG,forenamestr:PTR TO LONG,addrl1str,addrl2str,addrl3str,addrl4str,addrl5str, ;AVHG postcodestr PROC handleGadgetEvent(win,gad:PTR TO gadget,code,slider_level:PTR TO LONG,my_gads:PTR TO LONG) DEF id id:=gad.gadgetid StrCopy(temps,gad.specialinfo::stringinfo.buffer) SELECT id CASE GDBT_ABOUT;showAbout() CASE GDBT_QUIT;checkQuit() CASE GDCY_TITLE SELECT code CASE 0;sex[recnum]:='Mr' CASE 1;sex[recnum]:='Mrs' CASE 2;sex[recnum]:='Ms' ENDSELECT CASE GDST_SURNAME;StrCopy(surnameptr[recnum],temps) CASE GD;BuST_FORENAME;StrCopy(forenameptr[recnum],temps) #ifdef debug CASE GDST_ADDRL1;requestText() CASE GDST_ADDRL2;requestText() CASE GDST_ADDRL3;requestText() CASE GDST_ADDRL4;requestText() CASE GDST_ADDRL5;requestText() CASE GDST_POSTCODE;requestText() CASE GDST_DOB;requestText() CASE GDST_PHONE;requestText() CASE GDST_FAX;requestText() CASE GDST_EMAIL;requestText() CASE GDST_NUMBER;requestText() CASE GDST_AGENT;requestText() CASE GDST_J;Co|OINED;requestText() CASE GDST_EXPIRES;requestText() #endif CASE GDBT_OPEN getFilename('Select file to open...') IF fname MidStr(temps,fpath,StrLen(fpath)-1,1) StrCopy(ffull,'') StrAdd(ffull,fpath) IF Not(StrCmp(':',temps,1)) THEN StrAdd(ffull,'/') StrAdd(ffull,fname) IF FileLength(ffull)=-1 RtEZRequestA('File not found','_Ok',0,0,[RTEZ_REQTITLE,'Error!',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_SCREEN,myscr,RT_REQPOS;DOt,REQPOS_CENTERSCR,RT_UNDERSCORE,"_",NIL]) StrCopy(ffull,'') ENDIF ENDIF CASE GDBT_SAVE getFilename('Select file to save as...') IF fname MidStr(temps,fpath,StrLen(fpath)-1,1) StrCopy(ffull,'') StrAdd(ffull,fpath) IF Not(StrCmp(':',temps,1)) THEN StrAdd(ffull,'/') StrAdd(ffull,fname) IF FileLength(ffull)=-1 RtEZRequestA('File not found','_Ok',0,0,[RTEZ_REQTITLE,'Error!',RTEZ_FLAGS,EZREQF_; ENCENTERTEXT,RT_REQPOS,REQPOS_CENTERSCR,RT_SCREEN,myscr,RT_UNDERSCORE,"_",NIL]) StrCopy(ffull,'') ENDIF ENDIF CASE GDBT_FIRST Gt_SetGadgetAttrsA(my_gads[GDSL_LOCATE],win,NIL,[GTSL_LEVEL,0,NIL]) recnum:=0 showRecord(my_gads) CASE GDBT_LAST Gt_SetGadgetAttrsA(my_gads[GDSL_LOCATE],win,NIL,[GTSL_LEVEL,maxrec,NIL]) recnum:=maxrec showRecord(my_gads) CASE GDBT_NEXT IF recnum addRecord() sex[recnum]:=0 surnameptr[recnum]:=NEW surnamestr[32] forenameptr[recnum]:=NEW forenamestr[32] addrl1ptr[recnum]:=NEW addrl1str[32] addrl2ptr[recnum]:=N; GR(EW addrl2str[32] addrl3ptr[recnum]:=NEW addrl3str[32] addrl4ptr[recnum]:=NEW addrl4str[32] addrl5ptr[recnum]:=NEW addrl5str[32] postcodeptr[recnum]:=NEW postcodestr[32] /* IF maxrec=1 gadgetOn(GDBT_SEARCH,my_gads) gadgetOn(GDBT_FIRST,my_gads) gadgetOn(GDBT_PREVIOUS,my_gads) gadgetOn(GDBT_LAST,my_gads) gadgetOn(GDBT_DELETE,my_gads) gadgetOn(GDBT_UNDELETE,my_gads) ; H" gadgetOn(GDBT_SAVE,my_gads) gadgetOn(GDST_FORENAME,my_gads) gadgetOn(GDST_SURNAME,my_gads) gadgetOn(GDST_ADDRL1,my_gads) gadgetOn(GDST_ADDRL2,my_gads) gadgetOn(GDST_ADDRL3,my_gads) gadgetOn(GDST_ADDRL4,my_gads) gadgetOn(GDST_ADDRL5,my_gads) gadgetOn(GDST_POSTCODE,my_gads) gadgetOn(GDST_DOB,my_gads) gadgetOn(GDST_PHONE,my_gads) gadgetOn(GDST_FAX; Iaj,my_gads) gadgetOn(GDST_EMAIL,my_gads) gadgetOn(GDST_NUMBER,my_gads) gadgetOn(GDST_JOINED,my_gads) gadgetOn(GDST_AGENT,my_gads) gadgetOn(GDST_EXPIRES,my_gads) gadgetOn(GDCY_TITLE,my_gads) ENDIF*/ Gt_SetGadgetAttrsA(my_gads[GDSL_LOCATE],win,NIL,[GTSL_MAX,maxrec,NIL]) ENDIF ENDIF Gt_SetGadgetAttrsA(my_gads[GDSL_LOCATE],win,NIL,[GTSL_LEVEL,recnum,NIL]) showRecord(my_gads;JĹ,) CASE GDBT_PREVIOUS IF recnum>0 THEN DEC recnum ELSE RtEZRequestA('No more records!','_Ok',0,NIL,[RTEZ_REQTITLE,'Error...',RT_REQPOS,REQPOS_CENTERSCR,RT_SCREEN,myscr,RT_UNDERSCORE,"_",NIL]) Gt_SetGadgetAttrsA(my_gads[GDSL_LOCATE],win,NIL,[GTSL_LEVEL,recnum,NIL]) showRecord(my_gads) -> CASE GDBT_NEXT;information('I bet this doesn''t work but I can live in hope!',1,0,'*',1,0) /* CASE GAD_STRING;WriteF('Gadget string: "\s".\n',gad.specialinfo::stringinfo.buf;KjEfer) CASE GAD_BUTTON WriteF('Button was pressed, slider reset to 5.\n') slider_level[]:=5 Gt_SetGadgetAttrsA(my_gads[GAD_SLIDER],win,NIL,[GTSL_LEVEL,slider_level[],NIL])*/ ENDSELECT ENDPROC PROC showRecord(my_gads:PTR TO LONG) Gt_SetGadgetAttrsA(my_gads[GDST_SURNAME],mywin,NIL,[GTST_STRING,surnameptr[recnum],NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_FORENAME],mywin,NIL,[GTST_STRING,forenameptr[recnum],NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_ADDRL1],mywin,NIL,;LOy+[GTST_STRING,addrl1ptr[recnum],NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_ADDRL2],mywin,NIL,[GTST_STRING,addrl2ptr[recnum],NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_ADDRL3],mywin,NIL,[GTST_STRING,addrl3ptr[recnum],NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_ADDRL4],mywin,NIL,[GTST_STRING,addrl4ptr[recnum],NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_ADDRL5],mywin,NIL,[GTST_STRING,addrl5ptr[recnum],NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_POSTCODE],mywin,NIL,[GTST_STRING,postcodeptr[recnum],NIL]) ;MNGt_SetGadgetAttrsA(my_gads[GDMX_SEX],mywin,NIL,[GTMX_ACTIVE,sex[recnum],NIL]) #ifdef debug RtEZRequestA('Record \d','_Ok',0,[recnum],[RTEZ_REQTITLE,'Debug...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_REQPOS,REQPOS_CENTERSCR,RT_SCREEN,myscr,RT_UNDERSCORE,"_",NIL]) #endif ENDPROC PROC handleVanillaKey(win,code,slider_level:PTR TO LONG,my_gads:PTR TO LONG) SELECT "z" OF code CASE "?";showAbout() CASE "q","Q";checkQuit() CASE "<" recnum:=0 Gt_SetGadgetAttrsA(my_gads[G;NDSL_LOCATE],win,NIL,[GTSL_LEVEL,recnum,NIL]) CASE ">" recnum:=maxrec Gt_SetGadgetAttrsA(my_gads[GDSL_LOCATE],win,NIL,[GTSL_LEVEL,recnum,NIL]) CASE "-" IF recnum>0 THEN DEC recnum ELSE RtEZRequestA('No more records!','_Ok',0,NIL,[RTEZ_REQTITLE,'Error...',RT_REQPOS,REQPOS_CENTERSCR,RT_SCREEN,myscr,RT_UNDERSCORE,"_",NIL]) Gt_SetGadgetAttrsA(my_gads[GDSL_LOCATE],win,NIL,[GTSL_LEVEL,recnum,NIL]) CASE "s","S";ActivateGadget(my_gads[GDST_SURNAME],win,NIL);OJ CASE "f","F";ActivateGadget(my_gads[GDST_FORENAME],win,NIL) CASE "d","D";ActivateGadget(my_gads[GDST_ADDRL1],win,NIL) CASE "p","P";ActivateGadget(my_gads[GDST_POSTCODE],win,NIL) CASE "b","B";ActivateGadget(my_gads[GDST_DOB],win,NIL) CASE "t","T";ActivateGadget(my_gads[GDST_PHONE],win,NIL) CASE "a","A";ActivateGadget(my_gads[GDST_FAX],win,NIL) CASE "m","M";ActivateGadget(my_gads[GDST_EMAIL],win,NIL) CASE "n","N";ActivateGadget(my_gads[GDST_NUMBER],win,;P)NIL) CASE "g","G";ActivateGadget(my_gads[GDST_AGENT],win,NIL) CASE "j","J";ActivateGadget(my_gads[GDST_JOINED],win,NIL) CASE "r","R";ActivateGadget(my_gads[GDST_EXPIRES],win,NIL) CASE "x","X" IF sex=0 THEN sex:=1 ELSE sex:=0 Gt_SetGadgetAttrsA(my_gads[GDMX_SEX],win,NIL,[GTMX_ACTIVE,sex,NIL]) CASE "i","I" INC title IF title=3 THEN title:=0 Gt_SetGadgetAttrsA(my_gads[GDCY_TITLE],win,NIL,[GTCY_ACTIVE,title,NIL]) -> CASE "","";Activate;QQ\oGadget(my_gads[GDST_],win,NIL) /* CASE "t";ActivateGadget(my_gads[GAD_STRING],win,NIL) CASE "T";Gt_SetGadgetAttrsA(my_gads[GAD_STRING],win,NIL,[GTST_STRING,'Default text',NIL]) CASE "m" INC mxval IF mxval=3 THEN mxval:=0 Gt_SetGadgetAttrsA(my_gads[GAD_MX],win,NIL,[GTMX_ACTIVE,mxval,NIL]) CASE "M" DEC mxval IF mxval=-1 THEN mxval:=2 Gt_SetGadgetAttrsA(my_gads[GAD_MX],win,NIL,[GTMX_ACTIVE,mxval,NIL])*/ ENDSELECT ENDPROC PROC createA;RllGadgets(glistptr:PTR TO LONG,vi,topborder,slider_level,my_gads:PTR TO LONG) DEF gad,ng:PTR TO newgadget gad:=CreateContext(glistptr) ng:=[106,(16+topborder),200,12,'_Surname:',topaz80,GDST_SURNAME,NIL,vi,0]:newgadget my_gads[GDST_SURNAME]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,25,GT_UNDERSCORE,"_",NIL])) ng:=[411,(16+topborder),200,12,'_Forename:',topaz80,GDST_FORENAME,NIL,vi,0]:newgadget my_gads[GDST_FORENAME]:=(gad:=CreateGadgetA(STRING_;S4KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,25,GT_UNDERSCORE,"_",NIL])) ng:=[106,(30+topborder),200,12,'A_ddress:',topaz80,GDST_ADDRL1,NIL,vi,0]:newgadget my_gads[GDST_ADDRL1]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,50,GT_UNDERSCORE,"_",NIL])) ng:=[106,(42+topborder),200,12,'',topaz80,GDST_ADDRL2,NIL,vi,0]:newgadget my_gads[GDST_ADDRL2]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,50,GT_UNDERSCORE,"_",NIL])) ng:=[106,(54+;Tstopborder),200,12,'',topaz80,GDST_ADDRL3,NIL,vi,0]:newgadget my_gads[GDST_ADDRL3]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,50,GT_UNDERSCORE,"_",NIL])) ng:=[106,(66+topborder),200,12,'',topaz80,GDST_ADDRL4,NIL,vi,0]:newgadget my_gads[GDST_ADDRL4]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,50,GT_UNDERSCORE,"_",NIL])) ng:=[106,(78+topborder),200,12,'',topaz80,GDST_ADDRL5,NIL,vi,0]:newgadget my_gads[GDST_ADDRL5]:=(gad:=Cre;UCateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,50,GT_UNDERSCORE,"_",NIL])) ng:=[106,(90+topborder),200,12,'_Postcode:',topaz80,GDST_POSTCODE,NIL,vi,0]:newgadget my_gads[GDST_POSTCODE]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,9,GT_UNDERSCORE,"_",NIL])) ng:=[411,(54+topborder),200,12,'DO_B:',topaz80,GDST_DOB,NIL,vi,0]:newgadget my_gads[GDST_DOB]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,13,GT_UNDERSCORE,"_",N;V?IL])) ng:=[411,(66+topborder),200,12,'_Telephone:',topaz80,GDST_PHONE,NIL,vi,0]:newgadget my_gads[GDST_PHONE]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,25,GT_UNDERSCORE,"_",NIL])) ng:=[411,(78+topborder),200,12,'F_ax:',topaz80,GDST_FAX,NIL,vi,0]:newgadget my_gads[GDST_FAX]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,25,GT_UNDERSCORE,"_",NIL])) ng:=[411,(90+topborder),200,12,'e_Mail:',topaz80,GDST_EMAIL,NIL,vi,0]:newgadge;W 3t my_gads[GDST_EMAIL]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,25,GT_UNDERSCORE,"_",NIL])) ng:=[106,(121+topborder),200,12,'_Number:',topaz80,GDST_NUMBER,NIL,vi,0]:newgadget my_gads[GDST_NUMBER]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,15,GT_UNDERSCORE,"_",NIL])) ng:=[411,(121+topborder),200,12,'A_gent:',topaz80,GDST_AGENT,NIL,vi,0]:newgadget my_gads[GDST_AGENT]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'';XwR o,GTST_MAXCHARS,50,GT_UNDERSCORE,"_",NIL])) ng:=[106,(133+topborder),200,12,'_Joined:',topaz80,GDST_JOINED,NIL,vi,0]:newgadget my_gads[GDST_JOINED]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,13,GT_UNDERSCORE,"_",NIL])) ng:=[411,(133+topborder),200,12,'Expi_res:',topaz80,GDST_EXPIRES,NIL,vi,0]:newgadget my_gads[GDST_EXPIRES]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,13,GT_UNDERSCORE,"_",NIL])) ng:=[411,(30+topborder),200,;Y=Qp12,'Se_x:',topaz80,GDMX_SEX,NIL,vi,0]:newgadget ng.flags:=2 my_gads[GDMX_SEX]:=(gad:=CreateGadgetA(MX_KIND,gad,ng,[GTMX_LABELS,['Male','Female',NIL],GTMX_ACTIVE,0,GTMX_SPACING,1,GTMX_TITLEPLACE,PLACETEXT_LEFT,GT_UNDERSCORE,"_",NIL])) ng:=[84,(164+topborder),42,12,'_Open',topaz80,GDBT_OPEN,NIL,vi,0]:newgadget ng.flags:=0 my_gads[GDBT_OPEN]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[126,(164+topborder),42,12,'Sa_ve',topaz80,GDBT_SAVE,NIL,vi,0]:ne;Zwgadget my_gads[GDBT_SAVE]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[168,(164+topborder),24,12,'|_<',topaz80,GDBT_FIRST,NIL,vi,0]:newgadget my_gads[GDBT_FIRST]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[192,(164+topborder),26,12,'<_-',topaz80,GDBT_PREVIOUS,NIL,vi,0]:newgadget my_gads[GDBT_PREVIOUS]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[218,(164+topborder),26,12,'_+>',topaz80,GDBT_NEX;[b_T,NIL,vi,0]:newgadget my_gads[GDBT_NEXT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[244,(164+topborder),24,12,'_>|',topaz80,GDBT_LAST,NIL,vi,0]:newgadget my_gads[GDBT_LAST]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[268,(164+topborder),58,12,'De_lete',topaz80,GDBT_DELETE,NIL,vi,0]:newgadget my_gads[GDBT_DELETE]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[326,(164+topborder),74,12,'_Undelete; \Zӄ',topaz80,GDBT_UNDELETE,NIL,vi,0]:newgadget my_gads[GDBT_UNDELETE]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[400,(164+topborder),58,12,'Sear_ch',topaz80,GDBT_SEARCH,NIL,vi,0]:newgadget my_gads[GDBT_SEARCH]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[458,(164+topborder),49,12,'About',topaz80,GDBT_ABOUT,NIL,vi,0]:newgadget my_gads[GDBT_ABOUT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[507,(1;!] 64+topborder),42,12,'_Quit',topaz80,GDBT_QUIT,NIL,vi,0]:newgadget my_gads[GDBT_QUIT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[131,(176+topborder),418,12,' ',topaz80,GDSL_LOCATE,NIL,vi,0]:newgadget my_gads[GDSL_LOCATE]:=(gad:=CreateGadgetA(SLIDER_KIND,gad,ng,[GTSL_MIN,1,GTSL_MAX,maxrec,GTSL_LEVEL,0,GTSL_LEVELFORMAT,'\z\d[5]',GTSL_MAXLEVELLEN,2,GT_UNDERSCORE, "_",NIL])) ng:=[550,(30+topborder),61,12,'',topaz80,GDCY_TITLE,NIL,vi,0]:newgadget ;"^ic my_gads[GDCY_TITLE]:=(gad:=CreateGadgetA(CYCLE_KIND,gad,ng,[GTCY_LABELS,['Mr','Mrs','Ms',NIL],GTCY_ACTIVE,0,GT_UNDERSCORE,"_",NIL])) ENDPROC gad PROC showAbout() RtEZRequestA('The Retreat\nFan Club Mailing List\n\nAmiga version by Ivan Oliver\nLast update 06-Jul-97','_Ok',0,NIL,[RTEZ_REQTITLE,'About...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_REQPOS,REQPOS_CENTERSCR,RT_SCREEN,myscr,RT_UNDERSCORE,"_",NIL]) ENDPROC PROC checkQuit() IF (RtEZRequestA('Are you sure?','_Yes|_NO!',0,0,[RTEZ;#_Я_REQTITLE,'Quit...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RT_REQPOS,REQPOS_CENTERSCR,RT_SCREEN,myscr,RTEZ_DEFAULTRESPONSE,0,NIL])=1) THEN wanted:=FALSE ENDPROC PROC processWindowEvents(mywin:PTR TO window,slider_level:PTR TO LONG, my_gads:PTR TO LONG) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad WHILE wanted Wait(Shl(1,mywin.userport.sigbit)) WHILE wanted AND (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress imsg;$`HClass:=imsg.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_GADGETDOWN; handleGadgetEvent(mywin,gad,imsgCode,slider_level,my_gads) CASE IDCMP_MOUSEMOVE; handleGadgetEvent(mywin,gad,imsgCode,slider_level,my_gads) CASE IDCMP_GADGETUP; handleGadgetEvent(mywin,gad,imsgCode,slider_level,my_gads) CASE IDCMP_VANILLAKEY; handleVanillaKey(mywin,imsgCode,slider_level,my_gads) CASE IDCMP_CLOSEWINDOW;checkQuit() CA;%af#SE IDCMP_REFRESHWINDOW Gt_BeginRefresh(mywin) Gt_EndRefresh(mywin,TRUE) ENDSELECT ENDWHILE ENDWHILE ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO screen,glist=NIL, my_gads[32]:ARRAY OF LONG,vi,slider_level=5,topborder topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,[NIL]) topborder:=mysc.wbortop+mysc.font.ysize+1 createAllGadgets({glist},vi,topborder,sl;&b0ider_level,my_gads) myscr:=OpenScreenTagList(NIL,[SA_PENS,[-1]:INT,SA_DEPTH,2, SA_WIDTH,640,SA_HEIGHT,256, SA_DISPLAYID,$29000,SA_TYPE,PUBLICSCREEN, SA_TITLE,'The Retreat Screen',NIL]) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'Fan Club Mailing List [Rev. 1-00]', WA_SCREENTITLE,'The Retreat', WA_GADGETS, glist, WA_RMBTRAP;'c, TRUE, WA_WIDTH, 640, WA_MINWIDTH, 50, WA_HEIGHT, 245, WA_MINHEIGHT, 50, WA_DRAGBAR, TRUE, WA_DEPTHGADGET, TRUE, WA_ACTIVATE, TRUE, WA_CLOSEGADGET, FALSE, WA_SIZEGADGET,FALSE, WA_SMARTREFRESH, TRUE, WA_IDCMP, IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR SLIDERIDCMP OR STRINGIDCMP OR BU;(dcTTONIDCMP, WA_PUBSCREEN,myscr,NIL]) Gt_RefreshWindow(mywin,NIL) drawBevelBox(19,23,600,94,vi,FALSE) drawBevelBox(21,24,596,92,vi,FALSE) drawBevelBox(19,128,600,32,vi,FALSE) drawBevelBox(21,129,596,30,vi,FALSE) drawBevelBox(19,171,600,32,vi,TRUE) drawBevelBox(21,172,596,30,vi,FALSE) drawBevelBox(19,214,600,25,vi,FALSE) drawBevelBox(21,215,596,23,vi,FALSE) PrintIText(mywin.rport,[2,0,RP_JAM1,0,0,['topaz.font',8,4,0]:textattr,'Personal Details..;)e)罻.',NIL]:intuitext,24,14) PrintIText(mywin.rport,[2,0,RP_JAM1,0,0,['topaz.font',8,4,0]:textattr,'Membership Details...',NIL]:intuitext,24,119) PrintIText(mywin.rport,[2,0,RP_JAM1,0,0,['topaz.font',8,4,0]:textattr,'Control Panel...',NIL]:intuitext,24,162) PrintIText(mywin.rport,[2,0,RP_JAM1,0,0,['topaz.font',8,4,0]:textattr,'Information...',NIL]:intuitext,24,205) information('This copy is registered to Mr I E Oliver',1,0,'39 Beckly Court, Armada Way, Plymouth, Devon, PL1 1LD, E;*f^Ongland',1,0) #ifdef debug gadgetOff(GDBT_SEARCH,my_gads) gadgetOff(GDBT_FIRST,my_gads) gadgetOff(GDBT_PREVIOUS,my_gads) gadgetOff(GDBT_LAST,my_gads) gadgetOff(GDBT_DELETE,my_gads) gadgetOff(GDBT_UNDELETE,my_gads) gadgetOff(GDBT_SAVE,my_gads) gadgetOff(GDST_FORENAME,my_gads) gadgetOff(GDST_SURNAME,my_gads) gadgetOff(GDST_ADDRL1,my_gads) gadgetOff(GDST_ADDRL2,my_gads) gadgetOff(GDST_ADDRL3,my_gads) gadgetOff(GDST_ADDRL4,my_gads) gadgetOff(GDST_ADDRL5,my_gads;+g^$) gadgetOff(GDST_POSTCODE,my_gads) gadgetOff(GDST_DOB,my_gads) gadgetOff(GDST_PHONE,my_gads) gadgetOff(GDST_FAX,my_gads) gadgetOff(GDST_EMAIL,my_gads) gadgetOff(GDST_NUMBER,my_gads) gadgetOff(GDST_JOINED,my_gads) gadgetOff(GDST_AGENT,my_gads) gadgetOff(GDST_EXPIRES,my_gads) gadgetOff(GDCY_TITLE,my_gads) #endif RtEZRequestA('Undocumented hotkeys:\n\nI => Cycle the title gadget\n- => Previous record\n+ => Next record\n? => Equivalent to "About"','_Ok',0,0,[RTEZ_RE;,h@dWQTITLE,'Notice...',RT_REQPOS,REQPOS_CENTERSCR,RT_SCREEN,myscr,RT_UNDERSCORE,"_",NIL]) processWindowEvents(mywin,{slider_level},my_gads) EXCEPT DO IF mywin THEN CloseWindow(mywin) IF myscr THEN CloseScreen(myscr) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF myscr THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC drawBevelBox(x,y,w,h,vi,recessed) DrawBevelBoxA(mywin.rport,x,y,w,h,[GT_VISUALINFO,vi,GTBB_RECESSED,recessed,NIL]);-i : ENDPROC PROC fatalError(text) EasyRequestArgs(0,[20,0,'Fatal Error...',text,'Ok'],0,0) ENDPROC PROC gadgetOn(gadget,my_gads:PTR TO LONG) OnGadget(my_gads[gadget],mywin,NIL) ENDPROC PROC gadgetOff(gadget,my_gads:PTR TO LONG) OffGadget(my_gads[gadget],mywin,NIL) ENDPROC PROC information(linea,pena,stylea,lineb,penb,styleb) SetABPenDrMd(mywin.rport,0,0,RP_JAM2) RectFill(mywin.rport,23,216,614,236) IF StrCmp(lineb,'*',ALL) PrintIText(mywin.rport,[pena,0,RP_JAM2,0,0,[;.jGC'topaz.font',8,stylea,0]:textattr,linea,NIL]:intuitext,320-(StrLen(linea)*8/2),222) ELSE PrintIText(mywin.rport,[pena,0,RP_JAM2,0,0,['topaz.font',8,stylea,0]:textattr,linea,NIL]:intuitext,320-(StrLen(linea)*8/2),218) PrintIText(mywin.rport,[penb,0,RP_JAM2,0,0,['topaz.font',8,styleb,0]:textattr,lineb,NIL]:intuitext,320-(StrLen(lineb)*8/2),227) ENDIF ENDPROC #ifdef debug PROC requestText() RtEZRequestA('"\s"','_Ok!',0,[temps],[RTEZ_REQTITLE,'Debug...',RT_REQPOS,REQPOS_CE;/kkHpNTERSCR,RT_SCREEN,myscr,RT_UNDERSCORE,"_",NIL]) ENDPROC #endif PROC getFilename(frtitle) HANDLE DEF fr:PTR TO filerequester fr:=AllocAslRequest(ASL_FILEREQUEST,[ASL_HAIL,frtitle,ASL_HEIGHT,200, ASL_WIDTH,320,ASL_LEFTEDGE,0,ASL_TOPEDGE,0,ASL_OKTEXT,'Ok', ASL_CANCELTEXT,'Cancel',ASL_FILE,fname,ASL_DIR,fpath,ASLFR_SCREEN,myscr,NIL]) IF AslRequest(fr,NIL) fname:=fr.file UpperStr(fname) fpath:=fr.drawer UpperStr(fpath) E;0lLSE fname:=FALSE fpath:=FALSE ENDIF EXCEPT IF fr THEN FreeAslRequest(fr) SELECT exception CASE ERR_ASL; fatalError('Unable to allocate ASL request') ENDSELECT ReThrow() ENDPROC PROC main() HANDLE KickVersion(37) IF gadtoolsbase:=OpenLibrary('gadtools.library',37) IF reqtoolsbase:=OpenLibrary('reqtools.library',37) IF aslbase:=OpenLibrary('asl.library',37) ->addRecord() gadtoolsWindow() ELSE fatalError('Unable to open;1m asl.library v37') ENDIF ELSE fatalError('Unable to open reqtools.library v37') ENDIF ELSE fatalError('Unable to open gadtools.library v37') ENDIF -> EasyRequestArgs(0,[20,0,'','Goodbye','Ok'],0,0) EXCEPT DO IF aslbase THEN CloseLibrary(aslbase) IF reqtoolsbase THEN CloseLibrary(reqtoolsbase) IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) SELECT exception CASE ERR_FONT; fatalError('Unable to open topaz.font 8') CASE ERR_GAD; fatalError(';2o 1Unable to create gadgets') CASE ERR_KICK; WriteF('ERROR: Requires v37 (KS2+)\n') CASE ERR_PUB; fatalError('Unable to lock default public screen') CASE ERR_VIS; fatalError('GetVisualInfoA() failed') CASE ERR_WIN; fatalError('Unable to open the window') ENDSELECT ENDPROC version: CHAR '$VER: The Retreat Mailing List Database v1.00 (06-Jul-97)',0noX~}|{zyxwvutsrqpo2VE%:BSC.epnpMzG/********************************************************** ** Binary to Source Converter v1.02 (BSC) ** -=-=--=-=- ** ** By Zebedee/Carnage^TFL (11-JAN-97) ** ! PLEASE ! ** ** Written using E (v3.1i registered) ** DO NOT ** ** ** DISTRIBUTE ** ** Usage: BSC ** -=-=--=-=- ** **********************************************************/ MODULE 'gadtools','exec/ports','graphics/text','intuition/intuitionq= @n','asl', 'libraries/gadtools','intuition/screens','libraries/asl', 'workbench/workbench','workbench/startup' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_LIB,ERR_PUB,ERR_VIS,ERR_WIN, ERR_ASL RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL, ERR_ASL IF AllocAslRequest()=NIL EnrHZNUM GDST_SOURCE,GDST_TARGET,GDST_ITEMS,GDCY_ALIGN,GDBT_GETS,GDBT_GETT, GDBT_OK,GDBT_ABOUT DEF topaz80,mywin=NIL:PTR TO window,wanted=TRUE,cycle=0:PTR TO LONG, fpath[255]:STRING,fname[255]:STRING,ffull[255]:STRING,temps[255]:STRING, items=5:PTR TO LONG,source[255]:STRING,target[255]:STRING,inh,outh, align:PTR TO LONG,flen:PTR TO LONG PROC handleGadgetEvent(win,gad:PTR TO gadget,code,gads:PTR TO LONG) DEF id id:=gad.gadgetid SELECT id CASE GDST_SOURCE nsjH StrCopy(source,gad.specialinfo::stringinfo.buffer) source:=checkFile(source,TRUE) Gt_SetGadgetAttrsA(gads[GDST_SOURCE],win,NIL,[GTST_STRING,source,NIL]) CASE GDST_TARGET StrCopy(target,gad.specialinfo::stringinfo.buffer) target:=checkFile(target,FALSE) Gt_SetGadgetAttrsA(gads[GDST_TARGET],win,NIL,[GTST_STRING,target,NIL]) CASE GDST_ITEMS StrCopy(temps,gad.specialinfo::stringinfo.buffer) items:=Val(temps,NIL) IF (items<1) OR (itnt%aems>50) items:=6 Gt_SetGadgetAttrsA(gads[GDST_ITEMS],win,NIL,[GTST_STRING,'6',NIL]) ENDIF CASE GDBT_GETS getFilename('Select Source File...') StrCopy(source,addPathFile()) source:=checkFile(source,TRUE) Gt_SetGadgetAttrsA(gads[GDST_SOURCE],win,NIL,[GTST_STRING,source,NIL]) CASE GDBT_GETT getFilename('Select Target File...') StrCopy(target,addPathFile()) target:=checkFile(target,FALSE) IF StrLen(target)>0 THnu JEN StrAdd(target,'.s') Gt_SetGadgetAttrsA(gads[GDST_TARGET],win,NIL,[GTST_STRING,target,NIL]) CASE GDCY_ALIGN; align:=code CASE GDBT_OK; openFiles(gads) CASE GDBT_ABOUT; showAbout() ENDSELECT ENDPROC PROC openFiles(gads:PTR TO LONG) IF StrCmp(source,'',ALL) OR StrCmp(target,'',ALL) EasyRequestArgs(0,[20,0,'Problem...','I need both source\nand target filenames!','Ok'],0,0) ELSE inh:=Open(source,OLDFILE) IF inh=NIL EasyRequestArgs(0,[20,0,'ErrnvKor...','Unable to access source file!','Ok'],0,0) ELSE outh:=Open(target,NEWFILE) IF outh=NIL EasyRequestArgs(0,[20,0,'Error...','Unable to create target file!','Ok'],0,0) Close(inh) ELSE OffGadget(gads[GDST_SOURCE],mywin,NIL) OffGadget(gads[GDBT_GETS],mywin,NIL) OffGadget(gads[GDST_TARGET],mywin,NIL) OffGadget(gads[GDBT_GETT],mywin,NIL) OffGadget(gads[GDCY_ALIGN],mywin,NIL) OffGadget(gads[GDBT_OK],nw7ﱌmywin,NIL) OffGadget(gads[GDBT_ABOUT],mywin,NIL) OffGadget(gads[GDST_ITEMS],mywin,NIL) flen:=FileLength(source) convertFile() OnGadget(gads[GDST_ITEMS],mywin,NIL) OnGadget(gads[GDBT_ABOUT],mywin,NIL) OnGadget(gads[GDBT_OK],mywin,NIL) OnGadget(gads[GDCY_ALIGN],mywin,NIL) OnGadget(gads[GDBT_GETT],mywin,NIL) OnGadget(gads[GDST_TARGET],mywin,NIL) OnGadget(gads[GDBT_GETS],mywin,NIL) OnGadget(gan xucds[GDST_SOURCE],mywin,NIL) Close(outh) Close(inh) ENDIF ENDIF ENDIF ENDPROC PROC convertFile() DEF ctr:PTR TO LONG,width=0:PTR TO LONG,len:PTR TO LONG, hex[2]:STRING,field=0:PTR TO LONG,header[6]:STRING,rchar[1]:STRING SetWindowTitles(mywin,'<-- Click to abort!','CARNAGE - Always where you never expect us to be!') EasyRequestArgs(0,[20,0,'Info...','To abort, click on\nthe close gadget','Ok'],0,0) StrCopy(header,{tab}) StrAdd(header,'dc.') n yvSz SELECT align CASE 0; StrAdd(header,'b'); len:=1 CASE 1; StrAdd(header,'w'); len:=2 CASE 2; StrAdd(header,'l'); len:=4 ENDSELECT StrAdd(header,{tab}) Fputs(outh,header) Fputs(outh,'$') FOR ctr:=1 TO flen IF (ctr>1) AND (width=0) THEN Fputs(outh,'$') rchar:=Inp(inh) StringF(hex,'\z\h[2]',rchar) Fputs(outh,hex) INC width IF (width=len) AND (field+1<>items) AND (ctr<>flen) THEN Fputs(outh,',') IF width=len width:=0 INC fieldn z} IF field=items field:=0 FputC(outh,10) Fputs(outh,header) ENDIF ENDIF IF (Gt_GetIMsg(mywin.userport)<>0) OR CtrlC() THEN IF EasyRequestArgs(0,[20,0,'User Abort...','Are you sure?','Yes|NO!'],0,0)=1 THEN ctr:=flen-1 ENDFOR IF (align<>0) AND (width<>0) FOR ctr:=width TO len-1 Fputs(outh,'00') ENDFOR ENDIF SetWindowTitles(mywin,'Binary to Source Converter','CARNAGE - Always where you never expect us to be!') ENDPROC PROC n {ЅaddPathFile() IF fname MidStr(temps,fpath,StrLen(fpath)-1,1) StrCopy(ffull,'') StrAdd(ffull,fpath) IF Not(StrCmp(':',temps,1)) THEN StrAdd(ffull,'/') StrAdd(ffull,fname) ENDIF ENDPROC ffull PROC checkFile(name,state) IF (FileLength(name)=-1) AND state EasyRequestArgs(0,[20,0,'Error...','File not found!','Ok'],0,0) StrCopy(name,'') ELSE IF (FileLength(name)>0) AND Not(state) IF EasyRequestArgs(0,[20,0,'Warning...','File exists!\nOverwriten |`pU it?','Yes|No'],0,0)=0 StrCopy(name,'') ENDIF ENDIF ENDIF ENDPROC name PROC handleVanillaKey(win,code,gads:PTR TO LONG) SELECT "w" OF code CASE "s","S"; ActivateGadget(gads[GDST_SOURCE],win,NIL) CASE "t","T"; ActivateGadget(gads[GDST_TARGET],win,NIL) CASE "i","I"; ActivateGadget(gads[GDST_ITEMS],win,NIL) CASE "a" INC cycle IF cycle=3 THEN cycle:=0 Gt_SetGadgetAttrsA(gads[GDCY_ALIGN],win,NIL,[GTCY_ACTIVE,cycle,NIL]) CASE "A"n}lo DEC cycle IF cycle=-1 THEN cycle:=2 Gt_SetGadgetAttrsA(gads[GDCY_ALIGN],win,NIL,[GTCY_ACTIVE,cycle,NIL]) CASE "/","?"; showAbout() CASE "g","G" getFilename('Select Source File...') StrCopy(source,addPathFile()) source:=checkFile(source,TRUE) Gt_SetGadgetAttrsA(gads[GDST_SOURCE],win,NIL,[GTST_STRING,source,NIL]) CASE "e","E" getFilename('Select Target File...') StrCopy(target,addPathFile()) target:=checkFile(targn~aet,FALSE) IF StrLen(target)>0 THEN StrAdd(target,'.s') Gt_SetGadgetAttrsA(gads[GDST_TARGET],win,NIL,[GTST_STRING,target,NIL]) CASE "o","O"; openFiles(gads) ENDSELECT ENDPROC PROC showAbout() EasyRequestArgs(0,[20,0,'About...','BSC v1.02\nBy Zebedee/Carnage\n\nRelease date: 11-Jan-97\n1997 A Carnage Production','Ok'],0,0) ENDPROC PROC getFilename(title) HANDLE DEF fr:PTR TO filerequester fr:=AllocAslRequest(ASL_FILEREQUEST,[ASL_HAIL,title,ASL_HEIGHT,200, n| ASL_WIDTH,320,ASL_LEFTEDGE,0,ASL_TOPEDGE,0,ASL_OKTEXT,'Accept', ASL_CANCELTEXT,'Cancel',ASL_FILE,fname,ASL_DIR,fpath,NIL]) IF AslRequest(fr,NIL) fname:=fr.file fpath:=fr.drawer ELSE fname:=FALSE fpath:=FALSE ENDIF EXCEPT IF fr THEN FreeAslRequest(fr) SELECT exception CASE ERR_ASL; EasyRequestArgs(0,[20,0,'Fatal Error...','Couldn''t allocate ASL request','Ok'],0,0) ENDSELECT ReThrow() ENDPROC PROC createAllGanH|dgets(glistptr:PTR TO LONG,vi,gads:PTR TO LONG) DEF gad,ng:PTR TO newgadget gad:=CreateContext(glistptr) ng:=[71,13,188,14,'_Source:',topaz80,GDST_SOURCE,NIL,vi,0]:newgadget gads[GDST_SOURCE]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng, [GTST_STRING,'',GTST_MAXCHARS,255,GT_UNDERSCORE,"_",NIL])) ng.topedge := 27 ng.gadgettext := '_Target:' ng.gadgetid := GDST_TARGET gads[GDST_TARGET]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng, [GTST_nSTRING,'',GTST_MAXCHARS,255,GT_UNDERSCORE,"_",NIL])) ng.leftedge := 259 ng.topedge := 41 ng.width := 36 ng.gadgettext := '_Items:' ng.gadgetid := GDST_ITEMS gads[GDST_ITEMS]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng, [GTST_STRING,'6',GTST_MAXCHARS,2,GT_UNDERSCORE,"_",NIL])) ng.topedge := 13 ng.gadgettext := '_Get' ng.gadgetid := GDBT_GETS gads[GDBT_GETS]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.topedn29M]ge := 27 ng.gadgettext := 'G_et' ng.gadgetid := GDBT_GETT gads[GDBT_GETT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 71 ng.topedge := 41 ng.width := 76 ng.gadgettext := '_Align :' ng.gadgetid := GDCY_ALIGN gads[GDCY_ALIGN]:=(gad:=CreateGadgetA(CYCLE_KIND,gad,ng, [GTCY_LABELS,['Byte','Word','Long',NIL],GT_UNDERSCORE,"_",NIL])) ng.leftedge := 151 ng.width := 26 ng.gadgettext := '_Ok' ngn[.gadgetid := GDBT_OK gads[GDBT_OK]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 181 ng.width := 18 ng.gadgettext := '_?' ng.gadgetid := GDBT_ABOUT gads[GDBT_ABOUT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ENDPROC gad PROC process_window_events(mywin:PTR TO window,gads:PTR TO LONG) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad REPEAT Wait(Shl(1,mywin.userport.sigbit)) WHILE wanted ANnAQQD (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress imsgClass:=imsg.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_GADGETDOWN; handleGadgetEvent(mywin,gad,imsgCode,gads) CASE IDCMP_MOUSEMOVE; handleGadgetEvent(mywin,gad,imsgCode,gads) CASE IDCMP_GADGETUP; handleGadgetEvent(mywin,gad,imsgCode,gads) CASE IDCMP_VANILLAKEY; handleVanillaKey(mywin,imsgCode,gads) CASE IDCMP_CLOSEWINDOW; ncA IF EasyRequestArgs(0,[20,0,'Quit...','Are you sure?','Yes|No'],0,0)=1 THEN wanted:=FALSE CASE IDCMP_REFRESHWINDOW Gt_BeginRefresh(mywin) Gt_EndRefresh(mywin,TRUE) ENDSELECT ENDWHILE UNTIL Not(wanted) ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO screen,glist=NIL,gads[8]:ARRAY OF LONG,vi topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,[NIL]) n3 createAllGadgets({glist},vi,gads) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'Binary to Source Converter', WA_SCREENTITLE,'CARNAGE - Always where you never expect us to be!', WA_GADGETS, glist, WA_RMBTRAP, TRUE, WA_WIDTH, 303, WA_MINWIDTH, 50, WA_HEIGHT, 59, WA_MINHEIGHT, 50, WA_DRAGBAR, TRUE, WA_DEPTHGADGET, TRUE, nI WA_ACTIVATE, TRUE, WA_CLOSEGADGET, TRUE, WA_SIZEGADGET,FALSE, WA_SMARTREFRESH, TRUE, WA_IDCMP,IDCMP_CLOSEWINDOW OR IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR STRINGIDCMP OR BUTTONIDCMP, WA_PUBSCREEN,mysc,NIL]) Gt_RefreshWindow(mywin,NIL) IF wbmessage THEN EasyRequestArgs(0,[20,0,'','Welcome to BSC','Howdy!'],0,0) process_window_events(mywin,gads) EXCEPT DO nP8e IF mywin THEN CloseWindow(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC programError(text) EasyRequestArgs(0,[20,0,'Fatal Error...',text,'Ok'],0,0) ENDPROC PROC main() HANDLE KickVersion(37) IF gadtoolsbase:=OpenLibrary('gadtools.library',37) IF aslbase:=OpenLibrary('asl.library',37) gadtoolsWindow() ELSE EasyRequestArgs(0,[20,0,'Fatal Error...'nN,'Couldn''t open asl.library v37','Ok'],0,0) ENDIF ELSE EasyRequestArgs(0,[20,0,'Fatal Error...','Couldn''t open gadtools.library v37','Ok'],0,0) ENDIF EXCEPT DO IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) SELECT exception CASE ERR_FONT; programError('Failed to open topaz.font 8') CASE ERR_GAD; programError('Couldn''t create the gadgets') CASE ERR_KICK; WriteF('ERROR: Requires Kickstart v37\n') CASE ERR_PUB; programError('Couldn''t lock default public scn }reen') CASE ERR_VIS; programError('GetVisualInfoA() failed') CASE ERR_WIN; programError('Couldn''t open the window') ENDSELECT ENDPROC tab: CHAR 9 vers: CHAR '$VER: BSC v1.02 (11-Jan-97)',0-6TE%: PlayZebGUI.epI#<-> PlayZebGUI.e -> A module player for Zebtracker modules -> Code by Zebedee/Area 51 (08-Sep-97) -> I can't be fucked to write any more - I give up - this is the end -> of this util coz I'm not doing any more!!!!! MODULE 'asl','dos','libraries/asl','gadtools','exec/ports','exec/nodes', 'graphics/rastport','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','workbench/startup', 'reqtools','libraries/reqtools','exec/memory','icon','dos&/dos', 'workbench/workbench','zebreplay' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_PUB,ERR_VIS,ERR_WIN,ERR_ASL CONST T=TRUE,F=FALSE RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL ENUM GDSL_VOLUME,GDSL_POSITION,GDBT_START,GDBT_REWIND,GDBT_STOP,GDBT_PLAY, GDBT_PAUSE,GDBT_FORWARD,GDBT_D^0EAD,GDBT_PREFS,GDBT_LOAD,GDBT_ABOUT,GDBT_QUIT DEF topaz80,mywin=NIL:PTR TO window,modbadr,modplay=FALSE,wbenchMsg:PTR TO wbstartup, wbarg:PTR TO wbarg,i,olddir,modname[255]:STRING,winleft=0:PTR TO LONG, wintop=11:PTR TO LONG,openfreq=FALSE,openshrink=FALSE,wanted=TRUE, maxpos=0:PTR TO LONG,validmod=FALSE,ffull[255]:STRING,fpath[255]:STRING, fname[255]:STRING,temps[255]:STRING,wintitle[20]:STRING,scrtitle[80]:STRING, modpause=FALSE,winbig=TRUE,titlegfx:image,filtenPd r=TRUE PROC handleGadgetEvent(win,gad:PTR TO gadget,code,volume_lev:PTR TO LONG,position_lev:PTR TO LONG,my_gads:PTR TO LONG) DEF id id:=gad.gadgetid SELECT id CASE GDSL_VOLUME volume_lev[]:=code ztSetVolume(modbadr,volume_lev[]) CASE GDBT_START;ztStop(modbadr);ztPlay(modbadr);IF filter=FALSE THEN BSET #1,$bfe001 CASE GDBT_LOAD; getModuleName(TRUE,my_gads) CASE GDBT_STOP; stopModule(my_gads,volume_lev) CASE GDBT_PLAY; playModule(my_gads,volume_l@Geev,position_lev) CASE GDBT_PAUSE;pauseModule(my_gads) CASE GDBT_PREFS;editPrefs() CASE GDBT_ABOUT;showAbout() CASE GDBT_QUIT; checkQuit() ENDSELECT ENDPROC PROC handleVanillaKey(win,code,volume_lev:PTR TO LONG,position_lev:PTR TO LONG,my_gads:PTR TO LONG) SELECT "z" OF code CASE "v" IF winbig volume_lev[]:=Min(volume_lev[]+1,63) ztSetVolume(modbadr,volume_lev[]) Gt_SetGadgetAttrsA(my_gads[GDSL_VOLUME],win,NIL,[GTSL_LEVEL,volume_lTNev[],NIL]) ENDIF CASE "V" IF winbig volume_lev[]:=Max(volume_lev[]-1,0) ztSetVolume(modbadr,volume_lev[]) Gt_SetGadgetAttrsA(my_gads[GDSL_VOLUME],win,NIL,[GTSL_LEVEL,volume_lev[],NIL]) ENDIF CASE "q","Q";checkQuit() CASE "x","X";IF winbig THEN stopModule(my_gads,volume_lev) CASE " "; IF winbig THEN playModule(my_gads,volume_lev,position_lev) CASE "p","P";IF winbig THEN pauseModule(my_gads) CASE "s","S";ztStop(modbad-~r);ztPlay(modbadr);IF filter=FALSE THEN BSET #1,$bfe001 CASE "/","?";editPrefs() CASE "a","A";showAbout() ENDSELECT ENDPROC PROC createAllGadgets(glistptr:PTR TO LONG,vi,topborder,volume_lev,position_lev,my_gads:PTR TO LONG) DEF gad,ng:PTR TO newgadget gad:=CreateContext(glistptr) ng:=[31,30,241,11,' ',topaz80,GDSL_VOLUME,NIL,vi,0]:newgadget my_gads[GDSL_VOLUME]:=(gad:=CreateGadgetA(SLIDER_KIND,gad,ng, [GTSL_MIN, 0, o  GTSL_MAX, 0, GTSL_LEVEL, 0, GTSL_LEVELFORMAT, '\z\d[2]', GTSL_MAXLEVELLEN, 2,NIL])) ng:=[39,42,210,11,' ',topaz80,GDSL_POSITION,NIL,vi,0]:newgadget my_gads[GDSL_POSITION]:=(gad:=CreateGadgetA(SLIDER_KIND,gad,ng, [GTSL_MIN, 0, GTSL_MAX,  zF 0, GTSL_LEVEL, 0, GTSL_LEVELFORMAT, '\z\d[3]', GTSL_MAXLEVELLEN, 2,NIL])) ng:=[8,54,24,11,'|<',topaz80,GDBT_START,NIL,vi,0]:newgadget my_gads[GDBT_START]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[NIL])) ng:=[32,54,24,11,'<<',topaz80,GDBT_REWIND,NIL,vi,0]:newgadget my_gads[GDBT_REWIND]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[NIL])) ng:=[56,54,24,11,'X',topaz8 u0,GDBT_STOP,NIL,vi,0]:newgadget my_gads[GDBT_STOP]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[NIL])) ng:=[80,54,24,11,'>',topaz80,GDBT_PLAY,NIL,vi,0]:newgadget my_gads[GDBT_PLAY]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[NIL])) ng:=[104,54,24,11,'||',topaz80,GDBT_PAUSE,NIL,vi,0]:newgadget my_gads[GDBT_PAUSE]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[NIL])) ng:=[128,54,24,11,'>>',topaz80,GDBT_FORWARD,NIL,vi,0]:newgadget my_gads[GDBT_FORWARD]:=(gad:=CreateGadgetA(BUTTON_KIND, N;gad,ng,[NIL])) ng:=[152,54,24,11,' ',topaz80,GDBT_DEAD,NIL,vi,0]:newgadget my_gads[GDBT_DEAD]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[NIL])) ng:=[176,54,24,11,'P',topaz80,GDBT_PREFS,NIL,vi,0]:newgadget my_gads[GDBT_PREFS]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[NIL])) ng:=[200,54,24,11,'L',topaz80,GDBT_LOAD,NIL,vi,0]:newgadget my_gads[GDBT_LOAD]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[NIL])) ng:=[224,54,24,11,'A',topaz80,GDBT_ABOUT,NIL,vi,0]:newgadget my_gads[GDBT_ '@ABOUT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[NIL])) ng:=[248,54,24,11,'Q',topaz80,GDBT_QUIT,NIL,vi,0]:newgadget my_gads[GDBT_QUIT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[NIL])) ENDPROC gad PROC processWindowEvents(mywin:PTR TO window,volume_lev:PTR TO LONG,position_lev:PTR TO LONG,my_gads:PTR TO LONG) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad WHILE wanted updatePlayPos(my_gads) imsg:=Gt_GetIMsg(mywin.userport) gad:=imsg.iaddress imsgClass:=imsg 1\.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_GADGETDOWN; handleGadgetEvent(mywin,gad,imsgCode,volume_lev,position_lev,my_gads) CASE IDCMP_MOUSEMOVE; handleGadgetEvent(mywin,gad,imsgCode,volume_lev,position_lev,my_gads) CASE IDCMP_GADGETUP; handleGadgetEvent(mywin,gad,imsgCode,volume_lev,position_lev,my_gads) CASE IDCMP_VANILLAKEY; handleVanillaKey(mywin,imsgCode,volume_lev,position_lev,my_gads) CASE IDCMP_MENUP~ICK IF winbig winbig:=FALSE SizeWindow(mywin,0,-57) ELSE winbig:=TRUE SizeWindow(mywin,0,57) SetWindowTitles(mywin,'PlayZebGUI: Playing...',scrtitle) Delay(10) showMaxPosition(maxpos) drawImage() ENDIF CASE IDCMP_REFRESHWINDOW Gt_BeginRefresh(mywin) Gt_EndRefresh(mywin,TRUE) ENDSELECT ENDWHILE ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NILX:PTR TO screen,glist=NIL, my_gads[14]:ARRAY OF LONG,vi,volume_lev=0,position_lev=0,topborder topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,[NIL]) topborder:=mysc.wbortop+mysc.font.ysize+1 createAllGadgets({glist},vi,topborder,volume_lev,position_lev,my_gads) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'PlayZebGUI: Waiting...', WA_SCREENTITLE,'No file loaded.', Q1 WA_GADGETS, glist, WA_RMBTRAP, FALSE, WA_LEFT, winleft, WA_TOP, wintop, WA_WIDTH, 280, WA_MINWIDTH, 50, WA_HEIGHT, 68, WA_MINHEIGHT, 50, WA_DRAGBAR, TRUE, WA_DEPTHGADGET, TRUE, WA_ACTIVATE, TRUE, WA_CLOSEGADGET, FALSE, WA_SIZEGADGET,FALSE, WA_SMARTREFRESH, TRUE, Xq WA_IDCMP, IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR SLIDERIDCMP OR STRINGIDCMP OR BUTTONIDCMP OR IDCMP_MENUPICK, WA_PUBSCREEN,mysc,NIL]) showMaxPosition(0) drawImage() gadgets(F,F,F,F,F,F,F,my_gads) Gt_RefreshWindow(mywin,NIL) processWindowEvents(mywin,{volume_lev},{position_lev},my_gads) EXCEPT DO IF mywin THEN CloseWindow(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(m0) AND (dobj:=GetDiskObject(wbarg.name)) toolarray:=dobj.tooltypes IF s:=FindToolType(toolarray,'OPENFREQ') THEN openfreq:=MatchToolValue(s,'YES') IF s:=FindToolType(toolarray,'MODULE') THEN IF StrLen(sKB)>0 THEN StrCopy(modname,s) IF s:=FindToolType(toolarray,'SHRINKWIN') THEN openshrink:=MatchToolValue(s,'YES') IF s:=FindToolType(toolarray,'WINDOWX') THEN winleft:=Val(s,NIL) ELSE winleft:=0 IF s:=FindToolType(toolarray,'WINDOWY') THEN wintop:=Val(s,NIL) ELSE wintop:=11 FreeDiskObject(dobj) IF wintop<0 THEN wintop:=11 IF winleft<0 THEN winleft:=0 ENDIF ENDPROC PROC getModuleName(fr,my_gads:PTR TO LONG) IF fr=TRUE THEN StrCopy(modname,getFilename()) ELSE StrCopy(modname,fr) validmod:=TRUE IF (FileLength(modname)=-1) AND (StrLen(modname)>0) RtEZRequestA('File not found','_Ok',0,0,[RTEZ_REQTITLE,'Error...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) StrCopy(modname,'') validmod:=FALSE ELSE IF StrLen(modname)>0 modplay:=FALSE IF modbadr ztStop(modbadr) ztUnloadModule(modbadr) modbadr:=0 ENDIF StringF(temps,'Loading "\s"...',ffull) SetWindowTitles(mywin,9bu'PlayZebGUI: Loading...',temps) IF modbadr:=ztLoadModule(modname) validmod:=TRUE StringF(scrtitle,'File "\s" (\d bytes)"',fname,FileLength(ffull)) Gt_SetGadgetAttrsA(my_gads[GDSL_VOLUME],mywin,NIL,[GTSL_MAX,63,NIL]) maxpos:=ztSongLen(modbadr) DEC maxpos showMaxPosition(maxpos) Gt_SetGadgetAttrsA(my_gads[GDSL_POSITION],mywin,NIL,[GTSL_MAX,maxpos,NIL]) ENDIF ELSE RtEZRequestA('Unable to load module!','_Ok',0,&$J0,[RTEZ_REQTITLE,'Error...',RT_UNDERSCORE,"_",NIL]) ENDIF ENDIF SetWindowTitles(mywin,'PlayZebGUI: Waiting...',scrtitle) IF StrLen(modname)<1 THEN validmod:=FALSE IF validmod THEN gadgets(F,F,F,T,F,F,F,my_gads) ELSE gadgets(F,F,F,F,F,F,F,my_gads) ENDPROC PROC getFilename() HANDLE DEF fr:PTR TO filerequester fr:=AllocAslRequest(ASL_FILEREQUEST,[ASL_HAIL,'Select Module...',ASL_HEIGHT,200, ASL_WIDTH,320,ASL_LEFTEDGE,0,ASL_TOPEDGE,0,ASL_OKTEXT,'Use'yRq, ASL_CANCELTEXT,'Cancel',ASL_FILE,'',ASL_DIR,fpath,NIL]) IF AslRequest(fr,NIL) fname:=fr.file fpath:=fr.drawer ELSE fname:=FALSE fpath:=FALSE ENDIF IF StrLen(fname)>0 MidStr(temps,fpath,StrLen(fpath)-1,1) StrCopy(ffull,'') StrAdd(ffull,fpath) IF Not(StrCmp(':',temps,1)) THEN StrAdd(ffull,'/') StrAdd(ffull,fname) ENDIF EXCEPT IF fr THEN FreeAslRequest(fr) SELECT exception CASE ERR_ASL; fatalError('unable to 2allocate ASL request') ENDSELECT ReThrow() ENDPROC ffull PROC gadgets(a,b,c,d,e,f,g,my_gads:PTR TO LONG) IF a THEN OnGadget(my_gads[GDBT_START],mywin,NIL) ELSE OffGadget(my_gads[GDBT_START],mywin,NIL) IF b THEN OnGadget(my_gads[GDBT_REWIND],mywin,NIL) ELSE OffGadget(my_gads[GDBT_REWIND],mywin,NIL) IF c THEN OnGadget(my_gads[GDBT_STOP],mywin,NIL) ELSE OffGadget(my_gads[GDBT_STOP],mywin,NIL) IF d THEN OnGadget(my_gads[GDBT_PLAY],mywin,NIL) ELSE OffGadget(my_gads[GDBT_PLAY];,mywin,NIL) IF e THEN OnGadget(my_gads[GDBT_PAUSE],mywin,NIL) ELSE OffGadget(my_gads[GDBT_PAUSE],mywin,NIL) IF f THEN OnGadget(my_gads[GDBT_FORWARD],mywin,NIL) ELSE OffGadget(my_gads[GDBT_FORWARD],mywin,NIL) IF g THEN OnGadget(my_gads[GDBT_DEAD],mywin,NIL) ELSE OffGadget(my_gads[GDBT_DEAD],mywin,NIL) ENDPROC PROC checkQuit() IF (RtEZRequestA('Are you sure?','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Quit',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=1) TH%x )EN wanted:=FALSE ENDPROC PROC updatePlayPos(my_gads:PTR TO LONG) DEF a:PTR TO LONG,b:PTR TO LONG Gt_SetGadgetAttrsA(my_gads[GDSL_POSITION],mywin,NIL,[GTSL_LEVEL,ztSongPos(modbadr),NIL]) a:=ztSongPos(modbadr) b:=ztPatternPos(modbadr) StringF(temps,'\z\d[2]',b) PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,temps,NIL]:intuitext,257,44) IF modplay AND (winbig=FALSE) StringF(temps,'PlayZebGUI: Playing... (\z\d[2]/\z\d[2])',a,b) SetWindowTitle:s(mywin,temps,-1) ENDIF ENDPROC PROC showMaxPosition(num) StringF(temps,'\z\d[3]',num) PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,temps,NIL]:intuitext,7,12) -> 249 ENDPROC PROC drawImage() DEF ctr:PTR TO LONG FOR ctr:=0 TO 17 titlegfx:=[34,12,224,ctr,3,{gfx},1,0,NIL]:image -> PlayZebGUI.raw DrawImage(mywin.rport,titlegfx,0,0) Delay(1) ENDFOR FOR ctr:=0 TO 224 STEP 2 titlegfx:=[34,12,ctr,17,3,{gfx},3,0,NIL]:image -> PlayZebGUI~*`.raw DrawImage(mywin.rport,titlegfx,0,0) ENDFOR ENDPROC PROC playModule(my_gads:PTR TO LONG,volume_lev:PTR TO LONG,position_lev:PTR TO LONG) IF modplay:=ztPlay(modbadr) IF filter=FALSE THEN BSET #1,$bfe001 volume_lev[]:=63 position_lev[]:=0 Gt_SetGadgetAttrsA(my_gads[GDSL_VOLUME],mywin,NIL,[GTSL_LEVEL,63,NIL]) Gt_SetGadgetAttrsA(my_gads[GDSL_POSITION],mywin,NIL,[GTSL_LEVEL,0,NIL]) SetWindowTitles(mywin,'PlayZebGUI: Playing...',scrtitle) modplay:=T2ƀRUE IF modpause ztResume(modbadr) modpause:=FALSE SetWindowTitles(mywin,'PlayZebGUI: Playing...',scrtitle) gadgets(T,F,T,F,T,F,F,my_gads) ELSE gadgets(T,F,T,F,T,F,F,my_gads) ENDIF ELSE RtEZRequestA('Unable to play module!','_Ok',0,0,[RTEZ_REQTITLE,'Error...',RT_UNDERSCORE,"_",NIL]) modplay:=FALSE ENDIF ENDPROC PROC pauseModule(my_gads:PTR TO LONG) IF modpause ztResume(modbadr) modpause:=FALSE SetWindowTitles(mywin,'2PlayZebGUI: Playing...',scrtitle) gadgets(T,F,T,F,T,F,F,my_gads) ELSE ztPause(modbadr) modpause:=TRUE SetWindowTitles(mywin,'PlayZebGUI: Paused...',scrtitle) gadgets(F,F,T,F,T,F,F,my_gads) ENDIF ENDPROC PROC stopModule(my_gads:PTR TO LONG,volume_lev:PTR TO LONG) ztStop(modbadr) modplay:=FALSE volume_lev[]:=0 Gt_SetGadgetAttrsA(my_gads[GDSL_VOLUME],mywin,NIL,[GTSL_LEVEL,0,NIL]) SetWindowTitles(mywin,'PlayZebGUI: Waiting...',scrtitle) gadgets(F,F,F,PT,F,F,F,my_gads) ENDPROC PROC showHotkeyInformation() RtEZRequestA('vV...Change the volume (v+, V-)\n' + 'sS...Restart the module\n' + 'xX...Stop module\n' + 'pP...Play module\n' + 'SPC..Pause module\n' + 'iI...Show module information\n' + 'lL...Open file requester\n' + 'aA...About the program\n' + 'qQ...Quit PlayZebGUI','_Cancel',0,0,[RTEZ_REQTITLE,'Hotkeys...', %RT_UNDERSCORE,"_",NIL]) ENDPROC PROC showPrefs() RtEZRequestA('1: If on, the module controls the filter when it''s first played.\n' + ' If off, the program turns it off when it''s first played.','_Cancel',0,0,[RTEZ_REQTITLE,'Hotkeys...',RT_UNDERSCORE,"_",NIL]) ENDPROC PROC showAbout() DEF quit=FALSE,opt:PTR TO LONG REPEAT opt:=RtEZRequestA('\n' + ' PlayZebGUI v1.00 (08-Sep-97) \n' + !65 '\n' + 'By Zebedee/Area 51\n\n' + '1997 An Area 51 Production\n' + '** INTERNAL USE ONLY **\n\n' + 'Program encrypted with ExeCryptor\n' + 'which was also coded by Zebedee/A51!\n\n' + 'Write: 39 Beckly Court, Armada Way,\n' + 'Plymouth, Devon, PL1 1LD, ENGLAND', "g '_Hotkeys|_Prefs|_Exit',0,0,[RTEZ_REQTITLE,'About...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL]) SELECT opt CASE 1; showHotkeyInformation() CASE 2; showPrefs() CASE 0; quit:=TRUE ENDSELECT UNTIL quit ENDPROC PROC editPrefs() DEF quit=FALSE,opt:PTR TO LONG REPEAT StringF(temps,'1. Filter is \s',IF filter=FALSE THEN 'off' ELSE 'on') opt:=RtEZRequestA(temps,'_1|_Exit',0,0,[RTEZ_REQTITLE,'Preferences...',RT_UNDERS#CORE,"_",NIL]) SELECT opt CASE 1; IF filter THEN filter:=FALSE ELSE filter:=TRUE CASE 0; quit:=TRUE ENDSELECT UNTIL quit ENDPROC PROC main() HANDLE KickVersion(37) StrCopy(scrtitle,'No file loaded.') IF gadtoolsbase:=OpenLibrary('gadtools.library',37) IF reqtoolsbase:=OpenLibrary('reqtools.library',37) IF ztreplaybase:=OpenLibrary('zebreplay.library',0) IF aslbase:=OpenLibrary('asl.library',37) IF wbmessage wbenchMs$}Xg:=wbmessage wbarg:=wbenchMsg.arglist FOR i:=0 TO wbenchMsg.numargs-1 olddir:=-1 IF wbarg.lock AND (wbarg.name[]<>0) THEN olddir:=CurrentDir(wbarg.lock) readToolTypes(wbarg) IF (i>0) AND (wbarg.name[]<>0) WriteF('\s\n',wbarg.name[]) IF modbadr:=ztLoadModule(wbarg.name[]) IF modplay:=ztPlay(modbadr) modplay:=TRUE IF f%y>ilter=FALSE THEN BSET #1,$bfe001 ELSE modplay:=FALSE ENDIF ELSE fatalError('Unable to load the module!') ENDIF ENDIF IF olddir<>-1 THEN CurrentDir(olddir) wbarg++ ENDFOR ENDIF gadtoolsWindow() ELSE fatalError('Unable to open asl.library v37') ENDIF ELSE fatalError('Un&rable to open zebreplay.library') ENDIF ELSE fatalError('Unable to open reqtools.library v37') ENDIF ELSE fatalError('Unable to open gadtools.library v37') ENDIF EXCEPT DO IF modbadr IF modplay THEN ztStop(modbadr) ztUnloadModule(modbadr) ENDIF IF aslbase THEN CloseLibrary(aslbase) IF ztreplaybase THEN CloseLibrary(ztreplaybase) IF reqtoolsbase THEN CloseLibrary(reqtoolsbase) IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) IF exception'J4 SELECT exception CASE ERR_FONT; fatalError('Unable to open topaz.font 8') CASE ERR_GAD; fatalError('Unable to create the gadgets') CASE ERR_KICK; WriteF('ERROR: Requires Kickstart v37 (KS2+)\n') CASE ERR_PUB; fatalError('Unable to lock default public screen') CASE ERR_VIS; fatalError('Unable to get gisual info') CASE ERR_WIN; fatalError('Unable to open the window') ENDSELECT ENDIF ENDPROC gfx: LONG $0007ffff,$ffffffff,$f7feffff,$fff(iϧfffe0,$1ffff03f,$ffffffff,$f8000000,$000c00c0,$10060040,$1c038061,$86008030 LONG $30061860,$18618020,$0c000000,$0007f087,$f0c3c3c3,$08610c21,$843f8618,$30c218c3,$08610fe1,$86000000,$00006186 LONG $30c3c3c3,$08610fe1,$0c318618,$30c218c3,$08610c61,$86000000,$0000c387,$b0c3c3c3,$08610c60,$1c3d8618,$30c218c3 LONG $08610f61,$86000000,$00018780,$f006c3c0,$18010c60,$3c078030,$300618c0,$0c0301e0,$0c000000,$00030d87,$b0c3c3c3 LONG $08610c60,$1c3d8618,$30fe18c3,$0f0f0f61,$8)QzB6000000,$00061986,$30c3c3c3,$08610fe1,$0c318618,$30c618c3,$0f0f0c61 LONG $86000000,$000c3f87,$f0c3c3c3,$08610c21,$843f8618,$30c61fc3,$0f0f0fe1,$86000000,$000c00c0,$1006c3c3,$08618061 LONG $86008618,$30c30043,$0f0d8021,$86000000,$0007ffff,$fffc7e7f,$ffffffff,$fffffff0,$1f81ffff,$f9f8ffff,$fc000000 LONG $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$73c70c1f,$1f1f0078,$f803cfc7,$c3c07c18 LONG $03f3f1f3,$f319e3f3,$f3e3e000,$c6019c31,$b186000d,*Sf$8c006c6c,$60606038,$031b1b1b,$1b1b0018,$c6363000,$c6018c1f LONG $9f8c00fd,$8c07efcf,$e7e07e18,$03f3f31b,$1b1b0018,$c6363000,$c6018c01,$8198018d,$8c0c6c6c,$0c600318,$03031b1b LONG $1b1b0018,$c6363000,$73f73f0f,$0f3000fd,$8c07ec67,$87e07e7e,$030319f3,$f1f1f81b,$f3e63000,$00000000,$00000000 LONG $00000000,$00000000,$00000000,$00000000,$00000000,$0003ff3f,$eff9ffbf,$e3fc7f9e,$79ff7fc0,$0ff9e01f,$e79e7fdf LONG $f0000000,$00000f78,$0f3c3c3c,$f79ef3de,$7bc079e0,$0f3de03+\xec,$f79ef01e,$78000000,$00001e78,$0f3c3c3c,$f79ef01e LONG $f3c079e0,$0f3de03c,$f79ef01e,$78000000,$00003c78,$0f3c3c3c,$f79ef01f,$e3c079e0,$0f3de03c,$f79ef01e,$78000000 LONG $0000787f,$0ff83c3f,$e7fef01f,$c3f87fc0,$0ff9e03f,$f3fcfe1f,$f0000000,$0000f078,$0f3c3c3c,$f79ef01f,$e3c079e0 LONG $0f01e03c,$f0f0f01e,$78000000,$0001e078,$0f3c3c3c,$f79ef01e,$f3c079e0,$0f01e03c,$f0f0f01e,$78000000,$0003c078 LONG $0f3c3c3c,$f79ef3de,$7bc079e0,$0f01e03c,$f0f0f01e,$78000000,$0003f,j^#f3f,$eff83c3c,$f79e7f9e,$79ff79e0,$0f00ffbc LONG $f0f07fde,$78000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000 LONG $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000 LONG $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000 LONG $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$000-x,00000,$00000000,$00000000,$00000000 LONG $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000 version: CHAR '$VER: PlayZebGUI v1.00 (08-Sep-97)',09.H)TlE%:MlEdit.epS<-> MlEdit.e by Zebedee/A51 -> Mountlist editor - not yet finished! MODULE 'gadtools','exec/ports','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','tools/constructors', 'reqtools','libraries/reqtools' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_PUB,ERR_VIS,ERR_WIN RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetViq:BNsualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL ENUM GDLV_DEVLIST,GDBT_NEW,GDST_DEVNAME,GDBT_DEL,GDBT_UNDEL,GDBT_SPARE, GDCY_ENTRY,GDBT_SEL,GDST_ENTRYT,GDBT_REQ,GDCY_DISEN,GDBT_LOAD, GDBT_PRINT,GDBT_HELP,GDBT_SAVE,GDBT_ABOUT,GDBT_SHOW CONST T=TRUE,F=FALSE /***************************************************************************\ ** VARIABLE DEFINITIONS ** \***************************************************X************************/ DEF topaz80,mywin=NIL:PTR TO window,list,wanted=T,vi,my_gads[17]:ARRAY OF LONG, temps[255]:STRING,bigwin=TRUE,temp1:PTR TO LONG,e00[2]:LIST,e01[2]:LIST, e02[2]:LIST,e03[2]:LIST,e04[2]:LIST,e05[2]:LIST,e06[2]:LIST,e07[2]:LIST, e08[2]:LIST,e09[2]:LIST,e10[2]:LIST,e11[2]:LIST,e12[2]:LIST,e13[2]:LIST, e14[2]:LIST,e15[2]:LIST,e16[2]:LIST,e17[2]:LIST,e18[2]:LIST, device=0:PTR TO LONG /***********************************************************T****************\ ** HANDLE GADGET EVENTS ** \***************************************************************************/ PROC handleGadgetEvent(gad:PTR TO gadget,code) DEF id id:=gad.gadgetid StrCopy(temps,gad.specialinfo::stringinfo.buffer) SELECT id CASE GDLV_DEVLIST;device:=code CASE GDCY_ENTRY setReqGadget(code) showParameter(code) CASE GDBT_SEL temp1:=rtRequest('Select Entry...', h_E '1. Handler 7. Flags 13. Interleave\n' + '2. FileSystem 8. Surfaces 14. Buffers\n' + '3. Unit 9. Reserved 15. BufMemType\n' + '4. StackSize 10. BlocksPerTrack 16. DosType\n' + '5. Priority 11. LowCyl\n' + '6. GlobVec 12. HighCyl', '1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16',-1) DEC temp1 IF tempF1=-1 THEN temp1:=16 setGadget(GDCY_ENTRY,GTCY_ACTIVE,temp1) setReqGadget(temp1) showParameter(temp1) CASE GDCY_DISEN IF code=0 THEN gadgetState(GDST_ENTRYT,T) ELSE gadgetState(GDST_ENTRYT,F) CASE GDBT_LOAD;loadMenu() CASE GDBT_PRINT;printMenu() CASE GDBT_HELP;help() CASE GDBT_SAVE;saveMenu() CASE GDBT_ABOUT;about() CASE GDBT_SHOW;show() /* CASE GAD_SLIDER WriteF('Slider at level \d\n',code) slider_level[]:=code CA~SE GAD_CYCLE WriteF('Item selected is \d - ',code) SELECT code CASE 0;WriteF('Zero\n') CASE 1;WriteF('One\n') CASE 2;WriteF('Two\n') ENDSELECT CASE GAD_CHECKBOX;IF code THEN WriteF('Checked\n') ELSE WriteF('Not checked\n') CASE GAD_STRING;WriteF('Gadget string: "\s".\n',temps) CASE GAD_INTEGER;WriteF('Gadget integer: "\d".\n',Val(temps,NIL)) CASE GAD_BUTTON WriteF('Button was pressed, slider reset to 5.\n') slider_7level[]:=5 Gt_SetGadgetAttrsA(my_gads[GAD_SLIDER],mywin,NIL,[GTSL_LEVEL,slider_level[],NIL]) CASE GAD_LISTVIEW;WriteF('Item: \d\n',code) CASE GAD_MX mxval:=code WriteF('Item: \d - ',code) SELECT code CASE 0;WriteF('Zero\n') CASE 1;WriteF('One\n') CASE 2;WriteF('Two\n') ENDSELECT*/ ENDSELECT ENDPROC /***************************************************************************\ ** HANDLE VANILLA KEYBOA ˜RD INPUT ** \***************************************************************************/ PROC handleVanillaKey(code) SELECT "w" OF code CASE "!" StringF(temps,'ListLen=\d',ListLen(e01)) rtRequest('Debug...',temps,'_Ok') /* CASE "v" slider_level[]:=Min(slider_level[]+1,10) Gt_SetGadgetAttrsA(my_gads[GAD_SLIDER],mywin,NIL,[GTSL_LEVEL,slider_level[],NIL]) CASE "V" slider_level[]:=Max(slider_level[]-1,0) Gt_SetGadgetA ÂQttrsA(my_gads[GAD_SLIDER],mywin,NIL,[GTSL_LEVEL,slider_level[],NIL]) CASE "c","C" slider_level[]:=10 Gt_SetGadgetAttrsA(my_gads[GAD_SLIDER],mywin,NIL,[GTSL_LEVEL,slider_level[],NIL]) CASE "f" Gt_SetGadgetAttrsA(my_gads[GAD_CYCLE],mywin,NIL,[GTCY_ACTIVE,0,NIL]) OnGadget(my_gads[GAD_CYCLE],mywin,NIL) CASE "F" Gt_SetGadgetAttrsA(my_gads[GAD_CYCLE],mywin,NIL,[GTCY_ACTIVE,2,NIL]) OffGadget(my_gads[GAD_CYCLE],mywin,NIL) CASE "s";Gt_SetGad hCugetAttrsA(my_gads[GAD_CHECKBOX],mywin,NIL,[GTCB_CHECKED,F,NIL]) CASE "S";Gt_SetGadgetAttrsA(my_gads[GAD_CHECKBOX],mywin,NIL,[GTCB_CHECKED,T,NIL]) CASE "t";ActivateGadget(my_gads[GAD_STRING],mywin,NIL) CASE "T";Gt_SetGadgetAttrsA(my_gads[GAD_STRING],mywin,NIL,[GTST_STRING,'Default text',NIL]) CASE "i";ActivateGadget(my_gads[GAD_INTEGER],mywin,NIL) CASE "I";Gt_SetGadgetAttrsA(my_gads[GAD_INTEGER],mywin,NIL,[GTIN_NUMBER,0,NIL]) CASE "l","L" Enqueue(list,new node(NIL,'Seventeen',0,1)) Gt_SetGadgetAttrsA(my_gads[GAD_LISTVIEW],mywin,NIL,[GTLV_LABELS,list,NIL]) Gt_RefreshWindow(mywin,NIL) WriteF('Added "Seventeen" to the top\n') CASE "m" INC mxval IF mxval=3 THEN mxval:=0 Gt_SetGadgetAttrsA(my_gads[GAD_MX],mywin,NIL,[GTMX_ACTIVE,mxval,NIL]) CASE "M" DEC mxval IF mxval=-1 THEN mxval:=2 Gt_SetGadgetAttrsA(my_gads[GAD_MX],mywin,NIL,[GTMX_ACTIVE,mxval,NIL]) CASE "r","R" sli )Kder_level[]:=5 Gt_SetGadgetAttrsA(my_gads[GAD_SLIDER],mywin,NIL,[GTSL_LEVEL,slider_level[],NIL])*/ CASE "q","Q";checkQuit() ENDSELECT ENDPROC /***************************************************************************\ ** CREATE THE GADGETS ** \***************************************************************************/ PROC createAllGadgets(glistptr:PTR TO LONG) DEF gad,ng:PTR TO newgadget -> Enqueue(list,newnode(ǵh$7NIL,'FF0:')) -> Enqueue(list,newnode(NIL,'FF1:')) -> Enqueue(list,newnode(NIL,'FF2:')) -> Enqueue(list,newnode(NIL,'FF3:')) -> Enqueue(list,newnode(NIL,'FF4:')) -> Enqueue(list,newnode(NIL,'FF5:')) -> Enqueue(list,newnode(NIL,'FF6:')) -> Enqueue(list,newnode(NIL,'FF7:')) -> Enqueue(list,newnode(NIL,'FF8:')) -> Enqueue(list,newnode(NIL,'FF9:')) gad:=CreateContext(glistptr) ng:=[16,17,182,56,'',topaz80,GDLV_DEVLIST,NIL,vi,0]:newgadget ng.textattr := 0 my_gads[GDLV_DE,oVLIST]:=(gad:=CreateGadgetA(LISTVIEW_KIND,gad,ng, [GTLV_SHOWSELECTED,NIL,GTLV_SELECTED,0,GTLV_LABELS,list,GT_UNDERSCORE,"_",NIL])) ng.topedge := 71 ng.width := 58 ng.height := 12 ng.gadgettext := 'New' ng.gadgetid := GDBT_NEW ng.flags := 0 my_gads[GDBT_NEW]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 78 ng.width := 120 ng.gadgettext := '' ng.gadgetid := GDST_DEVNAME my_gads[GDST_DEVNAtJ@ME]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng, [GTST_STRING,'',GTST_MAXCHARS,8,GT_UNDERSCORE,"_",NIL])) ng.leftedge := 16 ng.topedge := 85 ng.width := 58 ng.gadgettext := 'Del' ng.gadgetid := GDBT_DEL my_gads[GDBT_DEL]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 78 ng.gadgettext := 'UnDel' ng.gadgetid := GDBT_UNDEL my_gads[GDBT_UNDEL]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 140 ng.gadgettext := '' ng.gadgetid := GDBT_SPARE my_gads[GDBT_SPARE]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 16 ng.topedge := 107 ng.width := 160 ng.gadgetid := GDCY_ENTRY my_gads[GDCY_ENTRY]:=(gad:=CreateGadgetA(CYCLE_KIND,gad,ng, [GTCY_LABELS,['Handler','FileSystem','Unit','StackSize', 'Priority','GlobVec','Flags','Surfaces','Reserved','Blo˫BocksPerTrack', 'LowCyl','HighCyl','Interleave','Buffers','BufMemType', 'DosType',NIL],GT_UNDERSCORE,"_",NIL])) ng.leftedge := 180 ng.width := 18 ng.gadgettext := 'S' ng.gadgetid := GDBT_SEL my_gads[GDBT_SEL]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 16 ng.topedge := 121 ng.width := 160 ng.gadgettext := '' ng.gadgetid := GDST_ENTRYT my_gads[GDST_ENTRYT]:=(gaCd:=CreateGadgetA(STRING_KIND,gad,ng, [GTST_STRING,'',GTST_MAXCHARS,8,GT_UNDERSCORE,"_",NIL])) ng.leftedge := 180 ng.width := 18 ng.gadgettext := 'R' ng.gadgetid := GDBT_REQ my_gads[GDBT_REQ]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 16 ng.topedge := 135 ng.width := 182 ng.gadgettext := '' ng.gadgetid := GDCY_DISEN my_gads[GDCY_DISEN]:=(gad:=CreateGadgetA(CYCLE_KIND,gad,ng, LbO [GTCY_LABELS,['Enabled','Disabled',NIL],GT_UNDERSCORE,"_",NIL])) ng.topedge := 157 ng.width := 58 ng.gadgettext := 'Load' ng.gadgetid := GDBT_LOAD my_gads[GDBT_LOAD]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 78 ng.gadgettext := 'Print' ng.gadgetid := GDBT_PRINT my_gads[GDBT_PRINT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 140 ng.gadgettext := 'Help' ng.gadgetid :=Νi GDBT_HELP my_gads[GDBT_HELP]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 16 ng.topedge := 171 ng.gadgettext := 'Save' ng.gadgetid := GDBT_SAVE my_gads[GDBT_SAVE]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 78 ng.gadgettext := 'About' ng.gadgetid := GDBT_ABOUT my_gads[GDBT_ABOUT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.leftedge := 140 ng.gadgette!wVxt := 'Show' ng.gadgetid := GDBT_SHOW my_gads[GDBT_SHOW]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ENDPROC gad /***************************************************************************\ ** PROCESS THE WINDOW EVENTS ** \***************************************************************************/ PROC processWindowEvents() DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad WHILE wanted Wait(Shl(1,mХmWywin.userport.sigbit)) WHILE wanted AND (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress imsgClass:=imsg.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_GADGETDOWN; handleGadgetEvent(gad,imsgCode) CASE IDCMP_MOUSEMOVE; handleGadgetEvent(gad,imsgCode) CASE IDCMP_GADGETUP; handleGadgetEvent(gad,imsgCode) CASE IDCMP_VANILLAKEY; handleVanillaKey(imsgCode) CASE IDCMP_CLOSEWINDOW; checkQuit/() CASE IDCMP_CHANGEWINDOW;redrawWindow() CASE IDCMP_REFRESHWINDOW Gt_BeginRefresh(mywin) Gt_EndRefresh(mywin,T) ENDSELECT ENDWHILE ENDWHILE ENDPROC /***************************************************************************\ ** OPEN THE WINDOW ** \***************************************************************************/ PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO scre*('en,glist=NIL topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,[NIL]) createAllGadgets({glist}) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'Mountlist Editor', WA_SCREENTITLE,'Written by Zebedee/A51 (19-Oct-97)', WA_GADGETS,glist, WA_RMBTRAP, T, WA_LEFT, (mysc.width/2)-107, WA_TOP, (myscOV .height/2)-95, WA_WIDTH, 214, WA_HEIGHT, 191, WA_DRAGBAR, T, WA_DEPTHGADGET, T, WA_ACTIVATE, T, WA_CLOSEGADGET, T, WA_SIZEBBOTTOM,T, WA_SMARTREFRESH,T, WA_ZOOM, {zoom}, WA_PUBSCREEN,mysc, WA_IDCMP, IDCMP_CLOSEWINDOW OR IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR SLIDERIDCMP OR STRԞėINGIDCMP OR BUTTONIDCMP,NIL]) Gt_RefreshWindow(mywin,NIL) gadgetState(GDST_DEVNAME,F) gadgetState(GDBT_DEL,F) gadgetState(GDBT_UNDEL,F) gadgetState(GDBT_SPARE,F) redrawWindow() processWindowEvents() EXCEPT DO IF mywin THEN CloseWindow(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC /**************************************************************************\ ** ռIZd SET THE CONTENTS OF A GADGET ** \**************************************************************************/ PROC setGadget(gad_id,tag,option) Gt_SetGadgetAttrsA(my_gads[gad_id],mywin,NIL,[tag,option,NIL]) ENDPROC /**************************************************************************\ ** ENABLE AND DISABLE A GADGET ** \**************************************************************************/ PRJQgOC gadgetState(gad_id,enable) IF enable THEN OnGadget(my_gads[gad_id],mywin,NIL) ELSE OffGadget(my_gads[gad_id],mywin,NIL) ENDPROC /**************************************************************************\ ** DRAW A BEVEL BOX ** \**************************************************************************/ PROC bevelBox(x,y,w,h,type=BBFT_BUTTON,inv=FALSE) DrawBevelBoxA(mywin.rport,x,y,w,h,[GT_VISUALINFO,vi,GTBB_FRAMETYPE,typeױ/,GTBB_RECESSED,inv,NIL]) ENDPROC /**************************************************************************\ ** OPEN REQUESTER: ASK TO CONFORM QUIT ** \**************************************************************************/ PROC checkQuit() IF rtRequest('Quit...','Are you sure?','_Yes|_NO!')=1 THEN wanted:=F ENDPROC /**************************************************************************\ ** OPEN REQUESTER: SHOW FATAL}VO ERROR ** \**************************************************************************/ PROC fatalError(text) EasyRequestArgs(0,[20,0,'Fatal Error...',text,'Ok'],0,0) ENDPROC /**************************************************************************\ ** REDRAW ALL THE INFO LIKE INTUITEXT AFTER THE WINDOW HAS BEEN ZIPPED ** \**************************************************************************/ PROC redrawWindow() IF mywin.height=191 bigwin:=TRUE  ٖᬷ bevelBox(8,13,198,88,BBFT_RIDGE) -> Top bevelBox(8,103,198,48,BBFT_RIDGE) -> Middle bevelBox(8,153,198,34,BBFT_RIDGE) -> Bottom ELSE bigwin:=FALSE ENDIF ENDPROC /**************************************************************************\ ** SET WINDOW & SCREEN TITLES ** \**************************************************************************/ PROC setTitles(win,scr) SetWindowTitles(mywin,win,scr) ENDPROC /***********!*Jq6***************************************************************\ ** OPEN A REQTOOLS REQUESTER TO SHOW INFO & ASK QUESTIONS ** \**************************************************************************/ PROC rtRequest(title,body,buttons,default=0,centre=FALSE) IF centre temp1:=RtEZRequestA(body,buttons,0,0,[RTEZ_REQTITLE,title,RT_UNDERSCORE,"_",RTEZ_FLAGS,EZREQF_CENTERTEXT,RTEZ_DEFAULTRESPONSE,default,NIL]) ELSE temp1:=RtEZRequestA(body,buttons,0,0,[RTEZ_R"۝-EQTITLE,title,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,default,NIL]) ENDIF ENDPROC temp1 /***************************************************************************\ ** ENABLE/DISABLE THE "R" (REQ) GADGET DEPENDING ON ENTRY CYCLE GADGET ** \***************************************************************************/ PROC setReqGadget(entry) SELECT entry CASE 0;gadgetState(GDBT_REQ,T) CASE 1;gadgetState(GDBT_REQ,T) DEFAULT gadgetState(GDBT_REQ,F) ENDSELECT ENDP#1{ROC /***************************************************************************\ ** OPEN THE LOAD REQUESTER MENU ** \***************************************************************************/ PROC loadMenu() temp1:=rtRequest('Load...','What do you want to load?', '_Mountlist|_Device|_Cancel') IF temp1=1 THEN loadMountlist() IF temp1=2 THEN loadDevice() ENDPROC PROC loadMountlist() rtRequest('Load: Mountlist...$&','Not yet implemented','_Ok') ENDPROC PROC loadDevice() rtRequest('Load: Device...','Not yet implemented','_Ok') ENDPROC /***************************************************************************\ ** OPEN THE SAVE REQUESTER MENU ** \***************************************************************************/ PROC saveMenu() temp1:=rtRequest('Save...','What do you want to save?', '_Mountlist|_Device|_Cancel') IF %ޏ@temp1=1 THEN saveMountlist() IF temp1=2 THEN saveDevice() ENDPROC PROC saveMountlist() rtRequest('Save: Mountlist...','Not yet implemented','_Ok') ENDPROC PROC saveDevice() rtRequest('Save: Device...','Not yet implemented','_Ok') ENDPROC /***************************************************************************\ ** OPEN THE PRINT REQUESTER MENU ** \***************************************************************************/ PROC pr&(intMenu() temp1:=rtRequest('Print...','What do you want to print?', '_Mountlist|_Device|_Cancel') IF temp1=1 THEN printMountlist() IF temp1=2 THEN printDevice() ENDPROC PROC printMountlist() rtRequest('Print: Mountlist...','Not yet implemented','_Ok') ENDPROC PROC printDevice() rtRequest('Print: Device...','Not yet implemented','_Ok') ENDPROC /***************************************************************************\ ** OPEN T'H# HE ABOUT REQUESTER ** \***************************************************************************/ PROC about() rtRequest('About...','MLEditor v1.00 (19-Oct-97)\nBy Zebedee/A51\n\n1997 An Area 51 Production','_Ok',0,TRUE) ENDPROC /***************************************************************************\ ** OPEN THE SHOW REQUESTER ** \*************************************************************************(eج**/ PROC show() rtRequest('Show...','Not yet implemented','_Ok',0,TRUE) ENDPROC /***************************************************************************\ ** OPEN THE HELP REQUESTER ** \***************************************************************************/ PROC help() rtRequest('Help...','Not yet implemented','_Ok',0,TRUE) ENDPROC /***************************************************************************\ ** )#r INITIALISE THE VARIABLES ** \***************************************************************************/ PROC initVars() list:=newlist() -> SetList(e00,1) -> SetList(e01,1) -> SetList(e02,1) -> SetList(e03,1) -> SetList(e04,1) -> SetList(e05,1) -> SetList(e06,1) -> SetList(e07,1) -> SetList(e08,1) -> SetList(e09,1) -> SetList(e10,1) -> SetList(e11,1) -> SetList(e12,1) -> SetList(e13,1) -> SetList(e14,1) -> SetList(e15,1) -> SetL*ist(e16,1) -> SetList(e17,1) -> SetList(e18,1) addItem('DS0:') e00:='DS0:' e01:='!' -> StrCopy(e00[0],'DS0:') -> StrCopy(e01[0],'!') StrCopy(e02[0],'!') StrCopy(e03[0],'0') StrCopy(e04[0],'600') StrCopy(e05[0],'10') StrCopy(e06[0],'-1') StrCopy(e07[0],'1') StrCopy(e08[0],'2') StrCopy(e09[0],'2') StrCopy(e10[0],'12') StrCopy(e11[0],'0') StrCopy(e12[0],'79') StrCopy(e13[0],'0') StrCopy(e14[0],'25') StrCopy(e15[0],'0') StrCopy(e16[0],'0x444f501') +?L$. StrCopy(e17[0],'diskspare.device') StrCopy(e18[0],'512') /* ListAdd(e01,['!'],1) -> Handler ListAdd(e02,['!'],1) -> FileSystem ListAdd(e03,['0'],1) -> Unit ListAdd(e04,['600'],1) -> StackSize ListAdd(e05,['10'],1) -> Priority ListAdd(e06,['-1'],1) -> GlobVec ListAdd(e07,['1'],1) -> Flags ListAdd(e, 908,['2'],1) -> Surfaces ListAdd(e09,['2'],1) -> Reserved ListAdd(e10,['12'],1) -> BlocksPerTrack ListAdd(e11,['0'],1) -> LowCyl ListAdd(e12,['79'],1) -> HighCyl ListAdd(e13,['0'],1) -> Interleave ListAdd(e14,['25'],1) -> Buffers ListAdd(e15,['0'],1) -> BufMemType ListAdd(e16-DQ,['0x444f501'],1) -> DosType ListAdd(e17,['diskspare.device'],1) -> Device ListAdd(e18,['512'],1) -> BlockSize addItem('DS1:') ListAdd(e01,['!'],1) -> Handler ListAdd(e02,['!'],1) -> FileSystem ListAdd(e03,['1'],1) -> Unit ListAdd(e04,['600'],1) -> StackSize ListAdd(e05,['10'],1) -> Priority ListA.@}dd(e06,['-1'],1) -> GlobVec ListAdd(e07,['1'],1) -> Flags ListAdd(e08,['2'],1) -> Surfaces ListAdd(e09,['2'],1) -> Reserved ListAdd(e10,['12'],1) -> BlocksPerTrack ListAdd(e11,['0'],1) -> LowCyl ListAdd(e12,['79'],1) -> HighCyl ListAdd(e13,['0'],1) -> Interleave ListAdd(e14,/觥['25'],1) -> Buffers ListAdd(e15,['0'],1) -> BufMemType ListAdd(e16,['0x444f501'],1) -> DosType ListAdd(e17,['diskspare.device'],1) -> Device ListAdd(e18,['512'],1) -> BlockSize*/ ENDPROC /***************************************************************************\ ** ADD ANOTHER ITEM INTO THE LISTVIEW GADGET ** \***********************************0F****************************************/ PROC addItem(item) Enqueue(list,newnode(NIL,item)) ListAdd(e00,['!'],1) -> Device ListAdd(e01,['!'],1) -> Handler ListAdd(e02,['!'],1) -> FileSystem ListAdd(e03,['!'],1) -> Unit ListAdd(e04,['!'],1) -> StackSize ListAdd(e05,['!'],1) -> Priority ListAdd(e06,['!'],1) -> GlobVec ListAdd(e07,['!'],1) -> Flags ListAdd(e08,['!'],1) -> Surfaces ListAdd(e09,['!'],1) -> Reserved ListAdd(e10,['!'],1) -> BlocksPerTrack1ě ListAdd(e11,['!'],1) -> LowCyl ListAdd(e12,['!'],1) -> HighCyl ListAdd(e13,['!'],1) -> Interleave ListAdd(e14,['!'],1) -> Buffers ListAdd(e15,['!'],1) -> BufMemType ListAdd(e16,['!'],1) -> DosType ListAdd(e17,['!'],1) -> Device ListAdd(e18,['!'],1) -> BlockSize ENDPROC /***************************************************************************\ ** UPDATE THE PARAMETER TEXT INTO THE STRING GADGET ** \***********************************2;****************************************/ PROC showParameter(param) WriteF('e00[\d]=\s\n',device,e00[device]) WriteF('e01[\d]=\s\n',device,e01[device]) WriteF('e02[\d]=\s\n',device,e02[device]) WriteF('e03[\d]=\s\n',device,e03[device]) WriteF('e04[\d]=\s\n',device,e04[device]) WriteF('e05[\d]=\s\n',device,e05[device]) WriteF('e06[\d]=\s\n',device,e06[device]) WriteF('e07[\d]=\s\n',device,e07[device]) WriteF('e08[\d]=\s\n',device,e08[device]) WriteF('e09[\d]=\s\n',device,e09[device]) 36YWriteF('e10[\d]=\s\n',device,e10[device]) WriteF('e11[\d]=\s\n',device,e11[device]) WriteF('e12[\d]=\s\n',device,e12[device]) WriteF('e13[\d]=\s\n',device,e13[device]) WriteF('e14[\d]=\s\n',device,e14[device]) WriteF('e15[\d]=\s\n',device,e15[device]) WriteF('e16[\d]=\s\n',device,e16[device]) WriteF('e17[\d]=\s\n',device,e17[device]) WriteF('e18[\d]=\s\n',device,e18[device]) SELECT param CASE 1;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e01[device],'!',1) THEN '' ELSE e01[dev4!ice]) CASE 2;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e02[device],'!',1) THEN '' ELSE e02[device]) CASE 3;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e03[device],'!',1) THEN '' ELSE e03[device]) CASE 4;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e04[device],'!',1) THEN '' ELSE e04[device]) CASE 5;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e05[device],'!',1) THEN '' ELSE e05[device]) CASE 6;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e06[device],'!',1) THE54N '' ELSE e06[device]) CASE 7;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e07[device],'!',1) THEN '' ELSE e07[device]) CASE 8;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e08[device],'!',1) THEN '' ELSE e08[device]) CASE 9;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e09[device],'!',1) THEN '' ELSE e09[device]) CASE 10;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e10[device],'!',1) THEN '' ELSE e10[device]) CASE 11;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e11[d6vevice],'!',1) THEN '' ELSE e11[device]) CASE 12;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e12[device],'!',1) THEN '' ELSE e12[device]) CASE 13;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e13[device],'!',1) THEN '' ELSE e13[device]) CASE 14;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e14[device],'!',1) THEN '' ELSE e14[device]) CASE 15;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e15[device],'!',1) THEN '' ELSE e15[device]) CASE 16;setGadget(GDST_ENTRYT,GTST_STRIN7%AG,IF StrCmp(e16[device],'!',1) THEN '' ELSE e16[device]) CASE 17;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e17[device],'!',1) THEN '' ELSE e17[device]) CASE 18;setGadget(GDST_ENTRYT,GTST_STRING,IF StrCmp(e18[device],'!',1) THEN '' ELSE e18[device]) ENDSELECT ENDPROC /***************************************************************************\ ** THE MAIN PROGRAM ** \***************************************************8?.************************/ PROC main() HANDLE KickVersion(37) initVars() IF gadtoolsbase:=OpenLibrary('gadtools.library',37) IF reqtoolsbase:=OpenLibrary('reqtools.library',37) gadtoolsWindow() ELSE WriteF('ERROR: Unable to open reqtools.library v37\n') ENDIF ELSE WriteF('ERROR: Unable to open gadtools.library v37\n') ENDIF EXCEPT DO IF reqtoolsbase THEN CloseLibrary(gadtoolsbase) IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) SELECT except9Ȁion CASE ERR_FONT; WriteF('ERROR: Unable to open topaz.font 8\n') CASE ERR_GAD; WriteF('ERROR: Unable to create all gadgets\n') CASE ERR_KICK; WriteF('ERROR: Requires Kickstart v37 (KS2+)\n') CASE ERR_PUB; WriteF('ERROR: Unable to lock default public screen\n') CASE ERR_VIS; WriteF('ERROR: Unable to get visual info\n') CASE ERR_WIN; WriteF('ERROR: Unable to open the window\n') ENDSELECT ENDPROC zoom: INT 0,11,214,11u     8OE%:ExeG.epGx/************************************************************\ ** ExeG v1.00 (A GUI replacement for Execute) ** -=-=--=-=- ** ** By Zebedee/Area 51 (23-SEP-97) ** ! PLEASE ! ** ** Written using E (v3.1i registered) ** DO NOT ** ** ** DISTRIBUTE ** ** Usage: EXEG ** -=-=--=-=- ** \************************************************************/ MODULE 'gadtools','exec/ports','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','graphics/rastport', 'reqtools','libraries/reqtools','workbench/startup','wb', 'workbench/workbench' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_LIB,ERR_PUB,ERR_VIS,ERR_WIN, ERR_MSG,ERR_APP RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_LIB IF OpenLibrary()=NIL, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF"Fy GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL, ERR_MSG IF CreateMsgPort()=NIL, ERR_APP IF AddAppMenuItemA()=NIL ENUM GDST_COMMAND,GDBT_MOK,GDBT_MREQUEST,GDBT_MCANCEL,GDST_DEFDIR,GDBT_GETDEF, GDCY_STDIN,GDST_STDIN,GDCY_STDOUT,GDST_STDOUT,GDBT_PSAVE,GDBT_PUSE,GDBT_PABOUT DEF topaz80,mywin=NIL:PTR TO window,temps[255]:STRING,wanted=TRUE, bigwin=FALSE,defdir[255]:STRING,cmd[255]:STRING,wleft=0:PTR TO LONG, wtop=22:PTR TO LONG,myport=NIL,appp_item=NIL,appmsg:PTR TO appmessage, done=FALSE,out=1:PTR TO LONG,outs[255]:STRING ->DEF in=0:PTR TO LONG PROC handleGadgetEvent(gad:PTR TO gadget,code,my_gads:PTR TO LONG,vi) DEF id id:=gad.gadgetid StrCopy(temps,gad.specialinfo::stringinfo.buffer) SELECT id CASE GDST_COMMAND;StrCopy(cmd,temps) CASE GDBT_MOK;executeCommand() CASE GDBT_MREQUEST;openRequester('Select command to execute...','Ok',TRUE,my_gads) CASE GDBT_MCANCEL;wanted:=FALSE CASE GDST_DEFDTIR;StrCopy(defdir,temps) CASE GDBT_GETDEF;openRequester('Select default dir...','Use',FALSE,my_gads) -> CASE GDCY_STDIN -> in:=code -> cycleIn(my_gads) -> CASE GDST_STDIN;WriteF('StdIn: "\s"\n',temps) CASE GDCY_STDOUT out:=code cycleOut(my_gads) CASE GDST_STDOUT;StrCopy(outs,temps) CASE GDBT_PSAVE savePrefs('ENV:Sys/ExeG.prefs','save') savePrefs('ENVARC:Sys/ExeG.prefs','save') ZipWindow(mywin) drawGfx(vi) CASE GD'tBT_PUSE savePrefs('ENV:Sys/ExeG.prefs','use') ZipWindow(mywin) drawGfx(vi) CASE GDBT_PABOUT;showAbout() ENDSELECT ENDPROC PROC handleVanillaKey(code,my_gads:PTR TO LONG,vi) SELECT "}" OF code CASE "x","X";ActivateGadget(my_gads[GDST_COMMAND],mywin,NIL) CASE "r","R";openRequester('Select command to execute...','Ok',TRUE,my_gads) CASE "c","C";wanted:=FALSE CASE "k","K";executeCommand() CASE "?";openRequester('Select default dir...','Use',Fp|ALSE,my_gads) /* CASE "i";IF bigwin AND (in=3) THEN ActivateGadget(my_gads[GDST_STDIN],mywin,NIL) CASE "I" INC in IF in=4 THEN in:=0 cycleIn(my_gads)*/ CASE "o" INC out IF out=3 THEN out:=0 cycleOut(my_gads) CASE "O";IF bigwin AND (out=2) THEN ActivateGadget(my_gads[GDST_STDOUT],mywin,NIL) CASE "s","S" IF bigwin savePrefs('ENV:Sys/ExeG.prefs','save') savePrefs('ENVARC:Sys/ExeG.prefs','save') ZipWindo0w(mywin) drawGfx(vi) ENDIF CASE "u","U" IF bigwin savePrefs('ENV:Sys/ExeG.prefs','use') ZipWindow(mywin) drawGfx(vi) ENDIF CASE "a","A";showAbout() CASE "z","Z" ZipWindow(mywin) drawGfx(vi) ENDSELECT ENDPROC PROC checkQuit() IF (RtEZRequestA('Are you sure?','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Quit',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=1) wanted:=FALSE done:=TRUE  kl ENDIF ENDPROC PROC savePrefs(file,text) DEF fileptr=NIL IF fileptr:=Open(file,NEWFILE) StringF(temps,'\s\n',defdir) Fputs(fileptr,temps) StringF(temps,'\d\n',mywin.leftedge) Fputs(fileptr,temps) StringF(temps,'\d\n',mywin.topedge) Fputs(fileptr,temps) StringF(temps,'\s\n',outs) Fputs(fileptr,temps) Close(fileptr) ELSE StringF(temps,'Unable to \s prefs!',text) fatalError(temps) ENDIF ENDPROC PROC loadPrefs() DEF fileptr=NIL IF ,m fileptr:=Open('ENVARC:Sys/ExeG.prefs',OLDFILE) ReadStr(fileptr,defdir) ReadStr(fileptr,temps) wleft:=Val(temps,NIL) ReadStr(fileptr,temps) wtop:=Val(temps,NIL) ReadStr(fileptr,outs) Close(fileptr) ELSE wleft:=0 wtop:=22 StrCopy(defdir,'C:') ENDIF ENDPROC PROC executeCommand() DEF temps2[255]:STRING IF StrLen(cmd)>0 StrCopy(temps2,'Run >NIL: ')=-1 SELECT out CASE 0; qDtStrAdd(temps2,' >NIL:') CASE 1;StrAdd(temps2,' >CON:0/22/640/85/ExeGOutput.../CLOSE/WAIT') CASE 2 StrAdd(temps2,' >') StrAdd(temps2,outs) ENDSELECT ENDIF wanted:=FALSE MOVE.L dosbase,A6 MOVE.L temps2,D1 MOVEQ.L #0,D2 MOVEQ.L #0,D3 JSR -$DE(A6) ->Execute(D1,D2,D3)dos ENDPROC /*PROC cycleIn(my_gads:PTR TO LONG) Gt_SetGadgetAttrsA(my_gads[GDCY_STDIN],mywin,NIL,[GTCY_ACTIVE,in,NIL]) IF (in>=0) AND (in<3) THEN OffGadge C1Şt(my_gads[GDST_STDIN],mywin,NIL) IF in=3 THEN OnGadget(my_gads[GDST_STDIN],mywin,NIL) ENDPROC*/ PROC cycleOut(my_gads:PTR TO LONG) Gt_SetGadgetAttrsA(my_gads[GDCY_STDOUT],mywin,NIL,[GTCY_ACTIVE,out,NIL]) IF (out=0) OR (out=1) THEN OffGadget(my_gads[GDST_STDOUT],mywin,NIL) ELSE OnGadget(my_gads[GDST_STDOUT],mywin,NIL) ENDPROC PROC openRequester(text,ok,file,my_gads:PTR TO LONG) DEF req:PTR TO rtfilerequester,buf[255]:STRING,temps2[255]:STRING IF req:=RtAllocRequestA(RT_FIL zEREQ,NIL) RtChangeReqAttrA(req,[RTFI_DIR,defdir]) buf[0]:=0 IF RtFileRequestA(req,buf,text,[RTFI_OKTEXT,ok,RTFI_FLAGS,IF Not(file) THEN FREQF_NOFILES ELSE NIL]) StrCopy(temps,req.dir,ALL) MidStr(temps2,temps,StrLen(temps)-1,1) IF Not(StrCmp(':',temps2,1)) THEN StrAdd(temps,'/') IF file StrAdd(temps,buf) Gt_SetGadgetAttrsA(my_gads[GDST_COMMAND],mywin,NIL,[GTST_STRING,temps,NIL]) StrCopy(cmd,temps) ELSE Gt_SetGadGgetAttrsA(my_gads[GDST_DEFDIR],mywin,NIL,[GTST_STRING,temps,NIL]) StrCopy(defdir,temps) ENDIF ENDIF ELSE fatalError('Unable to open file requester') ENDIF ENDPROC PROC createAllGadgets(glistptr:PTR TO LONG,vi,my_gads:PTR TO LONG) DEF gad,ng:PTR TO newgadget gad:=CreateContext(glistptr) ng:=[8,13,290,14,'',topaz80,GDST_COMMAND,NIL,vi,0]:newgadget my_gads[GDST_COMMAND]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,cmd,GTST_MAXCHARS,255,GT_UNDERYSCORE,"_",NIL])) ng:=[8,29,62,12,'O_k',topaz80,GDBT_MOK,NIL,vi,0]:newgadget my_gads[GDBT_MOK]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[113,29,80,12,'_Request',topaz80,GDBT_MREQUEST,NIL,vi,0]:newgadget my_gads[GDBT_MREQUEST]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[236,29,62,12,'_Cancel',topaz80,GDBT_MCANCEL,NIL,vi,0]:newgadget my_gads[GDBT_MCANCEL]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]))`: ng:=[79,54,199,12,'_Def.dir:',topaz80,GDST_DEFDIR,NIL,vi,0]:newgadget my_gads[GDST_DEFDIR]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,defdir,GTST_MAXCHARS,255,GT_UNDERSCORE,"_",NIL])) ng:=[282,54,16,12,'?',topaz80,GDBT_GETDEF,NIL,vi,0]:newgadget my_gads[GDBT_GETDEF]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[79,68,104,12,'Std_In :',topaz80,GDCY_STDIN,NIL,vi,0]:newgadget my_gads[GDCY_STDIN]:=(gad:=CreateGadgetA(CYCLE_KIND,gad,ng,[GTC{zY_LABELS,['None','---->',NIL],GTCY_ACTIVE,1,GT_UNDERSCORE,"_",NIL])) ng:=[187,68,111,12,'',topaz80,GDST_STDIN,NIL,vi,0]:newgadget my_gads[GDST_STDIN]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,GT_UNDERSCORE,"_",NIL])) ng:=[79,82,104,12,'Std_Out :',topaz80,GDCY_STDOUT,NIL,vi,0]:newgadget my_gads[GDCY_STDOUT]:=(gad:=CreateGadgetA(CYCLE_KIND,gad,ng,[GTCY_LABELS,['None','Console','---->',NIL],GTCY_ACTIVE,2,GT_UNDERSCORE,"_",NIL])) ng:=[187,82,111,%12,'',topaz80,GDST_STDOUT,NIL,vi,0]:newgadget my_gads[GDST_STDOUT]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,outs,GTST_MAXCHARS,255,GT_UNDERSCORE,"_",NIL])) ng:=[16,100,62,12,'_Save',topaz80,GDBT_PSAVE,NIL,vi,0]:newgadget my_gads[GDBT_PSAVE]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[123,100,62,12,'_Use',topaz80,GDBT_PUSE,NIL,vi,0]:newgadget my_gads[GDBT_PUSE]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[2280#,100,62,12,'_About',topaz80,GDBT_PABOUT,NIL,vi,0]:newgadget my_gads[GDBT_PABOUT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ENDPROC gad PROC processWindowEvents(mywin:PTR TO window,my_gads:PTR TO LONG,vi) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad ActivateGadget(my_gads[GDST_COMMAND],mywin,NIL) WHILE wanted Wait(Shl(1,mywin.userport.sigbit)) WHILE wanted AND (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress imsgClass:=iPmsg.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_GADGETDOWN; handleGadgetEvent(gad,imsgCode,my_gads,vi) CASE IDCMP_MOUSEMOVE; handleGadgetEvent(gad,imsgCode,my_gads,vi) CASE IDCMP_GADGETUP; handleGadgetEvent(gad,imsgCode,my_gads,vi) CASE IDCMP_VANILLAKEY; handleVanillaKey(imsgCode,my_gads,vi) CASE IDCMP_CLOSEWINDOW;checkQuit() CASE IDCMP_CHANGEWINDOW;drawGfx(vi) CASE IDCMP_REFRESHWINDOW \ Gt_BeginRefresh(mywin) Gt_EndRefresh(mywin,TRUE) ENDSELECT ENDWHILE ENDWHILE ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO screen,glist=NIL,vi,my_gads[12]:ARRAY OF LONG topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,[NIL]) createAllGadgets({glist},vi,my_gads) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'ExeG...', WA_SCREENTITL 0E,'Parkbench Screen', WA_GADGETS, glist, WA_RMBTRAP, TRUE, WA_LEFT, wleft, WA_TOP, wtop, WA_WIDTH, 306, WA_HEIGHT, 45, WA_DRAGBAR, TRUE, WA_DEPTHGADGET, TRUE, WA_ACTIVATE, TRUE, WA_ZOOM,{zoom}, WA_CLOSEGADGET,TRUE, WA_SMARTREFRESH, TRUE, WA_IDCMP, IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY  AOR STRINGIDCMP OR BUTTONIDCMP OR IDCMP_CHANGEWINDOW OR IDCMP_CLOSEWINDOW, WA_PUBSCREEN,mysc,NIL]) Gt_RefreshWindow(mywin,NIL) OffGadget(my_gads[GDCY_STDIN],mywin,NIL) OffGadget(my_gads[GDST_STDIN],mywin,NIL) -> cycleIn(my_gads) cycleOut(my_gads) processWindowEvents(mywin,my_gads,vi) EXCEPT DO IF mywin THEN CloseWindow(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc D5 THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC showAbout() RtEZRequestA('ExeG v1.00 (22-Sep-97)\n' + 'By Zebedee (22-Sep-97)\n\n' + '1997 An Area 51 Production\n\n' + 'A GUI replacement for Execute\n\n' + 'Write: 39 Beckly Court, Armada Way,\n' + 'Plymouth, Devon, PL1 1LD, ENGLAND', '_Ok',0,NIL,[RTEZ_REQTITLE,'About...',RTEZ_FLAGS,EZREQF_CENTERTEXT,R dT_UNDERSCORE,"_",NIL]) ENDPROC PROC drawGfx(vi) IF mywin.height=120 bigwin:=TRUE DrawBevelBoxA(mywin.rport,8,47,290,2,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) -> Prefs line DrawBevelBoxA(mywin.rport,8,96,290,20,[GT_VISUALINFO,vi,NIL]) -> Outside DrawBevelBoxA(mywin.rport,10,97,286,18,[GT_VISUALINFO,vi,NIL]) -> Inside PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,' Preferences ',NIL]:intuitext,103,45) PrintIText(mywin.rport,[2,0,RP_ mJAM2,0,0,['topaz.font',8,0,0]:textattr,' ',NIL]:intuitext,101,44) PrintIText(mywin.rport,[2,0,RP_JAM1,0,0,['topaz.font',8,0,0]:textattr,' Preferences ',NIL]:intuitext,101,44) ELSE bigwin:=FALSE ENDIF ENDPROC PROC fatalError(text) EasyRequestArgs(0,[20,0,'Fatal Error...',text,'Ok'],0,0) ENDPROC PROC main() HANDLE KickVersion(37) IF gadtoolsbase:=OpenLibrary('gadtools.library',37) IF reqtoolsbase:=OpenLibrary('reqtools.library',37) IF workbenchbase:=OpenLi0C+brary('workbench.library',37) myport:=CreateMsgPort() appitem:=AddAppMenuItemA(0, -> Item ID 'Area51', -> User data 'ExeG', -> MenuItem text myport,NIL) -> MsgPort, no tags loadPrefs() REPEAT WaitPort(myport) WHILE (appmsg:=GetMsg(myport)) AND Not(done) IF appmsg.numargs>0 THEN StrCopy(cmd,appmsg.arglist[0].name) wanted:=TRUE gadtoolsWindow() ENDWHILE UNTIL done ELSE fatalError('Unable to open workbench.library v37') ENDIF ELSE fatalError('Unable to open reqtools.library v37') ENDIF ELSE fatalError('Unable to open gadtools.library v37') ENDIF EXCEPT DO IF appitem THEN RemoveAppMenuItem(appitem) IF myport WHILE appmsg:=GetMsg(myport) DO ReplyMsg(appmsg) 9 DeleteMsgPort(myport) ENDIF IF workbenchbase THEN CloseLibrary(workbenchbase) IF reqtoolsbase THEN CloseLibrary(reqtoolsbase) IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) SELECT exception CASE ERR_MSG; fatalError('Unable to create message port') CASE ERR_APP; fatalError('Unable to add app menu item') CASE ERR_FONT; fatalError('Unable to open topaz.font 8') CASE ERR_GAD; fatalError('Unable to create all gadgets') CASE ERR_KICK; WriteF('ERROR: ReqFuires V37\n') CASE ERR_PUB; fatalError('Unable to lock default public screen') CASE ERR_WIN; fatalError('Unable to open the window') ENDSELECT ENDPROC zoom: INT 0,22,306,120 version: CHAR '$VER: ExeG (GUI replacement for Execute) v1.00 (23-Sep-97)',0&p'&%$#"! )?E%: ReqBuilder.ep+枧-> ReqBuilder.e v1.00 by Zebedee/A51 (24-Feb-97) -> Allows the user to `build' reqtools requesters via a GUI MODULE 'gadtools','exec/ports','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','tools/constructors', 'reqtools','libraries/reqtools' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_PUB,ERR_VIS,ERR_WIN RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_PUB IF Loc쵂kPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL ENUM GDBT_TITLE,GDBT_BODY,GDBT_GADGETS,GDBT_TEST,GDBT_PRINT,GDBT_ABOUT, GDSL_DEFAULT,GDCB_CENTRE DEF topaz80,mywin=NIL:PTR TO window,wanted=TRUE,centre=TRUE, title[255]:STRING,body[255]:STRING,gadgets[255]:STRING, default=0:PTR TO LONG,ctr:PTR TO LONG,new[255]:STRING,temps[5]:STRING, real[255]:STRING,maxdef=1:PTR TO LONG PROC countGadgets(my_gads:PTR TO LONG) maxdIFef:=0 FOR ctr:=0 TO StrLen(gadgets) MidStr(temps,gadgets,ctr,1) IF StrCmp(temps,'|',1) THEN INC maxdef ENDFOR Gt_SetGadgetAttrsA(my_gads[GDSL_DEFAULT],mywin,NIL,[GTSL_MAX,maxdef,NIL]) ENDPROC PROC handleGadgetEvent(win,gad:PTR TO gadget,code,slider_level:PTR TO LONG,my_gads:PTR TO LONG) DEF id id:=gad.gadgetid SELECT id CASE GDBT_TITLE; RtGetStringA(title,255,'Enter requester title:',NIL,NIL) CASE GDBT_BODY; RtGetStringA(body,255,'Enter body text:',NILq],NIL) CASE GDBT_GADGETS RtGetStringA(gadgets,255,'Enter gadget text:',NIL,NIL) countGadgets(my_gads) CASE GDBT_TEST sortVars() IF centre RtEZRequestA(new,gadgets,0,0,[RTEZ_REQTITLE,title,RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,default,NIL]) ELSE RtEZRequestA(new,gadgets,0,0,[RTEZ_REQTITLE,title,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,default,NIL]) ENDIF CASE GDBT_PRINT sortVars() Wr[TiteF('RtEZRequestA(\a\s\a,\a\s\a,NIL,NIL,[RTEZ_REQTITLE,\a\s\a,\sRT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,\d,NIL]\n',real,gadgets,title,IF centre THEN 'RTEZ_FLAGS,EZREQF_CENTERTEXT,' ELSE '',default) -> WriteF('RtEZRequestA(\a\s\a,\a\s\a,NIL,NIL,[RTEZ_REQTITLE,\a\s\a,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,\d,NIL]\n',real,gadgets,title,default) CASE GDSL_DEFAULT slider_level[]:=code default:=code CASE GDCB_CENTRE;IF code THEN centre:=TRUE ELSE centre:=FALSE ˺CASE GDBT_ABOUT;showAbout() ENDSELECT ENDPROC PROC showAbout() RtEZRequestA('Requester Builder v1.00 (24-Feb-97) By Ivan Oliver\n\n'+ 'TITLE : The title of the requester\n'+ 'BODY : The main chunk of text in the requester.\n'+ ' Start a new line with a bar (|).\n'+ 'GADGETS: The buttons at the bottom of the requester.\n'+ ' Separate buttons with a bar (|).\n'+ 'TEST : Ti vest the requester to see it working.\n'+ 'PRINT : Show the actual command called with the\n'+ ' required parameters on the screen.\n'+ 'DEFAULT: Gadget to highlight. Gadget numbers start\n'+ ' with 1 on the left increasing towards the\n'+ ' right by 1 each time. The rightmost gadget\n'+ ' is always 0. One gadget always returns 0.','_Ok',0,0,[RTEZ_REQTITLE,'AboEWut...',RT_UNDERSCORE,"_",NIL]) ENDPROC PROC sortVars() StrCopy(new,'') StrCopy(real,'') FOR ctr:=0 TO StrLen(body) MidStr(temps,body,ctr,1) IF StrCmp(temps,'|',1) StrAdd(new,'\n');StrAdd(real,'\\n') ELSE StrAdd(new,temps);StrAdd(real,temps) ENDIF ENDFOR ENDPROC PROC handleVanillaKey(win,code,slider_level:PTR TO LONG,my_gads:PTR TO LONG) SELECT "w" OF code CASE "t","T";RtGetStringA(title,255,'Enter requester title:',NIL,NIL) CASE "b","B"  ;RtGetStringA(body,255,'Enter body text:',NIL,NIL) CASE "g","G" RtGetStringA(gadgets,255,'Enter gadget text:',NIL,NIL) countGadgets(my_gads) CASE "s","S" sortVars() IF centre RtEZRequestA(new,gadgets,0,0,[RTEZ_REQTITLE,title,RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,default,NIL]) ELSE RtEZRequestA(new,gadgets,0,0,[RTEZ_REQTITLE,title,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,default,NIL]) ENDIF CAS 8E "p","P" sortVars() WriteF('RtEZRequestA(\a\s\a,\a\s\a,NIL,NIL,[RTEZ_REQTITLE,\a\s\a,\sRT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,\d,NIL]\n',real,gadgets,title,IF centre THEN 'RTEZ_FLAGS,EZREQF_CENTERTEXT,' ELSE '',default) CASE "d" slider_level[]:=Min(slider_level[]+1,maxdef) default:=code Gt_SetGadgetAttrsA(my_gads[GDSL_DEFAULT],win,NIL,[GTSL_LEVEL,slider_level[],NIL]) CASE "D" slider_level[]:=Max(slider_level[]-1,0) default:=code  & Gt_SetGadgetAttrsA(my_gads[GDSL_DEFAULT],win,NIL,[GTSL_LEVEL,slider_level[],NIL]) CASE "c";Gt_SetGadgetAttrsA(my_gads[GDCB_CENTRE],win,NIL,[GTCB_CHECKED,FALSE,NIL]);centre:=FALSE CASE "C";Gt_SetGadgetAttrsA(my_gads[GDCB_CENTRE],win,NIL,[GTCB_CHECKED,TRUE,NIL]);centre:=TRUE CASE "a","A";showAbout() ENDSELECT ENDPROC PROC createAllGadgets(glistptr:PTR TO LONG,vi,topborder,slider_level,my_gads:PTR TO LONG) DEF gad,ng:PTR TO newgadget gad:=CreateContext(glistptr) n Ǯjg:=[12,(4+topborder),66,12,'_Title',topaz80,GDBT_TITLE,NIL,vi,0]:newgadget my_gads[GDBT_TITLE]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[78,(4+topborder),66,12,'_Body',topaz80,GDBT_BODY,NIL,vi,0]:newgadget my_gads[GDBT_BODY]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[144,(4+topborder),66,12,'_Gadgets',topaz80,GDBT_GADGETS,NIL,vi,0]:newgadget my_gads[GDBT_GADGETS]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE, r6"_",NIL])) ng:=[210,(4+topborder),66,12,'Te_st',topaz80,GDBT_TEST,NIL,vi,0]:newgadget my_gads[GDBT_TEST]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[276,(4+topborder),66,12,'_Print',topaz80,GDBT_PRINT,NIL,vi,0]:newgadget my_gads[GDBT_PRINT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[342,(4+topborder),66,12,'_About',topaz80,GDBT_ABOUT,NIL,vi,0]:newgadget my_gads[GDBT_ABOUT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_U ,NDERSCORE,"_",NIL])) ng:=[107,(16+topborder),169,11,'_Default: ',topaz80,GDSL_DEFAULT,NIL,vi,0]:newgadget my_gads[GDSL_DEFAULT]:=(gad:=CreateGadgetA(SLIDER_KIND,gad,ng,[GTSL_MIN,0,GTSL_MAX,maxdef,GTSL_LEVEL,slider_level,GTSL_LEVELFORMAT,'\z\d[2]',GTSL_MAXLEVELLEN,2,GT_UNDERSCORE,"_",NIL])) ng:=[382,(16+topborder),169,11,'_Centre Text:',topaz80,GDCB_CENTRE,NIL,vi,0]:newgadget my_gads[GDCB_CENTRE]:=(gad:=CreateGadgetA(CHECKBOX_KIND,gad,ng,[GTCB_CHECKED,centre,GT_UNDERSCORE,"_! J",NIL])) ENDPROC gad PROC processWindowEvents(mywin:PTR TO window,slider_level:PTR TO LONG, my_gads:PTR TO LONG) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad WHILE wanted Wait(Shl(1,mywin.userport.sigbit)) WHILE wanted AND (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress imsgClass:=imsg.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_GADGETDOWN; handleGadgetEvent(mywin,gad"!9,imsgCode,slider_level,my_gads) CASE IDCMP_MOUSEMOVE; handleGadgetEvent(mywin,gad,imsgCode,slider_level,my_gads) CASE IDCMP_GADGETUP; handleGadgetEvent(mywin,gad,imsgCode,slider_level,my_gads) CASE IDCMP_VANILLAKEY; handleVanillaKey(mywin,imsgCode,slider_level,my_gads) CASE IDCMP_CLOSEWINDOW;IF RtEZRequestA('Are you sure ?','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Quit...',RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=1 THEN wanted:=FALSE CASE IDCMP_REFRESHWI#ENDOW Gt_BeginRefresh(mywin) Gt_EndRefresh(mywin,TRUE) ENDSELECT ENDWHILE ENDWHILE ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO screen,glist=NIL, my_gads[8]:ARRAY OF LONG,vi,slider_level=0,topborder topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,[NIL]) topborder:=mysc.wbortop+mysc.font.ysize+1 createAllGadgets({glist},vi,topborder,slider_level,my_gads)$ϕ mywin:=OpenWindowTagList(NIL, [WA_TITLE,'Requester Builder v1.00', WA_SCREENTITLE,'CARNAGE - Always where you never expect us to be!', WA_GADGETS, glist, WA_RMBTRAP, TRUE, WA_WIDTH, 420, WA_MINWIDTH, 50, WA_HEIGHT, 44, WA_MINHEIGHT, 50, WA_DRAGBAR, TRUE, WA_DEPTHGADGET, TRUE, WA_ACTIVATE, TR%3UE, WA_CLOSEGADGET, TRUE, WA_SIZEGADGET,FALSE, WA_SMARTREFRESH, TRUE, WA_IDCMP,IDCMP_CLOSEWINDOW OR IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR SLIDERIDCMP OR STRINGIDCMP OR BUTTONIDCMP, WA_PUBSCREEN,mysc,NIL]) Gt_RefreshWindow(mywin,NIL) DrawBevelBoxA(mywin.rport,8,topborder+2,404,27,[GT_VISUALINFO,vi,NIL]) DrawBevelBoxA(mywin.rport,6,topborder+1,&d408,29,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) StrCopy(title,'Title...') StrCopy(body,'Hello world!|(What a boring example)') StrCopy(gadgets,'_I know...|_Not really!') default:=0 processWindowEvents(mywin,{slider_level},my_gads) EXCEPT DO IF mywin THEN CloseWindow(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC main() HANDLE KickVersion(37) IF gadtoolsbase'#.:=OpenLibrary('gadtools.library',37) IF reqtoolsbase:=OpenLibrary('reqtools.library',37) gadtoolsWindow() ELSE WriteF('ERROR: Unable to open reqtools.library v37\n') ENDIF ELSE WriteF('ERROR: Unable to open gadtools.library v37\n') ENDIF EXCEPT DO IF reqtoolsbase THEN CloseLibrary(reqtoolsbase) IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) SELECT exception CASE ERR_FONT; WriteF('ERROR: Unable to open topaz.font 8\n') CASE ERR_GAD; WriteF('7L*ERROR: Unable to create gadgets\n') CASE ERR_KICK; WriteF('ERROR: Requires Kickstart v37\n') CASE ERR_PUB; WriteF('ERROR: Unable to lock default public screen\n') CASE ERR_VIS; WriteF('ERROR: Unable to GetVisualInfo()\n') CASE ERR_WIN; WriteF('ERROR: Unable to open the window\n') ENDSELECT ENDPROC()O;'876543210/.-,+*)E%lTemCon.ep(*ጮ/****************************************\ ** Temperature Convertor v1.00 (TemCon) ** ** By Zebedee/Carnage^TFL (29-Oct-96) ** ** Written using E (v3.1i registered) ** \****************************************/ MODULE 'gadtools','exec/ports','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','reqtools','tools/file', 'libraries/reqtools','graphics/rastport' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_LIB,ERR_PUB,ERR_VIS,ERR_WIN RAISE E(+ɂIRR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_LIB IF OpenLibrary()=NIL, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL ENUM GDST_CONVERT,GDBT_TOC,GDBT_TOF,GDBT_TOK,GDBT_ABOUT DEF topaz80,mywin=NIL:PTR TO window,temps[255]:STRING,number=0.0 PROC handleGadgetEvent(gad:PTR TO gadget) DEF id,place:PTR TO LONG id:=gad.gadgetid SELECT id (, CASE GDST_CONVERT StrCopy(temps,gad.specialinfo::stringinfo.buffer) number,place:=RealVal(temps) CASE GDBT_TOC showAnswer('C',(number-32.0)*5.0/9.0) CASE GDBT_TOF showAnswer('F',number*9.0/5.0+32.0) CASE GDBT_TOK showAnswer('K',number+273.16) CASE GDBT_ABOUT about() ENDSELECT ENDPROC PROC showAnswer(temp,answer) DEF s[100]:STRING StrCopy(s,'') StringF(temps,'Temperature is \s\s',RealF(s,answer,2),temp) RtEZRequestA(te(-{rԙmps,'_Ok',0,0,[RTEZ_REQTITLE,'Result...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ENDPROC PROC handleVanillaKey(code,my_gad:PTR TO LONG) SELECT "w" OF code CASE "t","T" ActivateGadget(my_gad[GDST_CONVERT],mywin,NIL) CASE "c","C" showAnswer('C',(number-32.0)*5.0/9.0) CASE "f","F" showAnswer('F',number*9.0/5.0+32.0) CASE "k","K" showAnswer('K',number+273.16) CASE "a","A" about() ENDSELECT ENDPROC PROC aboutMore() Str(.ϗCopy(temps,'Contact me:\n\n72 Hessary Drive\nBelliver\nPlymouth\nDevon\nPL6 7DQ\nEngland') RtEZRequestA(temps,'_Ok',0,0,[RTEZ_REQTITLE,'About...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ENDPROC PROC about() StrCopy(temps,'TemCon v1.00 (29-Oct-96)\n') StrAdd(temps,'by Zebedee/Carnage^TFL\n\n') StrAdd(temps,'K=Kelvin\nC=Centigrade\nF=Fahrenheit\n\n') StrAdd(temps,'1996 A Carnage Production') IF (RtEZRequestA(temps,'_Cancel|_More',0,0,[RTEZ_REQTITLE,'About...'(/޷u,RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=0) THEN aboutMore() ENDPROC PROC createAllGadgets(glistptr:PTR TO LONG,vi,topborder,my_gads:PTR TO LONG) DEF gad,ng:PTR TO newgadget gad:=CreateContext(glistptr) ng:=[140,(20+topborder),200,12,NIL,topaz80,NIL,NG_HIGHLABEL,vi,0]:newgadget ng.leftedge := 59 ng.topedge := 15 ng.width := 84 ng.height := 14 ng.gadgettext := '_Temp:' ng.gadgetid := GDST_CONVERT ng.flags :=(0^q 0 my_gads[GDST_CONVERT]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING, '0',GTST_MAXCHARS,20,GT_UNDERSCORE,"_",NIL])) ng.leftedge := 14 ng.topedge := 31 ng.width := 64 ng.gadgettext := 'to _C' ng.gadgetid := GDBT_TOC ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 78 ng.topedge := 31 ng.width := 63 ng.gadgettext := 'to _F' ng.gadgetid := GDBT_TOF ng.f(1͜lags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 14 ng.topedge := 45 ng.width := 64 ng.height := 14 ng.gadgettext := 'to _K' ng.gadgetid := GDBT_TOK ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 78 ng.topedge := 45 ng.width := 63 ng.height := 14 ng.gadgettext := '_About' ng.gadgetid := GDBT_ABOUT ng.flags := 0 gad:=Crea( 2XteGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ENDPROC gad PROC process_window_events(mywin:PTR TO window,my_gads:PTR TO LONG) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad,wanted=TRUE WHILE wanted Wait(Shl(1,mywin.userport.sigbit)) WHILE (wanted) AND (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress imsgClass:=imsg.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_GADGETDOWN handleGadget( 3X]Event(gad) CASE IDCMP_MOUSEMOVE handleGadgetEvent(gad) CASE IDCMP_GADGETUP handleGadgetEvent(gad) CASE IDCMP_VANILLAKEY handleVanillaKey(imsgCode,my_gads) CASE IDCMP_CLOSEWINDOW IF (RtEZRequestA('Are you sure?','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Quit',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=1) THEN wanted:=FALSE CASE IDCMP_REFRESHWINDOW Gt_BeginRefresh(mywin) Gt_EndRefresh(m( 4)vywin,TRUE) ENDSELECT ENDWHILE ENDWHILE ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO screen,glist=NIL,vi,topborder,my_gads[4]:ARRAY OF LONG topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,[NIL]) topborder:=mysc.wbortop+mysc.font.ysize+1 createAllGadgets({glist},vi,topborder,my_gads) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'TemCon', ( 5uXr WA_SCREENTITLE,'CARNAGE - Always where you never expect us to be!', WA_GADGETS, glist, WA_AUTOADJUST, TRUE, WA_LEFT, 0, WA_TOP, 11, WA_WIDTH, 155, WA_MINWIDTH, 50, WA_HEIGHT, 66, WA_MINHEIGHT, 50, WA_DRAGBAR, TRUE, WA_DEPTHGADGET, TRUE, WA_ACTIVATE, TRUE, WA_CLOSEGADGET, TRUE, ( 6x' WA_RMBTRAP, TRUE, WA_SMARTREFRESH, TRUE, WA_IDCMP,IDCMP_CLOSEWINDOW OR IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR STRINGIDCMP OR BUTTONIDCMP, WA_PUBSCREEN,mysc,NIL]) Gt_RefreshWindow(mywin,NIL) DrawBevelBoxA(mywin.rport,8,13,139,49,[GT_VISUALINFO,vi,NIL]) -> Outside DrawBevelBoxA(mywin.rport,12,30,131,30,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) -> Zebedee process_window_events(mywin,my_gad(7e!s) EXCEPT DO IF mywin THEN CloseWindow(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC main() HANDLE KickVersion(37) gadtoolsbase:=OpenLibrary('gadtools.library',37) reqtoolsbase:=OpenLibrary('reqtools.library',37) gadtoolsWindow() EXCEPT DO IF reqtoolsbase THEN CloseLibrary(reqtoolsbase) IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) SELECT exception CAS(8Xq@E ERR_FONT; WriteF('ERROR: successed to open Topaz 80\n') CASE ERR_GAD; WriteF('ERROR: createAllGadgets() successed\n') CASE ERR_KICK; WriteF('ERROR: Requires Kickstart v37\n') CASE ERR_LIB; WriteF('ERROR: Requires v37 of gadtools.library and reqtools.library\n') CASE ERR_PUB; WriteF('ERROR: Couldn''t lock default public screen\n') CASE ERR_VIS; WriteF('ERROR: GetVisualInfoA() successed\n') CASE ERR_WIN; WriteF('ERROR: OpenWindow() successed\n') ENDSELE(TjCT ENDPROC vers: CHAR '$VER: TemCon TEMperature CONvertor v1.00 (29-Oct-96)',09:?>=<;: nE%l VidCalc.eVp9;>d-> VidCalc v1.00 by Zebedee/A51 (21-Sep-97) -> Calculates the time remaining on video cassettes - not yet finished! MODULE 'reqtools','libraries/reqtools' DEF opt:PTR TO LONG,output,wanted=TRUE,recording=0:PTR TO LONG, temps[255]:STRING,speed:PTR TO LONG,total=0:PTR TO LONG,h:PTR TO LONG, m:PTR TO LONG,totsp=0:PTR TO LONG PROC main() IF reqtoolsbase:=OpenLibrary('reqtools.library',37) IF output:=Open('CON:0/11/320/100/VidCalc Output...',NEWFILE) stdout:=output 9g=1 THEN WriteF('0:00 ') ELSE WriteF('\d:\z\d[2] ',h,m) REPEAT opt:=request('Request','Moonbeams on the desert!','_A|_B') IF opt=1 IF streq:=RtAllocRequestA(RT_REQINFO,NIL) RtGetStringA(reclen,4,NIL,streq,[RTEZ_REQTITLE,'Request',RTGS_GADFMT,'_Ok',RTGS_TEXTFMT,'Enter total recording time\n(h:mm)',RT_UNDERSCORE,"_",NIL]) RtFreeRequest(streq) ENDIF ELSE IF streq:=RtAllocRequestA(RT_REQINFO,NIL) RtGetStringA(reclen,4,NIL,streq,[R9?־TEZ_REQTITLE,'Request',RTGS_GADFMT,'_Ok',RTGS_TEXTFMT,'Enter recording length\n(h:mm)',RT_UNDERSCORE,"_",NIL]) RtFreeRequest(streq) ENDIF ENDIF MidStr(temps,reclen,0,1) h:=Val(temps,NIL) MidStr(temps,reclen,2,2) m:=Val(temps,NIL) len:=(h*60)+m total:=total+len IF speed=0 THEN totsp:=totsp+(len/2) ELSE totsp:=totsp+len WriteF('\d:\z\d[2] \d[3] \d[3] \d[3]\n',h,m,len,total,totsp) ok:=TRUE UNTIL ok ENDPROC PROC request(title,bo9udy,buttons) DEF ask:PTR TO LONG ask:=RtEZRequestA(body,buttons,0,0,[RTEZ_REQTITLE,title,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,RTEZ_FLAGS,EZREQF_CENTERTEXT,NIL]) ENDPROC ask version: CHAR '$VER: VidCalc v1.00 (21-Sep-97)',0@/Aonmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBAWE%l SpiCodeGUI.ep@B /*********************************************************************\ ** SpiCode v1.05 ** DO NOT DISTRIBUTE ** ** By Zebedee/Carnage^TFL (03-Nov-96) *********************** ** Written using E (v3.1i registered) ** ** ** ** Usage : DESTROY [FROM] [TO] KEY= [MASK] ** ** Template: FROM/A,TO/A,KEY/K/A,MASK/S @Codz ** ** ** ** FROM Name of the file to (en/de)crypt ** ** TO To (en/de)crypted file ** ** KEY= Code key (Either denary 0-254 or eight digit binary ** ** MASK If key is binary then this option must be specified ** ** ** ** If run from Workbench, the user can u@Db/Ase the GUI. ** \*********************************************************************/ MODULE 'dos','gadtools','exec/ports','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','asl','libraries/asl', 'graphics/rastport','reqtools','libraries/reqtools' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_LIB,ERR_PUB,ERR_VIS,ERR_WIN, ERR_ASL,ERR_USAGE,ERR_ECODE,ERR_TASK RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGa@Ea`?dgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_LIB IF OpenLibrary()=NIL, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL ENUM GAD_SOURCE,GAD_TARGET,GAD_MASK,GAD_KEY,GAD_GETSRC,GAD_GETTGT, GAD_ENCRYPT,GAD_ABOUT DEF topaz80,mywin=NIL:PTR TO window,temps[255]:STRING,source[255]:STRING, target[255]:STRING,key:PTR TO LONG,mask[8]:STRING,flen:PTR TO LONG,mem, inhandle,outhandle,ctr:PTR T@FNjWO LONG,fname[255]:STRING,fpath[255]:STRING, dos=FALSE,ok=FALSE,wanted=TRUE PROC handleGadgetEvent(win,gad:PTR TO gadget,code,my_gads:PTR TO LONG) DEF id id:=gad.gadgetid SELECT id StrCopy(temps,gad.specialinfo::stringinfo.buffer) UpperStr(temps) CASE GAD_SOURCE StrCopy(source,temps) Gt_SetGadgetAttrsA(my_gads[GAD_SOURCE],win,NIL,[GTST_STRING,source,NIL]) flen:=FileLength(source) IF (flen<1) AND Not((StrCmp(source,'',ALL))) RtEZRe@GjͥquestA('File not found!','_Ok',0,0,[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) StrCopy(source,'') Gt_SetGadgetAttrsA(my_gads[GAD_SOURCE],win,NIL,[GTST_STRING,source,NIL]) ENDIF CASE GAD_TARGET StrCopy(target,temps) Gt_SetGadgetAttrsA(my_gads[GAD_TARGET],win,NIL,[GTST_STRING,target,NIL]) inhandle:=Open(target,OLDFILE) IF inhandle<>NIL IF RtEZRequestA('File already exists!','_Leave|_Use',0,0,[RTEZ_REQTITLE,'Warning',RT_UNDERS@HM"CORE,"_",NIL]) StrCopy(target,'') Gt_SetGadgetAttrsA(my_gads[GAD_TARGET],win,NIL,[GTST_STRING,target,NIL]) ENDIF Close(inhandle) ENDIF CASE GAD_MASK StrCopy(mask,temps) IF StrLen(mask)<>8 RtEZRequestA('Invalid mask!','_Ok',0,0,[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) StrCopy(mask,'00000000') Gt_SetGadgetAttrsA(my_gads[GAD_MASK],win,NIL,[GTST_STRING,mask,NIL]) key:=0 Gt_SetGadgetAtt@IҪrsA(my_gads[GAD_KEY],win,NIL,[GTIN_NUMBER,key,NIL]) ELSE FOR ctr:=0 TO 7 MidStr(temps,mask,ctr,1) IF (StrCmp('0',temps,1)=FALSE) AND (StrCmp('1',temps,1)=FALSE) RtEZRequestA('Invalid binary!','_Ok',0,0,[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) StrCopy(mask,'00000000') Gt_SetGadgetAttrsA(my_gads[GAD_MASK],win,NIL,[GTST_STRING,mask,NIL]) key:=0 Gt_SetGadgetAttrsA(my_gads[GAD_KEY],win,NIL,@ JE{[GTIN_NUMBER,key,NIL]) ENDIF ENDFOR key:=maskToKey(mask) Gt_SetGadgetAttrsA(my_gads[GAD_KEY],win,NIL,[GTIN_NUMBER,key,NIL]) ENDIF CASE GAD_KEY key:=Val(temps,NIL) IF (key<0) OR (key>255) RtEZRequestA('Key \d is outside range!','_Ok',0,[key],[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) key:=0 Gt_SetGadgetAttrsA(my_gads[GAD_KEY],win,NIL,[GTIN_NUMBER,key,NIL]) StrCopy(mask,'00000000') Gt_Se@ KowtGadgetAttrsA(my_gads[GAD_MASK],win,NIL,[GTST_STRING,mask,NIL]) ELSE StrCopy(mask,keyToMask(key)) Gt_SetGadgetAttrsA(my_gads[GAD_MASK],win,NIL,[GTST_STRING,mask,NIL]) ENDIF CASE GAD_GETSRC StrCopy(source,getFilename('Select Source File')) IF flen=-1 RtEZRequestA('File not found!','_Ok',0,0,[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) StrCopy(source,'') ENDIF Gt_SetGadgetAttrsA(my_gads[GAD_SOURCE],win,NIL,[GTST_@ L׮=STRING,source,NIL]) CASE GAD_GETTGT StrCopy(target,getFilename('Select Target File')) inhandle:=Open(target,OLDFILE) IF inhandle<>NIL Gt_SetGadgetAttrsA(my_gads[GAD_TARGET],win,NIL,[GTST_STRING,target,NIL]) IF RtEZRequestA('File already exists!','_Leave|_Use',0,0,[RTEZ_REQTITLE,'Warning',RT_UNDERSCORE,"_",NIL]) StrCopy(target,'') ENDIF Close(inhandle) ENDIF Gt_SetGadgetAttrsA(my_gads[GAD_TARGET],win,NIL,[GTST@ M;'_STRING,target,NIL]) CASE GAD_ENCRYPT Gt_SetGadgetAttrsA(my_gads[GAD_SOURCE],win,NIL,[GTST_STRING,source,NIL]) Gt_SetGadgetAttrsA(my_gads[GAD_TARGET],win,NIL,[GTST_STRING,target,NIL]) Gt_SetGadgetAttrsA(my_gads[GAD_MASK],win,NIL,[GTST_STRING,mask,NIL]) Gt_SetGadgetAttrsA(my_gads[GAD_KEY],win,NIL,[GTIN_NUMBER,key,NIL]) IF StrCmp(source,'') OR StrCmp(target,'') IF StrCmp(source,'') RtEZRequestA('I need a source file!','_Ooops!',0,0,[R@ NTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) ENDIF IF StrCmp(target,'') RtEZRequestA('I need a target file!','_Ooops!',0,0,[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) ENDIF ELSE IF RtEZRequestA('Are you sure?','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Encrypt',RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL]) ok:=encryptFile() IF ok THEN RtEZRequestA('Encrypted \d bytes\nwith the key \d','_Ok',0,[flen,key],[RTEZ_REQTITLE,'Fini@O[9shed',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ENDIF ENDIF CASE GAD_ABOUT; showAbout() ENDSELECT ENDPROC PROC handleVanillaKey(win,code,my_gads:PTR TO LONG) SELECT "w" OF code CASE "s","S" ActivateGadget(my_gads[GAD_SOURCE],win,NIL) CASE "r","R" ActivateGadget(my_gads[GAD_TARGET],win,NIL) CASE "m","M" ActivateGadget(my_gads[GAD_MASK],win,NIL) CASE "k","K" ActivateGadget(my_gads[GAD_KEY],win,NIL) CASE "g",@P N"G" StrCopy(source,getFilename('Select Source File')) IF flen=-1 RtEZRequestA('File not found!','_Ok',0,0,[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) StrCopy(source,'') ENDIF WriteF('source=\s\n',source) Gt_SetGadgetAttrsA(my_gads[GAD_SOURCE],win,NIL,[GTST_STRING,source,NIL]) CASE "t","T" StrCopy(target,getFilename('Select Target File')) inhandle:=Open(target,OLDFILE) IF inhandle<>NIL Gt_SetGadgetAttrsA(my@Q;*_gads[GAD_TARGET],win,NIL,[GTST_STRING,target,NIL]) IF RtEZRequestA('File already exists!','_Leave|_Use',0,0,[RTEZ_REQTITLE,'Warning',RT_UNDERSCORE,"_",NIL]) StrCopy(target,'') ENDIF Close(inhandle) ENDIF Gt_SetGadgetAttrsA(my_gads[GAD_TARGET],win,NIL,[GTST_STRING,target,NIL]) CASE "e","E" Gt_SetGadgetAttrsA(my_gads[GAD_SOURCE],win,NIL,[GTST_STRING,source,NIL]) Gt_SetGadgetAttrsA(my_gads[GAD_TARGET],win,NIL,[GTST_STRING,ta@Rmrget,NIL]) Gt_SetGadgetAttrsA(my_gads[GAD_MASK],win,NIL,[GTST_STRING,mask,NIL]) Gt_SetGadgetAttrsA(my_gads[GAD_KEY],win,NIL,[GTIN_NUMBER,key,NIL]) IF StrCmp(source,'') OR StrCmp(target,'') IF StrCmp(source,'') RtEZRequestA('I need a source file!','_Ooops!',0,0,[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) ENDIF IF StrCmp(target,'') RtEZRequestA('I need a target file!','_Ooops!',0,0,[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_"@SiΆ,NIL]) ENDIF ELSE IF RtEZRequestA('Are you sure?','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Encrypt',RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL]) ok:=encryptFile() IF ok THEN RtEZRequestA('Encrypted \d bytes\nwith the key \d','_Ok',0,[flen,key],[RTEZ_REQTITLE,'Finished',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ENDIF ENDIF CASE "q","Q" IF RtEZRequestA('Are you sure?','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Quit',RTEZ_FLAGS,@TkLEZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=1 THEN wanted:=FALSE CASE "a","A"; showAbout() CASE "1"; centreText('WRITTEN BY ZEBEDEE/CARNAGE',1,65) CASE "2"; centreText('WRITTEN USING AMIGA E v3.1i',1,65) CASE "3"; centreText('STARTED ON 09-OCT-96',1,65) CASE "4"; centreText('LAST UPDATE ON 03-Nov-96',1,65) CASE "5"; centreText('GREETS TO KEI/CRN AND THRUST/CRN',1,65) CASE "6"; centreText('FOR CARNAGE MEMBERS ONL@UFY!',1,65) CASE "7"; centreText('ALANIS MORISSETTE IS THE BEST',1,65) CASE "8"; centreText('PHONE ME ON +44 (0)1752 784262',1,65) CASE "9"; centreText('JEG LIKER SAU OG SRBAR RKESILDER',1,65) CASE "0"; centreText('...READY TO ENCRYPT WHEN YOU ARE...',1,65) ENDSELECT ENDPROC PROC createAllGadgets(glistptr:PTR TO LONG,vi,topborder,my_gads:PTR TO LONG) DEF gad,ng:PTR TO newgadget gad:=CreateContext(glistptr) ng:=[140,(20+topborder),200,12,NIL,to@Vpaz80,NIL,1,vi,0]:newgadget ng.topedge := 16 ng.leftedge := 77 ng.height := 14 ng.width := 259 ng.gadgettext := '_Source:' ng.gadgetid := GAD_SOURCE my_gads[GAD_SOURCE]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng, [GTST_STRING,'',GTST_MAXCHARS,255, GT_UNDERSCORE,"_",NIL])) ng.topedge := 30 ng.gadgettext := 'Ta_rget:' ng.gadgetid := GAD_TARGET my_gads[GAD_TARGET]:=(gad:=Cr@WS{aeateGadgetA(STRING_KIND,gad,ng, [GTST_STRING,'',GTST_MAXCHARS,255, GT_UNDERSCORE,"_",NIL])) ng.topedge := 44 ng.width := 84 ng.gadgettext := '_Mask:' ng.gadgetid := GAD_MASK my_gads[GAD_MASK]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng, [GTST_STRING,'00000000',GTST_MAXCHARS,8, GT_UNDERSCORE,"_",NIL])) ng.leftedge := @X 212 ng.width := 44 ng.gadgettext := '_Key:' ng.gadgetid := GAD_KEY my_gads[GAD_KEY]:=(gad:=CreateGadgetA(INTEGER_KIND,gad,ng, [GTIN_NUMBER,0,GTIN_MAXCHARS,3, GT_UNDERSCORE,"_",NIL])) ng.topedge := 16 ng.leftedge := 336 ng.width := 39 ng.height := 14 ng.gadgettext := '_Get' ng.gadgetid := GAD_GETSRC ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDER@YL8@;SCORE,"_",NIL]) ng.topedge := 30 ng.gadgettext := 'Ge_t' ng.gadgetid := GAD_GETTGT gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.topedge := 44 ng.leftedge := 256 ng.width := 68 ng.gadgettext := '_Encrypt' ng.gadgetid := GAD_ENCRYPT gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 324 ng.width := 51 ng.gadgettext := '_About' ng.gadgetid := GAD_ABOUT gad:=CreateGadgetA(BUTTON_KIND,g@ZCad,ng,[GT_UNDERSCORE,"_",NIL]) ENDPROC gad PROC process_window_events(mywin:PTR TO window,my_gads:PTR TO LONG) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad WHILE wanted Wait(Shl(1,mywin.userport.sigbit)) WHILE (wanted) AND (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress imsgClass:=imsg.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_GADGETDOWN; handleGadgetEvent(mywin,gad,imsgCode,my_gads) @[jC CASE IDCMP_MOUSEMOVE; handleGadgetEvent(mywin,gad,imsgCode,my_gads) CASE IDCMP_GADGETUP; handleGadgetEvent(mywin,gad,imsgCode,my_gads) CASE IDCMP_VANILLAKEY; handleVanillaKey(mywin,imsgCode,my_gads) CASE IDCMP_CLOSEWINDOW IF RtEZRequestA('Are you sure?','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Quit',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=1 THEN wanted:=FALSE CASE IDCMP_REFRESHWINDOW Gt_BeginRefresh(m@\Pywin) Gt_EndRefresh(mywin,TRUE) ENDSELECT ENDWHILE ENDWHILE ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO screen,glist=NIL,my_gads[4]:ARRAY OF LONG,vi,topborder topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,[NIL]) topborder:=mysc.wbortop+mysc.font.ysize+1 createAllGadgets({glist},vi,topborder,my_gads) mywin:=OpenWindowTagList(NIL, [WA_TITLE@]|)ZT,'SpiCode v1.05', WA_SCREENTITLE,'CARNAGE - Always where you never expect us to be!', WA_GADGETS, glist, WA_RMBTRAP, TRUE, WA_TOP, 11, WA_LEFT, 0, WA_WIDTH, 389, WA_MINWIDTH, 50, WA_HEIGHT, 78, WA_MINHEIGHT, 50, WA_DRAGBAR, TRUE, WA_DEPTHGADGET, TRUE, WA_ACTIVATE, TRUE, WA@^/_CLOSEGADGET, TRUE, WA_SIZEGADGET,FALSE, WA_SMARTREFRESH, TRUE, WA_IDCMP,IDCMP_CLOSEWINDOW OR IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR STRINGIDCMP OR BUTTONIDCMP,WA_PUBSCREEN,mysc,NIL]) Gt_RefreshWindow(mywin,NIL) DrawBevelBoxA(mywin.rport,8,13,373,48,[GTBB_RECESSED,TRUE,GT_VISUALINFO,vi,NIL]) DrawBevelBoxA(mywin.rport,8,63,373,11,[GTBB_RECESSED,TRUE,GT_VISUALINFO,vi,N@_pr-IL]) centreText('...READY TO ENCRYPT WHEN YOU ARE...',1,65) process_window_events(mywin,my_gads) EXCEPT DO IF mywin THEN CloseWindow(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC showAbout() StrCopy(temps,'Code by Zebedee/Carnage^TFL\n') StrAdd(temps,'Last update: 03-Nov-96\n\n') StrAdd(temps,'This utility is only for Carnage and\n') StrAdd(temps,'may not be d@`Sg]istributed to non-members.') RtEZRequestA(temps,'_Ok',0,0,[RTEZ_REQTITLE,'About',RT_UNDERSCORE,"_",NIL]) ENDPROC PROC information() PutStr('\e[0;1;4mSpiCode v1.05 by Zebedee 1996 Carnage (03-Nov-96)\e[0m\n\n') PutStr('Usage: SPICODE [FROM] [TO] KEY= [MASK]\n\n') PutStr('If [MASK] is specified then must be an eight digit binary value,\n') PutStr('otherwise it must be an integer value between 0 and 254. The and\n') PutStr('the filenames CAN be the same.\n') CleanUp(20) ENDPROC PROC maskToKey(old) DEF temp[1]:STRING,num=1,tkey:PTR TO LONG tkey:=0 IF StrLen(old)<>8 THEN error('Invalid key mask') FOR ctr:=7 TO 0 STEP-1 MidStr(temp,old,ctr,1) IF (StrCmp('0',temp,1)=FALSE) AND (StrCmp('1',temp,1)=FALSE) THEN error('Invalid key mask') IF StrCmp('1',temp,1) THEN tkey:=tkey+num num:=Mul(num,2) ENDFOR ENDPROC tkey PROC keyToMask(old) DEF tmask[8]:STRING,num:PTR TO LONG StrCopy(t@!b _omask,'') num:=128 REPEAT IF old-num>-1 StrAdd(tmask,'1') old:=old-num ELSE StrAdd(tmask,'0') ENDIF num:=num/2 UNTIL old=0 IF StrLen(tmask)<8 FOR ctr:=StrLen(tmask) TO 8 StrAdd(tmask,'0') ENDFOR ENDIF ENDPROC tmask PROC error(t) WriteF('ERROR: \s\n',t) CleanUp(20) ENDPROC PROC encrypt() DEF t1,t2,t3,t4,t5 FOR t5:=mem TO mem+flen STEP 4 t4:=t5 FOR t1:=0 TO 3 t2:=t4[t1] t3:=Mod(key+1,256) t4[t1@"c\]:=Eor(t2,t3) ENDFOR ENDFOR ENDPROC PROC shell() HANDLE DEF options:PTR TO LONG,rdargs options:=[0,0,0,0] IF rdargs:=ReadArgs('FROM/A,TO/A,KEY/K/A,MASK/S',options,NIL) StrCopy(source,options[0]) StrCopy(target,options[1]) StrCopy(key,options[2]) mask:=options[3] FreeArgs(rdargs) ENDIF IF StrCmp(source,'',ALL) THEN Raise(ERR_USAGE) PutStr('\e[0;1;4mSpiCode v1.03 by Zebedee 1996 Carnage (03-Nov-96)\e[0m\n\n') PutStr('Encrypting file...\n') IF@#d!:?/ mask THEN key:=maskToKey(key) ELSE key:=Val(key,NIL) IF (key<0) OR (key>255) THEN error('Invalid key') flen:=FileLength(source) ok:=encryptFile() IF ok THEN WriteF('File "\s" encrypted as "\s" with key \d\e[3m! \e[0m\n',source,target,key) CleanUp(0); EXCEPT DO SELECT exception CASE ERR_USAGE;information() ENDSELECT ENDPROC PROC encryptFile() DEF null_request:requester ok:=FALSE IF (key=255) AND (wbmessage OR dos) RtEZRequestA('Key 255 performs test run:\@$e͟nDATA WILL NOT BE ENCRYPTED!','_Ok',0,0,[RTEZ_REQTITLE,'Warning',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ELSEIF Not(dos) WriteF('\e[1mWARNING:\e[0m Key 255 performs test run: DATA WILL NOT BE ENCRYPTED!\n') ENDIF IF Request(null_request,mywin) SetPointer(mywin,{busy},16,16,-6,0) flen:=FileLength(source) inhandle:=Open(source,OLDFILE) IF (flen<1) OR (inhandle=NIL) IF wbmessage OR dos RtEZRequestA('Source file not found!','_Ok',0,0,[@%fw4RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) ELSE WriteF('ERROR: File "\s" not found!\n',source) ENDIF JUMP exit ELSE mem:=New(flen) IF mem=NIL IF wbmessage OR dos RtEZRequestA('Insufficient memory!','_Ok',0,0,[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) ELSEIF Not(dos) WriteF('ERROR: Insufficient memory!\n') ENDIF Close(inhandle) JUMP exit ELSE StringF(temps,'READIN@&g?=G \d BYTES FROM SOURCE',flen) centreText(temps,1,65) IF Read(inhandle,mem,flen)<>flen IF wbmessage OR dos RtEZRequestA('Problems reading source!','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) ELSEIF Not(dos) WriteF('ERROR: Error reading "\s"\n',source) ENDIF Close(inhandle) JUMP exit ELSE Close(inhandle) centreText('ENCRYPTING DATA - PLEASE WAIT',1,65@'h)) encrypt() outhandle:=Open(target,NEWFILE) IF outhandle=NIL IF wbmessage OR dos RtEZRequestA('Unable to create target!','_Ok',0,0,[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) ELSEIF Not(dos) WriteF('ERROR: Unable to create file "\s"\n',target) ENDIF JUMP exit ELSE centreText('WRITING MEMORY TO TARGET FILE',1,65) IF Write(outhandle,mem,flen)<>f@(iKlen IF wbmessage OR dos RtEZRequestA('Problems writing data!','_Ok',0,0,[RTEZ_REQTITLE,'Error',RT_UNDERSCORE,"_",NIL]) ELSEIF Not(dos) WriteF('ERROR: Error writing data!\n') ENDIF Close(outhandle) DeleteFile(target) JUMP exit ENDIF Close(outhandle) ENDIF ENDIF ENDIF centreText('...READY TO ENCRYPT WHEN YOU ARE...',1,@)jPt65) Dispose(mem) ENDIF ELSE IF wbmessage OR dos THEN RtEZRequestA('The world is against me!','_Eh?!',0,0,[RTEZ_REQTITLE,'Help',RT_UNDERSCORE,"_",NIL]) ENDIF ok:=TRUE exit: EndRequest(null_request,mywin) ClearPointer(mywin) ENDPROC ok PROC getFilename(title) HANDLE DEF fr:PTR TO filerequester,t[1]:STRING fr:=AllocAslRequest(ASL_FILEREQUEST,[ASL_HAIL, title,ASL_HEIGHT,200, ASL_WIDTH,320,ASL_LEFTEDGE,0,ASL_TOPEDGE,0, @*k ASL_OKTEXT,'Ok',ASL_CANCELTEXT,'Cancel',ASL_FILE,fname, ASL_DIR,fpath,NIL]) IF AslRequest(fr,NIL) fname:=fr.file UpperStr(fname) fpath:=fr.drawer UpperStr(fpath) MidStr(t,fpath,StrLen(fpath)-1,1) StrCopy(temps,'') StrAdd(temps,fpath) IF Not(StrCmp(':',t,1)) THEN StrAdd(temps,'/') StrAdd(temps,fname) UpperStr(temps) flen:=FileLength(temps) ELSE fname:=FALSE fpath:=FALSE StrCopy(temps,'') ENDIF E@+l/`XCEPT IF fr THEN FreeAslRequest(fr) SELECT exception CASE ERR_ASL; WriteF('ERROR: Could not allocate ASL request\n') ENDSELECT ENDPROC temps PROC centreText(text,color,y) DEF x:PTR TO LONG PrintIText(mywin.rport,[0,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr, '-> JEG ELSKE JVLER SAU VIRKELIG VANSKELIG <-',NIL]:intuitext,14,65) x:=194-((StrLen(text)*8)/2) PrintIText(mywin.rport,[color,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,text,NIL]:intuitext,x,y) END@,mPPROC PROC setVariables() StrCopy(source,'') StrCopy(target,'') StrCopy(mask,'00000000') key:=0 dos:=FALSE ENDPROC PROC main() HANDLE setVariables() IF Not(wbmessage) dos:=TRUE StrCopy(temps,arg) UpperStr(temps) IF StrCmp(temps,'INFO') information() CleanUp(0) ELSEIF StrLen(temps)<>0 dos:=FALSE shell() ENDIF ENDIF KickVersion(37) reqtoolsbase:=OpenLibrary('reqtools.library',37) gadtoolsbase:=OpenLibrary('gadtools.@-nk6library',37) aslbase:=OpenLibrary('asl.library',37) gadtoolsWindow() EXCEPT DO IF aslbase THEN CloseLibrary(aslbase) IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) IF reqtoolsbase THEN CloseLibrary(reqtoolsbase) SELECT exception CASE ERR_FONT; WriteF('ERROR: Failed to open Topaz 80\n') CASE ERR_GAD; WriteF('ERROR: createAllGadgets() failed\n') CASE ERR_KICK; WriteF('ERROR: Requires V37\n') CASE ERR_LIB; WriteF('ERROR: Requires V37 asl.library, gadtools.library @.owe& reqtools.library\n') CASE ERR_PUB; WriteF('ERROR: Couldn''t lock default public screen\n') CASE ERR_VIS; WriteF('ERROR: GetVisualInfoA() failed\n') CASE ERR_WIN; WriteF('ERROR: OpenWindow() failed\n') ENDSELECT ENDPROC busy: LONG $00000000,$040007C0,$000007C0,$01000380,$000007E0,$07C01FF8, $1FF03FEC,$3FF87FDE,$3FF87FBE,$7FFCFF7F,$7EFCFFFF,$7FFCFFFF, $3FF87FFE,$3FF87FFE,$1FF03FFC,$07C01FF8,$000007E0,$00000000 vers: CHAR '$VER: SpiCode v1.05 (03-Nov@/Y-96)',0pqZƛwvutsrq 3E%l !Window.erpprеε-> !Window.e by Zebedee/A51 -> Demonstrates some of the IDCMP and WA attributes of a window MODULE 'intuition/intuition','gadtools','libraries/gadtools', 'exec/nodes','graphics/rastport','graphics/text' PROC main() IF gadtoolsbase:=OpenLibrary('gadtools.library',37) IF mysc:=LockPubScreen(NIL) IF vi:=GetVisualInfoA(mysc,[NIL]) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'Window title', WA_SCREps_dENTITLE,'Screen title', WA_RMBTRAP,FALSE, WA_LEFT,0, WA_TOP,11, WA_WIDTH,500, WA_HEIGHT,200, WA_ACTIVATE,TRUE, WA_DRAGBAR,TRUE, WA_CLOSEGADGET,TRUE, WA_SIZEGADGET,TRUE, pt[f WA_SMARTREFRESH,TRUE, WA_MINHEIGHT,40, WA_MINWIDTH,40, WA_MAXHEIGHT,245, WA_MAXWIDTH,640, WA_DEPTHGADGET,TRUE, WA_AUTOADJUST,FALSE, WA_IDCMP,IDCMP_CLOSEWINDOW OR IDCMP_REFRESHWINDOW OR IDCMP_DISKINSERTED OR IDCMP_SIZEVERIFY OR IDpu|CMP_DISKREMOVED OR IDCMP_CHANGEWINDOW OR IDCMP_ACTIVEWINDOW OR IDCMP_INACTIVEWINDOW OR IDCMP_MENUPICK OR IDCMP_VANILLAKEY OR IDCMP_MOUSEBUTTONS OR IDCMP_GADGETUP OR IDCMP_GADGETDOWN OR IDCMP_REFRESHWINDOW, WA_PUBSCREEN,0,NIL]) PrintIText(mywin.rport,[1,0,RP_JAM1,0,0,['topaz.font',8,0,0]:textattr,'Play with the window...',NIL]:intuitext,20,20) DrawBevelBoxA(mywin.rport,413,13,132,103,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) Rpv)EPEAT class:=WaitIMessage(mywin) SELECT class CASE IDCMP_CLOSEWINDOW;wanted:=FALSE;WriteF('Bye...\n') CASE IDCMP_DISKINSERTED;WriteF('Disk inserted\n') CASE IDCMP_DISKREMOVED;WriteF('Disk removed\n') CASE IDCMP_SIZEVERIFY;WriteF('Window resize clicked\n') CASE IDCMP_CHANGEWINDOW;WriteF('Window changed\n') CASE IDCMP_ACTIVEWINDOW;WriteF('Window now active\n') CASE IDCMP_INACTIVEWINDpw!|OW;WriteF('Window now inactive\n') CASE IDCMP_MENUPICK;WriteF('Menu button pressed\n') CASE IDCMP_VANILLAKEY;WriteF('Keyboard used\n') CASE IDCMP_MOUSEBUTTONS;WriteF('Mouse buttons used\n') CASE IDCMP_REFRESHWINDOW Gt_BeginRefresh(mywin) PrintIText(mywin.rport,[1,0,RP_JAM1,0,0,['topaz.font',8,0,0]:textattr,'Play with the window...',NIL]:intuitext,20,20) DrawBevelBoxA(mywin.rport,413,13,132,103,[pҏ]RGT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) Gt_EndRefresh(mywin,TRUE) WriteF('Window refreshed\n') ENDSELECT WriteF('*') UNTIL wanted=FALSE CloseWindow(mywin) ELSE WriteF('ERROR: Unable to get visual info\n') ENDIF ELSE WriteF('ERROR: Unable to lock public screen\n') ENDIF ELSE WriteF('ERROR: Unable to open gadtools.library v37\n') ENDIF ENDPROCxyk~}|{zyE%l SpiCodeCLI.ejpxz*6g/*********************************************************************\ ** SpiCode v1.02 ** ** By Zebedee/Carnage^TFL (17-Sep-96) ** ** ** ** Usage : DESTROY [FROM] [TO] KEY= [MASK] ** ** Template: FROM/A,TO/A,KEY/K/A,MASK/S ** ** x{ ** ** FROM Name of the file to (en/de)crypt ** ** TO To (en/de)crypted file ** ** KEY= Code key (Either denary 0-254 or eight digit binary ** ** MASK If key is binary then this option must be specified ** \*********************************************************************/ MODULE 'dos' ENUM ER_USAGE DEF source[255]:STRING,target[255]:STRING,key[8]:STRING,mask,ctr, flen:PTR TO x|&*SLONG,mem,handle=NIL PROC main() HANDLE DEF options:PTR TO LONG,rdargs options:=[0,0,0,0] IF rdargs:=ReadArgs('FROM/A,TO/A,KEY/K/A,MASK/S',options,NIL) StrCopy(source,options[0]) StrCopy(target,options[1]) StrCopy(key,options[2]) mask:=options[3] FreeArgs(rdargs) ENDIF IF StrCmp(source,'',ALL) THEN Raise(ER_USAGE) PutStr('\e[0;1;4mSpiCode v1.02 by Zebedee 1996 Carnage (17-Sep-96)\e[0m\n\n') PutStr('Encrypting file...\n') IF mask THEN maskTOkey(keyx}GHp) ELSE key:=Val(key) IF (key<0) OR (key>254) THEN error('Invalid key') flen:=FileLength(source) handle:=Open(source,OLDFILE) IF (flen<1) OR (handle=NIL) WriteF('ERROR: File "\s" not found!\n',source) CleanUp(20) ELSE mem:=New(flen) IF mem=NIL PutStr('ERROR: Insufficient memory!\n') Close(handle) ELSE IF Read(handle,mem,flen)<>flen WriteF('ERROR: Error reading "\s"\n',source) Close(handle) CleanUp(20) ELSE x~{Y Close(handle) encrypt() handle:=Open(target,NEWFILE) IF handle=NIL WriteF('ERROR: Unable to create file "\s"\n',target) CleanUp(20) ELSE IF Write(handle,mem,flen)<>flen PutStr('ERROR: Error writing data!\n') Close(handle) CleanUp(20) ENDIF Close(handle) ENDIF ENDIF ENDIF Dispose(mem) ENDIF IF StrCmp(UpperStr(source),UpperStr(target),ALx<=L) WriteF('File "\s" encrypted over itself with key \d\e[3m! \e[0m\n',source,key) ELSE WriteF('File "\s" encrypted as "\s" with key \d\e[3m! \e[0m\n',source,target,key) ENDIF CleanUp(0); EXCEPT DO SELECT exception CASE ER_USAGE;information() ENDSELECT ENDPROC PROC information() PutStr('\e[0;1;4mSpiCode v1.02 by Zebedee 1996 Carnage (17-Sep-96)\e[0m\n\n') PutStr('Usage: SPICODE [FROM] [TO] KEY= [MASK]\n\n') PutStr('If [MASK] is specxified then must be an eight digit binary value,\n') PutStr('otherwise it must be an integer value between 0 and 254. The and\n') PutStr('the filenames CAN be the same.\n') CleanUp(20) ENDPROC PROC maskTOkey(old) DEF temp[1]:STRING,num=1 key:=0 IF StrLen(old)<>8 THEN error('Invalid key mask') FOR ctr:=7 TO 0 STEP-1 MidStr(temp,old,ctr,1) IF (StrCmp('0',temp,1)=FALSE) AND (StrCmp('1',temp,1)=FALSE) THEN error('Invalid key mask') IF Stx9rCmp('1',temp,1) THEN key:=key+num num:=Mul(num,2) ENDFOR ENDPROC PROC error(t) WriteF('ERROR: \s\n',t) CleanUp(20) ENDPROC PROC encrypt() DEF t1,t2,t3,t4,t5 FOR t5:=mem TO mem+flen STEP 4 t4:=t5 FOR t1:=0 TO 3 t2:=t4[t1] t3:=Mod(key+1,256) t4[t1]:=Eor(t2,t3) ENDFOR ENDFOR ENDPROC vers: CHAR '$VER: SpiCode v1.01 (17-Sep-96)',0 $>h*E%lFrenzy.ep-> Frenzy.e by Zebedee/A51 -> An attempt at a conversion of the BBC game "Frenzy" (aka "Bally" on the -> Amiga) to work on Workbench. Not yet completed! MODULE 'gadtools','libraries/gadtools','reqtools','libraries/reqtools', 'exec/ports','graphics/text','intuition/intuition','intuition/screens', 'graphics/rastport','devices/inputevent','tools/cookrawkey', 'tools/ctype' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_LIB,ERR_PUB,ERR_VIS,ERR_WIN RAISE ERR_FONT IF OS penFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL -> ReadPixel(stdrast,xcoord(vx),ycoord(vy)) -> RtGetStringA(text,10,'New highscore, enter your name:',NIL,NIL) ENUM GDBT_START,GDBT_STOP,GDBT_ABOUT,GDBT_CREDITS,GDBT_QUIT ENUM GAD_SLIDER,GAD_CYCLE,GAD_CHECKBOX,GAD_STRING,GAD_BUTTON,GAD_ENABLE, GAD_DISABLE,GAD_INTEGER,GAD_LISTVIEW,GAD_MX CONST SLIDER_MIN=1,SLIDER_MAX=23 DEF topaz80,mywin=NIL:PTR TO window,wanted=TRUE,text[10]:STRING, x=100:PTR TO LONG,y=-1:PTR TO LONG,dx=1:PTR TO LONG,dy=1:PTR TO LONG, bx=-1:PTR TO LONG,by=30:PTR TO LONG PROC handleGadgetEvent(win,gad:PTR TO gadget,code,slider_level:PTR TO LONG,my_gads:PTR TO LONG) DEF id,quit=FALSE,pen=3,imsgClass,imsgCode,imsg:PTR TO intuimessage SetAPen(mywin.rport,0) id:=gad.gadgetid SELECT id CASE GDBT_START Of@Nu9fGadget(my_gads[GDBT_START],mywin,NIL) OnGadget(my_gads[GDBT_STOP],mywin,NIL) OffGadget(my_gads[GDBT_ABOUT],mywin,NIL) -> OffGadget(my_gads[GDBT_CREDITS],mywin,NIL) OffGadget(my_gads[GDBT_QUIT],mywin,NIL) RectFill(mywin.rport,94,16,263,101) Move(mywin.rport,94,16) REPEAT INC pen IF pen=4 THEN pen:=0 bx:=bx+dx by:=by+dy IF bx>168 THEN dx:=-1 IF bx<1 THEN dx:=1 IF by>84 THEN dy:=-1 R/JIF by<1 THEN dy:=1 IF ReadPixel(mywin.rport,94+bx+1,16+by)=3 THEN dx:=-1 IF ReadPixel(mywin.rport,94+bx-1,16+by)=3 THEN dx:=1 IF ReadPixel(mywin.rport,94+bx,16+by+1)=3 THEN dy:=-1 IF ReadPixel(mywin.rport,94+bx,16+by-1)=3 THEN dy:=1 SetAPen(mywin.rport,1) WritePixel(mywin.rport,94+x,16+y) SetAPen(mywin.rport,1) WritePixel(mywin.rport,94+bx,16+by) Delay(1) SetAPen(mywin.rport,3) WritePixel(mywin.rpuVort,94+x,16+y) SetAPen(mywin.rport,0) WritePixel(mywin.rport,94+bx,16+by) imsg:=Gt_GetIMsg(mywin.userport) IF imsg.class=IDCMP_GADGETUP gad:=imsg.iaddress id:=gad.gadgetid SELECT id CASE GDBT_STOP;IF (RtEZRequestA('Do you want to\ncontinue or quit?','_Continue|_Quit',0,0,[RTEZ_REQTITLE,'Paused...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL])=0) THEN quit:=TRUE ENDSELECT ENDIF I>ƓF imsg.class=IDCMP_VANILLAKEY SELECT "{" OF imsg.code CASE "z","Z" IF ReadPixel(mywin.rport,94+x-1,16+y)=3 THEN fill(94+x+1,16+y,95+x,16+y) IF ReadPixel(mywin.rport,94+x-1,16+y)<>3 THEN DEC x CASE "x","X" IF ReadPixel(mywin.rport,94+x+1,16+y)=3 THEN fill(94+x-1,16+y,95+x,16+y) IF ReadPixel(mywin.rport,94+x+1,16+y)<>3 THEN INC x CASE "k","K" IF ReadPixel(mywin.rport,94+xr,16+y-1)=3 THEN fill(94+x,16+y+1,95+x,16+y) IF ReadPixel(mywin.rport,94+x,16+y-1)<>3 THEN DEC y CASE "m","M" IF ReadPixel(mywin.rport,94+x,16+y+1)=3 THEN fill(94+x,16+y-1,95+x,16+y) IF ReadPixel(mywin.rport,94+x,16+y+1)<>3 THEN INC y CASE "c","C" SetAPen(mywin.rport,0) RectFill(mywin.rport,94,16,263,101) CASE ")";pen:=0 CASE "!";pen:=1 CASE "@";pen:=2  d( CASE "#";pen:=3 ENDSELECT Gt_ReplyIMsg(imsg) ENDIF UNTIL quit -> RtGetStringA(text,10,'New highscore, enter your name:',NIL,NIL) OnGadget(my_gads[GDBT_START],mywin,NIL) OffGadget(my_gads[GDBT_STOP],mywin,NIL) OnGadget(my_gads[GDBT_ABOUT],mywin,NIL) -> OnGadget(my_gads[GDBT_CREDITS],mywin,NIL) OnGadget(my_gads[GDBT_QUIT],mywin,NIL) CASE GDBT_STOP CASE GDBT_ABOUT;RtEZRequestA('Frenzy v1.00\nBy Zebedee/C &arnage\n\nRelease date: 18-Jan-97\n1997 A Carnage Production','_Ok',0,0,[RTEZ_REQTITLE,'About',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) CASE GDBT_CREDITS CASE GDBT_QUIT;IF (RtEZRequestA('Are you sure?','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Quit',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=1) THEN wanted:=FALSE ENDSELECT ENDPROC PROC fill(xp,yp,ax,ay) SetAPen(mywin.rport,3) IF Flood(mywin.rport,1,xp,yp)=0 THEN RtEZRequestA('Fill : D \d[3]x\d[3]\nActual: \d[3]x\d[3]','_Ok',0,[xp,yp,ax,ay],[RTEZ_REQTITLE,'Fill Error',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ENDPROC PROC handleVanillaKey(win,code,slider_level:PTR TO LONG,my_gads:PTR TO LONG) /* SELECT "{" OF code CASE "z","Z";x:=x-dx CASE "x","X";x:=x+dx CASE "k","K";y:=y-dy CASE "m","M";y:=y+dy ENDSELECT*/ ENDPROC PROC createAllGadgets(glistptr:PTR TO LONG,vi,topborder,slider_level,my_gads:PTR TO LONG) DEF gad,ng:PTR TO newgadge [dHt gad:=CreateContext(glistptr) ng:=[14,47,68,11,'START',topaz80,GDBT_START,NIL,vi,0]:newgadget my_gads[GDBT_START]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.topedge := 58 ng.gadgettext := 'STOP' ng.gadgetid := GDBT_STOP my_gads[GDBT_STOP]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.topedge := 69 ng.gadgettext := 'ABOUT' ng.gadgetid := GDBT_ABOUT my_gads[GDBT_ABOUT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad >^,ng,[GT_UNDERSCORE,"_",NIL])) ng.topedge := 80 ng.gadgettext := 'CREDITS' ng.gadgetid := GDBT_CREDITS my_gads[GDBT_CREDITS]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng.topedge := 91 ng.gadgettext := 'QUIT' ng.gadgetid := GDBT_QUIT my_gads[GDBT_QUIT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ENDPROC gad PROC processWindowEvents(mywin:PTR TO window,slider_level:PTR TO LONG, my_gads:PTZ}R TO LONG) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad WHILE wanted Wait(Shl(1,mywin.userport.sigbit)) WHILE wanted AND (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress imsgClass:=imsg.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_GADGETDOWN; handleGadgetEvent(mywin,gad,imsgCode,slider_level,my_gads) CASE IDCMP_MOUSEMOVE; handleGadgetEvent(mywin,gad,imsgCode,slider_level,my_gads) CASEr7 IDCMP_GADGETUP; handleGadgetEvent(mywin,gad,imsgCode,slider_level,my_gads) CASE IDCMP_VANILLAKEY; handleVanillaKey(mywin,imsgCode,slider_level,my_gads) CASE IDCMP_REFRESHWINDOW Gt_BeginRefresh(mywin) Gt_EndRefresh(mywin,TRUE) ENDSELECT ENDWHILE ENDWHILE ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO screen,glist=NIL, my_gads[5]:ARRAY OF LONG,vi,slider_level=5,topborder topaz80:=['topaz.font',8,0,0]:textattr foSnt:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,[NIL]) topborder:=mysc.wbortop+mysc.font.ysize+1 createAllGadgets({glist},vi,topborder,slider_level,my_gads) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'Frenzy', WA_SCREENTITLE,'CARNAGE - Always where you never expect us to be!', WA_GADGETS, glist, WA_RMBTRAP, TRUE, WA_WIDTH, 445, WA_MINWIDTH, 50, ߀ WA_HEIGHT, 109, WA_MINHEIGHT, 50, WA_DRAGBAR, TRUE, WA_DEPTHGADGET, TRUE, WA_ACTIVATE, TRUE, WA_SMARTREFRESH, TRUE, WA_IDCMP,IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR BUTTONIDCMP, WA_PUBSCREEN,mysc,NIL]) Gt_RefreshWindow(mywin,NIL) OffGadget(my_gads[GDBT_STOP],mywin,NIL) OffGadget(my_gads[GDBT_CREDITS],mywin,NIL) DrawBevelBoxA(mywin.rport,8,13,80,31,[״HRGT_VISUALINFO,vi,NIL]) -> TL DrawBevelBoxA(mywin.rport,8,44,80,61,[GT_VISUALINFO,vi,NIL]) -> BL DrawBevelBoxA(mywin.rport,12,46,72,57,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) -> Menu DrawBevelBoxA(mywin.rport,88,13,182,92,[GT_VISUALINFO,vi,NIL]) -> M DrawBevelBoxA(mywin.rport,270,13,167,92,[GT_VISUALINFO,vi,NIL]) -> R SetAPen(mywin.rport,3) RectFill(mywin.rport,92,15,265,102) SetAPen(mywin.rport,0) RectFill(mywin.rport,94,16,263,101) shadow('Frenzy',23,15) shadogw('v1.00',27,25) shadow('18-Jan-97',11,34) normal('01 001000 ZEBEDEE & ',273,15) normal('02 000900 SERENA E ',273,24) normal('03 000800 ANDY B & ',273,33) normal('04 000700 SHARON S ',273,42) normal('05 000600 RACHEL C ',273,51) normal('06 000500 LISA FRY ',273,60) normal('07 000400 TRACY KING',273,69) normal('08 000300 CLAIRE H ',273,78) normal('09 000200 LEANNE R ',273,87) normal('10 000100 NIKKY P ',273,96) RtEZRequestA(' Z=Left\n X=Right \n K=Up\nwp M=Down','_Ok',0,NIL,[RTEZ_REQTITLE,'Controls',RT_UNDERSCORE,"_",NIL]) processWindowEvents(mywin,{slider_level},my_gads) EXCEPT DO IF mywin THEN CloseWindow(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC shadow(text,xpos,ypos) PrintIText(mywin.rport,[1,0,RP_JAM1,0,0,['topaz.font',8,0,0]:textattr,text,NIL]:intuitext,xpos+2,ypos+1) PrintIText(mywin.rport,[2,0,RP_JAM1,0{,0,['topaz.font',8,0,0]:textattr,text,NIL]:intuitext,xpos,ypos) ENDPROC PROC normal(text,xpos,ypos) PrintIText(mywin.rport,[1,0,RP_JAM1,0,0,['topaz.font',8,0,0]:textattr,text,NIL]:intuitext,xpos,ypos) ENDPROC PROC main() HANDLE KickVersion(37) IF gadtoolsbase:=OpenLibrary('gadtools.library',37) IF reqtoolsbase:=OpenLibrary('reqtools.library',37) IF warmupRawkeyCooker()=NIL gadtoolsWindow() ELSE WriteF('ERROR: Couldn''t access the rawkey converter\n') ENDIF ELSE WriteF('ERROR: Couldn''t open reqtools.library v37\n') ENDIF ELSE WriteF('ERROR: Couldn''t open gadtools.library v37\n') ENDIF shutdownRawkeyCooker() EXCEPT DO IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) SELECT exception CASE ERR_FONT; WriteF('Error: Failed to open Topaz 80\n') CASE ERR_GAD; WriteF('Error: createAllGadgets() failed\n') CASE ERR_KICK; WriteF('Error: Requires V37\n') CASE ERR_PUB; WriteF('Error: Couldn''~t lock default public screen\n') CASE ERR_VIS; WriteF('Error: GetVisualInfoA() failed\n') CASE ERR_WIN; WriteF('Error: OpenWindow() failed\n') ENDSELECT ENDPROC D)}3~E%l Periodic.ecpA$/***************************************************\ ** The Periodic Table (Periodic) v1.01 (02-Nov-97) ** ** By Zebedee/Area 51 Using Amiga E v3.1i ** ** ** ** Opens a window full of gadgets, forming the ** ** periodic table. Clicking on a gadget opens a ** ** small requester, giving information about the ** ** selected element. More info may be added later ** \***************************************************/ M%ODULE 'gadtools','exec/ports','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','graphics/rastport', 'exec/memory','tools/file','workbench/startup' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_LIB,ERR_PUB,ERR_VIS,ERR_WIN, ERR_ASL RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_LIB IF OpenLibrary()=NIL, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF Ge,2TtVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL ENUM GDBT_H1,GDBT_H2,GDBT_HE,GDBT_LI,GDBT_BE,GDBT_B,GDBT_C,GDBT_N,GDBT_O, GDBT_F,GDBT_NE,GDBT_NA,GDBT_MG,GDBT_AL,GDBT_SI,GDBT_P,GDBT_S,GDBT_CL, GDBT_AR,GDBT_K,GDBT_CA,GDBT_SC,GDBT_TI,GDBT_V,GDBT_CR,GDBT_MN,GDBT_FE, GDBT_CO,GDBT_NI,GDBT_CU,GDBT_ZN,GDBT_GA,GDBT_GE,GDBT_AS,GDBT_SE,GDBT_BR, GDBT_KR,GDBT_RB,GDBT_SR,GDBT_Y,GDBT_ZR,GDBT_NB,GDBT_MO,GDBT_TC,GDBT_RU, GDBT_RH,GDBT_PD,GDBT_AG,GDBT_CD,GDBT_IN,9MGGDBT_SN,GDBT_SB,GDBT_TE,GDBT_I, GDBT_XE,GDBT_CS,GDBT_BA,GDBT_LA,GDBT_HF,GDBT_TA,GDBT_W,GDBT_RE,GDBT_OS, GDBT_IR,GDBT_PT,GDBT_AU,GDBT_HG,GDBT_TL,GDBT_PB,GDBT_BI,GDBT_PO,GDBT_AT, GDBT_RN,GDBT_FR,GDBT_RA,GDBT_AC,GDBT_CE,GDBT_PR,GDBT_ND,GDBT_PM,GDBT_SM, GDBT_EU,GDBT_GD,GDBT_TB,GDBT_DY,GDBT_HO,GDBT_ER,GDBT_TM,GDBT_YB,GDBT_LU, GDBT_TH,GDBT_PA,GDBT_U,GDBT_NP,GDBT_PU,GDBT_AM,GDBT_CM,GDBT_BK,GDBT_CF, GDBT_ES,GDBT_FM,GDBT_MD,GDBT_NO,GDBT_LW,GDBT_ABOUT DEF topaz80,mywin=NIL:PTR TO window,title[255]:STRING,text[255]:STRING, bigwin=TRUE,vi PROC handleGadgetEvent(gad:PTR TO gadget) DEF id id:=gad.gadgetid SELECT id CASE GDBT_H1; showElement('H','Hydrogen','1a','1','1.008',FALSE) CASE GDBT_H2; showElement('H','Hydrogen','7a','1','1.008',FALSE) CASE GDBT_HE; showElement('He','Helium','Zero','2','4.003',FALSE) CASE GDBT_LI; showElement('Li','Lithium','1a','3','6.94',FALSE) CASE GDBT_BE; showElement('Be','Berilium','2a','4','9.013',FALSE) CASE GDBT_B; showElement('B','Boron','3a','5','10.82',FALSE) CASE GDBT_C; showElement('C','Carbon','4a','6','12.011',FALSE) CASE GDBT_N; showElement('N','Nitrogen','5a','7','14.008','Main ingredient of\nman-made fertiliser') CASE GDBT_O; showElement('O','Oxygen','6a','8','16.0',FALSE) CASE GDBT_F; showElement('F','Fluorine','7a','9','19.0',FALSE) CASE GDBT_NE; showElement('Ne','Neon','Zero','10','20.183','Used in neon signs') CASE济 GDBT_NA; showElement('Na','Sodium','1a','11','22.991',FALSE) CASE GDBT_MG; showElement('Mg','Magnesium','2a','12','24.32',FALSE) CASE GDBT_AL; showElement('Al','Aluminium','3a','13','26.98',FALSE) CASE GDBT_SI; showElement('Si','Silicon','4a','14','28.09',FALSE) CASE GDBT_P; showElement('P','Phosphorus','5a','15','30.975',FALSE) CASE GDBT_S; showElement('S','Sulfur','6a','16','32.066',FALSE) CASE GDBT_CL; showElement('Cl','Chlorine','7a','17','35.457','Bond'Քs with other elements to make\nacids. Eg: HCl=Hydrochloric acid') CASE GDBT_AR; showElement('Ar','Argon','Zero','18','39.944','A lazy gas') CASE GDBT_K; showElement('K','Potassium','1a','19','39.1',FALSE) CASE GDBT_CA; showElement('Ca','Calcium','2a','20','40.08',FALSE) CASE GDBT_SC; showElement('Sc','Scandium','3b','21','44.96',FALSE) CASE GDBT_TI; showElement('Ti','Titanium','4b','22','47.9',FALSE) CASE GDBT_V; showElement('V','Vanadium','5b','23','50.95' v`,FALSE) CASE GDBT_CR; showElement('Cr','Chromium','6b','24','52.01',FALSE) CASE GDBT_MN; showElement('Mn','Manganese','7b','25','54.94',FALSE) CASE GDBT_FE; showElement('Fe','Iron','8','26','55.85',FALSE) CASE GDBT_CO; showElement('Co','Cobalt','8','27','58.94',FALSE) CASE GDBT_NI; showElement('Ni','Nickel','8','28','58.71',FALSE) CASE GDBT_CU; showElement('Cu','Copper','1b','29','63.54',FALSE) CASE GDBT_ZN; showElement('Zn','Zinc','2b','30','65.38',FALSE) gaF CASE GDBT_GA; showElement('Ga','Gallium','3a','31','69.72',FALSE) CASE GDBT_GE; showElement('Ge','Germanium','4a','32','72.6',FALSE) CASE GDBT_AS; showElement('As','Arsenic','5a','33','74.91',FALSE) CASE GDBT_SE; showElement('Se','Selenium','6a','34','78.96',FALSE) CASE GDBT_BR; showElement('Br','Bromine','7a','35','79.916',FALSE) CASE GDBT_KR; showElement('Kr','Krypton','Zero','36','83.8',FALSE) CASE GDBT_RB; showElement('Rb','Rubidium','1a','37','85.48' ̚n,FALSE) CASE GDBT_SR; showElement('Sr','Strontium','2a','38','87.63',FALSE) CASE GDBT_Y; showElement('Y','Yttrium','3b','39','88.92',FALSE) CASE GDBT_ZR; showElement('Zr','Zirconium','4b','40','91.22',FALSE) CASE GDBT_NB; showElement('Nb','Niobium','5b','41','92.91',FALSE) CASE GDBT_MO; showElement('Mo','Molybdenum','6b','42','95.95',FALSE) CASE GDBT_TC; showElement('Tc','Technetium','7b','43','N/A',FALSE) CASE GDBT_RU; showElement('Ru','Ruthenium','8','4 <:?4','101.1',FALSE) CASE GDBT_RH; showElement('Rh','Rhodium','8','45','102.91',FALSE) CASE GDBT_PD; showElement('Pd','Palladium','8','46','106.4',FALSE) CASE GDBT_AG; showElement('Ag','Silver','1b','47','107.88',FALSE) CASE GDBT_CD; showElement('Cd','Cadmium','2b','48','112.41',FALSE) CASE GDBT_IN; showElement('In','Indium','3a','49','114.82',FALSE) CASE GDBT_SN; showElement('Sn','Tin','4a','50','118.7',FALSE) CASE GDBT_SB; showElement('Sb','Antimony','5a',' q@e51','121.76',FALSE) CASE GDBT_TE; showElement('Te','Tellurium','6a','52','127.61',FALSE) CASE GDBT_I; showElement('I','Iodine','7a','53','126.91',FALSE) CASE GDBT_XE; showElement('Xe','Xenon','Zero','54','131.3',FALSE) CASE GDBT_CS; showElement('Cs','Cesium','1a','55','132.91',FALSE) CASE GDBT_BA; showElement('Ba','Barium','2a','56','137.36',FALSE) CASE GDBT_LA; showElement('La','Lanthanium','3b','57','138.92',FALSE) CASE GDBT_HF; showElement('Hf','HafniuǑ]m','4b','72','178.5',FALSE) CASE GDBT_TA; showElement('Ta','Tantalum','5b','73','180.95',FALSE) CASE GDBT_W; showElement('W','Tungsten','6b','74','183.86','Also known as "Wolfram"') CASE GDBT_RE; showElement('Re','Rhenium','7b','75','186.22',FALSE) CASE GDBT_OS; showElement('Os','Osmium','8','76','190.2',FALSE) CASE GDBT_IR; showElement('Ir','Iridium','8','77','192.2',FALSE) CASE GDBT_PT; showElement('Pt','Platinum','8','78','195.09',FALSE) CASE GDBT_AU; uVshowElement('Au','Gold','1b','79','197.0',FALSE) CASE GDBT_HG; showElement('Hg','Mercury','2b','80','200.61',FALSE) CASE GDBT_TL; showElement('Tl','Thallium','3a','81','204.39',FALSE) CASE GDBT_PB; showElement('Pb','Lead','4a','82','207.21','PB stands for "Plum Bum"') CASE GDBT_BI; showElement('Bi','Bismuth','5a','83','209.0',FALSE) CASE GDBT_PO; showElement('Po','Polonium','6a','84','N/A',FALSE) CASE GDBT_AT; showElement('At','Astatine','7a','85','N/A',FALSE)­ CASE GDBT_RN; showElement('Rn','Radon','Zero','86','N/A',FALSE) CASE GDBT_FR; showElement('Fr','Francium','1a','87','N/A',FALSE) CASE GDBT_RA; showElement('Ra','Radium','2a','88','N/A',FALSE) CASE GDBT_AC; showElement('Ac','Actinium','3b','89','N/A',FALSE) CASE GDBT_CE; showElement('Ce','Cerium','N/A','58','140.13',FALSE) CASE GDBT_PR; showElement('Pr','Praseodymium','N/A','59','140.92',FALSE) CASE GDBT_ND; showElement('Nd','Neodymium','N/A','60','144.27'Qշ,FALSE) CASE GDBT_PM; showElement('Pm','Promethium','N/A','61','N/A',FALSE) CASE GDBT_SM; showElement('Sm','Samarium','N/A','62','150.35',FALSE) CASE GDBT_EU; showElement('Eu','Europium','N/A','63','152.0',FALSE) CASE GDBT_GD; showElement('Gd','Gadolinium','N/A','64','157.26',FALSE) CASE GDBT_TB; showElement('Tb','Terbium','N/A','65','158.93',FALSE) CASE GDBT_DY; showElement('Dy','Dysprosium','N/A','66','162.51',FALSE) CASE GDBT_HO; showElement('Ho','Holmium','N/A','67','164.94',FALSE) CASE GDBT_ER; showElement('Er','Erbium','N/A','68','167.27',FALSE) CASE GDBT_TM; showElement('Tm','Thulium','N/A','69','168.94',FALSE) CASE GDBT_YB; showElement('Yb','Ytterbium','N/A','70','173.04',FALSE) CASE GDBT_LU; showElement('Lu','Lutetium','N/A','71','174.99',FALSE) CASE GDBT_TH; showElement('Th','Thorium','N/A','90','232.05',FALSE) CASE GDBT_PA; showElement('Pa','Protactinium','N/A','91','N/A',FALSE) CASE GDBT_U; sho)0wElement('U','Uranium','N/A','92','238.07',FALSE) CASE GDBT_NP; showElement('Np','Neptunium','N/A','93','N/A',FALSE) CASE GDBT_PU; showElement('Pu','Plutonium','N/A','94','N/A',FALSE) CASE GDBT_AM; showElement('Am','Americium','N/A','95','N/A',FALSE) CASE GDBT_CM; showElement('Cm','Curium','N/A','96','N/A',FALSE) CASE GDBT_BK; showElement('Bk','Berkelium','N/A','97','N/A',FALSE) CASE GDBT_CF; showElement('Cf','Californium','N/A','98','N/A',FALSE) CASE GDBTWsh_ES; showElement('Es','Einsteinium','N/A','99','N/A',FALSE) CASE GDBT_FM; showElement('Fm','Fermium','N/A','100','N/A',FALSE) CASE GDBT_MD; showElement('Md','Mendelevium','N/A','101','N/A',FALSE) CASE GDBT_NO; showElement('No','Nobelium','N/A','102','N/A',FALSE) CASE GDBT_LW; showElement('Lr','Lawrencium','N/A','103','N/A',FALSE) CASE GDBT_ABOUT SetWindowTitles(mywin,'Special greets to Liz','Write also: 6 Bridgefield, Ottery St Mary, Devon, EX11 1HL, ENGLANDK') IF request('About...','The Periodic Table v1.01\n' + 'By Zebedee/Area 51 (02-Nov-97)\n\n' + 'Write: 39 Beckly Court, Armada Way,\n' + 'Plymouth, Devon, PL1 1LD, ENGLAND','Greets|Ok')=1 request('Greets...','Kei/CRN, Thrust/CRN, Gooral/FG, Beaker/SM\n' + 'Chris Good/Plymouth, Spicoally, Freeman/???\n' + 'Eon/CRN, my cat Ciphyr and (all that I''ve\n' + 'not mentioned - no hard feelings??? ;)','Ok') ENDIF SetWindowTitles(mywin,'Periodic v1.01','Parkbench Screen') ENDSELECT ENDPROC PROC showElement(symbol,element,group,anumber,amass,extra) DEF buttons[8]:STRING StringF(title,'\s...',element) StringF(text,'Symbol : \s\nGroup : \s\nA.Number: \s\nA.Mass : \s',symbol,group,anumber,amass) IF extra THEN StrCopy(buttons,'Extra|Ok') ELSE StrCopy(buttons,'Ok') IF req*(uest(title,text,buttons)=1 StrCopy(text,'Extra: ') StrAdd(text,title) request(text,extra,'Ok') ENDIF ENDPROC PROC createAllGadgets(glistptr:PTR TO LONG) DEF gad,ng:PTR TO newgadget gad:=CreateContext(glistptr) ng:=[14,16,22,12,'H',topaz80,GDBT_H1,NIL,vi,0]:newgadget gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 366 ng.topedge := 16 ng.gadgettext := 'H' ng.gadgetid := GDBT_H2 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge s := 388 ng.topedge := 16 ng.gadgettext := 'He' ng.gadgetid := GDBT_HE gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 14 ng.topedge := 28 ng.gadgettext := 'Li' ng.gadgetid := GDBT_LI gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 36 ng.gadgettext := 'Be' ng.gadgetid := GDBT_BE gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 278 ng.gadgettext := 'B' ng.gadgetid := GDBT_B gad:=CreateGadgetA(BUTTON_KINDN!,gad,ng,NIL) ng.leftedge := 300 ng.gadgettext := 'C' ng.gadgetid := GDBT_C gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 322 ng.gadgettext := 'N' ng.gadgetid := GDBT_N gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 344 ng.gadgettext := 'O' ng.gadgetid := GDBT_O gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 366 ng.gadgettext := 'F' ng.gadgetid := GDBT_F gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 388 ng.gadgettext := 'Ne' ng.gadgetid := GDBT_NE gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 14 ng.topedge := 40 ng.gadgettext := 'Na' ng.gadgetid := GDBT_NA gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 36 ng.gadgettext := 'Mg' ng.gadgetid := GDBT_MG gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 278 ng.gadgettext := 'Al' ng.gadgetid := GDBT_AL gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL)C? ng.leftedge := 300 ng.gadgettext := 'Si' ng.gadgetid := GDBT_SI gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 322 ng.gadgettext := 'P' ng.gadgetid := GDBT_P gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 344 ng.gadgettext := 'S' ng.gadgetid := GDBT_S gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 366 ng.gadgettext := 'Cl' ng.gadgetid := GDBT_CL gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge ^¯B := 388 ng.gadgettext := 'Ar' ng.gadgetid := GDBT_AR gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.topedge := 52 ng.leftedge := 14 ng.gadgettext := 'K' ng.gadgetid := GDBT_K gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 36 ng.gadgettext := 'Ca' ng.gadgetid := GDBT_CA gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 58 ng.gadgettext := 'Sc' ng.gadgetid := GDBT_SC gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.lefte3dge := 80 ng.gadgettext := 'Ti' ng.gadgetid := GDBT_TI gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 102 ng.gadgettext := 'V' ng.gadgetid := GDBT_V gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 124 ng.gadgettext := 'Cr' ng.gadgetid := GDBT_CR gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 146 ng.gadgettext := 'Mn' ng.gadgetid := GDBT_MN gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 168  ng.gadgettext := 'Fe' ng.gadgetid := GDBT_FE gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 190 ng.gadgettext := 'Co' ng.gadgetid := GDBT_CO gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 212 ng.gadgettext := 'Ni' ng.gadgetid := GDBT_NI gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 234 ng.gadgettext := 'Cu' ng.gadgetid := GDBT_CU gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 256 ng.gadgettexHNt := 'Zn' ng.gadgetid := GDBT_ZN gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 278 ng.gadgettext := 'Ga' ng.gadgetid := GDBT_GA gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 300 ng.gadgettext := 'Ge' ng.gadgetid := GDBT_GE gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 322 ng.gadgettext := 'As' ng.gadgetid := GDBT_AS gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 344 ng.gadgettext := 'Se'  B%ng.gadgetid := GDBT_SE gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 366 ng.gadgettext := 'Br' ng.gadgetid := GDBT_BR gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 388 ng.gadgettext := 'Kr' ng.gadgetid := GDBT_KR gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.topedge := 64 ng.leftedge := 14 ng.gadgettext := 'Rb' ng.gadgetid := GDBT_RB gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 36 ng.gadgettext :=!c 'Sr' ng.gadgetid := GDBT_SR gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 58 ng.gadgettext := 'Y' ng.gadgetid := GDBT_Y gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 80 ng.gadgettext := 'Zr' ng.gadgetid := GDBT_ZR gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 102 ng.gadgettext := 'Nb' ng.gadgetid := GDBT_NB gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 124 ng.gadgettext := 'Mo' ng.gadge"L(tid := GDBT_MO gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 146 ng.gadgettext := 'Tc' ng.gadgetid := GDBT_TC gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 168 ng.gadgettext := 'Ru' ng.gadgetid := GDBT_RU gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 190 ng.gadgettext := 'Rh' ng.gadgetid := GDBT_RH gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 212 ng.gadgettext := 'Pd' ng.gadgetid := GDB#VDPT_PD gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 234 ng.gadgettext := 'Ag' ng.gadgetid := GDBT_AG gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 256 ng.gadgettext := 'Cd' ng.gadgetid := GDBT_CD gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 278 ng.gadgettext := 'In' ng.gadgetid := GDBT_IN gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 300 ng.gadgettext := 'Sn' ng.gadgetid := GDBT_SN gad:=$U/CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 322 ng.gadgettext := 'Sb' ng.gadgetid := GDBT_SB gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 344 ng.gadgettext := 'Te' ng.gadgetid := GDBT_TE gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 366 ng.gadgettext := 'I' ng.gadgetid := GDBT_I gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 388 ng.gadgettext := 'Xe' ng.gadgetid := GDBT_XE gad:=CreateGadgetA(%}BUTTON_KIND,gad,ng,NIL) ng.topedge := 76 ng.leftedge := 14 ng.gadgettext := 'Cs' ng.gadgetid := GDBT_CS gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 36 ng.gadgettext := 'Ba' ng.gadgetid := GDBT_BA gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 58 ng.gadgettext := 'La' ng.gadgetid := GDBT_LA gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 80 ng.gadgettext := 'Hf' ng.gadgetid := GDBT_HF gad:=CreateGa&Ù\dgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 102 ng.gadgettext := 'Ta' ng.gadgetid := GDBT_TA gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 124 ng.gadgettext := 'W' ng.gadgetid := GDBT_W gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 146 ng.gadgettext := 'Re' ng.gadgetid := GDBT_RE gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 168 ng.gadgettext := 'Os' ng.gadgetid := GDBT_OS gad:=CreateGadgetA(BUTTON_K' IND,gad,ng,NIL) ng.leftedge := 190 ng.gadgettext := 'Ir' ng.gadgetid := GDBT_IR gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 212 ng.gadgettext := 'Pt' ng.gadgetid := GDBT_PT gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 234 ng.gadgettext := 'Au' ng.gadgetid := GDBT_AU gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 256 ng.gadgettext := 'Hg' ng.gadgetid := GDBT_HG gad:=CreateGadgetA(BUTTON_KIND,gad,ng,N(g7IL) ng.leftedge := 278 ng.gadgettext := 'Tl' ng.gadgetid := GDBT_TL gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 300 ng.gadgettext := 'Pb' ng.gadgetid := GDBT_PB gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 322 ng.gadgettext := 'Bi' ng.gadgetid := GDBT_BI gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 344 ng.gadgettext := 'Po' ng.gadgetid := GDBT_PO gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.lef) rstedge := 366 ng.gadgettext := 'At' ng.gadgetid := GDBT_AT gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 388 ng.gadgettext := 'Rn' ng.gadgetid := GDBT_RN gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.topedge := 88 ng.leftedge := 14 ng.gadgettext := 'Fr' ng.gadgetid := GDBT_FR gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 36 ng.gadgettext := 'Ra' ng.gadgetid := GDBT_RA gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) *ĝ\0 ng.leftedge := 58 ng.gadgettext := 'Ac' ng.gadgetid := GDBT_AC gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.topedge := 100 ng.leftedge := 80 ng.gadgettext := 'Ce' ng.gadgetid := GDBT_CE gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 102 ng.gadgettext := 'Pr' ng.gadgetid := GDBT_PR gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 124 ng.gadgettext := 'Nd' ng.gadgetid := GDBT_ND gad:=CreateGadgetA(BUTTON_KIND,gad+{3M,ng,NIL) ng.leftedge := 146 ng.gadgettext := 'Pm' ng.gadgetid := GDBT_PM gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 168 ng.gadgettext := 'Sm' ng.gadgetid := GDBT_SM gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 190 ng.gadgettext := 'Eu' ng.gadgetid := GDBT_EU gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 212 ng.gadgettext := 'Gd' ng.gadgetid := GDBT_GD gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) n,ƣg.leftedge := 234 ng.gadgettext := 'Tb' ng.gadgetid := GDBT_TB gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 256 ng.gadgettext := 'Dy' ng.gadgetid := GDBT_DY gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 278 ng.gadgettext := 'Ho' ng.gadgetid := GDBT_HO gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 300 ng.gadgettext := 'Er' ng.gadgetid := GDBT_ER gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge -lj«` := 322 ng.gadgettext := 'Tm' ng.gadgetid := GDBT_TM gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 344 ng.gadgettext := 'Yb' ng.gadgetid := GDBT_YB gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 366 ng.gadgettext := 'Lu' ng.gadgetid := GDBT_LU gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.topedge := 113 ng.leftedge := 80 ng.gadgettext := 'Th' ng.gadgetid := GDBT_TH gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng..5(leftedge := 102 ng.gadgettext := 'Pa' ng.gadgetid := GDBT_PA gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 124 ng.gadgettext := 'U' ng.gadgetid := GDBT_U gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 146 ng.gadgettext := 'Np' ng.gadgetid := GDBT_NP gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 168 ng.gadgettext := 'Pu' ng.gadgetid := GDBT_PU gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := /ɞU190 ng.gadgettext := 'Am' ng.gadgetid := GDBT_AM gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 212 ng.gadgettext := 'Cm' ng.gadgetid := GDBT_CM gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 234 ng.gadgettext := 'Bk' ng.gadgetid := GDBT_BK gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 256 ng.gadgettext := 'Cf' ng.gadgetid := GDBT_CF gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 278 ng.gad0 gettext := 'Es' ng.gadgetid := GDBT_ES gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 300 ng.gadgettext := 'Fm' ng.gadgetid := GDBT_FM gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 322 ng.gadgettext := 'Md' ng.gadgetid := GDBT_MD gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 344 ng.gadgettext := 'No' ng.gadgetid := GDBT_NO gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 366 ng.gadgettext := '1ҘLw' ng.gadgetid := GDBT_LW gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ng.leftedge := 14 ng.width := 46 ng.gadgettext := 'About' ng.gadgetid := GDBT_ABOUT gad:=CreateGadgetA(BUTTON_KIND,gad,ng,NIL) ENDPROC gad PROC processWindowEvents(mywin:PTR TO window) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad,wanted=TRUE WHILE wanted Wait(Shl(1,mywin.userport.sigbit)) WHILE (wanted) AND (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress 2y3 imsgClass:=imsg.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_MOUSEMOVE; handleGadgetEvent(gad) CASE IDCMP_GADGETUP; handleGadgetEvent(gad) CASE IDCMP_CHANGEWINDOW;redrawWindow() CASE IDCMP_CLOSEWINDOW SetWindowTitles(mywin,-1,'Uh oh!') IF request('Quit Periodic...','Are you sure?','Yes|NO!')=1 THEN wanted:=FALSE SetWindowTitles(mywin,-1,'Parkbench Screen') ENDSELEC3͏WgT ENDWHILE ENDWHILE ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO screen,glist=NIL,scrwidth:PTR TO LONG topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) scrwidth:=mysc.width-270 LEA zoom(PC),A0 MOVEQ.L #0,D0 MOVE.L scrwidth,D0 MOVE.W D0,(A0) vi:=GetVisualInfoA(mysc,[NIL]) createAllGadgets({glist}) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'Periodic v1.01', 4 WA_SCREENTITLE,'Parkbench Screen', WA_GADGETS, glist, WA_SMARTREFRESH, TRUE, WA_LEFT, (mysc.width/2)-212, WA_TOP, (mysc.height/2)-66, WA_WIDTH, 424, WA_HEIGHT, 132, WA_DRAGBAR, TRUE, WA_DEPTHGADGET, TRUE, WA_ACTIVATE, TRUE, WA_CLOSEGADGET, TRUE, 5KYf WA_RMBTRAP, TRUE, WA_IDCMP, IDCMP_CLOSEWINDOW OR IDCMP_REFRESHWINDOW OR BUTTONIDCMP OR IDCMP_CHANGEWINDOW, WA_ZOOM, {zoom}, WA_PUBSCREEN,mysc,NIL]) Gt_RefreshWindow(mywin,NIL) redrawWindow() processWindowEvents(mywin) EXCEPT DO IF mywin THEN CloseWindow(m6оywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC copyListToChip(data) DEF size,mem size:=ListLen(data)*SIZEOF LONG mem:=NewM(size,MEMF_CHIP) CopyMemQuick(data,mem,size) ENDPROC mem PROC redrawWindow() DEF titlegfx:image IF mywin.height=132 titlegfx:=[74,16,192,26,3,copyListToChip([ $00000000,$00000000,$00000000,$00000000,$00000000,$00000020,$00007Ѫ0000,$00000000,$00000000,$00000000,$00000000, $00000060,$00000000,$00000000,$00000000,$00000000,$00000000,$00000060,$00000000,$00000000,$00000000,$00000000, $00000000,$00000060,$00878600,$00001840,$00003C00,$00378000,$043E0006,$00C00060,$00060000,$00001860,$00000000, $00200000,$00300000,$00C00060,$00060610,$C2001843,$08610861,$0C210C20,$00307086,$10861060,$00060610,$C30000C3, $08670861,$0C210CF0,$00300086,$10861860,$000606108om),$07001FC0,$18600861,$0C210C00,$00300086,$10803860,$00060610, $FE001803,$F8600861,$0C210C00,$00303086,$1087F060,$00060610,$C0001803,$00600861,$0C210C00,$00303086,$10860060, $00060618,$00001800,$00600C03,$80218070,$00300080,$30C00060,$001E1E79,$FE007807,$F9E03CFF,$1FF79FE0,$00F07FDF, $F3CFF060,$00000000,$00000000,$00000000,$00000000,$00000000,$00000060,$00000000,$00000000,$00000000,$00000000, $00000000,$00000060,$00000000,$009y000000,$00000000,$00000000,$00000000,$00000060,$00000000,$19000198,$06000180, $00009000,$00007C60,$00000060,$00000000,$19000018,$00000180,$00099000,$00000060,$00000060,$00000000,$01330031, $26448912,$24181322,$44806460,$00000060,$00000000,$19330060,$26409902,$06319320,$60C00660,$00000060,$00000000, $198300C3,$E64F993E,$7C619307,$C4C00660,$00000060,$00000000,$01930000,$00600180,$00C19300,$00C00420,$00000060, $00000000,$1F0301:Ի@F9,$E3C78F1E,$3C819B03,$C7C03CF0,$00000060,$00000000,$001E0000,$00000000,$00000000,$00000000, $00000060,$00000000,$00000000,$00000000,$00000000,$00000000,$00000060,$7FFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF, $FFFFFFFF,$FFFFFFE0,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFC0,$C0000000,$00000000,$00000000, $00000000,$00000000,$00000000,$C0000000,$00000000,$00000000,$00000000,$00000000,$00000000,$C3FF7800,$0001FF00, $;q˕0000F000,$03DE0000,$1FF80078,$0F000000,$C0787800,$0001E780,$00000000,$03C00000,$03C00078,$0F000000,$C0787FC7, $F801E79F,$E7FCF3FC,$7FDE7F80,$03C1FE7F,$CF3FC000,$C07879EF,$3C01E7BC,$F79EF79E,$F3DEF3C0,$03C00F79,$EF79E000, $C07879EF,$3C01FF3C,$F780F79E,$F3DEF000,$03C00F79,$EF79E000,$C07879EF,$F801E03F,$E780F79E,$F3DEF000,$03C1FF79, $EF7FC000,$C07879EF,$0001E03C,$0780F79E,$F3DEF000,$03C3CF79,$EF780000,$C07879EF,$0001E03C,$0780F79E,$F3DEF3C0, < $03C3CF79,$EF780000,$C07879E7,$F801E01F,$E780F3FC,$7FDE7F80,$03C1FF7F,$CF3FC000,$C0000000,$00000000,$00000000, $00000000,$00000000,$00000000,$C0000000,$00000000,$00000000,$00000000,$00000000,$00000000,$C0000000,$00000000, $00000000,$00000000,$00000000,$00000000,$C0000000,$7C0007E0,$18000600,$0013C000,$0001F980,$00000000,$C0000000, $66000060,$18000600,$00366000,$00018380,$00000000,$C0000000,$66CC00C7,$9F1E3E78,$F0666F8F,$1E01=ĝ-F180,$00000000, $C0000000,$7CCC018C,$D9B366CD,$98C7ECD9,$83001980,$00000000,$C0000000,$66CC030F,$D9BF66FD,$F9866C1F,$9F001980, $00000000,$C0000000,$667C060C,$19B066C1,$83066C18,$33019980,$00000000,$C0000000,$7C0C07E7,$8F1E3C78,$F2066C0F, $1F00F3C0,$00000000,$C0000000,$00780000,$00000000,$00000000,$00000000,$00000000,$C0000000,$00000000,$00000000, $00000000,$00000000,$00000000,$C0000000,$00000000,$00000000,$00000000,$00000000>[>Y,$00000000,$80000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00?_2Y000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$000000@_2]00,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$A߽K00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000, $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000]), 3,0,NIL]:imagBܾe DrawImage(mywin.rport,titlegfx,0,0) DrawBevelBoxA(mywin.rport,8,13,408,115,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) bigwin:=TRUE ELSE bigwin:=FALSE ENDIF ENDPROC PROC request(title,text,button) DEF opt opt:=EasyRequestArgs(0,[SIZEOF easystruct,0,title,text,button]:easystruct,0,0) ENDPROC opt PROC main() HANDLE KickVersion(37) gadtoolsbase:=OpenLibrary('gadtools.library',37) gadtoolsWindow() EXCEPT DO IF gadtoolsbase THEN CloseLibrary(gadtoolsbaseCN) SELECT exception CASE ERR_FONT; request('Fatal Error...','Unable to open topaz.font size 8','Ok') CASE ERR_GAD; request('Fatal Error...','Unable to create all gadgets','Ok') CASE ERR_KICK; WriteF('ERROR: Requires Kickstart v37 (KS2+)\n') CASE ERR_LIB; request('Fatal Error...','Unable to open gadtools.library v37','Ok') CASE ERR_PUB; request('Fatal Error...','Couldn''t lock default public screen','Ok') CASE ERR_VIS; request('Fatal Error...','Unable to oDcbtain visual info','Ok') CASE ERR_WIN; request('Fatal Error...','Unable to open the window','Ok') ENDSELECT ENDPROC version: CHAR '$VER: Periodic v1.01 (02-Nov-97)',0 zoom: INT 370,11,200,1118     [E%l ConvertFD.ep!w-> $VER: ConvertFD v1.00 (31-Jan-98) -> By Zebedee/Area 51 MODULE 'gadtools','exec/ports','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','libraries/reqtools', 'reqtools' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_PUB,ERR_VIS,ERR_WIN RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN( IF OpenWindowTagList()=NIL ENUM GDST_SOURCE,GDBT_GETSRC,GDST_TARGET,GDBT_GETTRG,GDBT_PREFS,GDBT_ABOUT, GDBT_CONVERT,GDCB_FXCODES,GDCB_POSHEX,GDCB_NEGHEX,GDCB_DENARY, GDCB_EDLINES,GDCB_BIAS,GDCB_FFEED,GDBT_SAVE,GDBT_LOAD CONST T=TRUE,F=FALSE /***************************************************************************\ ** VARIABLE DEFINITIONS ** \***************************************************************************P:/ DEF topaz80,mywin=NIL:PTR TO window,wanted=T,my_gads[16]:ARRAY OF LONG,vi, temps[255]:STRING,bigwin=F,temp1:PTR TO LONG,printfx=F,poshex=F,neghex=F, denary=F,edlines=F,req:PTR TO rtfilerequester,defdirs[255]:STRING, buf[255]:STRING,source[255]:STRING,target[255]:STRING,private=F, lvo=0:PTR TO LONG,defdirt[255]:STRING,bias=F,topborder=NIL:PTR TO LONG, winHeight=141:PTR TO LONG,ffeed /***************************************************************************\ **q HANDLE GADGET EVENTS ** \***************************************************************************/ PROC handleGadgetEvent(gad:PTR TO gadget,code) DEF id id:=gad.gadgetid StrCopy(temps,gad.specialinfo::stringinfo.buffer) SELECT id CASE GDST_SOURCE;StrCopy(source,temps) CASE GDBT_GETSRC;getSourceFilename() CASE GDST_TARGET;StrCopy(target,temps) CASE GDBT_GETTRG;getTargetFilename() CASE GDBT_ABOUT;showAboB}ut() CASE GDBT_PREFS;ZipWindow(mywin) CASE GDBT_SAVE;savePrefs() CASE GDBT_LOAD;loadPrefs() CASE GDCB_FXCODES;printfx:=code=1 CASE GDCB_POSHEX;poshex:=code=1 CASE GDCB_NEGHEX;neghex:=code=1 CASE GDCB_DENARY;denary:=code=1 CASE GDCB_EDLINES;edlines:=code=1 CASE GDCB_BIAS;bias:=code=1 CASE GDCB_FFEED;ffeed:=code=1 CASE GDBT_CONVERT;checkConvert() ENDSELECT ENDPROC /***************************************************************************m Correct the y-pos MOVE.W 6(A0),D0 MOVE.L topborder,D1 ADD.L D1,D0 SUB.L #11,D0 MOVE.W D0,6(A0) -> Correct the height MOVE.L D0,winHeight mywin:=OpmenWindowTagList(NIL, [WA_TITLE,'ConvertFD v1.00', WA_SCREENTITLE,'Parkbench Screen', WA_GADGETS, glist, WA_RMBTRAP, T, WA_LEFT, 0, WA_TOP, topborder, WA_WIDTH, 315, WA_HEIGHT, topborder+53, WA_DRAGBAR, T, WA_DEPTHGADGET, T, WA_ACTIVATE, T, WA_CLOSEGADGET, T, WA_SMARTREFRESH,T, WA_SIZEBBOTTO{2M, T, WA_ZOOM, {zoom}, WA_IDCMP, IDCMP_CLOSEWINDOW OR IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR STRINGIDCMP OR IDCMP_CHANGEWINDOW, WA_PUBSCREEN,mysc,NIL]) Gt_RefreshWindow(mywin,NIL) bevelBox(8,topborder+2,299,29) -> string gads bevelBox(8,topborder+33,299,16) -> button gads setPrefs(FALSE) processWindowEvents() EXCEPT DO IF mywin THEN Close]Window(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC /***************************************************************************\ ** DRAW A BEVEL BOX ** \***************************************************************************/ PROC bevelBox(x,y,w,h) DrawBevelBoxA(mywin.rport,x,y,w,h,[GT_VISUALINFO,vi,NIL]) ENDPROC /*ܹ**************************************************************************\ ** REDRAW ALL THE INFO LIKE INTUITEXT AFTER THE WINDOW HAS BEEN ZIPPED ** \***************************************************************************/ PROC redrawWindow() IF mywin.height=winHeight bigwin:=TRUE bevelBox(8,topborder+51,299,87) -> checkbox gads ELSE bigwin:=FALSE ENDIF ENDPROC /***************************************************************************\ ** OPEN A BAS>IC REQUESTER VIA INTUITION TO REPORT PROGRAM ERRORS ** \***************************************************************************/ PROC programError(text) EasyRequestArgs(0,[SIZEOF easystruct,0,'Error...',text,'Ok']:easystruct,0,0) ENDPROC /***************************************************************************\ ** SAVE THE PREFERENCES TO S:Convertfd.CGF ** \***************************************************************************/ PROCܩ{ savePrefs() DEF outf=NIL IF rtRequest('Save Prefs...','Are you sure ?','_Yes|_NO!',0)=1 LEA prefs(PC),A0 MOVE.B #0,3(A0) -> Revision IF printfx THEN MOVE.B #1,4(A0) ELSE MOVE.B #0,4(A0) IF poshex THEN MOVE.B #1,5(A0) ELSE MOVE.B #0,5(A0) IF neghex THEN MOVE.B #1,6(A0) ELSE MOVE.B #0,6(A0) IF denary THEN MOVE.B #1,7(A0) ELSE MOVE.B #0,7(A0) IF edlines THEN MOVE.B #1,8(A0) ELSE MOVE.B #0,8(A0) IF bias THEN MOVE.B #1,9(A0) ELSE MOVE.B #0,9(A0) IF ffeed THEN MOVE.B #1,10(A0) ELSE MOVE.B #0,10(A0) IF outf:=Open('S:ConvertFD.cfg',NEWFILE) Write(outf,{prefs},11) Close(outf) rtRequest('Save Prefs...','Prefs saved ok','_Ok',0) ELSE rtRequest('Save Prefs...','Error saving prefs!','_Ok',0) ENDIF ENDIF ENDPROC /***************************************************************************\ ** LOAD THE PREFERENCES FROM S:Convertfd.CGF ** \***************************************************************************/ PROC loadPrefs() IF rtRequest('Load Prefs...','Are you sure ?','_Yes|_NO!',0)=1 THEN setPrefs(T) ENDPROC PROC setPrefs(verbose) printfx:=F poshex:=F neghex:=F denary:=F edlines:=F bias:=F ffeed:=F IF readPrefs(verbose) LEA prefs(PC),A0 MOVE.B 3(A0),D0 CMP.B #0,D0 BNE no MOVE.B 4(A0),D0 CMP.B #1,D0 BNE.B c2 printfx:=T c2: MOVE.B 5(A0),D0 CMP.B #1,D0 BNE.v%IB c3 poshex:=T c3: MOVE.B 6(A0),D0 CMP.B #1,D0 BNE.B c4 neghex:=T c4: MOVE.B 7(A0),D0 CMP.B #1,D0 BNE.B c5 denary:=T c5: MOVE.B 8(A0),D0 CMP.B #1,D0 BNE.B c6 edlines:=T c6: MOVE.B 9(A0),D0 CMP.B #1,D0 BNE.B c7 bias:=T c7: MOVE.B 10(A0),D0 CMP.B #1,D0 BNE.B ok ffeed:=T ok: setGadget(GDCB_FXCODES,GTCB_CHECKED,printfx) setGadget(GDCB_POSHEX,GTCB_CHECKED,poshex) setGadget(GDCB_NEGHEX,GTCB_C$0 IF StrLen(target)>0 $d IF rtRequest('Convert...','Are you sure ?','_Yes|NO!',0)=1 IF inh:=Open(source,OLDFILE) IF outh:=Open(target,NEWFILE) convertFile(inh,outh) Close(inh) Close(outh) IF StrCmp(temps,'*',1) rtRequest('Convert...','File has been\nconverted!','_Ok',0,T) ELSE StringF(buf,'Missing "##END"\nUnexpected end of file!\n\n' + 'The file\n"\s"\nmay not have been a%8n FD\n' + 'so what shall I do with\n"\s"\nwhich could be junk?',source,target) IF rtRequest('Error...',buf,'_Delete|_Leave',0,T)=1 THEN DeleteFile(target) ENDIF ELSE Close(inh) rtRequest('Error...','Unable to create\ntarget file!','_Ok',0,T) ENDIF ELSE rtRequest('Error...','Unable to open\nsource file!','_Ok',0,T) ENDIF ENDIF ENDIF ENDIF ENDPROC PROC &nconvertFile(inh,outh) DEF err:PTR TO LONG,txt[255]:STRING,mode[11]:STRING,tmp:PTR TO LONG lvo:=0 IF bigwin THEN ZipWindow(mywin) gadgetState(GDST_SOURCE,F) gadgetState(GDBT_GETSRC,F) gadgetState(GDST_TARGET,F) gadgetState(GDBT_GETTRG,F) gadgetState(GDBT_PREFS,F) gadgetState(GDBT_ABOUT,F) gadgetState(GDBT_CONVERT,F) ModifyIDCMP(mywin,IDCMP_REFRESHWINDOW) IF printfx THEN stylesOn(outh,3) REPEAT err:=ReadStr(inh,txt) IF err THEN StrCopy(txt,'##end!') 'Q IF StrCmp(txt,'#',1) extractCommand(outh,txt) ELSE IF StrCmp(txt,'*',1) extractComment(outh,txt) ELSE IF poshex StringF(mode,'-$\z\h[4] ',lvo) Fputs(outh,mode) ENDIF IF denary StringF(mode,'-\z\d[4] ',lvo) Fputs(outh,mode) ENDIF IF neghex tmp:=lvo-(lvo*2) StringF(mode,'\z\h[8] ',tmp) RightStr(mode,mode,5) StringF(mode,'-$\s',mode) (Ǻ Fputs(outh,mode) ENDIF Fputs(outh,txt) IF private IF printfx THEN stylesOn(outh,2) Fputs(outh,' *PRIVATE*') IF printfx THEN stylesOff(outh,2) ENDIF FputC(outh,10) lvo:=lvo+6 ENDIF ENDIF UpperStr(txt) UNTIL StrCmp(txt,'##END',5) StrCopy(temps,'*') IF StrCmp(txt,'##END!',6) THEN StrCopy(temps,target) IF printfx THEN stylesOff(outh,3) IF printfx AND ffeed THEN FputC(outh,12) Mo)edifyIDCMP(mywin,IDCMP_CLOSEWINDOW OR IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR STRINGIDCMP OR IDCMP_CHANGEWINDOW) gadgetState(GDST_SOURCE,T) gadgetState(GDBT_GETSRC,T) gadgetState(GDST_TARGET,T) gadgetState(GDBT_GETTRG,T) gadgetState(GDBT_PREFS,T) gadgetState(GDBT_ABOUT,T) gadgetState(GDBT_CONVERT,T) ENDPROC PROC extractCommand(outh,txt) IF InStr(txt,'bias',0)>-1 THEN setBias(outh,txt) IF InStr(txt,'private',0)>-1 THEN private:=TRUE ELSE private:=FALSE ENDPROC PR* '0.LOC extractComment(outh,txt) DEF comment[255]:STRING IF StrLen(txt)>2 MidStr(comment,txt,2,ALL) ELSE StrCopy(comment,'') ENDIF IF edlines IF InStr(comment,'--',0)>-1 IF req:=RtAllocRequestA(RT_REQINFO,NIL) RtGetStringA(comment,255,NIL,req,[RTGS_GADFMT,'_Ok',RTGS_TEXTFMT,'Enter comment text:\n(Press RETURN when finished!)',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) RtFreeRequest(req) ELSE programError('Unable to open s+ kqݥtring requester') ENDIF ENDIF ENDIF IF StrLen(comment)>2 UpperStr(comment) IF printfx THEN IF lvo=0 THEN stylesOn(outh,0) ELSE stylesOn(outh,1) Fputs(outh,comment) IF printfx THEN IF lvo=0 THEN stylesOff(outh,0) ELSE stylesOff(outh,1) IF lvo=0 THEN FputC(outh,10) FputC(outh,10) ENDIF ENDPROC PROC setBias(outh,txt) MidStr(temps,txt,7,StrLen(txt)-5) lvo:=Val(temps,NIL) IF bias AND (lvo>30) IF printfx FputC(outh,27) FputC(ou, ^(th,14) ENDIF Fputs(outh,'\eG************* LVO CHANGED *************\eH') FputC(outh,10) ENDIF ENDPROC PROC stylesOn(outh,type) SELECT type CASE 0 FputC(outh,27) FputC(outh,18) Fputs(outh,'\eE\e-1') -> File ID (lib/dev/etc.) CASE 1;Fputs(outh,'\eE\e4') -> Comments CASE 2;Fputs(outh,'\eE') -> Private functions CASE 3;Fputs(outh,'\ex1\eG') -> Entire file ENDSELECT ENDPROC PROC stylesOff(outh,type) SELECT type CASE 0;Fputs(outh,- N'\eF\e-0') FputC(outh,27) FputC(outh,15) CASE 1;Fputs(outh,'\eF\e5') CASE 2;Fputs(outh,'\eF') CASE 3;Fputs(outh,'\ex0\eH') ENDSELECT ENDPROC /***************************************************************************\ ** ENABLE AND DISABLE A GADGET ** \***************************************************************************/ PROC gadgetState(gad_id,enable) IF enable THEN OnGadget(my_gads[gad_id],mywin,NIL) E. y&LSE OffGadget(my_gads[gad_id],mywin,NIL) ENDPROC PROC getSourceFilename() StrCopy(source,requestFile('Select .FD file...',defdirs,T)) setGadget(GDST_SOURCE,GTST_STRING,source) ENDPROC PROC getTargetFilename() StrCopy(target,requestFile('Select file to save as...',defdirt,F)) setGadget(GDST_TARGET,GTST_STRING,target) ENDPROC /***************************************************************************\ ** THE MAIN PROGRAM /I ** \***************************************************************************/ PROC main() HANDLE KickVersion(37) IF gadtoolsbase:=OpenLibrary('gadtools.library',37) IF reqtoolsbase:=OpenLibrary('reqtools.library',37) gadtoolsWindow() ELSE programError('Unable to open\nreqtools.library v37') ENDIF ELSE programError('Unable to open\ngadtools.library v37') ENDIF EXCEPT DO IF reqtoolsbase THEN CloseLibrary(reqtoolsbase) IF gadtoolsbase THEN Cl0'oseLibrary(gadtoolsbase) SELECT exception CASE ERR_FONT; programError('Unable to open topaz.font 8') CASE ERR_GAD; programError('Unable to create all gadgets') CASE ERR_KICK; WriteF('ERROR: Requires Kickstart v37 (KS2+)\n') CASE ERR_PUB; programError('Unable to lock default public screen') CASE ERR_VIS; programError('Unable to get visual info') CASE ERR_WIN; programError('Unable to open the window') ENDSELECT ENDPROC zoom: INT 0,11,315,153 prefs: CHAR1HmȘ 'CFD',0,0,0,0,0,0,0 version: CHAR '$VER: ConvertFD v1.00 (31-Jan-98)',0S#E%l Streader.e6p4.f-> Streader v1.02 by Zebedee/CRN (02-Feb-97) -> Strips the 32 byte header off executable files MODULE 'dos' ENUM ERR_USAGE DEF flen:PTR TO LONG,srchandle=NIL,trghandle=NIL,counter:PTR TO LONG, source[255]:STRING,target[255]:STRING,header[32]:STRING, rchar[1]:STRING,head[4]:STRING PROC main() HANDLE DEF options:PTR TO LONG,rdargs StrCopy('',source) options:=[0,0] IF rdargs:=ReadArgs('SOURCE/A,TARGET/A',options,NIL) IF options[0] THEN StrCopy(source,options[0]) Z IF options[1] THEN StrCopy(target,options[1]) FreeArgs(rdargs) ENDIF IF StrCmp(source,'') THEN Raise(ERR_USAGE) IF source=NIL THEN Raise(ERR_USAGE) WriteF('\e[0;1;4mStreader v1.02 by Zebedee 1997 Carnage (02-Feb-97)\e[0m\n\n'); flen:=FileLength(source) IF flen<40 WriteF('ERROR: Source file not large enough!\n') CleanUp(20) ENDIF StrAdd(target,'.nh') srchandle:=Open(source,OLDFILE) trghandle:=Open(target,NEWFILE) IF (flen<1) OR (srchandle=NIL) F WriteF('ERROR: File "\s" not found!\n',source) CleanUp(20) ELSE IF trghandle=NIL THEN WriteF('ERROR: Can''t create target file!\n') ENDIF ReadStr(srchandle,head) IF (head[]<>0) AND (head[1]<>0) AND (head[2]<>3) AND (head[3]<>$f3) Close(trghandle) Close(srchandle) WriteF('ERROR: File "\s" is not an executable!\n',source) CleanUp(20) ENDIF Close(srchandle) srchandle:=Open(source,OLDFILE) WriteF('Length of file is \d bytes\n',flen) ReadStr(srckQhandle,header) FOR counter:=1 TO flen-32 rchar:=Inp(srchandle) Out(trghandle,rchar) ENDFOR Close(trghandle) Close(srchandle) WriteF('New length of file is \d bytes\n',flen-32) CleanUp(20) EXCEPT DO SELECT exception CASE ERR_USAGE; WriteF('Required argument missing\n') ENDSELECT ENDPROC vers: CHAR '$VER: Streader v1.02 (02-Feb-97)',0d=E% VidCalc.paspۑUPROGRAM VidCalc; USES crt,dos; VAR recordings,ctr:INTEGER; time:ARRAY [1..20] OF INTEGER; speed:ARRAY [1..20] OF CHAR; PROCEDURE about; BEGIN WRITELN('VidCalc v1.00 by Zebedee/A51 (11-Sep-97) 1997 Area 51'); WRITELN; WRITELN('Calculates the remaining time on video cassettes.'); HALT(0); END; PROCEDURE getinput; BEGIN WRITE('How many recordings? '); READLN(recordings); IF (recordings<0) OR (recordings>20) THEN BEGIN WRITELN('Program aborted.'); HALT(0)ێ; END; WRITELN; FOR ctr:=1 TO recordings DO BEGIN CLRSCR; WRITELN('Please enter the recording times in minutes (60mins=1hour)'); WRITELN; WRITE('Recording ',ctr,': '); IF ctr=recordings THEN WRITELN('(Total time of all recordings)') ELSE WRITELN; WRITELN; WRITE('Time : '); READLN(time[ctr]); WRITE('Speed (S/L): '); READLN(speed[ctr]); END; CLRSCR; FOR ctr:=1 TO recordings DO BEGIN WRITE('Rec: ',ctr,', Time=',time[ctr],m0o', Speed='); IF speed[ctr]='S' THEN WRITELN('SP') ELSE WRITELN('LP'); END; END; BEGIN getinput; END. HN#"! E% TextFX.paspProgram TextFX; Uses Crt,DOS; {$I style.inc} {$I upstr.inc} Const VNM='1.00'; VDT='19-Feb-95'; Var IFN,OFN:String; IFS,OFS:Text; MDE:String[2]; LCT:Integer; Procedure About; Begin Style(0,1); Style(1,1); Style(3,1); WriteLn('TextFX v',VNM,' by Zebedee ',#$a9,'1995 Carnage (',VDT,')'); Style(0,1); WriteLn(#$a,'Usage: ',ParamStr(0),' ',#$a); WriteLn('Where is one of...'); WriteLn(' -b => Backwards print each line in t2 ]ehe same order'); WriteLn(' -r => Reverse print each line backwards'); WriteLn(' -w => Reverse print each line and each character'); WriteLn(' -1 => Misc effect 1'); WriteLn(' -d => Star Trek door closing effect'); WriteLn(' -s => Stutter each char but print normally (BIG filesize increase!)',#$a); WriteLn('Write to: Zebedee, 6 Bridgefield, Ottery St Mary, East Devon, EX11 1HL, UK'); Halt(20); Write('$VER: TextFX v1.00 (19-Feb-95) '); End; Procedurze GetParams; Begin If ParamStr(1)='?' Then About; If ParamCount<>3 Then Begin WriteLn('Usage: ',ParamStr(0),' '); Halt(20); End; IFN:=ParamStr(1); OFN:=ParamStr(2); If UpStr(IFN)=UpStr(OFN) Then Begin WriteLn(ParamStr(0),': Both filenames cannot match'); Halt(20); End; MDE:=UpStr(ParamStr(3)); If (MDE<>'-B') and (MDE<>'-R') and (MDE<>'-S') and (MDE<>'-W') and (MDE<>'-D') and (MDE<>'-1') Then Begin WriteLn(ParamStr(0d; ),': Invalid mode'); Halt(20); End; End; Procedure Backwards; Var CTR,LCT:Integer; TXT:Packed Array [1..29] Of String[80]; Begin Write(OFS,#$c); LCT:=1; While not Eof(IFS) Do Begin ReadLn(IFS,TXT[LCT]); Inc(LCT); End; For CTR:=LCT DownTo 1 Do WriteLn(OFS,#$9b,CTR,';1H',TXT[CTR]); Write(OFS,#$9b,LCT-1,';1H'); End; Procedure Misc1; Var CTR,CTC,CTD,LCT:Integer; TXT:Packed Array [1..29] Of String[80]; Begin Write(OFS,#$c); LCT:=1; While notJ Eof(IFS) Do Begin ReadLn(IFS,TXT[LCT]); Inc(LCT); End; For CTR:=1 To LCT Do For CTC:=Length(TXT[CTR]) To 80 Do TXT[CTR]:=TXT[CTR]+' '; For CTR:=1 To LCT-1 Do Begin CTC:=1; For CTD:=79 DownTo 39 Do Begin Write(OFS,#$9b,CTR,';',CTD,'H',TXT[CTR][CTD]); Write(OFS,#$9b,CTR,';',CTC,'H',TXT[CTR][CTC]); Inc(CTC); End; End; End; Procedure StarTrek; Var CTR,CTC,CTD,LCT:Integer; TXT:Packed Array [1..29] Of String[80]; Begin  #l Write(OFS,#$c); LCT:=1; While not Eof(IFS) Do Begin ReadLn(IFS,TXT[LCT]); Inc(LCT); End; For CTR:=1 To LCT Do For CTC:=Length(TXT[CTR]) To 80 Do TXT[CTR]:=TXT[CTR]+' '; CTC:=1; For CTD:=79 DownTo 40 Do Begin For CTR:=1 To LCT-1 Do Begin Write(OFS,#$9b,CTR,';',CTD,'H',TXT[CTR][CTD]); Write(OFS,#$9b,CTR,';',CTC,'H',TXT[CTR][CTC]); End; Inc(CTC); End; End; Procedure ReverseAll; Var CTC,LCT,CTR,TXL:Integer; TXT:Packed !Z6IArray [1..29] Of String[80]; TXB:String[80]; DMY:Char; Begin Write(OFS,#$c); LCT:=1; While not Eof(IFS) Do Begin ReadLn(IFS,TXT[LCT]); Inc(LCT); End; Dec(LCT); For CTR:=LCT DownTo 1 Do Begin TXB:=TXT[CTR]; For CTC:=Length(TXB) DownTo 1 Do Write(OFS,#$9b,CTR,';',CTC,'H',TXB[CTC]); End; Write(OFS,#$9b,LCT,';1H'); End; Procedure Reverse; Var LCT,TXL,CTR:Integer; TXT:String; Begin LCT:=1; Write(OFS,#$c); While not Eof(IFS) Do Beg""(in ReadLn(IFS,TXT); TXL:=Length(TXT); If TXL>0 Then Begin For CTR:=TXL DownTo 1 Do Write(OFS,#$9b,LCT,';',CTR,'H',TXT[CTR]); WriteLn(OFS,''); End Else WriteLn(OFS,''); Inc(LCT); End; End; Procedure ConvertFile; Var TXT:String[80]; WHY:Integer; Begin If MDE='-S' Then Begin WriteLn(ParamStr(0),': Mode not yet implemented'); Halt(20); End; Assign(IFS,IFN); ReSet(IFS); If IOResult<>0 Then Begin WriteLn(Par # 1ڨamStr(0),': Cannot locate infile'); Halt(20); End; Assign(OFS,OFN); ReWrite(OFS); If IOResult<>0 Then Begin WriteLn(ParamStr(0),': Cannot create outfile'); Close(IFS); Halt(20); End; Write(UpStr(ParamStr(0)),':',MDE[2],':Processing file...'); WHY:=WhereY; LCT:=0; While not Eof(IFS) Do Begin ReadLn(IFS,TXT); Inc(LCT); End; Close(IFS); If LCT>28 Then Begin GotoXY(1,WHY); WriteLn(ParamStr(0),': Too many lines! '); Clos 7e(OFS); Halt(20); End; Assign(IFS,IFN); Reset(IFS); GotoXY(1,WHY); Write(UpStr(ParamStr(0)),':',MDE[2],':Converting file...'); WHY:=WhereY; If MDE='-B' Then Backwards; If MDE='-R' Then Reverse; If MDE='-W' Then ReverseAll; If MDE='-1' Then Misc1; If MDE='-D' Then StarTrek; WriteLn('done'); Close(IFS); Close(OFS); End; Begin GetParams; ConvertFile; End.$ %;z.-,+*)('&%E%SSK.pasp$&JProgram ScrabbleScoreKeeper; Uses Crt,DOS; {$I dnstr.inc} {$I getkey.inc} {$I initcaps.inc} {$I style.inc} Var DMY:Char; NOMORE:Boolean; HISCORE,CTR,CTB,PLAYERS:Integer; PLAYER:Packed Array [1..4] Of String[15]; SCORES:Packed Array [1..4] Of Integer; LOSER,WINNER,BLANK:String[15]; Procedure ProgramTitle; Begin Style(0,1); ClrScr; Style(1,1); Style(3,1); WriteLn('Scrabble Score Keeper v1.00 by Zebedee ',#$a9,'1995 Carnage (15-Mar-95)',#$a); Style(0,1); End;$'i Procedure Information; Begin WriteLn('$VER: Scrabble Score Keeper v1.00 (15-Mar-95) '); Halt(5); End; Function AskName(CTR:Integer):String; Var TXT:String[15]; Begin Repeat GotoXY(28,7+CTR); WriteLn(' '); GotoXY(1,7+CTR); Write('Enter your name, player ',CTR,': '); ReadLn(TXT); Until Length(TXT)>1; TXT:=DnStr(TXT); TXT:=InitCaps(TXT); AskName:=TXT; End; Procedure GetNames; Begin ProgramTitle; WriteLn('Before we can start recording the scor$(nM?es in the game, I need to know how'); WriteLn('many people are playing, and what their names are.',#$a); Write('How many players (2-4) ? '); Repeat DMY:=ReadKey; Until (DMY='2') or (DMY='3') or (DMY='4'); If DMY='2' Then PLAYERS:=2 Else If DMY='3' Then PLAYERS:=3 Else If DMY='4' Then PLAYERS:=4; Write(PLAYERS,#$a,#$a); For CTR:=1 To PLAYERS Do Begin PLAYER[CTR]:=AskName(CTR); GotoXY(28,7+CTR); WriteLn(PLAYER[CTR]); End; BLANK:=' $) '; End; Procedure UpdateInformation; Begin Style(1,1); GotoXY(55,7); Write(HISCORE); GotoXY(8,8); Write(BLANK); GotoXY(8,8); Write(BLANK); GotoXY(8,8); Write(LOSER); GotoXY(48,8); Write(BLANK); GotoXY(48,8); Write(WINNER); For CTR:=1 To PLAYERS Do Begin GotoXY(40,10+CTR); Write(SCORES[CTR],' '); End; Style(1,0); End; Function AskAnotherGame:Boolean; Begin GotoXY(1,22); DMY:=GetKey('Enter more scores (Yy/Nn) ? ','Y','N'); GotoXY(1,$*Ib22); Write(' '); If DMY='N' Then AskAnotherGame:=True Else AskAnotherGame:=False; End; Procedure GetScores; Var QTF:Boolean; TMPL,TMPH,GO,SCORE:Integer; Begin QTF:=False; GO:=0; Repeat TMPH:=0; TMPL:=999; Inc(GO); GotoXY(40,16+GO); Write(' '); GotoXY(40,16+GO); ReadLn(SCORE); SCORES[GO]:=SCORES[GO]+SCORE; If SCORE>HISCORE Then HISCORE:=SCORE; If GO=PLAYERS Then Begin For CTR:=1 To PL$+d!UAYERS Do Begin If SCORES[CTR]>TMPH Then Begin TMPH:=SCORES[CTR]; WINNER:=PLAYER[CTR]; End; If SCORES[CTR]2 Then Begin WriteLn('Usage: StripHeader '); WriteLn(#$a,'Greets to TBSNC - happy ripping! ;)'); Halt(20); Write('$VER: StripHeader v1.01 (01-Jan-97) '); End; INF:=ParamStr(1); OUT:=ParamStr(2); WriteLn(#$9b,'0;1;4mStripHeader /2F#$00) and (CHK[2]<>#$00) and (CHK[3]<>#$03) and (CHK[4]<>#$f3) Then Begin WriteLn('ERROR: infile isn''t an executable!'); Halt(20); End; WriteLn('Length of file is ',LEN,' bytes'); Reset(IFS,INF); ReWrite(OFS,OUT); If IORe/3@Scsult<>0 Then Begin WriteLn(ParamStr(0),': Unable to create outfile!'); Close(IFS); Halt(20); End; WriteLn; OK:=True; WHY:=WhereY; Dec(WHY); GotoXY(0,WHY); WriteLn('Stripping header...'); GotoXY(20,WHY); Cursor(False); For CTR:=1 To 32 Do Read(IFS,RCH); For CTR:=1 To LEN-32 Do Begin Read(IFS,RCH); If OK Then Begin Write(OFS,RCH); If IOResult<>0 Then Begin OK:=False; GotoXY(20,WHY); WriteLn('failed! /4[7 ',#$a,#$a,'Write error - disk space perhaps?'); Close(OFS); Close(IFS); Cursor(True); Halt(20); End; GotoXY(20,WHY); WriteLn(CTR,'/',LEN); End; If KeyPressed Then Begin BRK:=ReadKey; If BRK=#3 Then Begin GotoXY(20,WHY); WriteLn('break! ',#$a,#$a,'User abort.'); Close(OFS); Close(IFS); Cursor(True); Halt(20); End; End; End; Cursor(True); GotoX/wwY(20,WHY); Close(OFS); Close(IFS); WriteLn('done ',#$a,#$a,'New file length is ',LEN-32,' bytes'); End.56p876E% sNumbers.pasp57@Program SquareNumbers; Uses Crt,DOS; {$I style.inc} Var M,W:LongInt; Procedure Usage; Begin Style(0,1); Style(1,1); Style(3,1); WriteLn('sNumbers v1.00 by Zebedee ',#$a9,'1994 Cybertek (11-Oct-94)'); Style(0,1); WriteLn; WriteLn('Usage: SNUMBERS '); Halt(10); End; Procedure GetParams; Var ERR:Integer; Begin If (ParamCount<>2) or (ParamStr(1)='?') Then Usage; Val(ParamStr(1),M,ERR); If ERR<>0 Then Begin WriteLn(ParamStr(0),': Invalid max s58o eetting'); Halt(10); End; Val(ParamStr(2),W,ERR); If ERR<>0 Then Begin WriteLn(ParamStr(0),': Invalid w setting'); Halt(10); End; End; Procedure Width(N,WD:LongInt); Var WB,C:Integer; Begin If N<10 Then WB:=WD; If N>9 Then WB:=WD-1; If N>99 Then WB:=WD-2; If N>999 Then WB:=WD-3; If N>9999 Then WB:=WD-4; If N>99999 Then WB:=WD-5; If N>999999 Then WB:=WD-6; For C:=1 To WB Do Write(' '); Write(N); End; Procedure Calculate; Var CTR,C:LongI5>\Qnt; Begin C:=0; For CTR:=1 to M-1 Do Begin Inc(C); If C=6 Then Begin C:=1; WriteLn; End; Width(CTR,5); Write('='); Width(CTR*CTR,W); End; Width(M,5); Write('='); Width(M*M,W); WriteLn; End; Begin GetParams; Calculate; End.9:ԟ<;:AE% ConvertFD.pasp9;-Program ConvertFD.pas Uses Crt,DOS; {$I style.inc} {$I upstr.inc} Var IFS,OFS:Text; RCH:Char; SRC,TRG:String[80]; TXT[255]:STRING; CTR,WTH:Integer; Procedure Usage; Begin Style(0,1); Style(1,1); Style(3,1); WriteLn('ConvertFD v1.00 by Zebedee ',#$a9,'1998 Area 51 (31-Jan-98)'); Style(0,1); WriteLn; WriteLn('Usage: ConvertFD '); Halt(10); WriteLn('$VER: ConvertFD v1.00 (31-Jan-98) '); End; Procedure GetParams; Begin If ParamCo9<.-unt<>2 Then Usage; SRC:=UpStr(ParamStr(1)); TRG:=UpStr(ParamStr(2)); If SRC=TRG Then Begin WriteLn(ParamStr(0),': Filename and output cannot match'); Halt(20); End; End; Procedure ExtractCommand(); Begin End; Procedure ConvertFile; Begin CTR:=0; Assign(IFS,SRC); Reset(IFS); Assign(OFS,TRG); ReWrite(OFS); WriteF('Converting "',SRC,'" to "',TRG,'"..."); ReadLn(IFS,TXT) Write(OFS,'File: ',TXT) While not Eof(IFS) Do Begin Read(IFS,TXT); 9qD_IF TXT[1]='#' Then ExtractCommand() End; Close(OFS); Close(IFS); End; Begin GetParams; StripFile; End.=>`@?>[E% FStrip.pasp=?Program FileStripper; Uses Crt,DOS; {$I style.inc} {$I upstr.inc} Const VNM='1.00'; VDT='25-Mar-94'; Var IFS,OFS:Text; RCH:Char; SRC,TRG:String[80]; CTR,WTH:Integer; Procedure Usage; Begin Style(0,1); Style(1,1); Style(3,1); WriteLn('File Stripper v',VNM,' by Zebedee ',#$a9,'1994 Carnage (',VDT,')'); Style(0,1); WriteLn; WriteLn('Usage: FSTRIP '); Halt(10); WriteLn('$VER: Change v1.00 (25-Mar-94) '); End; Procedure GetPar=@7Uams; Begin If ParamCount<>3 Then Usage; SRC:=UpStr(ParamStr(1)); TRG:=UpStr(ParamStr(2)); Val(Copy(ParamStr(3),1,Length(ParamStr(3))),WTH,CTR); If SRC=TRG Then Begin WriteLn(ParamStr(0),': Filename and output cannot match'); Halt(20); End; End; Procedure StripFile; Begin CTR:=0; Assign(IFS,SRC); Reset(IFS); Assign(OFS,TRG); ReWrite(OFS); WriteLn(OFS,'FileStripper v',VNM,' ',#$a9,'1994 Carnage (',VDT,')'); WriteLn(OFS,''); WriteLn(OFS,'Stripped f=#aile: ',SRC); WriteLn(OFS,'Output file : ',TRG); WriteLn(OFS,'Width : ',WTH); While not Eof(IFS) Do Begin Read(IFS,RCH); If (Ord(RCH)>31) and (Ord(RCH)<127) Then Begin Write(OFS,RCH); Inc(CTR); End; If CTR=WTH Then Begin WriteLn(OFS,''); CTR:=0; End; End; Close(OFS); Close(IFS); End; Begin GetParams; StripFile; End.ABx CBE%Xfer.pas,pACU'f{Program Xfer; Uses CRT,DOS; {$I upstr.inc} Var IFS,OFS:Text; IFN,OFN,PORT:String[255]; BAUD:LongInt; ERR:Integer; Procedure About; Begin WriteLn(#$9b,'1;4mXFER v1.00 by Zebedee 1997 Area 51 (31-Aug-97)',#$9b,'0m'); WriteLn; WriteLn('Usage: XFER '); WriteLn('Example: XFER SER: 9600'); Halt(10); End; Procedure Error(ERRSTR:String;RETCODE:Integer); Begin WriteLn(ParamStr(0),': ',ERRSTR); Halt(RETCODE) End; Begin If ParamCount=0 Then Error('rA?Required argument missing',20); If ParamCount<>2 Then About; PORT:=UpStr(ParamStr(1)); Val(Copy(ParamStr(2),1,Length(ParamStr(2))),BAUD,ERR); If ERR<>0 Then Error('invalid baud rate',20); WriteLn('PORT: ',PORT); WriteLn('BAUD: ',BAUD); WriteLn('ERR : ',ERR); End.DEgGFEE% HexCalc.paspDFzProgram HexCalc; Uses Crt,DOS; { Shaun, I started writing a hex calculator for you but decided not to! The reason being is that the code would be too much of a mass formulae. If you want, here's the formula itself... denary = (11^3)+(1^2)+5 (number is $a04) But this doesn't always work... denary = (16^4)+(16^3)+(16^2)+16 (number is $ffff) Because the answer to $ffff converted to denary comes out as 69904. The truDGX[e answer is -1. If the first digit in a hex longword is F, then convert the remaining 3 figures to denary and make it negative! zBd/cRn!97 } Var TMP:Char; NUM:String; A,B,C,D,E,F:Integer; Begin If ParamCount<>1 Then Begin WriteLn('HexCalc v1.00 by Zebedee 1997 Carnage (06-Jan-97)'); WriteLn; WriteLn('Usage : HexCalc '); WriteLn('Example: HexCalc a04'); Halt(20); End; NUM:=ParamStr(1); If Length(NUM)=1 Then Begin WriteLn('Come D𿢀on, you can do better than that! Give me a HARD one!'); Halt(20); End; For CTR:=1 To Length(NUM) Do Begin If (NUM[CTR]>='0') and (NUM[CTR]<='9') Then TMP:=NUM[CTR]; TMP:=UpCase(NUM[CTR]); If TMP='A' Then C End;HI *VUTSRQPONMLKJIGE% Mandel.paspHJ&}Program Mandelbrot_v100; { Purpose: Draw a mandelbrot picture Started: 22-Mar-94 } Uses Crt, DOS, Exec, Intuition, Graphics, Init; {$I extras.inc} Const VerNum = '1.00'; VerDate = '21-Mar-94'; Type tFont= Record Font_Name: pCString; {font_name} Font_No: Integer; {TOPAZ_SIXTY} Font_Ddd1: ShortInt; {FS_NORMAL} Font_Ddd2: ShortInt; {FPF_ROMFONT} End; Var IFS : Text; QTF : Boolean; NUM : StringHK^[2]; ERR, IT, OFS, CTR, BPL : Integer; RCH : Array [1..$10] of Char; OPT : Char; MyNewWindow: tNewWindow; MyNewScreen: tNewScreen; FontName: CString; Title: CString; WTitle: CString; MyFont: tFont; MyWindow: pWindow; MyScreen: pScreen; L: Longint; X, Y, N : Integer; XR, YR, ZR, ZI, ZR0 : Real; VP : LongInt; TXT : String[80]; XS, YS, XE, YE, PC : Integer; Procedure Print(TXT : String; XP, YP : Integer); Begin With MyWindow^ Do Begin MoHLwəve_(RPort, XP, YP); Text_(RPort, TXT, Length(TXT)); End; End; Procedure CloseEnvironment; Begin CloseWindow(MyWindow); CloseScreen(MyScreen); CloseLibrary(Pointer(IntuitionBase)); CloseLibrary(Pointer(GfxBase)); End; Procedure OpenTheScreen; Begin GfxBase := pGfxBase(OpenLibrary('graphics.library',0)); IntuitionBase := pIntuitionBase(OpenLibrary('intuition.library',0)); With MyFont Do Begin PasToC('Topaz.font', FontName); Font_Name := @FontName; FoHMU|$nt_No := TOPAZ_SIXTY; Font_DDD1 := FS_NORMAL; Font_DDD2 := FPF_ROMFONT; End; With MyNewScreen Do Begin LeftEdge := 0; TopEdge := 0; Width := 320; Height := 256; Depth := BPL; DetailPen := 0; BlockPen := 0; ViewModes := 0; Type_ := CUSTOMSCREEN; Font := @MyFont; PasToC('Mandelbrot Generator v' + VerNum + ' by Zebedee', Title); DefaultTitle := @Title; Gadgets :HNQF= NIL; CustomBitMap := NIL; End; MyScreen := OpenScreen(@MyNewScreen); If MyScreen = NIL Then Begin CloseLibrary(Pointer(IntuitionBase)); CloseLibrary(Pointer(GfxBase)); WriteLn('Error: Couldn''t open the screen'); Halt(1); End; End; Procedure OpenTheWindow; Begin GfxBase := pGfxBase(OpenLibrary('graphics.library', 0)); IntuitionBase := pIntuitionBase(OpenLibrary('intuition.library', 0)); With MyFont Do Begin PasToC('Topaz.font',FontName); HO[p Font_Name := @FontName; Font_No := TOPAZ_SIXTY; Font_Ddd1 := FS_NORMAL; Font_Ddd2 := FPF_ROMFONT; End; With MyNewWindow Do Begin LeftEdge := 0; TopEdge := 0; Width := 320; Height := 256; DetailPen := 0; BlockPen := 1; PasToC('Mandelbrot Generator v' + VerNum, WTitle); Title := @WTitle; Flags := WINDOWCLOSE or SMART_REFRESH or ACTIVATE or WINDOWDRAG or WINDOWDEPTH; IDCHP]MPFlags := CLOSEWINDOW_; Type_ := CUSTOMSCREEN; FirstGadget := NIL; CheckMark := NIL; Screen := MyScreen; BitMap := NIL; MinWidth := 100; MinHeight := 25; MaxWidth := 640; MaxHeight := 200; End; MyWindow := OpenWindow(@MyNewWindow); If MyWindow = NIL Then Begin CloseScreen(MyScreen); CloseLibrary(Pointer(IntuitionBase)); CloseLibrary(Pointer(GfxBase)); WriteLn('Error: Couldn''t open the window');HQ`} Halt(2); End; End; Procedure SetPalette; Begin { SetRGB4(MyWindow, 0,0,0,0); SetRGB4(VP, 0,1,1,0);} End; Procedure Usage(TXT : String); Begin WriteLn(TXT); Halt(10); End; Procedure Details; Begin Style(0,1); Style(1,1); Style(3,1); Write('Mandelbrot Generator v', VerNum, ' by Zebedee (', VerDate, ') '); WriteLn(Chr($a9), '1994 CyberTek'); Style(0,1); WriteLn; WriteLn('Iterations may be either 2, 4, 8, 16, 32, 64, 128 or 256.'); Style(2,1); WriteLnH R/('Greets fly out to...'); Style(2,0); WriteLn('Sirius, Sprinter, Fireball, Dillinger, Capone, DJ Nosferatu, Devoe, Holsten,'); WriteLn('LSD, and not many others!'); Write('ITERATIONS/K: '); ReadLn(IT); End; Procedure GetIterations; Begin If ParamCount <> 1 Then Usage('Usage: Mandelbrot '); If ParamStr(1) = '?' Then Details Else Val(Copy(ParamStr(1), 1, Length(ParamStr(1))), IT, ERR); If (IT <> 2) and (IT <> 4) and (IT <> 8) and (IT <> 16) and (IT <>H Sȶ 32) and (IT <> 64) and (IT <> 128) and (IT <> 256) Then Usage('Error: Invalid iterations value'); Case IT Of 2 : BPL := 1; 4 : BPL := 2; 8 : BPL := 3; 16 : BPL := 4; 32 : BPL := 5; 64 : BPL := 6; 128 : BPL := 7; 256 : BPL := 8; End; WriteLn('Screen 320x256x', BPL, ' (', IT, ')'); End; Procedure WaitClose(Var W : pWindow); Var DMY : Integer; Begin EnableClose(W); DMY := Wait(BitMask(W^.UserPort^.MP_SIGBIT)); DisableClose(W) H T_-End; Procedure DrawPic; Var L : Integer; Begin Assign(IFS, 'S:Mandel.pic'); ReWrite(IFS); WriteLn(IFS, 'Mandelbrot picture - XS, XW, YS, YW, C'); WriteLn(IFS, 11); WriteLn(IFS, 253); WriteLn(IFS, 4); WriteLn(IFS, 315); For Y := 11 To 253 Do For X := 4 To 315 Do Begin XR := -2.0 + X / 81.92; YR := 1.6 - Y / 81.92; N := 0; ZR := 0; ZI := 0; Repeat ZR0 := ZR * ZR - ZI * ZI + XR; ZI := 2 * ZR * ZI + YR; H U/4\O ZR := ZR0; Inc(N); Until (ZR * ZR + ZI * ZI > 4) or (N = IT); SetAPen(MyWindow^.RPort, N); L := WritePixel(MyWindow^.RPort, X, Y); WriteLn(IFS, N); End; Close(IFS); WaitClose(MyWindow); End; Procedure ShowText; Begin Print('Active Keys once completed...', 4, 100); Print('R -> Redraw', 20, 108); Print('Q -> Quit', 20, 116); End; Procedure GetKeys; Begin QTF := False; Repeat Repeat OPT := UpCase(ReadKey); Until OPTH V b In ['R', 'Q']; Case OPT Of 'R' : DrawPic; 'Q' : QTF := True; End; Until QTF; End; Procedure ReadPic; Begin Assign(IFS, 'S:Mandel.pic'); Reset(IFS); ReadLn(IFS, TXT); ReadLn(IFS, XS); ReadLn(IFS, XE); ReadLn(IFS, YS); ReadLn(IFS, YE); For Y := YS To YE Do For X := YS To YE Do Begin ReadLn(IFS, PC); SetAPen(MyWindow^.RPort, PC); L := WritePixel(MyWindow^.RPort, X, Y); End; Close(IFS); WaitClose(MyWindow); End; BHr3egin GetIterations; OpenTheScreen; OpenTheWindow; ShowText; {DrawPic;} ReadPic; GetKeys; CloseEnvironment; End.WXm[ZYXE% GF2strip.paspWY։ Program GF2strip; Uses CRT,DOS; Var IFS,OFS:Text; RCH:Char; IFN,OFN:String[255]; ADD:Boolean; CTR:Integer; Procedure Usage; Begin WriteLn('GF2strip v1.00 by Zebedee 1996 Carnage (19-Dec-96)',#10); WriteLn('Usage: GF2strip '); Halt(20); End; Begin If ParamStr(1)='?' Then Usage; If ParamCount<>3 Then Usage; IFN:=ParamStr(1); OFN:=ParamStr(2); If ParamStr(3)='add' Then ADD:=True Else ADD:=False; Reset(IFS,IFN); If IOResulWZ't<>0 Then Begin WriteLn('File not found!'); Halt(20) End; ReWrite(OFS,OFN); WriteLn('Source:',IFN); WriteLn('Target:',OFN); Write('Add :'); If ADD Then WriteLn('TRUE') Else WriteLn('FALSE'); IF ADD Then Begin Write(OFS,#$47,#$46,#$49,#$46,#$4B,#$69,#$6E,#$67,#$73,#$6F,#$66,#$74,#$00,#$00,#$00,#$00); Write(OFS,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00); Write(OFS,#$00,#$00,#$FF,#$FF,#$00,#$00,#$00,#$00,#$00,#$00W[<م,#$00,#$00,#$00,#$00,#$00,#$00); Write(OFS,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00); Write(OFS,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00); Write(OFS,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$ED); Write(OFS,#$00,#$00,#$02,#$45,#$00,#$00,#$01,#$12,#$00,#$00,#$01,#$FD,#$00,#$00,#$7F,#$FF); Write(OFS,#$FF,#$FF,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$W000,#$00,#$00,#$00,#$00); Write(OFS,#$03,#$57); End Else Begin For CTR:=1 To $81 Do Read(IFS,RCH); End; While not Eof(IFS) Do Begin Read(IFS,RCH); Write(OFS,RCH); End; Close(OFS); Close(IFS); End.\ ]"ihgfedcba`_^]E% Alarm.pasBp\^uCProgram AlarmClock; Uses Crt,DOS,Exec,Graphics,Intuition; {$I style.inc} Const VNM='1.01'; VDT='01-Jun-94'; Type tFont=Record Font_Name:String; {font_name} Font_No:Integer; {TOPAZ_SIXTY} Font_Ddd1:ShortInt; {FS_NORMAL} Font_Ddd2:ShortInt; {FPF_ROMFONT} End; Var Close:pIntuiMessage; MyNewWindow:tNewWindow; FontName:String; WTitle,STitle:String; MyFont:tFont; MyWindow: pWindow; L:LongInt; ERR,AHR,AMN:Integer; FineSec,DayNum:Word; DHR,DM\_ssN:String[2]; DT:DateTime; QTF,ABORT:Boolean; Procedure WriteWin(XP,YP,PC:Integer;TXT:String); Begin With MyWindow^ Do Begin SetAPen(RPort,PC); Move_(RPort,XP,YP); Text_(RPort,@TXT,Length(TXT)); End; End; Procedure GetParams; Begin If ParamStr(1)='?' Then Begin Style(0,1); Style(1,1); Style(3,1); WriteLn('AlarmClock v',VNM,' by Zebedee ',#$a9,'1994 Cybertek (',VDT,')'); Style(0,1); WriteLn; Style(2,1); WriteLn('Usage: ALARM H\`=H:MM'); Style(0,1); Halt(10); Write('$VER: Alarm v1.01 (01-Jun-94) '); End; If ParamCount<>1 Then Begin WriteLn('Error: Invalid alarm time'); Halt(0); End; Val(Copy(ParamStr(1),1,2),AHR,ERR); DHR:=Copy(ParamStr(1),1,2); If ERR<>0 Then Begin WriteLn('ERROR: Invalid hours'); Halt(10); End; Val(Copy(ParamStr(1),4,2),AMN,ERR); DMN:=Copy(ParamStr(1),4,2); If ERR<>0 Then Begin WriteLn('ERROR: Invalid minutes'); Halt(10); End; \aAEnd; Procedure DoTheBusiness; Var LB:LongInt; DAYNAME:String[10]; INFO:String[22]; Sec100:Word; Begin QTF:=False; With MyWindow^ Do Begin LB:=BitMask(UserPort^.MP_SIGBIT); End; Repeat GetTime(DT.Hour,DT.Min,DT.Sec,FineSec); GetDate(DT.Year,DT.Month,DT.Day,DayNum); Case DayNum Of 0:DAYNAME:='Sun'; 1:DAYNAME:='Mon'; 2:DAYNAME:='Tue'; 3:DAYNAME:='Wed'; 4:DAYNAME:='Thu'; 5:DAYNAME:='Fri'; 6:DAYNAME:='Sat'; E\bzv@end; INFO:=DAYNAME+' '; Str(DT.Day,DAYNAME); If DT.Day<10 Then INFO:=INFO+'0'; INFO:=INFO+DAYNAME; INFO:=INFO+'-'; Case DT.Month Of 1:DAYNAME:='Jan'; 2:DAYNAME:='Feb'; 3:DAYNAME:='Mar'; 4:DAYNAME:='Apr'; 5:DAYNAME:='May'; 6:DAYNAME:='Jun'; 7:DAYNAME:='Jul'; 8:DAYNAME:='Aug'; 9:DAYNAME:='Sep'; 10:DAYNAME:='Oct'; 11:DAYNAME:='Nov'; 12:DAYNAME:='Dec'; End; INFO:=INFO+DAYNAME+'-'; S\cMUtr(DT.Year,DAYNAME); DAYNAME:=Copy(DAYNAME,3,2); INFO:=INFO+DAYNAME+' '; Str(DT.Hour,DAYNAME); If DT.Hour<10 Then INFO:=INFO+'0'; INFO:=INFO+DAYNAME+':'; Str(DT.Min,DAYNAME); If DT.Min<10 Then INFO:=INFO+'0'; INFO:=INFO+DAYNAME+':'; Str(DT.Sec,DAYNAME); If DT.Sec<10 Then INFO:=INFO+'0'; INFO:=INFO+DAYNAME; WriteWin(4,18,1,INFO+#0); If (DT.Hour=AHR) and (DT.Min=AMN) Then QTF:=True; With MyWindow^ Do Begin Close:=pIntuiM\dessage(GetMsg(MyWindow^.UserPort)); End; If Close^.Code=0 Then Begin QTF:=True; ABORT:=True; End; Until QTF; End; Procedure OpenThatWindow(CDE:Integer); Begin GfxBase:=pGfxBase(OpenLibrary('graphics.library',0)); IntuitionBase:=pIntuitionBase(OpenLibrary('intuition.library',0)); With MyFont Do Begin PasToC('Topaz.font',FontName); Font_Name:=FontName; Font_No:=TOPAZ_SIXTY; Font_Ddd1:=FS_NORMAL; Font_Ddd2:=FPF_ROMFONT; End; \eB> With MyNewWindow Do Begin DetailPen:=0; BlockPen:=1; Case CDE Of 0:Begin LeftEdge:=170; TopEdge:=78; Width:=300; Height:=100; PasToC('AlarmClock v1.01',WTitle); Title:=@WTitle; Flags:=SMART_REFRESH or ACTIVATE; End; 1:Begin LeftEdge:=410; TopEdge:=0; Width:=200; Height:=22; PasToC('Alarm v1.01',WTitle); Title:=@WTitle; \ fN Flags:=WINDOWCLOSE or SMART_REFRESH or ACTIVATE or WINDOWDRAG or WINDOWDEPTH; End; 2:Begin LeftEdge:=170; TopEdge:=78; Width:=300; Height:=100; PasToC('Notice',WTitle); Title:=@WTitle; Flags:=WINDOWCLOSE or SMART_REFRESH or ACTIVATE; End; 3:Begin LeftEdge:=170; TopEdge:=78; Width:=300; Height:=100; PasToC('Noti\ g4bce',WTitle); Title:=@WTitle; Flags:=SMART_REFRESH or ACTIVATE; End; End; IDCMPFlags:=CLOSEWINDOW_; Type_:=WBENCHSCREEN; FirstGadget:=NIL; CheckMark:=NIL; Screen:=NIL; BitMap:=NIL; MinWidth:=0; MinHeight:=0; MaxWidth:=0; MaxHeight:=0; End; MyWindow:=OpenWindow(@MyNewWindow); If MyWindow=NIL Then Begin WriteLn('Error: Couldn''t open the time information window'); Halt(2); End; End; Procedure Sho\ h< wdwTitle; Begin With MyWindow^ Do Begin SetDrMd(RPort,0); WriteWin(82,26,1,'Alarm Clock v1.01'+#0); WriteWin(80,25,2,'Alarm Clock v1.01'+#0); SetDrMd(RPort,1); WriteWin(40,65,1,#$a9+'1994 A Cybertek Production'+#0); WriteWin(36,36,2,'Coded by Zebedee of Cybertek'+#0); WriteWin(104,45,2,'1 June 1994'+#0); End; End; Procedure CloseThatWindow; Begin CloseWindow(MyWindow); CloseLibrary(Pointer(IntuitionBase)); CloseLibrary(Pointer(GfxBase)); End; P\ iWrocedure Main; Var WB:Boolean; Begin GetParams; OpenThatWindow(0); ShowTitle; WriteWin(40,87,3,'AlarmClock is set to '+DHR+':'+DMN+#0); Delay(2500); CloseThatWindow; OpenThatWindow(1); DoTheBusiness; CloseThatWindow; If ABORT Then Begin OpenThatWindow(3); ShowTitle; WriteWin(52,87,3,'User abort - Terminating'+#0); Delay(2500); CloseThatWindow; End Else Begin WB:=WBenchToFront; If WB Then Begin OpenThatWindow(2); Sh\ VowTitle; WriteWin(100,87,3,'Wakey wakey!'+#0); With MyWindow^ Do Begin L:=Wait(BitMask(UserPort^.MP_SIGBIT)); End; CloseThatWindow; End Else WriteLn('Error: Couldn''t bring WBench to front screen'); End; End; Begin Main; End.jkYnmlkE% StripS.pasppjlmProgram StripSpaces_100; Uses Crt,DOS; {$I style.inc} Const VNM='1.00'; VDT='08-Jul-95'; Var IFN,OFN:String; Procedure Information; Begin Style(0,1); Style(1,1); Style(3,1); WriteLn('StripSpaces v',VNM,' by Zebedee 1995 Carnage!Cybertek (',VDT,')'); Style(0,1); WriteLn; WriteLn('Usage: StripS '); WriteLn; WriteLn('StripS will go through the which MUST be an ASCII file, removing'); WriteLn('ALL leading spaces writing the outpujmpl}t to a new file .'); Halt(20); Write('$VER: StripS v1.00 (08-Jul-95) '); End; Procedure GetParams; Begin If ParamCount=0 Then Begin WriteLn('Usage: ',ParamStr(0),' '); Halt(20); End; If ParamStr(1)='?' Then Information; If ParamCount=1 Then Begin WriteLn(ParamStr(0),': Required argument missing'); Halt(20); End; If ParamCount>2 Then Begin WriteLn(ParamStr(0),': Too many arguments'); Halt(20); End; IFN:=Parajn P7mStr(1); OFN:=ParamStr(2); End; Function Truncate(TXT:String):String; Var CTR,LNG:Integer; Begin LNG:=Length(TXT); Repeat Dec(LNG); Until TXT[LNG]<>' '; Delete(TXT,LNG+1,Length(TXT)-LNG); Truncate:=TXT; End; Procedure ProcessFile; Var IFS,OFS:Text; TXT:String; Begin Reset(IFS,IFN); If IOResult<>0 Then Begin WriteLn(ParamStr(0),': Can''t locate the infile (',IFN,')'); Halt(20); End; ReWrite(OFS,OFN); If IOResult<>0 Then Begin WriteLn(PjkaramStr(0),': Can''t create the outfile (',OFN,')'); Close(IFS); Halt(20); End; While not Eof(IFS) Do Begin ReadLn(IFS,TXT); WriteLn(OFS,Truncate(TXT)); End; Close(OFS); Close(IFS); End; Begin GetParams; ProcessFile; End.opPonrqpE% mSquare.pasWpoqc]kProgram MultiplicationSquare; Uses Crt,DOS; {$I style.inc} Var X,Y,W:Integer; Procedure Usage; Begin Style(0,1); Style(1,1); Style(3,1); WriteLn('mSquare v1.00 by Zebedee ',#$a9,'1994 Cybertek (11-Oct-94)'); Style(0,1); WriteLn; WriteLn('Usage: MSQUARE '); Halt(10); End; Procedure GetParams; Var ERR:Integer; Begin If (ParamCount<>3) or (ParamStr(1)='?') Then Usage; Val(ParamStr(1),X,ERR); If ERR<>0 Then Begin WriteLn(ParamStr(0),': Invaor,lid x setting'); Halt(10); End; Val(ParamStr(2),Y,ERR); If ERR<>0 Then Begin WriteLn(ParamStr(0),': Invalid y setting'); Halt(10); End; Val(ParamStr(3),W,ERR); If ERR<>0 Then Begin WriteLn(ParamStr(0),': Invalid w setting'); Halt(10); End; End; Procedure Width(N,WD:Integer); Var WB,C:Integer; Begin If N<10 Then WB:=WD; If N>9 Then WB:=WD-1; If N>99 Then WB:=WD-2; If N>999 Then WB:=WD-3; For C:=1 To WB Do Write(' '); Write(N); EoAond; Procedure MakeSquare; Var CTX,CTY,CTR,CTC:LongInt; Begin For CTC:=1 To W Do Write(' '); CTC:=0; Write('x'); Style(1,1); For CTX:=2 To X Do Width(CTX,W); Style(1,0); WriteLn; For CTY:=2 To Y Do Begin Style(1,1); Width(CTY,W); Style(1,0); CTC:=CTY; For CTR:=2 To CTX Do Begin CTC:=CTC+CTY; Width(CTC,W); End; WriteLn; End; End; Begin GetParams; MakeSquare; End.stJ~}|{zyxwvut$E% BaseDump.pasApsuf*Program BaseDumper; { Purpose: Dump a file in the required number base Started: 18-Feb-94 Last release: 21-Jan-95 ** PARAMETERS PROCEDURE NEEDS TO BE ** Last update: 25-May-96 ** RE-VAMPED BEFORE COMPILING ** Known bugs: * The byte count seems to be one less than the file length. Either a byte is getting lost somewhere or my algorithm is incorrect. * The file read in for dumping is rarely left open for some weird reason! Note: This program wsv as started two years ago when I was just starting Pascal on the Amiga and was more of an exercise in HSPascal for myself. I first decided on making it into a proper utility but decided against it for two main reasons. First, the final code was too big, and second, the program ran too slowly - mainly because of the check for the user pressing ctrl-c. This file is fully PD but PLEASE distribute the three include files should you decide to distribute it so someone else cansw5 compile it! The two doc files mentioned in the program did get written but I can't find them! } Uses Crt,DOS; {$I baseconv.inc} {$I style.inc} {$I upstr.inc} Const VNM='1.09'; VDT='25-May-96'; Var IFS:Text; OFS,CTR,BSE,FLD,OFD,WTH,ROW:LongInt; LNE,LNC,ERR:Integer; FLN:String[79]; RCH,OPT:Char; CHB:Array [1..16] of Char; FSZ:LongInt; ISZ:File of Byte; FLG:Boolean; XIT:Boolean; Procedure ProgramTitle; Begin Style(0,1); Style(1,1); Style(3,1); Wrsx fite('BaseDump v',VNM,' by Zebedee ',#$a9,'1994-6 Carnage ('); WriteLn(VDT,')'); Style(0,1); WriteLn; End; Procedure Usage; Begin WriteLn('Usage : BaseDump [] []'); WriteLn('Example: BaseDump s:startup-sequence 6 20'); WriteLn('Try : BaseDump values'); WriteLn(' BaseDump greets'); WriteLn(' BaseDump maths'); WriteLn('While paused, press H for the list of available commands.'); Style(2,1); WriteLn('Read BaseDump.doc or syBaseDump.guide for more information.'); Style(2,0); Halt(10); Write('$VER: BaseDump v1.09 (25-May-96) '); End; Procedure Values; Begin Style(3,1); WriteLn('Accepted parameter values...'); Style(3,0); WriteLn(' This is the name of the file you which to dump. You can have a'); WriteLn(' maximum of 79 chars in the filename.'); WriteLn(' This is the number base you want to use. The range is base 2 up'); WriteLn(' to base 16.'szƂ); WriteLn(' This is the number of lines to be displayed before the scroll'); WriteLn(' pauses. The range is 5 lines to 28 lines. Pressing the H key'); WriteLn(' while paused displays a list of available commands.'); Halt(10); End; Procedure Greets; Begin Style(3,1); WriteLn('Additional information...'); Style(3,0); WriteLn('After all the frustration and many drinks, BaseDump is finally completed. I'); WriteLn('had big time problemss{ reading the file in correctly, but at last here it is!'); WriteLn('If you want the source code, send a disk with your address and 1.50 to...'); WriteLn('72 Hessary Drive, Belliver, Plymouth, PL6 7DQ, England. I''ll send you your'); WriteLn('disk back with the source and some of my other work. A disk with 3 will'); WriteLn('give you all my programs as they are! You can call voice on +44(0)1752784262'); WriteLn('for a chat. This program is fully PD, so do with it what ys|#Xou want, but pls'); WriteLn('include BaseDump.doc, BaseDump.guide, and the world will be a better place &'); WriteLn('I''ll sleep better at night!'); WriteLn; Style(3,1); WriteLn('Greetings to...'); Style(3,0); WriteLn('Sirius, Sprinter, Devoe, Fireball, Spicoally/Paralax, Capone, Holsten,'); WriteLn('Dillinger, Tempest, Quantum, Terminator, Verminator, Beaker, Stash, Kirsty J,'); WriteLn('the Tiverton Posse, Barnstaple Posse, Serena Emberson, Rachel Chidgey, Gee,')s }g;; WriteLn('Donna Howe, John Rood (my dad) and everyone else I''ve missed off.'); WriteLn; Style(3,1); WriteLn('Messages to...'); Style(3,0); WriteLn('Sirius => Thanks for all the warez'); WriteLn('Tempest => Thanx for all the warez you sent me back in ''89 (?)'); WriteLn('Spicoally/Paralax (Australia) => Keep sending the assembly source code'); WriteLn('Kei/CyberDreams (UK) => Can you send me some more gfx?'); WriteLn('Sprinter => CliTris and the Stereogram Creatos ~wE~ur is mega bugged!'); WriteLn('Spare => Spare'); WriteLn; Style(2,1); Style(1,1); WriteLn('Dedicated to all the file viewers everywhere !!!'); Style(0,1); Halt(10); End; Procedure AlanBeer; Begin Style(3,1); WriteLn('Thanks must go to...'); Style(3,0); WriteLn('I must thank Alan Beer, who supplied me with the formula to convert a number'); WriteLn('into a different base as without that formula, this program wouldn''t exist!!'); Halt(10); End; Procedure GetPs :aP4arams; Begin If UpStr(ParamStr(1))='VALUES' Then Values; If UpStr(ParamStr(1))='MATHS' Then AlanBeer; If UpStr(ParamStr(1))='GREETS' Then Greets; If ParamCount<>3 Then Usage; FLN:=ParamStr(1); Val(Copy(ParamStr(2),1,Length(ParamStr(2))),BSE,ERR); If (BSE<2) or (BSE>16) Then Begin BSE:=16; WriteLn(ParamStr(0),': Invalid base - set to hex (16)'); End; Val(Copy(ParamStr(3),1,Length(ParamStr(3))),LNE,ERR); If (LNE<5) or (LNE>28) Then Begin LNE:=20; s  WriteLn(ParamStr(0),': Invalid line count - set to 20'); End; Case BSE Of 2:Begin FLD:=8; OFD:=16; End; 3:Begin FLD:=6; OFD:=16; End; 4:Begin FLD:=4; OFD:=12; End; 5:Begin FLD:=4; OFD:=12; End; 6:Begin FLD:=4; OFD:=12; End; 7:Begin FLD:=3; OFD:=12; End; 8:Begin FLD:=3; OFD:=12; End; 9:Begin s  FLD:=3; OFD:=12; End; 10:Begin FLD:=3; OFD:=12; End; 11:Begin FLD:=3; OFD:=5; End; 12:Begin FLD:=3; OFD:=5; End; 13:Begin FLD:=3; OFD:=8; End; 14:Begin FLD:=3; OFD:=8; End; 15:Begin FLD:=3; OFD:=8; End; 16:Begin FLD:=2; OFD:=8; End; End; WTH:=8; If (BSE=2) osD8r (BSE=3) Then WTH:=4; If BSE=16 Then WTH:=16; End; Procedure NotExist; Begin WriteLn(ParamStr(0),': Can''t locate file `',FLN,''''); FLG:=False; End; Procedure GetFileLength; Begin Assign(ISZ,FLN); Reset(ISZ); FSZ:=FileSize(ISZ); Close(ISZ); End; Procedure PrintChar(CHD:Char); Begin If CHD<#$20 Then Write('.'); If (CHD>#$1F) and (CHD<#$7f) Then Write(CHD); If CHD>#$7e Then Write('.'); End; Procedure CloseFile; Begin Close(IFS); End; Procedure DoPause; Begis4n Repeat Repeat OPT:=UpCase(ReadKey); Until OPT In ['I','M','S','H','N','Q','L','V','A','C']; If OPT='I' Then WriteLn('INFO: Reading file `',UpStr(FLN),''' in base ',BSE); If OPT='S' Then WriteLn('INFO: Size of file `',UpStr(FLN),''' is ',FSZ,' bytes'); If OPT='H' Then Begin WriteLn('KEYS: [S]ize; [M]ore; [I]nfo; [N]opause; set[L]ines; [V]iewlines; [Q]uit'); WriteLn(' [A]bout; [C]redits'); End; If OPT='C' Then WriteLn('INFO: Cosude & ideas by Zebedee, Maths by Alan Beer'); If OPT='A' Then WriteLn('INFO: BaseDump v',VNM,' by Ivan Oliver ',#$a9,'1994 Amiga Format (',VDT,')'); If OPT='L' Then Begin Write('Enter a new line setting (5-28): '); ReadLn(LNE); If (LNE<5) or (LNE>28) Then Begin WriteLn(ParamStr(0),': Invalid line setting - set to default of 20'); LNE:=20; End; End; If OPT='V' Then WriteLn('INFO: The page size is ',LNE,' lines'); If smOPT='N' Then Begin LNE:=-1; WriteLn('INFO: Pause has been disabled'); End; If OPT='Q' Then Begin WriteLn('INFO: Program aborted.'); CloseFile; Halt(5); CTR:=FSZ; End; Until OPT='M'; LNC:=0; End; Procedure DumpFile; Var KEY:Char; Begin OFS:=0; LNC:=0; FLG:=True; Assign(IFS,FLN); ReSet(IFS); If Not IOResult=0 Then NotExist; Close(IFS); If FLG Then Begin WriteLn('File dump of: ',FLN); GetFileLength;sЌ). Assign(IFS,FLN); Reset(IFS); ROW:=1; Write(BaseConv(0,OFD,BSE),': '); For CTR:=1 To FSZ Do Begin Read(IFS,RCH); CHB[ROW]:=RCH; Write(BaseConv(Ord(CHB[ROW]),FLD,BSE),' '); Inc(ROW); If KeyPressed Then Begin KEY:=UpCase(ReadKey); If KEY=#3 Then Begin WriteLn('^C'); Close(IFS); Halt(20); End; End; If ROW-1=WTH Then Begin Write(' '); s For ERR:=1 To ROW-1 Do PrintChar(CHB[ERR]); ROW:=1; WriteLn; Inc(LNC); If LNC=LNE Then DoPause; OFS:=OFS+WTH; If CTR0 Then Begin For CTR:=1 To WTH-ROW+1 Do Begin For ERR:=1 To FLD Do Write('*'); Write(' '); End; Write(' '); For CTR:=1 To ROW-1 Do PrintChar(CHB[CTR]); End; Ifsx3 ROW>0 Then WriteLn; Write('Dumped ',FSZ,' (',BaseConv(FSZ,OFD,BSE)); WriteLn(') bytes from file `',FLN,''''); CloseFile; End; End; Begin ProgramTitle; GetParams; DumpFile; End.:4 QE%TFA.paspcProgram TextFileAnalyser; Uses Crt,DOS; {$I flength.inc} {$I style.inc} Const VNM='1.00'; VDT='23-May-95'; Var FLN:String; Procedure ShowInformation; Begin Style(0,1); Style(1,1); Style(3,1); WriteLn('TFA (Text File Analyser) v',VNM,' by Zebedee 1995 Carnage (',VDT,')'); Style(0,1); WriteLn(#$a,'Usage: ',ParamStr(0),' ',#$a); WriteLn('Where is the name of the ASCII file you want to analyse. TFA'); WriteLn('will read the file and displ'Aay some information about it.'); Halt(20); Write('$VER: TFA Text File Analyser v1.00 (23-May-95) '); End; Procedure GetParam; Begin If ParamStr(1)='?' Then ShowInformation; If ParamStr(1)='wHy' Then Begin WriteLn('Written because I hate having to load Protext every time I want to analyse'); WriteLn('a file! -zeb/crn'); Halt(20); End; If ParamCount=0 Then Begin WriteLn('Usage: ',ParamStr(0),' '); Halt(20); End; If ParamCount>1 Then %U Begin WriteLn(ParamStr(0),': Too many arguments'); Halt(20); End; FLN:=ParamStr(1); End; Procedure AnalyseFile; Var IFS:Text; RCH:Char; TXT:String; CTR:Integer; FLCTR,ELCTR,WCTR,LOF,SPC:LongInt; Begin ReSet(IFS,FLN); If IOResult<>0 Then Begin WriteLn(ParamStr(0),': Can''t locate the file'); Halt(20); End; FLCTR:=0; ELCTR:=0; WCTR:=0; SPC:=0; While not Eof(IFS) Do Begin ReadLn(IFS,TXT); If Length(TXT)=0 Then Inc(ELCTR) Else Y`k Begin Inc(FLCTR); For CTR:=2 To Length(TXT) Do Begin If (TXT[CTR+1]<>' ') and (TXT[CTR]=' ') Then Inc(WCTR); If TXT[CTR]=' ' Then Inc(SPC); End; Inc(WCTR); If KeyPressed Then Begin RCH:=ReadKey; If RCH=#3 Then Begin WriteLn('*** Break'); Halt(20); End; End; End; End; Close(IFS); LOF:=FLength(FLN); Style(0,1); Style(2,1); TextColor(2); WriteLn('Resul6ts for the file "',FLN,'"...'); TextColor(1); Style(0,1); WriteLn('File length ................... ',LOF,' bytes'); WriteLn('Number of words ............... ',WCTR); WriteLn('Number of spaces .............. ',SPC); WriteLn('Number of empty lines ......... ',ELCTR); WriteLn('Number of lines not empty ..... ',FLCTR); WriteLn('Total number of lines ......... ',ELCTR+FLCTR); End; Begin GetParam; AnalyseFile; End.q^  E% HexTest.pasp program hextest; uses crt; var rch:char; a,b,c,d:Integer; begin writeln('Here''s a stupid way of counting to 65535 but it does emulate hex. The'); writeln('formula is:'); writeln(' (a*16*16*16)+(b*16*16)+(c*16)+d'); writeln('Where a,b,c,d are being increased by 1 by using four nested loops. Use'); writeln('ctrl c to stop.',#$a); writeln('Press SPACE to start...'); repeat until readkey=' '; for a:=0 to 15 do for b:=0 To 15 do for c:=0 to 15 do #3b for d:=0 to 15 do begin writeln((a*16*16*16)+(b*16*16)+(c*16)+d); if keypressed then begin rch:=readkey; if rch=#3 then begin writeln('***BREAK'); halt(20); end; end; end; End.S~E% pMargin.paspProgram PrintMargin_v101; Uses Crt,DOS; {$I style.inc} Const VNM='1.01'; VDT='14-Sep-94'; Var IFS,OFS:Text; INF,OUTF,TXT:String; LMARG:Integer; Procedure ProgramTitle; Begin Style(0,1); Style(1,1); Style(3,1); WriteLn('Print Margin v',VNM,' by Zebedee (',VDT,') ',#$a9,'1995 A Carnage Production'); Style(0,1); WriteLn; End; Procedure Usage; Begin WriteLn('Usage: pMargin '); Halt(10); Write('$VER: pMargin v1.01 (14-Sep-94) ')jU; End; Procedure GetParams; Var ERR:Integer; Begin If ParamStr(1)='?' Then Begin ProgramTitle; Usage; End; If ParamCount<>3 Then Usage; INF:=ParamStr(1); OUTF:=ParamStr(2); Val(Copy(ParamStr(3),1,Length(ParamStr(3))),LMARG,ERR); If ERR<>0 Then Begin WriteLn(ParamStr(0),': Invalid margin setting "',ParamStr(3),'"'); Halt(20); End; End; Procedure PrintFile; Var CTR:Integer; Begin Assign(IFS,INF); ReSet(IFS); If IOResult<>0 Then Begin 6 WriteLn(ParamStr(0),': Cannot find "',INF,'"'); Halt(20); End; Assign(OFS,OUTF); ReWrite(OFS); While not Eof(IFS) Do Begin ReadLn(IFS,TXT); For CTR:=1 To LMARG Do Write(OFS,' '); WriteLn(OFS,TXT); End; Close(OFS); Close(IFS); End; Begin GetParams; PrintFile; End.]E% ReadMe.txt9pJwVarious source code by Zebedee/Area 51^Carnage as of 16-Apr-98 The source contains within this archive is assembler (DevPac), Amiga E and HighSpeed Pascal. Some is very old and not needed, some is not finished and won't be (unless you want to finish it) and the rest is scrap that got rewritten in assembler. Do with it what you want. Rip routines out, kill it, fuck it up, whatever. To trade code (asm only), write to: 6 Bridgefield 39 Beckly Court Ottery St Mary Armada WayDn East Devon or Plymouth EX11 1HL Devon ENGLAND PL1 1LD ENGLAND Have a look and you'll see I don't believe in commenting my code! :) zBd/a51^cRn!98 (KE% Wanderer.sp;$VER: WandererLevelEditor.s v1.00 (01-Apr-98) ;Code by Ivan Oliver ;See the comments at the end of the file... opt o+,w- section main,code ProgStart move.l 4.w,a6 sub.l a1,a1 jsr -$126(a6) ;FindTask(a1)exec move.l d0,a4 tst.l $ac(a4) bne.b FromDOS lea $5c(a4),a0 jsr -$180(a6) ;WaitPort(a0)exec lea $5c(a4),a0 jsr -$174(a6) ;GetMsg(a0)exec move.l d0,WbMsg FromDOS lea Dos_L(pc),a1 moveq.l #0,d0 bsr OpenLibrary move.l d0,Dos_B beq Quit lea Intui_L(pc),a1 moveq.l #0,d0 bsr OpenLibrary move.l d0,Intui_B beq ClDos lea Gfx_L(pc),a1 moveq.l #0,d0 bsr OpenLibrary move.l d0,Gfx_B beq ClIntui lea ReqT_L(pc),a1 moveq.l #37,d0 bsr OpenLibrary move.l d0,ReqT_B beq Err_ShowNoReqTools move.l Intui_B(pc),a6 lea WinDefs(pc),a0 jsr -$cc(a6) ;OpenWindow(a0)int move.l d0,WinPtr beq Err_ShowNoWindow move.l d0,a0 move.l $32(a0),RPort move.l $56(a0),MsgPort lea BoxA1(pc),a1 bsr DrawBorder lea BoxB1(pc),a1 bsr DrawBorder lea BoxC1(pc),a1 bsr DrawBorder moveq.l #1,d0 bsr SetAPen lea MsgText(pc),a4 moveq.l #11,d0 moveq.l #21,d1 moveq.l #40,d7 bsr PrintText lea GadText(pc),a4 ;New move.l #403,d0 moveq.l #23,d1 moveq.l #3,d7 bsr PrintText addq.l #3,a4 ;Load Level move.l #375,d0 moveq.l #35,d1 moveq.l #10,d7 bsr PrintText lea 10(a4),a4 ;Save Level move.l #375,d0 moveq.l #47,d1 moveq.l #10,d7 bsr PrintText lea 10(a4),a4 ;Set Moves move.l #379,d0 moveq.l #83,d1 moveq.l #9,d7 bsr PrintText lea 9(aeXzN4),a4 ;Help move.l #399,d0 moveq.l #107,d1 moveq.l #4,d7 bsr PrintText moveq.l #0,d0 bsr SetDrMd addq.l #4,a4 ;Level Info move.l #375,d0 moveq.l #119,d1 moveq.l #10,d7 bsr PrintText moveq.l #1,d0 bsr SetDrMd lea 10(a4),a4 ;About move.l #395,d0 move.l #131,d1 moveq.l #5,d7 bsr PrintText addq.l #5,a4 ;Quit Editor move.l #371,d0 move.l #152,d1 moveq.l #11,d7 bsr PrintText bsr UpdateMap bsr CountTreasures WinLoop move.l MsgPort(pc),a0 move.l 4.w,a6 jsr -$180(Za6) ;WaitPort(a0)exec move.l MsgPort(pc),a0 move.l 4.w,a6 jsr -$174(a6) ;GetMsg(a0)exec move.l d0,a0 move.l d0,a5 move.l $1C(a0),-(sp) move.l $14(a0),d7 move.l d0,a1 move.l 4.w,a6 jsr -$17A(a6) ;ReplyMsg(a1)exec move.l (sp)+,a0 moveq.l #0,d0 move.w $26(a0),d0 cmp.w #$40,d7 ;IDCMP_GADGETUP beq GadgetSelect cmp.l #$200000,d7 ;IDCMP_VANILLAKEY beq VanillaKey bra.b WinLoop ClWin move.l Intui_B(pc),a6 move.l WinPtr(pc),a0 jsr -$48(a6) ;CloseWindow(a0)int ClReqT move.l9^ ReqT_B(pc),a1 bsr.b CloseLibrary ClGfx move.l Gfx_B(pc),a1 bsr.b CloseLibrary ClIntui move.l Intui_B(pc),a1 bsr.b CloseLibrary ClDos move.l Dos_B(pc),a1 bsr.b CloseLibrary Quit tst.l WbMsg beq.b QuitDOS move.l 4.w,a6 move.l WbMsg(pc),a1 jsr -$17a(a6) ;ReplyMsg(a1)exec QuitDOS moveq.l #0,d0 rts OpenLibrary move.l 4.w,a6 jmp -$228(a6) ;OpenLibrary(a1,d0)exec CloseLibrary move.l 4.w,a6 jmp -$19e(a6) ;CloseLibrary(a1)exec DrawBorder move.l Intui_B(pc),a6 move.l RPort(p7c),a0 moveq.l #0,d0 moveq.l #0,d1 jmp -$6c(a6) ;DrawBorder(a0,a1,d0,d1)int Err_ShowNoReqTools bsr.b Output move.l d0,d1 beq.b ClGfx lea NoReqT(pc),a2 move.l a2,d2 moveq.l #43,d3 bsr.b Write bra.b ClGfx Err_ShowNoWindow bsr.b Output move.l d0,d1 beq.b ClReqT lea NoWin(pc),a2 move.l a2,d2 moveq.l #33,d3 bsr.b Write bra.b ClReqT Output move.l Dos_B(pc),a6 jmp -$3c(a6) ;Output()dos Open move.l Dos_B(pc),a6 jmp -$1e(a6) ;Open(d1,d2,d3)dos Read move.l Dos_B(pc)=X,a6 jmp -$2a(a6) ;Read(d1,d2,d3)dos Write move.l Dos_B(pc),a6 jmp -$30(a6) ;Write(d1,d2,d3)dos Close move.l Dos_B(pc),a6 jmp -$24(a6) ;Close(d1)dos GadgetSelect cmp.b #1,d0 beq CheckNew cmp.b #2,d0 beq LoadLevel cmp.b #3,d0 beq SaveLevel cmp.b #6,d0 beq SetMoves cmp.b #8,d0 beq ShowHelp cmp.b #10,d0 beq ShowAbout cmp.b #11,d0 beq CheckQuit bra WinLoop VanillaKey move.l a5,a0 move.l 20(a0),d0 ;intuimessage.class (IDCMP_VANILLAKEY) move.w 24(a0),d1 ;intuimess $֩age.code (key pressed) move.w 26(a0),d2 ;intuimessage.qualifier (shift, alt etc.) cmp.b #"n",d1 beq CheckNew cmp.b #"l",d1 beq LoadLevel cmp.b #"v",d1 beq SaveLevel cmp.b #"e",d1 beq SetMoves cmp.b #"?",d1 beq ShowAbout cmp.b #"h",d1 beq ShowHelp cmp.b #"q",d1 beq CheckQuit cmp.b #"4",d1 beq CheckMoveLeft cmp.b #"6",d1 beq CheckMoveRight cmp.b #"8",d1 beq CheckMoveUp cmp.b #"2",d1 beq CheckMoveDown cmp.b #"5",d1 beq EraseCharacter cmp.b #" ",d1 beq EraseCha Ӱracter cmp.b #"o",d1 beq InsertUpper cmp.b #"<",d1 beq InsertCharacter cmp.b #">",d1 beq InsertCharacter cmp.b #"^",d1 beq InsertCharacter cmp.b #":",d1 beq InsertCharacter cmp.b #"!",d1 beq InsertCharacter cmp.b #"*",d1 beq InsertCharacter cmp.b #"/",d1 beq InsertCharacter cmp.b #"\",d1 beq InsertCharacter cmp.b #"+",d1 beq InsertCharacter cmp.b #"=",d1 beq InsertCharacter cmp.b #"#",d1 beq InsertCharacter cmp.b #"t",d1 beq InsertUpper cmp.b #"a",d1 beq I gnsertUpper cmp.b #"x",d1 beq InsertUpper cmp.b #"@",d1 beq InsertCharacter cmp.b #"m",d1 beq InsertUpper cmp.b #"s",d1 beq InsertUpper cmp.b #"-",d1 beq InsertCharacter cmp.b #"c",d1 beq InsertUpper bra WinLoop SetAPen move.l Gfx_B(pc),a6 move.l RPort(pc),a1 jmp -$156(a6) ;SetAPen(a1,d0)gfx SetBPen move.l Gfx_B(pc),a6 move.l RPort(pc),a1 jmp -$15c(a6) ;SetCPen(a1,d0)gfx PrintText move.l Gfx_B(pc),a6 move.l a4,a0 move.l RPort(pc),a1 jsr -$f0(a6) ;Move(a1,d0,d w8+1)gfx move.l RPort(pc),a1 move.l d7,d0 jmp -$3c(a6) ;Text(a1,a0,d0)gfx UpdateMap moveq.l #34,d6 lea Map(pc),a4 .loop moveq.l #12,d0 move.l d6,d1 moveq.l #40,d7 bsr.b PrintText lea 41(a4),a4 addq.l #8,d6 cmp.b #162,d6 bne.b .loop bsr UpdateCursor rts ShowAbout lea Rq01T(pc),a0 lea Rq01B(pc),a1 lea OkText(pc),a2 bsr.b EZRequest bra WinLoop CheckQuit lea Rq02T(pc),a0 lea RUSure(pc),a1 lea YesNo(pc),a2 bsr.b EZRequest cmp.b #1,d0 beq ClWin bra WinLoop ShowHe 2T/lp lea Rq03T(pc),a0 lea Rq03B(pc),a1 lea MoreXit(pc),a2 bsr.b EZRequest cmp.b #1,d0 beq.b ShowMoreHelp bra WinLoop ShowMoreHelp lea Rq05T(pc),a0 lea Rq05B(pc),a1 lea OkText(pc),a2 bsr.b EZRequest bra WinLoop CheckNew lea Rq04T(pc),a0 lea RUSure(pc),a1 lea YesNo(pc),a2 bsr.b EZRequest cmp.b #1,d0 beq.b ClearMap bra WinLoop EZRequest move.l ReqT_B(pc),a6 move.w #0,a3 move.w #0,a4 jmp -$42(a6) ;RtEZRequest(a1,a2,a3,a4,a0)rt CountTreasures lea Map(pc),a0 moveAD.l #655,d0 moveq.l #0,d1 .next cmp.b #'*',(a0)+ beq.b .found dbra d0,.next bra.b .exit .found addq.l #1,d1 dbra d0,.next .exit rts ClearMap lea Map(pc),a0 moveq.l #15,d0 .row moveq.l #9,d1 .loop move.l #' ',(a0)+ dbra d1,.loop addq.l #1,a0 dbra d0,.row bsr UpdateMap lea Cleared(pc),a4 bsr ShowMessage bra WinLoop LoadLevel lea Temp(pc),a0 move.b #0,(a0) moveq.l #0,d0 bsr AllocRequest move.l d0,ReqPtr beq Err_NoRequester lea Rf01Tl(pc),a3 move.l #'Load',(a3) 9! bsr FileRequest tst.l d0 beq.b .free lea ReqPtr(pc),a1 move.l (a1),a1 move.l 16(a1),a0 lea LoadFil(pc),a1 bsr ExtractPathFile lea LoadFil(pc),a0 bsr GetFileSize sub.l #697,d0 move.l d0,FileLen bsr LoadLevelFile bsr UpdateMap lea DiskOk(pc),a4 move.l #'load',5(a4) move.l #'ed o',9(a4) move.l #'k. ',13(a4) bsr ShowMessage .free bsr FreeRequest bra WinLoop SaveLevel lea Temp(pc),a0 move.b #0,(a0) moveq.l #0,d0 bsr.b AllocRequest move.l d0,ReqPtr beq Err_NoReqB"uester lea Rf01Tl(pc),a3 move.l #'Save',(a3) bsr.b FileRequest tst.l d0 beq.b .free lea ReqPtr(pc),a1 move.l (a1),a1 move.l 16(a1),a0 lea SaveFil(pc),a1 bsr.b ExtractPathFile bsr SaveLevelFile lea DiskOk(pc),a4 move.l #'save',5(a4) move.l #'d ok',9(a4) move.l #'. ',13(a4) bsr ShowMessage .free bsr.b FreeRequest bra WinLoop ExtractPathFile movem.l d0-d7/a0-a6,-(sp) clr.b (a5) .loopp move.b (a0)+,(a1)+ bne.b .loopp cmp.w #$3a00,-(a1) ;":"0 beq.b .back move.b (fa1)+,(a5) move.b #'/',(a1)+ bra.b .loopn .back move.b (a1)+,(a5) .loopn move.b (a2)+,(a1)+ bne.b .loopn .exit movem.l (sp)+,d0-d7/a0-a6 rts AllocRequest move.l ReqT_B(pc),a6 move.w #0,a0 jmp -$1e(a6) ;RtAllocRequestA(d0,a0)rt FreeRequest move.l ReqT_B(pc),a6 move.l ReqPtr(pc),a1 jmp -$24(a6) ;RtFreeRequest(a1)rt FileRequest move.l ReqT_B(pc),a6 lea Rf01T(pc),a0 move.l ReqPtr(pc),a1 lea Temp(pc),a2 jmp -$36(a6) ;RtFileRequestA(a1,a2,a3,a0)rt GetFileSize move.l Dos_kZB(pc),a6 move.l a0,d1 moveq.l #-2,d2 jsr -$54(a6) ;Lock(d1,d2)dos move.l d0,FileLok beq.b .quit move.l Dos_B(pc),a6 move.l FileLok(pc),d1 move.l #NfoBlok,d2 jsr -$66(a6) ;Examine(d1/d2)dos tst.l d0 beq.b .noinfo lea NfoBlok,a0 move.l $7c(a0),-(sp) .noinfo move.l Dos_B(pc),a6 move.l FileLok(pc),d1 jsr -$5a(a6) ;UnLock(d1)dos move.l (sp)+,d0 .quit rts LoadLevelFile lea LoadFil(pc),a1 move.l a1,d1 move.l #$3ed,d2 bsr Open move.l d0,FilePtr beq Err_DiskError move.%l d0,d1 lea Map(pc),a2 move.l a2,d2 move.l #656,d3 bsr Read move.l FilePtr(pc),d1 lea Temp(pc),a2 move.l a2,d2 moveq.l #41,d3 bsr Read move.l FilePtr(pc),d1 lea Moves(pc),a2 move.l a2,d2 move.l #" ",(a2) move.l FileLen(pc),d3 bsr Read move.l FilePtr(pc),d1 bsr Close bsr ShowMaxMoves rts SaveLevelFile lea SaveFil(pc),a1 move.l a1,d1 move.l #$3ee,d2 bsr Open move.l d0,FilePtr beq.b Err_DiskError move.l d0,d1 lea Map(pc),a2 move.l a2,d2 move.l #697,d3 b4sr Write move.l FilePtr(pc),d1 lea Moves(pc),a2 move.l a2,d2 move.l FileLen(pc),d3 bsr Write move.l FilePtr(pc),d1 bsr Close rts Err_DiskError lea DiskErr(pc),a4 bsr ShowMessage bra WinLoop SetMoves moveq.l #5,d0 ;type bsr AllocRequest move.l d0,ReqPtr beq.b Err_NoRequester lea Rl01T(pc),a0 lea MovesD(pc),a1 bsr.b GetLong lea MovesD(pc),a1 lea Moves(pc),a0 move.l (a1),d1 bsr.b DecToAscii bsr FreeRequest bra WinLoop GetLong move.l ReqT_B(pc),a6 move.w #0,a2 move.l ReqPtr(pc),a3 jmp -$4e(a6) ;RtGetLongA(a1,a2,a3,a0)rt Err_NoRequester lea NoReqP(pc),a4 bsr ShowMessage bra WinLoop DecToAscii divu #1000,d1 bsr.b .digit divu #100,d1 bsr.b .digit divu #10,d1 bsr.b .digit nop .digit add #$30,d1 move.b d1,(a0)+ clr d1 swap d1 rts ShowMaxMoves lea MovesIs(pc),a4 lea Moves(pc),a1 move.l #" ",27(a4) move.l (a1),27(a4) moveq.l #11,d0 moveq.l #21,d1 moveq.l #40,d7 bsr PrintText rts CheckMoveLeft cmp.w #1,X_Pos bl4Ԍe WinLoop bsr UpdateCursor subq.w #1,X_Pos bra.b UpdateX_Pos CheckMoveRight cmp.w #40,X_Pos bge WinLoop bsr.b UpdateCursor addq.w #1,X_Pos bra.b UpdateX_Pos CheckMoveUp cmp.w #1,Y_Pos ble WinLoop bsr.b UpdateCursor subq.w #1,Y_Pos bra.b UpdateY_Pos CheckMoveDown cmp.w #16,Y_Pos bge WinLoop bsr.b UpdateCursor addq.w #1,Y_Pos bra.b UpdateY_Pos UpdateX_Pos lea MsgText(pc),a0 addq.l #2,a0 move.w X_Pos,d1 bsr.b ConvertCoords bsr.b UpdateMessage bra.b ContinueXY Zp UpdateY_Pos lea MsgText(pc),a0 addq.l #7,a0 move.w Y_Pos,d1 bsr.b ConvertCoords bsr.b UpdateMessage ContinueXY bsr.b UpdateCursor bra WinLoop ConvertCoords divu #10,d1 bsr.b .digit nop .digit add #$30,d1 move.b d1,(a0)+ clr d1 swap d1 rts UpdateCursor moveq.l #-1,d0 bsr.b SetDrMd moveq.l #3,d0 bsr SetAPen moveq.l #0,d0 bsr SetBPen moveq.l #0,d0 moveq.l #0,d1 move.w X_Pos(pc),d0 bsr.b CalculateX move.w Y_Pos(pc),d1 bsr.b CalculateY move.l d0,d2 move.l Ed1,d3 bsr.b ShowCursor moveq.l #1,d0 bsr SetAPen move.l Gfx_B(pc),a6 move.l RPort(pc),a1 moveq.l #1,d0 bsr.b SetDrMd rts UpdateMessage lea MsgText(pc),a4 moveq.l #11,d0 moveq.l #21,d1 moveq.l #40,d7 bsr PrintText rts CalculateX mulu.w #8,d0 addq.w #4,d0 rts CalculateY mulu.w #8,d1 add.w #26,d1 rts ShowCursor lea Crsr(pc),a4 moveq.l #1,d7 bsr PrintText rts SetDrMd move.l Gfx_B(pc),a6 move.l RPort(pc),a1 jmp -$162(a6) ;SetDrMd(a1,d0)gfx EraseCharacter 썳move.b #32,d1 bra.b InsertCharacter InsertUpper sub.b #" ",d1 InsertCharacter move.w d1,d7 moveq.l #0,d0 move.w Y_Pos(pc),d0 mulu.w #41,d0 sub.w #41,d0 add.w X_Pos(pc),d0 subq.w #1,d0 lea Map(pc),a0 add.l d0,a0 move.b d7,(a0) bsr UpdateMap bra WinLoop ShowMessage moveq.l #11,d0 moveq.l #21,d1 moveq.l #40,d7 bsr PrintText rts Dos_L dc.b 'dos.library',0 Intui_L dc.b 'intuition.library',0 Gfx_L dc.b 'graphics.library',0 ReqT_L dc.b 'reqtools.library',0 Dos_B dc.l C'Y0 Intui_B dc.l 0 Gfx_B dc.l 0 ReqT_B dc.l 0 FilePtr dc.l 0 MsgPort dc.l 0 RPort dc.l 0 ReqPtr dc.l 0 FileLok dc.l 0 FileLen dc.l 5 X_Pos dc.w 1 Y_Pos dc.w 1 WbMsg dc.l 0 NoReqT dc.b 'ERROR: Unable to open reqtools.library v37',$a NoWin dc.b 'ERROR: Unable to open the window',$a WinDefs dc.w 0,11 ;x,y dc.w 499,161 ;w,h dc.b 0,1 ;detailPen,blockPen dc.l $200040 ;IDCMP:GADGETUP!VANILLAKEY dc.l $11006 ;WFLG:DRAGBAR!DEPTHGADGET!CLOSEGADGET!ACTIVATE!RMBTRAP dc.l Gad01 ;firDst gadget dc.l 0 ;checkmark image dc.l WinTitl ;Window title dc.l 0 ;screen dc.l 0 ;bitmap dc.w 50,20 ;min w,min h dc.w 640,256 ;max w,max h dc.w 1 ;in workbench WinTitl dc.b 'Wanderer Level Editor by Ivan Oliver',0 WinPtr dc.l 0 SmlFont dc.l TopazF,$80000 BigFont dc.l TopazF,$90000 TopazF dc.b 'topaz.font',0 Gad01 dc.l Gad02 ;New dc.w 343,15,144,11 dc.w 2,1,1 dc.l BdrUp3,BdrDn3,0,0,0 dc.w 1 dc.l 0 Gad02 dc.l Gad03 ;Load Level dc.w 343,27,144,11 dc.w 2:I,1,1 dc.l BdrUp3,BdrDn3,0,0,0 dc.w 2 dc.l 0 Gad03 dc.l Gad04 ;Save Level dc.w 343,39,144,11 dc.w 2,1,1 dc.l BdrUp3,BdrDn3,0,0,0 dc.w 3 dc.l 0 Gad04 dc.l Gad05 ;DISABLED dc.w 343,51,144,11 dc.w $103,1,1 dc.l BdrUp3,BdrDn3,0,0,0 dc.w 4 dc.l 0 Gad05 dc.l Gad06 ;DISABLED dc.w 343,63,144,11 dc.w $103,1,1 dc.l BdrUp3,BdrDn3,0,0,0 dc.w 5 dc.l 0 Gad06 dc.l Gad07 ;Set Moves dc.w 343,75,144,11 dc.w 2,1,1 dc.l BdrUp3,BdrDn3,0,0,0 dc.w 6 dc.l 0 Gad07 dc.l Gad08 ;}DISABLED dc.w 343,87,144,11 dc.w $103,1,1 dc.l BdrUp3,BdrDn3,0,0,0 dc.w 7 dc.l 0 Gad08 dc.l Gad09 ;Help dc.w 343,99,144,11 dc.w 2,1,1 dc.l BdrUp3,BdrDn3,0,0,0 dc.w 8 dc.l 0 Gad09 dc.l Gad10 ;Level Info dc.w 343,111,144,11 dc.w $302,1,1 dc.l BdrUp3,BdrDn3,0,0,0 dc.w 9 dc.l 0 Gad10 dc.l Gad11 ;About dc.w 343,123,144,11 dc.w 2,1,1 dc.l BdrUp3,BdrDn3,0,0,0 dc.w 10 dc.l 0 Gad11 dc.l 0 ;Quit Editor dc.w 343,144,144,11 dc.w 2,1,1 dc.l BdrUp3,BdrDn3,0,0,0 dc.wbs 11 dc.l 0 BdrUp3 dc.w 0,-1 dc.l $1020005,BdrUp3L,BdrUp4 BdrUp3L dc.w 0,11, 143,11, 143,1, 142,2, 142,11 BdrUp4 dc.w 0,-1 dc.l $2010005,BdrUp4L,0 BdrUp4L dc.w 142,1, 0,1, 0,11, 1,10, 1,1 BdrDn3 dc.w 0,-1 dc.l $2010005,BdrDn3L,BdrDn4 BdrDn3L dc.w 0,11, 143,11, 143,1, 142,2, 142,11 BdrDn4 dc.w 0,-1 dc.l $1020005,BdrDn4L,0 BdrDn4L dc.w 142,1, 0,1, 0,11, 1,10, 1,1 BoxA1 dc.w 8,12 ;Message window dc.l $2010005,BoxA1L,BoxA2 BoxA1L dc.w 0,11, 326,11, 326,1, 325,2, 325,11 BoxA2 dc.w BƋ8,12 dc.l $1020005,BoxA2L,0 BoxA2L dc.w 325,1, 0,1, 0,11, 1,10, 1,1 BoxB1 dc.w 8,25 ;Map window dc.l $2010005,BoxB1L,BoxB2 BoxB1L dc.w 0,131, 326,131, 326,1, 325,2, 325,131 BoxB2 dc.w 8,25 dc.l $1020005,BoxB2L,0 BoxB2L dc.w 325,1, 0,1, 0,131, 1,130, 1,1 BoxC1 dc.w 339,12 ;Gadgets window dc.l $2010005,BoxC1L,BoxC2 BoxC1L dc.w 0,144, 151,144, 151,1, 150,2, 150,144 BoxC2 dc.w 339,12 dc.l $1020005,BoxC2L,0 BoxC2L dc.w 150,1, 0,1, 0,144, 1,143, 1,1 MsgText dc.b 'X=01 Y=01 *=000 C ^=? ' MovesIs dc.b 'Maximum number of moves is XXXX ' DiskOk dc.b 'File loaded ok. ' DiskErr dc.b 'Problem accessing file ' NoReqP dc.b 'Problem allocating ReqTools requester ' Cleared dc.b 'Here you are, have a nice empty level...' GadText dc.b 'NewLoad LevelSave LevelSet MovesHelpLevel InfoAboutQuit Editor' Map dc.b '=======================\OOO*OOOO/#OO####',$a dc.b '*O O:# O/ \OOOOOO/# ::A**#',$a !! dc.b '# O #### #:# **/ \OOOO/ ######',$a dc.b '# # O *#:# \OO/ ## -',$a dc.b '# #* * ###:# OOO O/ ## -',$a dc.b '# ######:::#***** :/ *###* O -',$a dc.b '# #* @ *<*###*< -',$a dc.b '#*#! ### \ *###* -',$a dc.b '### ! :: \ ## -',$a dc.b '# # \ /=O= :::: \O / O/',$a dc.b '#* O O = :: / \* / */-',$a dc.b '### #"2X***# = / \ O/ -',$a dc.b 'X < !!! #\*/# = / O*O*O*O -',$a dc.b '>* * *< # # = / =**O*O= -',$a dc.b ' !!! ! !# #! =! \ / =:O*O:= -',$a dc.b ' ! *#T#*:::::\**/ =::::::*-',$a dc.b '########################################',$a Moves dc.b '1000',$a,0 Rq01T dc.l $8000000b,'_' ;RT_UNDERSCORE dc.l $80000014,Rq01Tl ;RTEZ_REQTITLE dc.l $80000016,4 ;RTEZ_FLAGS (EZREQF_CENTERTEXT) dc.l 0 ;End of taglist Rq01Tl dc.b 'Abou#t...',0 Rq01B dc.b 'Wanderer Level Editor v1.00',$a dc.b 'by Ivan Oliver (01-Apr-98)',$a,$a dc.b 'Written using assembler',$a,$a dc.b 'Write to me at:',$a dc.b '6 Bridgefield, Ottery St Mary',$a dc.b 'East Devon, EX11 1HL, ENGLAND',0 OkText dc.b '_Ok',0 Rq02T dc.l $8000000b,'_' ;RT_UNDERSCORE dc.l $80000014,Rq02Tl ;RTEZ_REQTITLE dc.l $80000017,0 ;RTEZ_DEFAULTRESPONSE dc.l 0 ;End of taglist Rq02Tl dc.b 'Quit...',0 RUSure dc.b 'Are you sure ?',0 YesNo dc.b '_Yes|_No',0 Rq03$[r4T dc.l $8000000b,'_' ;RT_UNDERSCORE dc.l $80000014,Rq03Tl ;RTEZ_REQTITLE dc.l $80000017,0 ;RTEZ_DEFAULTRESPONSE dc.l 0 ;End of taglist Rq03Tl dc.b 'Help (Symbols)...',0 Rq03B dc.b 'O Boulder',$a dc.b '<> Arrows',$a dc.b '^ Balloon',$a dc.b ': Earth',$a dc.b '! Bomb',$a dc.b '* Treasure',$a dc.b '/\ Slopes',$a dc.b '+ Cage',$a dc.b '=# Rock',$a dc.b 'T Teleport',$a dc.b 'A Arrival (1 max)',$a dc.b 'X Exit (always 1)',$a dc.b '@ Start (always 1)',$a dc.b '%zOM Big monster (1 max)',$a dc.b 'S Baby monster',$a dc.b '- Alternative space',$a dc.b 'C Time capsule',0 MoreXit dc.b '_More|_Cancel',0 Rq04T dc.l $8000000b,'_' ;RT_UNDERSCORE dc.l $80000014,Rq04Tl ;RTEZ_REQTITLE dc.l $80000017,0 ;RTEZ_DEFAULTRESPONSE dc.l 0 ;End of taglist Rq04Tl dc.b 'New...',0 Rf01Tl dc.b 'ZBD! Level...',0 even LoadFil dcb.b 255,0 SaveFil dcb.b 255,0 Temp dcb.b 255,0 Rf01T dc.l $8000000b,'_',$8000002a,OkText,0 Rq05T dc.l $8000000b,'_' ;RT_UNDERSCOR&HlE dc.l $80000014,Rq05Tl ;RTEZ_REQTITLE dc.l $80000017,0 ;RTEZ_DEFAULTRESPONSE dc.l 0 ;End of taglist Rq05B dc.b '4 Left 6 Right',$a dc.b '8 Up 2 Down',$a dc.b '5 Erase H Help',$a dc.b 'N New L Load Level',$a dc.b 'V Save Level E Set Moves',$a dc.b 'I Level Info ? About',$a dc.b 'Q Quit Editor',$a,$a dc.b 'Press the key corresponding to',$a dc.b 'the desired symbol to insert it.',0 Rq05Tl dc.b 'Help (Co'Sntrols)...',0 Rl01T dc.l $80000022,AccCncl ;RTGS_GADFMT dc.l $80000026,Rl01B ;RTGS_TEXTFMT dc.l $80000016,4 ;RTGS_FLAGS,GSREQF_CENTERTEXT dc.l $8000000b,'_' ;RT_UNDERSCORE dc.l 0 MovesD dc.l 1000 AccCncl dc.b '_Accept|_Cancel',0 Rl01B dc.b 'Enter the number of moves:',0 Crsr dc.b '?' section fib,data cnop 0,4 NfoBlok dcb.b 260,0 end I knocked this up in a day before I realised that there were pull-down menus telling me that there was an editor already built-in. I hope y(lou enjoy this code even though I admit it's not been tidied up much - I didn't see much point after using the built-in editor! It assembles fine using DevPac (which I used to write it) and although I've not been able to test it, it should work on Kickstart 1.3 upwards but the only problem will arise with reqtools.library. No external files are required during assembly. I *HATE* includes!!! :D Zebedee.ƒԽ2^E% NewDisk.s"pz;$VER: ND.s v1.00 (28-Jan-98) ;Code by Zebedee/A51 ;Make the computer think that a disk has been inserted into the drive. ;Usage : ND [unit] ;Example: ND 1 ;Where is 0-3 section main,code ProgStart cmp.b #1,d0 beq.b .skip lea Drive(pc),a1 move.b (a0),2(a1) .skip move.l 4.w,a6 lea DosName(pc),a1 moveq.l #0,d0 jsr -$228(a6) ;OpenLibrary(a1,d0)exec move.l d0,a5 beq.b Quit move.l d0,a6 lea Drive(pc),a1 move.l a1,d1 jsr -$ae(a6) ;DeviceProc(d1)dos move.l d0,a4 bvX2eq.b ClDos move.l d0,d1 moveq.l #$1f,d2 moveq.l #-1,d3 moveq.l #0,d4 jsr -$f0(a6) ;DoPkt(d1,d2,d3,d4,d5,d6)dos tst.l d0 beq.b ClDos move.l d4,d3 move.l a4,d1 jsr -$f0(a6) ;DoPkt(d1,d2,d3,d4,d5,d6)dos ClDos move.l 4.w,a6 move.l a5,a1 jsr -$19e(a6) ;CloseLibrary(a1)exec Quit moveq.l #0,d0 moveq.l #0,d1 rts DosName dc.b 'dos.library',0 Drive dc.b 'DF0:',0 endhڞE% BSC_old.s[pi;$VER: BSC_old.s v1.01 (01-Mar-98) ;Updated by Zebedee/Area 51 from BSC by Crain/101 opt o+,w- section bsc,code_c ProgStart bsr.b OpenDosLibrary beq.s Quit bsr ShowProgramTitle bsr.b AllocateMemory beq.s ClDos bsr AskSourceFilename bsr GetFileLength beq.s FrMem bsr ConvertFile FrMem bsr.b FreeMemory ClDos bsr CloseDosLibrary Quit moveq #0,d0 rts OpenDosLibrary move.l 4.w,a6 lea Dos_L.l,a1 jsr -$198(a6) ;OldOpenLibrary(a1)exec move.l d0,Dos_B.l rts AllocateMemory  move.l 4.w,a6 move.l #$25800,d0 move.l #$10000,d1 jsr -$C6(a6) ;AllocMem(d0,d1)exec move.l d0,MemPtr1.l beq.s .noMem1 move.l 4.w,a6 move.l #$320,d0 move.l #$10000,d1 jsr -$C6(a6) ;AllocMem(d0,d1)exec move.l d0,MemPtr2.l bne.s .NoMem2 .noMem1 move.l #NoChip,d2 bsr PrintText move.l MemPtr1.l,d0 .NoMem2 rts FreeMemory move.l 4.w,a6 move.l #$25800,d0 move.l MemPtr1.l,a1 jsr -$D2(a6) ;FreeMem(a1,d0)exec move.l 4.w,a6 move.l #$320,d0 move.l MemPtr2.l,a1 jmp -$D2(a6) 7;FreeMem(a1,d0)exec CloseDosLibrary move.l 4.w,a6 move.l Dos_B.l,a1 jmp -$19E(a6) ;CloseLibrary(a1)exec OpenTargetFile move.l Dos_B.l,a6 move.l #TargetN,d1 move.l #$3EE,d2 jsr -$1E(a6) ;Open(d1,d2)dos move.l d0,FilePtr.l beq.s ShowErrorSaving rts WriteToFile move.l Dos_B.l,a6 move.l FilePtr.l,d1 move.l MemPtr2.l,d2 jsr -$30(a6) ;Write(d1,d2,d3)dos cmp.l #0,d0 beq.s ShowErrorSaving rts CloseFile move.l Dos_B.l,a6 move.l FilePtr.l,d1 jmp -$24(a6) ;Close(d1)dos ׮ShowErrorSaving move.l #ErrSave,d2 bsr PrintText clr.l d0 rts GetFileLength move.l Dos_B.l,a6 move.l #SourceN,d1 move.l #$3ED,d2 jsr -$1E(a6) ;Open(d1,d2)dos move.l d0,FilePtr.l beq.s ShowLoadError move.l d0,d1 move.l MemPtr1.l,d2 move.l #$257FF,d3 ;$257FF=!153599 jsr -$2A(a6) ;Read(d1,d2,d3)dos move.l d0,FileLen.l move.l FilePtr.l,d1 jsr -$24(a6) ;Close(d1)dos move.l FileLen.l,d0 rts ShowLoadError move.l #LoadErr,d2 bsr PrintText move.l FileLen.l,d0 rts ShoAswProgramTitle move.l Dos_B.l,a6 jsr -$3C(a6) ;Output()dos move.l d0,StdOut.l move.l #Title,d2 bsr PrintText rts AskSourceFilename move.l #AskRead,d2 bsr PrintText bsr GetUserInput move.l #Buffer,a0 move.l #SourceN,a1 .loop cmp.b #10,(a0) beq.s AskTargetFilename move.b (a0)+,(a1)+ bra.s .loop AskTargetFilename move.l #AskSave,d2 bsr PrintText bsr GetUserInput move.l #Buffer,a0 move.l #TargetN,a1 .loop cmp.b #10,(a0) beq.s AskByteWordLong move.b (a0)+,(a1)+ bra.?Хs .loop AskByteWordLong move.l #AskBWL,d2 bsr PrintText bsr GetUserInput move.l #Buffer,a0 move.b (a0)+,Align.l cmp.b #10,(a0) beq.s chk_a MoveUp move.l #CrsrUp,d2 bsr PrintText bra.s AskByteWordLong chk_a move.b Align.l,d0 cmp.b #$61,d0 ;a blt.s chk_L sub.b #$20,d0 move.b d0,Align.l chk_L cmp.b #$4C,d0 ;L bne.s chk_W move.l #4,Width.l bra.s AskItemsPerLine chk_W cmp.b #$57,d0 ;W bne.s chk_B move.l #2,Width.l bra.s AskItemsPerLine chk_B cmp.b #$42,d0 ;B bne.s Mová?beUp move.l #1,Width.l AskItemsPerLine move.l #AskIPL,d2 bsr PrintText bsr GetUserInput move.l #Buffer,a0 move.w (a0)+,Items.l cmp.b #10,(a0) beq.s InputIsValid move.w Items.l,d2 cmp.b #10,d2 beq.s InputIsValid Invalid move.l #CrsrUp,d2 bsr PrintText bra chk_a InputIsValid moveq #0,d0 moveq #0,d1 move.w Items.l,d0 move.b d0,d1 asr.l #8,d0 cmp.b #10,d1 bne.s .notCR move.b d0,d1 move.b #$30,d0 ;"0" .notCR cmp.b #$39,d0 ;"9" bgt.s Invalid cmp.b #$39,d1 ;"9" bgt.8Pes Invalid cmp.b #$30,d0 ;"0" blt.s Invalid cmp.b #$30,d1 ;"0" blt.s Invalid sub.l #$30,d0 ;Convert to 0x???????? sub.l #$30,d1 ;Convert to 0x???????? mulu #10,d0 add.l d0,d1 move.l d1,ItemsHX.l rts ConvertFile bsr OpenTargetFile beq Error move.l MemPtr1.l,a3 NxtLine move.l MemPtr2.l,a5 move.l #$C7,d0 .loop clr.l (a5)+ dbra d0,.loop move.l MemPtr2.l,a4 move.b #9,(a4)+ ;tab move.b #$64,(a4)+ ;"d" move.b #$63,(a4)+ ;"c" move.b #$2E,(a4)+ ;"." move.b Align.l,(a4)+  Igmove.b #9,(a4)+ ;tab moveq.l #6,d7 move.l ItemsHX.l,d5 Dollar move.b #$24,(a4)+ ;"$" addq.l #1,d7 move.l Width.l,d6 .loop bsr.b ConvertToHex subq.l #1,d6 bne.s .loop move.b #$2C,(a4)+ ;"," addq.l #1,d7 subq.l #1,d5 bne.s Dollar subq.l #1,a4 move.b #10,(a4)+ move.l d7,d3 movem.l d1-d7/a0-a6,-(sp) bsr WriteToFile movem.l (sp)+,d1-d7/a0-a6 cmp.l #0,d0 beq.s Error move.l a3,d0 move.l MemPtr1.l,d1 sub.l d1,d0 cmp.l FileLen.l,d0 blt NxtLine bsr CloseFile Error rts  ConvertToHex moveq #0,d2 move.b (a3)+,d2 move.l d2,d3 and.l #$F0,d2 asr.l #4,d2 and.l #15,d3 add.l #$30,d2 ;"0" add.l #$30,d3 ;"0" cmp.b #$39,d2 ;"9" ble.s .number addq.l #7,d2 .number cmp.b #$39,d3 ;"9" ble.s .done addq.l #7,d3 .done move.b d2,(a4)+ move.b d3,(a4)+ addq.l #2,d7 rts PrintText move.l Dos_B.l,a6 move.l d2,a0 moveq #0,d3 .loop addq.l #1,d3 cmp.b #0,(a0)+ bne.s .loop subq.l #1,d3 move.l StdOut.l,d1 jmp -$30(a6) ;Write(d1,d2,d3)dos GetUserInput  Ю.wmove.l Dos_B.l,a6 move.l StdOut.l,d1 move.l #Buffer,d2 move.l #$FF,d3 jmp -$2A(a6) ;Read(d1,d2,d3)dos section bscdata,data Version dc.b '$VER: BSC Binary to Source Converter v1.01 (19-Feb-95)' Buffer dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 'BSC originally coded by Crain/101 in NOV-88,' dc.b ' rewritten by Zebedee/Carnage in FEB-95' AskRead dc.b 'Binary data f ۼile to read: ',0 AskSave dc.b 'Save assembler source as: ',0 AskBWL dc.b '[B]yte / [W]ord / [L]ong: ',0 AskIPL dc.b '# of data items per line: ',0 Title dc.b $9B,'0;2mBinary to Source Converter v1.01',$A dc.b $9B,'0mBy CRAIN of 101 - The Maltese Hackers',$A dc.b 'Rewritten by Zebedee/Carnage',$A,$A,0 ErrSave dc.b 'ERROR: I can''t save the file!',$9B,'0m',$A,0 NoChip dc.b 'ERROR: Sorry, but there isn''t enough CHIPMEM',$9B,'0m',$A,0 LoadErr dc.b 'ERROR: There seems to be a loading e Ohxrror!',$9B,'0m',$A,0 Dos_L dc.b 'dos.library',0 Dos_B dc.l 0 MemPtr1 dc.l 0 MemPtr2 dc.l 0 TargetN dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 FilePtr dc.l 0 SourceN dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0 FileLen dc.l 0 StdOut dc.l 0 CrsrUp dc.b 11 dc.b 0 Align dc.l 0 Items dc.,/Xl 0 Width dc.l 0 ItemsHX dc.l 0 dc.w 0 endԜNk.E% SwitchMode.s pՍfq;SwitchMode (Switch the screen mode between 50Hz and 60Hz) ;Code: Zebedee/Carnage ;$VER: SwitchMode v1.02 (17-Oct-95) opt o+ section ModeSwitch,code_c ProgStart move.l a0,a5 move.l d0,d5 moveq.l #0,d4 move.l 4.w,a6 lea DosName(pc),a1 moveq.l #0,d0 jsr -$228(a6) ;OpenLibrary(a1,d0)exec move.l d0,DosBAdr beq.b BadDos move.l d0,a6 jsr -$3c(a6) ;Output()dos move.l d0,Output beq.b Exit cmp.b #'?',(a5) beq.b ShowAbout cmpi.b #1,d5 beq.b ShowUsage cmp.b #'0',1(a5) b!àne.b ShowBadParameter cmp.b #'5',(a5) beq.b Switch50Hz cmp.b #'6',(a5) beq.b Switch60Hz bra.b ShowBadParameter Exit move.l 4.w,a6 move.l DosBAdr(pc),a1 jsr -$19e(a6) ;CloseLibrary(a1)exec BadDos move.l d4,d0 rts ShowBadParameter move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea BadParm(pc),a2 move.l a2,d2 moveq.l #26,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos moveq.l #20,d4 bra.b Exit ShowUsage move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea Usage(pc),a2 move.l a2,d2 mo veq.l #26,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos moveq.l #20,d4 bra.b Exit ShowAbout move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea About(pc),a2 move.l a2,d2 moveq.l #91,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos bra.b Exit Switch50Hz move.w #32,$dff1dc bra.b Exit Switch60Hz clr.l $dff1dc bra.b Exit Version dc.b '$VER: SwitchMode v1.02 (17-Oct-95)',0 DosName dc.b 'dos.library',0 DosBAdr dc.l 0 Output dc.l 0 About dc.b $9b,'0;1;4mSwitchMode v1.02 by Zebedee 1995 Carnage (17v2-Oct-95)',$9b,'0m',$a,$a Usage dc.b 'Usage: SwitchMode <50|60>',$a,$a BadParm dc.b 'SWITCHMODE: Bad parameter',$a endم| E%Text.spڕ$;Text (A program to print text on the AmigaDOS screen at a y,x position) ;Code: Zebedee/Carnage ;$VER: Text.s v1.02 (24-Aug-96) opt o+ section main,code_c ProgStart move.l a0,a5 move.l d0,d5 moveq.l #0,d4 move.l 4.w,a6 lea DosName(pc),a1 moveq.l #0,d0 jsr -$228(a6) ;OpenLibrary(a1,d0)exec move.l d0,DosBAdr beq.b BadDos move.l d0,a6 jsr -$3c(a6) ;Output()dos move.l d0,Output beq.b Exit cmp.b #'?',(a5) beq.b ShowAbout cmpi.b #1,d5 beq.b ShowUsage cmp.b #' ',1(a5v) bne.w ShowParameterErr cmp.b #' ',6(a5) bne.w ShowParameterErr cmp.b #'y',(a5) beq.b .skip cmp.b #'n',(a5) beq.b .skip bra.w ShowBadCr .skip bsr.b PositionText Exit move.l 4.w,a6 move.l DosBAdr(pc),a1 jsr -$19e(a6) ;CloseLibrary(a1)exec BadDos move.l d4,d0 rts ShowAbout move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea About(pc),a2 move.l a2,d2 move.l #273,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos bra.b Exit ShowUsage move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea U܌jsage(pc),a2 move.l a2,d2 moveq.l #35,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos moveq.l #20,d4 bra.b Exit PositionText cmp.b #'n',(a5) beq.b RemoveCr Return move.b #$9b,(a5) move.b 2(a5),1(a5) move.b 3(a5),2(a5) move.b #';',3(a5) move.b #'H',6(a5) move.l DosBAdr(pc),a6 move.l Output(pc),d1 move.l a5,d2 move.l d5,d3 jmp -$30(a6) ;Write(d1/d2/d3)dos RemoveCr subi.b #1,d5 bra.b Return ShowParameterErr move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea PrmErr(pc),a0 move.Y.bl a0,d2 moveq.l #$16,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos moveq.l #20,d4 bra.w Exit ShowBadCr move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea BadCr(pc),a0 move.l a0,d2 moveq.l #37,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos moveq.l #20,d4 bra.w Exit Version dc.b '$VER: Text v1.02 (24-Aug-96)',0 DosName dc.b 'dos.library',0 DosBAdr dc.l 0 Output dc.l 0 About dc.b $9b,'0;1;4mText v1.02 by Zebedee 1995 Carnage (24-Aug-96)',$9b,'0m',$a,$a Usage dc.b 'Usage: Text []',$a dc.b 'Eg. : Text y 0133 This is a test',$a,$a dc.b 'Where is "y" for a cr or "n" for no.',$a dc.b 'Where and are both two digit numbers (Eg. 01 not 1)',$a dc.b 'Where is not enclosed in quotes.',$a PrmErr dc.b 'TEXT: Parameter error',$a BadCr dc.b 'TEXT: must be either "y" or "n"',$a end History: v1.00 (-Unknown-) > First release. If no parameter specified, didn't print all text and ad a cr to eol. v1.01 (25-Dec-95) > Now prints all text ang5!d cr to eol if no parameter specified. v1.02 (24-Aug-96) > Corrected bug in "Parameter error" routine.#LE%ThruZeb_Text.spG|;Program: Open a window showing address ;Author : Zebedee/Carnage ;Date : 18-Sep-95 opt o+ section main,code_c ProgStart move.l 4.w,a6 sub.l a1,a1 jsr -$126(a6) ;FindTask(a1)exec move.l d0,a4 tst.l $ac(a4) bne.b FromDOS lea $5c(a4),a0 jsr -$180(a6) ;WaitPort(a0)exec lea $5c(a4),a0 jsr -$174(a6) ;GetMsg(a0)exec move.l d0,WbMsg FromDOS move.l 4.w,a6 lea IntName(pc),a1 moveq.l #0,d0 jsr -$228(a6) ;OpenLibrary(a1,d0)exec move.l d0,IntBAdr beq Exit lea DFName(pc\C),a1 moveq.l #0,d0 jsr -$228(a6) ;OpenLibrary(a1,d0)exec move.l d0,DFBAdr move.l DFBAdr,a6 lea NewFont,a0 jsr -$1e(a6) ;OpenFont(a1)dfont move.l d0,FontPtr move.l IntBAdr(pc),a6 lea WinDefs(pc),a0 jsr -$cc(a6) ;OpenWindow(a0)int move.l d0,WinPtr beq.b BadWin move.l WinPtr(pc),a0 lea WinTitl(pc),a1 lea ScrTitl(pc),a2 jsr -$114(a6) ;SetWindowTitles(a0,a1,a2)int jsr -$1c8(a6) ;RefreshWindowFrame(a0)int jsr -$156(a6) ;WBenchToFront()int move.w #0,a0 jsr -$60(a6)ɺ ;DisplayBeep(a0)int move.l WinPtr(pc),a0 move.l $32(a0),a0 lea TheText(pc),a1 moveq.l #0,d0 moveq.l #0,d1 jsr -$d8(a6) ;PrintIText(a0/a1,d0/d1)int .loop move.l WinPtr(pc),a0 move.l $56(a0),a0 move.l 4.w,a6 jsr -$174(a6) ;GetMsg(a0)exec tst.l d0 beq.b .loop move.l IntBAdr(pc),a6 move.l WinPtr(pc),a0 jsr -$48(a6) ;CloseWindow(a0)int BadWin move.l 4.w,a6 move.l IntBAdr(pc),a1 jsr -$19e(a6) ;CloseLibrary(a1)exec Exit tst.l WbMsg beq.b ExitDOS move.l 4.w,a6 move.l ! WbMsg(pc),a1 jsr -$17a(a6) ;ReplyMsg(a1)exec ExitDOS moveq.l #0,d0 rts Version dc.b '$VER: Show Address v1.00 (18-Sep-95)',0 IntName dc.b 'intuition.library',0 DFName dc.b 'diskfont.library',0 IntBAdr dc.l 0 DFBAdr dc.l 0 WbMsg dc.l 0 WinPtr dc.l 0 WinDefs dc.w 170,78 ;x,y dc.w 300,95 ;w,h dc.b 0,1 ;detailPen,blockPen dc.l $200 ;IDCMP dc.l $31008 ;flags (+2 for size_gad) dc.l 0 ;first gadget dc.l 0 ;checkmark image dc.l WinTitl ;Window title dc.l 0 ;scr"8een dc.l 0 ;bitmap dc.w 50,20 ;min w,min h dc.w 640,256 ;max w,max h dc.w 1 ;in workbench WinTitl dc.b 'You''ll never guess what...',0 ScrTitl dc.b 'CARNAGE - Always where you never expect us to be!',0 TheText dc.l $01000002 ;dp,bp,md,?? dc.l $0023000e ;xxxx,yyyy dc.l NewFont dc.l TextL1 dc.l StruL2s TextL1 dc.b '...this thang passed thru...',0 StruL2s dc.l $01000002 dc.l $003c0019 dc.l NewFont dc.l TextL2 dc.l StruL2b StruL2b dc.l $03000002 dc.l $003c0019 dc.- l NewFont dc.l TextL2b dc.l StruL2 TextL2b dc.b 'Z b d C rn',0 StruL2 dc.l $02000002 dc.l $003a0018 dc.l NewFont dc.l TextL2 dc.l StruL3 TextL2 dc.b 'Zebedee of Carnage',0 StruL3 dc.l $01000002 dc.l $002b0027 dc.l NewFont dc.l TextL3 dc.l StruL4s TextL3 dc.b 'If ya wanna rite, do it to',0 StruL4s dc.l $01000002 dc.l $00460032 dc.l NewFont dc.l TextL4 dc.l StruL4 StruL4 dc.l $02000002 dc.l $00440031 dc.l NewFont dc.l TextL4 dc.l StruL5s TextL4 dc.b '72 Hessary Dzrive',0 StruL5s dc.l $01000002 dc.l $006a003d dc.l NewFont dc.l TextL5 dc.l StruL5 StruL5 dc.l $02000002 dc.l $0068003c dc.l NewFont dc.l TextL5 dc.l StruL6s TextL5 dc.b 'Belliver',0 StruL6s dc.l $01000002 dc.l $006a0048 dc.l NewFont dc.l TextL6 dc.l StruL6 StruL6 dc.l $02000002 dc.l $00680047 dc.l NewFont dc.l TextL6 dc.l StruL7s TextL6 dc.b 'Plymouth',0 StruL7s dc.l $01000002 dc.l $00420053 dc.l NewFont dc.l TextL7 dc.l StruL7 StruL7 dc.l $02000002 dc.l $004000lC52 dc.l NewFont dc.l TextL7 dc.l 0 TextL7 dc.b 'PL6 7DQ, ENGLAND',0 SmlFont dc.l TopazF dc.l $00080000 BigFont dc.l TopazF dc.l $00090000 TopazF dc.b 'topaz.font',0 FontPtr dcb.l 5,0 NewFont dc.l Fatty,$b0000 Fatty dc.b 'fatty.font',0 end^dE% CheckKS31.spb- section main,code_c bra.b ProgStart Version dc.b '$VER: CheckKS31 v1.02 (13-Aug-97)',0 ProgStart btst #6,$bfe001 beq.b .skip cmp.b #'?',(a0) beq.b ShowAbout move.l 4.w,a6 lea IntName(pc),a1 moveq.l #40,d0 jsr -$228(a6) ;OpenLibrary(a1,d0)exec move.l d0,a1 beq.b LoadKickstart31 jsr -$19e(a6) ;CloseLibrary(a1) .skip moveq.l #0,d0 rts LoadKickstart31 moveq.l #5,d0 rts ShowAbout move.l 4.w,a6 lea DosName(pc),a1 moveq.l #0,d0 jsr -$228(a6) ;OpenLibrary(a1,d0)exkoec move.l d0,a6 beq.b .exit jsr -$3c(a6) ;Output()dos move.l d0,d1 beq.b .error lea Text(pc),a2 move.l a2,d2 move.l #296,d3 jsr -$30(a6) ;Write(d1,d2,d3)dos .error move.l a6,a1 move.l 4.w,a6 jsr -$19e(a6) ;CloseLibrary(a1)exec .exit moveq.l #0,d0 rts IntName dc.b 'intuition.library',0 DosName dc.b 'dos.library',0 Text dc.b $9b,'1;4mCheckKS31 v1.02 by Zebedee/Area 51 (13-Aug-97)',$9b,'0m',$a,$a dc.b 'Checks for v40 of intuition.library - exits with return code 5 if itP''s not',$a dc.b 'present and code 0 if it is found so it can easily be placed in your',$a dc.b 'startup-sequence file like so:',$a,9,'CheckKS31',$a,9,'If WARN',$a dc.b 9,' ReKick >NIL: DH1:Kick40/Kick.40.68',$a,9,'EndIf',$a end >n̦E%GetFIB.spx;$VER: GetFIB.s v1.03 (15-Jun-96) ;Get a fileInfoBlock (260 bytes) and write it to disk for examination. ;Code by Zebedee/Carnage (15-Jun-96) ;See the end of the file for a sample fileInfoBlock with explanation. ;Slight b*g in the routine that saves the fib to disk. If the file can't be ;opened then the routine bombs out saying that it's been saved out ok! opt o+,w- section main,code_c ProgStart bsr.b OpenDosLibrary beq.b .exit bsr.b GetOutput bsr.b AskUserWhichFiles bsr.w WriteInfoBlock bsr.b CloseDosLibrary .exit moveq.l #0,d0 rts OpenDosLibrary move.l 4.w,a6 lea DosName(pc),a1 moveq.l #0,d0 jsr -$228(a6) ;OpenLibrary(a1,d0)exec move.l d0,DosBAdr rts CloseDosLibrary move.l 4.w,a6 move.l DosBAdr(pc),a1 jmp -$19e(a6) ;CloseLibrary(a1)exec GetOutput move.l DosBAdr(pc),a6 jsr -$3c(a6) ;Output()dos move.l d0,Output rts AskUserWhichFiles move.l #About,d2 bsr.b PrintText move.l #AskRead,d2 bsr.b PrintText bsr.b GetUserInput subiM$%d.l #1,d0 move.l d0,SrcLen move.l #Buffer,a0 move.l #SrcName,a1 .loop cmpi.b #10,(a0) beq.b AskUserSaveAs move.b (a0)+,(a1)+ bra.b .loop AskUserSaveAs move.l #SaveAs,d2 bsr.b PrintText bsr.b GetUserInput subi.l #1,d0 move.l d0,TrgLen move.l #Buffer,a0 move.l #TrgName,a1 .loop cmpi.b #10,(a0) beq.b .exit move.b (a0)+,(a1)+ bra.b .loop .exit rts PrintText move.l DosBAdr(pc),a6 move.l d2,a0 moveq.l #0,d3 .loop addi.l #1,d3 cmpi.b #0,(a0)+ bne.b .loop subi.l #1,d3 8 move.l Output(pc),d1 jmp -$30(a6) ;Write(d1/d2/d3)dos GetUserInput move.l DosBAdr(pc),a6 move.l Output(pc),d1 move.l #Buffer,d2 moveq.l #$ff,d3 jmp -$2a(a6) ;Read(d1/d2/d3)dos WriteInfoBlock move.l #Writing,d2 bsr.b PrintText move.l DosBAdr(pc),a6 move.l #TrgName,d1 move.l #1006,d2 jsr -$1e(a6) ;Open(d1/d2)dos move.l d0,FilePtr beq.b .nofile move.l DosBAdr(pc),a6 move.l #SrcName,d1 move.l #-2,d2 jsr -$54(a6) ;Lock(d1/d2)dos move.l d0,FileLok beq.b .nolock Nmove.l DosBAdr(pc),a6 move.l FileLok(pc),d1 move.l #NfoBlok,d2 jsr -$66(a6) ;Examine(d1/d2)dos tst.l d0 beq.b .noinfo move.l DosBAdr(pc),a6 move.l FilePtr(pc),d1 move.l #NfoBlok,d2 move.l #260,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos .noinfo move.l DosBAdr(pc),a6 move.l FileLok(pc),d1 jsr -$5a(a6) ;UnLock(d1)dos .nolock move.l DosBAdr(pc),a6 move.l FilePtr(pc),d1 jsr -$24(a6) ;Close(d1)dos .nofile move.l #Done,d2 bsr.w PrintText rts Version dc.b '$VER: GetFIB v1.00 (1Uq#~5-Jun-96)',0 DosName dc.b 'dos.library',0 DosBAdr dc.l 0 Output dc.l 0 About dc.b $9b,'0;1;4mGetFIB v1.00 by Zebedee 1996 Carnage (15-Jun-96)',$9b,'0m',$a,$a dc.b 'This program gets the InfoBlock of a file which you specify and writes it',$a dc.b 'out to a file also specified by you.',$a,$a,0 AskRead dc.b 'Enter read filename : ',0 SaveAs dc.b 'Enter write filename: ',0 Writing dc.b $a,'Writing file InfoBlock...',0 Done dc.b 'done',$9b,'3m! ',$9b,'0m',$a,0 Buffer dcb.l 64,0 SrcNamۡe dcb.l 64,0 TrgName dcb.l 64,0 SrcLen dc.l 0 TrgLen dc.l 0 FilePtr dc.l 0 FileLok dc.l 0 section fib,data cnop 0,4 NfoBlok dcb.b 260,0 end Sample FIB... 0000: 00000372 FFFFFFFD 54726163 6B444F53 ...r...TrackDOS 0010: 00000000 00000000 00000000 00000000 ................ 0020: 00000000 00000000 00000000 00000000 ................ 0030: 00000000 00000000 00000000 00000000 ................ 0040: 00000000 00000000 00000000 00000000 ...............iwd. 0050: 00000000 00000000 00000000 00000000 ................ 0060: 00000000 00000000 00000000 00000000 ................ 0070: 00000000 00000000 FFFFFFFD 00002844 .............(D 0080: 00000015 00001B6A 000004EF 00000542 .......j......B 0090: 2D2D2D2D 2D2D2D2D 2D582D2D 2D2D2D2D ---------X------ 00A0: 2D2D2D58 2D2D2D2D 2D2D2D2D 2D582D2D ---X---------X-- 00B0: 2D2D2D2D 2D2D2D58 2D2D2D2D 2D2D2D2D -------X-------- 00C0: 2D582D ~e$2D 2D2D2D2D 2D2D2D58 2D2D2D2D -X---------X---- 00D0: 2D2D2D2D 2D582D2D 2D666E2E 454E4400 -----X---fn.END. 00E0: 00000000 00000000 00000000 00000000 ................ 00F0: 00000000 00000000 00000000 00000000 ................ 0100: 00000000 .... !0000 ($0000) DiskKey.L Disk number $00000372 (882) !0004 ($0004) DirEntryType.L Entry type (+=dir, -=file) $fffffffd (-3) !0008 ($0008) FileName 108 bytes with the filename "Trac YkDOS" !0116 ($0074) Protection.L File protection mask $00000000 (0) !0120 ($0078) EntryType.L Entry type $fffffffd (-3) !0124 ($007C) Size.L Length of file in bytes $00002844 (10308) !0128 ($0080) NumBlocks.L Number of blocks $00000015 (21) !0132 ($0084) Days.L Creation day $00001B6A (7018) !0136 ($0088) Minute.L Creation time $000004EF (1263) !0140 ($009C) Tick.L Creation time $00000542 (1346) !0144 ($00A0) Comment 116 bytes with comments "---------X..." RE% XferMemory.spf dc.b 'DOS',0 dc.l 0 dc.l $370 ProgStart btst #6,$bfe001 beq.b TransferMemory Resume move.l 4.w,a6 lea ExpName(pc),a1 moveq #$25,d0 jsr -$228(a6) ;OpenLibrary(a1,d0)exec tst.l d0 beq.s BadExp move.l d0,a1 bset #6,$22(a1) jsr -$19e(a6) ;CloseLibrary(a1)exec BadExp lea DosName(pc),a1 jsr -$60(a6) ;FindResident(a1)exec tst.l d0 beq.s Error move.l d0,a0 move.l $16(a0),a0 moveq #0,d0 rts Error moveq #-1,d0 rts TransferMemory lea 0,a0 lea $ea000,a1 moveq.l #0,d݁S0 .copy move.w #$f00,$dff180 ;red (wait!) move.l (a0)+,(a1)+ addq.l #1,d0 cmp.l #$ea000,d0 bne.b .copy .loop move.w #$f0,$dff180 ;green (done) bra.b .loop DosName dc.b 'dos.library',0 ExpName dc.b 'expansion.library',0 end#H #E%MBWait.s5p.&M;MBWait (Test for l/r/both mouse buttons and/or display prompt text) ;Code: Zebedee/Carnage ;$VER: MBWait.s v1.03 (17-Oct-95) opt o+ section MBWait,code_c ProgStart move.l a0,a5 move.l d0,d5 moveq.l #20,d4 move.l 4.w,a6 lea DosName(pc),a1 moveq.l #0,d0 jsr -$228(a6) ;OpenLibrary(a1,d0)exec move.l d0,DosBAdr beq.b BadDos move.l d0,a6 jsr -$3c(a6) ;Output()dos move.l d0,Output beq.b Exit moveq.l #0,d4 cmp.b #"?",(a5) beq.w ShowAbout cmp.b #"m",1(a5) bne.w ShowUs3)?age cmp.b #"b",2(a5) bne.w ShowUsage cmp.b #"l",(a5) ;LMB (lmb) beq.b WaitLeftMouse cmp.b #"L",(a5) ;LMB with text (Lmb) beq.w ShowLeftText cmp.b #"r",(a5) ;RMB (rmb) beq.b WaitRightMouse cmp.b #"R",(a5) ;RMB with text (Rmb) beq.w ShowRightText cmp.b #"b",(a5) ;Both MB (bmb) beq.b WaitBothButtons cmp.b #"B",(a5) ;Both MB with text (Bmb) beq.w ShowBothText bra.w ShowUsage Exit move.l 4.w,a6 move.l DosBAdr(pc),a1 jsr -$19e(a6) ;CloseLibrary(a1)exec BadDosQ' move.l d4,d0 rts ShowAbout move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea About(pc),a2 move.l a2,d2 moveq.l #91,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos moveq.l #5,d4 bra.b Exit ShowUsage move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea Usage(pc),a2 move.l a2,d2 moveq.l #30,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos moveq.l #20,d4 bra.b Exit WaitLeftMouse btst #6,$bfe001 bne.s WaitLeftMouse bra.s Exit WaitRightMouse btst #10,$dff016 bne.s WaitRightMouse bra.s Exit WwaitBothButtons btst #6,$bfe001 bne.s WaitBothButtons btst #10,$dff016 bne.s WaitBothButtons bra.s Exit ShowLeftText move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea Left(pc),a2 move.l a2,d2 moveq.l #46,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos .loop btst #6,$bfe001 bne.b .loop bsr.b DisplayReturn bra.w Exit ShowRightText move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea Right(pc),a2 move.l a2,d2 moveq.l #47,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos .loop btst #10,$dff016 bne.`5s .loop bsr.b DisplayReturn bra.w Exit ShowBothText move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea Both(pc),a2 move.l a2,d2 moveq.l #43,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos .loop btst #6,$bfe001 bne.s .loop btst #10,$dff016 bne.s .loop bsr.b DisplayReturn bra.w Exit DisplayReturn move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea C_Ret(pc),a2 move.l a2,d2 moveq.l #5,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos rts Version dc.b '$VER: MBWait v1.03 (17-Oct-95)',0 DosName dc.*Rb 'dos.library',0 DosBAdr dc.l 0 Output dc.l 0 About dc.b $9b,'0;1;4mMBWait v1.03 by Zebedee 1995 Carnage' dc.b '(17-Oct-95)',$9b,'0m',$a,$a Usage dc.b 'Usage: MBWait mb',$a Left dc.b 'Press the left mouse button to continue...',$9b,'0 p' Right dc.b 'Press the right mouse button to continue...',$9b,'0 p' Both dc.b 'Press both mouse buttons to continue...',$9b,'0 p' C_Ret dc.b $9b,'1 p',$a endHOAݼJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      E%4 BootKit2.spNMLK{;BootKit v1.00 by Zebedee/Area 51 (14-Aug-97) ;First written using Amiga E to create the gadgets easily then ;ReSourced to add the final code that makes it tick! SECTION BootKit2000000,CODE_C norsk equ -1 ;-1 for Norwegian, 0 for serious bra.b ProgStart Version dc.b '$VER: BootKit v1.00 (14-Aug-97)',0 ProgStart MOVE.L 4.W,A6 MOVE.L A0,A5 MOVE.L D0,D7 MOVE.L #10028,D0 MOVE.L #$10000,D1 ;MEMF_CLEAR MOVE.L D0,D2 JSR -$C6(A6) ;AllocMem(d0,d1)exec TST.L D0 BNE.S StartProgr<am MOVEQ #20,D0 RTS StartProgram MOVE.L D0,D6 ADD.L D2,D0 JSR -$84(A6) ;Forbid()exec EXG D0,SP MOVE.L D0,-(SP) ADD.L #0,SP LINK A4,#-$218 JSR -$8A(A6) ;Permit()exec MOVE.L D6,-$40(A4) SUB.L A1,A1 JSR -$126(A6) ;FindTask(a1)exec MOVE.L D0,A3 move.l d0,MyTask TST.L $AC(A3) BNE.S StartedFromDOS LEA $5C(A3),A0 JSR -$180(A6) ;WaitPort(a0)exec LEA $5C(A3),A0 JSR -$174(A6) ;GetMsg(a0)exec MOVE.L D0,-$24(A4) LEA lbB000103(PC),A0 MOVE.L A0,-$20(A4) BRA.S InitialiseSystem StartedFromDOS MOVE.L A5,A0 MOVE.L D7,D0 MOVE.L A0,-$20(A4) NOP NOP NOP InitialiseSystem MOVE.L A6,-$28(A4) LEA lbC00010A(PC),A0 MOVE.L A0,-$18(A4) LEA IntName(PC),A1 MOVEQ #$21,D0 JSR -$228(A6) ;OpenLibrary(a1,d0)exec MOVE.L D0,-$30(A4) BEQ BadInt move.l d0,IntBAdr LEA GfxName(PC),A1 MOVEQ #$21,D0 JSR -$228(A6) ;OpenLibrary(a1,d0)exec MOVE.L D0,-$34(A4) BEQ BadGfx move.l d0,GfxBAdr LEA DosName(PC),A1 MOVEQ #$21,D0 JSR -$228(A6) ;OpenLibrary(a1,d0)exec fMOVE.L D0,-$2C(A4) BEQ BadDos move.l d0,DosBAdr MOVE.L D0,A6 JSR -$3C(A6) ;Output()dos MOVE.L D0,-8(A4) move.l d0,Output JSR -$36(A6) ;Input()dos MOVE.L D0,-$5C(A4) MOVE.L SP,-4(A4) BRA.S lbC000104 DosName dc.b 'dos.library',0 IntName dc.b 'intuition.library',0 GfxName dc.b 'graphics.library',0 lbB000103 dc.b 0 lbC000104 JSR StartMainProgram.L lbC00010A JSR ReturnSubroutine.L MOVE.L -4(A4),SP TST.L -12(A4) BEQ.S .skip MOVE.L -$2C(A4),A6 MOVE.L -12(A4),D1 MOVE.L DVA=1,D4 MOVEQ #0,D2 MOVEQ #0,D3 JSR -$2A(A6) ;Read(d1,d2,d3)dos MOVE.L D4,D1 JSR -$24(A6) ;Close(d1)dos .skip MOVE.L 4.W,A6 MOVE.L -$14(A4),A2 MOVE.L A2,D0 BEQ.S .error .loop MOVE.L A2,A1 MOVE.L 4(A2),D0 MOVE.L (A2),A2 JSR -$D2(A6) ;FreeMem(a1,d0)exec MOVE.L A2,D0 BNE.S .loop .error MOVE.L -$2C(A4),A1 JSR -$19E(A6) ;CloseLibrary(a1)exec BadDos MOVE.L -$34(A4),A1 JSR -$19E(A6) ;CloseLibrary(a1)exec BadGfx MOVE.L -$30(A4),A1 JSR -$19E(A6) ;CloseLibrary(a1)exec BadInt MOVE. fEQ #-1,D0 MOVE.L D0,-$210(A4) MOVE.L -$218(A4),A0 MOVEQ #0,D0 MOVEQ #$5d,D1 MOVE.L -$30(A4),A6 JSR -$120(A6) ;SizeWindow(a0,d0,d1)int bsr DrawGraphicData Exit_SizeWindow MOVEQ #0,D0 UNLK A5 RTS CreateGadgets LINK A5,#-8 MOVE.L $10(A5),A0 MOVE.L -$204(A4),A6 JSR -$72(A6) ;CreateContext(a0)gadtools MOVE.L D0,-8(A5) MOVE.L -$214(A4),D0 MOVE.L D0,-(SP) MOVE.L 12(A5),D0 MOVE.L D0,-(SP) LEA lbL00064C(PC),A0 MOVE.L A0,D0 BRA.S CreateGadget_Drive lbL00064C dc.w 71,30S dc.w 97,12 dc.l GadList0 dcb.l 4,0 dc.w 0 CreateGadget_Drive MOVE.L (SP)+,$16(A0) MOVE.L (SP)+,12(A0) MOVE.L D0,-4(A5) LEA -$10(SP),SP MOVEQ #7,D0 MOVE.L D0,0(SP) MOVE.L -8(A5),D0 MOVE.L D0,4(SP) MOVE.L -4(A5),D0 MOVE.L D0,8(SP) LEA Drive_CycleText(PC),A0 MOVE.L A0,D0 BRA.S lbC0006B0 Drive_CycleText dc.l DF0,DF1,DF2,DF3,0 lbC0006B0 MOVE.L D0,-(SP) LEA lbL0006BE(PC),A0 MOVE.L A0,D0 BRA.S lbC0006DA lbL0006BE dc.l $8008000E,0 ;GTCY_LABELS dc.l $8008000F,0 a[;GTCY_ACTIVE,0 ; dc.l $80080040,$5f ;UNDERSCORE,"_" dc.l 0 lbC0006DA MOVE.L (SP)+,4(A0) MOVE.L D0,12(SP) MOVE.L -$204(A4),A6 MOVEM.L (SP)+,D0/A0-A2 JSR -$1E(A6) ;CreateGadgetA(d0,a0,a1,a2)gadtools TST.L D0 BNE.S .skip MOVE.L #2,-(SP) BSR lbC00155E .skip MOVE.L D0,-8(A5) MOVE.L 8(A5),A0 MOVE.L D0,(A0) MOVE.L -$214(A4),D0 MOVE.L D0,-(SP) MOVE.L 12(A5),D0 MOVE.L D0,-(SP) LEA Gadget_Read(PC),A0 MOVE.L A0,D0 BRA.S lbC00073C Gadget_Read dc.w 170,30 dc.w 56,12 dc.l :GadRead dc.l 0 dc.l $20000 dcb.l 2,0 dc.w 0 lbC00073C MOVE.L (SP)+,$16(A0) MOVE.L (SP)+,12(A0) MOVE.L D0,-4(A5) LEA -$10(SP),SP MOVEQ #1,D0 MOVE.L D0,0(SP) MOVE.L -8(A5),D0 MOVE.L D0,4(SP) MOVE.L -4(A5),D0 MOVE.L D0,8(SP) LEA lbL00076E(PC),A0 MOVE.L A0,D0 BRA.S lbC00077A lbL00076E ; dc.l $80080040,$5f ;UNDERSCORE,"_" dc.l 0 lbC00077A MOVE.L D0,12(SP) MOVE.L -$204(A4),A6 MOVEM.L (SP)+,D0/A0-A2 JSR -$1E(A6) ;CreateGadgetA(d0,a0,a1,a2)gadtools TST.L D0 BNE.S .skip MOVE.L #2,-(SP) BSR lbC00155E .skip MOVE.L D0,-8(A5) MOVE.L 8(A5),A0 MOVE.L D0,8(A0) MOVE.L -$214(A4),D0 MOVE.L D0,-(SP) MOVE.L 12(A5),D0 MOVE.L D0,-(SP) LEA Gadget_Write(PC),A0 MOVE.L A0,D0 BRA.S lbC0007DA Gadget_Write dc.w 228,30 dc.w 56,12 dc.l GadWrite dc.l 0 dc.l $30000 dcb.l 2,0 dc.w 0 lbC0007DA MOVE.L (SP)+,$16(A0) MOVE.L (SP)+,12(A0) MOVE.L D0,-4(A5) LEA -$10(SP),SP MOVEQ #1,D0 MOVE.L D0,0(SP) MOVE.L -8(A5),D0 MOVE.L D0,4(SP) MOVE.L -4(A5),D$0 MOVE.L D0,8(SP) LEA lbL00080C(PC),A0 MOVE.L A0,D0 BRA.S lbC000818 lbL00080C ; dc.l $80080040,$5f ;UNDERSCORE,"_" dc.l 0 lbC000818 MOVE.L D0,12(SP) MOVE.L -$204(A4),A6 MOVEM.L (SP)+,D0/A0-A2 JSR -$1E(A6) ;CreateGadgetA(d0,a0,a1,a2)gadtools TST.L D0 BNE.S .skip MOVE.L #2,-(SP) BSR lbC00155E .skip MOVE.L D0,-8(A5) MOVE.L 8(A5),A0 MOVE.L D0,12(A0) MOVE.L -$214(A4),D0 MOVE.L D0,-(SP) MOVE.L 12(A5),D0 MOVE.L D0,-(SP) LEA Gadget_File(PC),A0 MOVE.L A0,D0 BRA.S lbC0U00878 Gadget_File dc.w 71,43 dc.w 213,13 dc.l GadFile dc.l 0 dc.l $10000 dcb.l 2,0 dc.w 0 lbC000878 MOVE.L (SP)+,$16(A0) MOVE.L (SP)+,12(A0) MOVE.L D0,-4(A5) LEA -$10(SP),SP MOVEQ #12,D0 MOVE.L D0,0(SP) MOVE.L -8(A5),D0 MOVE.L D0,4(SP) MOVE.L -4(A5),D0 MOVE.L D0,8(SP) LEA StringGadget_DefaultText(PC),A0 MOVE.L A0,D0 BRA.S lbC0008C6 StringGadget_DefaultText dc.l $8008002D,DefaultText ;GTST_STRING dc.l $8008002E,$32 ;GTST_MAXCHARS ; dc.l $80080040,$5f ;UNDERS+qCORE,"_" dc.l 0 lbC0008C6 MOVE.L D0,12(SP) MOVE.L -$204(A4),A6 MOVEM.L (SP)+,D0/A0-A2 JSR -$1E(A6) ;CreateGadgetA(d0,a0,a1,a2)gadtools TST.L D0 BNE.S .skip MOVE.L #2,-(SP) BSR lbC00155E .skip MOVE.L D0,-8(A5) MOVE.L 8(A5),A0 MOVE.L D0,4(A0) MOVE.L -$214(A4),D0 MOVE.L D0,-(SP) MOVE.L 12(A5),D0 MOVE.L D0,-(SP) LEA Gadget_Load(PC),A0 MOVE.L A0,D0 BRA.S lbC000926 Gadget_Load dc.w 71,57 dc.w 105,13 dc.l GadLoad dc.l 0 dc.l $40000 dcb.l 2,0 dc.w 0 lbC000926 MOVD{E.L (SP)+,$16(A0) MOVE.L (SP)+,12(A0) MOVE.L D0,-4(A5) LEA -$10(SP),SP MOVEQ #1,D0 MOVE.L D0,0(SP) MOVE.L -8(A5),D0 MOVE.L D0,4(SP) MOVE.L -4(A5),D0 MOVE.L D0,8(SP) LEA lbL000958(PC),A0 MOVE.L A0,D0 BRA lbC000964 lbL000958 ; dc.l $80080040,$5f ;UNDERSCORE,"_" dc.l 0 lbC000964 MOVE.L D0,12(SP) MOVE.L -$204(A4),A6 MOVEM.L (SP)+,D0/A0-A2 JSR -$1E(A6) ;CreateGadgetA(d0,a0,a1,a2)gadtools TST.L D0 BNE.S .skip MOVE.L #2,-(SP) BSR lbC00155E .skip MOVE.L D0,-8(A5) MOVn:E.L 8(A5),A0 MOVE.L D0,$10(A0) MOVE.L -$214(A4),D0 MOVE.L D0,-(SP) MOVE.L 12(A5),D0 MOVE.L D0,-(SP) LEA Gadget_Save(PC),A0 MOVE.L A0,D0 BRA lbC0009C4 Gadget_Save dc.w 178,57 dc.w 105,13 dc.l GadSave dc.l 0 dc.l $50000 dcb.l 2,0 dc.w 0 lbC0009C4 MOVE.L (SP)+,$16(A0) MOVE.L (SP)+,12(A0) MOVE.L D0,-4(A5) LEA -$10(SP),SP MOVEQ #1,D0 MOVE.L D0,0(SP) MOVE.L -8(A5),D0 MOVE.L D0,4(SP) MOVE.L -4(A5),D0 MOVE.L D0,8(SP) LEA lbL0009F6(PC),A0 MOVE.L A0,D0 BRA lbC000A'02 lbL0009F6 ; dc.l $80080040,$5f ;UNDERSCORE,"_" dc.l 0 lbC000A02 MOVE.L D0,12(SP) MOVE.L -$204(A4),A6 MOVEM.L (SP)+,D0/A0-A2 JSR -$1E(A6) ;CreateGadgetA(d0,a0,a1,a2)gadtools TST.L D0 BNE.S .skip MOVE.L #2,-(SP) BSR lbC00155E .skip MOVE.L D0,-8(A5) MOVE.L 8(A5),A0 MOVE.L D0,$14(A0) MOVE.L -$214(A4),D0 MOVE.L D0,-(SP) MOVE.L 12(A5),D0 MOVE.L D0,-(SP) LEA Gadget_Run(PC),A0 MOVE.L A0,D0 BRA lbC000A62 Gadget_Run dc.w 71,71 dc.w 105,13 dc.l GadRun dc.l 0 dc.l $Akt60000 dcb.l 2,0 dc.w 0 lbC000A62 MOVE.L (SP)+,$16(A0) MOVE.L (SP)+,12(A0) MOVE.L D0,-4(A5) LEA -$10(SP),SP MOVEQ #1,D0 MOVE.L D0,0(SP) MOVE.L -8(A5),D0 MOVE.L D0,4(SP) MOVE.L -4(A5),D0 MOVE.L D0,8(SP) LEA lbL000A94(PC),A0 MOVE.L A0,D0 BRA lbC000AA0 lbL000A94 ; dc.l $80080040,$5f ;UNDERSCORE,"_" dc.l 0 lbC000AA0 MOVE.L D0,12(SP) MOVE.L -$204(A4),A6 MOVEM.L (SP)+,D0/A0-A2 JSR -$1E(A6) ;CreateGadgetA(d0,a0,a1,a2)gadtools TST.L D0 BNE.S .skip MOVE.L #2,-(SP) B (SR lbC00155E .skip MOVE.L D0,-8(A5) MOVE.L 8(A5),A0 MOVE.L D0,$18(A0) MOVE.L -$214(A4),D0 MOVE.L D0,-(SP) MOVE.L 12(A5),D0 MOVE.L D0,-(SP) LEA Gadget_About(PC),A0 MOVE.L A0,D0 BRA lbC000B00 Gadget_About dc.w 178,71 dc.w 105,13 dc.l GadAbout dc.l 0 dc.l $70000 dcb.l 2,0 dc.w 0 lbC000B00 MOVE.L (SP)+,$16(A0) MOVE.L (SP)+,12(A0) MOVE.L D0,-4(A5) LEA -$10(SP),SP MOVEQ #1,D0 MOVE.L D0,0(SP) MOVE.L -8(A5),D0 MOVE.L D0,4(SP) MOVE.L -4(A5),D0 MOVE.L D0,8(SP) LEA !,$A,0 dc.b 'Load',$A,0 dc.b 'Save',$A,0 GadList1 dc.b 'Default text',0 dc.b 'Write',$A,0 dc.b 'Read',$A,0 OutRun dc.b 'Run',$A,0 GadgetString dc.b '%s',0 even OutDF3 dc.b 'DF3:',$A,0 OutDF2 dc.b 'DF2:',$A,0 OutDF1 dc.b 'DF1:',$A,0 OutDF0 dc.b 'DF0:',$A,0 ItemSelected dc.b 'Item selected is %ld - ',0 even SetReturnCode MOVEQ #-1,D2 RTS ReturnSubroutine RTS PrintText TST.L -8(A4) BEQ OpenConsole PrintText_Skip LEA 8(SP),A1 MOVE.L 4(SP),D0 MOVE.L 8(SP,D0.L),A0 LEA l:=+sDbC0014F2(PC),A2 MOVE.L 4.W,A6 MOVE.L -$40(A4),A3 MOVE.L A3,D2 JSR -$20A(A6) ;RawDoFmt(a0,a1,a2,a3)exec MOVE.L -8(A4),D1 MOVE.L D2,A0 Write_DOS TST.B (A0)+ BNE Write_DOS SUB.L D2,A0 MOVE.L D3,A3 MOVE.L A0,D3 SUBQ.L #1,D3 MOVE.L -$2C(A4),A6 JSR -$30(A6) ;Write(d1,d2,d3)dos MOVE.L D3,D0 MOVE.L A3,D3 RTS lbC0014F2 MOVE.B D0,(A3)+ RTS OpenConsole LEA ConsoleName(PC),A0 MOVE.L A0,D1 MOVE.L #$3EE,D2 ;MODE_NEW MOVE.L -$2C(A4),A6 JSR -$1E(A6) ;Open(d1,d2)dos MOVE.L ;>|F8D0,-12(A4) MOVE.L D0,-8(A4) TST.L D0 BNE.S PrintText_Skip MOVEQ #$14,D0 MOVE.L D0,-$1C(A4) MOVE.L -$18(A4),A0 JMP (A0) ConsoleName dc.b 'CON:0/11/640/80/BootKit',0 even lbC00153A MOVE.L 4(SP),D0 MOVE.L 4.W,A6 MOVE.W $14(A6),D1 CMP.W D0,D1 BMI.S lbC00154E MOVEQ #-1,D0 RTS lbC00154E MOVEQ #0,D0 RTS lbC001552 MOVE.L 8(SP),D0 MOVE.L 4(SP),D1 ASL.L D1,D0 RTS lbC00155E MOVE.L 4(SP),-$54(A4) MOVE.L -$4C(A4),D0 BEQ.S lbC001582 MOVE.L D0,A0 MOVE.L -$50(A4),SP <?RMOVE.L -$58(A4),A5 MOVE.L (SP)+,-$58(A4) MOVE.L (SP)+,-$4C(A4) MOVE.L (SP)+,-$50(A4) JMP (A0) lbC001582 MOVE.L -$18(A4),A0 JMP (A0) lbC001588 TST.L -$54(A4) BEQ.S lbC0015B2 MOVE.L -$4C(A4),D0 BEQ.S lbC0015AC MOVE.L D0,A0 MOVE.L -$50(A4),SP MOVE.L -$58(A4),A5 MOVE.L (SP)+,-$58(A4) MOVE.L (SP)+,-$4C(A4) MOVE.L (SP)+,-$50(A4) JMP (A0) lbC0015AC MOVE.L -$18(A4),A0 JMP (A0) lbC0015B2 RTS OpenTrackDisk move.l MyTask(pc),a1 move.l 4.w,a6 sub.l a1,a1 jsr -$126(a6=@ ) ;FindTask(a1)exec move.l d0,RdReply+$10 lea RdReply(pc),a1 jsr -$162(a6) ;AddPort(a1)exec lea DiskIO(pc),a1 ; move.l CmdTxt(pc),a5 moveq.l #0,d0 ; move.b 2(a5),d0 move.l DriveUnit(pc),d0 ;Drive to read moveq.l #0,d1 ;No flags lea TrakDvc(pc),a0 jmp -$1bc(a6) ;OpenDevice(a0/a1,d0/d1)exec ReadBootblock lea DiskIO(pc),a1 move.l #RdReply,$e(a1) ;Set reply port move.w #2,$1c(a1) ;CMD_READ move.l #Buffer,$28(a1) ;Buffer move.l #1024,$24(a1) ;Length (2 sec>A6 tors) move.l #0,$2c(a1) ;Offset move.l 4.w,a6 jmp -$1c8(a6) ;DoIO(a1)exec WriteBootblock lea DiskIO(pc),a1 move.l #RdReply,$e(a1) ;Set reply port move.w #3,$1c(a1) ;CMD_WRITE move.l #Buffer,$28(a1) ;Buffer move.l #1024,$24(a1) ;Length (2 sectors) move.l #0,$2c(a1) ;Offset move.l 4.w,a6 jmp -$1c8(a6) ;DoIO(a1)exec StopDriveCloseTD move.l DiskIO+$20(pc),d6 lea DiskIO(pc),a1 move #9,$1c(a1) ;TD_MOTOR move.l #0,$24(a1) ;Turn motor off jsr -$1c8(a6) ?ByB8O ;DoIO(a1)exec lea RdReply(pc),a1 jsr -$168(a6) ;RemPort(a1)exec lea DiskIO(pc),a1 jmp -$1c2(a6) ;CloseDevice(a1)exec RPort dc.l 0 VPort dc.l 0 WinPtr dc.l 0 GfxBAdr dc.l 0 IntBAdr dc.l 0 DosBAdr dc.l 0 GadBAdr dc.l 0 Output dc.l 0 DriveUnit dc.l 0 TrakDvc dc.b 'trackdisk.device',0 even MyTask dc.l 0 DiskIO dcb.l 20,0 RdReply dcb.l 8,0 Buffer dcb.b 1024,0 StringBuffer dc.b 'RAM:Bootblock.grab' dcb.b 15,0 even FilePtr dc.l 0 TopGfx dc.w 50,13 ;x,y dc.w 192,11 ;w,h @CCBLdc.w 3 ;bitplanes dc.l TopGfxData dc.w $0300 ;plane pick dc.l 0 TopGfxData dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000 dc.l $0c200000,$f0c000c0,$00000c00,$00000430,$80000000,$0003fc18 dc.l $0c200000,$01c00000,$00000c00,$00000c30,$80000000,$00030018 dc.l $0c218600,$038610c2,$18430861,$0c201c30,$8610c238,$40000018 dc.l $00618600,$070610c2,$18430861,$0c303800,$8670c300,$600f0818 dc.l $0c218600,$0e0030c2,$00c30803,$00707030,$86000700,$60000c18 dc.l $0c2AD18600,$1c07f0c2,$1fc3087f,$0fe0e030,$8600fe18,$60000c18 dc.l $0c300600,$380600c2,$18030860,$0c01c030,$8600c018,$60000c18 dc.l $00738600,$00000007,$00000c00,$00038030,$86000000,$60001c18 dc.l $3fe00e00,$ffcff3fe,$3fc7fcff,$1fe300f3,$de01fe3f,$e007f878 dc.l $0003fc00,$00000000,$00000000,$00000000,$00000000,$00000000 dc.l $ff800003,$ff000f00,$0000f000,$000031fe,$00000000,$003ff1e0 dc.l $f3c00000,$0f000f00,$0000f000,$00007bcf,$00000000,$003c03e0 dc.l $f3de7800,$1e3fcff8,$ff1ff3fc,BEewUS$7f80f3cf,$7fc7f8ff,$003c07e0 dc.l $f3de7800,$3c79ef3d,$e7bcf79e,$f3c1e3cf,$79ef3c07,$803fe1e0 dc.l $ff9e7800,$7879ef3d,$e7bcf79e,$f3c3c3ff,$780f3c07,$8000f1e0 dc.l $f3de7800,$f07fcf3d,$ff3cf7fc,$ff8783cf,$780ff8ff,$8000f1e0 dc.l $f3de7801,$e0780f3d,$e03cf780,$f00f03cf,$780f01e7,$8000f1e0 dc.l $f3cff803,$c0780f3d,$e03cf780,$f01e03cf,$780f01e7,$803cf1e0 dc.l $ff807803,$ff3fcff8,$ff1ff3fc,$7f8c03cf,$7807f8ff,$801fe1e0 dc.l $000ff000,$00000000,$00000000,$00000000,$00000000,$00000CFa000 dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000 BotGfx dc.w 32,90 ;x,y dc.w 240,10 ;w,h dc.w 3 ;bitplanes dc.l BotGfxData dc.w $0300 ;plane pick dc.l 0 BotGfxData dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00001fa0,$4308613c,$30018400,$000610ff,$06003080 dc.l $00000060,$0000031e,$00000000,$20004308,$61803001,$84000006 dc.l $10c00600,$30800000,$00400000,$00000000,$00000790,$43086180 dc.l $70018430,$80061000DG7,$06003086,$10c21843,$08610384,$30861000 dc.l $0610600c,$0180e000,$0430c000,$1bc20600,$018670c2,$18430867 dc.l $83043086,$18000610,$670ce181,$c0018430,$c0061803,$06003f86 dc.l $00c21843,$08600304,$30861800,$2010600c,$01818001,$8430c006 dc.l $18030600,$300600c2,$18430860,$03043086,$18002790,$40080181 dc.l $80018430,$c0061003,$06003006,$00c21843,$08600304,$30861800 dc.l $0010601c,$03818001,$8430c006,$18070600,$30060007,$00600c03 dc.l $80060186,$18001fe1,$e7f8ff07,$80079ef3,$c01eEHP79fe,$1e00f01e dc.l $01fe3fe7,$fcff07de,$7f9e7800,$7f879fe3,$fcffc00f,$f000003f dc.l $cffc7803,$fe000000,$07800000,$3c780000,$0000804f,$bcf79e03 dc.l $c01e7800,$0079ef00,$f803cf00,$00000780,$00003c00,$00000000 dc.l $9f5fbcf7,$9e03c01e,$7bfe0079,$ef01f803,$cf7fc7f8,$ffbcf3fc dc.l $ff79fe7f,$c000b847,$bcf79e07,$801e7bcf,$0079eff8,$7803cf79 dc.l $ef3de7bc,$f79e3c7b,$cf79e000,$b8479ff3,$fe0f001f,$fbcf007f dc.l $e03c7803,$fe780f3d,$e7bcf780,$3c7bcf79,$e000b847,$80f01e1e dc.l $001eFIm07bcf,$0079e03c,$7803c078,$0f3de7bc,$f7803c7b,$cf79e000 dc.l $9f4780f0,$1e1e001e,$7bcf0079,$e03c7803,$c0780f3d,$e7bcf780 dc.l $3c7bcf79,$e0008047,$bcf79e1e,$001e7bcf,$0079ef3c,$7803c078 dc.l $0f3de7bc,$f79e3c7b,$cf79e000,$7f879fe3,$fc1e001e,$7bcf0079 dc.l $e7f87803,$c07807f8,$ff9ff3fc,$1f79fe79,$e0000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000 FlashScreen move.l d0,-(sp) move.l #$fff,d0 .loop move.l #$f00,$dff180 move.l #$f00,$dff182 move.lGJ&pC #$f00,$dff184 dbf d0,.loop move.l (sp)+,d0 rts SaveBootblock movem.l d0-d7/a0-a6,-(sp) move.l DosBAdr(pc),a6 move.l StringBuffer(pc),d1 move.l #$3ee,d2 ;MODE_NEWFILE jsr -$1e(a6) ;Open(d1,d2)dos move.l d0,FilePtr beq DisplayRequester_FileCreationError move.l d0,d1 move.l DosBAdr(pc),a6 move.l #Buffer,d2 move.l #1024,d3 jsr -$30(a6) ;Write(d1,d2,d3)dos cmp.l #1024,d0 bne.b DisplayRequester_ErrSaving RetSave move.l DosBAdr(pc),a6 move.l FilePtr(pc),d1 jsr -$24(aHKzxۿ6) ;Close(d1)dos RetSFnd movem.l (sp)+,d0-d7/a0-a6 rts DisplayRequester_ErrSaving lea ReqBody_ErrSaving(pc),a0 bsr DisplayRequester bra.b RetSave ReqBody_ErrSaving dc.l $14,0 dc.l ReqTitle_ErrSaving dc.l ReqMain_ErrSaving dc.l ReqButtons_ErrSaving ReqTitle_ErrSaving dc.b 'Error...',0 ReqMain_ErrSaving dc.b 'Problem writing the bootblock',$a dc.b 'data to disk - cause unknown!',0 ReqButtons_ErrSaving dc.b 'Ok',0 even DisplayRequester_FileCreationError lea ReqBody_FiIL嶕leCreationError(pc),a0 bsr DisplayRequester bra.b RetSFnd ReqBody_FileCreationError dc.l $14,0 dc.l ReqTitle_FileCreationError dc.l ReqMain_FileCreationError dc.l ReqButtons_FileCreationError ReqTitle_FileCreationError dc.b 'Error...',0 ReqMain_FileCreationError dc.b 'Unable to create file!',0 ReqButtons_FileCreationError dc.b 'Ok',0 even LoadBootblock movem.l d0-d7/a0-a6,-(sp) move.l DosBAdr(pc),a6 move.l #StringBuffer,d1 move.l #$3ed,d2 ;MODE_OLDFILE jsr -$1e(a6)JM[x ;Open(d1,d2)dos move.l d0,FilePtr beq DisplayRequester_FileNotFound move.l d0,d1 move.l DosBAdr(pc),a6 move.l #Buffer,d2 move.l #1024,d3 jsr -$2a(a6) ;Read(d1,d2,d3)dos cmp.l #1024,d0 bne.b DisplayRequester_ErrLoading RetLoad move.l DosBAdr(pc),a6 move.l FilePtr(pc),d1 jsr -$24(a6) ;Close(d1)dos RetLFnd movem.l (sp)+,d0-d7/a0-a6 rts DisplayRequester_ErrLoading lea ReqBody_ErrLoading(pc),a0 bsr DisplayRequester bra.b RetLoad ReqBody_ErrLoading dc.l $14,0 dc.l ReKN/%>qTitle_ErrLoading dc.l ReqMain_ErrLoading dc.l ReqButtons_ErrLoading ReqTitle_ErrLoading dc.b 'Error...',0 ReqMain_ErrLoading dc.b 'Problem reading the bootblock',$a dc.b 'data from disk - cause unknown!',0 ReqButtons_ErrLoading dc.b 'Ok',0 even DisplayRequester_FileNotFound lea ReqBody_FileNotFound(pc),a0 bsr DisplayRequester bra.b RetLFnd ReqBody_FileNotFound dc.l $14,0 dc.l ReqTitle_FileNotFound dc.l ReqMain_FileNotFound dc.l ReqButtons_FileNotFound ReqTitle_FileLy6NotFound dc.b 'Error...',0 ReqMain_FileNotFound dc.b 'File not found!',0 ReqButtons_FileNotFound dc.b 'Ok',0 even DisplayRequester LINK A5,#0 LEA -$10(SP),SP MOVEQ #0,D0 MOVE.L D0,0(SP) MOVE.L A0,D0 MOVE.L D0,4(SP) MOVEQ #0,D0 MOVE.L D0,8(SP) MOVEQ #0,D0 MOVE.L D0,12(SP) MOVE.L -$30(A4),A6 MOVEM.L (SP)+,A0-A3 JSR -$24C(A6) ;EasyRequestArgs(a0,a1,a2,a3)int MOVEQ #0,D0 UNLK A5 RTS endOP˳RQPrE%4DisplayAlert.spOQ6= dc.b 'DOS',0 dc.l 0 dc.l $370 ProgStart clr.w $dff180 movem.l a1/a6,-(sp) move.l 4.w,a6 lea Intui_L(pc),a1 moveq.l #0,d0 jsr -$228(a6) ;OpenLibrary(a1,d0)exec move.l d0,Intui_B beq Error move.l d0,a6 moveq.l #0,d0 lea Alert(pc),a0 move.l #255,d1 jsr -$5a(a6) ;DisplayAlert(d0,a0,d1)int tst.l d0 beq.b .hack move.l #1024,d6 ;offset move.l #512*173,d7 ;length bra.b ClInt .hack move.l #1024,d6 ;offset move.l #512*173,d7 ;length ClInt move.l 4.w,a6 move.l Intui_B(pORX}c),a1 jsr -$19e(a6) ;CloseLibrary(a1)exec movem.l (sp)+,a1/a6 move.l d7,$24(a1) ;length move.l #$71000,$28(a1) ;buffer move.l d6,$2c(a1) ;offset move.w #2,$1c(a1) ;CMD_READ jsr -$1c8(a6) ;DoIO(a1)exec move.l a5,a1 move #9,$1c(a1) ;TD_MOTOR move.l #0,$24(a1) ;off jsr -$1c8(a6) ;DoIO(a1)exec jmp $71020 Error moveq.l #-1,d0 rts Intui_L dc.b 'intuition.library',0 Intui_B dc.l 0 Alert dc.b 0,10,10,'Amiga News Presents',0,1 dc.b 0,10,20,'Nibby Nibbler by Gabriele RoncolatoO',0,1 dc.b 0,10,40,'Hacked by TBSNC coded and pieced together by Zebedee/A51',0,1 dc.b 0,10,60,'Press LMB for normal version or RMB for hacked version',0,0 endST9EZZYXWVUT 5E%4lifetimewarrantypSUGK LiKE ALL MO'SOUL RELEASES - 7HiS WAS FiRS7 ON SKY 7OWER __________________________ _ _ _ _ ________________________ ._\ /\ _ _ /\ /_. | Y "\ V /" Y | | .::: | _\ /_ | :::. | | .- .:::' _| (^)V(^) |_ `:::. -. | | / .:::' SV d( "\___A___/" ) `:::. \ | | - --------------x . :::' - \__ __/ - `::: . x------------ - | | ,:' :::. /- | T : T | -\ .::: `:. | ! / .:: `:::. | | | | | .:::' `::. \ ! : / ::' ____ / | | | | : \ ____ `:: \ : . .:: / "/ ! ! | : . \ "\ ::. \ . .---- / : : | SWN \ ----. .----- / __ _ ! _ \ \ -----. / / /\ _ /\/ "\ .:: : .::::._ _____ \ \ __________ ___/\/ \_/_____/.::: ..::::/ \\ "\/\___ __________ :_) \\\_________ "\_\::::.:::::T \ __/// (_: | `:/ // /::::::::::.`\_________ \' | | mR! ./ / .:::::::`:::::::.___/\\ \. m'S | `------------/______/ `:::::::SXbM `:::::::.\ \________\------------' : / \_____/ / / \/________/ \ : / /__/\__/ / \ . /\ ______\ /\ _\/__ .:: :::________ /\ _____ /\ \ . ___ ___/\/ \_ __"/\/ \__ .:::' `::\_______/_ \/\_/_ "/ \/\___ ___ x) \\\__ /___\_ / ::::' `:::::/\_____ __/ T\ __/// (x T `:/ /\____/ / :::::: .::\ \ \___ _ \:' TSYy | / / / ./ `:::::.....:::::\ "" / \ \ | | / / / /____________/::::::::::::' \____________\_____\ \ | | / / / \____________\/ \/____________/_____/\ \ | | /_____/ / \ \______\ | |_ \_____\/ THE SKY TOWER BULLETIN BOARD SYSTEM \/______/ _| : -- ------------------------------------- -- : . AMiGSZ2A + pC + NiNTENDo 64 - mAC - mP3 SUPPoRTED! . . . | HELLFiRE EURO HQ - DiGiTAL CORRUPTiON DKHQ - MO'SOUL WORLD HQ | | | | 4NDZ (RiNGDoWN) - 2NDZ (RiNGDoWN) iSDN - 6NDZ TELNET 128K iP: BEG-4-iT! | | AMiGA4ooo . CYBERSToRM o6o\5oMhZ . 16GiGZ HdSPACE | | -- ---------------S{vb-------------- -- | | (22:44:24 - DD-MM-YY) | +---------------- - -- ----------------------------- -- - ----------------+ bc"onmlkjihgfedc5XE%demopbdlM%#@K@@P/H,xC8p!NJg",@pN"g A*$vN"N,xNbLNdos.librarydA dIGITAL cANDY bBS aDTRO!! >H<<I*NNN$IRFNQ ,xN.B|N/IvAtBQAIt aAItaGIaGIaraz:AK(Na@f(8I Ma0M24frtaNG#Q#beg#Qra4ft`rSGg`~0HF<"HFHA0Acl>A00Nu0⮞AnC<"A{Nu??H|ra:SExRD2Bo2a0Q: SE2a8QL>NuHB\~xtvr<9C@0,@l@FF8JQLNuL0 SE|EFR.gN"SfQ&|<k&N$I>gSG<N" &Jp0f ЀӓQ`,Nu#K2#uT}a,)X7O c~$ KQE冨(Mas& 8Hiݎ>js5GW ELuB@$ \YîoJD8nJAJLe ӦnȳEٚyX5.YbfrfYR@5d<5d+]d vCP=*/ObǪ]( gcfӍAx@{*w߉F#'ai.Ň2k9!Z|]?P7^ vvKJ"T}a;cza #1ճa06^ H>3G K=/j0׾Da (=rd0exyyxlǴs=~}*{ ! QMu;k{GFڤt 5Y}_<4tEث{:,X4j{-h|NZ"ꯀxYQ)^|T}j_:ojNީ/g•=L^A7t|u5JkR$Fca*ʖU?2f`ƎF5*ñR3 !Vbgj`S XPݚo1ŠFؼ1i_T59: }LO:,`Rs}%V=?FԩsRi͐\z:s|:u*ӧ<τTzy1Wʺ44G@71&K-:.LZOAFRNJa<، Z%}ZN+N%vK; [:Lcu fNNDJ}q2eQ__9v8,B7w8edf df&+T;yjF:ׄ#_0]8HfnL/A*IVFAިٜ%_fɎ C kTEf K Z"+kP%hʕ(4Vc6 ݟ8*}{(_J y'x 00`Ͱҩ~i_{; -4>-~c4OE@?O(TG|쒒$@չ1 %? ( 'C9@b |J~0ܒC?p( :P ,Vg}y`%~R(bjⒾN'E@vVv;{;=-v:;=;zK;끉s¤F:.㕪OuhMME+_Olьn7ڊ\ lt:ǫ2ڟI0-< !PMYWHd Gc2LPQ5ϼup.]\$3Sdd Zc OQϻϏm{\/gÇ{DZБЫo .Wsۚ>M#q/m{˜ ּ^Y8ٺҡA o^zH ^Am;#/>.SԎ`\Y"_1,M!N6?[1v#EZvdzNʟ ̜wf"dp_϶9o?4ϩt\ò?m@9__錞;bkGEc*v>gm䁳vPPd 'ipRyX Ài@+zn˄iGp{oE0!~/ ?p|ulofOgO j^09o ]1'ȋ1dtvB?JHB/8FVUjVOqJ4`qto$y kx8<_-KٓĪr\0sRqds+OB} 8a392{"KÛb6=Q@r2=[0 XG}2Θzld]KΎҲEy2Pm3}o}hrǘhE诲tc=祯`_8m;UB(E΄|pN!M&I5a[8` qCDжuqcAcahrl"56Cd] 09Ob lY7qWF(45ufw#ϮA.Ԓv֗)X M7TRAA|V(-Uo$\~ T|z'of#lNڞgd'1\0ip?4o$$q>" 'yfx+Qof;SGr|: S‘eS䱓3E*u=a0%FO'Ē| Χ+fttv@Z_'6E[BJq<1X>C:J!ŒaG4< P?^/c:;i3zOi޼ l W0ݿ_]t(9vBtwcL;Od;C鱁Y送x2ġ߇6@a -ut78&q5˜jD>YNL}gJ!]zϰ#~-7ߋU#,-8öǴ<lxpWHb mcН TIK^ʽg\`W;K-~S;r);.oY@Y{0L1FrS-#>5gČ%> :|BωS|:| ω+>a9#`nύω>2s㷟|>s|3 97y3>s7> w}W,U}^fk{{;^?j,b2[D9'`eA'n w+ŀ)ِݱ2gnVo:ׄX4]Y,ObO\+ohswv<;JX!-y/ ZovvK*"!; NMbp~/Q&b/Z Cʗ!+Zm/i5!ʜ΄V. WCХ L>~ d6n"^M>uaAwL mmeoi|pGu}b nw*49BH,&r_Eۥ ]ڵDaG 0W]twzJB #cҘ!q?7)C-&j3R5_.^yO%f_- Vk=mB J|.s17 hxL=g|r<Ff f`#W`*>gB,ˆb̹0%}GzL {F-3zE[Vһ) &3(/1(!\pe]]<=:j̫8=7@ ^pQ]XfEf85:P$9jH}~1Q7 ?(jµg[Yル=l> {Ȣ_~eB=(N%"ÄJ1\A[c) .]nVyx+e*6G2Ӆ|~RҾR2!+Jb o bd w!(h$m[Czd!9\Oy E%\8d9ހD\YĀEЮtMuyGbmoE[Fkhp 8+8U*0 =^MT~'YnwI -(s.N1ͽՐg9l=gC;-!hvp ;x͡p0._hϻ-}^1i 5Ř'Gɯ2<{-m}~)k-.ì,­l@ҩVm̛! w0s3fAbM"sC֙}9(z~+m1_~ %0t v!$-5 [Ai EL9~mC l!+0~9fAMu6<@qY*h +HBKb v~n IxB 5疎5ms=j5AgD{PSRmn[)/ԗlQs1b˽3Ld\Flo ~x.g~RmD503ʚz%P j~{ze\ʾNWt:0]3?w?~w+wCa;7Eb+ l I-ln/fii|e%8rID&қ6n0KH逽 $^hjrSjjVPNlnaH/c={k<<ۨ ؑzQv:AO:O6.ГcÁ*;avWm"<ܵKdycpOd*1R x{b5l b &7 6Q=4'Pu}C˲JTwe39rkH[\$~0#\);/j<oD9{x@nS^=l(ysOHAqE%4AmigaDBE%4E#BrUsB\ JTpst]A^t =T EDIT-BACKUPrs -*^df0:demo uwv_devspvwۤwsystem-configurationuvp+y||x|ni`@ " ,EpsonX[CBM_MPS-1250]P BxyB\spyzu>z;B\startup-sequencexy;3)df0:c/border on df0:c/climaxx -c -t df0:boot.txt df0:demo {|n}|B\boot.txtp{}U Where Amiga Memories Live On __ _____ (__) / _ \ _____ __ _________ / /_\ \ / \| |/ ___\__ \ / | \ Y Y \ / /_/ > __ \_ \____|__ /__|_| /__\___ (____ / {;Z \/ \/ /_____/ \/DB https://AmigaDB.net --- YOUR PORTAL TO AMIGA HISTORY --- ~hB\cp7B\cls~m-] ?g $<Lv`$<Mv,yC@pN*@N"N"MNbpNudos.library Parameters are not required  7tB\border~󫔿HzHHI&TNJg,$! !N. n (gB" & @I<(X/BrQ >D@ Ư!RC":c4@g=3sUE_(ր`J`J7BkpS ЃaZ,o>܄U!H mp9Q>h@9*k7QGB G dmTQ ҫۮ[$E[5:!{a+Pă[Oҥ`*t4e$#> OJo"=@a1ܩ)7-$Ĥ@Z*1'ػ;/=I8 B[_`F<Brp;(uT{Ch9>6- F9X@#~lTNa"2S|w1 yd Qd=qh3a'1p@4Ґ $a*GB*1 p0p$0pI(40k 49@oyfMg\Al1 FF43xL3< <&͆o iac%yΆ>rJFOfLf90Mh1@ɋ|  IcE9BNo8ÙeQΆmq 'N8 SԹ[)tļ2@n䅽FxI)ɨ!Ii|%|HDR)Hћl:A9AІ@ZJ B\htype~ ,`mmNUH720|&P~Cp$,KN$@ J gprAQA"M$v,JN+@JfN|"$N&`N+@ <rHA,KNT+@Jf,JN|"$N&`nr @1|!| m+A+A+HgR mHHHg@phfp+@`pnfp+@`(HH+@A"C$ ,JNF`zJgzJgSJjAn~+H`zA+m~+HJfd"m Y+H+I gPB"$-,JNJg*N|.ptЀf~+mAB"C$ NF`~Jf"m i"(,JN m+@"$<N+@-N|."-NJf m+HA"C$ NF` -g8Jf2"$<N+@JfN|.+mA"C$ NF`Z -g"N "- Ja.Jg "-,JN"-,JNBJf"-NJgN|.ptЀf~"-,JN` -g"A$,JNF`Jgm "t,JN& 0f~`~ -g",JN -g",JN"m,KNN"-,JN"J,KNb`0|"P ipz!@ LLN]Nudos.libraryFROM/A/M,TO/K,OPT/K,HEX/S,NUMBER/S$VER: type 37.2 (21.1.91) Option '%lc' ignored Type can't do both HEX and NUMBER 2 No files to type TYPE can't open %s 0123456789ABCDEF%04lx: %s %5ld %sNUH72.,&Hp*+@",KN+@Rg2JfJf p m,zN8A`\9fNuRaC  gfBA"$<A,zhN+@g"tvN"-tvN+@ g,r,xN:+@g"-$-&- ,z N mB0"-,z NJg(Aca maAXa"m - ,xN.Nu m"h. iX (g"|0) 2) i,zN,zNNuJxgNur < ,xN: @(@C0< QNAp0RB RԈJfR RԈ 0fC,xNhr&Ё @"PrA 3@H@2B97A!xNuH瀀AHpR(T( V(X( Q9L3 Nsgraphics.library"<,xx N(N:JfNu  gSNu zg" -ff ( gJ(f NupNu"$vRJf,z0NAC!IC!I,xN+@pN+@C#mx;|"m) fJ iCg>EL" C8#A #AE#Jr#AE| #@(NAN+m -N -Nu1mCLIMax v1.0 0m33mby RIFF RAFF of UNITED FORCES 0mUsage: CLIMax [options] Options... -f Fullsize, -b Borderless, -c Clear window, -a Add21k, -t Type text, -s CLI Stars -n No Fastmem, -w Wait for mouse d-'0 p pbqYnйք[[6,wgw HaG .̥2V1/4b*lQR7qvaqa9,h>`vfH.s5lmF^ 셳a=i Č]Hؗ`-.ؖȽF»i (_ h:CYaLŭ ;|{kY&],$W(u!/Wl@5|X+_OVÿl^^~ECoվr>8VU K93uo+Z (l=:D R3vAhp~?y6bYZX){~_﹎[u| -1. 6_Řl%}~ {/^rr){3yyz{w9%2sbnww{ۿxޯ]X(㵹|dKcW= Gl}GQ~mo׎r ,/MGh|;m\+(ǹQJRY}Mwmyz=Oܛ|da_`GeKTAPێFJo(%XK]Zf5fR_K>wo''4b/.1Fڧ=zO?֌)1>sOڸJ2\C~Io~熨y-;Kڕ?zf7yܾGheDAmbWH={E0\7 $# x]TY K_-AS><G%ܫZD[Xw>]XWǘx}o}ѿw&}6% ɥbb1in,O< ۋ &Є}~cR !)m{@Aj_a tާ]oDa6yK%[PukMMa?UomD)͈)CK&8ftruk/nTqKQ>iA1U6'`֌d&42֟g& UUIb"F(KX!ȧv퉳oʪpe%9y(/lߑ;DcءefvPկ.^\KV6froAhԹRl` =*dJ|alY32*/a ^m[¹lڥ CSMe,[5ͯQve'Aڷ a<@=n֦F%*ZVR+QQ ܮ6Ǩ:T3FF貑z[7+sV$Mܮ:7cr5k7f:Q,٢V֬跨Bv˱n:,R2+ZE b0Ry4*c l"*eQ Zn^6X+}&BׂZl'gJRl9Si?X6)JNfnC ^^f& LRl*-aYHoUEFm[7e9 iJfX ZK=`\ތQ@# 6aP}`*-6i4ccFIfrRd7i]nNdKo[˵ή`\|ǫ#pZZ7᤽:gS)ty?w;!w̥BwCᦶ X/iϧYAy DN )4/Z&b߫+}rG|0G?pZNObZmzY6 \z+WOො=ZiN sۚ[ޮl|}{=G3?w3 _|G3{{}JrB6}A-CSK}乾W/ܟ/O߹~{}ϻ7:Sϣc}p| _r/m|ޯV!m5@9*T.r+^p]nEۛӠ ٛ6mٷk;va((XHOa?UtUWxX/===U' z'Rc.e1D=֖ͯe Bޏ5}&G:UGʼׂk1Mh^v T@IDVs㸟UWWt›pf-EؿOC'>gnEOȮޟ[AKZHmo?ǜϼgOm<<߁kvؗ7D1ӥ|51,ćVXk̟uZjy[yL0]\.$؟ śKC*koۅ_a5Nxzo]i"fcr4b',l_sOnM_v!+o{Ϟ\ϒn{$\h3{C!9ZՏ'Ey޵zvtw=U .gJޟu\Zg0{:S9ڰ_~~6kqky{{}؏[Z[yK/`3{a"zzyΧ j0WxI K7VjِU926\nM)0oSbր6׭lDK7x#/Ѐ~o ~>kZǺcqevD}zb,WHHs_jx}7j՞3߰S*loyky"u|+C+ 7cny!͘J$b΢Fy.b}LtOkW$FkQ|DU(o]Hɭ͘ǫH^n_^Q!n1 NZ!RyۚU`|Kͳ#XR1ٻ榶H,enJ7jY$B2V6mnO%Uo`1{Z T!n dl/YTM-<<U=)iP>koiz%?y K ߷V֌P7dJR-^Viu{ڧ o!%t )UpkuV$7-9$6bupkZr.^Y0d84Z{,ydǟH*D9ydS>s,ӊ@I! [,h9F囓:MS{qsr5lg|Q7#X *ߓG|'}@8{7(8$nrɟf|{9(l;3–[X`9nʷ 8؎P/:]9FTe q>un\puI]QU &`85>Q\hg:+٣]%2(ܼv3\,^l*%8̮P,xqqܠXoe?(܍o8չ#}lƭfo^)Ơ*e-Z f:1w->oYǧk4syCphXx9ǟrľ܁G "}2<@^-߰ b@PI/.b˰ -<7 4VpYߟ ZI:s8d~б~r3\܋zD+GWp,pxQΝor՚\8g?4q,l>T}]]⋮t}ȶwM4kv8.p[ovhFnphXx9r-W of ^ޖh(?r [(8Np;()NpV6@kGcN⩁nxzso`}r8X-fj܍`X=VhEޤ?5w2quoMz?8 J-8/8OztUJ|/>s=]+ܕpW2ΜXUP%K{. *ƨ`p* /> -!-T%`o[܁pEcu7Qb]nYXFXJ:ɟ`0f*UF75[6M{o܎x&X, L<./N,ax ][n /0Yqca=8SB=/>䛂,iPS~rGrMj4KJuU7}Z7$pI-]}h4u F8/8WVmVmWZW/ùew,"@Kaܲ?z. dɗxvs2EƗ>kM܍uik+M7r5UFcMƁV>Ajw(h}8'x'F'OF1F nxq#O:NAL#^#b~wQ)C&=1= oxF `sɼG0ױ'Q'zx7p:@ ,'2vR6j I?!`{ Dr52֛5~8>Z ]S^O:|/B͖[)&kՃf1z$QMzgتt2x()GƄ[ t'oCܟ ?Y,ss`I8ct$!ns\1]U^ηXqwid*Ƅ~LYvh(Nԉ'y8PQ]" p~o3鉂j+M"ŲZ*44u1d 1 $ ~؄<  A`@`ttUP68 6WpE%ZebTo0lz!.infopsZI9x Dx Ixx I;xr=Dx9Vx\D9g? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" U=pU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU.x) EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUP9kpoUS UR``]SUU@UUUUUW @@@@@ @T`@`@ @@5UUUUUV N ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO A 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU% Icon by Martin Huttenloher ,E% tango1.addp1th __ _ ___________________________________ _ __ _|__\/__|_ |Connect Yourself to the Uks Hottest bbs| || |() dIGITAl CANdY ()_____ _______________________|| ___ _____|_ \_ ________ ___\ ___/__ ________|/___ ___\__|| / | |/ (________)\__ (________)____| ___ ||/ | |/||/ ||| \_/ ||| |___________|________|___________|_______Z_|_________|_____|_____|___________| ___________________________ __ ___|/_ ___\__|____||_____|_ \_ ___\ | \_ | ________| ___ ||/ | \__ | | \| \_/ |_____/|/|| | |___________|_____|_____| /______|___________|___________|tG o1889 8oo578 & o1889 8oo58o 18 cds Roms Online,4.4 gig Hard Drive Files,36 Meg Ram,A4ooo/o4o dOE% FiLE_iD.DiZp+* _____ ____ __ - - --- - -- --+-~~~(__~~(_, ~(_, a r e a 5 1 __, ____, - - - -- -- +- \~ ____, | `---\ | +- [ 31 - maY - 1998 ] ----\__`------' -+ ~~ ___ ZebTo0Lz - by Zebedee/A51^CrN ~~~ [disk and system tools inc. sourcecode!] +--___-----------------__----------+  C5kE% A51-ZTLS.nF0p.R@BEGIN_FILE_ID.DIZ _____ ____ __ - - --- - -- --+-~~~(__~~(_, ~(_, a r e a 5 1 __, ____, - - - -- -- +- \~ ____, | !! nF0 - Tet !! `---\ | +- [ 31 - maY - 1998 ] ----\__`------' -+ ~~ ___ ZebTo0Lz - by Zebedee/A51^CrN ~~~ [disk and system tools inc. sourcecode!] +--___-----------------__----------+ @END_FILE_ID.DIZ { _:________:_ ___\| |/___ _) |AREA51| (_ | ` ' | ____ |____ ______ | ____ _ _______\_ /__\_ /_____\ __/___|_______\_ /_ _ . ______/ \ _/ / \ __/ \ ______/ . _ _|_\| _/ | _/ \|-dKS! _/ \| _|_ _ |/_|_______\_|________\__|_______\__|______\|   .......... .......... :::::::: :::::::: ::::::::.......... :::::::: :::::::: :::::::: :::::::: :::::::: :::::::: :::::::: :::::::: :::::::: . .. .::::::::..::::::::. .::::::::. .. . -------- -| |- -------- | : : | )___|P8AREA51|___( /| |\ :: - --u-n-l-e-a-s-h-e-d--f-r-o-m--c-a-p-t-i-v-i-t-y-- - -[- ZebTo0Lz by Zebedee/A51^CrN -]- -- > 31.mAY.1998 - -xXx---xxxxxxxxxxxxxxxxx---xXx- - Okay, okay we've been a bit quiet lately apart from releasing modules, we know that... so here's something a bit different for y'all!! :-))))))))))))))))) Some kewl dibsk and general system toolz (with some source included) for ya, coded by Zebedee/A51. Contentz--> .sAucE. ----> --> AmigaE....... AmigaE sourcecodes --> DevPac....... 68XXX Asm sourcecodes --> Pascal....... Pascal sourcecodes dISKto0ls ----> --> BootKit...... A bootblock utility. (v1.00) --> BWrite....... Writes bootblock code to disk and calculates checksum. (v1.04) --> Denkor....... Disk encryptor. Now updatV^ed with GUI and write-verify option. (v1.03) --> NewZAP....... Classic tool now fixed for KS2/3. (v3.31) --> TrackDOS ][.. New version of the old TrackDOS tool by Nic Wilson. (v2.00. rev3) mUZiKto0lz ----> --> PlayPT....... A small ProTracker player that uses the ptreplay.library to load and play modules. (v1.01) sYStEMto0lz ----> --> CrMview...... Enables you to pack datafiles with CrunchMania and view them with conventional tools (e.g. PPmore, PPguide). (v1.00) --> LokTite...... Locks up your system with a password. (v1.00) --> Query........ Filetype identifier. (v1.00) --> ResetReq..... Resets your machine. Useful for adding to ToolsDaemon or making a hotkey. (v1.03) --> StUC......... StartUp Controller. (v1.09) Enjoy this lot anywayz... ....... -0....oh yeah, and don't give us anymore motherphucking shit about tha releases okay...... j/k ;-)))))))) ...beyond the frontier seven is almost here... u ready?? - ------ -> zYX!^A51 - -xXx---xxxxxxxxxxxxxxxxx---xXx- - -A-R-E-A-5-1- -- -C-O-N-T-A-C-T- -U-S- -A-T- zYX!- --- - ---- -> alan@a51krew.demon.co.uk [RUiNER]-- ---- --> s.smith3.ukonline.co.uk  ^ - -xXx---xxxxxxxxxxxxxxxxx---xXx- - -A-R-E-A-5-1- -- -B-B-S- -&- -F-T-P- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::: d o s s h o u s e b b s ::::: ::::: a 5 1 w o r l d & u k h e a d q u a r t e r s ::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::: --> sysop - Axl co-sysops - zYX!+Golden Dawn <-- ::::: ::::: -------> +44 (0)1239 811081  #vn (6pm-10am) <------- ::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::: t h e p r e s s b b s ::::: ::::: a 5 1 f i n l a n d h e a d q u a r t e r s ::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::: -------------> sysop - eKsotic <------------- ::::: ::::: ----------> +358-5-2188135 (24hrs) <------- $--- ::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::: m u s h y p d f t p ::::: ::::: a 5 1 u s a h e a d q u a r t e r s ::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::: --------------> sysop - Mushy <-------------- ::::: ::::: ------> server...... mushy-pd.dyn.ml.org <------ ::::: ::::: y ------> directory... /pub/users/area51/ <------ ::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -xXx---xxxxxxxxxxxxxxxxx---xXx- - n~E%sYStEMto0lz.infop>m6O9xhx 0(xKxM`F4xMx*,\D9? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" U=zpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU.x+< EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUP9poUS UR``]SUU@UUUUUW @@@@@ @T`@`@ @@5UUUUUV  ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO A r5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU% Icon by Martin Huttenloher F3E%dISKto0lz.infop=9xhxxxDAdxDx\D9? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" U=npU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU.x+D EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUP9poUS UR``]SUU@UUUUUW @@@@@ @T`@`@ @@5UUUUUV ¡ ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO A l5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU% Icon by Martin Huttenloher lt%DE%TrackDOS.gde.infopű[OAxxxKApaaaaaaaaaUUUUUUTUUUUUUTUU[UU]dUU[UU] dUU[UU] dUU[2LUU]>d=dUU["dUU]2LdUU[UU]dCUU[UU]dUU[UU]dUU[UU]dUUPUUUUUUTAsn}|uUUUUW``]}`|``|Kp`|m```6``UUUUUUTUUUUUUT?TT` jOcc tcPrc2?H@UUUUUUT C:PPGuide;A>goE%TrackDOSpɜ^g&<A@%@g,x .2gaN y h\ | .,yN4# @#2$#V(aH80pr $<vhx"y$$|&y NL  y$"|pr,yN( y(,xN y ,yN | ~,yN4# @#2$#V(a,H80pr $<&<x"y$$| &y NL  y(,xN y(,xN @/(.("@,xN _|g (( y 3|g|g*|g*|g|g|gN|g||gF| }^g`lAF1|"A1|A81|A1|A(1|A .1|/A ~1|A1|Nu,y"|ENN8NTrackDOS ][ by Zebedee/A51 (11-Dec-97, Rev. 3),yp @$@&@Na |N#\Jk |\aNJk#`\k 9`\#` <#x"<"|NFJg##| |aNJk# |  gS#lNа<g<gH ylNVJg# y h4|4 9`J@f #`t` #t yn#\"y 9t,xN 9Jf y!|NH 9tr2H@|gRA#X y"y 9H |$ 9`rtvx N|aLN "y)Jg`<l g#a` 9H@B@H@"< y"yN RJf"9X`V# 9tѹѹ\`#t 9`gl#`t`"yN la 9g( y hy4"yN#`al |  gS#lNа<g<g0 ylNVJgv# y h4-9|4 |"yp"<HaLN "y)Jf |"y <"<HaLN "y)JfP"yN la 9g( y hy4"yN#`aZ |N#\Jk |\a NJk#`\k |  gSN $ga: y\"| 9`"9\rvN Jk/ |$rtN " _  | rtN "` a |N#\Jk( |\a .NJk.#`\k |  gS"$<,yNJgN".$9\'Fm&9`,yNJk",yN`X,yN|N za`a |N#t |\ bf #dRN#p |  gS#h tf yhN^Jg#t pg2Jdj 9p`F"yp 9trNFJg#`0 9t#x"<"|NFJg##| | 9r/tN "$ y"yh 9tNJfD,yN|N za`pa |aN# |\a NJkzJgt#tm #` #t |  gS#l |NH")#p#\g"yp 9trNFJg`* 9t"<"|NFJg#p#\ <#x"<"|NFJg##| | 9pr/tN "$ ylNа<f`<f`j ylNVJf`# y h4|4"y 9r2H@|gRA y 9H | 9trtvx N|aLNJg` y"y\ 9,xN 9tѹ\ѹ# 9tglL#`B"yN l`a#` |a|N#mJk |\aNJkJkf f#t |  gS#h |  gS#l# 9gJkj`# t# 9t,o# ,t <,# <,#x"<"|NFJgz##|"9h$<,yNJgh. ylNа<g`<g ylNVJgF# y h4|4"y 9r2H@|gRAӹ` y 9H | 9`rtvx N|aLN"yJf$"$9&9H |$ 9`rtЭ=vx N|azL,yNJkJ gL, 9t,k#t#,` 9tg#t#t`"yN l`& 9g( y hy4"yN#",yN` `,yN|N za 9g"@N l`a | 8aNJk# | JNJkJk# |\NJk$#`#t |  gS#h |  gS#l yhN^JgJ`g 9`#` 9gJkP`# `# 9`J@f #`t <#x х"<"|NFJgv##|"9h$<,yNJgd. ylNа<g\<g ylNVJgB# y h4|4 9g"$9&9,yNJk"$9&9tH | 9`rtvx N|a L,yNJk 9Jf y!|NH 9tr2H@|gRA#X 9 y"yH |$ 9`rtvx N|a 4LN "y)Jg`<l g #a  9H@B@H@"< y"yN RJf @"9X`V# ԼU 9tѹ` 9`g"#tl#`t`"yN l` 9g( y hy4"yN#",yN` ,yN|N za 9g"@N l`H  gS #fD$HRN鈰 n4 J$rtN " yT P"y $|,yN"LNuX` "H  gS #f<$HRN, J$rtN " yT P"y $|,yN"LNua : |NJk #\ |\NJk (R#` <"<"|NFJg # |  gS#lN Joа<g <g ylNVJg # y h4|4"y y 9\"9`#`a "y y"< 9\N RJf \` 9`gj"yN la H 9g( y hy4"yN#`H |&HNr$<N( KrtvxN| |\&HN"$<N KrtvxN| yT P"y $|,yN"LNuH  gS +fB$HRNJk:й\ J$rtN " yT P"y $|,yN"LNuLX`,yNa# M#F8#v`3_3_#*<#@ |  #D#H#DL#P3t#jTaX`|,yNa##8#3_3_#*<#@ |  #D#H#DL#TP3t#jTa`,yNav#L#883o3o#*<#@ |  #D#zH#DL#dP3#>Ta&`J,yNa#L#83o3 GVo#*<#@ |  #D#zH#DL#(P3#>Ta`,yNaN#L#83o3o#*<#@ |  #D#zH#DL#P3#>Ta`",yNa#(8#*<#@ |  #lD#H#L# P3#RTa`,yNa@##F8#`3_3_3_ | #*<#@#D#ւH#DL#P3t#jT |\1|5|9| |0|a`,yNan##F8# `3_3_#*<#@ |  #D#H#DL#P3t#jTa`8,yNAN4# # @#2$#V(aX,y y$"|PprN(,x y(N y(,xN @/(.("@,xN _|g`,y y N`Ca0<g y ,yNpN$ y h\Nu׿Ó 8 J\Nu y8,yN4# @#2$#V(aTH80pr $9<&9@x"y$$|&y N(yHah yD"y $|,yN"3L  y$"yPpr,yN(#d# yL"y ,yN2&yT y(,xN y(,xN @/("@,xN _ ((|g~|gL|g4 yfaX f&yT S"y ,yN2` y ,yN`b  `g0 (Pg\ TPg| dPg yg Pg ytg͗w`Nu k""$&x"y$$|&y N`Nu |a Nu |aNu |aNu | l *Hj~`|$6Z`jnv~ ,28BLVh &2:TZ`jt~H .4>BJRZ`f$>DJT^hz,jrz*Dj*F&B^(Fb@l H p  , H  J f " gA0NNjhv6`2fV \vP$<Ld-6dLn~ 2 0 6rL6HzDV8d"*@JRnz .^d%$@RXdp~ ,FT^x~ <Xjp|"2Lnt&,`f"*28LTZx~  $ ( < N T b h ~  & , 8 D J f l |    2 \ f z  & D ` r x   @ L R ` j t | $BZdx$*Hdv|8>DJZ|"&0@HRZj8@v &,4>DPfpv"*f| (0:d&<FPZbl*DNdnx8pz .8NXblt~>`(9B.FPV\nt .:HTp|06X^&(6Quit TrackDOS ][...Are you sure?Yes|NO!D L V D  !!&-!6=!F !!&-!6=!FM!V !!&-!6>,@fZvMemory to DOS...Format Tracks...6,@Trackdisk to DOS...>,@DOS to Memory...Memory String Search...6,@hTrackdisk to Memory...6,@Memory to Trackdisk...Do@, ? ? t ?j@OK>Q p     o@ ? ?0 ?LX h   jEXIT wo@jINIT h58 \ x  L.  $0 @ > x     ?jRead from device  ja,Disk read offset /j@PSave path/file jdvDisk read lengthOjVALUES CAN BE IN DECIMAL OR HEXXjIF USING HEX PRECEDE VALUE WITH $ajFOR FULL DISK, SET OFFSET TO -1j/,@lXDOS to Trackdisk...}@?? < ?jOK |  DB  8  T `  p }@  ??  ?j EXIT V  D & J .  D8 >  D N  Dx Nj", Write to device j  $Disk write offset j 8 FBuffer offset ?j Z jLoad path/file /j ~ Disk write length^j VALUES CAN BE IN DECIMAL OR HEXhj IF USING HEX PRECEDE VALUE WITH $qj FOR FULL DISK, SET OFFSET TO -1Kj ^Click in window to continue...4@ TrackDOS ][ |    )  V     . :  J <j jTrackdisk to DOS    <j DOS to Trackdisk ,   HjMemory to DOSp ;  H0j\Memory to Trackdisk J  HjDOS to M!)emory Y  0jTrackdisk to Memoryb h  @HjTFormat Tracks w  ,jMemory String Search   ,jInformation and Help j"2Source address jFREnd address /jfvSave path/file?jVALUES CAN BE IN DECIM"qAL OR HEXHjIF USING HEX PRECEDE VALUE WITH $QjMEMORY AREA CAN BE FAST OR CHIP j(8Start address  jLXEnd address /jl~String to search?jPRECEDE END WITH A + FOR LENGTHHjIF USING HEX PRECEDE VALUE WITH $QjDO NOT SEARCH OVER ILLEGAL AREAS  j2@Start track  jT^End track /jrDevice to format#SW?jTO FORMAT A SINGLE TRACK USE SAME HjSTART TRACK AND END TRACK VALUES QjINIT WILL PERFORM A QUICK FORMAT  ?j<LWrite to device j`pSource address /jDisk write offset jEnd addressOjVALUES CAN BE IN DECIMAL OR HEXXj IF USING HEX PRECEDE VALUE WITH $aj4MEMORY AREA CAN BE FAST OR CHIP jhzDisk rea$&-rd length  jPreferred area /jLoad path/file?jIF USING HEX PRECEDE VALUE WITH $Hj .LENGTH = NULL FOR FULL FILE SIZEQjBPREFERRED = NULL FOR PUBLIC AREA jxDisk read offset jDisk read length /jPreferred area ?jRead from deviceOj.VALUES CAN BE IN DECIMAL OR HEXXjBdIF USING HEX PRECEDE V%'ALUE WITH $ajxPREFERRED = NULL FOR PUBLIC AREASzTrackDOS ][QzTrackDOS ][ j By Zebedee/A51 (11-Dec-97) $j>Based on TrackDOS by Nic Wilson4jRn1997 An Area 51 Production\CjIvan OliverLj39 Beckly Court, Armada WayLUjPlymouth, DevonH^jPL1 1LD, ENGLANDr6@8Informat&Mion and Help... dtInput Examplesr(Not case sensitive) jTo input the offset 1024 in decimal -> 1024 j To input the offset 11264 in hex -> $2c00 'j4`To input 40 cylinders -> #40 /jtTo input 10 cylinders in hex -> #$a 7jTo input 2 cylinders in binary -> #%10 ?j To input root block offset -> #880 G'øuj4bTo input root block offset in hex -> #$370 OjvTo input a length of 5000 -> 5000 WjTo input a length of 43981 in hex -> $abcd _j&To input destination address $20000 -> $20000 gj:fTo input a destination as a length -> +512 ojzTo input a start cylinder of 10 -> 10 wjTo input drive zero as a device -> df0: j$To input drive one as a (0kdevice -> df1: j8To input an example path/file -> dh0:c/name  topaz.font >BFJRVZ^bjnrX`JR48DVfp (DH`| .8pt 8^nx)148<X\`~:Bl~  L P h |  & V h x   , 0 4 N R V r v z   H & * B ^ b | .26PTp*&*.HLbtx|:>BZ^b~ $@DH`dh&*.HLPfjn048TX\x|(,\`d6:lpt 6:+>lpFJNvz~"X\`|(,0hlp(,0jnr.26nrv,0jrzH/,y# AzCN#AzC N#AzCN#AzC/N#,yN#,yN#,42 _*y -gp  g`| "f""HB$I  fS J` "fBR/R I  gS  g/R !j ( f|.g2X"<,yN:Jg# @#$S!pQ`LA\,xNA\,xN#$@&j$P#($*S#,"g,yN#0LN 9g&,xN|"@,xN"90g*,yN` 9 g"@ 9$X,yN.pL|XpNuHg J"K,yN"LNuH~ " -fR~ +fR $g %gx 0f$ (xg (Xg (bgV (BgN|JWFSSz <0k-S<:j0"@Ҁ HEH@ҀHE ڀpQA`| %gRJWFSSz <0kn<2jh0RҀpQA`X| $gRJWFSSz <0k2<:k<ak <Ak<Gj_0XҀpQA`pr`JgFRLNuH8 $g,xN4Jg\` ,xN:JgN&p "<,xN:Jg>"94Jf#4` A g h`!@ @ !B LNup J`"C ,xN.`/ H8 "HpJgR`$H( y h" ( @ (&$gbS @Jf4 (("@p 2:0fSk$S201 f`1 f` g` (ge"@ ).ZJg"@p`ȓpLJfRR$I |8paJJg8"J |pa:Jg$"J |(pa*Jg"J |JpaJg p`p` p`p`p$_NuH00&$H&I`RR  kgJjg`  k jp`p`pL Nutrackdisk.deviceramdrive.deviceasdg.vdisk.devicemfm.deviceH8"HH8 "HpJgR`$H( y h" ( @ (&$gbS @Jf4 (("@p 2:0fSk$S201 f`1 f` g` (ge"@ )Jg"@p`ȓpLJkF&IR (gDeB @(p/ "<p",yN:$@Jg p,yNrf/ۊ|"Jp",yN.Tp"`6@||_ ,yN%@A XB!H$ $_gp0?/"<,yN:Jg"@|#_3_&gR r K"C,yNDJf" `fH8& g^$),yN>"Cp@#@#@B0),yN."B/ p@#@p),yN"_p",yN.p"LNuH8Dp&"<"H((!@$тQуF!@"LNuH?>~JgJk ov Hp"Hr BQr JgRCt0RdSЙQL"H J)fS`Hxvpr!0!0Yx t!0ЂXQ"ALH@/JfrJgR 00wxrf | Q _Jf&JgR"H 0oJg| SJgSJo/JgR"Hp JgS 0oRSJg,Jk(&H$H *JgSQ lB"` SQB _"HJg$I lJfS&Jz gSQLL|Nu;B@'d / $I#@,#H(#A$3|,xN8"J)Jf"J3|,xN8$_Nu#@,#H(#A$3| ,xN83| #|$,xN8pRJfSNuH>8|I&IJjtzgbo^fRgJkD(gD`D$HSRg:g.o*fRgJkD(fD`D"K JR`gp1EN`"H J "L|NuH8Jf Jg0`@vx"@<gv0<9o^Jg Jk<0g QJgLNugf | |`̰if | `xf | `yf | `zf | `f | .`rf | N``f | j`Nf | `<f | `*f | `f | `f | `f |`ⰼf |>`аf |\`f |z`f |`f |`f |`vf |`ff22 |`Vf |`Ff |(`6f |D`&f | h`f | X` | ^NuERRORNO ERRORINSUFFICIENT MEMORYERROR 103 NO FREE MEMORYERROR 105 TASK TABLE FULLERROR 120 LINE TOO LONGERROR 121 FILE NOT OBJECT MODULEERROR 122 INVALID RESIDENT LIBRARYERROR 202 OBJECT ALREADY IN USEERROR 203 OBJECT ALREADY EXISTSERROR 205 OBJECT NOT FOUNDERROR 209 ACTION NOT KNOWNERROR 210 INVALID COMPONENT NAMEERROR 211 INVALID LOCKERROR 212 OBJECT OF WRONG TYPE3zhERROR 213 DISK NOT VALIDATEDERROR 214 DISK WRITE PROTECTEDERROR 215 RENAME ACROSS DEVICESERROR 216 DIRECTORY NOT EMPTYERROR 218 DEVICE NOT MOUNTEDERROR 219 SEEK ERRORERROR 220 COMMENT TOO BIGERROR 221 DISK FULLERROR 222 DELETE PROTECTEDERROR 223 WRITE PROTECTEDERROR 224 READ PROTECTEDERROR 225 NOT A DOS DISKERROR 226 NO DISK IN DRIVEERROR 232 NO MORE ENTRIESH"t,yN(g$"$<,yN*",yNJfpt`CtJmt )|") QL8NuH<" (&4ei$<,yNJg "*$,yN(",yN Ll$o `l L|Nu到<_~:_~n:_~~:w}_~n:_~:_?z@UUUUUUT C:PPMore    E% FreeI.txtp  -jFreeI v2.00 (12-Dec-97) By Zebedee/Area 51 Written using 100% pure assembler Supplies the following info using the specified drive: Unit name (Eg. DH0:) DOS type (Eg. DOS3) DOS header (Eg. 0x444F5303) Disk size (in bytes) (Eg. 8481792) Used space (in bytes) (Eg. 8289280) Free space (in bytes) (Eg. 192512) Drive state ( eEg. R/W) Drive label (Eg. Workbench:) Example: Unit Type --Header-- --Size-- --Used-- --Free-- St8 Label dh0: DOS3 0x444F5303 8481792 8289280 192512 R/W Workbench  E%Free.txtp jRFree v1.00 (12-Dec-97) By Zebedee/Area 51 Written using 100% pure assembler. Displays info on the specified drive like drive label, capacity, used & free space in bytes. No parameter gives info on current drive. ?V3@E%PrtFXStrpAG@@#lS#p,xCCpN#dg,@N#hg z4 ?g 9p o"|spR<g  g  g`J#j"|zpR  g  gr`J#n"|rpR g  gN` |z"|pR gn ^gv&9rg`JJ`tvJ|xt9|0d9x0 ԃ9t0ԃ`#n |s prt:g< PRT:g4 par:g, PAR:g$ ser:g SER:gAa#r`R,z"<s$<N#f #r`"$<&9nNy,z":N,x"zNb 9rNuAa&#r`Aa`AYa #r`,zN$v f":8N$VER: PrtFXStr v1.12 (26-Oct-97)dos.library0;1;4mPrtFXStr v1.12 by Zebedee 1997 Area 9-51 (26-Oct-97)0m Usage : PrtFXStr Example: PrtFXStr par: ^[~1*006 * Where is where your printer is connected (PRT:/PAR:/SER:) is the effect string and is the character used to specify denary values (*006=$06) This program takes the command line and attempts to send it to the where the printer is connected. The above example would send $1B7E3106 to the printer connected to the parallel port using the * for denary codes. NOTE: The p>ort must be either upper or lower case, not mixed! For more information, consult the program documentation (PrtFXStr.gde). Write: 39 Beckly Court, Armada Way, Plymouth, Devon, PL1 1LD, ENGLAND. ERROR: Invalid parameter list ERROR: Invalid port  .DRv|  0@Fp"E%FreeIp3 `$VER: FreeI v2.00 (12-Dec-97)B0.C",xCppN#g,@C" tN#g$"$<Xv NnN"ggE6$ vCNa":"$<N |"(AvaA | ( "(K4+@ (+@"- +A (0@#FaXC$" E$ NF":N,x"zNbpNuA6 :fNu4aQNuBB0|:e^BNu |C (<Pg<Qg|W` 2Va|lNu,z.N"E$ v,N`zE $ vQ`dos.library0;32mUnit TypeJe --Header-- --Size-- --Used-- --Free-- St8 Label0m @FKTX%s %s 0x%s %8ld %8ld %8ld %s %s 444F5300R/OERROR: Unable to obtain info on that drive! 0;1;4mFreeI v1.00 by Zebedee 1997 Area 51 (12-Dec-97)0m Usage: FreeI  <T`R (`}E% PrtFXStr.txtp}^]PrtFXStr v1.11 (15-Jun-96) By Zebedee/Carnage Written using 100% pure assembler Enables you to send ANY escape sequence to ANY printer through DOS. For my Citizen 120D+, this is what I'd use: * Quad height, quad width, NLQ prtfxstr par: ^[x1^[~1*006 * * NLQ, d.strike on, emphasised off prtfxstr par: ^[x1^[G^[F * * Printer reset prtfxstr par: ^[*003 * '4E%FreepH6j j`$VER: Free v1.00 (12-Dec-97)B0C( f,xCp$N#g,@C" tN#g|"$<Nv NnA :f":x$<N |Kh$( "(+B (+@+B CZEBa":8N"N,xNbpNu" $ NFC4|a`dos.libraryN0;32mDrive %s0m Capacity: %8ld Used : %8ld Free : %8ld ERROR: Unable to obtain info on that drive Code: ZBD/A51@XdL :9876543210/.-,+*)('&%$#"! 9E% TrackDOS.gdepg@database trackdos2.gde @font topaz.font 8 @node main "TrackDOS ][ Documentation" @{fg highlight} @{b}TrackDOS ][ by Zebedee/Area 51@{ub} (11-Dec-97, Rev. 3) 1997 An Area 51 Production@{fg text} @{" Disclaimer " link disclaimer} @{" Origins " link origins} @{" Introduction " link intro} @{" Program Summary " link summary} @{"Format for Input of ParameǦters" link inpform} @{" Writing Bootblocks " link wbblocks} @{" Write Error Handling " link errhand} @{" Input Parameters " link inparam} @{" Functions " link functions} @{" Techi Info " link techi} @{" Program History " link history} @{" Last Words " link lastwords} @{" The End " link apocalypse DK} @endnode @node disclaimer "Disclaimer" TrackDOS ][ is presented as-is with no warranty. You use this software at your own risk. TrackDOS ][ may not be disassembled, spread in part or reverse engineered in any way whatsoever. All files MUST be distributed in the archive and all icon files (#?.info) must not be changed. You are only permitted to change the icons once installed on your system. @endnode @node origins "Origins" For a few years now I've had an excellent pro!44xgram which was written by a chap called Nic Wilson who lives in Australia. This program was TrackDOS. A fine program that saved my ass many times. It's small and compact and does what it was designed for extremely well. Because it was written on a Kickstart 1.3 machine, the program looked odd on Kickstart 2. Anyone who knows the Amiga will know that when the machine changed to KS2, colors 0 and 1 were swapped around. Plus the gadgets looked outdated. So what I've don"x:Le is replace the old gadgets with new gadgets, and rewrite some of the code. @endnode @node intro "Introduction" TrackDOS ][ is a program that allows easy transfer of data between the three main areas on an Amiga. DOS, memory and trackdisk.device. DOS means the data contained within a file, memory means the data contained anywhere within the memory map and trackdisk.device means data stored on a disk not accessable with DOS (eg. bootblocks special loader disks etc.). The tr#ansfer of data between these three areas is not normally easy or convenient. TrackDOS ][ was written to overcome this. Once the program loads you will see a credits window and a prompt to click the mouse button. This will take you to the main menu, which is a set of nine gadgets as shown below. Trackdisk to DOS DOS to Trackdisk Memory to DOS Memory to Trackdisk DOS to Memory Trackdisk to Memory Format Tracks ${ Memory String Search Information and Help The `Information and Help' gadget opens a window that reminds you of the different ways that you can enter data. @endnode @node summary "Program Summary" The above are the main functions of TrackDOS ][. When any one of the gadgets are clicked on, another window will open for that particular function and will prompt via string gadgets for inputs. At the bottom of each window you will notice two gadgets%N `OK' and `EXIT'. The `OK' gadget will attempt to perform the function and `EXIT' will return you to the main menu where you can select another function or quit. There is one exception to the above, that is, in the Format Tracks function there is an extra gadget labeled `INIT' this gadget performs a quick format the same as the `QUICK' parameter of the format command. This will of course blank any disk and all files will be lost. The INIT gadget only looks for the d &g,evice and ignores the start and end track string gadgets. If a disk is accidentally `INIT'ed then you can retrieve any files that were lost by using a disk salvager like as the INIT function only rewrites the root block and the bootblock of a disk to make it appear blank. This is what the `QUICK' option in for the format command. Errors or prompts will be shown in the rectangular box at the extreme bottom of each window. Once the function has been performed the program '? will stay within that function in case another is required. If not then `EXIT' can be clicked. Every function only supports disk data in the normal range of cylinders 0 to 1759 or tracks 0 to 79. Any attempt to read or write outside this area will generate an error message. This was done as tests have shown that reading or writing to tracks 80 to 83 is only a rumour and no proof has been seen to support the conclusion that this is at all possible. This will be changed if c ([)onclusive evidence to the contrary is supplied to me. @endnode @node inpform "Format for Input Of Parameters" All numerical inputs can be given in decimal or hexadecimal. If you supply in hex then the number must be preceded by a dollar sign ($). This format is the same for those paramters that have other prefixes (ie. '#' and '+'). Numbers can be input as binary by preceding with a percent (%) but I do not forsee this being used a great deal. @{u}Input Examples@{uu} To input )S} the offset 1024 in decimal -----> 1024 To input the offset 2c00 in hex -----> $2C00 To input 40 (decimal) cylinders -----> #40 To input A (hex) cylinders -----> #$a To input 2 (binary) cylinders -----> #%10 To input root block offset (decimal) -----> #880 To input root block offset (hex) -----> #$370 To input a length of 5000 (decmal) -----> 5000 To input a length of ABCD (hex) -----> $ABCD To input desintation address $20000 -----> $20000 To inp *-x8yut a destination as a length -----> +$200 To input a start cylinder of 10 -----> 10 To input drive zero as a device -----> DF0: To input drive one as a device -----> df1: To input an example path/file -----> DH0:c/name @{b}NOTE:@{ub} The above examples show upper case characters, but either upper or lower or both is allowed. @endnode @node wbblocks "Writing Bootblocks" Any data written to the first two sectors of a disk will be automatically checksum+*ed, and in this current version this cannot be disabled. @endnode @node errhand "Write Error Handling" When any of the trackdisk.device write functions encounter a hard error on the destination disk, the offending areas will be formatted, one attempt to rewrite the data will be performed. Failure or any other trackdisk error will cause the particular function to be aborted and a trackdisk error message displayed. @endnode @node inparam "Input Parameters" Below is an ex,*8xplanation of all parameters used by the different functions. Each function will use some of the following parameters. offset Byte sized offset to start the read from. This offset must be block aligned else an error message will be generated. The offset is the same as would normally be placed in the IO_OFFSET field of an IO_REQUEST block to perform a CMD_READ or CMD_WRITE through trackdisk.device. This field can also be entered as a block number instead of a-GGn offset if so desired. To enter as a block the number must be preceded with a hash sign (#). Note that the prefix for hex or decimal still applies as shown in the examples. Once the `OK' gadget has been clicked the block number in the string gadget will be replaced with the calculated byte sized offset for your reference. If this field is set to -1 then the offset will be zero and full disk of 1760 blocks will be used. length Byte sized len.XZgth to read/write. Must be increments of 512 and the minimum allowed is 1 sector. If a number is supplied incorrectly is will be rounded up to the nearest sector. If this length parameter is in a trackdisk reading function, (ie. Trackdisk to DOS or Trackdisk to memory) it can be input as a cylinder length (ie. number of cylinders to read) by inserting a prefix character hash (#) before the cylinder value. When the `OK' gadget is clicked the string /9W gadget will be replaced with the calculated byte sized length for your reference. path/file Path and filename. Data will be read from, or written to this place and name. It can be any valid path and name that you can normally use in the Shell. device The device that the data is to be read from or written to. This device must be a floppy device from DF0 - DF3, and entered as the full device string (eg. DF0:). Full error checking for invalid or il0#legal devices is performed, so it will not accidentally try to write to your hard disk. buffoff Byte sized value into the file to start the write from. This allows you to skip over an amount at the beginning of a file and only write out the remainder. Very useful for skipping over the file header of an executable file. source address Memory address to start the write from. This area can be Fast memory or Chip memory. This source address is incl1=ڻusive. end address Last memory address to write. This end memory address is inclusive. This parameter can be input as a length instead of a destination address by inserting a prefix character plus (+), before the length. the length of course can still be in decimal or hex as long as the format is followed as shown in the examples. When the `OK' gadget is clicked the string gadget will be changed to display the calculated end address for your reference.2U preferred area Your preferred area that you would like the data placed. If this is left blank the area will be chosen for you and the result address will be displayed in the box at the bottom of the window. If your preferred area is not available then an error msg will be generated and displayed in the same box. This memory area will only remain allocated while the program is running and will be freed up when you exit the program completely. TrackDOS3E7i ][ when loaded will spawn its own process and return the command line for you so you can launch another program to examine or modify the memory without needing another CLI window open. start track This parameter is only found in Format Tracks. It is the starting track for the format. Note that this does not mean cylinder. Amiga drives have a total of 160 tracks, starting at 0 and ending at 159. (eg.Cylinder zero holds tracks 0 and 1, cylinder one h4:Dolds tracks 2 and 3 and so on). This track parameter is inclusive to the format end track As above except that this is the last track to format. This track is inclusive to the format. Maximum number for this parameter is of course 159. @endnode @node functions "Functions" @{u}Trackdisk to DOS@{uu} FUNCTION Transfer data from disk sectors to a file. PARAMETERS offset, length, path/file, device. @{u}DOS to Trackdisk@{uu} FUNCTION Transfer data from a file to disk sectors. 5(tPARAMETERS offset, buffoff, length, path/file, device @{u}Memory to DOS@{uu} FUNCTION Transfer data from memory to a file. PARAMETERS source address, end address, path/file @{u}Memory to Trackdisk@{uu} FUNCTION Transfer data from memory to disk sectors PARAMETERS source address, end address, offset, device @{u}DOS to Memory@{uu} FUNCTION Transfer data from a file to memory PARAMETERS length, preferred area, path/file @{u}Trackdisk to Memory@{uu} FUNCTION Transfer data from disk 6D3Usectors to memory PARAMETERS offset, length, preferred area, device @{u}Format Tracks@{uu} FUNCTION To format one or more tracks and optionally initialise the disk. Note that if a disk is initialised then the disk will be blanked and any DOS files that were on the disk will disappear. To format a single track put the same number in start and end tracks. (ie. to format track 90 put that number in both start and end). The disk will NOT BE initialis7yed via the `OK' gadget. If you require the disk to be initialised then the `INIT' gadget must be clicked after the formatting has finished. PARAMETERS start track, end track, device INIT This gadget will initialise or quick format a disk in the drive specified by the device string gadget. The disk of course must be already formatted. @{u}String Search@{uu} FUNCTION To search for a particular string in memory. Many users have requested this function so that8{Z1 they can easily find a lost document in memory and then save it to a file using one of the other functions. When OK is clicked the string will be searched for and if found the Start string will be updated to start at the next address after the find, so that if the one it found is not the correct one you can just click OK again to continue the search. This allows you to write down every possibility and save a range of memory locations. PARAMETERS9 start address, end address, string @endnode @node techi "Techi Info" GenAm Macro Assembler Copyright HiSoft 1985-92 All Rights Reserved - version 3.18 Assembling TrackDOS.s Pass 1 Pass 2 0 errors found 4847 lines assembled info 23476 bytes, Amiga executable relocatable code 79818 bytes used The source file is 86872 bytes. @endnode @node history "Program History" v1.08 By Nic Wilson v2.00 By Zebedee/A51 * Updated the colors to the KS2 color palette * Added a KS2 style int:3 qerface * Improved some code * Added a depth gadget to the windows * Added the RMB_TRAP to the windows * Auto-detects PAL/NTSC and centres windows accordingly WARNING: Not able to test on NTSC machines so I plan to add a much better routine shortly * Still works on KS1.3 machines! Rev.2 Minor update * Changed the pen colors of the instruction text in each window * Added a new menu gadget: Information and Help Rev.3 Minor update * Requesters added making it a KS2 Iutility @endnode @node lastwords "Last Words" It seems that the original TrackDOS was protected because ReSource refused to load it even though it ran fine and crunched fine. It took me quite a while to get round it. Good one Nic. It was so simple but effective! :) @endnode @node apocalypse "The End" Any questions, b*gs, suggestions or spare money, send or write to Ivan Oliver 39 Beckly Court Armada Way Plymouth Devon PL1 1LD ENGLAND @endnode ;<&WVUTSRQPONMLKJIHGFEDCBA@?>=<4E% TrackDOS.docp;=ǖ 1;32mTrackDOS ][ by Zebedee/Area 510m 32m(11-Dec-97, Rev. 3) 32m1997 An Area 51 Production0m 4mDISCLAIMER0m TrackDOS ][ is presented as-is with no warranty. You use this software at your own risk. TrackDOS ][ may not be disassembled, spread in part or reverse engineered in any way whatsoever. All files MUST be distributed in the archive and all icon files (#?.info) must not be changed. You are only permitted to change the icons once installed o;>IW n your system. 4mORIGINS0m For a few years now I've had an excellent program which was written by a chap called Nic Wilson who lives in Australia. This program was TrackDOS. A fine program that saved my ass many times. It's small and compact and does what it was designed for extremely well. Because it was written on a Kickstart 1.3 machine, the program looked odd on Kickstart 2. Anyone who knows the Amiga will know that when the machine changed to KS2, colors 0 ;?22and 1 were swapped around. Plus the gadgets looked outdated. So what I've done is replace the old gadgets with new gadgets, and rewrite some of the code. 4mINTRODUCTION0m TrackDOS ][ is a program that allows easy transfer of data between the three main areas on an Amiga. DOS, memory and trackdisk.device. DOS means the data contained within a file, memory means the data contained anywhere within the memory map and trackdisk.device means data stored on a disk not accessable;@$ with DOS (eg. bootblocks special loader disks etc.). The transfer of data between these three areas is not normally easy or convenient. TrackDOS ][ was written to overcome this. Once the program loads you will see a credits window and a prompt to click the mouse button. This will take you to the main menu, which is a set of nine gadgets as shown below. Trackdisk to DOS DOS to Trackdisk Memory to DOS Memory to Trackdisk DO;AS to Memory Trackdisk to Memory Format Tracks Memory String Search Information and Help The `Information and Help' gadget opens a window that reminds you of the different ways that you can enter data. 4mPROGRAM SUMMARY0m The above are the main functions of TrackDOS ][. When any one of the gadgets are clicked on, another window will open for that particular function and will prompt via string gadgets for inputs. At the bottom ;B&QMof each window you will notice two gadgets `OK' and `EXIT'. The `OK' gadget will attempt to perform the function and `EXIT' will return you to the main menu where you can select another function or quit. There is one exception to the above, that is, in the Format Tracks function there is an extra gadget labeled `INIT' this gadget performs a quick format the same as the `QUICK' parameter of the format command. This will of course blank any disk and all files will b;C[e lost. The INIT gadget only looks for the device and ignores the start and end track string gadgets. If a disk is accidentally `INIT'ed then you can retrieve any files that were lost by using a disk salvager like as the INIT function only rewrites the root block and the bootblock of a disk to make it appear blank. This is what the `QUICK' option in for the format command. Errors or prompts will be shown in the rectangular box at the extreme bottom of each window. Onc;D!{2e the function has been performed the program will stay within that function in case another is required. If not then `EXIT' can be clicked. Every function only supports disk data in the normal range of cylinders 0 to 1759 or tracks 0 to 79. Any attempt to read or write outside this area will generate an error message. This was done as tests have shown that reading or writing to tracks 80 to 83 is only a rumour and no proof has been seen to support the conclusion that this i; EjB s at all possible. This will be changed if conclusive evidence to the contrary is supplied to me. 4mFORMAT FOR INPUT OF PARAMETERS0m All numerical inputs can be given in decimal or hexadecimal. If you supply in hex then the number must be preceded by a dollar sign ($). This format is the same for those paramters that have other prefixes (ie. '#' and '+'). Numbers can be input as binary by preceding with a percent (%) but I do not forsee this being used a great deal. 4mIN; F(,PUT EXAMPLES0m To input the offset 1024 in decimal -----> 1024 To input the offset 2c00 in hex -----> $2C00 To input 40 (decimal) cylinders -----> #40 To input A (hex) cylinders -----> #$a To input 2 (binary) cylinders -----> #%10 To input root block offset (decimal) -----> #880 To input root block offset (hex) -----> #$370 To input a length of 5000 (decmal) -----> 5000 To input a length of ABCD (hex) -----> $ABCD To input desintation address $20000; Gv+ -----> $20000 To input a destination as a length -----> +$200 To input a start cylinder of 10 -----> 10 To input drive zero as a device -----> DF0: To input drive one as a device -----> df1: To input an example path/file -----> DH0:c/name 1mNOTE:0m The above examples show upper case characters, but either upper or lower or both is allowed. 4mWRITING BOOTBLOCKS0m Any data written to the first two sectors of a disk will be automatically c; H\hecksumed, and in this current version this cannot be disabled. 4mWRITE ERROR HANDLING0m When any of the trackdisk.device write functions encounter a hard error on the destination disk, the offending areas will be formatted, one attempt to rewrite the data will be performed. Failure or any other trackdisk error will cause the particular function to be aborted and a trackdisk error message displayed. 4mINPUT PARAMETERS0m Below is an explanation of all parameters u; I`F0sed by the different functions. Each function will use some of the following parameters. offset Byte sized offset to start the read from. This offset must be block aligned else an error message will be generated. The offset is the same as would normally be placed in the IO_OFFSET field of an IO_REQUEST block to perform a CMD_READ or CMD_WRITE through trackdisk.device. This field can also be entered as a block number instead of an offset if so desired. T;J`2lo enter as a block the number must be preceded with a hash sign (#). Note that the prefix for hex or decimal still applies as shown in the examples. Once the `OK' gadget has been clicked the block number in the string gadget will be replaced with the calculated byte sized offset for your reference. If this field is set to -1 then the offset will be zero and full disk of 1760 blocks will be used. length Byte sized length to read/write. Must be i;K cncrements of 512 and the minimum allowed is 1 sector. If a number is supplied incorrectly is will be rounded up to the nearest sector. If this length parameter is in a trackdisk reading function, (ie. Trackdisk to DOS or Trackdisk to memory) it can be input as a cylinder length (ie. number of cylinders to read) by inserting a prefix character hash (#) before the cylinder value. When the `OK' gadget is clicked the string gadget will be replaced ;L@Pwith the calculated byte sized length for your reference. path/file Path and filename. Data will be read from, or written to this place and name. It can be any valid path and name that you can normally use in the Shell. device The device that the data is to be read from or written to. This device must be a floppy device from DF0 - DF3, and entered as the full device string (eg. DF0:). Full error checking for invalid or illegal devices is performed, s;Mio it will not accidentally try to write to your hard disk. buffoff Byte sized value into the file to start the write from. This allows you to skip over an amount at the beginning of a file and only write out the remainder. Very useful for skipping over the file header of an executable file. source address Memory address to start the write from. This area can be Fast memory or Chip memory. This source address is inclusive. end address Last mem;N~ory address to write. This end memory address is inclusive. This parameter can be input as a length instead of a destination address by inserting a prefix character plus (+), before the length. the length of course can still be in decimal or hex as long as the format is followed as shown in the examples. When the `OK' gadget is clicked the string gadget will be changed to display the calculated end address for your reference. preferred area Your preferr;O!sed area that you would like the data placed. If this is left blank the area will be chosen for you and the result address will be displayed in the box at the bottom of the window. If your preferred area is not available then an error msg will be generated and displayed in the same box. This memory area will only remain allocated while the program is running and will be freed up when you exit the program completely. TrackDOS ][ when loaded will spawn it;Pqs own process and return the command line for you so you can launch another program to examine or modify the memory without needing another CLI window open. start track This parameter is only found in Format Tracks. It is the starting track for the format. Note that this does not mean cylinder. Amiga drives have a total of 160 tracks, starting at 0 and ending at 159. (eg.Cylinder zero holds tracks 0 and 1, cylinder one holds tracks 2 and 3 and so on;Q/). This track parameter is inclusive to the format end track As above except that this is the last track to format. This track is inclusive to the format. Maximum number for this parameter is of course 159. 4mFUNCTIONS0m 3mTrackdisk to DOS 0m FUNCTION Transfer data from disk sectors to a file. PARAMETERS offset, length, path/file, device. 3mDOS to Trackdisk 0m FUNCTION Transfer data from a file to disk sectors. PARAMETERS offset, buffoff, length, path/file, devic;R놊e 3mMemory to DOS 0m FUNCTION Transfer data from memory to a file. PARAMETERS source address, end address, path/file 3mMemory to Trackdisk 0m FUNCTION Transfer data from memory to disk sectors PARAMETERS source address, end address, offset, device 3mDOS to Memory 0m FUNCTION Transfer data from a file to memory PARAMETERS length, preferred area, path/file 3mTrackdisk to Memory 0m FUNCTION Transfer data from disk sectors to memory PARAMETERS offset, length, preferred area,;SVIb device 3mFormat Tracks 0m FUNCTION To format one or more tracks and optionally initialise the disk. Note that if a disk is initialised then the disk will be blanked and any DOS files that were on the disk will disappear. To format a single track put the same number in start and end tracks. (ie. to format track 90 put that number in both start and end). The disk will NOT BE initialised via the `OK' gadget. If you require the disk to be init;TCialised then the `INIT' gadget must be clicked after the formatting has finished. PARAMETERS start track, end track, device INIT This gadget will initialise or quick format a disk in the drive specified by the device string gadget. The disk of course must be already formatted. 3mString Search 0m FUNCTION To search for a particular string in memory. Many users have requested this function so that they can easily find a lost document in memory and then save ;Ue it to a file using one of the other functions. When OK is clicked the string will be searched for and if found the Start string will be updated to start at the next address after the find, so that if the one it found is not the correct one you can just click OK again to continue the search. This allows you to write down every possibility and save a range of memory locations. PARAMETERS start address, end address, string 4mTECHI INFO0m GenAm Macr;V<6(o Assembler Copyright HiSoft 1985-92 All Rights Reserved - version 3.18 Assembling TrackDOS.s Pass 1 Pass 2 0 errors found 4847 lines assembled info 23476 bytes, Amiga executable relocatable code 79818 bytes used The source file is 86872 bytes. 4mPROGRAM HISTORY0m v1.08 By Nic Wilson v2.00 By Zebedee/A51 * Updated the colors to the KS2 color palette * Added a KS2 style interface * Improved some code * Added a depth gadget to the windows * Added the RMB_TRAP to the wi;W[ndows * Auto-detects PAL/NTSC and centres windows accordingly WARNING: Not able to test on NTSC machines so I plan to add a much better routine shortly * Still works on KS1.3 machines! Rev.2 Minor update * Changed the pen colors of the instruction text in each window * Added a new menu gadget: Information and Help Rev.3 Minor update * Requesters added making it a KS2 utility 4mLAST WORDS0m It seems that the original TrackDOS was protected because ReSource refuse;8د d to load it even though it ran fine and crunched fine. It took me quite a while to get round it. Good one Nic. It was so simple but effective! :) 4mTHE END0m Any questions, b*gs, suggestions or spare money, send or write to Ivan Oliver 39 Beckly Court Armada Way Plymouth Devon PL1 1LD ENGLANDXY!b%]\[ZYE% BWrite.infopXZ"Ds59xxx v'x GeHx x\D9? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" UX[=8pU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU.X\x); EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUP9poUS UR``]SUU@UUUUUW @@@@@ @T`@`@ @@5UUUUUV X] ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO XA 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU% Icon by Martin Huttenloher ^_'ra`_E% BWrite.docp^`w 32;1mBootKit v1.00 (05-Dec-97) 32;1mBy Zebedee/Area 51 0;32m1997 An Area 51 Production 3m(Requires Kickstart 36) 0m 1;4mDisclaimer0m I, nor any other member of Area 51 may be held responsible for the damage to any hardware or software caused by the direct or indirect (mis)use of this program. You use it at your own risk! Using this program automatically states you are in agreement with this. 1;4mDistribution Rules0m None of the files ment^alP#ioned below may be distributed in part, reverse engineered, edited or sold for profit... BootKit 6380 Main executable BootKit.info 822 Workbench icon BootKit.doc ????? This file you are reading BootKit.doc.info 1095 Workbench icon This archive and it's contents are distributed as Postcard Ware. If you like and/or use BootKit then a postcard would be appreciated. 1;4mIntroduction0m I wrote BootKit because I wanted a small program that would allow me to make ^S'NuH MH$vJgR`"9@,y This program will take a bootblock file which you have to create in DevPac, and install it onto the boot sectors of the disk in df0:. Make sure the first three lines of your program start with... dc.b 'DOS',d dc.l c db&Җc.l r Where d ranges from 0 to 5 for the type of bootblock you want to install. The c is the checksum which is calculated by the program. The r is the root block pointer which is best left at 880 ($370) for future compatability. An example would be: dc.b 'DOS',1 ;FFS dc.l 0 dc.l $370 See the file BWrite.guide for source code to a couple example bootblocks. Snail: 39 Beckly Court, Armada Way, Plymouth, Devon, PL1 1LD, ENGLAND DOSjkę=lk6E%BWriteGUI.infopjlf!6xHx6?UUUUU\UUUUU\}U\wU\w}\}w\wu\ww\}}}\UUUUU\UUUUU\uwUU\uWUU\u}\uww\w\wu\uw}\UUUUU\UUUUU\UUUUUPUUUUUPUUPUUPAAPDPDPDPAAPUUUUUPUUUUUPDUUUPDUQUUPDAAP@DP@EPDEPDEAPUUUUUPUUUUUP6uUUUUUPUjN5UUUUP_]}PUww}]PWwuPWw}uPWW]PUwW]P_}PUUUUUPUUUUUPUUUuUUU_UU]}_U]}]wU}__UUUUUUPUUUUUPUUUUU\UUUUU\PAD\EPAE\DPE\ATA\DTQQ\ETQPU\PU\UUUUU\UUUUU\UUT\UUTT\PAT\TUD\@@UD\EDTD\P@UUUUUU\UUUUU\m n7vutsrqponE% BWriteGUIpmor .,xN(@JfA\NA\N##,xCp$N#g,xCpN#"g,yAN4#dg @#Vh,yC0E@N yd h2CprN( yh,xN yh,xN @*@/(.("@,xN _p0(&| gV|@gP|g`,y ydN,x"y"Nb,x"yNbJg,x"yNpNu<g <gL`\ 9R<op#C0@,y yd h2CprN(`#mpc,y""9$<N#g,y""9$<n&<$Ng,y""9NAn fxA(<mV<nN DfN hOSfDa&9<f ATa@` A|a4`VAp#2<ИdR@Qr#,xN#^CNNC 9rA&NDJfC#|N3|#|(#|$#|,,xN8C9)3|N8,9"C9)3| #|$N8CNNCN>Aa.NuA`A`A `A0`Axa`(#mq]k;,,y yd h2C prN(,yp @C$@&@N<g4<g,xCpN,@g N"gE$ vN"N,xNb` 8DR^h , nxvLX^hpx $.6B`p@fr "(2JmrAnTintuition.librarydos.librarytrackdisk.device $7 `0BWriteGUI v1.00Code by Zebedee/Area 51 (04-Dec-97),? m X m C >RAM:Bootblock.exe  l lms&4l " l l2l Nb r     Drive:File:Writei DF0:-4 BWriteGUI v1.00 (04-Dec-97) 1997 Disk write protected File not found Error reading file mtِf Drive not connected Invalid DOS specifier Invalid DOS header, must be "DOS" Bootblock written successfully! File is not executable ERROR: Requires Kickstart v36 ,>Bjz*FJjn,(&4Quit BWriteGUI...Are you sure?Yes|NO! mutopaz.font.mv%m DLwxkzyxGE%BWrite.doc.infopwy@.lLAxx{Hx ;`xHApaaaaaaaaaUUUUUUTUUUUUUTUU[UU]dUU[UU] dUU[UU] dUU[2dUU]2ddUU[2dUU]2ddUU[UU]dwzQhiUU[UU]dUU[UU]dUU[UU]dUUPUUUUUUTAs```aPATC`aUQTC`aDC`aQEC`aDUC`aQEC``UUUUUUTUUUUUUTT_T?U]]}~~>_~:_~n:_~~:ww}_~n:_~:_?z@UUUUUUT C:PPMore{ |6~}|E% DenkorGUIp{}Y  ,xN*@Jg8CRpN,@"<rt- A&B(<Nv"N,xNbpNuA\NA\N#Ndos.libraryDenkorGUI_102 \b3Cpa#tgTCp$a#xgCpan#|g aB# ga4#g,z0|N#g @p0( rxAC F#@p0(rA#@,z0|C $N# Jg @#V#2NaA a* z,xN z,xN"@*i.),xNp0-&| g{~|@g|gg@`,zF0|"zN,z6 z N"yaD"y a<"zaL"zaF"z a@Jg,x"yNpNu,x <,rN:,x <,N.,xN,xNb<n`< g^< g< gZ< g`Ca <gB`,zp @$@&@Npr-~aNu,zl"ztN"zl N09R@|o0<3C@0@pr~Aa`JygAa3ApG~`Aa3ApC~ra|`FA afCaN`2<fp}29A3g`<f" <29A3g`<{8f" <29A3g`<f" <29A3g`<f <29A3gn`r<f <29A3gJ`N<f <29A3g&`*<fB <29A3g`A`Ar~a&A |2: a A ba `ނda aA0BAHANu aA0BAHANuA aC09@0@ Ca<g,xN#C ,NC Dp09rAuNDJfb#|,9A ./r"ap"A aPza>JfA ^/r"9aH"A 4a(a,9{A /r"a&"A azaJ,xC 3|N8<g<g<g<g<g<g<g<gȰ<g<gְ<"gJf yf(,9A |/r"a"A VafaJfR PfaA da<,xC NC N>a`A `A a`,9,C #|3E#y (#|,$#F,,xN8~a,9zaJf,< y "yfQ~ Nu,x,: nC J3| #|$N8 y H@"<+49g@g@g@g@g@{1.g@g@g@QLNu,< y "y"QNuA`LA`FA`@A `:A`4A`.A`(A >`"A T`A `A d`A` A`A naa`r z6( |1g``a Aa~`R,z "z pNpr~AahpCr~AaZz|} r~AaHFQ3p r ~Aa* <r ~ Aa,z ~ z CVprNa `Ra`>a4Av"aHNua(Apva<`8aA!v&a.`a Ava `,z $A" $<N#Nu,z ": $N,zC" NR(@g"tvxNJg&" NNu$VER: DenkorGUI {Mv1.03 (22-Feb-98)dos.libraryintuition.librarygraphics.librarytrackdisk.deviceCON:0/11/640/100/DenkorGUI Error.../WAIT/CLOSEUnable to allocate enough memory! Unable to lock default public screen! Unable to open the window! Requires Kickstart v36 Denkor v1.03Parkbench Screenn o de fg1j`l } N DF0:V OFF V ON 01DENKRYPTINFORMATION Quit Den{Y,kor...Are you sure?Yes|NO! "Information...Denkor v1.03 (22-Feb-98) By Zebedee/A51 1998 An Area 51 ProductionOk : F uDenkrypt...Please insert a disk in drive DFx: to denkryptProceed|Cancel  topaz.font z       $    P    |    {         , 6  X@ 6  p  zp       5 55 0< o oLo xh{ Ox Denkor v1.03 (22-Feb-98) Welcome back O'Master! Reading : Track 00 Writing : Track 00 Verifying : Track 00 Denkrypt : Track 00 * Disk has been denkrypted *Read error! Verify error! Drive not connected! Unknown error No sector header present Invalid sector header Invalid sector ID Incorrect header checksum Incorrect sector checksum Illegal sector heade{ :Ebr Disk write protected! Too few sectors No disk in drive! Drive already in use! Undefined disk access error! Denkrypt: Are you sure ? Denkryption process aborted!Write verify enabled Write verify disabled Mask = 000 l(<JX{ nNVp|&8Zj.8V`z<dx|6JPd  . 2 6 $ 6 P b |  , > X j  (,D`dpœ!6E%@DenkorGUI.infopRe6xPx6?UUUUU\UUUUU\UuU\UUuU\UwU\U}U\U}U\U}U\UwU\UUUUU\UUUUU\UU]U\UUU]U\}}www|wu\wwW\}}\UUUUU\UUUUU\UUUUUPUUUUUPUUUPUUUPU@UPUEUPUAUPUTUPUAUPUUUUUPUUUUUPUUUEUPUUUEUPAADDADDPDDQPDAPUUUUUPUUUUUP6uUUUUUPUN5UUUUP_]}uPUww}PWwPWw}PWW]PUwW]P_}PUUUUUPUUUUUPUUUuUUU_UU]}_U]}]wU}__UUUUUUPUUUUUPUUUUU\UUUUU\PAE\EPA\DPE\ATA\DTQPE\ETQPE\P\UUUUU\UUUUU\UUT\UUTT\PAT\TUD\@@UD\EDTD\P@UUUUUU\UUUUU\͝%E%@ DenkorGUI.gdepBI\-@database denkorgui.guide @(c) "1998 Area 51" @master dh2:temp/development/denkor/denkor/denkorgui.gde @font topaz.font 8 @$VER: DenkorGUI.gde v1.03 (22-Feb-98) @node main "DenkorGUI v1.03 (Main Menu)" Program : DenkorGUI Version : 1.03 Program date : 11-Dec-97 Release date : 22-Feb-98 Language : Assembler Program type : Utility Purpose : Encrypts and decrypts floppy disks (Only DF0: to DF3:) @{fg highlight}@{"Disclaimer " link disclaimer}@{fg text} You can't toW*uch me! @{fg highlight}@{"Distribution" link distribution}@{fg text} What external files are required? @{fg highlight}@{"Introduction" link Introduction}@{fg text} Why on earth did I write this...? @{fg highlight}@{"Requirements" link requirements}@{fg text} What do I need to use it? @{fg highlight}@{"Installation" link installation}@{fg text} Where does this file go? @{fg highlight}@{"Usage " link usage}@{fg text} How the hell do I use it??? @{fg highlight}@{"Err Messages" link errors}@{fg text} What does that error mean? @{fg highlight}@{"Bugs " link bugs}@{fg text} Maybe...! @{fg highlight}@{"History " link history}@{fg text} History in the making... :] @{fg highlight}@{"Contact Addy" link contactaddy}@{fg text} Where to send death threats! @{fg highlight}@{"Thanks " link thanks}@{fg text} People I'd like to thank @{fg highlight}@{"Greets " link greets}@{fg text} Hello fans @{fg highlight}@{"The Future " link future}@{fg text} What) may the future hold...? @{fg highlight}@{"Last Notes " link lastnotes}@{fg text} Any other crap I want to say! @endnode @node disclaimer "DenkorGUI v1.03 (Disclaimer)" I nor any other member of Area 51 may be held responsible for the (mis)use of this program. The program is released "as-is". If you end up melting your kitchen utensils then it's your fault. This program has gone through thorough testing. @endnode @node distribution "DenkorGUI v1.03 (Distribution)" If you decide to spread DenkorGUI (which I hope you will!) then the files listed below @{b}MUST@{ub} be distributed in the same archive: File_ID.diz Archive ID file DenkorGUI/DenkorGUI Main executable file DenkorGUI/DenkorGUI.info Workbench icon DenkorGUI/DenkorGUI.gde This file DenkorGUI/DenkorGUI.gde.info Workbench icon None of the above mentioned files may be modified, disassembled or spread in part. It may, however, be distributed anywhere as long as the entire archivekH and all files mentioned above are also distributed in whole. @{b}NOTICE:@{ub} Malander PD and Five Star PD are NOT to distribute ANY VERSION of DenkorGUI under any circumstances. If you obtained this copy from either of them, please write to me telling me where you saw it advertised and I'll take the appropriate action! @endnode @node introduction "DenkorGUI v1.03 (Introduction)" A looooooong time ago (early '96?) I was asked if I had a disk encryption utility in my va,st collection of software. Not having one I decided to write one myself but for some reason never got round to it. Then, about 8 months later I remembered and started writing it. The first version was very crude and dodgy. It was shell only, was large, code was all over the place and behaved in a dodgy way with almost no error handling routines! Over the past couple months when I've had the time, I've slowly improved Denkor to the version you have now, DenkorGUI. @end6node @node requirements "DenkorGUI v1.03 (Requirements)" Kickstart version 37 (KS2) or better! If you try loading DenkorGUI on pre-Kickstart 2 machines then it won't crash like so many other badly written programs, but it will quit and give you a nice little error message! ;) @endnode @node usage "DenkorGUI v1.03 (Usage)" DenkorGUI auto-detatches from the shell process so there's no need to use RUN for multitasking. When DenkorGUI loads, it will open a window: _______ VF_________________ |@{"[]" link closegad}|DenkorGUI v1.03 ||| || | @{"DF?:" link drive} @{"V ???" link verify} @{"00000000" link mask} | | @{"DENKRYPT" link startit} @{"INFORMATION" link info} | |________________________| |@{"XXXXXXXXXXXXXXXXXXXXXXX" link messages}| @endnode @node drive "DenkorGUI v1.03 (Usage) Drive Unit" Click on this gadget and it will cycle through "DF0:" to "DF3:" which is the drive t qahat will be denkrypted. @endnode @node verify "DenkorGUI v1.03 (Usage) Write Verify" This gadget lets you decide whether you want Denkor to verify the data on the disk after writing each track. @endnode @node closegad "DenkorGUI v1.03 (Usage) Close Gadget" Click here to quit. You will be asked if you want to confirm this action. @endnode @node mask "DenkorGUI v1.03 (Usage) Denkryption Mask" This is the mask which is used to denkrypt the data. @endnode @node startit "DenkorGUI v1. 9`k03 (Usage) Denkrypt" This starts the denkryption process. A requester will ask you to confirm this action. @endnode @node info "DenkorGUI v1.03 (Usage) Information" This will open a requester giving you some information about the program. @endnode @node messages "DenkorGUI v1.03 (Usage) Program Messages" DenkorGUI will give you messages in this section of the window. @endnode @node installation "DenkorGUI v1.03 (Installation)" Just copy the four files listed below somewhere w Nhere they can be easily accessed... DenkorGUI \ These files can go wherever you want to DenkorGUI.info \ put them, but it may be a good idea to put DenkorGUI.gde / them in a place where a PATH has been DenkorGUI.gde.info / set up in your "STARTUP-SEQUENCE" You may need to change the icon default tool from Workbench for the documentation. To do this, click on the doc icon once and press rcommand and I. Then all you need to do is ty Ւpe in the new default tool and press return. I have the default tool set to "C:PPMore" as this is what I use. @endnode @node errors "DenkorGUI v1.03 (Error Messages)" All of the error messages given to you by DenkorGUI are really self explanatory. For example, if you try and access a drive that isn't connected then you'll be told in the message bar. @endnode @node bugs "DenkorGUI v1.03 (Bugs)" As far as I know there are no more bugs in DenkorGUI. I've done asü much thorough testing as I can on as many Kickstart revisions as possible and I've not come across any more bugs lately. But should you discover some weird and maybe not so wonderful bug that I've missed, a bug report will be very welcome so I can remove it. In sending me a bug report, please give me as much information as possible like the behaviour, the guru number (if you get one), your system set-up and any other information you think may be helpful. @endnode @node umJhistory "DenkorGUI v1.03 (History)" @{b}v1.00@{ub} @{i}First version @{ui} * Very very buggy * Shell only @{b}v1.01@{ub} @{i}Major improvements @{ui} * A new GUI added * Error handling routines added @{b}v1.02@{ub} @{i}Bug fix @{ui} * A couple error routines screwed up - now fixed @{b}v1.03@{ub} @{i}Major improvements @{ui} * Added the final error handling routines I missed * File size cut from 22Kb to 5Kb by allocating memory instead of using "dcb.b 1126p 4,0" in the program * Version string added * Now automatically tells the system that the format of the disk has changed so it can update it's info on it Previous versions are not available. @endnode @node thanks "DenkorGUI v1.03 (Thanks)" Here are a few people I'd like to thank... Zebedee/A51 (Me!) For writing DenkorGUI and testing it! ;) TBSNC For bug testing on KS1.3 and KS2.04 Kei/CRN For asking me for a disk encryption utility. Without that request this program would not exist! @endnode @node contactaddy "DenkorGUI v1.03 (Contact Address)" If you have any ideas for improvements, want to report a bug, want to send me a postcard, want to register or just want to trade, then I can be contacted at: @{i}Snail: @{ui} 6 Bridgefield Ottery St Mary East Devon EX11 1HL This is my parent's address as I'm not sure how long I'll be at the address I'm at now so don't panic if you don't hear from me within a week. @endnode @node greets "DenkoPd=dUU["dUU]2LdUU[UU]dUU[UU]dUU[UU]dUU[UU]dUUPUUUUUUTAsn}|uUUUUW``]}`|``|Kp`|m```6``UUUUUUTUUUUUUT?TT` jOcc xcOc2?H@UUUUUUT C:PPGuide;E%@ BootKit.infop M9x ;px vhLx NO`H 4/ fBlR0B L@Nu0B/N+JXOfBlRp`0B/N+4|FXOoBlRp`ʴ|9nB0`B7JlRfB,lp,l0BЈ@lRlR lRfp`BlRp,l`NUH  ,B+@+lF+lJ oBP oBHmHmHmN:40,lO f$ -0BЈ@0l䰈m N)L@N]Nu)mB)mF)mJ`NUH lt"h2,lhpN ,| lt"h2,lhN lƘ"lt"i2,lhN ,JfHHyHzHyHy[/,tNVHyHzHyHy[/,ktN8O(L@N]NuHmNHyHmHyHy[/,tN Of$HyHzJHyHy[/,tNO`"HyHz*HyHy[/,tNO`| HEXASCNU`H>| lp"lt"i2,lhNJlfHyHy#HlƜN*@O `*0,lf ll6<` AƜ#0SClnBlt`l|6HyPBHm`N)zO `t0H0EЈAƜ00CC/N<0H0EЈAJ0\OgA`0A`0pp<9@TC0E RrN8*f0RCA RE| mJFgT0H"p lt"h2,lhNx`pA`J0@g& lt"h2,lh(SpN lt"h2,lhpN`$ lt"h2,lhpN lt"h2,lhpNp0DC"lt"i2,lhNRD|Gm0H" < lt"h2,lhNx`0H0DЈAJ0g& lt"h2,lhpN lt"h2,lhpN`$ lt"h2,lhpN lt"h2p,lhNp2H0D҈AƜ҈ A"lt"i2,lhNRD| mv`z lt"h2,lhpN lt"h2,lhpNHyGHm0H @HhHy/,tNHy 0HAƜЈ/0H @HhHy/,tNO(RB|mNJg lp,lhNHyBHlN'p lƘ"lt"i2,lhNBJBFBBO L@|jv^N]NuNUH ,x lt"h2,lhN ,| lt"h2,lhNBNv0l/HzHmN,HyHmHyHy/,tN0l/HzoHmN+HyHmHyHy[/,tNOD0l/Hz>HmN+HyHmHyHy/,tNO L@N]Nu%d %d%d H0"$oJJgVHlJHlFHlBN6 ,FrN40CЈ4O g1`0p0A/al\O`HyHy / N%O LD NuH 2$o&o $/$"/ /"j2,lhNf / N6XO`  K"j2,lhNLLNuH "$o/@  d0`7 * DMd A0`A7LDNuH0"$op/N$nJXOgp*/N$\JXOfpLD Nup/N$tp*/N$f@ FPOb *Fcp` 9bp0` p7 *9bp*0`p*7HHHHЁ op`jNUH pCv,ldN)@pCv,ldN)@hpCu,ldN)@pCt,ldN)@lf HzsNXO <A,lN| -g HzoNXO,&HH0)@x,'HH0)@|,(HH0)@ƀ,)HH0)@Ƅ,*HH0)@ƈ,+HH0)@ƌ,,HH0)@Ɛ,-HH;0)@ƔN"TN4NJg Hz\NXONRJg HzhNXONJg HzvNXONrJgvAT"H lt h.,lN)@f Hz`NXOA\"HA셦,lN)@f HzXNpXO+JAT$H"l l,lN$mJ@f HzCNDXO`AL)H"l lt,lNN"ACJp Q0lHU"0lFW A"H lt h2,lNA)Hp?<HzN)@ƘN0\O`,N`2+J"ltA,lN2$m`NN` J@gS@gS@gL@N]Nuintuition.librarygraphics.librarygadtools.librarydiskfont.libraryCouldn't open diskfont library!Preferenc&es must be set to 80-chars to run this program!PENCOLORS= PENCOLORS= PENCOLORS= PENCOLORS= PENCOLORS= PENCOLORS= PENCOLORS= PENCOLORS= Couldn't open help requester!Couldn't open search requester!Couldn't open backdrop!Couldn't get visual info!Couldn't create menus!Couldn't layout menus!topaz.fontH JPg ",P,lTNBPBlBlBlJ,XfpL@Nu/$<AX",lTN$)@PfNp`H0vt",P,lTNL H0vt",P,lTNL $JgL9| "<N..9@ "< ŮvN.F9@JlgRl`9|HlXHl˨N/pPO`Tp`NH"$o Jg/ NXOJPg ",P,lTNJƘg "lƘ,lhNJtg lt,lNNNJtgN~NZJg$Jg l,lN|Jg l,lNJg "l,ldNbJhg "lh,ldNbJlg "ll,ldNbJg "l,ldNbJgHydN1L@NuH  lp0(&$g&0lHU"0lFW A"H lt h2,lN gNgfJlg)BHyNN XO`N BJBFBBBNXOL@NuH 0lHU"0lFW A"H lt h2,lN l h"$(Jo0lm 9BNZ`NAJCp QL@NuH tJ,Xg/tAX",lTN$$JfNzNL@Nu",lTNN<f NBN `Na`HJlgB < lt,lN@p lt,lN@pb lt,lN@ < lt,lN@`@ < lt,lNLp lt,lNLpb lt,lNL < lt,l t@NL < lt,lN@L@NuH<0l"$0l$&0l&(0l(*Hl˨HlXN) ,| lt"h2,lhNH0 /ЅS& ЄS$"/  lt"h2,lhNL / "ltA,lN"$_POL@,RG`~8,JlglN`lf0l2CR<`<<|mH v0Hr $",P,lTNL H &<@A Ɯ$",P,lTNL t`d? ?/ 0BCƜ/NJO fF0C <0Bo0C ` <0B/Hy0BC/N;|9|O RBFmJmg"9DN6N lt,lNpLLN]NulNGfNN lt,lNp`NUzH8"AƜ$H+B~$<AX",lTN$-~$Jf NLDN]NuHy:Hy-HmN| B-H zvtrpC| lt,lNL zHmN\B-HmHlXHzHmNH zHmN&XO&A$"-z,lTNL zH zvN jBNO o/*HlXNPON@N^Hz'N@XOLDNuUsage: NewZAP [filename]NUvHr <ZA,lNVHy0BHmvN b;|z-HH mr2(Ё-HHЁ;@|;| x9f;|x||~+|p+|A쇒+HA+HA+H;|Hl̬HyHlN(JOg pL@N]NuAv,lN4)@tfHlN`pXO`p`H lt,lNHlN>XOL@NuHHypBHlN h9|^9|9|9|}A)H 9|A\)H@HlHyHlN~JOgpL@Nup`HHl\NXOL@NuHHypBHlN 9|{9|&9|9|eA^)H9|AΈ)HHlDHyHlz(4NJOgpL@Nup`HHlΈNFXOL@NuNUH 2Hy0BHmN l;l;l;l;l+|@+|+l+l;|A,lN4&@JO f pLLN]Nu+J̕"K l,,lN2$m kV,ldN kV,ldN$@Jg@$* BJh&g(A0"Jp QB>A0"H lt hV,ldN"J,ldN` K,lNp`nH"$o Jlδf/$/" ,lTN$LDNu)Jζ ,ζ`H "$o$/JlδfH0&$ "/,lTNL LDNu// /,ζN :լζ O `H0$/&/Jlδf H0&/$"/,lTNL L@ NuJgp`լζ ,ζ`̺HJlδf "/,lTNL@NuNU|H<2*-$m9mδHylB/ NHy/N$Of pLL/-NbXO`6mIaudio.device9|0B,2|K39|49|69|89|:| <|=A)H>9|BA)HDBHBLNu /A0HHNu /A0HHNu /`czb NuH 0&oA$H`, Rd RRp`p// N POg:Rf Rd RR pp `Hy / N POgpL Nup` oL`Qj /NuL"/ gc` QjNuQjNuLg pVfpNucpNupNuapCŰEŰf2<Ykt"Q)O,x)NdH瀀.)gKN`B_NsC J0 Nh)@Tf .<N`NPONudos.libraryINuH2&o"<0,Ŧ/H"Ё",ldN:)@f/.<,ldN..lNu lBh l1| l1| l ,ĐP)@ l MANX,ldN$@Jg2/ /// N)| lXP l PO `JA\,ldNA\,ldN)@ lJ$g l h$",lTN/,/ NHPO)l,lTN l ,lTN l!@Jg /$<A2",lTN$ l!@ /,/,NPO/NPXOLLNu*H<2(/ */$&o( DJg D (& C ($@`$lŨHHЅT)@r ,,ln4dN:)@fLLlAd<0R`f 0f Tl,-U`<0TlAd<0R``L@%g@3g@ gS@g[@g[@gS@gS@gW@g4* XOf6 Rc Hy /*HH/NO $ j%Hfv` *0@gFg RRA 4A)HRg < gex` %Rp`Pg(Jg//**HH/NఅO fNA f$%jp`A)HA $ j%H RRp`A %j$p`H!vs $o fFA$HJj g(0* @fHy/ NRPOfpLNuAŦep`Hy/ N"PO`/?DJjDRDJjD Da>JDgD8"JNu/?DJjDRDJjDa `/a "JNu/a"JNuHAJAfHA??B@H@"H@20BAHANuHA?/&"BAHAH@B@4<ЀӁbR@Q&4NuH $o tA*HH/N8JXOgt!`Ag%|HyN%@XOf%|A%H4<A p02H0%j$LNuH 2$/$l` Ag&J$R fLLNu g&`)R *P"J,ldN.`H2$l`&R *P"J,ldN.$K fB""LLNuH "$/JfpLDNur P,ldN:$@Jfp`A)H$%B)J P`L fNu o JfSH NuH "$/ "Ё$@Jm 0lŦoJf)|pLDNu "Ё l"0,lTN(Jgp`p`H0"$/NZ "Ё$@Jm 0lŦoJf)|pLD NuH0 /$S&$/ ",lTNL &f,lTN|)@p`H0vt",lTNL `H"$o " ,lTNJf,lTN|)@pLDNup`H02$/&oN "Ё$@Jm 0lŦoJf)|pLL Nu0*@f )|p`*gH0v#ڳt",lTNL H0&/($ ",lTNL &f,lTN|)@p` `H "<p,ldN$ gJf L@NuNp`HH0vA4$//,lTN"$&,lTNL HyNXOL@Nu^C Jg l hN l)P`Jg lN//NXONuH0&/Jg0t` /NXOR0lŦn0,ŦH"Ё"l,ldN.Jg lNJŬg ",Ŭ,lTNJg l Jg "l,ldNbJ g "l ,ldNbJg "l,ldNbJg "l,ldNbH,x.)gKN`B_Ns*_Jf,Jg$ ,"l,ldN. ,X"l$pU,ldN.`,ldN|"l,ldN"lT,ldNb .lNuL@ NuNH "$/ "Ё$@Jm 0lŦoJf)|pLDNu0*@f ",lTNBp` o XB!HNu/@NewZAP v3.31 (27-Jan-98)PENCOLORS= 30123201 [default=30123210]2`1234567890-=\0qwertyuiop[]123asdfghjkl;'456zxcvbnm,./.789  ~!@#$%^&*()_+|0QWERTYUIOP{}123ASDFGHJKL:"456ZXCVBNM<>?.789  coK%ipLjM@G5X( G5 8 x+++)hR4 hVNhR+.+6+?+E+IhVVF hVjB hV&I~SBhVE(hFG+N+\+q++++++:#S+S~pKSKSFdZ RxR'93\(FC(FPh?+U'+7+++++++++,,, ,,,,,,!,#,*,8,:,J,M,Q(ߤ,_,g,o,,,NKVMP > >5 *@n1 l$( H+  p 4 )SwsQ H  +  \  H`l | <-  t ?? ?0p*p00p ??p0   p ?? ? ?? ????>|~<@`pp`@@`p+ص<p`@?? ??      (    `  #p>qp((/`` !"QJ@GS&C $J ("(QA@H!i!Kr(/ ʀN QEQGqH<8H"qqqaqhHp @O3 /qj' K&/"%"  @,'"Ȁ"l"(R! @8"( aF (∊(hAA:I"(  ("h((>+ @G0Ȉ(&CJ"("%*P@蠋""h"("" `" 0BY-aAI"%y瞃-fyB"(((i  "(F $J"(I"""6@,"*e*Q  B(K(HAA)b(( "h(Hǀ f@qϜ q r/"(!">ir(</!<π@ࢊ(g<8<rƚi8yqqqq@  $*06<BHNT.DJPV\bhntz "(.4:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FLRX^djp/Av| $*06<BHNTZ`flrfx@~ &,2@8>DFORMtILBMBMHDx,xCMAP AgGRAB<]CAMGBODY ? 0? `0a>00 `33 0 0 >v ` 03>>3 0< 333` 033033>3000 ?3k?` 03030030 0 033c0 `303003 003c ` 0>00> 0` @???????????????????????1=Y???????????????????????????????????????????????????2d:????????????????????????????????????????????????????3+???????????????????????????????????????????????????4먑ʵ???????????????????????????????????????????????????5mX??????????????????????????????   ?? 3 3 00 03>>>0> 0>>0  03 30 33 <333< 30300?3 ?0 30 03330 ?336 Hň0 3 300 30 03330 0 0030 ?30 ?  ? !03 0 3 0>>0> 0? <33 3330 33<3 3  033 33?0 30?03 3?` 033 3300 30 0` 03 30 y=` ??330 0` ?3 y=`{ y=0` y`x x=0` 7 y`y ?翁0` y}`{ <<0` y=`{ y<~<0` ?=` ?<<0` ` 0` ? @Ǐx l8͘0 f͘`?| >|Çlـ   Ǐ< | 7߿~``3<ٳ0ٞf߾6c `6``3f̓n fl`08o v3 x`?f͹o~<~>6c `1`0 3f͘6m fݛl3n3o ~3~3<ٳfoٌ|3fFORM\ILBMBMHD},CMAP AgGRAB>CAMGBODY ```````<x0xCa C`a`xy}<9Mx0a Ca`4?<<x{=<y0a 0 <C Ca ! yC a !0 `4y<<xx==ǀ={y0=<?xx`<x<```````?`y``0``y `̀``0;W!e`̀1 |πǘ><Ǐ<>1g<`ǘ><1 fy6lf6lٳ`6l`ٶ`<Yo>gٷflٰ6l߳oٰ~` ϰ~6 f͛6 ` ϰf6lfylٶfٰ6g3l``͛6 `6 fy<>|ǀ>0g3<gc3g<`y<``` 3 ` 00 6`3`6< Zs`0 `00|y>30gf03|7πy1`0f͛f6lxٳlf`00ffm36l30 ٙ͘6`5`0f͛f6l0ٳgf003ff 36l30 ٙ65`03f͛fl0ٳ`f`>30ff 36l30 ̀ ٙ66`0fx<30ٞ> yf6 ύ6```f` p ```f` ` ``1|xg3|| =_>|yǟ<><}``3f,lـf`3f͛0f 6nٙf͘7p`?f-lـf`3f ̓f}o٘f́`0f-ـf`3|͙ ̓3f͛6 l00f}600`1f66xg3`x>}3f}g0< 0``x``  `06`0`  `0 `0`<}y>g`3fͳfl30606`3`͛ٳl6``3~Ͱ>g30 6a`3<ٰl>٫7`3`ͳff 30 6730 l͛6 `3ǀ 6y|y 0g````````` ``0` @ ` ΀@@ `0#1 ?    `10c @ `0031`c70100 ?? H@  `c?sd610 ~@@ `303!6310   `1a3ca``0 ````````f|`3f0``3fǟ0 aϏf<`?fflـ y0lٳwf`3ffl a3?k~ǀ`3ffl0 a6lٰc``3>6g0 }3c6l3f3`m~~7` 6f0`36gf1l`m`0`̓6 ` <>fx|͌<gfy<`7|f|``* ٳl|͛fA~6`|m6o6fc3f6``*ٌ llf͛~`f6 7fc?`f``*l3lf͛`y`f6 fc0`|f`*gx0xaf3ٳx`  `````FORMILBMBMHDe`t,CMAP AgGRAB2CAMGBODY@gfafaC0h?C  !0Cafa< xx= !3C8aa<<x= !0Caa<<x= !c  * > R f z @vzbvpXv "26FJZ^n"&<hO,  D p R o     }E%@ BootKit.docp 32;1mBootKit v1.00 (05-Dec-97) 32;1mBy Zebedee/Area 51 0;32m1997 An Area 51 Production 3m(Requires Kickstart 36) 0m 1;4mDisclaimer0m I, nor any other member of Area 51 may be held responsible for the damage to any hardware or software caused by the direct or indirect (mis)use of this program. You use it at your own risk! All you can do is send me or another Area 51 member a bug report. Using this program automatically states you are in agreement Fr with this. 1;4mDistribution Rules0m None of the files mentioned below may be distributed in part, reverse engineered, edited or sold for profit... BootKit 6380 Main executable BootKit.info 822 Workbench icon BootKit.doc 4221 This file you are reading BootKit.doc.info 1095 Workbench icon This archive and it's contents are distributed as Postcard Ware. If you like and/or use BootKit then a postcard would be appreciated. 1;4mIntroduction0m I wrote Boo stKit because I wanted a small program that would allow me to make backups of my bootblocks as well as giving me information about the disk, like it's DOS type. No other program I've yet come across is as small that does what this does - with a GUI! 1;4mUsage0m Once loaded, BootKit will open a window with a few gadgets... Drive This gadget will show the currently selected drive. Clicking on this gadget will cycle through DF0:, DF1:, DF2: and DF3:. Read This will atte pT;mpt to read the bootblock from the disk and store it in the buffer. Write This will attempt to write the buffer to disk. After clicking on the gadget a requester will open asking you if you want the program to calculate the checksum before writing the bootblock to disk. I've added this as an option just in case the file loaded has been edited or zapped. File This is a string gadget where you can type in the path and the name of the file to save/load the bootblock NU to/from. Load This will attempt to load the file from disk into the buffer as specified in the string gadget. Save This will attempt to save the buffer to disk as specified in the string gadget. About This will open a requester showing you some information about the program, myself and will also tell you what type of disk the bootblock is for, whether it's DOS0 to DOS5. To quit the program use the window's close gadget. There is a small section at the bo nottom of the window that is used to give you messages. 1;4mError Messages0m I've included only the most common error messages... 3mFile not found! 0m The file specified in the string gadget is not present. 3mFile loaded OK but not 1024 bytes! 0m When loading bootblock files from disk, the program expects them to be 1024 bytes in size. You'll get this message if a file is smaller. 3mFile saved but incomplete! 0m There was an error during saving to disk and not all of t3he bootblock was saved. Try a different filename or disk. 3mNot enough sectors available 0m You'll get this message if you try and read the bootblock from a disk formatted as diskspare.device or an unformatted disk. 3mUnable to install the bootblock 0m There was an error when installing the bootblock to the disk. Try a different disk. 3mUnknown error reading the bootblock 0mor 3mUnknown error 0m An error has occured and I've not put it's description into tٮhe program. 3mHeader checksum incorrect 0mor 3mSector checksum incorrect 0m There is a read/write error on the disk. 1;4mBugs0m Should you encounter a small hidden feature of the program which hinders the use of the program too much, please send me a bug report so I can try and rectify the problem. When sending me bug reports, please tell me your setup like memory, extra peripherals etc. and a software failure number if one appears with a severe quirk. 1;4mProgram H =.&oistory0m v1.00 First fully working version Written using 100% assembler. Released into the public domain as Postcard ware on 06-Dec-97. 1;4mContact Address0m For bug reports, postcards, requests or even code trading, write to: Ivan Oliver 39 Beckly Court Armada Way Plymouth Devon PL1 1LD ENGLAND EOFqiE%@BootKitp(_M{2@2` $VER: BootKit v1.00 (05-Dec-97)#3,xN(@JfA\NA\N##C6pa#gCp$a#gC*pa#gf,z,AN4#gJ @#V#2,z zC prN,z zCENN,z"zpNpr&~Aa\pr4~AaNprB~Aa@pjr&~Aa2 <r&~Aa <r&~AaplrB~Aa <rB~AaplrP~Aa <rP~AaA aP y,xN y,xN"@C5 z*i.),xNp0-&| g|@g|gJ`,z zN"za."za("za"Jg,x"yNpNu,xN,xNbCraB<g<gX,zxN"g E$ vN`,zf"z:N"z2 Nİ<g(|g^<g`<gd<g<g8` 9R<op#CP0@pjr&~Aab<g.p##p2<ИdR@Qr#"z|,xN#JCNCv :brAZND<!g\Jf ygA `A aL,xC:*I#|:3| yg3|#|(#|$#|,,xN8 yga|:CNaA`A~`A `A `A ` ygA`A`A#`aA_`3A| A PDOf (Sf(0Aw@@NuAi|AaNu,xC 3|#|(#|$#|,N8 NuA]`Az`,zJp @$@&@Na``dos.libraryintuition.librarygraphics.library2 ERROR: Requires Kickstart v36 Drive:DF0:File:Buffer:ReadWriteLoadSaveViewAbout $c`pBootKit v1.0 = 0Code by Zebedee/Area 51 (05-Dec-97)Quit BootKit...Are you sure?Yes|NO!Ga L$0 ` `@` \h ` `x`   8   < t8   <  7 7 07  L X 7 7 h#]m7 ZK.   RAM:Bootblock.grab     2  R B R  G9i  B 9i  B GGi  BGi  B  & h h 6h | R ^ h h nh  ~About...BootKit v1.00 By Zebedee/A51 (05-Dec-97) 1997 An Area 51 Production Write: 39 Beckly Court, Armada Way, Plymouth, Devon, PL1 1LD, ENGLAND Please consult the documentation for how to use this program. Buffer: DOS0 (0x444f5300)Ok! BootKit v1.00 (05-Dec-97) 1997 File not found! File loaded OK File saved OK File loaded OK but not 1024 bytes! NotUX a valid bootblock file! File saved but incomplete! Unable to open trackdisk.device Bootblock read into buffer OK Not enough sectors available Unable to install the bootblock No disk in drive Unknown error reading the bootblockDrive not connected Reading the bootblock... Installing the bootblock... Bootblock installed OK Disk write protected There is no bootblock in the bufferS L[aving bootblock file to disk... Header checksum incorrect Sector checksum incorrect Unknown error   dtrackdisk.devicenyWarning...The checksum may be incorrect. Do you want me to calculate it?Yes|NO!p 1$,T^nx&J 0:Rf JhPlpRZ 8<TXp  ( D H ` t   : > J Z l p   . J N f bfj@ H؝ 0  0 !Ca 08@aCa 08p` !0pp0`  !0`  08` 0` s 0`???x1?{<x?<x_~:_~n:_~~:w}_~n:_~:_?z@UUUUUUT C:PPMore#$1_('&%$E%r NewZAP.info{p#%7)9xxxxzx\Xxx*,\D9? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" U#&=pU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU.#'x)p EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUP9poUS UR``]SUU@UUUUUW @@@@@ @T`@`@ @@5UUUUUV #(F ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO #A 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU% Icon by Martin Huttenloher )*T.-,+*E%r .sAucE..infop)+`9x vx{xUxVX+RxVx\D9? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" U),=pU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU.)-x*8 EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUP9poUS UR``]SUU@UUUUUW @@@@@ @T`@`@ @@5UUUUUV ).: ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO )A 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU% Icon by Martin Huttenloher /0,43210E%r LokTite.infop/1659xx xX'xop@bDxox\\D9? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" U/2=pU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU./3x*( EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUP9poUS UR``]SUU@UUUUUW @@@@@ @T`@`@ @@5UUUUUV /4. ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO /A 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU% Icon by Martin Huttenloher 564.:9876E%r CrMview.infomp57Rʭ9xbx~xxhJJxh^x\\D9? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" U58=~pU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU.59x*0 EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUP9poUS UR``]SUU@UUUUUW @@@@@ @T`@`@ @@5UUUUUV 5:" ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5A 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU% Icon by Martin Huttenloher ;<]U@?>=<E%r ResetReq.infop;=RO9xx7$xWhKx_`Mx_fx\\D9 ? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" U;>=rpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU.;?x*} EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUP9poUS UR``]SUU@UUUUUW @@@@@ @T`@`@ @@5UUUUUV ;@ ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO ;A 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU% Icon by Martin Huttenloher ABI)_UTSRQPONMLKJIHGFEDCB& E%rLokTitebpACK$k /@\}.@ U'T` $VER: LokTite v1.00 (02-Dec-97)##$#(,x#N(@Jga , 0 0H0EG, @pB0& 9$ y(C ! RB)g\< g< g&ʲ<"ggB< g`B`g0<"g<*f <Ng<nfr `<Eg<efr`BB <(FL Hy,/N#N##Np.yNuaa# /B$@ *$g,y @"(NNp` /.yADk;/,x 9g"@NbJ gN|"y N NuH.<,xNL`pd`A\NA\NCpN#gNudos.library$*0:jp ,2@Pb8r&k!AEޥNUp!/HytN -$"-, rNz"-$RҀ -倒 -(^///-NO `/-/-/-NO /-/- /-NO N]NuNUH<J(gB(`p+@( m 0(H"-Ҁ4(H&-ւ8(HЄSЭ8( HԄSԭ;AS(-(҄;CS֭(;@V;BT/////-aOp0-U"-(Ёr2-Sҭ(t4-Xv6-T/////-anOp0-/@Zr2-Sҭ($/\v6-T//A KJH///-a4O/-$/-NTP/-$/-NlPp0-r2-t4-v6-/////-N6OJ,gL/-,NfXr2-t4-v6-x8-/////-$/-0z////-,/-aO, - p0-W"-(Ёr2-Uҭ(t4-Rv6-R/////-aJOp0-Y"-(Ёr2-Uҭ(t4-Tv6-R/////-a OLp    N    " ( 4(<A OOǠ8`t&6V t  * 6  J b x <P&XZjv >  $BF  graphics.libraryintuition.libraryLokTite v1.00 by Zebedee/Area 51 (02-Dec-97)55   5topaAP[&z.fontReject4  X rAccept,K4 8ww :xx &New Password Ju X@@*V $AQj>Fj"B`dl~ input.device/@?``?\NUH8HyNX+@Jf pLN]Nu"m i2p//+HNTPp//-NP m0(H2( H//t///-N6Op/r//t//v/x///Hy/-N O,p/r//t//v/x///Hy/-N O,p/r//t//v/x///HyB/-N O,p/r//t//vAR|3/x///Hy/-N O,Bp/r/Hy/-NO/-N"X -LN]Nu2 (F<LrP^}  (   8` Ttopaz.fontpLOCK SYSTEM| ~  DCHANGE PASSWORD|~  DASo(QUIT PROGRAM| 0~  D.CLOSE WINDOW|nB$~  D| >`LokTite 0LPh| 6:BTX\.topaz.font$Enter Password08 r HATTN  &@\n  0PTv~ @8???>|<<<<>|>|>|?   /,yN,_Nu/,yN,_NuU/,yLN:,_Nu/,y"o / N.,_Nu/,y"oN,_Nu/,y /AU<`N,_Nu/,y /N,_Nu/,y /N,_Nu/,y"oN,_Nu/,y"oN,_Nu/,y oN,_Nu/,y"oN,_Nu/,y oN,_Nu/,y"oNb,_Nu/,y oL "/ND,_Nu/,y"oN>,_Nu/,y"oN8,_Nu/,y"o / N,_Nu2FZn,@'/,y"o o /N,_Nu/,y"oL N,_NuH0,y"oLNL@ Nu/,y"o / N,_Nu/,y"o / N,_NuA1 m/,y"o / N,_Nu <XpT/,y oN,_Nu/,y oN,_Nu/,y oN,_Nu/,y LLN,_Nu/,y oNv,_Nu/,y o / Nj,_Nu/,y oN4,_Nu/,y LN,_NuH0,y LLNL@ NuH",y L NLDNuH",y L /"/$oNJLDNu/,y oN>,_Nu/,y oN8,_NuH",y L N2LDNu,@\p&<VWM[ZYXWE%r StUC.info;pVXʽO59x7xAxxWpK'xdIxe>x\\D9? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" UVY=<x 0x Hdx +<>|~~0<00??033310?000A UUUU@BUUUU@<0/@_@@@8@@@@@@@`@`@`@@@\~k@UUUUUU@UUUUUU@<>|~~0<00??ᇰ  ?000A UUUU@BUUUU@<0/@_@@@8@@@@@@@`@`@`@@@@UUUUUU@UUUUUU@_`һba`EE%CrMview.doc.infop_a=\LAx vxSx +x 08HA!0aaaaaaaaaUUUUUUTUUUUUUTUU[UU]dUU[UU] dUU[UU] dUU[2dUU]2ddUU[2dUU]2ddUU[UU]d_bQhaUU[UU]dUU[UU]dUU[UU]dUUPUUUUUUTA#```aPATC`aUQTC`aDC`aQEC`aDUC`aQEC``UUUUUUTUUUUUUTT_T?U]]}~~>_~:_~n:_~~:_u)κ_~n:_~:_?z@UUUUUUTPPMorecdRMkjihgfedE%CrMviewpce"h*H.,xN(@JfA\NA\N#`<g ?gCf3<,xC@pN#g,xC4pN#g^Jg z2*h$#,zAzN4#g$,z z$CENN8Jg,z":N#*m A` MaHaLa,zC" $<N#g"E$ vN,z":NA CrM2f^TH# @#,x :t"<N:#g,x :T"<N:#gA6CTa|,zCR" $<N#,z"$y$ &: cfINְfp,z":NACa, y"yNACa,zJfACTIfC" $<N#g8,zr":$9&:N,z\":NAfCaaPAVCa,z4Cz" N,x"y :8N.,x"y :*N.Jg ,z":N,z zN,x"zNb,x"zNbJg ,x"zNpNuCTIpRf#Nu ,z z h2CprN(aVAC4aa`aDACVaa`6a `ha`*a$AbCaaNuaAPC>aa`<,z, zHCENN8ARCVfAcguCa`a` g, gA!|Show`A!|Guid1|e ,zC" tvN"aaa P.Cg P.Eg P.Pg P.Sg .ASMg .PASg .TXTg .DOCg .DUCg .GDEg .JPGg .GIFg .IFFgRH TEXTgl ILBMg| JPEGgt GUIDf (EgX#Nu"H<g<al`<zo` fNuA : .gQ`SpNu#`#`#`,z0|N,z|rdN:,xCPNh,@g"N"gE|$ &<N"N,xNb`$VER: CrMview v1.00 (18-Mar-98)dos.ch =libraryintuition.libraryPPMore T:CrMview.tmpcia'CrMview.tmprB2Status...CrMview v1.00 by Zebedee Area 51 (18-Mar-98) ***SEE DOCS FOR USAGE***Error... topaz.font  Checking file Reading file Decrunching Creating temporary file Viewing file... Deleting temporary ficjwle Problem locating file Not enough memory Problem reading the file Can't create temporary! 0;1;4mCrMview v1.00 by Zebedee Area 51 (18-Mar-98)0m Usage (CLI): CrMview **Don't use quotes or trailing spaces!** (WB ): Set default tool of data file to "CrMview" 4mFiletype Extensions Viewer Used0m ASCII txt, text, doc PPMore AmigaGuide gde, guide PPGuide Graphics jpg, jpeg, gif, ilbm, iff PPShow Source c, s, p, asm, pas PPMore The defauckWlMlt view is PPMore. This allows you to crunch the above files using CrunchMania and still use your favourite viewers to view them! Please see the documentation file "CrMview.gde" for more information about usage and restrictions. A Prefs editor is in the making! $(Zr|DPh 2D ,hp$H CrM2gNuJZ"$*IMcJZ.,G0","~@>vAtx QAIt aAItaGIa GIara:AK(Na>f(8I Ha.H24frtaXG#Q##Qra>fjNurp@gA\dl>A00Nu~HF<"HFA\dl>A00Nu0⮞AnC<"A{Nu??LSD!H|ra:SEx&DRD2Bo2a0Q: SE2a8QL>Nut28x0,@l@S9AB[8BQNulmOtsrqponm{E% CrMview.docpln 1;32mCrMview v1.00 by Zebedee Area 51 (18-Mar-98)0m 4mDisclaimer0m This program is supplied as-is. No warranty may be implied. You use this at your own risk. No files contained within the archive may be modified or reverse engineered in any way! 4mIntroduction0m On my system I've crunched all my executables with CrunchMania and all my text documents and AmigaGuide files with PowerPacker. For quite some time I've wanted to crunch the text files with Crlo>M but I don't own a CrM text viewer and quite like the way PPMore operates. Only recently I thought about writing an interface utility for CrM and here it is. 4mRequirements0m Enough memory and T: assigned somewhere (see Usage Hints, below). 4mInstallation0m Just copy the executable to a valid path and this documentation somewhere handy where you can readily access it if needed. 4mUsage (CLI)0m Just specify the path and filename of your datafile and press return.lpOF Because of the way I've written the code (this bit's bad) don't use filename quotes and don't put any trailing spaces at the end of the filename. So if you've got KingCON installed (like I have) then when pressing tab to complete the filename you must delete the space KingCON puts on the end or CrMview won't find it. Users of Directory Opus who want to access CrMview must select "No filename quotes" from the listview gadget. You can specify a ? as the parameter for solq&zme info. 4mUsage (Workbench)0m Change the tool type of your data files to "CrMview" and you're away. 4mHow It Works0m It reads in the crunched file and chucks it out to T: as a temporary file. If you use CrMview from the CLI then the temporary file will be called "CrMview.tmp". It then checks the extension on the end of thefilename and activates the appropriate viewer. When you quit the viewer, CrMview will then delete the temporary file and quit. A small windowlrʒ is opened informing you of what it's doing. 4mUsage Hints0m If you have a hard drive, you might like to create a new directory somewhere and assign T: to it. This would greatly improve the performance of quite a few utilities like LHA and LZX that use T: for temporary storage. On my system I've installed FMS and created DF1: and renamed as T. This has an even greater advantage that should some utility go beserk I won't have to retrieve a load of data on the partitiolsH{n, but simply re-format DF1. 4mPlans For The Future0m Although CrMview is fully functional and works fine, I do have plans to add the following at some time in the future... * Better file recognition Instead of using the file extension to check the type of file, use the library "WhatIs.library" on the temporary file. * Better CLI argument routine The KS2 ReadArgs() function would be a very welcome improvement. * Ideas Any helpful suggestions you can come up with. Please ltsKremember that I do also plan on keeping CrMview as small as possible. 4mExtra Notes0m A few days after I wrote this doc file I wrote a preferences utility for CrMview. Although CrMview doesn't use the preferences file in any way, I thought I'd include it just so you can get a taste of what's to come! This file requires reqtools.library to function. 4mBonus Utility0m I've included the VERY FIRST working pre-beta version of CrMview under the name of CrMtype. Thisl#aB reads in the crunched file and chucks it out to the CLI window. Useful maybe for compo disks and you could even redirect the output to a file... 4mContact Address0m If you want to write to me, you can write to me at: 6 Bridgefield Ottery St Mary East Devon EX11 1HL ENGLAND EOFuvB^xwvpE%CrMtype)puwjh*H,xC*pN#>g,@N#Bg ?g  g,M  f<*N,z" $<N#Ngh"E$ vN,z":NA CrM2fLTH#` @#d,x :"<N:#Fg(,x :"<N:#Jg,zf" $<N#N,zP"$yF$ &:hNְ`f,z2":>N yF"yJN,zC" $<N#NgD,z":$9J&: N,z":N,zC" tvN",zC" N,x"yJ :N.,x"yF :N.,x"zNbpNuEvTa@ux]%Hv`Eva4`Eva(`Eva`Eva`Eva`,z8":8$ N$VER: CrMtype v1.00 (16-Mar-97)dos.library0;1;4mCrMtype v1.00 by Zebedee 1998 Area 51 (16-Mar-98)0m Usage: CrMtype ERROR: File not found ERROR: Not CrunchMania ERROR: Not enough memory ERROR: Problem reading file PPMore T:CrMtype.tmpT:CrMtype.tmp"Z>P$hp$Huգ CrM2gNuJZ"$*IM.,G0","~@>vAtx QAIt aAItaGIa GIara:AK(Na>f(8I Ha.H24frtaXG#Q##Qra>fjNurp@gA\dl>A00Nu~HF<"HFA\dl>A00Nu0⮞AnC<"A{Nu??LSD!H|ra:SEx&DRD2Bo2a0Q: SE2a8QL>Nut28x0,@l@S9AB[8BQNuy zI8~}|{zxE%CrMprefs/py{Bұ:AKB,xN(@JfA\NA\N+@Cpa0*gJf,@N+@gCpa +@gCpa+@gCpa+@ g,m0|N+@g,m0|CN+@gx @+h2 +hV$r ar&aaaxa m$,xN m$,xN"@/).),xN"_p0)&|@g޾g`,m mN,m0|"mN"m a."ma("ma""UaJg ,x"mNpNu,xN,xNb,m m ClpN,mA"m4|N",m"m N"m N,m 0|N,m "my|/{(N,m A <"m(E HN,m 6|8|N<gư<gv<gx<g<g<g`AC;Ea` m6( |Ng`a`r a(r&a",m"m pNIr LpXr~ a*A pdr.~aAprH~aApprH~aA <rH~aSNaNua`I2~vRN Nf #N Ng$ Ng, Ng6 Ng@A >C.aXaf L`@A CaDaRA`*A Ca.aC("Q iCaTay}Aa` A Ng Ng NgCt`C ` C h`Ca`Hf a:gRI/`RIfLNuA ENVA1|RCaAVH ENV:a`,U"$<N+@,g,U"E$ &< N,U"-,NNufNu,UA"$<N+@,gV,U"E$ &< N,U"-,NAA CaArAC aAdA C|aAVACaNu$VER: CrMprefs v1.00 (19-Mar-98)dos.libraryintuition.librarygraphics.libraryreqtools.libraryde fgNj`l$noҀy~ 6}CrMview PreferencesParkbench Screen    P`l |   H3 $  Hy4 (tg@:  H  _@:  H @:  H  X l 9 9yoQz88  |8   9 988  8  File TypeViewerSaveUseCancel ASCII (Text) AmigaGuide Picture (JPEG) Picture (Others) _ XAbout...CrMprefs v1.00 by Zebedee Area 51 (19-Mar-98) Written using assembler Write to me at: 6 Bridgefield, Ottery St Mary East Devon, EX11 1HL, ENGLAND_OkSelect Viewer... _* y~xENVARC:CrMview.prefsFORMPREFPRHD CrMpC:PPMoreC:PPGuideyҹHC:PPShowC:PPShow7~$6:X\t$HZ^~   . 2y 8 P T t @ A  48E% ResetReq.spP;ResetReq v1.03 (28-Mar-97) ;By Zebedee -> (c)1997 Carnage ;Disclaimer... ;Don't blame me if this program makes the universe implode blah blah etc... ;Requirements... ;Kickstart 2 or higher and reqtools.library v37 or higher. ;Usage... ;Works from both the Shell and Workbench. If run from Workbench and the ;reqtools.library can't be opened the screen will flash red. If run from ;the Shell and the library can't be opened, you'll get a text message. If ;this happens check you havc-e reqtools.library and if you do, make sure it's ;version number is higher than 37. Use VERSION to check this. ;About... ;This is the first utility since leaving CRN but they own it! A snail... ; Zebedee ; 39 Beckly Court ; Armada Way ; Plymouth ; Devon ; PL1 1LH ; ENGLAND ;If you really must phone: +44 (0)1404 815433 ;This is my parent's number - I'm not on the phone but messages can be left. ;Please phone during reasonable hours (1800hrs-2000hrs BST) ;Source... ;Here it is in good old assembler. Feel free to rip it to bits but don't ;change the name and say you did it 'cause if you do, you're a lamer with ;no hope in life... ;) opt o+,w- section main,code_c WhereFrom move.l 4.w,a6 sub.l a1,a1 jsr -$126(a6) ;FindTask(a1)exec move.l d0,a4 tst.l $ac(a4) bne FromDOS lea $5c(a4),a0 jsr -$180(a6) ;WaitPort(a0)exec lea $5c(a4),a0 jsr -$174(a6) ;GetMsg(a0)exec move.l d0,WbMsg FromDOS lea DosName(pc),a1 moveq.l #0,d0 bsr OpenLibrary move.l: d0,DosBAdr beq BadDos tst.l WbMsg bne .NoWin move.l DosBAdr(pc),a6 jsr -$3c(a6) ;Output()dos move.l d0,Output beq Error .NoWin move.l 4.w,a6 lea RTName(pc),a1 moveq.l #$25,d0 bsr OpenLibrary move.l d0,RTBAdr beq BadReqTools lea StruPR(pc),a0 lea Perform(pc),a1 lea FirstC(pc),a2 bsr OpenRequester cmp.l #0,d0 beq NoReset cmp.l #1,d0 beq PerformReset cmp.b #2,d0 beq AboutRequester NoReset move.l RTBAdr(pc),a1 bsr CloseLibrary Error move.l DosBAdr(pc),a1 bsr Clol?seLibrary BadDos tst.l WbMsg bne SignalWorkbench Quit moveq.l #0,d0 rts SignalWorkbench move.l 4.w,a6 move.l WbMsg,a1 jsr -$17a(a6) ;ReplyMsg(a1)exec bra Quit PerformReset move.l 4.w,a6 cmp.w #$24,$14(a6) blt ResetOldAmiga jsr -$2d6(a6) ;ColdReboot()exec bra Problem ResetOldAmiga lea Table(pc),a5 jsr -$1e(a6) ;Supervisor(a5)exec bra Problem Table lea $1000000,a0 sub.l -$14(a0),a0 move.l 4(a0),a0 subq.l #2,a0 reset jmp (a0) Problem lea StruBad(pc),a0 lea NotDNone(pc),a1 lea Ok(pc),a2 bsr OpenRequester bra NoReset AboutRequester lea StruNfo(pc),a0 lea About(pc),a1 lea SecondC(pc),a2 bsr OpenRequester cmp.b #1,d0 beq PerformReset bra NoReset BadReqTools tst.l WbMsg bne .flash move.l DosBAdr(pc),a6 move.l Output(pc),d1 lea BadRTT(pc),a2 move.l a2,d2 moveq.l #36,d3 jsr -$30(a6) ;Write(d1/d2/d3)dos .flash move.l #$4000,d0 .loop move.l #$f00,$dff180 move.l #$f00,$dff182 move.l #$f00,$dff184 move.l #$f00,$dff186 dbra d0,X.loop bra Error OpenLibrary move.l 4.w,a6 jmp -$228(a6) ;OpenLibrary(a1,d0)exec CloseLibrary move.l 4.w,a6 jmp -$19e(a6) ;CloseLibrary(a1)exec OpenRequester move.l RTBAdr(pc),a6 moveq.l #0,d0 move.l d0,a3 move.l d0,a4 jmp -$42(a6) ;RtEZRequestA(a1/a2/a3/a4/a0)rt Version dc.b '$VER: ResetReq v1.03 (28-Mar-97)',0 DosName dc.b 'dos.library',0 RTName dc.b 'reqtools.library',0 DosBAdr dc.l 0 RTBAdr dc.l 0 Output dc.l 0 WbMsg dc.l 0 StruPR dc.l $80000014,Request dc.l $800TuP0000b,$5f dc.l $80000017,0,0 Request dc.b 'Request...',0 Perform dc.b 'Perform reset?',0 FirstC dc.b '_Yes|_Info|_No',0 StruNfo dc.l $80000014,Info ;RTEZ_REQTITLE,Info dc.l $80000016,4 ;RTEZ_FLAGS,EZREQF_CENTERTEXT dc.l $8000000b,$5f ;RT_UNDERSCORE,"_" dc.l $80000017,0,0 ;RTEZ_DEFAULTRESPONSE,0 Info dc.b 'Info...',0 About dc.b 'ResetReq v1.03 by Zebedee',$a,$a dc.b 'Allows you to perform a reset',$a,'without using the keyboard!',0 SecondC dc.b '_Reset|_Cancel',0 StruBad dc.l % $80000014,ErrorT dc.l $8000000b,$5f dc.l 0 ErrorT dc.b 'Error...',0 NotDone dc.b 'Couldn''t perform reset!',0 Ok dc.b '_Ok',0 BadRTT dc.b 'Unable to open reqtools.library v37',$a end I h8 equ's+includes! ;)kQE%ResetReq.s.infopv@AAx 0x:(x +x 08AaaaaaaaaaUUUUUUTUUUUUUTUU[UU]dUU[UU] dUU[UU] dUU[2dUU]2ddUU[2dUU]2ddUU[UU]dQiEUU[UU]dUU[UU]dUU[UU]dUUPUUUUUUTA```aPATC`aUQTC`aDC`aQEC`aDUC`aQEC``UUUUUUTUUUUUUTT_T?U]]}~~>_~:_~n:_~~:w;_~n:_~:_?z@UUUUUUT C:PPMoreTAB=8!8(E%ResetReqp!(@@,xN(@JfA\NA\N#CpaN#grJf,zN#gN,xCkp%a#gAxCEagg8<gv"z@a"z4aJfpNu,x"yNpNu,x n$mN*`"K N`A hUNpNACEa`ACFEap<g`tJf,z":E$ v$N <@####Q`(,xN,xNb,zNp&@(@N$VER: ResetReq v1.03 (28-Mar-97)dos.library"reqtools.library !Request...Perform reset?!Yes|!Info|!NoT !Info...ResetReq v1.03 by Zebedee Allows you to perform a reset without using the keyboard!!Reset|!CancelԀ !Error...Couldn't perform reset!!OkUnable to open reqtools.library v37  $4>Ph,4dE% Query.infowpYbX9xyxhTxJx @TSSx x\D9? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" U=pU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU.x) EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUP9poUS UR``]SUU@UUUUUW @@@@@ @T`@`@ @@5UUUUUV Ŀd ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO A 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU% Icon by Martin Huttenloher !2L>E%StUCpih,x*H. <0"<$N:JfpNu,ЂN|/NTNv)FN&@JfA\NA\N)@A)H` M )HNqNqNq)NA)HCXp!N)@gCXp!N)@gC(p!N)@g,@N)@N)@)O`0dos.libraryintuition.librarygraphics.libraryNFN7.lJg,l",(tvN"N,x$l g"J *$RN. f"lNb"lNb"lNb&,g N|"CN$,N\ <0"_ON. NuNU - JfHxN=X+@ +@ - X m - 1 m !@p m !@p m @ p m @ - N]NuNU -JfHxN=X+@+@ - m!@ - m@ - m@ -N]NuNup)@p)@Op)OO)OBW/< BOp)Op)@p)@O)OBW/<Bp)@p)@p)@O)OBW/<Bp)@p)@p)@O)Oa5a#>)@NuNU m 0(&H+@pf a`zpf/-aO``pf a:`Npf a~`0;N2222|9w22222222222222222222222222222 222222222,2222h2222222222,2222222222222222222222222222222222222222222222222S , f)l/,a,OHx/<6/,aO `R ,op)@/,aOHx/<6/,aO `aHx/<$, l 0(/a|O `R , fp)@/,aOHx/</,a>O `daD`\ , fa`F ,>+ς fal`0a`(A2/A1/A1/HxHxaO`pN]NuNU)mHx/<$, l 0(/aO pN]NuNUp)@ ,ܰkO/- <//- a#$O" /Hxq/- a OpN]NuNUO l (2/@ -/A ` 6/ -/A `!_ !_"A b/@ -/@ - /@,lLN(pN]NuNUOp/@ -/A `66!_ /@p/@p/@ ,lLNpN]NuNUO+OHxHxa>O)@",t,lN+@Jg"-$-,lNJg m (Jof"-$-,lNJgL m (Jl: mA /A/Hxa#O fR ,fp /a%X)@ l /, mA /Hxa O l //,Hxa O O ,/@Hx/,HxHxaO/@,lLN`p /a%X)@$, l!($, l 0(/ mAU /Hxa $O O ,/@Hx$, l 0(/HxHxaO/@,lLN``Hxa#O"-,lN`Hxa#pO ,g,p)@ ,ܰkp$, l!(R`pN]NuNUA/Ao/AS/HxHxa O+@pf(A'/AS/AI/HxHxa O`.pf$A/A/A/HxHxa OpN]NuNUHO+Op+@O+OBW/<BO+OBW/<B/,/,/,)OA)H)M/-A,/O -.HxaFO/-a!O+@ fd/-A/O1Ij -.Hxa OAx//-Ae/HxHxaO+@ - f/-a O`\,lNf+@JfHx a!OHx,afO+@+m+mp m@p m@ - m!@ - m!@"-t,lN m!@ - m!@ - m!@ p m!@$p m!@(,lN|Ch,lNz+@Jf a +@ -g m"m,lN,lNv -g& m,lN m,lN m (+@ -f./-A/O -.HxaO/-aOHxa ZO)_)_)_`\ m (JgO m (/@,lLNA}, -g/-aO -g m,lN` ,`pDLN]NuNUH/,/,/,)OA)H)MM"$<,lN+@JfHxaOM"$<,lN+@JfHxahOOA /@ -/ -/A `4 !"#$!_ !_/@,lLNr,lN:C ,lNz+@/-aO)_)_)_`D/-aOJg* -g"-,lN -g"-,lN -`pLN]NuNUO+OBW/<B/,An/HxaO p=)@)| mOɽ< hp VHH/O m (/@,lLN+@" JgP m (6+@ mC,lN+@Jg* mC,lNJg mC,lN+@Jg mC,lNJgp)@ mCp,lN+@Jg mCR,lNJgp)@ mC/,lN+@Jg/-HxaO)@ mC,lN+@Jg`$A/A*/A/HxHxaO mC,lN+@Jg/-Hxa"O)@ mC,lN+@Jg/,/-HxaO mC,lN+@Jg mCe,lN)@ mCX#J,lN+@Jg: mC,,lNJg$A/A/A/HxHxaO mC,lN+@Jg/,/-HxaO mC,lN+@Jg mCj,lN)@/,aO ,lp)@ ,lp)@/,A%/HxaO Jgp)@/,A /HxafO Jgp)@/,A /HxaDO Jgp)@ , fp)@/-/,/,aOS/HxaOA //-HxaO /aO/A \//-HxaO /aO" Jg/,A */HxaO p N]NuNUpVbf6HxHxaOHxHxaOHxHxaO`zpf6HxHxaOHxHxaOHxHxazO`gb} @{i}Minor alterations@{ui} * An itsy bitsy bug fix * Code optimised @{b}v1.08@{ub} @{i}Massive improvements@{ui} * Keyboard shortcuts added (at the request of Xes!) * Most of the code re-written and optimised * ListView window itself now shows what commodity is selected * Two new tooltypes added, CENTREX and CENTREY to centre correctly on any screen * The help text inside the program has been partially re-written * Icon saved out when a commodity without an ico !On is found has been altered slightly @endnode @node contactaddy "StUC v1.09 (Contact Address)" If you have any ideas for improvements, want to report a bug, want to send me a postcard or just want to trade, then I can be contacted at: @{i}Snail: @{ui} Ivan Oliver 39 Beckly Court Armada Way PLYMOUTH PL1 1LD England Please mark the envelope with "Re: StUC109" in the top left. If sending me a bug report, please don't forget to mention little important details like... o The!W´ model of Amiga you're using (eg. A600, A1200) o The amount of memory you have in chip, fast and public. o If your Amiga is accelerated, and if so, to what speed? o If you get a guru meditation, what is the eight digit hex number? o Any Commodore or third party add-ons (eg. CD-ROM) o If you own a hard drive, and if so, what size and what size each individual partition is, especially SYS: @endnode @node greets "StUC v1.09 (Greets)" Zamara -> Thanks for all the software and u"av/se of your CD-ROM for access to all that E source! Maybe one day TwinOpus will get installed properly on your system??? ;) Thrust -> Du er god venn! Jeg trenger mer av Ders musik! Skl til n! Kanskje en dag jeg vil lre norsk bedre! :) Et yeblikk, s skal jeg se om jeg finner det i boken (hahaha) Kei -> Yet another version! Hope there aren't any more! ;) Fireball -> Where are my vids? Sprinter -> Where are my vids? @{i}All others not listed especially...@{ui} Dave#K1 Williams (Exeter) Wot no contact! Please notice the change of address!!! Beaker (South Molton) Many, many thanks for those books! They've helped loads! @endnode @node lastnotes "StUC v1.09 (Last Notes)" There isn't really much more a man can say, is there? I think I've covered almost everything in this guide! However, I suppose I could plug some other of my utils... @{b}PlayPT@{ub} Fully multitasking ProTracker module player for the Shell. Supports powerpacked modules! $,h@{b}PlayTP@{ub} Like PlayPT but plays TrackerPacker modules. The module playroutine is version 3.1 @{b}BWrite@{ub} You code the bootblocks in DevPac, BWrite writes the executables to disk for you and calculates the checksum! Supports all Amiga file systems like OFS, FFS, DirCache and IntMode and even allows you to change the root block pointer (usually $00000370)!!! @{b}Destroy@{ub} For the security conscious. When using DELETE a file can still be recovered. But %>with DESTROY, its gone forever! @{b}AsmGuide@{ub} A set of AmigaGuide documents converted from the Autodocs from the Commodore Developers Kit v3.1 that unarchives to 1.9 megabytes! I've not long finished making it run from two disks instead of needing to be installed to a hard drive. Comes in either a single LhA archive for HD users, or two DMS files that fit on one disk for users without a hard drive! @{b}SpiCode@{ub} Another util for the security consci&/`Sous. This is able to encrypt data so much that it is virtually impossible for an intruder to decrypt it. It will encrypt ANYTHING - pictures (GIF/JPEG/ILBM etc.), executables, samples, modules, text files, data files etc. Even with a program going through loads of key codes for the encrypted data it could take MONTHS, maybe even YEARS before it eventually got decrypted! @{b}ZebUtils.lha@{ub} This contains LOADS of little highly useful utilitie'NXs that I've coded over the past years that are mainly for Shell users. @{b}ZebtrackerKit@{ub} A brand new tracker made by me for Area 51 use only with replay sources in E, assembler, with Blitz and AMOS soon to come. The new "ZebReplay.library" and "ZebReplay.m" files are public domain! @{i}And others like @{b}MBWait@{ub} and @{b}Filter@{ub} so @{"click here" link contactaddy} if you want to know where you can get them from! @{ui} @endnode @node ndx "StUC v1.09 (Index)"(~c @{" " link bugs} Bugs @{" " link contactaddy} Contact Address @{" " link cxlist} Commodity List (Usage) @{" " link credits} Credits @{" " link disabled} Disabled (Usage) @{" " link disclaimer} Disclaimer @{" " link distribution} Distribution @{" " link greets} Greets @{" " link history} History @{" " link in1formation} Information (Usage) @{" " link installation} Installation @{" " link introduction} Introduction @{" " link lastnotes} Last Notes @{" " link off} Off (Us)age) @{" " link on} On (Usage) @{" " link requirements} Requirements @{" " link selected} Selected (Usage) @{" " link start} Start (Usage) @{" " link statuswin} Status Window (Usage) @{" " link tooltypes} Tool Types @{" " link usage} Usage @endnode @*HE% StUC.gde.infop0)LAx Hx9x Hx +HA`aaaaaaaaaUUUUUUTUUUUUUTUU[UU]dUU[UU] dUU[UU] dUU[2LUU]>d=dUU["dUU]2LdUU[UU]dUU[UU]dUU[UU]dUU[UU]dUUPUUUUUUTA!@n}|uUUUUW``]}`|``|Kp`|m```6``UUUUUUTUUUUUUT?TT` jOcc xcNGc2?H@UUUUUUT C:PPGuides DE%WBStart-HandlerpE,x$O// <мP*rN:Jf.Jp` @B IGC <` QdA < <r` Qd)K)Jp"<N)NafHxa lXa >fapN#\gj,@N#`gLCB ?g g" $<N#tg6,z":E$ vN,z":Na,,x"zNbpNupNuA4va`,z":$NA2vaAC.E ?gb gP XPKFg( h-lg,&YggE`Et JvaNuE4%h` (hfE:%h `A\v:axAvan`L$VER: Query v1.00 (15-Apr-98)dos.library.}{0;1;4mQuery v1.00 by Zebedee 1998 Area 51 & Carnage0m Usage: Query ERROR: File not found File is DMS!LZXMMD0MMD1MMD2MMD3CPLXSNT!PM40PP20PX20TRK1FC-MP40AMEXXSTP3PSIDP60AP61ACrM!CrMSSMODFC13FC14BeEpFORMexecutable an icon a DMS archive an LZX arcNhive a MED module (MMD0) an OctaMED module (MMD1) an OctaMED module (MMD2) an OctaMED module (MMD3) a TrackerPacker module a ProRunner 2.0 module a Promizer 4.0 module PowerPacker data PowerPacker enc data a Module Protector module a FC-M Packer module a The Player 4.xx module a TrackerPacker 1/2 mod a SoundTracker Pro 3 mod a SID module (C64) a The Player 6.0 module a The Player 6.1 module CrunchMania (CrM!) CrunyYchMania (CrMS) a Future Composer module Future Composer v1.3 mod Future Composer v1.4 mod a JamCracker module an unknown IFF file XPK (????) LHA archive (????) unknown *T 4RE%Query.sXpOq#;$VER: Query.s v1.00 (15-Apr-98) ;Code by Zebedee/A51^CRN ;Just a VERY basic "what is that file type" sort of command! ;I wrote this because I'm pissed off with new file formats being created ;and file ID progs and libs aren't being updated. Maybe we should have a ;place where new file ID structures are sent to so you can write and get ;a description on how certain files are made? If anyone wants to send me ;the source to file id utils/libs and the descriptions of any file formats&9 ;you have, I'll glady set a database up. Write to: ;Ivan Oliver, 39 Beckly Court, Armada Way, Plymouth, Devon, PL1 1LD, ENGLAND ;Pass this source code around and do with it what you will. I used DevPac ;to write it. opt o+ section main,code ProgStart lea FileNom(pc),a1 .copy move.b (a0)+,(a1)+ bne.b .copy move.w #0,-(a1) move.l 4.w,a6 lea Dos_L(pc),a1 moveq.l #0,d0 jsr -$228(a6) ;OpenLibrary(a1,d0)exec move.l d0,Dos_B beq.b QuitFatal move.l d0,a6 jsr -$3c(a6) ;Out:k2put()dos move.l d0,Output beq.b ClDos lea FileNom(pc),a1 cmp.b #'?',(a1) beq ShowUsage cmp.l #0,(a1) beq ShowTitle move.l a1,d1 move.l #$3ed,d2 jsr -$1e(a6) ;Open(d1,d2)dos move.l d0,FilePtr beq.b FileNotFound move.l Dos_B(pc),a6 move.l FilePtr(pc),d1 lea Buffer(pc),a2 move.l a2,d2 moveq.l #16,d3 jsr -$2a(a6) ;Read(d1,d2,d3)dos ClFile move.l Dos_B(pc),a6 move.l FilePtr(pc),d1 jsr -$24(a6) ;Close(d1)dos bsr.b CheckFileHeader ClDos move.l 4.w,a6 move.l Dos_B(pc),apN1 jsr -$19e(a6) ;CloseLibrary(a1)exec Quit moveq.l #0,d0 rts QuitFatal moveq.l #20,d0 rts FileNotFound lea NoFile(pc),a0 moveq.l #22,d3 bsr.b PrintText bra.b ClDos PrintText move.l Dos_B(pc),a6 move.l Output(pc),d1 move.l a0,d2 jmp -$30(a6) ;Write(d1,d2,d3)dos CheckFileHeader debug lea FileIs(pc),a0 moveq.l #8,d3 bsr.b PrintText lea Buffer(pc),a0 lea Headers(pc),a1 lea File_ID(pc),a2 cmp.b #'?',(a0) beq.b ShowUsage cmp.l #0,(a0) beq.b ShowTitle cmp.l #'XPKF'H,(a0) beq.b FileIsXPKF cmp.w #'-l',2(a0) beq.b FileIsLHA Next move.l (a1)+,a3 cmp.l (a0),a3 beq.b Found cmp.l #0,a3 beq.b .eh lea 26(a2),a2 bra.b Next .eh lea Unknown(pc),a2 Found move.l a2,a0 moveq.l #26,d3 bsr.b PrintText rts FileIsXPKF lea XPKF(pc),a2 move.l 8(a0),5(a2) bra.b Found FileIsLHA cmp.b #'h',4(a0) bne.b Next lea LHA(pc),a2 move.l 2(a0),13(a2) bra.b Found ShowTitle lea Title(pc),a0 moveq.l #58,d3 bsr PrintText ShowUsage lea Usage(pc),a0 moveqΚ.l #20,d3 bsr PrintText bra ClDos Version dc.b '$VER: Query v1.00 (15-Apr-98)',0 Dos_L dc.b 'dos.library',0 Dos_B dc.l 0 Output dc.l 0 Buffer dcb.l 4,0 FileNom dcb.b 255,0 FilePtr dc.l 0 Title dc.b $9b,'0;1;4mQuery v1.00 by Zebedee 1998 Area 51 & Carnage',$9b,'0m',$a,$a Usage dc.b 'Usage: Query ',$a NoFile dc.b 'ERROR: File not found',$a FileIs dc.b 'File is ' Headers dc.l $000003f3,$e3100001,"DMS!",$4c5a5800,"MMD0","MMD1","MMD2" dc.l "MMD3","CPLX","SNT!","PM40","PP20","PX020","TRK1","FC-M" dc.l "P40A","MEXX","STP3","PSID","P60A","P61A","CrM!","CrMS" dc.l "SMOD","FC13","FC14","BeEp","FORM",0 File_ID dc.b 'executable ',$a dc.b 'an icon ',$a dc.b 'a DMS archive ',$a dc.b 'an LZX archive ',$a dc.b 'a MED module (MMD0) ',$a dc.b 'an OctaMED module (MMD1) ',$a dc.b 'an OctaMED module (MMD2) ',$a dc.b 'an OctaMED module (MMD3) ',$a dc.b 'a TrackerPacker module ',$a dc.b 'a ProRunner 2.0 mo1ƌ|dule ',$a dc.b 'a Promizer 4.0 module ',$a dc.b 'PowerPacker data ',$a dc.b 'PowerPacker enc data ',$a dc.b 'a Module Protector module',$a dc.b 'a FC-M Packer module ',$a dc.b 'a The Player 4.xx module ',$a dc.b 'a TrackerPacker 1/2 mod ',$a dc.b 'a SoundTracker Pro 3 mod ',$a dc.b 'a SID module (C64) ',$a dc.b 'a The Player 6.0 module ',$a dc.b 'a The Player 6.1 module ',$a dc.b 'CrunchMania (CrM!) ',$a dc.b 'CrunchMania (CrMS)  ?u}Id',$a dc.b 'a Future Composer module ',$a dc.b 'Future Composer v1.3 mod ',$a dc.b 'Future Composer v1.4 mod ',$a dc.b 'a JamCracker module ',$a dc.b 'an unknown IFF file ',$a XPKF dc.b 'XPK (????) ',$a LHA dc.b 'LHA archive (????) ',$a Unknown dc.b 'unknown ',$a end2\6E%PlayPThex.infop,6xAxC@6UUUUU\UUUUU\UUUWU\UUUWU\Uw_U\UwU\UuwU\UwU\U}U\UUUUU\UUUUU\}UUU\wUUU\ww}\}w\u\uu\u}\UU_UU\UUUUU\UUUUUPUUUUUPUUUQUPUUUQUPUDAAUPUDDUPU@DUPTDDUPTDAAUPUUUUUPUUUUUPUUUPUUUPDAPDPDP@PTAPUUAUUPUUUUUP6PUUUUUPUN5]UUUUP_]}uPUww}PWwPWw}PWW]PUwW]P_}PUUUUUPUUUUUPUUUuUUU_UU]}_U]}]wU}__UUUUUUPUUUUUPUUUUU\UUUUU\PAE\EPA\DPE\ATA\DTQPE\ETQPE\P\UUUUU\UUUUU\UUT\UUTT\PAT\TUD\@@UD\EDTD\P@UUUUUU\UUUUU\ 7     ME% PlayPT.docpP EXTREMELY BRIEF DOCUMENTATION FOR ********************************************* ** ** ** PPPPP ll TTTTTT PPPPP ** ** PP PP ll TT PP PP ** ** PP PP ll aaaa yy yy TT PP PP ** ** PPPPP ll aa yy yy TT PPPPP ** ** PP ll aaaaa yy yy TT PP ** ** PP ll aa aa yy yy TT PP ** ** PP ll aaaaa yyyyy TT PP ** ** yy ** ** yyyyy v1.01 ** ***************************? ****************** Where size DOES matter - the SMALLER the better ! Coded by Zebedee/Area 51 using 100% 680x0 assembler (I rote dis doc 'speshully 4 u Shaun Justin Kayce...) PURPOSE: A complete GUI driven Protracker module player that's only 2.5Kb in size! What an achievement! Disclaimer ---------- Maybe. I think I can't be bothered. Maybe when or even IF I ever write the official docs...!? B*gs ---- Hope not! Introduction ------------ PlayPT Gmis a very small compact utility designed to play large Protracker modules in a small amount of memory. How? Fuck knows. I just drank sum Fairy liquid and BANG! I ended up round the corner, over there! Usage ----- When loaded, a window opens and unto thee came a divine intervention: +------------------------------+ |X| PlayPT v1.01 |[]| +------------------------------+ | AAAAAAAAAAAAAAAAAAAAAAAAAAAA | | BBBBBBB: CCCCCCCCCCCCCCCC)ߐMCCC | | DDDDDDDDDDDDD EEEEEEEEEEEEE | | Size $000000 Mem $00000000 | +------------------------------+ Here's a quick description: A : The string gadget where you type the name of the module B : Status. This is either "Status", "Playing" or "Stopped" C : This is the module name (taken from the module itself!) D : Play gadget (See below) E : Stop gadget (See below) Size : This is the size of the module (in hex) Mem : Where in memory the modu -le is located (in hex) I'll be converting the file size into the decimal number system as soon as I figure out a way of converting from hex to decimal. I spent 30 minutes on that routine alone and still crashed my sanity! Always remember to use the phrase LSR #4,D0 and you'll go iNsAnE!!! Hey, maybe I'll write a routine to calculate the file size from within the module. Who knows, there may be some rogue bytes at the end! But then again, maybe not because this player is suppose d to be SMALL! :) [oh fuck i'm out of coffee - time 4 a refill!] Zone A: You can use CTRL X (^X) in the string requester to erase all instead of holding down delete! ;) Zone C: The first 20 bytes of the module is placed here as this contains the name of the module. So don't be absolutely amazed if a complete load of shite appears here. I've coded the routine to grab it as best as I can. I've not had any weird missions so far... Zone D: The Play Gadget. Click on here to  Q`load the module and play it. The routine to load the module is a tad brainy because it checks that the file is a Protracker module. If it isn't, you'll be informed. You'll also be informed if the file can't be found. Zone E: Stop. Pressing this stops the module and frees up any memory it consumed returning it to the system. Size : This is shown in hex. Hey, I'm sorry ok? I tried coding a routine to convert it to normal readable decimal but I went mad trying! It isn't t hat easy! But when I crack it I'll add it. You can always use Action Replay to convert it using the in-built calculator. If you want, I'll explain the problem when I next see you so you can try and write a conversion routine... Mem : This is the absolute start address of the module in memory. Why? Because I thought you might find it handy. As far as I know the library "ptreplay.library" allocates memory for the module as low in memory as possible. It is perfectly safe   .to click on the close gadget without pressing STOP first because I've added a check routine: tst.l Stopped bne.b ClWin bsr StopUnloadModule ClWin move.l IntBAdr(pc),a6 move.l WinPtr(pc),a0 jsr -$48(a6) ;CloseWindow(a0)int . . . and so on... . . . until... . . . rts Oh, before I forget, here are a few extra notes about PlayPT I thought you might like to know... * The program auto-detatches itself from the Shell task it was launched from so you won't be needing that 0lO RUN command. * It accepts a command line like this for example: > playpt cd0:music/protracker/a-d/mod.pesky command line This will load up PlayPT and place the command line in the string gadget. * Note that with the command line you don't use quotes (") so the following is very much incorrect: > playpt "cd0:music/protracker/a-d/mod.pesky command line" * The size of the first PlayPT was 1128 bytes. The size of the second that didn't free the task up is 2172 bytes and the s ~ize of the version that auto-detatches from the task is 2388 bytes. Considering that I've added a complete GUI (minus file requester - that would add 50Kb to the size of the program) with a couple frilly extensions the best version is only 1260 bytes larger! * Please note that you NEED to first stop the module before a new module can be loaded with PLAY. Last Notes ---------- The date is now 22-Feb-98 and a couple weeks ago I added the routine to convert from hex to decim U֬al which is why there are two different versions included in the archive. Skl! EOF5! pE%PTReplay.librarypu@upNuJz 0`ptreplay.libraryptreplay.library 6.6 (1996-03-20) dos.library4pH0vzn(8,frz 0/ *@+N$+H,CBpN+@(fH.<,yNL`B0#j *_NuH>*N,xJm fX <\"<,xNT#|gN"@|A%#H \#@:#@6#@>EN,m(rN:Rm " L|Nup\0L|NuH*NL@Sm fLN#f"y|p NpN"y|,xN"y|NN-"gL``pL`NuH *N,m$Jm g "p`&$-,"MN"m(Nbp"M0-mN. L`NupNuH,g(N,l$ <r"<N:Jg>*@|,l("$<N*g"tvNgp"tvNg^ <r,l$N.pLp`Nug.H(N*H"m -,l$N."M> <rN.LpNuH 1f7g*H(N;|9|#ba@ -f @a maC,l$N+@ g,m +|$Cx"#|A#H#M0<;@2NJg0<;@2CBNJg&p`n m$C+I(C+I,|1|0` m$C+I(C+I,|1|0 m(-1"m, <}@@-0+MpLuNuHgB*H(Np#b g( m(-10-2C,m Na~+|pLpNug 1| a\Nug1| NuH0gTJ@fN*H&p,xNR@g6N g"+@BCCpSBN RNL` Nug g1@Nug(NupNug P(NupNug PA0NupNug0(HNupNug PA<ЁNupNuH g(*HR@RARBRC,xN+@L`NuH*g.(N,l$ <r"<N:Jg>*@|+ELp Nu/ g"H,x> <rN.,_NugJ@fN g @@Nug~/ E/"aCgBi#J3|gBi#J3|gBi#J3|gBi#J3|@ _(3@$_Nug) / E/"aCgBi#J3|gBi#J3|gBi#J3|gBi#J3| _@ ( 3@$_Nug@0<NuH?>gV*N4,xNf& @pDNr$@GAX0,#,#g*B,# , r2,ЁЁ l$RHe l )H$pLNu?p..gQ2Nu  +@1JaxŴxaJ1X(\:}hS@. xqR"}Y7{eQ>, ~wqLxU3xcO<* }vpFtP/u`L:(}vo@ K}GpoL+ r^J8&|un: kH'p[H5${tm4fD#mYE3"zsm.b?kVC1 yrlX(\:}hS@. xR"|Y7{eQ>, ~w~LxU3xcO<* v&}vwFtP/u`L:(}vq@oL+ r^J8&{uk: kH'p[H5${td4fD#mYE3"zs^.b?kVC1 yrH~,xNfHHKL+g4 @pD,xNrHHK<*g @| U1| |@ UBh HC\!I""Up#@ n&Anp",xNDJgp`R Yfh"y<| "y<3| ,xN8"y<3| N2"y@| "y@3| N8"y@3| N2"yD| "yD3| N8"yD3| N2"yH| "yH3| N8"yH3| N2pL`NuH~|A<*ph"M,xN,Jg"MN&AL"php)rpNrpr mf" yb,yja;| "M,xN2`, yb,yja;| "M,xN8;| "MN2RX Yf^L`NuH~HHA<*p"M,xN "MN&p mf ;| "MN8 MNlHHAL! PN`R Yf"yfp,xNpNL`Nuatp,xN`rp. yL"yP$yT&yXp+rp*tp)vp(xĈ$B ,xN* gaʇg yb,yja`a8`audio.deviceaudio.deviceptreplay_ctrltaskptreplay_serverciaa.resourceQ dhlptx|#}>n6,N|.>JZz2n&,@"#('&%$# E% PlayPTdec_p"$!@&@&<oCNf<<,xN*@Jg8CRpN,@"<t- A&B(<Nv"N,xNbpNuA\NA\N#"Ndos.libraryPlayPT_1018tzCa#gCa# g Ca#g,zAN4#dg @#V#2a z,xN z,xN @*@/(.("@,xN _p0(&|@g|g`Jfa,zL zN"zDa."zBa("z4a"J"g ,x"zBNpNu,xpN,x"%|eNb,z"zpNpr~KVaKap0r(~K]a <r(~KOaNuKz)a`Kz!a`jCa#,@gC" N."$ &N"NNu<g <g`Jg,zfAN#g,zP z`NJg zR PCp 2 QCf< K|*Play+|ing:pr~aA P (AZHaJ"z AtaKa#`JfaXA Stop!|ped:pr~ KaKO|-+|----;|-- +|----+|----a^#`,z\ zlN,zP z`Nܴ|g Ka,`Ka"`"&r̸|,z" z2NKa`hp r4~aNu,z"zN"z  MNA!|????1|?? !|????!|????NuHC"1QLNuH*H.,xCNh#g.,~"<B@( a$a*, r a("Q,x"zhNbLNu,zZNd@0Nu$VER: PlayPT v1.01 (03-Feb-98)dos.libraryintuition.librarygraphics.libraryptreplay.libraryutility.library*0123456789ABCDEFERROR: Unable to open "ptreplay.library" ERROR: Unable to open the window File not found Not a Protracker module Siz"'31e ------- Mem $--------Unable to play module :@V2PlayPT v1.01Status : *NO MODULE LOADED* PLAYSTOPN  *   N* Coded 4 TBSNC in 1998 *"(Ȝ`Wz r { r  q qq  q q q ' .DRZ`@Jx8@*N"0`d)*-q+*6E%PlayPTdec.infop)+ZL6xDxFH6UUUUU\UUUUU\UUUWU\UUUWU\Uw_U\UwU\UuwU\UwU\U}U\UUUUU\UUUUU\}UUU\wUUU\ww}\}w\u\uu\u}\UU_UU\UUUUU\UUUUUPUUUUUPUUUQUPUUUQUPUDAAUPUDDUPU@DUPTDDUPTDAAUPUUUUUPUUUUUPUUUPUUUPDAPDPDP@PTAPUUAUUPUUUUUP6UUUUUPU)N54UUUUP_]}uPUww}PWwPWw}PWW]PUwW]P_}PUUUUUPUUUUUPUUUuUUU_UU]}_U]}]wU}__UUUUUUPUUUUUPUUUUU\UUUUU\PAE\EPA\DPE\ATA\DTQPE\ETQPE\P\UUUUU\UUUUU\UUT\UUTT\PAT\TUD\@@UD\EDTD\P@UUUUUU\UUUUU\,- /.-GE%PlayPT.doc.info5p,.YAxGxY(x &xWpApaaaaaaaaaUUUUUUTUUUUUUTUU[UU]dUU[UU] dUU[UU] dUU[2dUU]2ddUU[2dUU]2ddUU[UU]d,/QiUU[UU]dUU[UU]dUU[UU]dUUPUUUUUUTAP```aPATC`aUQTC`aDC`aQEC`aDUC`aQEC``UUUUUUTUUUUUUTT_T?U]]}~~>_~:_~n:_~~:,w}_~n:_~:_?z@UUUUUUT C:PPMore0154321 LE% PlayPThexp02s⨯@&@&<gCf<<,xN*@Jg8CRpN,@"<t- A&B(<Nv"N,xNbpNuA\NA\N#Ndos.libraryPlayPT_1018tzCa#gCa#g"C}a#g,z^AzN4#g @#V#2a zB,xN z6,xN @*@/(.("@,xN _p0(&|@g|g`Jfa,z z:N"za0"za*"za$Jg,x"yNpNu,xpN,x03*Nb,z"zpNpr~KaK=ap0r(~Ka <r(~KaNuKz)a`~Kz!a`fC'a#,@gCW" N."$ &N"NNu<g <g`Jg,zA2N#g ,z zNJg z PC+p 2 QCf< K*Play+|ing:pr~aA P (ACA ta$"z AtaK%a#`Jf aRA Stop!|ped:pr~ KaK+|----;|-- +|----+|----a^#`,z zN,z zNܴ|g Koa,`KIa"`04ր?#,z zNKa`fp r4~aNu,z"zN"z  MNA7!|????1|?? !|????!|????NuHC"1QLNu$VER: PlayPT v1.01 (03-Feb-98)dos.libraryintuition.librarygraphics.libraryptreplay.library*0123456789ABCDEFERROR: Unable to open "ptreplay.library" ERROR: Unable to open the window File not found Not a Protracker module Size $------ Mem $--------Unable to play module :@05l2PlayPT v1.01Status : *NO MODULE LOADED* PLAYSTOP  JZf v  * Coded 4 TBSNC in 1998 *0ˬ!N  r 6n{ r 6nFR q qbq ~ q qq ( .DRZdHRJ0@RVnr >BZvz67K$;:987E% PlayPT.infop68U9xux|8xxk+*IxkNx\D9? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" U69=|pU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU.6:x*. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUP9poUS UR``]SUU@UUUUUW @@@@@ @T`@`@ @@5UUUUUV 6;ľ  ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 6A 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU% Icon by Martin Huttenloher <=k̘A@?>=E%mUZiKto0lz.infop<>x9x 38x H<xxSXeDxSx\D9? /W//A./A*-A*/U*:?00 W UE+UPEU. EUX D" U<?=ppU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUPW UE+UPEU.<@x*>{ EUX D" UpU UUxUUUUUPW UE+UPEU. EUX D" UpU UUxUUUUUP9poUS UR``]SUU@UUUUUW @@@@@ @T`@`@ @@5UUUUUV <Aľ ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO <A 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU ?\?U[?@W|=UZ?]5]XJ;%w?UUO 5UUUUUU% Icon by Martin Huttenloher BCZYXWVUTSRQPONMLKJIHGFEDC,E% TemCon2.epBDኬ/****************************************\ ** Temperature Convertor v2.00 (TemCon) ** ** By Zebedee/Carnage^TFL (31-Oct-96) ** ** Written using E (v3.1i registered) ** \****************************************/ MODULE 'gadtools','exec/ports','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','reqtools','tools/file', 'libraries/reqtools','graphics/rastport' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_LIB,ERR_PUB,ERR_VIS,ERR_WIN RAISE EBEBQRR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_LIB IF OpenLibrary()=NIL, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL ENUM GDBT_I,GDBT_II,GDBT_III,GDBT_IV,GDBT_V,GDBT_VI,GDBT_VII,GDBT_VIII, GDBT_IX,GDBT_ZERO,GDBT_DOT,GDBT_DELETE,GDBT_TOC,GDBT_TOF,GDBT_TOK, GDBT_CLEAR,GDBT_ABOUT DEF topaz80,mywin=NIL:PTR TO window,temps[255]:STRINBF-)G,number=0.0,ctr:PTR TO LONG PROC handleGadgetEvent(gad:PTR TO gadget) DEF id id:=gad.gadgetid SELECT id CASE GDBT_ZERO number:=addNumber(0) CASE GDBT_I number:=addNumber(1) CASE GDBT_II number:=addNumber(2) CASE GDBT_III number:=addNumber(3) CASE GDBT_IV number:=addNumber(4) CASE GDBT_V number:=addNumber(5) CASE GDBT_VI number:=addNumber(6) CASE GDBT_VII number:=addNumber(7) CASE GDBT_VIII BG8M{ number:=addNumber(8) CASE GDBT_IX number:=addNumber(9) CASE GDBT_TOC number:=(number-32.0)*5.0/9.0 updateDisplay(number) CASE GDBT_TOF number:=number*9.0/5.0+32.0 updateDisplay(number) CASE GDBT_TOK number:=number+273.16 updateDisplay(number) CASE GDBT_CLEAR number:=0.0 updateDisplay(number) CASE GDBT_DELETE number:=removeLast() CASE GDBT_ABOUT about() ENDSELECT ENDPROC PROC removeLastBHW() DEF val=0.0:PTR TO LONG val:=(number/10.0) RealF(temps,val,2) val,ctr:=RealVal(temps) updateDisplay(val) ENDPROC val PROC addNumber(num) DEF val=0.0:PTR TO LONG RealF(temps,number,2) IF StrLen(temps)<11 val:=(number*10.0) SELECT num CASE 1 val:=val+.01 CASE 2 val:=val+.02 CASE 3 val:=val+.03 CASE 4 val:=val+.04 CASE 5 val:=val+.05 CASE 6 val:=val+.06 CASE 7 vaBI==l:=val+.07 CASE 8 val:=val+.08 CASE 9 val:=val+.09 ENDSELECT updateDisplay(val) ENDIF ENDPROC val PROC handleVanillaKey(code) SELECT "w" OF code CASE "0" number:=addNumber(0) CASE "1" number:=addNumber(1) CASE "2" number:=addNumber(2) CASE "3" number:=addNumber(3) CASE "4" number:=addNumber(4) CASE "5" number:=addNumber(5) CASE "6" number:=addNumber(6) CASE "7" BJxB number:=addNumber(7) CASE "8" number:=addNumber(8) CASE "9" number:=addNumber(9) CASE "c","C" number:=(number-32.0)*5.0/9.0 updateDisplay(number) CASE "f","F" number:=number*9.0/5.0+32.0 updateDisplay(number) CASE "k","K" number:=number+273.16 updateDisplay(number) CASE "l","L" number:=0.0 updateDisplay(number) CASE ",","<" number:=removeLast() CASE "?" about() ENDSELECT ENDPRBKѶOC PROC showAddress() StrCopy(temps,'Contact me:\n\n72 Hessary Drive\nBelliver\nPlymouth\nDevon\nPL6 7DQ\nEngland') RtEZRequestA(temps,'_Ok',0,0,[RTEZ_REQTITLE,'About...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ENDPROC PROC showBugs() StrCopy(temps,'1. The delete button (<) doesn''t\n') StrAdd(temps,' seem to work properly. Use CLEAR.\n') StrAdd(temps,'2. If you try and use more than 8 digits\n') StrAdd(temps,' the display goes a bit erratic!') RtEZRB LeydequestA(temps,'_Ok',0,0,[RTEZ_REQTITLE,'Bugs...',RT_UNDERSCORE,"_",NIL]) ENDPROC PROC showWhy() StrCopy(temps,'I wrote TemCon because I haven''t\n') StrAdd(temps,'seen a temperature conversion util\n') StrAdd(temps,'before on the Amiga. Here''s mine!\n\n') StrAdd(temps,'TemCon is fully Public Domain') RtEZRequestA(temps,'_Ok',0,0,[RTEZ_REQTITLE,'Why...?',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ENDPROC PROC about() DEF opt:PTR TO LONG REPEAT StrCopy(tB M#Twemps,'TemCon v2.00 (31-Oct-96)\n') StrAdd(temps,'by Zebedee/Carnage^TFL\n\n') StrAdd(temps,'K=Kelvin\nC=Centigrade\nF=Fahrenheit\n\n') StrAdd(temps,'1996 A Carnage Production') opt:=RtEZRequestA(temps,'_Why?|_Address|_Bugs|_Cancel',0,0,[RTEZ_REQTITLE,'About...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL]) SELECT opt CASE 1;showWhy() CASE 2;showAddress() CASE 3;showBugs() ENDSELECT UNTIL opt=0 ENDPROC PROC upB N2-dateDisplay(answer) DEF value[10]:STRING RealF(value,answer,2) StrCopy(temps,'') FOR ctr:=10 TO StrLen(value) STEP -1 StrAdd(temps,' ') ENDFOR StrAdd(temps,value) PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,temps,NIL]:intuitext,12,15) ENDPROC PROC createAllGadgets(glistptr:PTR TO LONG,vi,topborder) DEF gad,ng:PTR TO newgadget gad:=CreateContext(glistptr) ng:=[140,(20+topborder),200,12,NIL,topaz80,NIL,NG_HIGHLABEL,vi,0]:newgadget ngB O! U.leftedge := 8 ng.topedge := 26 ng.width := 32 ng.gadgettext := '_7' ng.gadgetid := GDBT_VII ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 40 ng.gadgettext := '_8' ng.gadgetid := GDBT_VIII ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 72 ng.gadgettext := '_9' ng.gadgetid := GDBT_IX ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gB P|bad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 8 ng.topedge := 38 ng.gadgettext := '_4' ng.gadgetid := GDBT_IV ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 40 ng.gadgettext := '_5' ng.gadgetid := GDBT_V ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 72 ng.gadgettext := '_6' ng.gadgetid := GDBT_VI ng.flags := 0 gad:=CreateGadgetA(BUTTBQucON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 8 ng.topedge := 50 ng.gadgettext := '_1' ng.gadgetid := GDBT_I ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 40 ng.gadgettext := '_2' ng.gadgetid := GDBT_II ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 72 ng.gadgettext := '_3' ng.gadgetid := GDBT_III ng.flags := 0 gad:=CreateGaBRw-dgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 8 ng.topedge := 62 ng.gadgettext := '_0' ng.gadgetid := GDBT_ZERO ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 40 ng.gadgettext := '_?' ng.gadgetid := GDBT_ABOUT ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 72 ng.gadgettext := '_<' ng.gadgetid := GDBT_DELETE ng.flags :BS*2= 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 8 ng.topedge := 74 ng.gadgettext := '_C' ng.gadgetid := GDBT_TOC ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 40 ng.gadgettext := '_F' ng.gadgetid := GDBT_TOF ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 72 ng.gadgettext := '_K' ng.gadgetid := GDBT_TOK ngBTr.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ng.leftedge := 8 ng.topedge := 86 ng.width := 96 ->64 ng.gadgettext := 'C _L E A R' ng.gadgetid := GDBT_CLEAR ng.flags := 0 gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL]) ENDPROC gad PROC process_window_events(mywin:PTR TO window) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad,wanted=TRUE WHILE wanted Wait(Shl(1,mywin.userport.sigbit)) WHIBUoXLE (wanted) AND (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress imsgClass:=imsg.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_GADGETDOWN handleGadgetEvent(gad) CASE IDCMP_MOUSEMOVE handleGadgetEvent(gad) CASE IDCMP_GADGETUP handleGadgetEvent(gad) CASE IDCMP_VANILLAKEY handleVanillaKey(imsgCode) CASE IDCMP_CLOSEWINDOW IF (RtEZRequestA('Are you sure?','_YBV0es|_NO!',0,0,[RTEZ_REQTITLE,'Quit',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=1) THEN wanted:=FALSE CASE IDCMP_REFRESHWINDOW Gt_BeginRefresh(mywin) Gt_EndRefresh(mywin,TRUE) ENDSELECT ENDWHILE ENDWHILE ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO screen,glist=NIL,vi,topborder topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,BWL[NIL]) topborder:=mysc.wbortop+mysc.font.ysize+1 createAllGadgets({glist},vi,topborder) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'TemCon', WA_SCREENTITLE,'CARNAGE - Always where you never expect us to be!', WA_GADGETS, glist, WA_AUTOADJUST, TRUE, WA_LEFT, 0, WA_TOP, 11, WA_WIDTH, 112, WA_MINWIDTH, 50, WA_HEIGHT,BXZg 102, WA_MINHEIGHT, 50, WA_DRAGBAR, TRUE, WA_DEPTHGADGET, TRUE, WA_ACTIVATE, TRUE, WA_CLOSEGADGET, TRUE, WA_RMBTRAP, TRUE, WA_SMARTREFRESH, TRUE, WA_IDCMP,IDCMP_CLOSEWINDOW OR IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR STRINGIDCMP OR BUTTONIDCMP, WA_PUBSCREEN,mysc,NIL]) Gt_RefreshWindow(mywin,NIL) DrawBevelBoxA(mywinBYڱ;*.rport,8,13,96,12,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) -> Zebedee PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,' 0.00',NIL]:intuitext,12,15) process_window_events(mywin) EXCEPT DO IF mywin THEN CloseWindow(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC main() HANDLE KickVersion(37) gadtoolsbase:=OpenLibrary('gadtools.library',37BZԍ) reqtoolsbase:=OpenLibrary('reqtools.library',37) gadtoolsWindow() EXCEPT DO IF reqtoolsbase THEN CloseLibrary(reqtoolsbase) IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) SELECT exception CASE ERR_FONT; WriteF('ERROR: successed to open Topaz 80\n') CASE ERR_GAD; WriteF('ERROR: createAllGadgets() successed\n') CASE ERR_KICK; WriteF('ERROR: Requires Kickstart v37\n') CASE ERR_LIB; WriteF('ERROR: Requires v37 of gadtools.library and reqtools.library\n') B$k?5 CASE ERR_PUB; WriteF('ERROR: Couldn''t lock default public screen\n') CASE ERR_VIS; WriteF('ERROR: GetVisualInfoA() successed\n') CASE ERR_WIN; WriteF('ERROR: OpenWindow() successed\n') ENDSELECT ENDPROC vers: CHAR '$VER: TemCon TEMperature CONvertor v2.00 (31-Oct-96)',0[H]@U~}|{zyxwvutsrqponmlkjihgfedcba`_^]pE%WoF.e p\\G[[^q-> WoF.e v1.00 by Zebedee/A51 (03-Nov-97) -> An Amiga Workbench game conversion of the TV game "Wheel of Fortune" -> Not yet finished! OPT PREPROCESS ->#define debug MODULE 'gadtools','exec/ports','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','libraries/reqtools', 'reqtools','graphics/rastport' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_PUB,ERR_VIS,ERR_WIN RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, [_"Q ERR_KICK IF KickVersion()=FALSE, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL ENUM GDBT_SPIN,GDBT_BUY,GDBT_SOLVE,GDBT_MT1,GDBT_CLEAR,GDBT_SAVE,GDBT_ENTER, GDBT_CONVERT,GDBT_NEW,GDBT_SHOW,GDBT_MT3,GDBT_ABOUT,GDBT_A,GDBT_B, GDBT_C,GDBT_D,GDBT_E,GDBT_F,GDBT_G,GDBT_H,GDBT_I,GDBT_J,GDBT_K,GDBT_L, GDBT_M,GDBT_N,GDBT_O,GDBT_P,GDBT_Q,GDBT_R,GDBT_S,GDBT_T,GDBT_U,GDBT_V, GDBT_W,GDBT_X,GDBT_Y,GD[`({BT_Z,GDCB_CLUE,GDCB_HIDDEN /***************************************************************************\ ** VARIABLE DEFINITIONS ** \***************************************************************************/ DEF topaz80,mywin=NIL:PTR TO window,wanted=TRUE,my_gads[40]:ARRAY OF LONG, temps[255]:STRING,vi,tempi:PTR TO LONG,hide,clue, puzzlehide[53]:STRING,pl1[13]:STRING,pl2[13]:STRING,pl3[13]:STRING, pl4[13]:STRING,wheel[[ag`72]:LIST,puzzlet[255]:STRING,puzzlen[255]:STRING, req:PTR TO rtfilerequester,pl1score=0:PTR TO LONG,pl2score=0:PTR TO LONG, pl3score=0:PTR TO LONG,pl4score=0:PTR TO LONG,pl1total=0:PTR TO LONG, pl2total=0:PTR TO LONG,pl3total=0:PTR TO LONG,pl4total=0:PTR TO LONG, player=1:PTR TO LONG,fs1=0:PTR TO LONG,fs2=0:PTR TO LONG,fs3=0:PTR TO LONG, fs4=0:PTR TO LONG,luck=0:PTR TO LONG,buf[255]:STRING,srcn[255]:STRING, trgn[255]:STRING,src[255]:STRING,trg[255]:STRING,cons[bbR=0:PTR TO LONG, a=0:PTR TO LONG,b=0:PTR TO LONG,c=0:PTR TO LONG,d=0:PTR TO LONG, e=0:PTR TO LONG,f=0:PTR TO LONG,g=0:PTR TO LONG,h=0:PTR TO LONG, i=0:PTR TO LONG,j=0:PTR TO LONG,k=0:PTR TO LONG,l=0:PTR TO LONG, m=0:PTR TO LONG,n=0:PTR TO LONG,o=0:PTR TO LONG,p=0:PTR TO LONG, q=0:PTR TO LONG,r=0:PTR TO LONG,s=0:PTR TO LONG,t=0:PTR TO LONG, u=0:PTR TO LONG,v=0:PTR TO LONG,w=0:PTR TO LONG,x=0:PTR TO LONG, y=0:PTR TO LONG,z=0:PTR TO LONG,cluet[28]:STRING,filep[ctr=NIL, puzzleuse=1:PTR TO LONG,puzzlemax:PTR TO LONG,words:PTR TO LONG, l1[15]:STRING,l2[15]:STRING,l3[15]:STRING,l4[15]:STRING /***************************************************************************\ ** HANDLE GADGET EVENTS ** \***************************************************************************/ PROC handleGadgetEvent(gad:PTR TO gadget,code) DEF id id:=gad.gadgetid StrCopy(temps,gad.specialinfo::stringin[d}JTfo.buffer) SELECT id CASE GDBT_SPIN;spinWheel() CASE GDBT_BUY;showMessage('Please select a VOWEL') CASE GDBT_SOLVE;StrCopy(temps,getString('So you think you know what it is, eh?','_Ok','',50)) CASE GDBT_CLEAR tempi:=rtRequest('Clear...','Please select','_Totals|_Scores|_Cancel',0) IF tempi=1 pl1total:=0 pl2total:=0 pl3total:=0 pl4total:=0 ENDIF IF tempi=2 pl1score:=0 pl2score:=0 pl3score[e;F:=0 pl4score:=0 ENDIF CASE GDBT_SAVE;letterBox(22,35) CASE GDBT_NEW; IF rtRequest('New Puzzle...','Use a new puzzle file?','_Yes|_No',0)=1 StrCopy(puzzlen,requestFile('Select puzzle file...','#?.wof')) ENDIF CASE GDBT_SHOW; IF rtRequest('Show Answer...','Show the answer\nand use the next?','_Yes|_No',0,TRUE)=1 getNextPuzzle(FALSE) showPuzzle() ENDIF CASE GDBT_ENTER tempi:=rtRequest('Enter Names...','P[ fd#)lease select player','_1|_2|_3|_4|_Cancel',0) SELECT tempi CASE 1 StrCopy(pl1,getString('Enter your name player 1','_Ok',pl1,13)) CASE 2;StrCopy(pl2,getString('Enter your name player 2','_Ok',pl2,13)) CASE 3;StrCopy(pl3,getString('Enter your name player 3','_Ok',pl3,13)) CASE 4;StrCopy(pl4,getString('Enter your name player 4','_Ok',pl4,13)) ENDSELECT updatePlayerInfo(tempi) showCurrentPlayer(player) CASE GDBT_CONVE[ gHإ Clue & puzzle bevelBox(12,15,233,12,TRUE) -> Clue bevelBox(12,28,233,64,TRUE) -> Puzzle bevelBox(256,13,226,81,FALSE) -> Gadgets bevelBox(8,96,474,15,FALSE) -> A-Z bevelBox(8,113,314,44,FALSE) [ }q -> Player info bevelBox(326,113,18,44,FALSE) -> Countdown bar bevelBox(348,113,134,11,FALSE) -> Prize bevelBox(348,126,134,31,FALSE) -> Preferences bevelBox(8,159,474,11,FALSE) -> Message box printText(1,13,115,' Total Score Free Player''s Name',1) FOR tempi:=1 TO 4 updatePlayerInfo(tempi) ENDFOR showCurrentPlayer(player) gadgetState(GDBT_MT1,FALSE) #ifndef debug gadgetState(GDBT_MT3,FALSE) #endif gadgetState(GDCB_HIDD[!~iEN,FALSE) showClue(cluet) clearPuzzle() showPuzzle() showPrize('BANKRUPT') showMessage('YOU CAN SPIN, BUY A VOWEL, OR SOLVE THE PUZZLE') StrCopy(temps,'Wheel:') StrAdd(temps,puzzlen) processWindowEvents() EXCEPT DO IF fileptr THEN Close(fileptr) IF mywin THEN CloseWindow(mywin) FreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC updatePlayerInfo(pl) DEF ypos:PTR TO["& LONG,fs:PTR TO LONG,total:PTR TO LONG,score:PTR TO LONG SELECT pl CASE 1;ypos:=124;StrCopy(temps,pl1);fs:=fs1;total:=pl1total;score:=pl1score CASE 2;ypos:=132;StrCopy(temps,pl2);fs:=fs2;total:=pl2total;score:=pl2score CASE 3;ypos:=140;StrCopy(temps,pl3);fs:=fs3;total:=pl3total;score:=pl3score CASE 4;ypos:=148;StrCopy(temps,pl4);fs:=fs4;total:=pl4total;score:=pl4score ENDSELECT StringF(temps,'\d[6] \d[6] \d[2] \s',total,score,fs,temps) printText(0,213,[#Jypos,'XXXXXXXXXXXXX') -> Clear the player's name place first printText(1,13,ypos,temps) ENDPROC PROC showCurrentPlayer(pl) SELECT pl CASE 1;printText(2,205,124,'>');printText(0,205,148,' ') CASE 2;printText(2,205,132,'>');printText(0,205,124,' ') CASE 3;printText(2,205,140,'>');printText(0,205,132,' ') CASE 4;printText(2,205,148,'>');printText(0,205,140,' ') ENDSELECT ENDPROC PROC showFreeSpins(pl) SELECT pl CASE 1;StringF(temps,'\d[2]',fs1);printText[$6((1,173,124,temps) CASE 2;StringF(temps,'\d[2]',fs2);printText(1,173,132,temps) CASE 3;StringF(temps,'\d[2]',fs3);printText(1,173,140,temps) CASE 4;StringF(temps,'\d[2]',fs4);printText(1,173,148,temps) ENDSELECT ENDPROC /***************************************************************************\ ** DRAW A BEVEL BOX ** \***************************************************************************/ PROC bevelBox(x,y,w,[%Bh,recessed=FALSE,frame=BBFT_BUTTON) IF recessed DrawBevelBoxA(mywin.rport,x,y,w,h,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,GTBB_FRAMETYPE,frame,NIL]) ELSE DrawBevelBoxA(mywin.rport,x,y,w,h,[GT_VISUALINFO,vi,GTBB_FRAMETYPE,frame,NIL]) ENDIF ENDPROC /***************************************************************************\ ** ENABLE AND DISABLE A GADGET ** \************************************************************************[&G***/ PROC gadgetState(gad_id,enable) IF enable THEN OnGadget(my_gads[gad_id],mywin,NIL) ELSE OffGadget(my_gads[gad_id],mywin,NIL) ENDPROC /***************************************************************************\ ** OPEN A REQTOOLS REQUESTER TO SHOW INFO & ASK QUESTIONS ** \***************************************************************************/ PROC rtRequest(title,body,buttons,default,centre=FALSE) IF centre tempi:=RtEZRequestA(body,buttons,0,0,[RTE['~2Z_REQTITLE,title,RT_UNDERSCORE,"_",RTEZ_FLAGS,EZREQF_CENTERTEXT,RTEZ_DEFAULTRESPONSE,default,NIL]) ELSE tempi:=RtEZRequestA(body,buttons,0,0,[RTEZ_REQTITLE,title,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,default,NIL]) ENDIF ENDPROC tempi /***************************************************************************\ ** CENTRE THE TEXT IN THE CLUE/PRIZE/MESSAGE BOX ** \***************************************************************************/ PROC showC[((lue(txt) printText(0,16,17,'XXXXXXX Clue is Off XXXXXXXX') printText(1,128-(StrLen(txt)*4),17,txt) ENDPROC PROC showPrize(txt) printText(0,351,115,'XXX BANKRUPT XXX') printText(1,415-(StrLen(txt)*4),115,txt) ENDPROC PROC showMessage(txt) printText(0,13,161,'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') printText(1,245-(StrLen(txt)*4),161,txt) ENDPROC PROC clearPuzzle() SetAPen(mywin.rport,0) FOR tempi:=29 TO 90 Move(mywin.rport,14,tempi) Draw[)FfB(mywin.rport,242,tempi) ENDFOR ENDPROC PROC showPuzzle() DEF chr[1]:STRING,wordlen[20]:ARRAY OF LONG,chrcount:PTR TO LONG, last=0:PTR TO LONG,line=1:PTR TO LONG,la,lb,lc,ld a:=0;b:=0;c:=0;d:=0;e:=0;f:=0;g:=0;h:=0;i:=0;j:=0;k:=0;l:=0;m:=0 n:=0;o:=0;p:=0;q:=0;r:=0;s:=0;t:=0;u:=0;v:=0;w:=0;x:=0;y:=0;z:=0;cons:=0 clearPuzzle() printText(2,52,17,'! CREATING PUZZLE !',2) printText(2,72,53,'Please wait...',4) IF clue THEN showClue(cluet) StrCopy(puzzlehide,'') wor[*ds:=1 chrcount:=-1 FOR tempi:=0 TO StrLen(puzzlet) MidStr(chr,puzzlet,tempi,1) INC chrcount IF StrCmp(chr,' ',1) wordlen[words]:=chrcount chrcount:=-1 INC words ENDIF IF (Char(chr)>=65) AND (Char(chr)<=90) THEN StrAdd(puzzlehide,'*') ELSE StrAdd(puzzlehide,chr) ENDFOR last:=0 FOR tempi:=1 TO words-1 last:=last+wordlen[tempi] ENDFOR wordlen[words]:=StrLen(puzzlet)-(words-1)-last #ifdef debug WriteF('==========showPuzzle()======[+====\n') WriteF('WORD:\s\nHIDE:\s\n',puzzlet,puzzlehide) FOR tempi:=1 TO words WriteF('word[\d]:=\d\n',tempi,wordlen[tempi]) ENDFOR WriteF('==============END===============\n') #endif /**TRY AND FIT THE PUZZLE IN THE CAPTION BOX**/ StrCopy(l1,'');StrCopy(l2,'');StrCopy(l3,'');StrCopy(l4,'') line:=1 la:=0 boxLetters(puzzlehide,35) #ifdef shareware WriteF('Chars on line 1: \d\n',la) #endif ENDPROC PROC boxLetters(text,ypos) DEF chr[1]:STRING,xpos:PTR TO LONG [,R clearPuzzle() -> 128-(StrLen(txt)*4) xpos:=128-((StrLen(puzzlehide)*14)/2) FOR tempi:=0 TO StrLen(puzzlehide) MidStr(chr,text,tempi,1) IF StrCmp(chr,'*') THEN letterBox(xpos,ypos) xpos:=xpos+14 ENDFOR ENDPROC PROC letterBox(x,y) bevelBox(x,y,14,11,TRUE) SetAPen(mywin.rport,1) Move(mywin.rport,x+3,y+8) Text(mywin.rport,'*',1) ENDPROC /***************************************************************************\ ** PRINT INTUITEX[-RabT IN THE WINDOW ** \***************************************************************************/ PROC printText(pen,x,y,text,style=0) PrintIText(mywin.rport,[pen,0,RP_JAM2,0,0,['topaz.font',8,style,0]:textattr,text,NIL]:intuitext,x,y) ENDPROC /***************************************************************************\ ** OPEN A BASIC REQUESTER VIA INTUITION TO REPORT PROGRAM ERRORS ** \***************************************************************[.R1************/ PROC fatalError(text) EasyRequestArgs(0,[SIZEOF easystruct,0,'Error...',text,'Ok']:easystruct,0,0) ENDPROC /***************************************************************************\ ** LOAD THE PREFS FILE ** \***************************************************************************/ PROC loadPrefs() DEF fptr,buffer[32]:STRING IF fptr:=Open('S:WheelOfFortune.prefs',OLDFILE) Read(fptr,buffer,4) IF Str[/&Cmp(buffer,'WoFP',4) Read(fptr,buffer,4) IF StrCmp(buffer,'0100',4) Read(fptr,buffer,13) StrCopy(pl1,buffer) Read(fptr,buffer,6) pl1total:=Val(buffer,NIL) Read(fptr,buffer,13) StrCopy(pl2,buffer) Read(fptr,buffer,6) pl2total:=Val(buffer,NIL) Read(fptr,buffer,13) StrCopy(pl3,buffer) Read(fptr,buffer,6) pl3total:=Val(buffer,NIL) Read(fptr,buffer,13) StrCopy(pl4,bu[0bffer) Read(fptr,buffer,6) pl4total:=Val(buffer,NIL) Read(fptr,buffer,32) StrCopy(puzzlen,buffer) Read(fptr,buffer,6) -> RESERVED!!! Read(fptr,buffer,6) puzzleuse:=Val(buffer,NIL) Read(fptr,buffer,1) IF StrCmp(buffer,'1',1) THEN clue:=TRUE ELSE clue:=FALSE Read(fptr,buffer,1) IF StrCmp(buffer,'1',1) THEN hide:=TRUE ELSE hide:=FALSE Read(fptr,buffer,1) player:=Val(buffer,[1/NIL) ELSE rtRequest('Error...','Invalid prefs file!\nUsing default settings!','_Ok',0,TRUE) initDefaultVars() ENDIF ELSE rtRequest('Error...','Not a Wheel of Fortune prefs file!\nUsing default settings!','_Ok',0,TRUE) ENDIF Close(fptr) ELSE rtRequest('Error...','Unable to load prefs file!\nUsing default settings!','_Ok',0,TRUE) initDefaultVars() ENDIF ENDPROC PROC initDefaultVars() StrCopy(pl1,'Zebedee') StrCopy(pl2,'Liz'[2) StrCopy(pl3,'-') StrCopy(pl4,'-') pl1score:=0;pl2score:=0;pl3score:=0;pl4score:=0 -> Clear scores pl1total:=0;pl2total:=0;pl3total:=0;pl4total:=0 -> Clear totals fs1:=0;fs2:=0;fs3:=0;fs4:=0 -> Clear free spins player:=0 StrCopy(puzzlen,'WHEEL:Wheel.wof') StrCopy(puzzlet,'Snow White and the Seven Drawfs') ENDPROC PROC getString(txt,buttons,use,len) DEF text[255]:STRING StrCopy(text,use) IF req:=RtAllocRequestA(RT_REQINFO,NIL) RtGetStrin[3۷&OgA(text,len,NIL,req,[RTGS_GADFMT,buttons,RTGS_TEXTFMT,txt,RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) RtFreeRequest(req) ELSE rtRequest('Error...','Unable to open requester!','_Ok',0) ENDIF ENDPROC text PROC spinWheel() DEF rand:PTR TO LONG,value:PTR TO LONG showMessage('The wheel is spinning...') rand:=Rnd(40)+1 #ifdef debug rand:=5 #endif SetAPen(mywin.rport,1) FOR tempi:=154 TO 115+(40-rand) STEP -1 Move(mywin.rport,330,tempi) Draw(mywin.r[4qݰport,339,tempi) ENDFOR SetAPen(mywin.rport,0) FOR tempi:=115+(40-rand) TO 154 Delay(2) INC luck IF luck=ListLen(wheel) THEN luck:=0 value:=ListItem(wheel,luck) SELECT value CASE -4;StrCopy(temps,'Prize') CASE -3;StrCopy(temps,'Bankrupt') CASE -2;StrCopy(temps,'Lose a Turn') CASE -1;StrCopy(temps,'Free Spin') DEFAULT StringF(temps,'\d',value) ENDSELECT showPrize(temps) Move(mywin.rport,330,tempi) Draw(mywin.rp[5.oort,339,tempi) ENDFOR IF value>0 THEN addScore(player,value) IF value=-4 THEN winPrize() IF (value=-2) OR (value=-3) IF value=-3 THEN clearScore(player) SELECT player CASE 1;IF fs1>0 THEN askUseFreeSpin(player,fs1) ELSE nextPlayer() CASE 2;IF fs2>0 THEN askUseFreeSpin(player,fs2) ELSE nextPlayer() CASE 3;IF fs3>0 THEN askUseFreeSpin(player,fs3) ELSE nextPlayer() CASE 4;IF fs4>0 THEN askUseFreeSpin(player,fs4) ELSE nextPlayer() ENDSELECT E[6 ";NDIF IF value=-1 THEN addFreeSpin(player) showMessage('Please select a CONSONANT') ENDPROC PROC addScore(pl,sc) SELECT pl CASE 1;pl1score:=pl1score+sc CASE 2;pl2score:=pl2score+sc CASE 3;pl3score:=pl3score+sc CASE 4;pl4score:=pl4score+sc ENDSELECT updatePlayerInfo(pl) showCurrentPlayer(pl) ENDPROC PROC askUseFreeSpin(pl,fs) DEF opt:PTR TO LONG StringF(temps,'You have \d free spin\s!\nDo you want to use \s?',fs,IF fs>1 THEN 's' ELSE '',IF fs>1 THEN 'o[7$ne' ELSE 'it') opt:=rtRequest('Request...',temps,'_Yes|_No',0,TRUE) IF opt=1 THEN subFreeSpin(pl) ELSE nextPlayer() ENDPROC opt PROC winPrize() tempi:=Rnd(5) SELECT tempi CASE 0;StrCopy(temps,'You win a cuddly toy!') CASE 1;StrCopy(temps,'You win a two week\nholiday to Blackpool') CASE 2;StrCopy(temps,'You win a bucket of fresh vomit!') CASE 3;StrCopy(temps,'You win a selection\nof porn films') CASE 4;StrCopy(temps,'You win Clare Danes\nfor a weekend') [8]5ENDSELECT rtRequest('Congratulations!',temps,'_Ok',0,TRUE) ENDPROC PROC nextPlayer() INC player IF player>4 THEN player:=1 showCurrentPlayer(player) ENDPROC PROC addFreeSpin(pl) SELECT pl CASE 1;INC fs1;showFreeSpins(player) CASE 2;INC fs2;showFreeSpins(player) CASE 3;INC fs3;showFreeSpins(player) CASE 4;INC fs4;showFreeSpins(player) ENDSELECT ENDPROC PROC subFreeSpin(pl) SELECT pl CASE 1;DEC fs1;showFreeSpins(player) CASE 2;DEC fs2;showFreeSp[9E]ins(player) CASE 3;DEC fs3;showFreeSpins(player) CASE 4;DEC fs4;showFreeSpins(player) ENDSELECT ENDPROC PROC clearScore(pl) SELECT pl CASE 1;pl1score:=0;printText(1,93,124,' 0');printText(2,205,124,'>');printText(0,205,148,' ') CASE 2;pl2score:=0;printText(1,93,132,' 0');printText(2,205,132,'>');printText(0,205,124,' ') CASE 3;pl3score:=0;printText(1,93,140,' 0');printText(2,205,140,'>');printText(0,205,132,' ') CASE 4;pl4score:=0;printText[:z(1,93,148,' 0');printText(2,205,148,'>');printText(0,205,140,' ') ENDSELECT ENDPROC PROC askConvertFile() IF rtRequest('Convert...','Are you sure?','_Yes|_No',0)=1 StrCopy(srcn,requestFile('Select text file...','#?.txt')) StrCopy(trgn,requestFile('Select puzzle file...','#?.wof')) StrCopy(src,'Wheel:');StrAdd(src,srcn) StrCopy(trg,'Wheel:');StrAdd(trg,trgn) IF StrCmp(srcn,trgn,ALL) AND (StrLen(srcn)>0) rtRequest('Error...','Both files can''t\nbe th[;be same!','_Ok',0,TRUE) ELSE StringF(temps,'\n** WARNING **\nFile "\s" already exists!\n',trgn) StringF(temps,'Convert text file "\s"\ninto puzzle file "\s"?\n\s\nAre you sure?',srcn,trgn,IF FileLength(trg)>=0 THEN temps ELSE '') IF (StrLen(srcn)>0) AND (StrLen(trgn)>0) IF rtRequest('Convert...',temps,'_Yes|_No',0,TRUE)=1 THEN convertFile() ELSE rtRequest('Convert...','User abort','_Ok',0) ENDIF ENDIF ENDIF ENDPROC PROC convertF[<K <'ile() DEF srcf=NIL,trgf=NIL,lines=0:PTR TO LONG,oldout,line:PTR TO LONG, bad=0:PTR TO LONG,bar:PTR TO LONG,qt[53]:STRING,ct[26]:STRING srcf:=Open(src,OLDFILE) IF src=NIL StringF(temps,'Unable to open "\s"\nto convert',srcn) rtRequest('Error...',temps,'_Ok',0,TRUE) ELSE trgf:=Open(trg,NEWFILE) IF trgf=NIL StringF(temps,'Unable to create puzzle\nfile "\s"',trgn) rtRequest('Error...',temps,'_Ok',0,TRUE) ELSE showMessage('Counting lines[=W in text file...') oldout:=SetStdOut(trgf) WHILE ReadStr(srcf,temps)=0 bar:=InStr(temps,'|',0) IF (bar<0) OR (bar>53) OR (StrLen(temps)-bar>26) THEN INC bad INC lines ENDWHILE Seek(srcf,0,-1) WriteF('WoFD\z\d[4]',lines-bad) showMessage('Converting text file to puzzle file...') bad:=0 FOR line:=1 TO lines ReadStr(srcf,temps) bar:=InStr(temps,'|',0) IF bar>-1 MidStr(qt,temps,0,bar)[>RX;UpperStr(qt) IF bar>53 INC bad StringF(buf,'Question in line \d too long',line) rtRequest('Convert...',buf,'_Ok',0,TRUE) ELSE MidStr(ct,temps,bar+1,StrLen(temps)-bar);UpperStr(ct) IF StrLen(temps)-bar>26 INC bad StringF(buf,'Clue in line \d too long',line) rtRequest('Convert...',buf,'_Ok',0,TRUE) ELSE WriteF('\s[53]\s[26]',qt,ct) [?m showClue(ct) ENDIF ENDIF ELSE INC bad StringF(temps,'Missing "|" in line \d',line) rtRequest('Convert...',temps,'_Ok',0) ENDIF ENDFOR Close(srcf) Close(trgf) trgf:=SetStdOut(oldout) ENDIF ENDIF showClue(' ') IF bad=0 StringF(temps,'Converted \d lines',lines) ELSE StringF(temps,'Converted \d of \d lines',lines-bad,lines) ENDIF rtRequest('Convert...',temps,'_Ok',0)[@5]; ENDPROC /***************************************************************************\ ** OPEN THE FILE REQUESTER ** \***************************************************************************/ PROC requestFile(txt,pat) IF req:=RtAllocRequestA(RT_FILEREQ,NIL) RtChangeReqAttrA(req,[RTFI_DIR,'Wheel:',RTFI_MATCHPAT,pat]) buf[0]:=0 RtFileRequestA(req,buf,txt,[RTFI_OKTEXT,'Ok']) ELSE rtRequest('Error...','Unable to open[AuHӆ file requester','_Ok',0) ENDIF ENDPROC buf PROC createPuzzleFile() DEF fptr=NIL,ok=FALSE fptr:=Open('Wheel:Wheel.wof',NEWFILE) IF fptr=NIL rtRequest('Error...','Unable to create file','_Ok',0) ELSE Write(fptr,'WoFD0003',8) Write(fptr,' SHEENA EASTON PERSON YELLOW STONE NATIONAL PARK PLACE YOGI BEAR FICTIONAL C[B#HARACTER',237) Close(fptr) ok:=TRUE ENDIF ENDPROC ok PROC getNextPuzzle(firsttime) IF firsttime Read(fileptr,buf,4) Read(fileptr,buf,4) puzzlemax:=Val(buf,NIL) FOR tempi:=1 TO puzzleuse Read(fileptr,puzzlet,53) Read(fileptr,cluet,26) ENDFOR ELSE INC puzzleuse IF puzzleuse>puzzlemax Seek(fileptr,0,-1) Read(fileptr,buf,8) puzzleuse:=1 ENDIF Read(fileptr,puzzlet,53) Read(fileptr,cluet,26) ENDIF StrC[C@opy(puzzlet,extractText(puzzlet)) StrCopy(cluet,extractText(cluet)) IF Not(firsttime) THEN showClue(cluet) ENDPROC PROC extractText(text) DEF dummy[1]:STRING,position=0:PTR TO LONG FOR tempi:=0 TO StrLen(text) MidStr(dummy,text,tempi,1) IF Not(StrCmp(dummy,' ',1)) position:=tempi tempi:=StrLen(text) ENDIF ENDFOR MidStr(temps,text,position,StrLen(text)-position) ENDPROC temps /***********************************************************************[DC****\ ** THE MAIN PROGRAM ** \***************************************************************************/ PROC main() HANDLE KickVersion(37) tempi:=Rnd(-32767) ListCopy(wheel,[1000,500,400,300,2000,-3,700,200,150,450,-2,200,400,250, -> 14 150,400,600,250,350,-1,750,800,300,200,-1,900,300,250,900,200,400,-> 17 550,1000,200,600,-1,200,550,400,900,250,-4,700,800,300,-2,200,700,-> 17 -1,-1,-2,-3,[EB150,900,300,250,900,200,400,550,1000,200,600,200,550, -> 17 400,900,700,800,300,2000,700]) -> 7 IF gadtoolsbase:=OpenLibrary('gadtools.library',37) IF reqtoolsbase:=OpenLibrary('reqtools.library',37) loadPrefs() StrCopy(src,'Wheel:') StrAdd(src,puzzlen) IF (fileptr:=Open(src,OLDFILE))=NIL StringF(temps,'Unable to open puzzle file\n"\s"\n\nDo you want me to create it?',puzzlen) IF rtRequest('Error...',temps,'_Yes|_No',1,TRUE)=1 [F IF createPuzzleFile() fileptr:=Open(src,OLDFILE) IF fileptr=NIL rtRequest('Fatal error...','I still can''t open it!','_Ok',0) ELSE getNextPuzzle(TRUE) gadtoolsWindow() ENDIF ENDIF ENDIF ELSE getNextPuzzle(TRUE) gadtoolsWindow() ENDIF ELSE fatalError('Unable to open reqtools.library v37') ENDIF ELSE fatalError('Unable to o[GCopen gadtools.library v37') ENDIF EXCEPT DO IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) SELECT exception CASE ERR_FONT; fatalError('Unable to open topaz.font 8') CASE ERR_GAD; fatalError('Unable to create all gadgets') CASE ERR_KICK; WriteF('ERROR: Requires Kickstart v37\n') CASE ERR_PUB; fatalError('Unable to lock default public screen') CASE ERR_VIS; fatalError('Unable to get visual info') CASE ERR_WIN; fatalError('Unable to open the window') [H9,ENDSELECT ENDPROC /***************************************************************************\ ** File format for "S:WheelOfFortune.prefs": ** ** ** ** ( 4) header WOFP ** ** ( 4) version 0100 ** ** ( 13) p1name Zebedee ** *[Iz5* ( 6) p1total 0 ** ** ( 13) p2name Arsehole ** ** ( 6) p2total 0 ** ** ( 13) p3name Liz ** ** ( 6) p3total 0 ** ** ( 13) p4name Tara ** ** ( 6) p4total [J 0 ** ** ( 32) puzzlefile Wheel.wof ** ** ( 6) puzzleuse 1 ** ** ( 1) 0=no clue, 1=clue 1 ** ** ( 1) 0=don't hide, 1=hide used 0 ** ** ( 1) Current player's turn 1 ** \****************************************[K`J***********************************/ version: CHAR '$VER: Wheel of Fortune v1.00 (03-Nov-97)',0!V3>E%CIC.eups/**************************************** ** Cassette Label Creator v1.00 ** ** By Zebedee/Area 51 (??-???-??) ** ** Written using E (v3.1i registered) ** ** ** ** Usage: CIC ** ****************************************/ MODULE 'gadtools','exec/ports','graphics/text','intuition/intuition', 'intuition/screens','libraries/gadtools','tools/constructors', 'graphics/rastport','asl','libraries/asl','re1qtools','libraries/reqtools' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_PUB,ERR_VIS,ERR_WIN,ERR_ASL RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IF KickVersion()=FALSE, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL -> RtGetStringA(text,10,'New highscore, enter your name:',NIL,NIL) ENUM GDBT_NEW,GDBT_SAVE,GDBT_LOAD,GDBT_PRINT,GDBT_ABOUT,GDBT_QUIT, GDCY_SIDE, FYGDCY_PART,GDCY_FROM,GDCY_NR, GDST_ARTIST,GDST_TITLE,GDST_L01,GDST_L02,GDST_L03,GDST_L04,GDST_L05, GDST_L06,GDST_L07,GDST_L08,GDST_L09,GDST_L10,GDST_L11,GDST_L12,GDST_L13 DEF topaz80,mywin=NIL:PTR TO window,wanted=TRUE,temps[255]:STRING, ctr:PTR TO LONG,ffull[255]:STRING,fpath[255]:STRING,fname[255]:STRING, artist[20]:STRING,title[20]:STRING,l01[20]:STRING,l02[20]:STRING, l03[20]:STRING,l04[20]:STRING,l05[20]:STRING,l06[20]:STRING, l07[20]:STRING,l08[20]:STR!bING,l09[20]:STRING,l10[20]:STRING, l11[20]:STRING,l12[20]:STRING,l13[20]:STRING,l14[20]:STRING, l15[20]:STRING,l16[20]:STRING,l17[20]:STRING,l18[20]:STRING, l19[20]:STRING,l20[20]:STRING,l21[20]:STRING,l22[20]:STRING,part1=TRUE, l23[20]:STRING,l24[20]:STRING,l25[20]:STRING,l26[20]:STRING,sidea=TRUE PROC handleGadgetEvent(win,gad:PTR TO gadget,code,my_gads:PTR TO LONG) DEF id,strBuffer[255]:STRING id:=gad.gadgetid StrCopy(strBuffer,gad.specialinfo::stringinfo.b_uffer) SELECT id CASE GDBT_NEW;checkNew() CASE GDBT_SAVE;saveLabel() CASE GDBT_LOAD;loadLabel() CASE GDBT_ABOUT;showAbout() CASE GDBT_QUIT;checkQuit() CASE GDCY_SIDE SELECT code CASE 0;sidea:=TRUE CASE 1;sidea:=FALSE ENDSELECT CASE GDCY_PART SELECT code CASE 0;part1:=TRUE;showLabels(1,13);updateStrings(my_gads) CASE 1;part1:=FALSE;showLabels(14,26);updateStrings(my_gads) ENDSELECT CASE GDST_ARTIST;StrCopy(artisЈt,strBuffer) CASE GDST_TITLE;StrCopy(title,strBuffer) CASE GDST_L01;StrCopy(IF part1 THEN l01 ELSE l14,strBuffer) CASE GDST_L02;StrCopy(IF part1 THEN l02 ELSE l15,strBuffer) CASE GDST_L03;StrCopy(IF part1 THEN l03 ELSE l16,strBuffer) CASE GDST_L04;StrCopy(IF part1 THEN l04 ELSE l17,strBuffer) CASE GDST_L05;StrCopy(IF part1 THEN l05 ELSE l18,strBuffer) CASE GDST_L06;StrCopy(IF part1 THEN l06 ELSE l19,strBuffer) CASE GDST_L07;StrCopy(IF part1 THEN l07 ELÕ0SE l20,strBuffer) CASE GDST_L08;StrCopy(IF part1 THEN l08 ELSE l21,strBuffer) CASE GDST_L09;StrCopy(IF part1 THEN l09 ELSE l22,strBuffer) CASE GDST_L10;StrCopy(IF part1 THEN l10 ELSE l23,strBuffer) CASE GDST_L11;StrCopy(IF part1 THEN l11 ELSE l24,strBuffer) CASE GDST_L12;StrCopy(IF part1 THEN l12 ELSE l25,strBuffer) CASE GDST_L13;StrCopy(IF part1 THEN l13 ELSE l26,strBuffer) ENDSELECT ENDPROC PROC handleVanillaKey(win,code,my_gads:PTR TO LONG) SELECT "w" OF code CASE "n","N";checkNew() CASE "s","S";saveLabel() CASE "l","L";loadLabel() CASE "a","A";showAbout() CASE "q","Q";checkQuit() ENDSELECT ENDPROC PROC updateStrings(my_gads:PTR TO LONG) IF part1 Gt_SetGadgetAttrsA(my_gads[GDST_L01],mywin,NIL,[GTST_STRING,l01,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L02],mywin,NIL,[GTST_STRING,l02,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L03],mywin,NIL,[GTST_STRING,l03,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L04],m zKywin,NIL,[GTST_STRING,l04,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L05],mywin,NIL,[GTST_STRING,l05,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L06],mywin,NIL,[GTST_STRING,l06,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L07],mywin,NIL,[GTST_STRING,l07,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L08],mywin,NIL,[GTST_STRING,l08,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L09],mywin,NIL,[GTST_STRING,l09,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L10],mywin,NIL,[GTST_STRING,l10,NIL]) Gt_SetGa S&dgetAttrsA(my_gads[GDST_L11],mywin,NIL,[GTST_STRING,l11,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L12],mywin,NIL,[GTST_STRING,l12,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L13],mywin,NIL,[GTST_STRING,l13,NIL]) ELSE Gt_SetGadgetAttrsA(my_gads[GDST_L01],mywin,NIL,[GTST_STRING,l14,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L02],mywin,NIL,[GTST_STRING,l15,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L03],mywin,NIL,[GTST_STRING,l16,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L04],mywin,NI m>L,[GTST_STRING,l17,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L05],mywin,NIL,[GTST_STRING,l18,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L06],mywin,NIL,[GTST_STRING,l19,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L07],mywin,NIL,[GTST_STRING,l20,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L08],mywin,NIL,[GTST_STRING,l21,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L09],mywin,NIL,[GTST_STRING,l22,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L10],mywin,NIL,[GTST_STRING,l23,NIL]) Gt_SetGadgetAtt 6 rsA(my_gads[GDST_L11],mywin,NIL,[GTST_STRING,l24,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L12],mywin,NIL,[GTST_STRING,l25,NIL]) Gt_SetGadgetAttrsA(my_gads[GDST_L13],mywin,NIL,[GTST_STRING,l26,NIL]) ENDIF ENDPROC PROC createAllGadgets(glistptr:PTR TO LONG,vi,my_gads:PTR TO LONG) DEF gad,ng:PTR TO newgadget gad:=CreateContext(glistptr) ng:=[16,17,49,12,'_New',topaz80,GDBT_NEW,NIL,vi,0]:newgadget my_gads[GDBT_NEW]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_ OU",NIL])) ng:=[65,17,49,12,'_Save',topaz80,GDBT_SAVE,NIL,vi,0]:newgadget my_gads[GDBT_SAVE]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[114,17,49,12,'_Load',topaz80,GDBT_LOAD,NIL,vi,0]:newgadget my_gads[GDBT_LOAD]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[163,17,49,12,'_Print',topaz80,GDBT_PRINT,NIL,vi,0]:newgadget my_gads[GDBT_PRINT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[212,17,49,1p>2,'_About',topaz80,GDBT_ABOUT,NIL,vi,0]:newgadget my_gads[GDBT_ABOUT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[261,17,49,12,'_Quit',topaz80,GDBT_QUIT,NIL,vi,0]:newgadget my_gads[GDBT_QUIT]:=(gad:=CreateGadgetA(BUTTON_KIND,gad,ng,[GT_UNDERSCORE,"_",NIL])) ng:=[16,29,147,12,'',topaz80,GDCY_SIDE,NIL,vi,0]:newgadget my_gads[GDCY_SIDE]:=(gad:=CreateGadgetA(CYCLE_KIND,gad,ng,[GTCY_LABELS,['Side A','Side B',NIL],GTCY_ACTIVE,0,NIL])) ng:=[163,29,147,12,'',topaz80,GDCY_PART,NIL,vi,0]:newgadget my_gads[GDCY_PART]:=(gad:=CreateGadgetA(CYCLE_KIND,gad,ng,[GTCY_LABELS,['Part 1','Part 2',NIL],GTCY_ACTIVE,0,NIL])) ng:=[16,41,147,12,'',topaz80,GDCY_FROM,NIL,vi,0]:newgadget my_gads[GDCY_FROM]:=(gad:=CreateGadgetA(CYCLE_KIND,gad,ng,[GTCY_LABELS,['From CD','From Tape','From Vinyl',NIL],GTCY_ACTIVE,0,NIL])) ng:=[163,41,147,12,'',topaz80,GDCY_NR,NIL,vi,0]:newgadget my_gads[GDCY_NR]:=(gad:=CreateGadgetA(CYCLE_KIND,gad,ng,[GTCY_LABELS|Vi,['NR Off','NR On',NIL],GTCY_ACTIVE,0,NIL])) ng:=[34,56,276,12,'',topaz80,GDST_ARTIST,NIL,vi,0]:newgadget my_gads[GDST_ARTIST]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,68,276,12,'',topaz80,GDST_TITLE,NIL,vi,0]:newgadget my_gads[GDST_TITLE]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,81,276,12,'',topaz80,GDST_L01,NIL,vi,0]:newgadget my_gads[GDST_L01]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,93,276,12,'',topaz80,GDST_L02,NIL,vi,0]:newgadget my_gads[GDST_L02]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,105,276,12,'',topaz80,GDST_L03,NIL,vi,0]:newgadget my_gads[GDST_L03]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,117,276,12,'',topaz80,GDST_L04,NIL,vi,0]:newgadget my_gads[GDST_L04]:=(gad:=CreateGadgetA(STRING_KIND,g;9ad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,129,276,12,'',topaz80,GDST_L05,NIL,vi,0]:newgadget my_gads[GDST_L05]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,141,276,12,'',topaz80,GDST_L06,NIL,vi,0]:newgadget my_gads[GDST_L06]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,153,276,12,'',topaz80,GDST_L07,NIL,vi,0]:newgadget my_gads[GDST_L07]:=(gad:=CreateGadgetA(STRING_KIND,gaduZE,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,165,276,12,'',topaz80,GDST_L08,NIL,vi,0]:newgadget my_gads[GDST_L08]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,177,276,12,'',topaz80,GDST_L09,NIL,vi,0]:newgadget my_gads[GDST_L09]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,189,276,12,'',topaz80,GDST_L10,NIL,vi,0]:newgadget my_gads[GDST_L10]:=(gad:=CreateGadgetA(STRING_KIND,gad,nug,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,201,276,12,'',topaz80,GDST_L11,NIL,vi,0]:newgadget my_gads[GDST_L11]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,213,276,12,'',topaz80,GDST_L12,NIL,vi,0]:newgadget my_gads[GDST_L12]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng,[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ng:=[34,225,276,12,'',topaz80,GDST_L13,NIL,vi,0]:newgadget my_gads[GDST_L13]:=(gad:=CreateGadgetA(STRING_KIND,gad,ng, &[GTST_STRING,'',GTST_MAXCHARS,255,NIL])) ENDPROC gad PROC processWindowEvents(mywin:PTR TO window,my_gads:PTR TO LONG) DEF imsg:PTR TO intuimessage,imsgClass,imsgCode,gad WHILE wanted Wait(Shl(1,mywin.userport.sigbit)) WHILE wanted AND (imsg:=Gt_GetIMsg(mywin.userport)) gad:=imsg.iaddress imsgClass:=imsg.class imsgCode:=imsg.code Gt_ReplyIMsg(imsg) SELECT imsgClass CASE IDCMP_GADGETDOWN; handleGadgetEvent(mywin,gad,imsgCode,my_gads) S$ CASE IDCMP_MOUSEMOVE; handleGadgetEvent(mywin,gad,imsgCode,my_gads) CASE IDCMP_GADGETUP; handleGadgetEvent(mywin,gad,imsgCode,my_gads) CASE IDCMP_VANILLAKEY; handleVanillaKey(mywin,imsgCode,my_gads) CASE IDCMP_REFRESHWINDOW Gt_BeginRefresh(mywin) Gt_EndRefresh(mywin,TRUE) ENDSELECT ENDWHILE ENDWHILE ENDPROC PROC gadtoolsWindow() HANDLE DEF font=NIL,mysc=NIL:PTR TO screen,glist=NIL,my_gads[40]:ARRAY OF LONG,vi topaz80:=['topaz.font',8,0,0]:textattr font:=OpenFont(topaz80) mysc:=LockPubScreen(NIL) vi:=GetVisualInfoA(mysc,[NIL]) createAllGadgets({glist},vi,my_gads) mywin:=OpenWindowTagList(NIL, [WA_TITLE,'Cassette Label Creator v1.00', WA_SCREENTITLE,'AREA 51 - The dream is about to become the reality', WA_LEFT, 157, WA_TOP, 11, WA_WIDTH, 326, WA_HEIGHT, 245, 6 WA_MINWIDTH, 50, WA_MINHEIGHT, 50, WA_GADGETS, glist, WA_RMBTRAP, TRUE, WA_DRAGBAR, TRUE, WA_DEPTHGADGET, TRUE, WA_ACTIVATE, TRUE, WA_CLOSEGADGET, FALSE, WA_SIZEGADGET,FALSE, WA_SMARTREFRESH, TRUE, WA_IDCMP, IDCMP_REFRESHWINDOW OR IDCMP_VANILLAKEY OR STRINGIDCMP OR BUTTONIDCMP, WA_PUBSCREEN,mysc%Tn,NIL]) Gt_RefreshWindow(mywin,NIL) showLabels(1,13) DrawBevelBoxA(mywin.rport,8,13,310,228,[GT_VISUALINFO,vi,GTBB_RECESSED,TRUE,NIL]) DrawBevelBoxA(mywin.rport,10,14,306,226,[GT_VISUALINFO,vi,NIL]) PrintIText(mywin.rport,[1,0,RP_JAM1,0,0,['topaz.font',8,0,0]:textattr,'A:',NIL]:intuitext,15,58) PrintIText(mywin.rport,[1,0,RP_JAM1,0,0,['topaz.font',8,0,0]:textattr,'T:',NIL]:intuitext,15,70) processWindowEvents(mywin,my_gads) EXCEPT DO IF mywin THEN CloseWindow(mywin) dFreeGadgets(glist) IF vi THEN FreeVisualInfo(vi) IF mysc THEN UnlockPubScreen(mysc,NIL) IF font THEN CloseFont(font) ReThrow() ENDPROC PROC checkQuit() IF (RtEZRequestA('Are you sure?','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'Quit...',RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=1) THEN wanted:=FALSE ENDPROC PROC getFilename(title) HANDLE DEF fr:PTR TO filerequester fr:=AllocAslRequest(ASL_FILEREQUEST,[ASL_HAIL,title,ASL_HEIGHT,200, ASL_WIDTH,320,ASL_LE`FTEDGE,0,ASL_TOPEDGE,0,ASL_OKTEXT,'Ok', ASL_CANCELTEXT,'Cancel',ASL_FILE,fname,ASL_DIR,fpath,NIL]) IF AslRequest(fr,NIL) fname:=fr.file fpath:=fr.drawer ELSE fname:=FALSE fpath:=FALSE ENDIF EXCEPT IF fr THEN FreeAslRequest(fr) SELECT exception CASE ERR_ASL; fatalError('Unable to allocate ASL request') ENDSELECT ReThrow() ENDPROC PROC showLabels(snum,enum) DEF num=0:PTR TO LONG FOR ctr:=snum TO enum INC num StringF(? temps,'\z\d[2]',ctr) PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,temps,NIL]:intuitext,15,71+(num*12)) ENDFOR ENDPROC PROC fatalError(text) EasyRequestArgs(0,[20,0,'Fatal Error...',text,'Ok'],0,0) ENDPROC PROC checkNew() IF (RtEZRequestA('Are you sure?\n\nWARNING: Any unsaved\ndata will be lost!','_Yes|_NO!',0,0,[RTEZ_REQTITLE,'New...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",RTEZ_DEFAULTRESPONSE,0,NIL])=1) THEN wanted:=TRUE ENDPROC PROC sh ܽowAbout() RtEZRequestA('Cassette Label Creator v1.00\nBy Zebedee/Area 51\n\n' + 'Preview - not for release','_Ok!',0,0,[RTEZ_REQTITLE,'About...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ENDPROC PROC saveLabel() getFilename('Save Label...') IF fname MidStr(temps,fpath,StrLen(fpath)-1,1) StrCopy(ffull,'') StrAdd(ffull,fpath) IF Not(StrCmp(':',temps,1)) THEN StrAdd(ffull,'/') StrAdd(ffull,fname) IF FileLength(ffull)=-1 RtEZRequestA('File not found','_Ok',0,0,[RTEZ_REQTITLE,'Error...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ENDIF ENDIF -> WriteF('fname:\s\nfpath:\s\nffull:\s\n',fname,fpath,ffull) ENDPROC PROC loadLabel() getFilename('Load Label...') IF fname MidStr(temps,fpath,StrLen(fpath)-1,1) StrCopy(ffull,'') StrAdd(ffull,fpath) IF Not(StrCmp(':',temps,1)) THEN StrAdd(ffull,'/') StrAdd(ffull,fname) IF FileLength(ffull)=-1 RtEZRequestA('File not ȇ;Ufound','_Ok',0,0,[RTEZ_REQTITLE,'Error...',RTEZ_FLAGS,EZREQF_CENTERTEXT,RT_UNDERSCORE,"_",NIL]) ENDIF ENDIF -> WriteF('fname:\s\nfpath:\s\nffull:\s\n',fname,fpath,ffull) ENDPROC PROC main() HANDLE KickVersion(37) IF gadtoolsbase:=OpenLibrary('gadtools.library',37) IF reqtoolsbase:=OpenLibrary('reqtools.library',37) IF aslbase:=OpenLibrary('asl.library',37) gadtoolsWindow() ELSE fatalError('Unable to open\nasl.library v37') ENDIF E 2LSE fatalError('Unable to open\nreqtools.library v37') ENDIF ELSE fatalError('Unable to open\ngadtools.library v37') ENDIF EXCEPT DO IF aslbase THEN CloseLibrary(aslbase) IF reqtoolsbase THEN CloseLibrary(reqtoolsbase) IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) SELECT exception CASE ERR_FONT; fatalError('Unable to open\ntopaz.font 8') CASE ERR_GAD; fatalError('Unable to create all gadgets') CASE ERR_KICK; WriteF('Error: Requires KS2+ (v37)\!4 ScrInfo.e v1.00 by Zebedee/A51 -> Shows information about the Workbench screen MODULE 'intuition/intuition','intuition/screens' PROC main() DEF mysc=NIL:PTR TO screen mysc:=LockPubScreen(NIL) WriteF('Next Screen : $\z\h[8]\n',mysc.nextscreen) WriteF('First Window : $\z\h[8]\n',mysc.firstwindow) WriteF('Left Edge : \d\n',mysc.leftedge) WriteF('Top Edge : \d\n',mysc.topedge) WriteF('Width : \d\n',mysc.width) WriteF('Height : \d\n',mysc.height) ͽb^ WriteF('Mouse Y : \d\n',mysc.mousey) WriteF('Mouse X : \d\n',mysc.mousex) WriteF('Flags : $\z\h[8]\n',mysc.flags) WriteF('Title : \s\n',mysc.title) WriteF('Default Title: \s\n',mysc.defaulttitle) WriteF('Bar Height : \d\n',mysc.barheight) WriteF('Bar V Border : \d\n',mysc.barvborder) WriteF('Bar H Border : \d\n',mysc.barhborder) WriteF('Menu V Border: \d\n',mysc.menuvborder) WriteF('Menu H Border: \d\n',mysc.menuhborder) WriteF('WBorTop] : \d\n',mysc.wbortop) WriteF('WBorLeft : \d\n',mysc.wborleft) WriteF('WBorRight : \d\n',mysc.wborright) WriteF('WBorBottom : \d\n',mysc.wborbottom) WriteF('Viewport : $\z\h[8]\n',mysc.viewport) WriteF('Rastport : $\z\h[8]\n',mysc.rastport) WriteF('Detail Pen : \d\n',mysc.detailpen) WriteF('Block Pen : \d\n',mysc.blockpen) loop: WriteF('\e[0;0H\d[3],\d[3]\n',mysc.mousex,mysc.mousey) BTST #10,$dff016 BNE.B loop UnlockPubScreen(mysc4=},NIL) ENDPROC version: CHAR '$VER: ScrInfo v1.00',0+?& PE%: TrackDOS.epј0c/**********************************************************\ ** TrackDOS ][ v1.00 (TrackDOS) ** -=-=--=-=- ** ** By Zebedee/Area 51^TFL (??-???-97) ** ! PLEASE ! ** ** Written using Amiga E (v3.1i registered) ** DO NOT ** ** ** DISTRIBUTE ** ** Usage: TRACKDOS ** -=-=--=-=- ** \**********************************************************/ MODULE 'gadtools','exec/ports','graphics/text','intuition/inҁކtuition', 'intuition/screens','libraries/gadtools','graphics/rastport', 'exec/memory','tools/file','workbench/startup','devices/trackdisk', 'other/disk','resources/disk','reqtools','libraries/reqtools','asl', 'libraries/asl','workbench/startup','workbench/workbench' ENUM ERR_NONE,ERR_FONT,ERR_GAD,ERR_KICK,ERR_PUB,ERR_VIS,ERR_WIN,ERR_ASL, ERR_DEV,ERR_RSC,ERR_ASL RAISE ERR_FONT IF OpenFont()=NIL, ERR_GAD IF CreateGadgetA()=NIL, ERR_KICK IӗOjF KickVersion()=FALSE, ERR_PUB IF LockPubScreen()=NIL, ERR_VIS IF GetVisualInfoA()=NIL, ERR_WIN IF OpenWindowTagList()=NIL, ERR_DEV IF OpenDevice()<>NIL, ERR_ASL IF AllocAslRequest()=NIL ENUM GDCY_FUNC,GDST_STRINGA,GDST_STRINGB,GDST_STRINGC,GDST_STRINGD, GDST_STRINGE,GDBT_OK,GDBT_INFO,GDBT_INIT,GDBT_FREQC,GDBT_FREQD DEF topaz80,mywin=NIL:PTR TO window,text[255]:STRING,wanted=TRUE, cycle=0:PTR TO LONG,info[255]:STRING,ids,unit[3]:ARRAY OF FILONG, stringa[255]:STRING,stringb[255]:STRING,stringc[255]:STRING, stringd[255]:STRING,stringe[255]:STRING,temps[255]:STRING, fpath[255]:STRING,fname[255]:STRING,ffull[255]:STRING, taskid=0:PTR TO LONG,vala:PTR TO LONG,valb:PTR TO LONG, valc:PTR TO LONG,vald:PTR TO LONG,vale:PTR TO LONG PROC handleGadgetEvent(gad:PTR TO gadget,vi,gads:PTR TO LONG) DEF id id:=gad.gadgetid SELECT id CASE GDCY_FUNC; updateFunction(gads) CASE GDST_STRINGA; StrCopy(stի5ringa,gad.specialinfo::stringinfo.buffer) CASE GDST_STRINGB; StrCopy(stringb,gad.specialinfo::stringinfo.buffer) CASE GDST_STRINGC; StrCopy(stringc,gad.specialinfo::stringinfo.buffer) CASE GDST_STRINGD; StrCopy(stringd,gad.specialinfo::stringinfo.buffer) CASE GDST_STRINGE; StrCopy(stringe,gad.specialinfo::stringinfo.buffer) CASE GDBT_OK IF cycle=0 trackdiskToDOS() ELSE StringF(temps,'A=\s\nB=\s\nC=\s\nD=\s\nE=\s',stringa,stringb,stringc֛Q ,stringd,stringe) RtEZRequestA(temps,'_Ok',0,0,[RTEZ_REQTITLE,'OK Check...',RT_UNDERSCORE,"_",NIL]) ENDIF CASE GDBT_INFO; showInfo() CASE GDBT_INIT; nyi() CASE GDBT_FREQC getFilename() makeFullPath(gads) IF fname StrCopy(stringc,ffull) Gt_SetGadgetAttrsA(gads[GDST_STRINGC],mywin,NIL,[GTST_STRING,ffull,NIL]) ENDIF CASE GDBT_FREQD getFilename() makeFullPath(gads) IF fname StrCopy(stringd,ffu{H~ll) Gt_SetGadgetAttrsA(gads[GDST_STRINGD],mywin,NIL,[GTST_STRING,ffull,NIL]) ENDIF ENDSELECT ENDPROC PROC makeFullPath(gads:PTR TO LONG) IF fname MidStr(temps,fpath,StrLen(fpath)-1,1) StrCopy(ffull,'') StrAdd(ffull,fpath) IF Not(StrCmp(':',temps,1)) THEN StrAdd(ffull,'/') StrAdd(ffull,fname) IF FileLength(ffull)=-1 THEN RtEZRequestA('File not found','_Ok',0,0,[RTEZ_REQTITLE,'Error!',RT_UNDERSCORE,"_",NIL]) ENDIF ENDPROC PROC updateFunctioط%}Ln(gads:PTR TO LONG) INC cycle IF cycle=8 THEN cycle:=0 Gt_SetGadgetAttrsA(gads[GDCY_FUNC],mywin,NIL,[GTCY_ACTIVE,cycle,NIL]) SELECT cycle CASE 0 showFunction('Disk Read Offset ','Disk Read Length ','Save Path/File ','Read From Device ','N/A ') StrCopy(info,'Values can be in decimal or hex.\nIf using hex precede value with $\nFor full disk, set offset to -1') OnGadget(gads[GDBT_OK],mywin,NIL) OnGadget(gads[GDBT_FREQC],mywin,NIL)  ٧ OnGadget(gads[GDST_STRINGD],mywin,NIL) OffGadget(gads[GDBT_FREQD],mywin,NIL) OffGadget(gads[GDST_STRINGE],mywin,NIL) CASE 1 showFunction('Disk Write Offset','Buffer Offset ','Disk Write Length','Load Path/File ','Write To Device ') StrCopy(info,'Values can be in decimal or hex.\nIf using hex precede value with $\nFor full disk, set offset to -1') OnGadget(gads[GDBT_FREQD],mywin,NIL) OnGadget(gads[GDST_STRINGE],mywin,NIL) OffGadget( ڟjgads[GDBT_FREQC],mywin,NIL) showStatus(' ') CASE 2 showFunction('Source Address ','End Address ','Save Path/File ','N/A ','N/A ') StrCopy(info,'Values can be in decimal or hex.\nIf using hex precede value with $\nMemory area can be fast or chip') OnGadget(gads[GDBT_FREQC],mywin,NIL) OffGadget(gads[GDBT_FREQD],mywin,NIL) OffGadget(gads[GDST_STRINGD],mywin,NIL) OffGadget(gads 6 [GDST_STRINGE],mywin,NIL) CASE 3 showFunction('Disk Read Length ','Preferred Area ','Load Path/File ','N/A ','N/A ') StrCopy(info,'If using hex precede value with $\nLength=Null for full file size\nPreferred=Null for public area') OnGadget(gads[GDBT_FREQC],mywin,NIL) OffGadget(gads[GDBT_FREQD],mywin,NIL) CASE 4 showFunction('Disk Read Offset ','Disk Read Length ','Preferred Area ','Read From Device ','N/A  Cʆ ') StrCopy(info,'Values can be in decimal or hex.\nIf using hex precede value with $\nPreferred=Null for public area') OnGadget(gads[GDST_STRINGD],mywin,NIL) OffGadget(gads[GDBT_FREQC],mywin,NIL) OffGadget(gads[GDBT_FREQD],mywin,NIL) CASE 5 showFunction('Source Address ','End Address ','Disk Write Offset','Write To Device ','N/A ') StrCopy(info,'Values can be in decimal or hex.\nIf using hex precede value with $\nMemory >f area can be fast or chip') OnGadget(gads[GDST_STRINGD],mywin,NIL) CASE 6 showFunction('Start Track ','End Track ','Device To Format ','N/A ','N/A ') StrCopy(info,'To format a single track use same\nstart track and end track values.\nInit will perform a quick format') showStatus('For full disk: start=0, end=159') OnGadget(gads[GDBT_INIT],mywin,NIL) OffGadget(gads[GDBT_FREQC],mywin,NIL) OffGadget(gads[va GDST_STRINGD],mywin,NIL) CASE 7 OffGadget(gads[GDBT_OK],mywin,NIL) showFunction('Start Address ','End Address ','String To Search ','N/A ','N/A ') StrCopy(info,'*** NOTE ***\nNot Yet Implemented\n\nPrecede end with a + for length\nIf using hex precede value with $\nDo not search over illegal areas') showStatus(' ') OffGadget(gads[GDBT_INIT],mywin,NIL) ENDSELECT ENDPROC PROC showFunct߮ion(linea,lineb,linec,lined,linee) PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,linea,NIL]:intuitext,13,34) PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,lineb,NIL]:intuitext,13,48) PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,linec,NIL]:intuitext,13,62) PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,lined,NIL]:intuitext,13,76) PrintIText(mywin.rport,[1,0,RP_JAM2,0,0,['topaz.font',8,0,0]:textattr,linee,NIL]:intuitext,13,90) ENDPROC PROC handleVanillaKey(code,vi,gads:PTR TO LONG) SELECT "z" OF code CASE "a","A"; ActivateGadget(gads[GDST_STRINGA],mywin,NIL) CASE "b","B"; ActivateGadget(gads[GDST_STRINGB],mywin,NIL) CASE "c","C"; ActivateGadget(gads[GDST_STRINGC],mywin,NIL) CASE "d","D" IF (cycle<>2) AND (cycle<>3) AND (cycle<>6) AND (cycle<>7) THEN ActivateGadget(gads[GDST_STRINGD],mywin,NIL) CASE "e","E" IF cycle=1 THEN Act