ORCA DISASSEMBLER Script Example - IIGS ROM * Disassemble_ROMs - This script allows the desktop user to easily * disassemble the Apple IIGS ROM. * SCRIPT Disassemble_ROMs ROM ENDS ** * TOOL - This script creates a toolset header for the current segment. * SCRIPT TOOL CLEAR @A=@ARG @N=[@A]-1 IF @N>255,ERROR ECHO "Creating toolset header..." DC @A,I4 COMMENT @A,number of entries .LOOP IF @N=0,DONE @A=@A+4 DC @A,I4- @N=@N-1 GO LOOP .DONE ECHO "Toolset header defined. " GO STOP .ERROR ECHO "Illegal call count - not a toolset!" .STOP ENDS ** * LOCINFO - Create a QuickDraw II LocInfo structure. * SCRIPT LOCINFO CLEAR ECHO "Creating LocInfo structure..." @A=@ARG ! Define the LocInfo record: DC @A,I COMMENT @A,SCB byte @A=@A+2 DC @A,I4 COMMENT @A,pointer to pixel image @A=@A+4 DC @A,I2 COMMENT @A,width @A=@A+2 RECT @A COMMENT @A,bounds rect ENDS ** * GRAFPORT - Create a QuickDraw II GrafPort structure. * SCRIPT GRAFPORT ! Define the LocInfo record: EXEC LOCINFO @ARG ! Port info: ECHO "Creating GrafPort structure..." @A=@A+8 RECT @A COMMENT @A,port rect DC @A+8,I4 COMMENT @A+8,clip rgn DC @A+C,I4 COMMENT @A+C,vis rgn @A=@A+10 DC @A.@A+1F COMMENT @A,bkgrd pattern ! Pen info: @A=@A+20 DC @A.@A+3,I2 COMMENT @A,pen loc @A=@A+4 DC @A.@A+3,I2 COMMENT @A,pen size DC @A+4,I2 COMMENT @A+4,pen mode @A=@A+6 DC @A.@A+1F COMMENT @A,pen pattern @A=@A+20 DC @A.@A+7 COMMENT @A,pen mask @A=@A+8 DC @A,I2 COMMENT @A,pen vis ! Font info: DC @A+2,I4 COMMENT @A+2,font handle DC @A+6,I4 COMMENT @A+6,font id DC @A+A,I2 COMMENT @A+A,font flags DC @A+C,I2 COMMENT @A+C,text size DC @A+E,I2 COMMENT @A+E,text style DC @A+10,I2 COMMENT @A+10,text mode DC @A+12,I4 COMMENT @A+12,space extra DC @A+16,I4 COMMENT @A+16,char extra ! Misc info: DC @A+1A,I2 COMMENT @A+1A,foreground color DC @A+1C,I2 COMMENT @A+1C,background color DC @A+1E,I4 COMMENT @A+1E,pic save handle DC @A+22,I4 COMMENT @A+22,rgn save handle DC @A+26,I4 COMMENT @A+26,poly save handle DC @A+2A,I4 COMMENT @A+2A,QDProcs ptr DC @A+2E,I2 COMMENT @A+2E,arc rotation DC @A+30,I4 COMMENT @A+30,user field DC @A+34,I4 COMMENT @A+34,system field ECHO "Done! " ENDS ** * CDA - Create a CDA header. * SCRIPT CDA CLEAR @A=@ARG ECHO "Creating CDA header..." DW @A @A=([@A]&FF)+1 DC @A,I4 COMMENT @A,ptr to code start DC @A+4,I4 COMMENT @A+4,ptr to shutdown routine ECHO "Done! " ENDS ** * NDA - Create an NDA header. * SCRIPT NDA CLEAR ECHO "Creating NDA header..." DC 0,I4 COMMENT 0,open routine DC 4,I4 COMMENT 4,close routine DC 8,I4 COMMENT 8,action routine DC C,I4 COMMENT C,init routine DC 10,I2 COMMENT 10,period DC 12,I2 COMMENT 12,event mask @A=14 .LOOP IF ([@A]&FF)=0,DONE IF ([@A]&FF)=D,DONE @A=@A+1 GO LOOP .DONE DC 14.@A-1,C DC @A ECHO "Done! " ENDS ** * ALERT - Create an ALERT template. * SCRIPT ALERT CLEAR ECHO "Creating ALERT template..." @A=@ARG RECT @A COMMENT @A,alert rect DC @A+8,I2 COMMENT @A+8,alert ID DC @A+A,H COMMENT @A+A,first stage byte DC @A+B,H COMMENT @A+B,second stage byte DC @A+C,H COMMENT @A+C,third stage byte DC @A+D,H COMMENT @A+D,fourth stage byte @A=@A+E .LOOP DC @A,I4 IF ([@A]|[@A+2])=0,DONE COMMENT @A,ptr to item template IF [@A+2]=0,DOITEM IF [@A+2]<>@CURSEG,SKIP .DOITEM EXEC DOITEM [@A] .SKIP @A=@A+4 GO LOOP .DONE COMMENT @A,item list terminator ECHO "Done! " ENDS ** * DIALOG - Create a DIALOG template. * SCRIPT DIALOG CLEAR ECHO "Creating DIALOG template..." @A=@ARG RECT @A COMMENT @A,dtBoundsRect DC @A+8,I2 COMMENT @A+8,dtVisible DC @A+A,I4 COMMENT @A+A,dtRefCon @A=@A+E .LOOP DC @A,I4 IF ([@A]|[@A+2])=0,DONE COMMENT @A,itemPtr IF [@A+2]=0,DOITEM IF [@A+2]<>@CURSEG,SKIP .DOITEM EXEC DOITEM [@A] .SKIP @A=@A+4 GO LOOP .DONE COMMENT @A,terminator ECHO "Done! " ENDS ** * AITEM - Create an ALERT ITEM template. * SCRIPT AITEM ECHO "Creating ALERT ITEM template..." CLEAR EXEC DOITEM @ARG ECHO "Done! " ENDS SCRIPT DOITEM @Z=@ARG DC @Z,I2 COMMENT @Z,item ID RECT @Z+2 COMMENT @Z+2,item rect @Z=@Z+A DC @Z,I COMMENT @Z,type of item @IT=[@Z+A]&7FFF ON @IT-0A,BUTTON,CHECK,RADIO,SCROLL,USER,TEXT,TEXT ON @IT-11,EDIT,ICON,PIC,USER,USER,TEXT COMMENT @Z,type of item GO CONT .BUTTON COMMENT @Z,std button GO CONT .CHECK COMMENT @Z,std check box GO CONT .RADIO COMMENT @Z,std radio button GO CONT .SCROLL COMMENT @Z,dialog scroll bar GO CONT .USER COMMENT @Z,user item GO CONT .TEXT COMMENT @Z,static text GO CONT .EDIT COMMENT @Z,editable text GO CONT .ICON COMMENT @Z,icon item GO CONT .PIC COMMENT @Z,QuickDraw II picture .CONT DC @Z+2,I4 COMMENT @Z+2,item descriptor DC @Z+6,I2 COMMENT @Z+6,item value DC @Z+8,I2 COMMENT @Z+8,bit flag DC @Z+A,I4 COMMENT @Z+A,ptr to color table ENDS ** * WINDOW - Create a NewWindow parameter list. * SCRIPT WINDOW CLEAR @A=@ARG ECHO "Creating Window parm list..." DC @A,I2 DC @A+2,I2 COMMENT @A,frame bits DC @A+4,I4 COMMENT @A+4,title ptr DC @A+8,I4 COMMENT @A+8,refcon RECT @A+C COMMENT @A+C,zoom rect DC @A+14,I4 COMMENT @A+14,color table ptr @A=@A+18 DC @A.@A+3,I2 COMMENT @A,origin @A=@A+4 DC @A.@A+3,I2 COMMENT @A,data size @A=@A+4 DC @A.@A+3,I2 COMMENT @A,max size @A=@A+4 DC @A.@A+3,I2 COMMENT @A,scroll size @A=@A+4 DC @A.@A+3,I2 COMMENT @A,page size DC @A+4,I4 COMMENT @A+4,info bar refcon DC @A+8,I2 COMMENT @A+8,info bar hite DC @A+A,I4 COMMENT @A+A,window defproc DC @A+E,I4 COMMENT @A+E,info bar defproc DC @A+12,I4 COMMENT @A+12,content defproc RECT @A+16 COMMENT @A+16,content rect DC @A+1E,I4 COMMENT @A+1E,starting plane DC @A+22,I4 COMMENT @A+22,storage ptr ECHO "Done! " ENDS ** * PAINTPARAM - Create a PaintPixels parameter block. * SCRIPT PAINTPARAM CLEAR @A=@ARG ECHO "Creating PaintPixels parm list..." DC @A,I4 COMMENT @A,ptr to source locinfo DC @A+4,I4 COMMENT @A+4,ptr to dest locinfo DC @A+8,I4 COMMENT @A+8,ptr to source rect DC @A+C,I4 COMMENT @A+C,ptr to dest point DC @A+10,I2 COMMENT @A+10,mode DC @A+12,I4 COMMENT @A+12,clip rgn handle ECHO "Done! " ENDS ** * FONT - Create a font definition. * SCRIPT FONT CLEAR @A=@ARG ECHO "Creating Font definition..." @B=@A+[@A]*2 DC @A,I2 COMMENT @A,offset to Mac font DC @A+2,I2 COMMENT @A+2,font family number DC @A+4,I2 COMMENT @A+4,font's style DC @A+6,I2 COMMENT @A+6,point size DC @A+8,I2 COMMENT @A+8,version number DC @A+A,I2 COMMENT @A+A,fbr extent @A=@A+C IF @A=@B,SKIP1 DC @A.@B-1 COMMENT @A,unknown @A=@B .SKIP1 DC @A,I2 COMMENT @A,font type DC @A+2,I2 COMMENT @A+2,ASCII code if 1st char @A=@A+4 DC @A,I2 COMMENT @A,ASCII code of last char @N=(([@A]-[@A-2])+3)*2 DC @A+2,I2 COMMENT @A+2,max char width DC @A+4,I2 COMMENT @A+4,maximum left kern DC @A+6,I2 COMMENT @A+6,negative of descent DC @A+8,I2 COMMENT @A+8,width of font rect DC @A+A,I2 COMMENT @A+A,hite of font rect @H=[@A+A] DC @A+C,I2 COMMENT @A+C,offset to offet/width table DC @A+E,I2 COMMENT @A+E,font ascent DC @A+10,I2 COMMENT @A+10,font descent DC @A+12,I2 COMMENT @A+12,leading DC @A+14,I2 COMMENT @A+14,width of font strike @B=(([@A+14]*@H)*2) @A=@A+16 IF @B=0,SKIP2 DC @A.@A+@B-1 COMMENT @A,font strike .SKIP2 @A=@A+@B DC @A.@A+@N-1 COMMENT @A,location table @A=@A+@N DC @A.@A+@N-1 COMMENT @A,offset/width table ECHO "Done! " ENDS ** * StartStopRec - Create a _StartUpTools StartStopRec. * SCRIPT StartStopRec CLEAR ECHO "Creating StartStopRec..." @A=@ARG DC @A,I2 COMMENT @A,flags DC @A+2,I2 COMMENT @A+2,videoMode DC @A+4,I2 COMMENT @A+4,resFileID DC @A+6,I4 COMMENT @A+6,dPageHandle EXEC ToolTbl @A+A ENDS ** * StartStopRec - Create a _StartUpTools StartStopRec. * SCRIPT StartStopRec CLEAR ECHO "Creating StartStopRec..." @A=@ARG DC @A,I2 COMMENT @A,flags DC @A+2,I2 COMMENT @A+2,videoMode DC @A+4,I2 COMMENT @A+4,resFileID DC @A+6,I4 DC @A+6,dPageHandle EXEC ToolTbl @A+0A ENDS ** * TOOLTBL - Create a _LoadTools Tool Table. * SCRIPT TOOLTBL CLEAR ECHO "Creating LoadTools parm block..." @A=@ARG @N=[@A] DC @A,I2 COMMENT @A,number of tools @A=@A+2 IF @N=0,DONE .LOOP DC @A.@A+3,I2 @T=[@A] IF @T>26,UNKSET ON @T-01,T01,T02,T03,T04,T05,T06,T07,T08,T09,T0A ON @T-0B,T0B,T0C,CONT,T0E,T0F,T10,T11,T12,T13,T14 ON @T-15,T15,T16,T17,CONT,T19,T1A,T1B,T1C,T1D,T1E ON @T-1F,UNKSET,T20,T21,T22,T23,CONT,T25,T26 .UNKSET COMMENT @A,--Unknown toolset-- GO CONT .T01 COMMENT @A,tool locator GO CONT .T02 COMMENT @A,memory manager GO CONT .T03 COMMENT @A,misc tool set GO CONT .T04 COMMENT @A,quickdraw II GO CONT .T05 COMMENT @A,desk manager GO CONT .T06 COMMENT @A,event manager GO CONT .T07 COMMENT @A,scheduler GO CONT .T08 COMMENT @A,sound tool set GO CONT .T09 COMMENT @A,ADB tool set GO CONT .T0A COMMENT @A,SANE tool set GO CONT .T0B COMMENT @A,int math tool set GO CONT .T0C COMMENT @A,text tool set GO CONT .T0E COMMENT @A,window manager GO CONT .T0F COMMENT @A,menu manager GO CONT .T10 COMMENT @A,control manager GO CONT .T11 COMMENT @A,system loader GO CONT .T12 COMMENT @A,quickdraw II aux GO CONT .T13 COMMENT @A,print manager GO CONT .T14 COMMENT @A,lineedit tool set GO CONT .T15 COMMENT @A,dialog manager GO CONT .T16 COMMENT @A,scrap manager GO CONT .T17 COMMENT @A,std file tool set GO CONT .T19 COMMENT @A,note synth GO CONT .T1A COMMENT @A,note sequencer GO CONT .T1B COMMENT @A,font manager GO CONT .T1C COMMENT @A,list manager GO CONT .T1D COMMENT @A,ACE GO CONT .T1E COMMENT @A,resource manager GO CONT .T20 COMMENT @A,MIDI tool set GO CONT .T21 COMMENT @A,video overlay tool set GO CONT .T22 COMMENT @A,textedit tool set GO CONT .T23 COMMENT @A,MIDIsynth tool set GO CONT .T25 COMMENT @A,animation tool set GO CONT .T26 COMMENT @A,media control tool set .CONT @A=@A+4 @N=@N-1 IF @N>0,LOOP .DONE ECHO "Done! " ENDS ** * EVENTREC - Create a event record. * SCRIPT EVENTREC CLEAR ECHO "Creating event record..." EXEC EVENTREC2 @ARG ECHO "Done! " ENDS SCRIPT EVENTREC2 @A=@ARG DC @A,I2 COMMENT @A,event code DC @A+2,I4 COMMENT @A+2,event message DC @A+6,I4 COMMENT @A+6,tick count @A=@A+A DC @A.@A+3,I COMMENT @A,mouse location DC @A+4,I2 COMMENT @A+4,modifiers @A=@A+6 ENDS ** * TASKREC - Create a Window Manager task record. * SCRIPT TASKREC CLEAR ECHO "Creating task record..." EXEC TASKREC2 ECHO "Done! " ENDS SCRIPT TASKREC2 EXEC EVENTREC2 @ARG DC @A+2,I4 COMMENT @A+2,task data DC @A+6,I4 COMMENT @A+6,task mask @A=@A+A ENDS ** * TASKRECX - Create a Window Manager extended task record. * SCRIPT TASKRECX CLEAR ECHO "Creating extended task record..." EXEC TASKREC2 DC @A+4,I4 COMMENT @A+4,tick count at last mouse click DC @A+8,I2 COMMENT @A+8,click count (single, double, triple) DC @A+A,I4 COMMENT @A+A,additional taskmaster return data DC @A+E,I4 COMMENT @A+E,additional taskmaster return data DC @A+12,I4 COMMENT @A+12,additional taskmaster return data @A=@A+16 DC @A.@A+3,I2 COMMENT @A,location of last mouse click ECHO "Done! " ENDS ** * CURSOR - Create a cursor image. * SCRIPT CURSOR CLEAR ECHO "Creating cursor image..." @A=@ARG @H=[@A] DC @A,I2 COMMENT @A,cursor height @W=[@A+2] DC @A+2,I2 COMMENT @A+2,cursor width @A=@A+4 @N=@H COMMENT @A,cursor image .LOOP1 DC @A.@A+(@W*2)-1 @A=@A+@W*2 @N=@N-1 IF @N>0,LOOP1 @N=@H COMMENT @A,cursor mask .LOOP2 DC @A.@A+(@W*2)-1 @A=@A+@W*2 @N=@N-1 IF @N>0,LOOP2 COMMENT @A,hot spot DC @A.@A+3,I2 ECHO "Done! " ENDS ** * LISTREC - Create a List Record. * SCRIPT LISTREC CLEAR @A=@ARG ECHO "Creating List Record..." RECT @A COMMENT @A,listRect DC @A+8,I2 COMMENT @A+8,listSize DC @A+A,I2 COMMENT @A+A,listView DC @A+C,I2 @T=[@A+C]&0003 ON @T,T00,T01,T10,T11 GO CONT .T00 COMMENT @A+C,listType (Pascal strings/arbitrary selection) GO CONT .T01 COMMENT @A+C,listType (C strings/arbitrary selection) GO CONT .T10 COMMENT @A+C,listType (Pascal strings/single selection) GO CONT .T11 COMMENT @A+C,listType (C strings/single selection) .CONT DC @A+E,I2 COMMENT @A+E,listStart DC @A+10,I4 COMMENT @A+10,listCtl DC @A+14,I4 COMMENT @A+14,listDraw DC @A+18,I2 COMMENT @A+18,listMemHeight DC @A+1A,I2 COMMENT @A+1A,listMemSize DC @A+1C,I4 COMMENT @A+1C,listPtr DC @A+20,I4 COMMENT @A+20,listRefCon DC @A+24,I4 COMMENT @A+24,listScrollClr ECHO "Done! " ENDS ** * DEVICE_HEADER - Create GS/OS device driver header. * SCRIPT DEVICE_HEADER DC 0,I2 COMMENT 0,offset to 1st DIB DC 2,I2 COMMENT 2,number of devices @N=[2] @A=4 .LOOP DC @A,I2 COMMENT @A,offset to configuration list @A=@A+2 @N=@N-1 IF @N>0,LOOP ENDS ** * DIB - Create GS/OS device driver device information block. * SCRIPT DIB @A=@ARG .LOOP DC @A,I4 COMMENT @A,pointer to the next DIB START [@A+4],Dispatch DC @A+4,I4 COMMENT @A+4,driver entry point DC @A+8,I2 COMMENT @A+8,characteristics DC @A+A,I4 COMMENT @A+A,block count DW @A+E COMMENT @A+E,device name IF ([@A+E]&FF)>1E,BIG DC @A+F+([@A+E]&FF).@A+2D,C .BIT DC @A+2E,I2 COMMENT @A+2E,slot number DC @A+30,I2 COMMENT @A+30,unit number DC @A+32,I2 COMMENT @A+32,version DC @A+34,I2 COMMENT @A+34,device ID DC @A+36,I2 COMMENT @A+36,first linked device DC @A+38,I2 COMMENT @A+38,next linked device DC @A+3A,I4 COMMENT @A+3A,extended DIB ptr DC @A+3E,I2 COMMENT @A+3E,device number @A=[@A] IF @A<>0,LOOP ENDS ** * FORMAT_OPTIONS - Create GS/OS device driver format options table. * SCRIPT FORMAT_OPTIONS @A=@ARG DC @A,I2 COMMENT @A,number of options DC @A+2,I2 COMMENT @A+2,number of displayed options DC @A+4,I2 COMMENT @A+4,recommended option DC @A+6,I2 COMMENT @A+6,current media's option @N=[@A] @A=@A+8 .LOOP DC @A,I2 COMMENT @A,-- option number DC @A+2,I2 COMMENT @A+2,linked option DC @A+4,I2 COMMENT @A+4,flags DC @A+6,I4 COMMENT @A+6,block count DC @A+A,I2 COMMENT @A+A,block size (bytes) DC @A+C,I2 COMMENT @A+C,interleave factor DC @A+E,I2 COMMENT @A+E,media size @A=@A+10 @N=@N-1 IF @N>0,LOOP ENDS ** * FST_HEADER - Create GS/OS FST header. * SCRIPT FST_HEADER DC 0.3,C COMMENT 0,FST signature DC 4,I4 COMMENT 4,call handler entry point DC 8,I4 COMMENT 8,GS/OS internal entry point? DC C,I2 COMMENT C,file system ID DC E,I2 COMMENT E,attributes DC 10,I2 COMMENT 10,version DC 12,I2 COMMENT 12,block size DC 14,I4 COMMENT 14,max volume size (blocks) DC 18,I4 DC 1C,I4 COMMENT 1C,max file size (bytes) DC 20,I4 DW 24 COMMENT 24,FST name DC 2B.4B,C DC 4C,I2 DW 4E ENDS ** * JumpTableSeg - Disassemble a jump table segment. * SCRIPT JumpTableSeg IF @SEGKIND=2,BEGIN NOTE "This segment is not a jump table segment." GO .DONE .BEGIN DS 0.7 COMMENT 0,unused @A=8 .LOOP IF (@A+d)>=@SEGLEN,CONE DC @A,I2 COMMENT @A,user ID DC @A+2,I2 COMMENT @A+2,load-file number DC @A+4,I2 COMMENT @A+4,load-segment number DC @A+6,I4 COMMENT @A+6,load-segment offset @A=@A+E GO LOOP .CONT IF @A>=(@SEGLEN-1),DONE DS @A.@SEGLEN-1 .DONE ENDS ** * Create parameter block * SCRIPT GSOS_Create @A=@ARG EXEC GSPARM IF @P<1,ERROR IF @P<8,BEGIN .ERROR EXEC BADPARMS GO DONE SCRIPT P16_CREATE @A=@ARG @GS=0 @P=7 .BEGIN DC @A,I4 COMMENT @A,pathname IF @P<2,DONE DC @A+4,I2 COMMENT @A+4,access IF @P<3,DONE DC @A+6,I2 COMMENT @A+6,file type IF @P<4,DONE DC @A+8,I4 COMMENT @A+8,aux type IF @P<5,DONE DC @A+C,I2 COMMENT @A+C,storage type IF @P<6,DONE IF @GS=0,P16 DC @A+E,I4 COMMENT @A+E,eof IF @P<7,DONE DC @A+12,I4 COMMENT @A+12,resource eof GO DONE .P16 DC @A+E,I2 COMMENT @A+E,create date DC @A+10,I2 COMMENT @A+10,create time .DONE ENDS ** * Destroy parameter block * SCRIPT GSOS_Destroy @A=@ARG EXEC GSPARM IF @P=1,BEGIN EXEC BADPARMS GO DONE SCRIPT P16_DESTROY @A=@ARG .BEGIN DC @A,I4 COMMENT @A,pathname .DONE ENDS ** * OSShutdown parameter block * SCRIPT GSOS_OSShutdown @A=@ARG EXEC GSPARM IF @P=1,BEGIN EXEC BADPARMS GO DONE .BEGIN DC @A,I2 COMMENT @A,shutdown flag .DONE ENDS ** * ChangePath parameter block * SCRIPT GSOS_ChangePath @A=@ARG EXEC GSPARM IF @P=2,BEGIN EXEC BADPARMS GO DONE SCRIPT P16_CHANGE_PATH @A=@ARG .BEGIN DC @A,I4 COMMENT @A,pathname DC @A+4,I4 COMMENT @A+4,new pathname .DONE ENDS ** * Get/SetFileInfo parameter block * SCRIPT GSOS_FileInfo @A=@ARG EXEC GSPARM IF @P<2,ERROR IF @P6,ERROR DC @A,I2 COMMENT @A,file system ID DC @A+2,I2 COMMENT @A+2,type of name DC @A+4,I4 COMMENT @A+4,FST's syntax rules pointer IF @P<4,DONE DC @A+8,I2 COMMENT @A+8,max length of name type IF @P<5,DONE DC @A+A,I4 COMMENT @A+A,pointer to file name IF @P<6,DONE DC @A+E,I2 COMMENT @A+E,name error flags GO DONE .ERROR EXEC BADPARMS .DONE ENDS ** * Volume parameter block * SCRIPT GSOS_Volume @A=@ARG EXEC GSPARM IF @P<2,ERROR IF @P>8,ERROR GO BEGIN SCRIPT P16_VOLUME @A=@ARG @P=5 .BEGIN DC @A,I4 COMMENT @A,device name DC @A+4,I4 COMMENT @A+4,volume name IF @P<3,DONE DC @A+8,I4 COMMENT @A+8,total blocks IF @P<4,DONE DC @A+C,I4 COMMENT @A+C,free blocks IF @P<5,DONE DC @A+10,I2 COMMENT @A+10,file system ID IF @P<6,DONE DC @A+12,I2 COMMENT @A+12,block size IF @P<7,DONE DC @A+14,I2 COMMENT @A+14,characteristics IF @P<8,DONE DC @A+16,I2 COMMENT @A+16,device ID GO DONE .ERROR EXEC BADPARMS .DONE ENDS ** * Get/SetPrefix parameter block * SCRIPT GSOS_Prefix @A=@ARG EXEC GSPARM IF @P<1,ERROR IF @P<3,BEGIN .ERROR EXEC BADPARMS GO DONE SCRIPT P16_PREFIX @A=@ARG .BEGIN DC @A,I2 COMMENT @A,prefix number IF @P<2,DONE DC @A+2,I4 COMMENT @A+2,prefix .DONE ENDS ** * ClearBackupBit parameter block * SCRIPT GSOS_ClearBackupBit @A=@ARG EXEC GSPARM IF @P=1,BEGIN EXEC BADPARMS GO DONE SCRIPT P16_CLEAR_BACKUP_BIT @A=@ARG .BEGIN DC @A,I4 COMMENT @A,pathname .DONE ENDS ** * Get/SetSysPrefs parameter block * SCRIPT GSOS_SysPrefs @A=@ARG EXEC GSPARM IF @P=1,BEGIN EXEC BADPARMS GO DONE .BEGIN DC @A,I2 COMMENT @A,preferences .DONE ENDS ** * Null parameter block * SCRIPT GSOS_Null @A=@ARG EXEC GSPARM ENDS ** * ExpandPath parameter block * SCRIPT GSOS_ExpandPath @A=@ARG EXEC GSPARM IF @P<2,ERROR IF @P<4,BEGIN .ERROR EXEC BADPARMS GO DONE SCRIPT P16_EXPAND_PATH @A=@ARG @P=3 .BEGIN DC @A,I4 COMMENT @A,input pathname DC @A+4,I4 COMMENT @A+4,output pathname IF @P<3,DONE DC @A+8,I2 COMMENT @A+8,flags .DONE ENDS ** * GSOS Open parameter block * SCRIPT GSOS_Open @A=@ARG EXEC GSPARM IF @P<2,ERROR IF @P<10,BEGIN EXEC BADPARMS GO DONE .BEGIN DC @A,I2 COMMENT @A,refNum DC @A+2,I4 COMMENT @A+2,pathname IF @P<3,DONE DC @A+6,I2 COMMENT @A+6,requested access IF @P<4,DONE DC @A+8,I2 COMMENT @A+8,resource number IF @P<5,DONE DC @A+A,I2 COMMENT @A+A,access IF @P<6,DONE DC @A+C,I2 COMMENT @A+C,file type IF @P<7,DONE DC @A+E,I4 COMMENT @A+E,aux type IF @P<8,DONE DC @A+12,I2 COMMENT @A+12,storage type IF @P<9,DONE DC @A+14,I8 COMMENT @A+14,create date/time IF @P0,BEGIN EXEC BADPARMS GO DONE .BEGIN DC @A,I2 COMMENT @A,fileSysID IF @P<2,DONE DC @A+2,I2 COMMENT @A+2,commandNum IF @P<3,DONE COMMENT @A+4,FST Specific parameters .DONE ENDS ** * Add/DelNotifyProc parameter block * SCRIPT GSOS_NotifyProc @A=@ARG EXEC GSPARM IF @P=1,BEGIN EXEC BADPARMS GO DONE .BEGIN DC @A,I4 COMMENT @A,notification procedure pointer ENDS ** * DRename parameter block * SCRIPT GSOS_DRename @A=@ARG EXEC GSPARM IF @P=2,BEGIN EXEC BADPARMS GO DONE .BEGIN DC @A,I2 COMMENT @A,devNum DC @A+2,I4 COMMENT @A+2,strPtr ENDS ** * P16 GET_LAST_DEV parameter block * SCRIPT P16_GET_LAST_DEV @A=@ARG DC @A,I2 COMMENT @A,device number ENDS ** * P16 READ/WRITE_BLOCK parameter block * SCRIPT P16_BLOCK @A=@ARG DC @A,I2 COMMENT @A,device number DC @A+2,I4 COMMENT @A+2,data buffer DC @A+6,I4 COMMENT @A+6,block number ENDS ** * GetStdRefNum parameter block * SCRIPT GSOS_GetStdRefNum @A=@ARG EXEC GSPARM IF @P=2,BEGIN EXEC BADPARMS GO DONE .BEGIN DC @A,I2 COMMENT @A,prefixNum DC @A+2,I4 COMMENT @A+2,refNum ENDS ** * GetRefNum parameter block * SCRIPT GSOS_GetRefNum @A=@ARG EXEC GSPARM IF @P<2,ERROR IF @P<7,BEGIN .ERROR EXEC BADPARMS GO DONE .BEGIN DC @A,I4 COMMENT @A,pathname DC @A+4,I2 COMMENT @A+4,refNum IF @P<3,DONE DC @A+6,I2 COMMENT @A+6,access IF @P<4,DONE DC @A+8,I2 COMMENT @A+8,resNum IF @P<5,DONE DC @A+A,I2 COMMENT @A+A,caseSense IF @P<6,DONE DC @A+C,I2 COMMENT @A+C,displacement .DONE ENDS ** * GetRefInfo parameter block * SCRIPT GSOS_GetRefInfo @A=@ARG EXEC GSPARM IF @P<2,ERROR IF @P<6,BEGIN .ERROR EXEC BADPARMS GO DONE .BEGIN DC @A,I2 COMMENT @A,file reference number DC @A+2,I2 COMMENT @A+2,access IF @P<3,DONE DC @A+4,I4 COMMENT @A+4,file's pathname IF @P<4,DONE DC @A+8,I2 COMMENT @A+8,resource fork flag IF @P<5,DONE DC @A+A,I2 COMMENT @A,file's level .DONE ENDS ** * SetStdRefNum parameter block * SCRIPT GSOS_SetStdRefNum @A=@ARG EXEC GSPARM IF @P=2,BEGIN .ERROR EXEC BADPARMS GO DONE .BEGIN DC @A,I2 COMMENT @A,decimal prefix number DC @A+2,I2 COMMENT @A,reference number ENDS ** * GSOS_Buffer - GS/OS result buffer * SCRIPT GSOS_Result_Buffer @A=@ARG DC @A,I COMMENT @A,buffer size @P=@A+[@A]-1 DC @A+2,I COMMENT @A+2,length DS @A+4.@P COMMENT @A+4,data ENDS ** * GSPARM - Get and show parameter count * SCRIPT GSPARM @P=[@A] DC @A,I2 COMMENT @A,pCount @A=@A+2 @GS=1 ENDS ** * BADPARMS - give invalid parameter count message * SCRIPT BADPARMS NOTE "Invalid parameter count" ENDS ** * SHELL_Get, Set Lang * SCRIPT SHELL_LanguageGS @A=@ARG EXEC GSPARM IF @P=1,BEGIN EXEC BADPARMS GO DONE SCRIPT SHELL_Language @A=@ARG .BEGIN DC @A,I2 COMMENT @A,Language number .DONE ENDS ** * SHELL_Error * SCRIPT SHELL_ErrorGS @A=@ARG EXEC GSPARM IF @P=1,BEGIN EXEC BADPARMS GO DONE SCRIPT SHELL_Error @A=@ARG .BEGIN DC @A,I2 COMMENT @A,Error number .DONE ENDS ** * SHELL_Variable * SCRIPT SHELL_VariableGS @A=@ARG EXEC GSPARM IF @P=3,BEGIN EXEC BADPARMS GO DONE SCRIPT SHELL_Variable @A=@ARG @P=2 .BEGIN DC @A,I4 COMMENT @A,Variable name DC @A+4,I4 COMMENT @A+4,Variable value IF @P<3,DONE DC @A+8,I2 COMMENT @A+8,export .DONE ENDS ** * SHELL_Version * SCRIPT SHELL_VersionGS @A=@ARG EXEC GSPARM IF @P=1,BEGIN EXEC BADPARMS GO DONE SCRIPT SHELL_Version @A=@ARG .BEGIN DC @A,I4 COMMENT @A,Version number .DONE ENDS ** * SHELL_ReadIndexed * SCRIPT SHELL_ReadIndexedGS @A=@ARG EXEC GSPARM IF @P=4,BEGIN EXEC BADPARMS GO DONE SCRIPT SHELL_ReadIndexed @A=@ARG @P=3 .BEGIN IF @P<>4,BADPARMS DC @A,I4 COMMENT @A,Variable name DC @A+4,I4 COMMENT @A+4,Variable value DC @A+8,I2 COMMENT @A+8,Index IF @P<4,DONE DC @A+A,I2 COMMENT @A+A,export .DONE ENDS ** * SHELL_InitWildCard * SCRIPT SHELL_InitWildCardGS @A=@ARG EXEC GSPARM IF @P=2,BEGIN EXEC BADPARMS GO DONE SCRIPT SHELL_InitWildCard @A=@ARG .BEGIN DC @A,I4 COMMENT @A,wFilename DC @A+4,I2 COMMENT @A+4,Flags .DONE ENDS ** * SHELL_NextWildCard * SCRIPT SHELL_NextWildCardGS @A=@ARG EXEC GSPARM IF @P<1,ERROR IF @P